В дневных барах приходит бар текущей сесссии. Через параметр skipLast=True можно его не принимать.
This commit is contained in:
@@ -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} с')
|
||||||
|
|||||||
Reference in New Issue
Block a user