Добрый день! Использую DDE + trans2quik.dll Все нормально работает, но возник вопрос. Установив коллбэк TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK, возможно получить в TRANS2QUIK_CONNECTION_STATUS_CALLBACK следующие значения TRANS2QUIK_DLL_DISCONNECTED TRANS2QUIK_DLL_CONNECTED TRANS2QUIK_QUIK_DISCONNECTED TRANS2QUIK_QUIK_CONNECTED
А какие действия нужно предпринимать, получив эти сообщения? Н-р: TRANS2QUIK_DLL_DISCONNECTED - теряются ли коллбэки и другие настройки? И т.д... Какие сценарии возможны?
Если данные просто выводятся из трёх таблиц (Фьючерсы, Акции и состояние счёта) по DDE, то всё ноормально (проверял 3 суток), НО, если отдаются торговые ассинхронные приказы через trans2quik.dll, то иногда, DDE приёмник "падает" "invalid pointer operation"
Что мешает создать массив, в котором хранить номера уже полученных сделок и при появлении очередной записи сравнивать ее номер с тем который в массиве?
Egor Zaytsev написал Добрый день. Можно различать по номеру сделки.
Нет, нельзя! Дело в том, что на Фондовом рынке нельзя посылать Рыночные ордера, а только Лимитные. И потому возникает следующая проблема (видел сам, делал логирование): Посылая лимитный ордер большого объема, он (очень часто) исполняется не сразу, а частями, совершая множество сделок.
И часто бывает, что в в TRANS2QUIK_TRADE_STATUS_CALLBACK приходят сообщения о ПЕРВОЙ сделке не сразу (подряд), а в разбежку. Н-р
1. Сообщение о ПЕРВОЙ сделке(номер сделки 101) 2. Сообщение о второй сделке(номер сделки 102) 3. Сообщение о второй сделке(номер сделки 102) 4. Сообщение о второй сделке(номер сделки 102) 5. Сообщение о ПЕРВОЙ сделке(номер сделки 101) 6. Сообщение о ТРЕТЬЕЙ сделке(номер сделки 103) 7. Сообщение о ПЕРВОЙ сделке(номер сделки 101)
Круто! (продолжение к TRANS2QUIK_TRADE_STATUS_CALLBACK)
Допустим я продал фьючерс, и покупаю акции на объём фьючерса, но в стакане аций нет нужного объёма для совершения одной сделки (Совкршаются 2 сделки с одинаковым объёмом).
Мне, в TRANS2QUIK_TRADE_STATUS_CALLBACK, придёт 6 сообщений! Как я буду различать в этих сообщениях две разные сделки?
А как может понравится, если всех разработчиков ВОВСЕ не интересует удобство КОНЕЧНЫХ пользователей? МТ хоть и удобный и быстрый, но там ПОЛНО своих косяков, и для каждой секции нужен отдельный терминал. Везде, и здесь и там, необходим "Танец с бубном"!
Зоя! Ваша компания делает ВСЁ ВОЗМОЖНОЕ, чтобы Ваши пользователи не НОРМАЛЬНО пользовались Вашим продуктом, а получали проблемы! Если есть таблица "Состояние счёта", то в ней должны быть доступны все элементы для экспорта!!! Квик и так не очень быстро работает, а Вы делаете всё чтобы ещё больше усложнить конечным пользователям использование!
Zoya Skvorcova написал: Михаил Филимонов, добрый день. Итоговые параметры не выводятся по ДДЕ, Можем предложить либо зарегистрировать пожелание либо выводить параметр НаПокупкуНеМаржин из таблицы Клиентский портфель.
НаПокупкуНеМаржин соответствует итоговому параметру Свободно если речь про фондовый рынок.
Для срочного рынка соответствует значению параметра «План. чист. поз.» в таблице «Ограничения по клиентским счетам»
Добрый день! 1. Как на * (единый брокерский счет) счёте контролировать свободные средства? 2. Почему воодще нельзя создавать пользовательскую таблицу? 3. Пожелание: нужно создать таблицу, в которой будут отображаться все имеющиеся у клиента средства.
Повторный вызов TRANS2QUIK_SUBSCRIBE_TRADES с новыми инструментами игнорируется, Повторный вызов TRANS2QUIK_SUBSCRIBE_TRADES с новыми инструментами не добавляет их в подписку сделок
Михаил Филимонов написал: Планируется, что у меня в приложении DDE + trans2Quik.dll будут работать несколько роботов, в каждом по три инструмента. Получается, чтобы добавить нового робота, я должен выключть 20 остальных!!!!
Повторный вызов TRANS2QUIK_SUBSCRIBE_TRADES с новыми инструментами игнорируется, Повторный вызов TRANS2QUIK_SUBSCRIBE_TRADES с новыми инструментами не добавляет их в подписку сделок
Планируется, что у меня в приложении DDE + trans2Quik.dll будут работать несколько роботов, в каждом по три инструмента. Получается, чтобы добавить нового робота, я должен выключть 20 остальных!!!!
Повторный вызов TRANS2QUIK_SUBSCRIBE_TRADES с новыми инструментами игнорируется, Повторный вызов TRANS2QUIK_SUBSCRIBE_TRADES с новыми инструментами не добавляет их в подписку сделок
Очень странно, что Вы не предусмотрели ситуации, когда не влючён в Терминале импорт тразакций и не правильный путь к пакке Quik! Почему вылетает в эксепшин? Неужели трудно было в ДЛЛ сгенериравать код ошибки????!
//----------------------- CallBack procedures ------------------ TRANS2QUIK_CONNECTION_STATUS_CALLBACK = procedure(nConnectionEvent: long; var nExtendedErrorCode: long; var lpcstrInfoMessage: LPCSTR); stdcall;
TRANS2QUIK_TRANSACTION_REPLY_CALLBACK = procedure(var nTransactionResult: long; var nTransactionExtendedErrorCode: long; var nTransactionReplyCode: long; var dwTransId: DWord; nOrderNum: EntityNumber; var lpcstrTransactionReplyMessage: LPCSTR; var transReplyDescriptor: TransReplyDescr); stdcall;
function LibLoad(const aPath: string): THandle; begin Result:= LoadLibrary(PWideChar(IncludeTrailingPathDelimiter(aPath) + DllName)); @T2QSendSyncTrans := GetProcAddress(Result, PWideChar('TRANS2QUIK_SEND_SYNC_TRANSACTION')); if(addr(T2QSendSyncTrans) = nil) then begin Result:= 0; Exit; end; @T2QSendASyncTrans := GetProcAddress(Result, PWideChar('TRANS2QUIK_SEND_ASYNC_TRANSACTION')); if(addr(T2QSendASyncTrans) = nil) then begin Result:= 0; Exit; end; @T2QConnect:= GetProcAddress(Result, PWideChar('TRANS2QUIK_CONNECT')); if(addr(T2QConnect) = nil) then begin Result:= 0; Exit; end; @T2QDisconnect := GetProcAddress(Result, PWideChar('TRANS2QUIK_DISCONNECT')); if(addr(T2QDisconnect) = nil) then begin Result:= 0; Exit; end; @T2QSetConnStatCallBAck := GetProcAddress(Result, PWideChar('TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK')); if(addr(T2QSetConnStatCallBAck) = nil) then begin Result:= 0; Exit; end; @T2QSetTransReplyCallBAck := GetProcAddress(Result, PWideChar('TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK')); if(addr(T2QSetTransReplyCallBAck) = nil) then begin Result:= 0; Exit; end; @T2QIsQuikConnected := GetProcAddress(Result, PWideChar('TRANS2QUIK_IS_QUIK_CONNECTED')); if(addr(T2QIsQuikConnected) = nil) then begin Result:= 0; Exit; end; @T2QIsDllConnected := GetProcAddress(Result, PWideChar('TRANS2QUIK_IS_DLL_CONNECTED')); if(addr(T2QIsDllConnected) = nil) then begin Result:= 0; Exit; end; @T2QSubscribeOrders := GetProcAddress(Result, PWideChar('TRANS2QUIK_SUBSCRIBE_ORDERS')); if(addr(T2QSubscribeOrders) = nil) then begin Result:= 0; Exit; end; @T2QUnSubscribeOrders := GetProcAddress(Result, PWideChar('TRANS2QUIK_UNSUBSCRIBE_ORDERS')); if(addr(T2QUnSubscribeOrders) = nil) then begin Result:= 0; Exit; end; @T2QStartOrders := GetProcAddress(Result, PWideChar('TRANS2QUIK_START_ORDERS')); if(addr(T2QStartOrders) = nil) then begin Result:= 0; Exit; end; @T2QOrderQty := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_QTY')); if(addr(T2QOrderQty) = nil) then begin Result:= 0; Exit; end; @T2QOrderDate := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_DATE')); if(addr(T2QOrderDate) = nil) then begin Result:= 0; Exit; end; @T2QOrderTime := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_TIME')); if(addr(T2QOrderTime) = nil) then begin Result:= 0; Exit; end; @T2QOrderActiveTime := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_ACTIVATION_TIME')); if(addr(T2QOrderActiveTime) = nil) then begin Result:= 0; Exit; end; @T2QOrderWithdrawTime := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_WITHDRAW_TIME')); if(addr(T2QOrderWithdrawTime) = nil) then begin Result:= 0; Exit; end; @T2QOrderExpiry := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_EXPIRY')); if(addr(T2QOrderExpiry) = nil) then begin Result:= 0; Exit; end; @T2QOrderAccruedInt := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_ACCRUED_INT')); if(addr(T2QOrderAccruedInt) = nil) then begin Result:= 0; Exit; end; @T2QOrderYield := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_YIELD')); if(addr(T2QOrderYield) = nil) then begin Result:= 0; Exit; end; @T2QOrderUid := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_UID')); if(addr(T2QOrderUid) = nil) then begin Result:= 0; Exit; end; @T2QOrderVisibleQty := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_VISIBLE_QTY')); if(addr(T2QOrderVisibleQty) = nil) then begin Result:= 0; Exit; end; @T2QOrderPeriod := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_PERIOD')); if(addr(T2QOrderPeriod) = nil) then begin Result:= 0; Exit; end; @T2QOrderFileTime := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_FILETIME')); if(addr(T2QOrderFileTime) = nil) then begin Result:= 0; Exit; end; @T2QOrderDateTime := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_DATE_TIME')); if(addr(T2QOrderDateTime) = nil) then begin Result:= 0; Exit; end; @T2QOrderWithdrawFileTime := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_WITHDRAW_FILETIME')); if(addr(T2QOrderWithdrawFileTime) = nil) then begin Result:= 0; Exit; end; @T2QOrderValueEntryType := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_VALUE_ENTRY_TYPE')); if(addr(T2QOrderValueEntryType) = nil) then begin Result:= 0; Exit; end; @T2QOrderExtdFlags := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_EXTENDED_FLAGS')); if(addr(T2QOrderExtdFlags) = nil) then begin Result:= 0; Exit; end; @T2QOrderMinQty := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_MIN_QTY')); if(addr(T2QOrderMinQty) = nil) then begin Result:= 0; Exit; end; @T2QOrderExecType := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_EXEC_TYPE')); if(addr(T2QOrderExecType) = nil) then begin Result:= 0; Exit; end; @T2QOrderAwgPrice := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_AWG_PRICE')); if(addr(T2QOrderAwgPrice) = nil) then begin Result:= 0; Exit; end; @T2QOrderUserId := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_USERID')); if(addr(T2QOrderUserId) = nil) then begin Result:= 0; Exit; end; @T2QOrderAccaunt := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_ACCOUNT')); if(addr(T2QOrderAccaunt) = nil) then begin Result:= 0; Exit; end; @T2QOrderBrokerRef := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_BROKERREF')); if(addr(T2QOrderBrokerRef) = nil) then begin Result:= 0; Exit; end; @T2QOrderClientCode := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_CLIENT_CODE')); if(addr(T2QOrderClientCode) = nil) then begin Result:= 0; Exit; end; @T2QOrderFirmId := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_FIRMID')); if(addr(T2QOrderFirmId) = nil) then begin Result:= 0; Exit; end; @T2QOrderRejectReason := GetProcAddress(Result, PWideChar('TRANS2QUIK_ORDER_REJECT_REASON')); if(addr(T2QOrderRejectReason) = nil) then begin Result:= 0; Exit; end; @T2QSubscribeTrades := GetProcAddress(Result, PWideChar('TRANS2QUIK_SUBSCRIBE_TRADES')); if(addr(T2QSubscribeTrades) = nil) then begin Result:= 0; Exit; end; @T2QUnSubscribeTrades := GetProcAddress(Result, PWideChar('TRANS2QUIK_UNSUBSCRIBE_TRADES')); if(addr(T2QUnSubscribeTrades) = nil) then begin Result:= 0; Exit; end; @T2QStartTrades := GetProcAddress(Result, PWideChar('TRANS2QUIK_START_TRADES')); if(addr(T2QStartTrades) = nil) then begin Result:= 0; Exit; end; @T2QTradeDate := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_DATE')); if(addr(T2QTradeDate) = nil) then begin Result:= 0; Exit; end; @T2QTradeSettleDate := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_SETTLE_DATE')); if(addr(T2QTradeSettleDate) = nil) then begin Result:= 0; Exit; end; @T2QTradeTime := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_TIME')); if(addr(T2QTradeTime) = nil) then begin Result:= 0; Exit; end; @T2QTradeIsMarginal := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_IS_MARGINAL')); if(addr(T2QTradeIsMarginal) = nil) then begin Result:= 0; Exit; end; @T2QTradeAccruedInt := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_ACCRUED_INT')); if(addr(T2QTradeAccruedInt) = nil) then begin Result:= 0; Exit; end; @T2QTradeYield := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_YIELD')); if(addr(T2QTradeYield) = nil) then begin Result:= 0; Exit; end; @T2QTradeTSCommission := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_TS_COMMISSION')); if(addr(T2QTradeTSCommission) = nil) then begin Result:= 0; Exit; end; @T2QTradeClCenterCommission := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_TS_COMMISSION')); if(addr(T2QTradeClCenterCommission) = nil) then begin Result:= 0; Exit; end; @T2QTradeExcCommission := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_EXCHANGE_COMMISSION')); if(addr(T2QTradeExcCommission) = nil) then begin Result:= 0; Exit; end; @T2QTradeTrSysCommission := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_TRADING_SYSTEM_COMMISSION')); if(addr(T2QTradeTrSysCommission) = nil) then begin Result:= 0; Exit; end; @T2QTradePrice2 := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_PRICE2')); if(addr(T2QTradePrice2) = nil) then begin Result:= 0; Exit; end; @T2QTradeRepoRate := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_REPO_RATE')); if(addr(T2QTradeRepoRate) = nil) then begin Result:= 0; Exit; end; @T2QTradeRepoValue := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_REPO_VALUE')); if(addr(T2QTradeRepoValue) = nil) then begin Result:= 0; Exit; end; @T2QTradeRepo2Value := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_REPO2_VALUE')); if(addr(T2QTradeRepo2Value) = nil) then begin Result:= 0; Exit; end; @T2QTradeAccruedInt2 := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_ACCRUED_INT2')); if(addr(T2QTradeAccruedInt2) = nil) then begin Result:= 0; Exit; end; @T2QTradeRepoTerm := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_REPO_TERM')); if(addr(T2QTradeRepoTerm) = nil) then begin Result:= 0; Exit; end; @T2QTradeStDiscount := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_START_DISCOUNT')); if(addr(T2QTradeStDiscount) = nil) then begin Result:= 0; Exit; end; @T2QTradeLwDiscount := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_LOWER_DISCOUNT')); if(addr(T2QTradeLwDiscount) = nil) then begin Result:= 0; Exit; end; @T2QTradeUpDiscount := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_UPPER_DISCOUNT')); if(addr(T2QTradeUpDiscount) = nil) then begin Result:= 0; Exit; end; @T2QTradeBlSecur := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_UPPER_DISCOUNT')); if(addr(T2QTradeBlSecur) = nil) then begin Result:= 0; Exit; end; @T2QTradePeriod := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_PERIOD')); if(addr(T2QTradePeriod) = nil) then begin Result:= 0; Exit; end; @T2QTradeKind := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_KIND')); if(addr(T2QTradeKind) = nil) then begin Result:= 0; Exit; end; @T2QTradeFileName := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_FILETIME')); if(addr(T2QTradeFileName) = nil) then begin Result:= 0; Exit; end; @T2QTradeDateTime := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_DATE_TIME')); if(addr(T2QTradeDateTime) = nil) then begin Result:= 0; Exit; end; @T2QTradeBrCommission := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_BROKER_COMMISSION')); if(addr(T2QTradeBrCommission) = nil) then begin Result:= 0; Exit; end; @T2QTradeTransId := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_TRANSID')); if(addr(T2QTradeTransId) = nil) then begin Result:= 0; Exit; end; @T2QTradeCurrensy := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_CURRENCY')); if(addr(T2QTradeCurrensy) = nil) then begin Result:= 0; Exit; end; @T2QTradeSettlCurr := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_SETTLE_CURRENCY')); if(addr(T2QTradeSettlCurr) = nil) then begin Result:= 0; Exit; end; @T2QTradeSettlCode := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_SETTLE_CODE')); if(addr(T2QTradeSettlCode) = nil) then begin Result:= 0; Exit; end; @T2QTradeAccount := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_ACCOUNT')); if(addr(T2QTradeAccount) = nil) then begin Result:= 0; Exit; end; @T2QTradeBrRef := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_BROKERREF')); if(addr(T2QTradeBrRef) = nil) then begin Result:= 0; Exit; end; @T2QTradeClCode := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_CLIENT_CODE')); if(addr(T2QTradeClCode) = nil) then begin Result:= 0; Exit; end; @T2QTradeUserId := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_USERID')); if(addr(T2QTradeUserId) = nil) then begin Result:= 0; Exit; end; @T2QTradeFirmId := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_FIRMID')); if(addr(T2QTradeFirmId) = nil) then begin Result:= 0; Exit; end; @T2QTradePartFirmId := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_PARTNER_FIRMID')); if(addr(T2QTradePartFirmId) = nil) then begin Result:= 0; Exit; end; @T2QTradeExcCode := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_EXCHANGE_CODE')); if(addr(T2QTradeExcCode) = nil) then begin Result:= 0; Exit; end; @T2QTradeStationId := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRADE_STATION_ID')); if(addr(T2QTradeStationId) = nil) then begin Result:= 0; Exit; end; @T2QTransReplyClassCode := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRANSACTION_REPLY_CLASS_CODE')); if(addr(T2QTransReplyClassCode) = nil) then begin Result:= 0; Exit; end; @T2QTransReplySecCode := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRANSACTION_REPLY_SEC_CODE')); if(addr(T2QTransReplySecCode) = nil) then begin Result:= 0; Exit; end; @T2QTransReplyPrice := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRANSACTION_REPLY_PRICE')); if(addr(T2QTransReplyPrice) = nil) then begin Result:= 0; Exit; end; @T2QTransReplyQty := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRANSACTION_REPLY_QUANTITY')); if(addr(T2QTransReplyQty) = nil) then begin Result:= 0; Exit; end; @T2QTransReplyBal := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRANSACTION_REPLY_BALANCE')); if(addr(T2QTransReplyBal) = nil) then begin Result:= 0; Exit; end; @T2QTransReplyFirmId := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRANSACTION_REPLY_FIRMID')); if(addr(T2QTransReplyFirmId) = nil) then begin Result:= 0; Exit; end; @T2QTransReplyAccount := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRANSACTION_REPLY_ACCOUNT')); if(addr(T2QTransReplyAccount) = nil) then begin Result:= 0; Exit; end; @T2QTransReplyClCode := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRANSACTION_REPLY_CLIENT_CODE')); if(addr(T2QTransReplyClCode) = nil) then begin Result:= 0; Exit; end; @T2QTransReplyBrRef := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRANSACTION_REPLY_BROKERREF')); if(addr(T2QTransReplyBrRef) = nil) then begin Result:= 0; Exit; end; @T2QTransReplyExcCode := GetProcAddress(Result, PWideChar('TRANS2QUIK_TRANSACTION_REPLY_EXCHANGE_CODE')); if(addr(T2QTransReplyExcCode) = nil) then begin Result:= 0; Exit; end; end;
end.
Всё нормально, хендл получен адреса функций тоже ОК, но, при вызове функции //--- load trsns2quik.dll ---- if (QuikPath <> '') then FDllHandle:= LibLoad(QuikPath); if(DllHandle > 0) then begin if(addr(T2QConnect) <> nil) then res:= T2QConnect(PAnsiChar(RawByteString(QuikPath + '\info.exe')), ErrCode, ErrStr, ErrSize); end;
Обновился в открывашке до версии 7.9.1.1 И при перезагрузке получил НЕЧТО! Мало того, что русским языком и не "пахнет", но ещё и смысл поднимает волосы дыбом! Сообщение: "У 1 инструментов истекает срок обращения. Заменить их новыми? " ДА - НЕТ У меня более 80 роботов работает! Что заменить на что (во множественном числе) будет заменяться? Не поленился, проверил все добавленные в таблицы инструменты, и... ничего не нашел с близким сроком экспирации. ТОЛЬКО ВРЕМЯ ЗРЯ ПОТРАТИЛ! На написание БРЕДА время есть, а добавить в таблицу новое значение, - жду почти ДВА ГОДА!
Вот, что Вы написали 19.11.2015 14:01:31 >>Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Наверное как в поговорке: Обещанного ТРИ года ждут....
>Но из-за скорости отображения котировок и исполнения ордеров, задумываюсь попробовать метатрейдер 5. Пока присматриваюсь, сравниваю и изучаю.
В МТ-5 свои проблемы :) Если собираетесь торговать руками, то МТ5 быстрее. Работаю с ним 3,5 года только из-за Роботов. В квике просто невозможно отлаживать большие и сложные программы.
Если выводить таблицу заявок ФОРТС с настройкой таблицы "Показывать только активные заявки", то при удалении заявки из таблицы заявки, DDE сервер не получает НИКАКОГО сообщения!