Михаил Филимонов (Все сообщения пользователя)
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
В Лжуниор, версии 9,7.... все нормально работает
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Как нибудь в Квик можно посмотреть транзакцию, которая посылается руками из окна «Новая заявка»?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Господа разработчики! У меня Единый брокерский счет в Открытии. Подскажите, пожалуйста, что нужно сделать технарям Открывашки, чтобы исправить эту проблему, а то они 2-3 месяца будут затылки чесать. Других кодов клиента в своем квике я не вижу
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
От Вас точно не получишь. Руками с этим кодом клиента ордер исполняется.
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
А Вы не читаете, что выше написано? 26.08.2022 12:49:40.240 --> Ордер CNYRUB_TOM отправлен. Order: 0 Trans result:0 Rep Code:4 Ext Code:0 Message:ОШИБКА: (533) Неверно указан код клиента
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Попробовал установить ордер ручками, вбил этот же код клиента, ордер исполнился.
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Господа разработчики! У меня Единый брокерский счет в Открытии. Подскажите, пожалуйста, что нужно сделать технарям Открывашки, чтобы исправить эту проблему, а то они 2-3 месяца будут затылки чесать. Друких кодов клиента в своем квике я не вижу
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Что за * Единый Брокерский счет
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Видимо технари Открытия что-то напутали в моем * счете При ордере равном нулю, и успешной транзакции прилетает ошибка 26.08.2022 12:49:40.240 --> Ордер CNYRUB_TOM отправлен. Order: 0 Trans result:0 Rep Code:4 Ext Code:0 Message:ОШИБКА: (533) Неверно указан код клиента Хотя этот код я указываю верно.
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Версия боевого Квик в Открытии 9,3,1,11 версия Джуниор 9,7,1,10
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Добавил лог для просмотра ордера //--- Transaction callback ----- procedure pfTransReplyCB; var i: integer; Child: TMDIChild; begin Mutex.Lock; try for i:= 0 to MainForm.MDIChildCount - 1 do begin Child:= TMDIChild(MainForm.MDIChildren[i]); if(Child <> nil) then begin if(dwTransId = Child.Expert.TransID) then begin if(nTransactionResult = TRANS2QUIK_SUCCESS) then begin Child.Expert.FOrder:= nOrderNum; Child.Expert.FResOrder:= nOrderNum; PostMessage(Child.Expert.Handle, WM_ON_ORDER, NativeUint(Child.Expert.Handle), 0); end else //Get order done begin Child.Expert.FTransBusy:= false; //Get order fail Child.Expert.FTrRes:= nTransactionResult; Child.Expert.FExCode:= nTransactionExtendedErrorCode; Child.Expert.FTCode:= nTransactionReplyCode; Child.Expert.FRepMess:= lpcstrTransactionReplyMessage; PostMessage(Child.Expert.Handle, WM_ON_ERROR, NativeUint(Child.Expert.Handle), 0); end; break; end; end; end; finally Mutex.UnLock; end; end; Результат 26.08.2022 12:24:36.002 --> Ордер CNYRUB_TOM отправлен. Order: 0 А в Джуниор естественно есть ордер Разработчики, что скажите?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Сейчас еще раз проверил на Джуниор, все прекрасно работает
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
//--- Transaction callback ----- procedure pfTransReplyCB; var i: integer; Child: TMDIChild; begin Mutex.Lock; try for i:= 0 to MainForm.MDIChildCount - 1 do begin Child:= TMDIChild(MainForm.MDIChildren[i]); if(Child <> nil) then begin if(dwTransId = Child.Expert.TransID) then begin if(nTransactionResult = TRANS2QUIK_SUCCESS) then Child.Expert.FOrder:= nOrderNum else //Get order done begin Child.Expert.FTransBusy:= false; //Get order fail Child.Expert.FTrRes:= nTransactionResult; Child.Expert.FExCode:= nTransactionExtendedErrorCode; Child.Expert.FTCode:= nTransactionReplyCode; Child.Expert.FRepMess:= lpcstrTransactionReplyMessage; PostMessage(Child.Expert.Handle, WM_ON_ERROR, NativeUint(Child.Expert.Handle), 0); end; break; end; end; end; finally Mutex.UnLock; end; end; if(nTransactionResult = TRANS2QUIK_SUCCESS) then Child.Expert.FOrder:= nOrderNum else //Get order done сюда попадаем....
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Спасибо, а если будет ошибка, то где взять коды ошибок?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
TRANS2QUIK_TRANSACTION_REPLY_CALLBACK ?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Сам асинхронный ордер точно отправляется, о чем есть запись в логе об успешной отправке. А как проверить что возвращает терминал?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
К сожалению, я не дома и не могу проверить ответ системы, но сам ордер имеет вид: ACCOUNT=MB0ХХХХХ; CLIENT_CODE=ХХХХХ; TYPE=L; TRANS_ID=714080258; CLASSCODE=CETS; SECCODE=CNYRUB_TOM; ACTION=NEW_ORDER; OPERATION=B; PRICE=8.757; QUANTITY=1;
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Добрый день! Отправляю ордер через trans2qiuk.dll в Квик-джуниор (демо Арка) ордер исполняется, а на боевом Квике (Открытие) нет. Кто-нибудь сталкивался с подобной ситуацией на валютной секции?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Забросил Квик, реализовал на двух терминалах МТ5 Вот временные задержки на ФОРТС 2022.04.11 12:04:02.442 Trades 'ххххх': buy limit 1 VTBR-6.22 at 2247 2022.04.11 12:04:02.447 Trades 'ххххх': accepted buy limit 1 VTBR-6.22 at 2247 2022.04.11 12:04:02.447 Trades 'ххххх': buy limit 1 VTBR-6.22 at 2247 placed for execution 2022.04.11 12:04:02.449 Trades 'ххххх': order #199939055 buy limit 1 / 1 VTBR-6.22 at 2247 done in 7.190 ms 2022.04.11 12:04:02.449 Trades 'ххххх': deal #111213284 buy 1 VTBR-6.22 at 2247 done (based on order #199939055) 7 мс А вот на фондовой секции 2022.04.11 12:04:02.458 Trades 'ххххх': sell limit 10 VTBR at 0.022020 2022.04.11 12:04:02.464 Trades 'ххххх': accepted sell limit 10 VTBR at 0.022020 2022.04.11 12:04:02.465 Trades 'ххххх': sell limit 10 VTBR at 0.022020 placed for execution 2022.04.11 12:04:02.481 Trades 'ххххх': order #199939056 sell limit 10 / 10 VTBR at 0.022020 done in 23.922 ms 2022.04.11 12:04:02.484 Trades 'ххххх': deal #111213285 sell 8 VTBR at 0.022155 done (based on order #199939056) 2022.04.11 12:04:02.485 Trades 'ххххх': deal #111213286 sell 2 VTBR at 0.022150 done (based on order #199939056) 26 и 27 мс соответственно
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Добрый день! Что может означать такое сообщение?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
По какой причине может появляться это сообщение?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Добрый день! W10 Home 64 Через 3-4 дня работы Квик зависает Открытие, реал Как бороться?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Цитата nikolz написал: -------------------- Поэтому еще раз советую сделать экспорт данных по DDE непосредственно в Excel и сравнить результаты.
Ок. Оставайтесь в своем приятном неведении.
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Цитата nikolz написал: предположу что проблема в поделке на C#. Поэтому задайте вопрос автору этой поделки. ---------------------------------------------- Для чистоты эксперимента сделайте экспорт Вашей таблицы по DDE без костылей на C#
Какая разница С# или что-то другое?
Не все сделки передаются по DDE из таблицы "Текущие торги"
Что пришло по DDE, то и записалось.
А сегодня, по BR-1.22 направление сделки указано не верно (Таблица всех сделок)
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Цитата Daniil Pozdnyakov написал: Если да, то такое поведение является нормальным, так как данная таблица обновляется с определённым промежутком. .
И что? Обновление таблицы должно передаваться по DDE, а сделок просто нет....
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Решено Почему-то убралась галочка "Импорт внешних транзакций"
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Как бороться? Везде есть проверки па путь и название DLL До обновления самого терминала все прекрасно работало!
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Думаете, что за 6 лет что-то изменилось? (Слева КВИК, справа МТ5)
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Добрый день! Есть ли в КВИК таблица с ASK, BID и LAST со временем точнее секунды?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Забыл сказать... Сейчас в МТ5 есть валютный рынок, срочный и фондовый. Ведут работу над опционами, а ФИНАМ уже предоставляет для МТ5 торговлю всем секциям (кроме опционов) в МТ5Ждете когда ваш т ерминал вообще никому не нужен будет?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Цитата Sergey Gorokhov написал: Цитата Юрий Z написал: Данное API уже позволяет получать тики в обход qlua/qpile? Как знаю, оно уже давно значительно не обновлялось.
Нет не позволяет, но это же не делает его не "API для внешних программ" если Вам нужен аналог qlua/qpile то для этого уже есть FIX Client Connector но он платный.
Что Вы (АРКА) все прикидываетесь не понимающими?
Абсолютно всем пользователям нужно простое решение для торговли. Дали
кастрированный trans2quik, сделайте его полным, чтобы можно было полноценно торговать из своего приложения!
Зачем пользователям изучать мертвые QPILE, QLUA?
Да и отладить серьезную программу вообще не возможно!
Никому не нужны эти танцы с бубнами.
Добавте функционал в trans2quik и сделайте платным (разумно)!!!
trans2quik - бесплатный
quikApi - платный!
Вот и простое решение всех проблем!
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Только я использую асинхронные транзакции
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
В МТ5 есть тики по фьючерсам полная история нужных Вам лет
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Цитата Эдуард написал: помогите написать робота для QUIK который сможет выставлять одновременно ордера в обе стороны. Также могу выкупить советник для мт4 : Дубликатор сделок MT4-QUIK
Вам нужно писать не здесь, а на сайт МТ5
Ваша задача решается за 10 минут, эксперт МТ4 подгружает nrans2quik.dll - вот Вам и копировщик.
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Цитата Павел написал: Михаил, добрый день. Попытался использовать Ваш unit tr2quik; (Delphi XE8, trans2quik 1.3) T2QConnect успешно, а при вызове функции T2QSendSyncTrans получаю Exception class $C0000005 with message 'c0000005 ACCESS_VIOLATION'. Подскажите, с какими параметрами (и типами переменных) Вы вызываете функцию? Может быть, есть идеи, от чего ошибка может возникать? var ErrCode, pnRC: long; ErrMsg: LPSTR; ErrMsgSize, dwRMS: Dword; RM: PAnsiChar; pdwTI: PDWORD; pdON: UInt64; res: integer; begin ErrCode:=0; ErrMsg:=nil; ErrMsgSize:=0; pnRC:=0; RM:=nil; dwRMS:=0; pdwTI:=nil; pdON:=0; res:=T2QSendSyncTrans(LPSTR(AnsiString('TRANS_ID=1;CLASSCODE=BQND;ACTION=Ввод заявки;Код торгового счета=L01-00000F00;К/П=Купля;Тип=Лимитированная;Режим=BQND;Инструмент=RU000A0ZYYN4;Цена=90.000000;Количество=20;Примечание=;Условие исполнения=Поставить в очередь;')), pnRC, pdwTI, pdON, RM, dwRMS, ErrCode, ErrMsg, ErrMsgSize);
//............................................
else begin
outStr:= 'ACCOUNT=' + ExpData.SpotAccaunt + '; CLIENT_CODE=' +
ExpData.Client + '; TYPE=L; TRANS_ID=' + id +
'; CLASSCODE=' + ExpData.SpotData.ClassCode + '; SECCODE=' +
ExpData.SpotData.SecCode +
'; ACTION=NEW_ORDER; OPERATION=B' + '; PRICE=' +
FloatToStr(ExpData.SpotData.SellPrice + 10 * ExpData.SpotData.Step) +
'; QUANTITY=' + FloatToStr(MustSpotVol) + ';';
end;
end;
ErrCode:= 0;
ErrSize:= 0;
ErrStr:= nil;
res:= T2QSendASyncTrans(LPSTR(AnsiString(outStr)), ErrCode, ErrStr, ErrSize);
if(res <> TRANS2QUIK_SUCCESS) then
begin
FTransID:= 0;
FTransBusy:= false;
end else
begin
Dt:= now();
FMemo.Lines.Add(DateToStr(Dt) + ' ' + FormatDateTime('hh:mm:ss.zzz', Now()) +
' --> Ордер ' + ExpData.SpotData.SecCode + ' отправлен.');
end;
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Выкладываю еще раз unit tr2quik; interface uses WinApi.Windows, System.Sysutils; //var // DllName: string;// = 'TRANS2QUIK.DLL'; const WM_ON_TRADE = WM_USER + 179; //------------ Constants ------------ TRANS2QUIK_UNKNOWN = -1; TRANS2QUIK_SUCCESS = 0; TRANS2QUIK_FAILED = 1; TRANS2QUIK_QUIK_TERMINAL_NOT_FOUND = 2; TRANS2QUIK_DLL_VERSION_NOT_SUPPORTED = 3; TRANS2QUIK_ALREADY_CONNECTED_TO_QUIK = 4; TRANS2QUIK_WRONG_SYNTAX = 5; TRANS2QUIK_QUIK_NOT_CONNECTED = 6; TRANS2QUIK_DLL_NOT_CONNECTED = 7; TRANS2QUIK_QUIK_CONNECTED = 8; TRANS2QUIK_QUIK_DISCONNECTED = 9; TRANS2QUIK_DLL_CONNECTED = 10; TRANS2QUIK_DLL_DISCONNECTED = 11; TRANS2QUIK_MEMORY_ALLOCATION_ERROR = 12; TRANS2QUIK_WRONG_CONNECTION_HANDLE = 13; TRANS2QUIK_WRONG_INPUT_PARAMS = 14; ORDER_QUIKDATE = 0; ORDER_QUIKTIME = 1; ORDER_MICROSEC = 2; ORDER_WITHDRAW_QUIKDATE = 3; ORDER_WITHDRAW_QUIKTIME = 4; ORDER_WITHDRAW_MICROSEC = 5; TRADE_QUIKDATE = 0; TRADE_QUIKTIME = 1; TRADE_MICROSEC = 2; REPL_NONE = 0; REPL_TRANS = 1; REPL_ORDER = 2; REPL_TRADE = 3; //--- DLL ERRORS --- TR2QUIK_TERMINAL_CLOSED = 109; TR2QUIK_TRANSACTION_FAIL = 233; TR2QUIK_NOT_SUBSCRIBE_ORDERS = $1000; TR2QUIK_NOT_SUBSCRIBE_TRADES = $1001; //--------- Types ------ type intptr_t = NativeInt; Quantity = int64; EntityNumber = uint64; PEntityNumber = ^EntityNumber; OrderDescriptor = intptr_t; TradeDescriptor = intptr_t; TransReplyDescriptor = intptr_t; //-------- Load library function ------- function LibLoad(const aPath: string): THandle; //--- CallBack procedures -------------- procedure pfConnStatusCB(nConnectionEvent: long; nExtendedErrorCode: long; lpcstrInfoMessage: LPCSTR); stdcall; procedure pfOrderStatusCB(nMode: long; dwTransID: DWORD; dNumber: EntityNumber; ClassCode: LPCSTR; SecCode: LPCSTR; dPrice: double; nBalance: Quantity; dValue: double; nIsSell: long; nStatus: long; ordDescr: OrderDescriptor); stdcall; procedure pfTradeStatusCB(nMode: long; dNumber: EntityNumber; dOrderNumber: EntityNumber; ClassCode: LPCSTR; SecCode: LPCSTR; dPrice: double; nQty: Quantity; dValue: double; nIsSell: long; trDescriptor: TradeDescriptor); stdcall; procedure pfTransReplyCB(nTransactionResult: long; nTransactionExtendedErrorCode: long; nTransactionReplyCode: long; dwTransId: DWord; nOrderNum: EntityNumber; lpcstrTransactionReplyMessage: LPCSTR; trReplyDescr: TransReplyDescriptor); stdcall; type //----------------------- Prototype CallBack procedures ------------------ TRANS2QUIK_CONNECTION_STATUS_CALLBACK = procedure(nConnectionEvent: long; nExtendedErrorCode: long; lpcstrInfoMessage: LPCSTR); stdcall; TRANS2QUIK_TRANSACTION_REPLY_CALLBACK = procedure(nTransactionResult: long; nTransactionExtendedErrorCode: long; nTransactionReplyCode: long; dwTransId: DWord; nOrderNum: EntityNumber; lpcstrTransactionReplyMessage: LPCSTR; trReplDesc: TransReplyDescriptor); stdcall; TRANS2QUIK_ORDER_STATUS_CALLBACK = procedure( nMode: long; dwTransID: DWORD; dNumber: EntityNumber; ClassCode: LPCSTR; SecCode: LPCSTR; dPrice: double; nBalance: Quantity; dValue: double; nIsSell: long; nStatus: long; orderDescriptor: OrderDescriptor); stdcall; TRANS2QUIK_TRADE_STATUS_CALLBACK = procedure( nMode: long; dNumber: EntityNumber; dOrderNumber: EntityNumber; ClassCode: LPCSTR; SecCode: LPCSTR; dPrice: double; nQty: Quantity; dValue: double; nIsSell: long; tradeDescriptor: TradeDescriptor); stdcall; //------------ Functions ------------------- TRANS2QUIK_SEND_SYNC_TRANSACTION = function(lpstTransactionString: LPSTR; var pnReplyCode: long; var pdwTransId: PDWORD; var pnOrderNum:EntityNumber; lpstrResultMessage: LPSTR; var dwResultMessageSize: DWORD; var pnExtendedErrorCode: long; lpstErrorMessage: LPSTR; var dwErrorMessageSize: DWORD): long; stdcall; TRANS2QUIK_SEND_ASYNC_TRANSACTION = function(lpstTransactionString: LPSTR; var pnExtendedErrorCode: long; lpstErrorMessage: LPSTR; var dwErrorMessageSize: DWORD): long; stdcall; TRANS2QUIK_CONNECT = function(lpstConnectionParamsString: LPSTR; var pnExtendedErrorCode: long; lpstrErrorMessage: LPSTR; var dwErrorMessageSize: DWORD): long; stdcall; TRANS2QUIK_DISCONNECT = function(var pnExtendedErrorCode: long; lpstrErrorMessage: LPSTR; var dwErrorMessageSize: DWORD): long; stdcall; TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK = function(pfConnectionStatusCallback: TRANS2QUIK_CONNECTION_STATUS_CALLBACK; var pnExtendedErrorCode: long; lpstrErrorMessage: LPSTR; var dwErrorMessageSize: DWORD): long; stdcall; TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK = function(pfTransactionReplyCallback: TRANS2QUIK_TRANSACTION_REPLY_CALLBACK; var pnExtendedErrorCode: long; lpstrErrorMessage: LPSTR; var dwErrorMessageSize: DWORD): long; stdcall; TRANS2QUIK_IS_QUIK_CONNECTED = function(var pnExtendedErrorCode: long; lpstrErrorMessage: LPSTR; var dwErrorMessageSize: Dword): long; stdcall; TRANS2QUIK_IS_DLL_CONNECTED = function(var pnExtendedErrorCode: long; lpstrErrorMessage: LPSTR; var dwErrorMessageSize: DWORD): long; stdcall; //--- TRANS2QUIK_SUBSCRIBE_ORDERS = function(ClassCode: LPSTR; Seccodes: LPSTR): long; stdcall; TRANS2QUIK_UNSUBSCRIBE_ORDERS = function(): long; stdcall; TRANS2QUIK_SUBSCRIBE_TRADES = function(ClassCode: LPSTR; Seccodes: LPSTR): long; stdcall; TRANS2QUIK_UNSUBSCRIBE_TRADES = function(): long; stdcall; //--- TRANS2QUIK_START_TRADES = function(pfnTradeStatusCallback: TRANS2QUIK_TRADE_STATUS_CALLBACK): long; stdcall; TRANS2QUIK_START_ORDERS = function(pfnOrderStatusCallback: TRANS2QUIK_ORDER_STATUS_CALLBACK): long; stdcall; //--- TRANS2QUIK_ORDER_QTY = function(orderDescriptor: OrderDescriptor): Quantity; stdcall; TRANS2QUIK_ORDER_DATE = function(orderDescriptor: OrderDescriptor): long; stdcall; TRANS2QUIK_ORDER_TIME = function(orderDescriptor: OrderDescriptor): long; stdcall; TRANS2QUIK_ORDER_ACTIVATION_TIME = function(orderDescriptor: OrderDescriptor): long; stdcall; TRANS2QUIK_ORDER_WITHDRAW_TIME = function(orderDescriptor: OrderDescriptor): long; stdcall; TRANS2QUIK_ORDER_EXPIRY = function(orderDescriptor: OrderDescriptor): long; stdcall; TRANS2QUIK_ORDER_ACCRUED_INT = function(orderDescriptor: OrderDescriptor): Double; stdcall; TRANS2QUIK_ORDER_YIELD = function(orderDescriptor: OrderDescriptor): double; stdcall; TRANS2QUIK_ORDER_UID = function(orderDescriptor: OrderDescriptor): long; stdcall; TRANS2QUIK_ORDER_VISIBLE_QTY = function(orderDescriptor: OrderDescriptor): Quantity; stdcall; TRANS2QUIK_ORDER_PERIOD = function(orderDescriptor: OrderDescriptor): long; stdcall; TRANS2QUIK_ORDER_FILETIME = function(orderDescriptor: OrderDescriptor): FILETIME; stdcall; TRANS2QUIK_ORDER_DATE_TIME = function(orderDescriptor: OrderDescriptor; nTimeType: long): long; stdcall; TRANS2QUIK_ORDER_WITHDRAW_FILETIME = function(orderDescriptor: OrderDescriptor): FILETIME; stdcall; TRANS2QUIK_ORDER_VALUE_ENTRY_TYPE = function(orderDescriptor: OrderDescriptor): long; stdcall; TRANS2QUIK_ORDER_EXTENDED_FLAGS = function(orderDescriptor: OrderDescriptor): long; stdcall; TRANS2QUIK_ORDER_MIN_QTY = function(orderDescriptor: OrderDescriptor): Quantity; stdcall; TRANS2QUIK_ORDER_EXEC_TYPE = function(orderDescriptor: OrderDescriptor): long; stdcall; TRANS2QUIK_ORDER_AWG_PRICE = function(orderDescriptor: OrderDescriptor): double; stdcall; TRANS2QUIK_ORDER_USERID = function(orderDescriptor: OrderDescriptor): LPTSTR; stdcall; TRANS2QUIK_ORDER_ACCOUNT = function(orderDescriptor: OrderDescriptor): LPTSTR; stdcall; TRANS2QUIK_ORDER_BROKERREF = function(orderDescriptor: OrderDescriptor): LPTSTR; stdcall; TRANS2QUIK_ORDER_CLIENT_CODE = function(orderDescriptor: OrderDescriptor): LPTSTR; stdcall; TRANS2QUIK_ORDER_FIRMID = function(orderDescriptor: OrderDescriptor): LPTSTR; stdcall; TRANS2QUIK_ORDER_REJECT_REASON = function(orderDescriptor: OrderDescriptor): LPTSTR; stdcall; //--- TRANS2QUIK_TRADE_DATE = function(tradeDescriptor: TradeDescriptor): long; stdcall; TRANS2QUIK_TRADE_SETTLE_DATE = function(tradeDescriptor: TradeDescriptor): long; stdcall; TRANS2QUIK_TRADE_TIME = function(tradeDescriptor: TradeDescriptor): long; stdcall; TRANS2QUIK_TRADE_IS_MARGINAL = function(tradeDescriptor: TradeDescriptor): long; stdcall; TRANS2QUIK_TRADE_ACCRUED_INT = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_YIELD = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_TS_COMMISSION = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_CLEARING_CENTER_COMMISSION = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_EXCHANGE_COMMISSION = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_TRADING_SYSTEM_COMMISSION = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_PRICE2 = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_REPO_RATE = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_REPO_VALUE = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_REPO2_VALUE = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_ACCRUED_INT2 = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_REPO_TERM = function(tradeDescriptor: TradeDescriptor): long; stdcall; TRANS2QUIK_TRADE_START_DISCOUNT = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_LOWER_DISCOUNT = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_UPPER_DISCOUNT = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_BLOCK_SECURITIES = function(tradeDescriptor: TradeDescriptor): long; stdcall; TRANS2QUIK_TRADE_PERIOD = function(tradeDescriptor: TradeDescriptor): long; stdcall; TRANS2QUIK_TRADE_KIND = function(tradeDescriptor: TradeDescriptor): long; stdcall; TRANS2QUIK_TRADE_FILETIME = function(tradeDescriptor: TradeDescriptor): FILETIME; stdcall; TRANS2QUIK_TRADE_DATE_TIME = function(tradeDescriptor: TradeDescriptor; nTimeType: long): long; stdcall; TRANS2QUIK_TRADE_BROKER_COMMISSION = function(tradeDescriptor: TradeDescriptor): double; stdcall; TRANS2QUIK_TRADE_TRANSID = function(tradeDescriptor: TradeDescriptor): long; stdcall; TRANS2QUIK_TRADE_CURRENCY = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRADE_SETTLE_CURRENCY = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRADE_SETTLE_CODE = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRADE_ACCOUNT = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRADE_BROKERREF = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRADE_CLIENT_CODE = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRADE_USERID = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRADE_FIRMID = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRADE_PARTNER_FIRMID = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRADE_EXCHANGE_CODE = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRADE_STATION_ID = function(tradeDescriptor: TradeDescriptor): LPTSTR; stdcall; //--- TRANS2QUIK_TRANSACTION_REPLY_CLASS_CODE = function(TRD: TransReplyDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRANSACTION_REPLY_SEC_CODE = function(TRD: TransReplyDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRANSACTION_REPLY_PRICE = function(TRD: TransReplyDescriptor): double; stdcall; TRANS2QUIK_TRANSACTION_REPLY_QUANTITY = function(TRD: TransReplyDescriptor): Quantity; stdcall; TRANS2QUIK_TRANSACTION_REPLY_BALANCE = function(TRD: TransReplyDescriptor): Quantity; stdcall; TRANS2QUIK_TRANSACTION_REPLY_FIRMID = function(TRD: TransReplyDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRANSACTION_REPLY_ACCOUNT = function(TRD: TransReplyDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRANSACTION_REPLY_CLIENT_CODE = function(TRD: TransReplyDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRANSACTION_REPLY_BROKERREF = function(TRD: TransReplyDescriptor): LPTSTR; stdcall; TRANS2QUIK_TRANSACTION_REPLY_EXCHANGE_CODE = function(TRD: TransReplyDescriptor): LPTSTR; stdcall; var T2QSendSyncTrans: TRANS2QUIK_SEND_SYNC_TRANSACTION; T2QSendASyncTrans: TRANS2QUIK_SEND_ASYNC_TRANSACTION; T2QConnect: TRANS2QUIK_CONNECT; T2QDisconnect: TRANS2QUIK_DISCONNECT; T2QSetConnStatCB: TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK; T2QSetTransReplyCB: TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK; T2QIsQuikConnected: TRANS2QUIK_IS_QUIK_CONNECTED; T2QIsDllConnected: TRANS2QUIK_IS_DLL_CONNECTED; T2QSubscribeOrders: TRANS2QUIK_SUBSCRIBE_ORDERS; T2QUnSubscribeOrders: TRANS2QUIK_UNSUBSCRIBE_ORDERS; T2QStartOrders: TRANS2QUIK_START_ORDERS; T2QOrderQty: TRANS2QUIK_ORDER_QTY; T2QOrderDate: TRANS2QUIK_ORDER_DATE; T2QOrderTime: TRANS2QUIK_ORDER_TIME; T2QOrderActiveTime: TRANS2QUIK_ORDER_ACTIVATION_TIME; T2QOrderWithdrawTime: TRANS2QUIK_ORDER_WITHDRAW_TIME; T2QOrderExpiry: TRANS2QUIK_ORDER_EXPIRY; T2QOrderAccruedInt: TRANS2QUIK_ORDER_ACCRUED_INT; T2QOrderYield: TRANS2QUIK_ORDER_YIELD; T2QOrderUid: TRANS2QUIK_ORDER_UID; T2QOrderVisibleQty: TRANS2QUIK_ORDER_VISIBLE_QTY; T2QOrderPeriod: TRANS2QUIK_ORDER_PERIOD; T2QOrderFileTime: TRANS2QUIK_ORDER_FILETIME; T2QOrderDateTime: TRANS2QUIK_ORDER_DATE_TIME; T2QOrderWithdrawFileTime: TRANS2QUIK_ORDER_WITHDRAW_FILETIME; T2QOrderValueEntryType: TRANS2QUIK_ORDER_VALUE_ENTRY_TYPE; T2QOrderExtdFlags: TRANS2QUIK_ORDER_EXTENDED_FLAGS; T2QOrderMinQty: TRANS2QUIK_ORDER_MIN_QTY; T2QOrderExecType: TRANS2QUIK_ORDER_EXEC_TYPE; T2QOrderAwgPrice: TRANS2QUIK_ORDER_AWG_PRICE; T2QOrderUserId: TRANS2QUIK_ORDER_USERID; T2QOrderAccaunt: TRANS2QUIK_ORDER_ACCOUNT; T2QOrderBrokerRef: TRANS2QUIK_ORDER_BROKERREF; T2QOrderClientCode: TRANS2QUIK_ORDER_CLIENT_CODE; T2QOrderFirmId: TRANS2QUIK_ORDER_FIRMID; T2QOrderRejectReason: TRANS2QUIK_ORDER_REJECT_REASON; T2QSubscribeTrades: TRANS2QUIK_SUBSCRIBE_TRADES; T2QUnSubscribeTrades: TRANS2QUIK_UNSUBSCRIBE_TRADES; T2QStartTrades: TRANS2QUIK_START_TRADES; T2QTradeDate: TRANS2QUIK_TRADE_DATE; T2QTradeSettleDate: TRANS2QUIK_TRADE_SETTLE_DATE; T2QTradeTime: TRANS2QUIK_TRADE_TIME; T2QTradeIsMarginal: TRANS2QUIK_TRADE_IS_MARGINAL; T2QTradeAccruedInt: TRANS2QUIK_TRADE_ACCRUED_INT; T2QTradeYield: TRANS2QUIK_TRADE_YIELD; T2QTradeTSCommission: TRANS2QUIK_TRADE_TS_COMMISSION; T2QTradeClCenterCommission: TRANS2QUIK_TRADE_CLEARING_CENTER_COMMISSION; T2QTradeExcCommission: TRANS2QUIK_TRADE_EXCHANGE_COMMISSION; T2QTradeTrSysCommission: TRANS2QUIK_TRADE_TRADING_SYSTEM_COMMISSION; T2QTradePrice2: TRANS2QUIK_TRADE_PRICE2; T2QTradeRepoRate: TRANS2QUIK_TRADE_REPO_RATE; T2QTradeRepoValue: TRANS2QUIK_TRADE_REPO_VALUE; T2QTradeRepo2Value: TRANS2QUIK_TRADE_REPO2_VALUE; T2QTradeAccruedInt2: TRANS2QUIK_TRADE_ACCRUED_INT2; T2QTradeRepoTerm: TRANS2QUIK_TRADE_REPO_TERM; T2QTradeStDiscount: TRANS2QUIK_TRADE_START_DISCOUNT; T2QTradeLwDiscount: TRANS2QUIK_TRADE_LOWER_DISCOUNT; T2QTradeUpDiscount: TRANS2QUIK_TRADE_UPPER_DISCOUNT; T2QTradeBlSecur: TRANS2QUIK_TRADE_BLOCK_SECURITIES; T2QTradePeriod: TRANS2QUIK_TRADE_PERIOD; T2QTradeKind: TRANS2QUIK_TRADE_KIND; T2QTradeFileName: TRANS2QUIK_TRADE_FILETIME; T2QTradeDateTime: TRANS2QUIK_TRADE_DATE_TIME; T2QTradeBrCommission: TRANS2QUIK_TRADE_BROKER_COMMISSION; T2QTradeTransId: TRANS2QUIK_TRADE_TRANSID; T2QTradeCurrensy: TRANS2QUIK_TRADE_CURRENCY; T2QTradeSettlCurr: TRANS2QUIK_TRADE_SETTLE_CURRENCY; T2QTradeSettlCode: TRANS2QUIK_TRADE_SETTLE_CODE; T2QTradeAccount: TRANS2QUIK_TRADE_ACCOUNT; T2QTradeBrRef: TRANS2QUIK_TRADE_BROKERREF; T2QTradeClCode: TRANS2QUIK_TRADE_CLIENT_CODE; T2QTradeUserId: TRANS2QUIK_TRADE_USERID; T2QTradeFirmId: TRANS2QUIK_TRADE_FIRMID; T2QTradePartFirmId: TRANS2QUIK_TRADE_PARTNER_FIRMID; T2QTradeExcCode: TRANS2QUIK_TRADE_EXCHANGE_CODE; T2QTradeStationId: TRANS2QUIK_TRADE_STATION_ID; T2QTransReplyClassCode: TRANS2QUIK_TRANSACTION_REPLY_CLASS_CODE; T2QTransReplySecCode: TRANS2QUIK_TRANSACTION_REPLY_SEC_CODE; T2QTransReplyPrice: TRANS2QUIK_TRANSACTION_REPLY_PRICE; T2QTransReplyQty: TRANS2QUIK_TRANSACTION_REPLY_QUANTITY; T2QTransReplyBal: TRANS2QUIK_TRANSACTION_REPLY_BALANCE; T2QTransReplyFirmId: TRANS2QUIK_TRANSACTION_REPLY_FIRMID; T2QTransReplyAccount: TRANS2QUIK_TRANSACTION_REPLY_ACCOUNT; T2QTransReplyClCode: TRANS2QUIK_TRANSACTION_REPLY_CLIENT_CODE; T2QTransReplyBrRef: TRANS2QUIK_TRANSACTION_REPLY_BROKERREF; T2QTransReplyExcCode: TRANS2QUIK_TRANSACTION_REPLY_EXCHANGE_CODE; implementation uses Main, CHILDWIN; function LibLoad(const aPath: string): THandle; begin Result:= LoadLibrary(PWideChar(IncludeTrailingPathDelimiter(aPath) + MainData.DllName)); if(Result > 0) then begin @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; @T2QSetConnStatCB := GetProcAddress(Result, PWideChar('TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK')); if(addr(T2QSetConnStatCB) = nil) then begin Result:= 0; Exit; end; @T2QSetTransReplyCB := GetProcAddress(Result, PWideChar('TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK')); if(addr(T2QSetTransReplyCB) = 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; //--- Connection status Call Back --------- procedure pfConnStatusCB; begin // end; //--- Transaction callback ----- procedure pfTransReplyCB; begin // end; //--- Order status callback ----- procedure pfOrderStatusCB; begin // end; //--- Trade status callback ----- procedure pfTradeStatusCB; begin //not used end; end.
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Цитата Roman написал: Пробовал не помогло. Нашел в чем дело , оказалось если вместо: @T2QSendSyncTrans := GetProcAddress(Result, PWideChar( 'TRANS2QUIK_SEND_SYNC_TRANSACTION ')); написать @T2QSendSyncTrans := GetProcAddress(Result, PWideChar(' _TRANS2QUIK_SEND_SYNC_TRANSACTION@36 ')); то все работает
Я выкладывал полностью рабочий модуль, переписанный из исходника разработчиков, и у меня все прекрасно работает.
Это Вы где-то намудрили
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Цитата XXM написал: В Руководстве пользователя "Интерпретатор языка Lua" есть даже глава 5. Описание битовых флагов Но по флагам транзакций ни в этой главе, ни в других местах не нашел информации. Гадать как-то дискомфортно, прошу описания.
Я не знаю про пункт 4,24
Но описание битовых флагов в п,5 относится к таблицам, а не к транзакциям.
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Спасибо
Я думал, что ко всем полям есть доступ...
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Добрый день! Функция getMoneyEx() возвращает таблицу "Позиции по деньгам" В справке нет названия колонки "Доступно" Как она называется (см. картинку)?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Цитата Anton написал: Но все равно по-своему ) В общем, если устраивает, то и хорошо. В этом варианте в мейне ничего не происходит, можно слип увеличить до 1000.
Еще раз спасибо, Антон.
Пусть мое решение не очень элегантное, но будет работать, как Вы хотели :)
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Цитата Anton написал: Он и будет получать настолько же "мгновенно", как и в случае бродкаста, не заваливая всю систему кучами бесполезных сообщений. Перечитайте еще раз, "раз в секунду" это процесс обнаружения клиента, как только он обнаружен, сообщения посылаются ему немедленно из колбеков. Если думаете, что пройтись по своему списку окон медленнее, чем винда пройдется по списку всех окон, то это заблуждение.
Учтя Вашу критику, переделал LUA скрипт (проверил - все работает)
Спасибо!
//=========================================================
w32 = require("w32")
is_run = false
HWND_BROADCAST = 0xFFFF
A_double = 0.0
WParam = 2
lpParam = 1
WM_EBS_MONEY = w32.RegisterWindowMessage("WM_EBS_MONEY")
if WM_EBS_MONEY >= 0xC000 then
is_run = true
else
message("Message not registered!")
end
--начальная отсылка денежных средств
a_table = getPortfolioInfoEx("MCXXXXXXXXXX", "XXXXX", 2)
A_double = a_table.limit_open_pos
lpParam = math.floor(A_double * 100)
w32.PostMessage(HWND_BROADCAST, WM_EBS_MONEY, WParam, lpParam)
function OnStop()
is_run = false
end
-- Отсылка по изменению средств
function OnMoneyLimit(m_limit)
a_table = getPortfolioInfoEx("MCXXXXXXXXXX", "XXXXX", 2)
A_double = a_table.limit_open_pos
lpParam = math.floor(A_double * 100)
w32.PostMessage(HWND_BROADCAST, WM_EBS_MONEY, WParam, lpParam)
end
function OnDepoLimit(d_limit)
a_table = getPortfolioInfoEx("MCXXXXXXXXXX", "XXXXX", 2)
A_double = a_table.limit_open_pos
lpParam = math.floor(A_double * 100)
w32.PostMessage(HWND_BROADCAST, WM_EBS_MONEY, WParam, lpParam)
end
function OnFuturesClientHolding(f_holding)
a_table = getPortfolioInfoEx("MCXXXXXXXXXX", "XXXXX", 2)
A_double = a_table.limit_open_pos
lpParam = math.floor(A_double * 100)
w32.PostMessage(HWND_BROADCAST, WM_EBS_MONEY, WParam, lpParam)
-- message("Working!")
end
function OnFuturesLimitChange(f_change)
a_table = getPortfolioInfoEx("MCXXXXXXXXXX", "XXXXX", 2)
A_double = a_table.limit_open_pos
lpParam = math.floor(A_double * 100)
w32.PostMessage(HWND_BROADCAST, WM_EBS_MONEY, WParam, lpParam)
end
function main()
while is_run do
sleep(1)
end
end
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Спасибо, Антон!
Только нельзя использовать SendMessage(), т.к она ожидает ответа.
Странно, что PeekMessage не будет работать,
PostMessage() работатет исправно.
И еще...
Думается, что так как я написал в разы проще будет... :)
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Можете "набросать" схему как организовать список хендлов и запись в этот список так, как Вы понимаете этот механизм?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Посмотрел список функций w32 и эти функции там есть. Беда в том, что я с LUA познакомился 2 дня назад...
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
GetMessage или PeekMessage ?
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
Пользователь
Сообщений: 346
Регистрация: 29.07.2015
И желать список рассылки?