murzin
Свой человек
Зарегистрирован: 06/06/2010
Сообщений: 47
Нахождение: Эссен
|
|
Подскажите, будьте любезны:
Если мы импортируем транзакции через АПИ, функции обратного вызова - TRANS2QUIK_TRANSACTIONS_REPLY_CALLBACK и TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK - позволяют узнать статус заявки - иполнена она или нет. Или это только для проверки того, выставлена заявка или нет?
Если второе, то как народ узнает чере АПИ, прошла сделка или нет? Спасибо.
|
Spacebar
Генерал
  
Зарегистрирован: 02/07/2007
Сообщений: 1536
Нахождение: Московская область
|
|
Это только результат транзакции - заявка выставлена/отвергнута. Состояние ордера идет через TRANS2QUIK_ORDER_STATUS_CALLBACK, свои сделки - через TRANS2QUIK_TRADE_STATUS_CALLBACK. Для рыночных/лимитных ордеров этого достаточно. Если используются стопы, возможны ситуации, когда стоп успешно выставлен, но при активации ордер отвергнут и никакого ответа не получено (робот продолжает считать стоп активным). Можно, конечно, попытаться "угадывать" по цене или читать из окна сообщений, но, по-моему, надежнее импортировать соответствующие таблицы.
|
murzin
Свой человек
Зарегистрирован: 06/06/2010
Сообщений: 47
Нахождение: Эссен
|
|
Спасибо за ответ! Я оказывается старую инструкцию к квику читал, там этого не было.
|
murzin
Свой человек
Зарегистрирован: 06/06/2010
Сообщений: 47
Нахождение: Эссен
|
|
Извиняюсь, Вы не могли бы пояснить кратко как эти колбэки работают? Не могу понять. Мы передаем через них квику поинтер на функцию? Или просто через них запрашиваем что нужно?
|
Spacebar
Генерал
  
Зарегистрирован: 02/07/2007
Сообщений: 1536
Нахождение: Московская область
|
|
На примере TRANS2QUIK_TRANSACTIONS_REPLY_CALLBACK, остальные реализуются похоже.
При инициализации робота устанавливаем колбек, т.е. вызываем TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK с указателем на написанную нами функцию типа TRANS2QUIK_TRANSACTION_REPLY_CALLBACK. Дальше квик вызывает эту функцию, когда нужно передать состояние транзакции.
В коде как-то примерно так Code:
//описываем колбек - этот вариант просто отправляет сообщение управляющему ордерами потоку void __stdcall QuikTransactionCallback(long nTransactionResult, long exErrorCode, long nReplyCode, DWORD dwTransId, double fOrderNum, LPSTR szReplyMessage) { LOG("QuikTransactionCallback"); TRANSACTION_CALLBACK_DATA * pData = new TRANSACTION_CALLBACK_DATA; pData->lTransactionResult = nTransactionResult; pData->lReplyCode = nReplyCode; pData->dwTransId = dwTransId; pData->fOrderNumber = fOrderNum; PostThreadMessage(g_pBroker->m_dwThreadId, WM_USER_TRANSACTION_CALLBACK, 0, (LPARAM)pData); }
//функция инициализации, в т.ч. и устанавливает колбеки OnInitialize(...) { <...> //устанавливаем колбек транзакций result = TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK((TRANS2QUIK_TRANSACTION_REPLY_CALLBACK)QuikTransactionCallback, &exErrorCode, szErrorMessage, ERROR_MESSAGE_LEN); if(TRANS2QUIK_SUCCESS != result) { //обрабатываем ошибку - не удалось установить колбек } <...>
|
murzin
Свой человек
Зарегистрирован: 06/06/2010
Сообщений: 47
Нахождение: Эссен
|
|
Спасибо, вроде разобрался до сих пор. Непонятный момент - в инструкции написано, что в теле написанной нами колбэк функции можно использовать специальные функции типа long TradeDate (long nTradeDescriptor) и т.д. А где они дифинированы? Как их пользовать? Еще раз спасибо!
|
Spacebar
Генерал
  
Зарегистрирован: 02/07/2007
Сообщений: 1536
Нахождение: Московская область
|
|
Как использовать вроде по прототипам ясно - передаем дескриптор ордера или трейда (последний параметр в TRANS2QUIK_ORDER_STATUS_CALLBACK и TRANS2QUIK_TRADE_STATUS_CALLBACK), получаем искомое значение. Прототипы описаны в trans2quik_api.h
|
Yuriy
Unregistered
|
|
Есть пара вопросов по форексу, плиз!!! помогите. Какое оптимальное количество сделок в день, и на какую сумму, эффективного счета, должна быть каждая ставка. Для получения прибыли 0.1 % в 10 дней?
|