Михаил Филимонов (Все сообщения пользователя)

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

Страницы: Пред. 1 2 3 4 5 6 7 8 След.
PostMessage из LUA
 
Всем спасибо.
PostMessage из LUA
 
Цитата
Nikolay написал:
getItem позволяет получать данные только из определенных таблиц и формат ее вызова не такой.

http://luaq.ru/getItem.html

Чтобы получить данные по деньгам, позициям надо обратиться к определенной таблице и просканировать строки, либо использовать специализированные функции для получения денежных лимитов, позиций и т.д., допустим getMoneyEx или getPortfolioInfoEx.
Да никак не получится потому что ...
Ответ (здесь на форуме) Романа Азарова (сотрудник Арка )

""Ликвидная стоимость" и "Прибыль дня" являются параметрами таблицы "Состояние счета".
Доступ к параметрам данной таблицы с помощью Lua не представляется возможным."

Вот и все, приехали
PostMessage из LUA
 
Есть еще функция TABLE getMoney (STRING client_code, STRING firmid, STRING tag, STRING currcode)
Но не понятно что такое STRING tag и STRING currcode
PostMessage из LUA
 
Цитата
swerg написал:
Цитата
Михаил Филимонов написал:
Это у Вас такой юмор?

Не обращайте внимание, это местный клоун.
Цитата
Михаил Филимонов написал:
Как получить свободные средства????

1) Непосредственно к таблице "Состояние счета" доступа через Lua API нет.

2) То, что вы выделили - это не совсем "свободные средства", это остаток на денежном счете. Впрочем, это вопрос терминологии.
Вы можете увидеть ту же цифру (на сколько я понимаю) через таблицу "Таблица лимитов по денежным средствам". Откройте её. (просто для того, чтобы понятнее было и нагляднее что там и как; для того, чтобы получить информацию в Lua открывать указанную таблицу конечно не обязательно).
Далее см. в QLUA.chm раздел "Таблицы, используемые в функциях «getItem», «getNumberOf» и «SearchItems»", там вам нужна "Позиции участника по деньгам"
Дело в том, что это Единый Брокерский Счет и останок средств (свободных средств) находится только в этой стандартной таблице "Состояние счета".
Когда я запрашиваю

acc_value =  getItem("45826 MC0139600000 [Состояние счета]", 0)
возвращется NIL
PostMessage из LUA
 
Цитата
Владимир написал:
Михаил Филимонов, Как получить свободные средства????

Занятный вопрос... ЧЬИ средства? Чужие? НИКАК! Если есть такая возможность, то нужно подвешивать за яйца всех разработчиков софта! Свои? Свои не хило бы знать самому! С какой радости скрипт должен "в LUA получить значение, указанное на картинке"? Какое его собачье дело? Скрипт должен знать, сколько ИМЕННО ЕМУ дозволено тратить, а вовсе не всё, что лежит на счёте! И эта цифирь НИКАК не связана с "картинкой"!
Это у Вас такой юмор?
Картинка прикреплена, чтобы было понятно в какой таблице находится, как Вы говорите "цифирь".
PostMessage из LUA
 
Как в 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
end

function OnStop()
 is_run = false
end

function main()
 while is_run do

--   A_double = Как получить свободные средства????

   lpParam = A_double * 100
   w32.PostMessage(HWND_BROADCAST, WM_EBS_MONEY, WParam, lpParam)
   sleep(100)
 end
end
Посоветуйте панель для расчета риска в МТ4/МТ5
 
Цитата
Instant Trade написал:
Всем привет! Занимаюсь удаленным заработком и недавно увлекся темой Форекса, но знаний для самостоятельного трейдинга у меня не хватает. Поделитесь пожалуйста кто какой панелью пользуется для расчета риска в МТ4/МТ5?
Вам нужно задать это вопрос на на сайте МТ5
PostMessage из LUA
 
А в QPILE тоже "танцы с бубном" чтобы вызвать WINAPI функцию, или в нем можно напрямую приаттачить свою DLL?
PostMessage из LUA
 
Цитата
swerg написал:

Вот как сделаете свою dll - так сразу и поймёте. Ну или хотя бы документацию к Lua прочитаете (как к таковому языку Lua, не в привязке к QUIK)
Почитал Ваш форум и ... какой ОТСТОЙ этот Квик вместе с LUA
и кастрированным API tans2quik.dll
PostMessage из LUA
 
Цитата
swerg написал:
Михаил Филимонов , вы читать умеете?
Зачем вам User32.dll - понятно.
Но  ваш  вопрос был про другое: почему не получится
user32 = require("User32.dll")

Вот как сделаете свою dll - так сразу и поймёте. Ну или хотя бы документацию к Lua прочитаете (как к таковому языку Lua, не в привязке к QUIK)
Спасибо
PostMessage из LUA
 
Цитата
swerg написал:
Цитата
Хозяин барин.
Зачем, если есть даже готовые исходник - вот бы понять.
Впрочем, пишите. За одно и вот этот вопрос отпадёт:

Цитата
Почему нельзя
user32 = require("User32.dll")
Да затем, чтобы вывести inputbox, например.
PostMessage из LUA
 
Что-то на подобии InputBox
PostMessage из LUA
 
Цитата
swerg написал:
Цитата
Михаил Филимонов написал:
Тогда проще написать свою DLL, чем "цеплять" чужие

Взять готовое - всегда проще  надежнее.
Тем более если нужна только PostMessage
Спасибо, но мне проще самому написать.
И еще вопрос.
Есть ли в LUA ввод числа от руки?
PostMessage из LUA
 
Цитата
s_mike@rambler.ru написал:
Цитата
Михаил Филимонов написал:
Вы пишите, чтобы подключить w32
w32 = require("w32")

Почему нельзя
user32 = require("User32.dll")
потому что связывание в луа идёт по собственным правилам.

Для использования  системные библиотек необходима lua расширение alien.
вот пример использования:

http://bot4sale.ru/blog-menu/qlua/415-win32api-lua.html
Тогда проще написать свою DLL, чем "цеплять" чужие
PostMessage из LUA
 
Вы пишите, чтобы подключить w32
w32 = require("w32")

Почему нельзя
user32 = require("User32.dll")
PostMessage из LUA
 
Что за ерунда?
Заменили Единый Ерокерский Счет на звездочку !
PostMessage из LUA
 
Если можно подключить w32. то почему нельзя user32.dll ?
Я вообще LUA не работал совсем, просто возникла необходимость
передовать состояние ДЕПО через PostMessage из Квик, т.к в МТ5 нет  *  счетов.
Экспорт из МТ5 работает гораздо быстрее DDE
PostMessage из LUA
 
Цитата
swerg написал:
Не очень понятно про что вопрос.
Вызвать функцию WinAPI PostMessage ?
Если про это - то вот,  w32 библиотека
Канечно нужно вызвать PostMessage из User32.dll
А без библиотеки разве нельзя обойтись?
Почему нельзя сразу подключить user32.dll ?
PostMessage из LUA
 
Добрый день!

У кого-нибудь есть наработки по этому вопросу?
Инструмент Si-12.20-3.21
 
Добрый день!
Кто-нибудь знает почему покупая/продавая инструмент Si-12.20-3.21
в позициях появляются обычные фьючерсы Si-12.20 и Si-3.21?
Это же разные инструменты и стаканы у них разные.
Можно получить развернутый ответ?
Неправильная работа TRANS2QUIK.DLL после перехода на 19-значные номера заявок и сделок, тип данных double не может вместить 19 знаков корректно
 
Цитата
Юрий Балашов написал:
Цитата
Ivan Smirnov написал:
Спасибо, на новой версии все вроде заработало.
Иван, как Вы состыковали свою программу с  Trans2QuikAPI_1.3_x64 ?
Вам удалось написать Quik.pas или Вы используете не Delphi?
unit tr2quik;

interface

uses
 WinApi.Windows, System.Sysutils, QTypes, WinApi.Messages;

//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
 //
end;

end.
Объяснение процесса обратного получения заявок, Объяснение процесса обратного получения заявок
 
Цитата
Сергей Привалов написал:
Цитата
GrigoriyA написал:
ну вот я транзакции вижу , а заявки нет
может вам помогут вот эти видео. там тоже С# и Квик. все получается  https://www.youtube.com/playlist?list=PLtUjJaiFZYyeRyDD8o_s9UUCoIKyPuwwD
Это технический форум, а не рекламная доска!
Хотите помочь - пишите здесь.
Странно, что модераторы оставили это сообщение.
Проблемы с TRANS2QUIK_SEND_SYNC_TRANSACTION, Возвращается TRANS2QUIK_SUCCESS, а значение тикета в pdOrderNum равно нулю
 
Цитата
GrigoriyA написал:
у меня такая же проблема . и такой же демо счет финама.  Никто ничего ответить не может форум экспертов блин
Ну почему же никто?
Отправка ассинхронного ордера


procedure TExpert.OnTrade;
var
 outStr, id: string;
 res: long;
 ErrCode: long;
 ErrSize: Dword;
 ErrStr: LPSTR;
 Dt: TDateTime;
begin
 FOrder:= 0;
 FTransID:= GetTransID();
 id:= IntToStr(TransID);
 FMustSpotVol:= (Volume * ExpData.FutData.Lot)/ExpData.SpotData.Lot; //Get spot volume
 case aSell of
   0: begin                            //Buy trade, sell spot (output position)
     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=S' + '; PRICE=' +
              FloatToStr(ExpData.SpotData.BuyPrice - 10 * ExpData.SpotData.Step) +
              '; QUANTITY=' + FloatToStr(MustSpotVol) + ';';
   end;
   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;
end;

Получение тикета

//--- 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
             Child.Expert.FTransBusy:= false;                  //Get order fail
         break;
       end;
     end;
   end;
 finally
   Mutex.UnLock;
 end;
end;

Смотрим, что произошло с ордером

//--- Order status callback -----
procedure pfOrderStatusCB;
var
 i: integer;
 Child: TMDIChild;
 StartQty: Quantity;
// s: string;
begin
 if((nMode = 0) and (dwTransID > 0)) then
 begin
   Mutex.Lock;
   try
     for i := 0 to MainForm.MDIChildCount - 1 do
     begin
       Child:= TMDIChild(MainForm.MDIChildren[i]);
       if(Child <> nil) then
       begin
         if(Child.Expert.TransID = dwTransID) then
         begin
           if(dNumber = Child.Expert.Order) then
           begin
             StartQty:= T2QOrderQty(ordDescr);             //Order start volume
             if(string(SecCode) = Child.Expert.ExpData.FutData.SecCode) then //future
             begin
               case nStatus of
                 1: {active};
                 2: begin
                      if(StartQty = nBalance) then                   //Canceled
                      begin
                        Child.Expert.FOrder:= 0;
                        Child.Expert.FTransID:= 0;
                        Child.Expert.FTransBusy:= false;
                      end else
                      begin                                      //Partial done
                        case nIsSell of
                          0: Child.Expert.FFutVol:= Child.Expert.FFutVol + (StartQty - nBalance);
                          else Child.Expert.FFutVol:= Child.Expert.FFutVol - (StartQty - nBalance);
                        end;
                          Child.Expert.FVolume:= StartQty - nBalance;
                          Child.Expert.FaSell:= nIsSell;
                          Child.Expert.FOrder:= 0;
                          PostMessage(Child.Expert.Handle, WM_ON_TRADE,
                                           NativeUint(Child.Expert.Handle), 0);
                      end;
                    end;
                 else begin                                 //Future order Done
                   case nIsSell of
                     0: Child.Expert.FFutVol:= Child.Expert.FFutVol + (StartQty - nBalance);
                     else Child.Expert.FFutVol:= Child.Expert.FFutVol - (StartQty - nBalance);
                   end;
                     Child.Expert.FVolume:= StartQty - nBalance;
                     Child.Expert.FaSell:= nIsSell;
                     Child.Expert.FOrder:= 0;
                     PostMessage(Child.Expert.Handle, WM_ON_TRADE,
                                           NativeUint(Child.Expert.Handle), 0);
                 end;
               end;
               break;
             end else
             if(string(SecCode) = Child.Expert.ExpData.SpotData.SecCode) then  //spot
             begin
               case nStatus of
                 1:{active};
                 2: begin                                            //Canceled
                      Child.Expert.FOrder:= 0;
                      Child.Expert.FTransID:= 0;
                      Child.Expert.FOrder:= 0;
                      Child.Expert.FTransBusy:= false;
                    end;
                 else begin                                   //Spot order Done
                   Child.Expert.FOrder:= 0;
                   Child.Expert.FTransID:= 0;
                   case nIsSell of
                     0: Child.Expert.FSpotVol:= Child.Expert.FSpotVol + (StartQty - nBalance);
                     else Child.Expert.FSpotVol:= Child.Expert.FSpotVol - (StartQty - nBalance);
                   end;
                   Child.Expert.FOrder:= 0;
                   Child.Expert.FTransBusy:= false;
                 end;
               end;
               break;
             end;
           end;
         end;
       end;
     end;
   finally
     Mutex.Unlock;
   end;
 end;
end;
Развитие Trans2Quik
 
Цитата
Антон написал:
Добрый день,


Есть ли планы по расширение API Trans2Quik - добавление "getQuoteLevel2", "getCandlesByIndex" (получение данных стакана, графиков) ?

Программирование скриптов на LUA/Qpile несколько не отвечает времени (начиная с отсутсвия нормальных IDE, заканчивая отсутствием библиотек). Сейчас кроме странных конструкций в виде Lua RPC выйти на "современные" языки можно через Trans2Quik, а у него достаточно ограниченное API.

Спасибо
Ничего они делать не будут!
Если бы хотели, то давно бы сделали.
Хотя бы трансляцию маркет дата вместо DDE.
trans2quik.dll x32 и обновление Спектры в апреле 2020
 
Цитата
Юрий написал:
Добрый день!

После обновления спектры и увеличения разрядности номера сделок будет ли корректно работать 32 разрядная библиотека trans2quik?

Будет ли работать QUIK 8 с 32 разрядной trans2quik ?

Спасибо.

Юрий.
Разрядность переменной для хранения тикета ордера в TRANS2QUIK_API
определена как
typedef unsigned __int64 EntityNumber;

Следовательно переменой EntityNumber хватит для хранения тикетов ордеров.  
trans2quik.dll x32 и обновление Спектры в апреле 2020
 
Уважаемые разработчики!
Был задан серьезный вопрос.
Почему не отвечаете?
Как различать котировки из двух стаканов, при выводе через DDE?
 
Спасибо!
А что скажут разработчики?
Объёмы предложения и спроса в Доске опционов
 
Четыре года минуло....
Как различать котировки из двух стаканов, при выводе через DDE?
 
Собственно вопрос
Где можно взять подробную документацию по trans2quik.dll, Документация по trans2quik.dll
 
Цитата
Egor Zaytsev написал:
Добрый день.
В справке QUIK. Пункт Раздел 6. Совместная работа с другими приложениями/Импорт транзакций через API/   Функции для работы с транзакциями через API
  Получение информации о заявках и сделках
Ссылки не открываются
Пара вопросов Lua trans2quik и два счёта
 
Цитата
Павел Bosco написал:
Немного лень тестить самому и хочется чуть пообщаться.
Всё хочу сделать отправку транзакций через Lua. Сейчас у меня отдельно стоящий робот общается с lua через pipe, но заявки шлёт через trans2quik. Знаю что trans2quik тоже через pipe работает.
недавно перешел с 32 bit на 64 bit, вроде никаких проблем, всё "бесшовно".
у кого есть опыт интеграции без trans2quik, даёт ли это какой-то выигрыш в скорости?

ещё мне казалось что всякая заявка из lua будет отображаться в окне сообщений, подобно тому как там отображаются сообщения по заявкам поставленным вручную, так ли это?

и третий вопрос из пары. пробовал ли кто-нибудь отправлять одновременно две заявки в одной строке в trans2quik, по одному инструменту но двум счетам (в одном терминале, одно физлицо) - будет ли это работать?
опять же чуток лень самому программить, плюс нет тестового полигона под рукой, может кто-то уже делал?

сейчас когда отправляю две заявки по разным счетам друг за другом, то вижу что они иногда выставляются на заметном расстоянии по номеру друг от друга, т.е. между ними могут влезть ещё 10 заявок. хотелось бы этого избежать.
1. думается, что выйгрыша в скорости не будет
2. Не знаю
3. Используйте ассинхронную отправку ордеров (в одной строке не получится отправить 2 ордера)
Время исполнения ордеров на ФОРТС и Фондовой секциях
 
Цитата
Imersio Arrigo написал:
Цитата
Михаил Филимонов написал:
Я предоставил свои данные, что бы что-то доказать, покажите Ваши.
Ну, что и требовалось доказать
Вы ктверждали, что OnTrade быстрее OnOrder , я говорил, что почти одинаково
У Вас в таблицах время OnOr der = OnTrade
На этом можно закончить!
Время исполнения ордеров на ФОРТС и Фондовой секциях
 
Цитата
Imersio Arrigo написал:
Цитата
Михаил Филимонов написал:
Не имеет значения (onOrder и onTrade) пробовал так и так - разницы почти нет,
Да сколько можно говорить, по onOrder нельзя понять время исполнения! Потому что реальное время исполнения и время вызова колбека - разное!!!
Да, в хороших условиях оно близкое, но фактически время вызова и время сделки - это разное время.

Измерять время выставлена-исполнена можно только по соотв.полям в таблице заявок и таблице сделок. Ну или время в стуктуре сделки, которая приехала в вызове onTrade.
Только разница этих отметок времени имеет смысл. И только потому что это время проставляет биржа.
Поэтому я и говорю что нужен скриншот таблиц (как вариант конечно подойдет и текстовый вывод их же) где видно номера заявок, сделок и время выставления и исполнения. в т.ч. в мкс.
Зачем так "распинаться"?
Ваши умозаключения - просто набор фраз, я пробовал на реале - практически нет разницы onOrder и onTrade.
Я предоставил свои данные, что бы что-то доказать, покажите Ваши.
Время исполнения ордеров на ФОРТС и Фондовой секциях
 
Цитата
Imersio Arrigo написал:
Цитата
Михаил Филимонов написал:
Т.е ордер должен исполнится мгновенно
Бгг. Кто-то тут мне только что говорил что "ордер не может исполнится мгновенно" когда я предложил такую ситуацию )))

Еще раз: время между чем и чем вы замеряете? Между возвратом из onOrder и onTrade?
Больше делать нечего, как цепляться к словам?
Не имеет значения (onOrder и onTrade) пробовал так и так - разницы почти нет,
но использую OnOrder.  
импорт транзакций, Время исполнения
 
Цитата
Imersio Arrigo написал:
Цитата
Не, зачем это мне. Я только советы на форуме раздаю. Бесплатные.

Еще раз: скриншоты таблиц с ценами на которых видна описываемая ситуация?
Без них продолжать дискурс считаю бессмысленным.
Я не сохранил скрины полностью таблиц.
Фьючерс выставлялся лимитником (т.е цена не могла изменится).
outStr:= 'ACCOUNT=' + ExpData.FutAccaunt + '; TYPE=L; TRANS_ID=' + id +
          '; CLASSCODE=' + ExpData.FutData.ClassCode + '; SECCODE=' +
          ExpData.FutData.SecCode + '; ACTION=NEW_ORDER; OPERATION=' + s +
          '; EXECUTION_CONDITION=KILL_BALANCE' + '; PRICE=' + FloatToStr(price) +
          '; QUANTITY=' + FloatToStr(Qnty) + ';';
Время исполнения ордеров на ФОРТС и Фондовой секциях
 
Цитата
Egor Zaytsev написал:
Цитата
Михаил Филимонов написал:
 
Цитата
Egor Zaytsev  написал:
Выше или ниже? Если все таки выше, то все верно на фондовом будет быстрее заключаться сделки.  
Добрый день!
На фондовой секции (у моего брокера Открытие) нет рыночных ордеров.
Поэтому я отсылаю лимитный ордер, цена которого формируется так:
Если покутка, то SellPrice(из стакана минимальная) + 10 * шаг цены, и для продажи
BuyPrice(из стакана максимальная) - 10 * шаг цены.
Т.е ордер должен исполнится мгновенно
Время исполнения ордеров на ФОРТС и Фондовой секциях
 
Цитата
Egor Zaytsev написал:
Добрый день.

Михаил, здесь нужно понимать, что вы имеете ввиду под "время исполнения ордеров".
Речь идет о регистрации заявки или заключении сделки? Если первое, то опишите подробней, каким образом вы получили данные цифры и конечно в этом случае лучше обратиться к брокеру. Если второе, то как уже написали выше - возможно из-за ликвидности на рынке.  
Добрый день, Егор!
Если бы вопрос стоял о выставлении ордера, то я бы написал "время исполнения"
Конечно речь идет о сделках.
Ликвидность фондового рынка в разы выше срочного....
Trans2QuikAPI перестает работать после снятия неактивной заявки
 
Да и вообще, через месяц ГОД будет с последнего изменения вообще во всем разделе
"Утилиты и документация"
импорт транзакций, Время исполнения
 
Цитата
Imersio Arrigo написал:
Цитата
Михаил Филимонов написал:
Если посмотреть время выставления ордеров (ассинхронные ордера) и время их исполнения, то из этих данныхвообще ничго понять не возможно (время одинаковое)
Заявки рыночные? (Или по цене сильно хуже стакана?)
Если да, то нормально, что выставленная заявка была мгновенно исполнена. не?

Покажите эти же таблицы, но где видно цену заявки.

И эта, время ответа колбека, в общем случае, не равно времени выставления/исполнения.
Т.е. заявка может быть исполнена мгновенно, а колбек вызван через полсекунды.

Это происходит потому что время выставления/исполнения выставляется биржей, а вызов колбека зависит от потока которым присылает сервер квик в термниал, и от того насколько собственно терминал тормозит.
Вы хоть когда-нибудь торговали?
Что значит мгновенно? Так вообще не бывает да же на FIX, Plaza II и пр.
Не фантазируйте, пожалуйста!
Время исполнения ордеров на ФОРТС и Фондовой секциях
 
Добрый день!

Скажите, уважаемые разработчики, почему время исполнения ордеров на ФОРТС в разы меньше, чем на Фондовой секции?
Ордер SRH9 отправлен: 15.02.19 20:30:12
Ордер SRH9 исполнился: 15.02.19 20:30:12 (62 мс)
Ордер SBER отправлен: 15.02.19 20:30:12
Ордер SBER исполнился: 15.02.19 20:30:13 (562 мс)

Ордер SRH9 отправлен: 15.02.19 20:30:13
Ордер SRH9 исполнился: 15.02.19 20:30:13 (250 мс)
Ордер SBER отправлен: 15.02.19 20:30:13
Ордер SBER исполнился: 15.02.19 20:30:14 (561 мс)

Ордер SRH9 отправлен: 15.02.19 20:30:14
Ордер SRH9 исполнился: 15.02.19 20:30:14 (125 мс)
Ордер SBER отправлен: 15.02.19 20:30:14
Ордер SBER исполнился: 15.02.19 20:30:15 (749 мс)

Ордер SRH9 отправлен: 15.02.19 20:30:16
Ордер SRH9 исполнился: 15.02.19 20:30:16 (124 мс)
Ордер SBER отправлен: 15.02.19 20:30:16
Ордер SBER исполнился: 15.02.19 20:30:17 (999 мс)

Ордер SRH9 отправлен: 15.02.19 20:31:23
Ордер SRH9 исполнился: 15.02.19 20:31:23 (125 мс)
Ордер SBER отправлен: 15.02.19 20:31:23
Ордер SBER исполнился: 15.02.19 20:31:24 (1560 мс)

Ордер SRH9 отправлен: 15.02.19 20:31:27
Ордер SRH9 исполнился: 15.02.19 20:31:27 (109 мс)
Ордер SBER отправлен: 15.02.19 20:31:27
Ордер SBER исполнился: 15.02.19 20:31:28 (1014 мс)

Ордер SRH9 отправлен: 15.02.19 20:31:29
Ордер SRH9 исполнился: 15.02.19 20:31:29 (187 мс)
Ордер SBER отправлен: 15.02.19 20:31:29
Ордер SBER исполнился: 15.02.19 20:31:30 (1202 мс)

Ордер SRH9 отправлен: 15.02.19 20:31:31
Ордер SRH9 исполнился: 15.02.19 20:31:31 (202 мс)
Ордер SBER отправлен: 15.02.19 20:31:31
Ордер SBER исполнился: 15.02.19 20:31:32 (796 мс)

Ордер SRH9 отправлен: 15.02.19 20:31:32
Ордер SRH9 исполнился: 15.02.19 20:31:33 (109 мс)
Ордер SBER отправлен: 15.02.19 20:31:33
Ордер SBER исполнился: 15.02.19 20:31:34 (1435 мс)

Ордер SRH9 отправлен: 15.02.19 20:31:36
Ордер SRH9 исполнился: 15.02.19 20:31:36 (203 мс)
Ордер SBER отправлен: 15.02.19 20:31:36
Ордер SBER исполнился: 15.02.19 20:31:37 (437 мс)

Ордер SRH9 отправлен: 15.02.19 20:31:41
Ордер SRH9 исполнился: 15.02.19 20:31:41 (125 мс)
Ордер SBER отправлен: 15.02.19 20:31:41
Ордер SBER исполнился: 15.02.19 20:31:42 (873 мс)

Ордер SRH9 отправлен: 15.02.19 20:31:42
Ордер SRH9 исполнился: 15.02.19 20:31:42 (109 мс)
Ордер SBER отправлен: 15.02.19 20:31:42
Ордер SBER исполнился: 15.02.19 20:31:43 (687 мс)

Ордер SRH9 отправлен: 15.02.19 20:31:51
Ордер SRH9 исполнился: 15.02.19 20:31:51 (140 мс)
Ордер SBER отправлен: 15.02.19 20:31:51
Ордер SBER исполнился: 15.02.19 20:31:51 (312 мс)

Ордер SRH9 отправлен: 15.02.19 20:31:56
Ордер SRH9 исполнился: 15.02.19 20:31:56 (109 мс)
Ордер SBER отправлен: 15.02.19 20:31:56
Ордер SBER исполнился: 15.02.19 20:31:57 (1186 мс)
импорт транзакций, Время исполнения
 
Цитата
Михаил Филимонов написал:
Цитата
Imersio Arrigo написал:
 
Цитата
Михаил Филимонов  написал:
4 не было OnTradeTransaction() многое изменилось
 Я понимаю )) поэтому и спрашиваю.
Неохота самому разбираться и пробовать.
*)*)
MT5
2019.02.07 12:12:59.299 Trades 'ххххх': buy limit 2.00 LKOH-9.19 at 54273
2019.02.07 12:12:59.308 Trades 'ххххх': accepted buy limit 2.00 LKOH-9.19 at 54273
2019.02.07 12:12:59.309 Trades 'ххххх': buy limit 2.00 LKOH-9.19 at 54273 placed for execution in 10.614 ms

Советник
Print(__FUNCTION__, " Ордер ", trans.order, " размещен за ", DoubleToString(NormalizeDouble(MathAbs((stop_time_test - start_time_test) /1000), 3)));

2019.02.07 12:12:59.316 FCS_Trader (LKOH-6.19,M1) OnTradeTransaction Ордер 99220131 размещен за 17.00000000
Сегодня попробовал сделать то же самое в КВИКе
Вот что получилось

Правда, конец измерения приходится не на колбэк TRANS2QUIK_TRADE_STATUS_CALLBACK
а на TRANS2QUIK_ORDER_STATUS_CALLBACK, т.к в первом случае мы получаем несколько сообщений,
а во втором просто проверяем nStatus

Но самое интересное не в этом. У меня в Открывашке на реале стоит квик 7.19.0.51
Если посмотреть время выставления ордеров (ассинхронные ордера) и время их исполнения, то из этих данных
вообще ничго понять не возможно (время одинаковое)
Trans2QuikAPI перестает работать после снятия неактивной заявки
 
Цитата
DarlokAg написал:
Цитата
Уже месяц прошел, но проблема все еще актуальна. Когда ориентировочно ждать фикса проблемы?
Уже 5 месяцев прошло...
DDE и trans2quik.dll
 
Спасибо, разобрался.
Исправление ошибок в trans2quik.dll
 
Цитата
Alexey Ivannikov написал:
Цитата
Михаил Филимонов написал:
 
Цитата
Добрый день.

Во избежание недопонимания сразу поясним: не в ближайшем обновлении, а в одной из очередных версий. Как только такая версия выйдет - Вы будете уведомлены.
Добрый!
Спасибо, понятно.
импорт транзакций, Время исполнения
 
Цитата
новичок написал:
Цитата
Михаил Филимонов написал:
 
Цитата
новичок  написал:
 
Цитата
 Михаил Филимонов   написал:
вот именно!

пс: Мишаня, ты со мной примерно в одной временной линии, ткчт в зеркало глянь таки.
ппс: поменьше углеводов :))
Я, тебе хам, не Мишаня!
Поучи свою жену ЩИ варить, а я уж как-нибудь сам разбурусь куда мне
смотреть и что делать!
импорт транзакций, Время исполнения
 
Цитата
новичок написал:
Цитата
Михаил Филимонов написал:
 
Цитата
это выглядит как упоротость.

тебе говорят, что твой раундтрип до сервера около 10 мс

тебе говорят, что МТ пишет что-то, что не может происходить в реальности

адекватный технарь задумался бы, ты - машешь руками и брызгаешь слюнями

"выпей отвар их трав " (с)
Модераторы!
Немного странно, что Вы становитесь на сторону откровенного хама, удаляя сообщение одной из сторон.
Может быть Вам не нравятся не лестные отзывы о Вашем "детище"?
Исправление ошибок в trans2quik.dll
 
Вот, например, ответ Егора Зайцева, на найденую мной ошибку
"Добрый день,
     
     Действительно, в настоящее время терминал при получении подписки       от Trans2QUIK на получение заявок и сделок не проверяет валидность       указанных в подписке кодов классов и инструментов.
     Данная ошибка не может привести ни к каким серьёзным последствиям       и  будет исправлена в одной из очередных версий ПО.
     
     Приносим извинения за причиненные неудобства."
Исправление ошибок в trans2quik.dll
 
Цитата
Alexey Ivannikov написал:
Цитата
Добрый день.

О каких именно ошибках идёт речь, можете уточнить?
Добрый!
О тех ошибках, которые описаны, здесь, на форуме, которые Вы сами признали
и обещали испраить в ближайшем билде (обновлении).
импорт транзакций, Время исполнения
 
Цитата
Imersio Arrigo написал:
Цитата
Михаил Филимонов написал:
4 не было OnTradeTransaction() многое изменилось
Я понимаю )) поэтому и спрашиваю.
Неохота самому разбираться и пробовать.
*)*)
MT5
2019.02.07 12:12:59.299 Trades 'ххххх': buy limit 2.00 LKOH-9.19 at 54273
2019.02.07 12:12:59.308 Trades 'ххххх': accepted buy limit 2.00 LKOH-9.19 at 54273
2019.02.07 12:12:59.309 Trades 'ххххх': buy limit 2.00 LKOH-9.19 at 54273 placed for execution in 10.614 ms

Советник
Print(__FUNCTION__, " Ордер ", trans.order, " размещен за ", DoubleToString(NormalizeDouble(MathAbs((stop_time_test - start_time_test) /1000), 3)));

2019.02.07 12:12:59.316 FCS_Trader (LKOH-6.19,M1) OnTradeTransaction Ордер 99220131 размещен за 17.00000000
импорт транзакций, Время исполнения
 
Цитата
Imersio Arrigo написал:
Цитата
в 4. Но понятие о работе асинхронных вызовов имею.
в 4 не было OnTradeTransaction() многое изменилось...
Страницы: Пред. 1 2 3 4 5 6 7 8 След.
Наверх