Требуется более развернутая информация для изучения проблемы. Какая транзакция посылается, с какими параметрами. Т.е. ожидаем от Вас саму транзакцию, по которой получаете ошибку.
Требуется более развернутая информация для изучения проблемы. Какая транзакция посылается, с какими параметрами. Т.е. ожидаем от Вас саму транзакцию, по которой получаете ошибку
Добрый день! Транзакции посылает робот. Пораметры такие
procedure TExpert.SendOrder; var outStr, id, s: string; res: long; ErrCode: long; ErrSize: Dword; ErrStr: LPSTR; begin if(CheckFutPrice(f_price) = false) then begin Mutex.Lock; try FTransBusy:= false; finally Mutex.Unlock; end; FmemoStr:= 'SendOrder: Не правильная цена в заявке ' + FloatTostr(f_price); Synchronize(UpdMemo); exit; end; FOrder:= 0; FTransID:= GetTransID(); id:= UintToStr(TransID); ErrCode:= 0; ErrSize:= 0; ErrStr:= nil; Mutex.Lock; try FTransBusy:= true; finally Mutex.Unlock; end;
case dir of BUY: s:= 'B'; SELL: s:= 'S'; end; outStr:= 'ACCOUNT=' + 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(f_price) + '; QUANTITY=' + FloatToStr(Qnty) + ';'; res:= T2QSendASyncTrans(LPSTR(AnsiString(outStr)), ErrCode, ErrStr, ErrSize); if(res <> TRANS2QUIK_SUCCESS) then begin Mutex.Lock; try FTransID:= 0; FTransBusy:= false; finally Mutex.Unlock; end; FmemoStr:= 'SendOrder: Ордер ' + ExpData.FutData.SecCode + ' не отправлен.'; Synchronize(UpdMemo); end else begin if((ExitOrder.Order > 0) and (dir = BUY)) then RemoveExitOrder(); FmemoStr:= 'SendOrder: Ордер ' + ExpData.FutData.SecCode + ' отправлен.'; Synchronize(UpdMemo); end; end;
посмотрите на время: 25.07.2024 10:00:18.501 --> SetEnterOrder: Ордер CMH5 отправлен. 25.07.2024 10:00:18.501 --> Ошибка: Указанная транзакция по указанному классу не найдена: "SPBFUT". -------------------- там где ошибки нет, время различается. -------------- Предположу, что еще не прошла регистрация транзакции и что-то ее не нашло.
nikolz написал: там где ошибки нет, время различается.
Конечно различается, ордер "слетал" на Биржу и вернулся ответ.
А где ошибка, то все происходит на локальном компе, так что время не показатель.
Обидно то, что 3 с лишнем года все работало как часы, а вот теперь появилась проблема. Не знаю как устроен внутри Квик, но с МТ-5 постоянно "цапался" с разработчиками, как новый билд, так вылезает какая-либо ошибка.
Да, и еще погрешность фунции засечки времени, кажется 16 мс., да и саму ошибку Указанная транзакция по указанному классу не найдена: "SPBFUT". выдает ДЛЛ или терминал, это не мое.
Михаил Филимонов написал: Да, и еще погрешность фунции засечки времени, кажется 16 мс., да и саму ошибку Указанная транзакция по указанному классу не найдена: "SPBFUT". выдает ДЛЛ или терминал, это не мое.
Цитата
Михаил Филимонов написал: Конечно различается, ордер "слетал" на Биржу и вернулся ответ.
А где ошибка, то все происходит на локальном компе, так что время не показатель.
Обидно то, что 3 с лишнем года все работало как часы, а вот теперь появилась проблема. Не знаю как устроен внутри Квик, но с МТ-5 постоянно "цапался" с разработчиками, как новый билд, так вылезает какая-либо ошибка.
Так как у Вас время при возникновении ошибки не отличается, то это говорит о том, что заявка никуда не летала. Это возможно, если ошибка в параметрах заявки. Т е ошибку обнаружил сам терминал. надо вывести в лог файл содержимое самой заявки. Возможно оно искажается либо там nil.
Рекомендуем проверить статусы инструментов по классу SPBFUT в момент создания транзакции. В таблицу текущих торгов добавьте параметры "Состояние сессии", "Статус торговли инструментом". Если "Сессия" в состоянии "Закрыта" и/или "Статус торговли инструментом" будет "Не торгуется", то транзакция не выполняется по этой причине.
Рекомендуем проверить статусы инструментов по классу SPBFUT в момент создания транзакции. В таблицу текущих торгов добавьте параметры "Состояние сессии", "Статус торговли инструментом". Если "Сессия" в состоянии "Закрыта" и/или "Статус торговли инструментом" будет "Не торгуется", то транзакция не выполняется по этой причине.
Добрый день!
Ищите ошибку на своей стороне, робот написан 3 года назад со всеми проверками и прекрасно работал ДО ОБНОВЛЕНИЯ. procedure TExpert.OnTick; var PosSt: POS_STATE; PosEQ: integer; RemOrder: boolean; inVol, outVol, aZalog: Double; begin if(StopTrading = false) then //false - expert work begin if((Settings.isSet = true) and (DllConn = true) and (QConn = true) and (WrongData.Res = false)) then begin if(CheckTime(RemOrder) = true) then begin if((ExpData.FutData.Session = 'открыта') and (ExpData.SpotData.Session ='открыта')) then begin ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Михаил Филимонов, в момент возникновения ошибки при отправки транзакции роботом попробуйте ввести такую же транзакцию самостоятельно через терминал (окно со списком транзакций можно открыть с помощью горячих клавиш "Ctrl+T") и сообщите результат.