Удаление дожи 4-х цен

This commit is contained in:
Игорь Чечет
2022-04-22 14:28:54 +05:00
parent 1f8c6ed2f6
commit 8847a4ab4a
2 changed files with 18 additions and 13 deletions

View File

@@ -5,7 +5,7 @@ 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, skipLast=False): def SaveCandlesToFile(classCode='TQBR', secCodes=('SBER',), timeFrame='D', compression=1, skipLast=False, fourPriceDoji=False):
interval = compression # Для минутных временнЫх интервалов ставим кол-во минут interval = compression # Для минутных временнЫх интервалов ставим кол-во минут
if timeFrame == 'D': # Дневной временной интервал if timeFrame == 'D': # Дневной временной интервал
interval = 1440 # В минутах interval = 1440 # В минутах
@@ -29,7 +29,7 @@ def SaveCandlesToFile(classCode='TQBR', secCodes=('SBER',), timeFrame='D', compr
newBars = qpProvider.GetCandlesFromDataSource(classCode, secCode, interval, 0)["data"] # Получаем все свечки newBars = qpProvider.GetCandlesFromDataSource(classCode, secCode, interval, 0)["data"] # Получаем все свечки
if skipLast: # Для дневных баров мы получаем еще несформировавшийся бар текущей сессии. Он нам не нужен if skipLast: # Для дневных баров мы получаем еще несформировавшийся бар текущей сессии. Он нам не нужен
newBars = newBars[:len(newBars) - 1] # Берем все бары кроме последнего newBars = 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 +38,13 @@ def SaveCandlesToFile(classCode='TQBR', secCodes=('SBER',), timeFrame='D', compr
pdBars = pdBars[['open', 'high', 'low', 'close', 'volume']] # Отбираем нужные колонки pdBars = pdBars[['open', 'high', 'low', 'close', 'volume']] # Отбираем нужные колонки
pdBars.index.name = 'datetime' # Ставим название индекса даты/времени pdBars.index.name = 'datetime' # Ставим название индекса даты/времени
pdBars.volume = pd.to_numeric(pdBars.volume, downcast='integer') # Объемы могут быть только целыми pdBars.volume = pd.to_numeric(pdBars.volume, downcast='integer') # Объемы могут быть только целыми
print(f'- Первая запись в QUIK: {pdBars.index[0]}') if not fourPriceDoji: # Если удаляем дожи 4-х цен
print(f'- Последняя запись в QUIK: {pdBars.index[-1]}') l = len(pdBars) # Кол-во записей до удаления дожи
print(f'- Кол-во записей в QUIK: {len(pdBars)}') pdBars.drop(pdBars[(pdBars.high == pdBars.low)].index, inplace=True) # Удаляем их по условия High == Low
print('- Удалено дожи 4-х цен:', l - len(pdBars))
print('- Первая запись в QUIK:', pdBars.index[0])
print('- Последняя запись в QUIK:', pdBars.index[-1])
print('- Кол-во записей в 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, убираем дубликаты, сортируем заново
@@ -58,17 +62,18 @@ if __name__ == '__main__': # Точка входа при запуске это
compression2 = 15 compression2 = 15
classCode = 'TQBR' # Акции ММВБ classCode = 'TQBR' # Акции ММВБ
secCodes = ('SBER', 'GMKN', 'GAZP', 'LKOH', 'TATN', 'YNDX', 'TCSG', 'ROSN', 'NVTK', 'MVID', # secCodes = ('GAZP',) # Для тестов
'CHMF', 'POLY', 'OZON', 'ALRS', 'MAIL', 'MTSS', 'NLMK', 'MAGN', 'PLZL', 'MGNT', secCodes = ('GAZP', 'LKOH', 'SBER', 'NVTK', 'YNDX', 'GMKN', 'ROSN', 'MTLR', 'MGNT', 'CHMF',
'MOEX', 'TRMK', 'RUAL', 'SNGS', 'AFKS', 'SBERP', 'SIBN', 'FIVE', 'SNGSP', 'AFLT', 'PHOR', 'VTBR', 'TCSG', 'PLZL', 'ALRS', 'MAGN', 'CBOM', 'SMLT', 'MVID', 'AFLT',
'IRAO', 'PHOR', 'TATNP', 'VTBR', 'QIWI', 'CBOM', 'FEES', 'BELU', 'TRNFP', 'FIXP') # TOP 40 акций ММВБ 'SNGS', 'SBERP', 'NLMK', 'RUAL', 'MTSS', 'TATN', 'MOEX', 'VKCO', 'MTLRP', 'AFKS',
SaveCandlesToFile(classCode, secCodes, skipLast=True) # Получаем дневные бары без последнего бара 'SNGSP', 'PIKK', 'ISKJ', 'OZON', 'POLY', 'HYDR', 'RASP', 'IRAO', 'SIBN', 'FESH') # TOP 40 акций ММВБ
SaveCandlesToFile(classCode, secCodes, skipLast=True, fourPriceDoji=True) # Получаем дневные бары без последнего бара с дожи 4-х цен
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 = ('SiM2', 'RIM2') # Формат фьючерса: <Тикер><Месяц экспирации><Последняя цифра года> Месяц экспирации: 3-H, 6-M, 9-U, 12-Z
SaveCandlesToFile(classCode, secCodes, skipLast=True) # Получаем дневные бары без последнего бара SaveCandlesToFile(classCode, secCodes, skipLast=True, fourPriceDoji=True) # Получаем дневные бары без последнего бара с дожи 4-х цен
SaveCandlesToFile(classCode, secCodes, timeFrame, compression1) # Получаем 5-и минутные бары SaveCandlesToFile(classCode, secCodes, timeFrame, compression1) # Получаем 5-и минутные бары
SaveCandlesToFile(classCode, secCodes, timeFrame, compression2) # Получаем 15-и минутные бары SaveCandlesToFile(classCode, secCodes, timeFrame, compression2) # Получаем 15-и минутные бары

View File

@@ -17,7 +17,7 @@
1. **Connect.py** - Подключение к терминалу QUIK. Singleton класс коннектора. Проверка соединения. Сервисные функции. Пользовательские обработчики событий. Просмотр изменений состояния соединения терминала QUIK с сервером брокера. Просмотр изменений параметров. [Видео разбора кода >>>](https://finlab.vip/connectpy/) 1. **Connect.py** - Подключение к терминалу QUIK. Singleton класс коннектора. Проверка соединения. Сервисные функции. Пользовательские обработчики событий. Просмотр изменений состояния соединения терминала QUIK с сервером брокера. Просмотр изменений параметров. [Видео разбора кода >>>](https://finlab.vip/connectpy/)
2. **Accounts.py** - Список всех торговых счетов с лимитами, позициями, заявками и стоп заявками. Аналогично для заданного торгового счета. 2. **Accounts.py** - Список всех торговых счетов с лимитами, позициями, заявками и стоп заявками. Аналогично для заданного торгового счета.
3. **Ticker.py** - Информация о тикере 3. **Ticker.py** - Информация о тикере
4. **Bars.py** - Получение свечек в файл. [Видео разбора кода >>>](https://finlab.vip/barspy/) 4. **Bars.py** - Получение свечек в файл. [Видео разбора кода >>>](https://finlab.vip/barspy/) [Видеоразбор удаления дожи 4-х цен >>>](https://finlab.vip/fourpricedoji/)
5. **Stream.py** - Подписки на получение стакана, обезличенные сделки, новые свечки. [Видео разбора кода >>>](https://finlab.vip/streampy/) 5. **Stream.py** - Подписки на получение стакана, обезличенные сделки, новые свечки. [Видео разбора кода >>>](https://finlab.vip/streampy/)
6. **Transactions.py** - Выставление новой лимитной/рыночной заявки, стоп заявки, отмена заявки. 6. **Transactions.py** - Выставление новой лимитной/рыночной заявки, стоп заявки, отмена заявки.