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