Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_tinkoff_invest_competition-master/app/parameters_of_trading.py
7824 views
1
import sys
2
import pandas as pd
3
import datetime
4
import tinvest as ti
5
from datetime import timedelta
6
7
client = ti.SyncClient(config.token_tinkoff_invest())
8
9
10
"""Профит-значение по позициям без учета комиссии"""
11
def profit_value():
12
return 1.1
13
14
"""Лимит всех позиций"""
15
def limit_all_position():
16
return 100
17
18
"""Лимит шага усреднения"""
19
def limit_of_step_average():
20
return 10
21
22
"""Лимит по усредненному rsi_ в данной итерации универсален для всего трейдинга"""
23
def limit_rsi_on_stock():
24
return 80
25
26
"""Величина позиции ордера - если цена больше лимита - покупка 1 акции, если меньше - рассчитывается
27
величина позиции в акциях
28
"""
29
def position_of_stocks(price, limit_of_average_step):
30
if price > limit_of_average_step:
31
return 1
32
else:
33
position = round(limit_of_average_step/price)
34
return position
35
36
"""current_price*position_of_average - вычитается из-за особенностей расчета payment-а - последний ордер всегда не считается"""
37
def sell_after_average_price_evalute(profit_value, current_price, payment, position_of_stock_before, position_of_average):
38
return round(profit_value*abs((payment - current_price*position_of_average)/(position_of_stock_before + position_of_average)),2)
39
40
"""Выход из day-trading - в 23-05"""
41
def exit():
42
sys.exit()
43
44
"""Минутки для ежедневного серчинга"""
45
def get_figi_data(figi: str, i) -> pd.DataFrame:
46
now = datetime.datetime.now()
47
payload = client.get_market_candles(
48
figi=figi,
49
from_=now - timedelta(days=i),
50
to=now - timedelta(days=i-1),
51
interval=ti.CandleResolution.min1,
52
).payload
53
return pd.DataFrame(c.dict() for c in payload.candles)
54
55
def param_frequency_threshold():
56
return 1
57
58
"""First value"""
59
def first_time_profit_value():
60
return 1.1
61
62
63
"""Первый заход в позицию"""
64
def lots_of_first_buy(price):
65
if price > 90:
66
return 1
67
else:
68
return round(90/price)
69
70
71
72
73
74