Sergey_quik (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
trans2quik не передает информацию о сделках
 
Код
# ================== 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_GET_DLL_VERSION, Не найдена
 
Andrey Golik, ссылку не подскажу. Если у вас есть информация (возвращаясь к вопросу) по поводу способа достоверно узнать версию библиотеки, пожалуйста поделитесь.
TRANS2QUIK_GET_DLL_VERSION, Не найдена
 
Andrey Golik, и все же, как можно программно определить версию dll ?
TRANS2QUIK_GET_DLL_VERSION, Не найдена
 
В версии архива Trans2QuikAPI_1.5_x64.zip отсутствует функция TRANS2QUIK_GET_DLL_VERSION. Читал, что в более ранних версиях она встречалась. В этой связи закрадываются сомнения о свежести trans2quik.dll. Где найти последнюю версию под Quik 11.4.0.54 ?
Страницы: 1
Наверх