Path: blob/master/ invest-robot-contest_trading_bot-master/trading/candles/get_candles.py
5935 views
from tinkoff.invest import Client, CandleInterval1from trading import trade_help2from config.personal_data import get_token3from datetime import datetime, timedelta4from pandas import DataFrame5import pandas as pd6import matplotlib.pyplot as plt78"""9Тут представлены функции для получения свечей различных интервалов10"""1112'''13Функция для получения часовых свечей за неделю1415API Tinkoff позволяет получить часовые свечи только за неделю.16Для оптимизации когда было решено ввести переменную week, которая будет прибавлять/убавлять17необходимое количество недель18'''192021def get_candles_hour(figi, user_id, week=0):22with Client(get_token(user_id)) as client:23candles = client.market_data.get_candles(24figi=figi,25from_=datetime.utcnow() - timedelta(days=7 + 7 * week),26to=datetime.utcnow() - timedelta(days=7 * week),27interval=CandleInterval.CANDLE_INTERVAL_HOUR28)2930return candles313233'''34Функция для получения минутных свечей за час35'''363738def get_candles_1_min(figi, user_id):39with Client(get_token(user_id)) as client:40candles = client.market_data.get_candles(41figi=figi,42from_=datetime.utcnow() - timedelta(hours=24),43to=datetime.utcnow(),44interval=CandleInterval.CANDLE_INTERVAL_1_MIN45)4647return candles484950'''51Функция для получения 5 минутных свечей за час52'''535455def get_candles_5_min(figi, user_id):56with Client(get_token(user_id)) as client:57candles = client.market_data.get_candles(58figi=figi,59from_=datetime.utcnow() - timedelta(hours=24),60to=datetime.utcnow(),61interval=CandleInterval.CANDLE_INTERVAL_5_MIN62)6364return candles656667'''68Функция для получения 15 минутных свечей за час69'''707172def get_candles_15_min(figi, user_id, days=0):73with Client(get_token(user_id)) as client:74candles = client.market_data.get_candles(75figi=figi,76from_=datetime.utcnow() - timedelta(hours=24 + 24 * days),77to=datetime.utcnow() - timedelta(hours=24 * days),78interval=CandleInterval.CANDLE_INTERVAL_15_MIN79)8081return candles828384'''85Функция для получения дневных свечей за год86'''878889def get_candles_day(figi, user_id):90with Client(get_token(user_id)) as client:91candles = client.market_data.get_candles(92figi=figi,93from_=datetime.utcnow() - timedelta(days=365),94to=datetime.utcnow(),95interval=CandleInterval.CANDLE_INTERVAL_DAY96)9798return candles99100101'''102Функция для перевода свечи в ДатаФрейм103104Было решено отформатировать формат времени, для более красивого оформления графика105'''106107108def get_candles_df(candles):109candle_df = DataFrame([110{111'time': i.time,112'time_graph': i.time.strftime('%d.%m.%Y'),113'hour_graph': i.time.strftime('%H:%M'), # Будет использоваться для построения plot114'orders': i.volume,115'open': trade_help.quotation_to_float(i.open),116'close': trade_help.quotation_to_float(i.close),117'high': trade_help.quotation_to_float(i.high),118'low': trade_help.quotation_to_float(i.low),119} for i in candles.candles120121])122123return candle_df124125126'''127Функция для построения часового графика128'''129130131def create_hour_graph(figi, user_id, week=0, save=True):132candle_df = DataFrame()133134for i in range(week, -1, -1):135c = get_candles_hour(figi, user_id, i)136df = get_candles_df(c)137candle_df = pd.concat([candle_df, df], ignore_index=True)138139if save:140plt.savefig(f"img/graph.png")141142return candle_df143144145def create_15_min_graph(figi, user_id, days=0, save=True):146candle_df = DataFrame()147148for i in range(days, -1, -1):149c = get_candles_15_min(figi, user_id, i)150df = get_candles_df(c)151candle_df = pd.concat([candle_df, df], ignore_index=True)152153if save:154plt.savefig(f"img/graph.png")155156return candle_df157158159