Path: blob/master/ invest-robot-contest_tinkoff_invest_robot-main/app.py
5925 views
from flask import Flask, jsonify, render_template1from flask import request2from loguru import logger34from settings import settings56from src.algotrading import get_account, glossary7from src.algotrading import get_shares8from src.algotrading import _sandbox_accounts9from src.strategy.macd import macd_test, macd_sandbox_run1011app = Flask(__name__)121314@app.before_request15def before_first_request():16try:17get_account.test_connect()1819except Exception as err:20if "unauthenticated" in err.code.value:21err = """Проверте правильность ввода API токена<br>22И перезапустите сервер"""2324logger.error(f"{err}")25return render_template("error.html", error=err)262728@app.route("/", methods=['GET'])29def show_index():30user_info = get_account.main()3132return render_template("index.html", user_info=user_info)333435@app.route("/instruments", methods=['GET'])36def show_instruments():37shares = get_shares.main()3839return render_template("instruments.html", thead=glossary.thead, shares=shares)404142############################# sandbox ##################################43@app.route("/sandbox", methods=['GET'])44def show_sandbox():45sandbox_accounts = _sandbox_accounts.get()4647return render_template("sandbox.html", sandbox_accounts=sandbox_accounts)484950@app.route("/sandbox/<uuid>", methods=['DELETE'])51def delete_sandbox_account(uuid):52logger.info(f"Получен запрос на удаление account_id={uuid}")53_sandbox_accounts.delete(uuid)5455return "ok", 201565758@app.route("/sandbox/", methods=['POST'])59def open_sandbox_account():60_sandbox_accounts.open()6162return "ok", 201636465@app.route("/sandbox/payin", methods=['POST'])66def sandbox_payin():67data = request.get_json()6869try:70sandbox_id = data['sandbox_id']71ammount = int(data['ammount'])72cur = data['cur']7374except KeyError as err:75logger.warning(f"sandbox_payin: {data=}, {err=}")76return f'{{"error": "Необходимо передать {str(err)}"}}', 4227778except ValueError as err:79logger.warning(f"sandbox_payin: {data=}, {err=}")80return f'{{"error": "параметр ammount принимиет только целые положительные числа"}}', 4228182_sandbox_accounts.payin(sandbox_id, ammount, cur)8384return "ok", 200858687############################# stratgy ##################################88@app.route("/stratgy", methods=['GET'])89def show_stratgy():90sandbox_accounts = _sandbox_accounts.get()91return render_template("stratgy.html", sandbox_accounts=sandbox_accounts,92timeframe=glossary.timeframe)939495@app.route("/stratgy/test", methods=['POST'])96def post_stratgy_test():97data = request.get_json()98data['window_slow'] = int(data['window_slow'])99data['window_fast'] = int(data['window_fast'])100data['window_sign'] = int(data['window_sign'])101data['timeframe'] = int(data['timeframe'])102103result = macd_test(data)104105return result106107108@app.route("/stratgy/sandbox", methods=['POST'])109def post_stratgy_sandbox():110data = request.get_json()111data['window_slow'] = int(data['window_slow'])112data['window_fast'] = int(data['window_fast'])113data['window_sign'] = int(data['window_sign'])114data['timeframe'] = int(data['timeframe'])115116result = macd_sandbox_run(data)117118return result119120121############################# info ##################################122@app.route("/info", methods=['GET'])123def show_info():124return render_template("info.html")125126127@app.route("/test", methods=['GET'])128def show_test():129return render_template("test.html")130131132if __name__ == '__main__':133app.run(host=settings.flask_run_host, port=settings.flask_run_port, debug=True)134135136