Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_TI_API_2-master/Instr_last_candles.py
5918 views
1
from intro.quotation_dt import quotation_count
2
from datetime import datetime, timedelta
3
from pathlib import Path
4
import tinkoff.invest
5
import intro.basek
6
import intro.accid
7
import pandas as pd
8
import time
9
import pandas_ta as ta
10
11
# Здесь запросы токена и id из stub файлов, и самого клиента из библиотеки Тинькофф
12
TOKEN = intro.basek.TINKOFF_INVEST_DOG_NEW
13
SDK_client = tinkoff.invest.Client(TOKEN)
14
User_acc_ID = intro.accid.ACC_ID
15
16
# Здесь переменные по которым будет производиться запрос свечей (Figi инструмента,
17
# интервал данных и месяц, а так же числа за который нужны данные.
18
# Эти значения выбираем вручную из полученного списка инструментов
19
cti_future = 'FUTBR0722000'
20
tf = tinkoff.invest.CandleInterval.CANDLE_INTERVAL_5_MIN
21
start_date = datetime.fromisoformat('2022-04-23T10:00:00') # time from 10 a.m. UTC+3 format: '2022-04-25T13:00:00'
22
end_date = datetime.fromisoformat('2022-05-25T19:00:00') # time to 7 p.m. UTC+3 format: '2022-04-25T13:00:00'
23
24
25
# Функция получения данных свечей по инструменту
26
def current_trade_instrument_candles(cti_figi, interval):
27
try:
28
with SDK_client as client:
29
period = datetime.date(end_date) - datetime.date(start_date)
30
period_days = period.days
31
32
for i in range(0, period_days):
33
current_date = start_date + timedelta(i)
34
start = [current_date.year, current_date.month, current_date.day, start_date.hour, start_date.minute]
35
end = [current_date.year, current_date.month, current_date.day, end_date.hour, end_date.minute]
36
cti_candles = client.market_data.get_candles(
37
figi=cti_figi,
38
from_=datetime(start[0], start[1], start[2], start[3], start[4]),
39
to=datetime(end[0], end[1], end[2], end[3], end[4]),
40
interval=interval
41
)
42
# Обработка запроса по форме
43
candle_df = create_candle_df(cti_candles.candles)
44
if candle_df.empty:
45
continue
46
else:
47
# Добавление индикаторов
48
candle_df['ema'] = ta.ema(candle_df['close'], 10)
49
candle_df['ma'] = ta.sma(candle_df['close'], lenght=10)
50
# Запись полученных данных в табличку
51
# указать название файла соответствующее инструменту
52
filepath = Path('csv_files/instrument_name.csv')
53
df = pd.DataFrame(candle_df)
54
print(df.dtypes)
55
df.to_csv(filepath, mode='a')
56
time.sleep(0.1)
57
print('Record ', i, ' complete')
58
59
df_check = pd.read_csv('csv_files/instrument_name.csv')
60
# Убираем пропуски значений
61
df_check.dropna(inplace=True)
62
# Убираем повторения названий из выгрузки
63
df_check.drop_duplicates(subset=['time', 'volume', 'open', 'close', 'high', 'low'],
64
inplace=True
65
)
66
df_check.drop(columns=['Unnamed: 0'], inplace=True)
67
print(df_check.dtypes)
68
df = df_check.convert_dtypes(infer_objects=True)
69
# Запись полученных данных в табличку
70
# указать название файла соответствующее инструменту
71
filepath = Path('csv_files/instrument_name.csv')
72
print(df.dtypes)
73
df.to_csv(filepath, mode='w')
74
75
return candle_df
76
except tinkoff.invest.RequestError as e:
77
print(str(e))
78
79
80
# Форма для обработки полученных данных
81
def create_candle_df(candles: [tinkoff.invest.HistoricCandle]):
82
candle_df = pd.DataFrame([{
83
'time': pd.Timestamp(c.time),
84
'volume': c.volume,
85
'open': quotation_count(c.open),
86
'close': quotation_count(c.close),
87
'high': quotation_count(c.high),
88
'low': quotation_count(c.low),
89
} for c in candles])
90
return candle_df
91
92
93
ctic = current_trade_instrument_candles(cti_future, tf)
94
95