Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_tinkoff_invest_robot-main/app.py
5925 views
1
from flask import Flask, jsonify, render_template
2
from flask import request
3
from loguru import logger
4
5
from settings import settings
6
7
from src.algotrading import get_account, glossary
8
from src.algotrading import get_shares
9
from src.algotrading import _sandbox_accounts
10
from src.strategy.macd import macd_test, macd_sandbox_run
11
12
app = Flask(__name__)
13
14
15
@app.before_request
16
def before_first_request():
17
try:
18
get_account.test_connect()
19
20
except Exception as err:
21
if "unauthenticated" in err.code.value:
22
err = """Проверте правильность ввода API токена<br>
23
И перезапустите сервер"""
24
25
logger.error(f"{err}")
26
return render_template("error.html", error=err)
27
28
29
@app.route("/", methods=['GET'])
30
def show_index():
31
user_info = get_account.main()
32
33
return render_template("index.html", user_info=user_info)
34
35
36
@app.route("/instruments", methods=['GET'])
37
def show_instruments():
38
shares = get_shares.main()
39
40
return render_template("instruments.html", thead=glossary.thead, shares=shares)
41
42
43
############################# sandbox ##################################
44
@app.route("/sandbox", methods=['GET'])
45
def show_sandbox():
46
sandbox_accounts = _sandbox_accounts.get()
47
48
return render_template("sandbox.html", sandbox_accounts=sandbox_accounts)
49
50
51
@app.route("/sandbox/<uuid>", methods=['DELETE'])
52
def delete_sandbox_account(uuid):
53
logger.info(f"Получен запрос на удаление account_id={uuid}")
54
_sandbox_accounts.delete(uuid)
55
56
return "ok", 201
57
58
59
@app.route("/sandbox/", methods=['POST'])
60
def open_sandbox_account():
61
_sandbox_accounts.open()
62
63
return "ok", 201
64
65
66
@app.route("/sandbox/payin", methods=['POST'])
67
def sandbox_payin():
68
data = request.get_json()
69
70
try:
71
sandbox_id = data['sandbox_id']
72
ammount = int(data['ammount'])
73
cur = data['cur']
74
75
except KeyError as err:
76
logger.warning(f"sandbox_payin: {data=}, {err=}")
77
return f'{{"error": "Необходимо передать {str(err)}"}}', 422
78
79
except ValueError as err:
80
logger.warning(f"sandbox_payin: {data=}, {err=}")
81
return f'{{"error": "параметр ammount принимиет только целые положительные числа"}}', 422
82
83
_sandbox_accounts.payin(sandbox_id, ammount, cur)
84
85
return "ok", 200
86
87
88
############################# stratgy ##################################
89
@app.route("/stratgy", methods=['GET'])
90
def show_stratgy():
91
sandbox_accounts = _sandbox_accounts.get()
92
return render_template("stratgy.html", sandbox_accounts=sandbox_accounts,
93
timeframe=glossary.timeframe)
94
95
96
@app.route("/stratgy/test", methods=['POST'])
97
def post_stratgy_test():
98
data = request.get_json()
99
data['window_slow'] = int(data['window_slow'])
100
data['window_fast'] = int(data['window_fast'])
101
data['window_sign'] = int(data['window_sign'])
102
data['timeframe'] = int(data['timeframe'])
103
104
result = macd_test(data)
105
106
return result
107
108
109
@app.route("/stratgy/sandbox", methods=['POST'])
110
def post_stratgy_sandbox():
111
data = request.get_json()
112
data['window_slow'] = int(data['window_slow'])
113
data['window_fast'] = int(data['window_fast'])
114
data['window_sign'] = int(data['window_sign'])
115
data['timeframe'] = int(data['timeframe'])
116
117
result = macd_sandbox_run(data)
118
119
return result
120
121
122
############################# info ##################################
123
@app.route("/info", methods=['GET'])
124
def show_info():
125
return render_template("info.html")
126
127
128
@app.route("/test", methods=['GET'])
129
def show_test():
130
return render_template("test.html")
131
132
133
if __name__ == '__main__':
134
app.run(host=settings.flask_run_host, port=settings.flask_run_port, debug=True)
135
136