Форум » Консультации по программированию » OrderModify error 1 » Ответить

OrderModify error 1

hoz: В эксперте ест функция MovingLimitPositions(), вызывающая метод модификации из класса. При попытке модификации ордера(на данный момент такой обнаружен один) возникает ошибка OrderModify error 1. Я уже наклепал принтов, даже более чем излишне в соответствующих фунциях, но.. не помогает. Значение параметров в функцию модификации согласно принтам передаются правильные. НО... На выходе OrderModify error 1. Согласно задумке модификация должна быть сразу 3 параметров(или 2) т.к. отложенный ордер. Соответствуенно, модифицировать можно и цену открытия, и стоп и тейк. Так вот принтуя все значения переменных вводных параметров в OrderModify() я заметил, что непосредственно перез функцией модификации ни каких ошибок нет. а сразу же после неё на выходе ошибка! Это как можно понимать? Баг платформы? Ренат на форуме метаквотовцев съезжает с вопроса. Начал мне про контроль ошибок задвигать. Но я то вижу, что это тут не причём. Вот этот кусок кода, кстати: //---- Выполняем модификацию в тестере if (!CBase.GetRealTrade()) { if ((ND (OrderOpenPrice()) != fd_OpenPrice) || ND ((OrderStopLoss()) != fd_NewSL) || (ND (OrderTakeProfit()) != fd_NewTP)) { ResetLastError(); Print (__FUNCTION__, ": ", " Тикет № ", OrderTicket(), "; OrderOpenPrice() = ", OrderOpenPrice(), "; OrderStopLoss() = ", OrderStopLoss(), "; OrderTakeProfit() = ", OrderTakeProfit()); Print (__FUNCTION__, ": ", "Тикет № ", fi_Ticket, "; New_OOP = ", fd_OpenPrice, "; New_SL = ", fd_NewSL, "; New_TP = ", fd_NewTP); Print (__FUNCTION__, ": ", "_LastError = ", _LastError); if (!OrderModify (fi_Ticket, fd_OpenPrice, fd_NewSL, fd_NewTP, fdt_Expiration, fc_Arrow)) { CLogs.WriteLog (StringConcatenate ("fOrderModify(): ", CErrs.ErrorToString (_LastError))); Print (__FUNCTION__, ": ", "После модификации тикета № ", fi_Ticket); Print (__FUNCTION__, ": ", "Тикет № ", fi_Ticket, "; New_OOP = ", fd_OpenPrice, "; New_SL = ", fd_NewSL, "; New_TP = ", fd_NewTP); return (false); } } } А вот принт в журнале с этого места: 0 17:59:20 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: PositionsManipulations::fOrderModify: Тикет № 2; New_OOP = 1.34048; New_SL = 1.34125; New_TP = 1.33362 0 17:59:20 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: PositionsManipulations::fOrderModify: Тикет № 2; OrderOpenPrice() = 1.34048; OrderStopLoss() = 0.0; OrderTakeProfit() = 0.0 0 17:59:20 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: PositionsManipulations::fOrderModify: Тикет № 2; New_OOP = 1.34048; New_SL = 1.34125; New_TP = 1.33362 0 17:59:20 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: PositionsManipulations::fOrderModify: _LastError = 0 2 17:59:20 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: modify #2 sell limit 0.10 EURUSD at 1.34048 sl: 1.34125 tp: 1.33362 ok 3 17:59:20 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: OrderModify error 1 0 17:59:20 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: MovingLimitPositions Видите? Распринтованы новые и текущие параметры ордера. Перед функцией OrderModify() ошибок нет. А потом пишится типа: 2 17:59:20 2013.08.26 00:00 Kevin Martens_Moi_Myrei EURUSD,M15: modify #2 sell limit 0.10 EURUSD at 1.34048 sl: 1.34125 tp: 1.33362 ok Типа модификация успешна.. (раз уж стоит ОК). Потом ошибка... Как это понимать? Канкретно баг мт4? Тут надёжности не было и не будет? Ведь даже в тестере не хочет работать этот код...

Ответов - 3

Scriptong: hoz пишет: Потом ошибка... Как это понимать? Это нужно понимать, как ошибку в коде. Только вот ошибку Вы ищите не в том месте, которое привели здесь. Если бы ошибка возникала в результате именно этого кода, то в логе были бы строки, начинающиеся со строки "После модификации тикета". Но так как ее нет, получается, что ошибка возникает в другом месте кода, которое Вы упустили из рассмотрения на предмет ошибки. Ищите, где в программе еще есть OrderModify. Чтобы такого не было, используйте функции работы с ордерами по одному экземпляру на всю программу. Их просто больше не нужно. В итоге всегда будете знать, с чего начинать поиск ошибок.

hoz: Игорь, ведь ответ то приходит, что мол: modify #2 sell limit 0.10 EURUSD at 1.34048 sl: 1.34125 tp: 1.33362 ok Я это расцениваю как положительный исход попытки открытия ордера. Разве не так? Касаемо модификации в других местах. Ну .. это, нпврядли. Я свой код прилагаю. Это сырой типа вариант. Который я писал, дабы проверить просто индикатор Мюррея. А так же, чтоб откатать классы некоторые. В данном исходнике, есть вызов: CPosMan.fOrderModify().. Это и есть метод модификации позиций. Встречается он в 2 местах. Для одного типа ордера. и, для другого. Больше нигде. Получается что-то другое...

Scriptong: hoz пишет: modify #2 sell limit 0.10 EURUSD at 1.34048 sl: 1.34125 tp: 1.33362 ok Я это расцениваю как положительный исход попытки открытия ордера. Разве не так? Все так. К этому месту лога вопросов нет. hoz пишет: Касаемо модификации в других местах. Ну .. это, нпврядли. Это не вряд ли, а точно. В журнале есть сообщение об ошибке. Причем за ним не следует распринтовка ошибки экспертом. Это указывает на OrderModify, который упущен из рассмотрения. Вот об этом операторе и идет речь. hoz пишет: Я свой код прилагаю. В коде много включений: #import "LDataConvertion.ex4" double ND (double v); string DToS (double v); string IToS (int v); string DToSByLots( double v ); #import #include <HOZ_Code\Structures\MarketData.mqh> #include <HOZ_Code\Classes\BaseInfo.mqh> #include <HOZ_Code\Classes\HandlingWithErrors.mqh> #include <HOZ_Code\Classes\Logging.mqh> #include <HOZ_Code\Classes\Symbols.mqh> #include <HOZ_Code\Classes\PositionsManipulations.mqh> #include <HOZ_Code\Classes\PositionsTrailings.mqh> #include <HOZ_Code\Classes\PositionsInformations.mqh> а потому это не весь код. Иначе воспроизвести ошибку, описанную Вами, не получится.




полная версия страницы