Код |
---|
# ================== 1.Параметры ================== CLASS_CODE = "SPBFUT" # Код класса SEC_CODE = "RIH5" # Код инструмента # ================== 6. Определение типа коллбэка ================== TRANS2QUIK_TRADE_STATUS_CALLBACK_TYPE = ctypes.WINFUNCTYPE( None, # void ctypes.c_long, # int nMode ctypes.c_double, # double dNumber ctypes.c_double, # double dOrderNumber ctypes.c_char_p, # char* ClassCode ctypes.c_char_p, # char* SecCode ctypes.c_double, # double dPrice ctypes.c_long, # int nQty ctypes.c_double, # double dValue ctypes.c_int, # int nIsSell ctypes.c_long # void* pTradeDescriptor ) # ================== 7. Функция обратного вызова для получения сделок ================== def trade_status_callback(n_mode, d_number, d_order_num, class_code, sec_code, d_price, n_qty, d_value, n_is_sell, p_trade_descr): print("Получена сделка:") print(f" Mode: {n_mode}") print(f" Number: {d_number}") print(f" Order Number: {d_order_num}") print(f" Class Code: {class_code.decode('cp1251') if class_code else ''}") # Декодируем class_code, если он есть print(f" Security Code: {sec_code.decode('cp1251') if sec_code else ''}") # Декодируем sec_code, если он есть print(f" Price: {d_price}") print(f" Quantity: {n_qty}") print(f" Value: {d_value}") print(f" Is Sell: {n_is_sell}") print(f" Trade Descriptor: {p_trade_descr}") return # ================== 7. Функция для преобразования указателя в строку ================== def get_string(p): if p: return ctypes.string_at(p).decode('cp1251') else: return '' # ================== 8. Подписка на сделки ================== def subscribe_trades(dll, functions, class_code, sec_code): """ Подписывается на получение данных о сделках для указанных class_code и sec_code. """ try: subscribe_trades_func = functions["TRANS2QUIK_SUBSCRIBE_TRADES"] # Получаем функцию из словаря # кодируем class_code и sec_code, используя кодировку cp1251, как требует QUIK class_code_encoded = class_code.encode('cp1251') sec_code_encoded = sec_code.encode('cp1251') result = subscribe_trades_func(class_code_encoded, sec_code_encoded) # Вызываем функцию скодированными параметрами if result == 0: print("Успешно подписались на сделки") return True else: print(f"Не удалось подписаться на сделки. Код ошибки: {result}") return False except KeyError as e: print(f"Функция не найдена: {e}") return False # ================== 3.2. Запуск получения данных о сделках ================== def start_get_trades(dll, functions, trade_status_callback,TRANS2QUIK_TRADE_STATUS_CALLBACK_TYPE): """ Запускает процесс получения данных о сделках, используя функцию обратного вызова. """ try: start_trades_func = functions["TRANS2QUIK_START_TRADES"] # Получаем функцию запуска обработки сделок # Преобразуем Python-функцию обратного вызова в C-совместимый указатель c_trade_callback = TRANS2QUIK_TRADE_STATUS_CALLBACK_TYPE(trade_status_callback) # Вызываем функцию, передавая ей указатель на функцию обратного вызова start_trades_func(c_trade_callback) print("Процесс получения сделок запущен") # Выводим сообщение об успешном запуске return True except KeyError as e: print(f"start_get_trades: Функция не найдена: {e}") return False except Exception as e: print(f"start_get_trades: Общая ошибка: {e}") return False |
trans2quik не передает информацию о сделках
trans2quik не передает информацию о сделках
Читают тему
|