Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_trading_bot-master/trading/candles/get_candles.py
5935 views
1
from tinkoff.invest import Client, CandleInterval
2
from trading import trade_help
3
from config.personal_data import get_token
4
from datetime import datetime, timedelta
5
from pandas import DataFrame
6
import pandas as pd
7
import matplotlib.pyplot as plt
8
9
"""
10
Тут представлены функции для получения свечей различных интервалов
11
"""
12
13
'''
14
Функция для получения часовых свечей за неделю
15
16
API Tinkoff позволяет получить часовые свечи только за неделю.
17
Для оптимизации когда было решено ввести переменную week, которая будет прибавлять/убавлять
18
необходимое количество недель
19
'''
20
21
22
def get_candles_hour(figi, user_id, week=0):
23
with Client(get_token(user_id)) as client:
24
candles = client.market_data.get_candles(
25
figi=figi,
26
from_=datetime.utcnow() - timedelta(days=7 + 7 * week),
27
to=datetime.utcnow() - timedelta(days=7 * week),
28
interval=CandleInterval.CANDLE_INTERVAL_HOUR
29
)
30
31
return candles
32
33
34
'''
35
Функция для получения минутных свечей за час
36
'''
37
38
39
def get_candles_1_min(figi, user_id):
40
with Client(get_token(user_id)) as client:
41
candles = client.market_data.get_candles(
42
figi=figi,
43
from_=datetime.utcnow() - timedelta(hours=24),
44
to=datetime.utcnow(),
45
interval=CandleInterval.CANDLE_INTERVAL_1_MIN
46
)
47
48
return candles
49
50
51
'''
52
Функция для получения 5 минутных свечей за час
53
'''
54
55
56
def get_candles_5_min(figi, user_id):
57
with Client(get_token(user_id)) as client:
58
candles = client.market_data.get_candles(
59
figi=figi,
60
from_=datetime.utcnow() - timedelta(hours=24),
61
to=datetime.utcnow(),
62
interval=CandleInterval.CANDLE_INTERVAL_5_MIN
63
)
64
65
return candles
66
67
68
'''
69
Функция для получения 15 минутных свечей за час
70
'''
71
72
73
def get_candles_15_min(figi, user_id, days=0):
74
with Client(get_token(user_id)) as client:
75
candles = client.market_data.get_candles(
76
figi=figi,
77
from_=datetime.utcnow() - timedelta(hours=24 + 24 * days),
78
to=datetime.utcnow() - timedelta(hours=24 * days),
79
interval=CandleInterval.CANDLE_INTERVAL_15_MIN
80
)
81
82
return candles
83
84
85
'''
86
Функция для получения дневных свечей за год
87
'''
88
89
90
def get_candles_day(figi, user_id):
91
with Client(get_token(user_id)) as client:
92
candles = client.market_data.get_candles(
93
figi=figi,
94
from_=datetime.utcnow() - timedelta(days=365),
95
to=datetime.utcnow(),
96
interval=CandleInterval.CANDLE_INTERVAL_DAY
97
)
98
99
return candles
100
101
102
'''
103
Функция для перевода свечи в ДатаФрейм
104
105
Было решено отформатировать формат времени, для более красивого оформления графика
106
'''
107
108
109
def get_candles_df(candles):
110
candle_df = DataFrame([
111
{
112
'time': i.time,
113
'time_graph': i.time.strftime('%d.%m.%Y'),
114
'hour_graph': i.time.strftime('%H:%M'), # Будет использоваться для построения plot
115
'orders': i.volume,
116
'open': trade_help.quotation_to_float(i.open),
117
'close': trade_help.quotation_to_float(i.close),
118
'high': trade_help.quotation_to_float(i.high),
119
'low': trade_help.quotation_to_float(i.low),
120
} for i in candles.candles
121
122
])
123
124
return candle_df
125
126
127
'''
128
Функция для построения часового графика
129
'''
130
131
132
def create_hour_graph(figi, user_id, week=0, save=True):
133
candle_df = DataFrame()
134
135
for i in range(week, -1, -1):
136
c = get_candles_hour(figi, user_id, i)
137
df = get_candles_df(c)
138
candle_df = pd.concat([candle_df, df], ignore_index=True)
139
140
if save:
141
plt.savefig(f"img/graph.png")
142
143
return candle_df
144
145
146
def create_15_min_graph(figi, user_id, days=0, save=True):
147
candle_df = DataFrame()
148
149
for i in range(days, -1, -1):
150
c = get_candles_15_min(figi, user_id, i)
151
df = get_candles_df(c)
152
candle_df = pd.concat([candle_df, df], ignore_index=True)
153
154
if save:
155
plt.savefig(f"img/graph.png")
156
157
return candle_df
158
159