В дневных барах приходит бар текущей сесссии. Через параметр skipLast=True можно его не принимать.

This commit is contained in:
Игорь Чечет
2021-11-29 17:34:46 +05:00
parent 277d090e82
commit 8702319161

View File

@@ -1,10 +1,11 @@
from time import time from time import time
import os.path import os.path
import pandas as pd import pandas as pd
from QuikPy import QuikPy # Работа с QUIK из Python через LUA скрипты QuikSharp from QuikPy import QuikPy # Работа с QUIK из Python через LUA скрипты QuikSharp
def SaveCandlesToFile(classCode='TQBR', secCodes=('SBER',), timeFrame='D', compression=1): def SaveCandlesToFile(classCode='TQBR', secCodes=('SBER',), timeFrame='D', compression=1, skipLast=False):
interval = compression # Для минутных временнЫх интервалов ставим кол-во минут interval = compression # Для минутных временнЫх интервалов ставим кол-во минут
if timeFrame == 'D': # Дневной временной интервал if timeFrame == 'D': # Дневной временной интервал
interval = 1440 # В минутах interval = 1440 # В минутах
@@ -27,6 +28,8 @@ def SaveCandlesToFile(classCode='TQBR', secCodes=('SBER',), timeFrame='D', compr
print(f'- Кол-во записей в файле: {len(fileBars)}') print(f'- Кол-во записей в файле: {len(fileBars)}')
newBars = qpProvider.GetCandlesFromDataSource(classCode, secCode, interval, 0)["data"] # Получаем все свечки newBars = qpProvider.GetCandlesFromDataSource(classCode, secCode, interval, 0)["data"] # Получаем все свечки
if skipLast: # Для дневных баров мы получаем еще несформировавшийся бар текущей сессии. Он нам не нужен
newBars = newBars[:len(newBars) - 1] # Берем все бары кроме последнего
pdBars = pd.DataFrame.from_dict(pd.json_normalize(newBars), orient='columns') # Внутренние колонки даты/времени разворачиваем в отдельные колонки pdBars = pd.DataFrame.from_dict(pd.json_normalize(newBars), orient='columns') # Внутренние колонки даты/времени разворачиваем в отдельные колонки
pdBars.rename(columns={'datetime.year': 'year', 'datetime.month': 'month', 'datetime.day': 'day', pdBars.rename(columns={'datetime.year': 'year', 'datetime.month': 'month', 'datetime.day': 'day',
'datetime.hour': 'hour', 'datetime.min': 'minute', 'datetime.sec': 'second'}, 'datetime.hour': 'hour', 'datetime.min': 'minute', 'datetime.sec': 'second'},
@@ -38,9 +41,9 @@ def SaveCandlesToFile(classCode='TQBR', secCodes=('SBER',), timeFrame='D', compr
print(f'- Первая запись в QUIK: {pdBars.index[0]}') print(f'- Первая запись в QUIK: {pdBars.index[0]}')
print(f'- Последняя запись в QUIK: {pdBars.index[-1]}') print(f'- Последняя запись в QUIK: {pdBars.index[-1]}')
print(f'- Кол-во записей в QUIK: {len(pdBars)}') print(f'- Кол-во записей в QUIK: {len(pdBars)}')
if isFileExists: # Если файл существует if isFileExists: # Если файл существует
pdBars = pd.concat([fileBars, pdBars]).drop_duplicates(keep='last').sort_index() # Объединяем файл с данными из QUIK, убираем дубликаты, сортируем заново pdBars = pd.concat([fileBars, pdBars]).drop_duplicates(keep='last').sort_index() # Объединяем файл с данными из QUIK, убираем дубликаты, сортируем заново
pdBars.to_csv(fileName, sep='\t', date_format='%d.%m.%Y %H:%M') pdBars.to_csv(fileName, sep='\t', date_format='%d.%m.%Y %H:%M')
print(f'- В файл {fileName} сохранено записей: {len(pdBars)}') print(f'- В файл {fileName} сохранено записей: {len(pdBars)}')
@@ -59,15 +62,15 @@ if __name__ == '__main__': # Точка входа при запуске это
'CHMF', 'POLY', 'OZON', 'ALRS', 'MAIL', 'MTSS', 'NLMK', 'MAGN', 'PLZL', 'MGNT', 'CHMF', 'POLY', 'OZON', 'ALRS', 'MAIL', 'MTSS', 'NLMK', 'MAGN', 'PLZL', 'MGNT',
'MOEX', 'TRMK', 'RUAL', 'SNGS', 'AFKS', 'SBERP', 'SIBN', 'FIVE', 'SNGSP', 'AFLT', 'MOEX', 'TRMK', 'RUAL', 'SNGS', 'AFKS', 'SBERP', 'SIBN', 'FIVE', 'SNGSP', 'AFLT',
'IRAO', 'PHOR', 'TATNP', 'VTBR', 'QIWI', 'CBOM', 'FEES', 'BELU', 'TRNFP', 'FIXP') # TOP 40 акций ММВБ 'IRAO', 'PHOR', 'TATNP', 'VTBR', 'QIWI', 'CBOM', 'FEES', 'BELU', 'TRNFP', 'FIXP') # TOP 40 акций ММВБ
SaveCandlesToFile(classCode, secCodes) # По умолчанию получаем дневные бары SaveCandlesToFile(classCode, secCodes, skipLast=True) # Получаем дневные бары без последнего бара
SaveCandlesToFile(classCode, secCodes, timeFrame, compression1) # Получаем 5-и минутные бары SaveCandlesToFile(classCode, secCodes, timeFrame, compression1) # Получаем 5-и минутные бары
SaveCandlesToFile(classCode, secCodes, timeFrame, compression2) # Получаем 15-и минутные бары SaveCandlesToFile(classCode, secCodes, timeFrame, compression2) # Получаем 15-и минутные бары
classCode = 'SPBFUT' # Фьючерсы РТС classCode = 'SPBFUT' # Фьючерсы РТС
secCodes = ('SiH2', 'RIH2') # Формат фьючерса: <Тикер><Месяц экспирации><Последняя цифра года> Месяц экспирации: 3-H, 6-M, 9-U, 12-Z secCodes = ('SiH2', 'RIH2') # Формат фьючерса: <Тикер><Месяц экспирации><Последняя цифра года> Месяц экспирации: 3-H, 6-M, 9-U, 12-Z
SaveCandlesToFile(classCode, secCodes) # По умолчанию получаем дневные бары SaveCandlesToFile(classCode, secCodes, skipLast=True) # Получаем дневные бары без последнего бара
SaveCandlesToFile(classCode, secCodes, timeFrame, compression1) # Получаем 5-и минутные бары SaveCandlesToFile(classCode, secCodes, timeFrame, compression1) # Получаем 5-и минутные бары
SaveCandlesToFile(classCode, secCodes, timeFrame, compression2) # Получаем 15-и минутные бары SaveCandlesToFile(classCode, secCodes, timeFrame, compression2) # Получаем 15-и минутные бары
qpProvider.CloseConnectionAndThread() # Перед выходом закрываем соединение и поток QuikPy из любого экземпляра qpProvider.CloseConnectionAndThread() # Перед выходом закрываем соединение и поток QuikPy из любого экземпляра
print(f'Скрипт выполнен за {time() - startTime} с') print(f'Скрипт выполнен за {(time() - startTime):.2f} с')