QUIKPy звуковое оповещение при поступлении новых данных
This commit is contained in:
@@ -1,7 +1,15 @@
|
||||
from datetime import datetime
|
||||
import os
|
||||
import time # Подписка на события по времени
|
||||
from QuikPy import QuikPy # Работа с QUIK из Python через LUA скрипты QuikSharp
|
||||
|
||||
from pydub import AudioSegment
|
||||
from pydub.playback import play
|
||||
|
||||
sound_audio = None
|
||||
|
||||
play_audio_alert = False
|
||||
|
||||
|
||||
def PrintCallback(data):
|
||||
"""Пользовательский обработчик событий:
|
||||
@@ -9,6 +17,8 @@ def PrintCallback(data):
|
||||
- Получение обезличенной сделки
|
||||
- Получение новой свечки
|
||||
"""
|
||||
if play_audio_alert:
|
||||
play(sound_audio) # звуковое оповещение о новых данных
|
||||
print(f'{datetime.now().strftime("%d.%m.%Y %H:%M:%S")} - {data["data"]}') # Печатаем полученные данные
|
||||
|
||||
def ChangedConnection(data):
|
||||
@@ -19,14 +29,21 @@ def ChangedConnection(data):
|
||||
print(f'{datetime.now().strftime("%d.%m.%Y %H:%M:%S")} - {data}') # Печатаем полученные данные
|
||||
|
||||
if __name__ == '__main__': # Точка входа при запуске этого скрипта
|
||||
qpProvider = QuikPy() # Вызываем конструктор QuikPy с подключением к локальному компьютеру с QUIK
|
||||
# qpProvider = QuikPy() # Вызываем конструктор QuikPy с подключением к локальному компьютеру с QUIK
|
||||
# qpProvider = QuikPy(Host='<Ваш IP адрес>') # Вызываем конструктор QuikPy с подключением к удаленному компьютеру с QUIK
|
||||
host = os.getenv("QUIK_HOST_0")
|
||||
qpProvider = QuikPy(Host=host) # Вызываем конструктор QuikPy с подключением к удаленному компьютеру с QUIK
|
||||
|
||||
# classCode = 'TQBR' # Класс тикера
|
||||
# secCode = 'GAZP' # Тикер
|
||||
play_audio_alert = True
|
||||
|
||||
classCode = 'SPBFUT' # Класс тикера
|
||||
secCode = 'SiH2' # Для фьючерсов: <Код тикера><Месяц экспирации: 3-H, 6-M, 9-U, 12-Z><Последняя цифра года>
|
||||
if play_audio_alert:
|
||||
sound_audio = AudioSegment.from_file('../Sounds/alert_sound.wav')
|
||||
|
||||
classCode = 'TQBR' # Класс тикера
|
||||
secCode = 'GAZP' # Тикер
|
||||
|
||||
# classCode = 'SPBFUT' # Класс тикера
|
||||
# secCode = 'SiH2' # Для фьючерсов: <Код тикера><Месяц экспирации: 3-H, 6-M, 9-U, 12-Z><Последняя цифра года>
|
||||
|
||||
# Запрос текущего стакана. Чтобы получать, в QUIK открыть Таблицу Котировки, указать тикер
|
||||
# print(f'Текущий стакан {classCode}.{secCode}:', qpProvider.GetQuoteLevel2(classCode, secCode)['data'])
|
||||
@@ -42,32 +59,32 @@ if __name__ == '__main__': # Точка входа при запуске это
|
||||
# print('Статус подписки:', qpProvider.IsSubscribedLevel2Quotes(classCode, secCode)['data'])
|
||||
# qpProvider.OnQuote = qpProvider.DefaultHandler # Возвращаем обработчик по умолчанию
|
||||
|
||||
# Обезличенные сделки. Чтобы получать, в QUIK открыть Таблицу обезличенных сделок, указать тикер
|
||||
# qpProvider.OnAllTrade = PrintCallback # Обработчик получения обезличенной сделки
|
||||
# sleepSec = 1 # Кол-во секунд получения обезличенных сделок
|
||||
# print('Секунд обезличенных сделок:', sleepSec)
|
||||
# time.sleep(sleepSec) # Ждем кол-во секунд получения обезличенных сделок
|
||||
# qpProvider.OnAllTrade = qpProvider.DefaultHandler # Возвращаем обработчик по умолчанию
|
||||
""" Обезличенные сделки. Чтобы получать, в QUIK открыть Таблицу обезличенных сделок, указать тикер """
|
||||
qpProvider.OnAllTrade = PrintCallback # Обработчик получения обезличенной сделки
|
||||
sleepSec = 180 # Кол-во секунд получения обезличенных сделок
|
||||
print('Секунд обезличенных сделок:', sleepSec)
|
||||
time.sleep(sleepSec) # Ждем кол-во секунд получения обезличенных сделок
|
||||
qpProvider.OnAllTrade = qpProvider.DefaultHandler # Возвращаем обработчик по умолчанию
|
||||
|
||||
# Просмотр изменений состояния соединения терминала QUIK с сервером брокера
|
||||
qpProvider.OnConnected = ChangedConnection # Нажимаем кнопку "Установить соединение" в QUIK
|
||||
qpProvider.OnDisconnected = ChangedConnection # Нажимаем кнопку "Разорвать соединение" в QUIK
|
||||
|
||||
# Подписка на новые свечки. При первой подписке получим все свечки с начала прошлой сессии
|
||||
# TODO В QUIK 9.2.13.15 перестала работать повторная подписка на минутные бары. Остальные работают
|
||||
""" Подписка на новые свечки. При первой подписке получим все свечки с начала прошлой сессии """
|
||||
# TODO В QUIK 9.2.13.15 перестала работать повторная подписка на минутные бары. Остальные работают #
|
||||
# Перед повторной подпиской нужно перезапустить скрипт QuikSharp.lua Подписка станет первой, все заработает
|
||||
qpProvider.OnNewCandle = PrintCallback # Обработчик получения новой свечки
|
||||
for interval in (60,): # (1, 60, 1440) = Минутки, часовки, дневки
|
||||
print(f'Подписка на интервал {interval}:', qpProvider.SubscribeToCandles(classCode, secCode, interval)['data'])
|
||||
print(f'Статус подписки на интервал {interval}:', qpProvider.IsSubscribed(classCode, secCode, interval)['data'])
|
||||
input('Enter - отмена\n')
|
||||
for interval in (60,): # (1, 60, 1440) = Минутки, часовки, дневки
|
||||
print(f'Отмена подписки на интервал {interval}', qpProvider.UnsubscribeFromCandles(classCode, secCode, interval)['data'])
|
||||
print(f'Статус подписки на интервал {interval}:', qpProvider.IsSubscribed(classCode, secCode, interval)['data'])
|
||||
qpProvider.OnNewCandle = qpProvider.DefaultHandler # Возвращаем обработчик по умолчанию
|
||||
# qpProvider.OnNewCandle = PrintCallback # Обработчик получения новой свечки
|
||||
# for interval in (60,): # (1, 60, 1440) = Минутки, часовки, дневки
|
||||
# print(f'Подписка на интервал {interval}:', qpProvider.SubscribeToCandles(classCode, secCode, interval)['data'])
|
||||
# print(f'Статус подписки на интервал {interval}:', qpProvider.IsSubscribed(classCode, secCode, interval)['data'])
|
||||
# input('Enter - отмена\n')
|
||||
# for interval in (60,): # (1, 60, 1440) = Минутки, часовки, дневки
|
||||
# print(f'Отмена подписки на интервал {interval}', qpProvider.UnsubscribeFromCandles(classCode, secCode, interval)['data'])
|
||||
# print(f'Статус подписки на интервал {interval}:', qpProvider.IsSubscribed(classCode, secCode, interval)['data'])
|
||||
# qpProvider.OnNewCandle = qpProvider.DefaultHandler # Возвращаем обработчик по умолчанию
|
||||
|
||||
qpProvider.OnConnected = qpProvider.DefaultHandler # Возвращаем обработчик по умолчанию
|
||||
qpProvider.OnDisconnected = qpProvider.DefaultHandler # Возвращаем обработчик по умолчанию
|
||||
# qpProvider.OnConnected = qpProvider.DefaultHandler # Возвращаем обработчик по умолчанию
|
||||
# qpProvider.OnDisconnected = qpProvider.DefaultHandler # Возвращаем обработчик по умолчанию
|
||||
|
||||
# Выход
|
||||
qpProvider.CloseConnectionAndThread() # Перед выходом закрываем соединение и поток QuikPy из любого экземпляра
|
||||
|
||||
Reference in New Issue
Block a user