|
| |
Сообщение: 33
Зарегистрирован: 30.05.13
Репутация:
0
|
|
Отправлено: 08.11.14 17:03. Заголовок: OrderModify error 1
В эксперте ест функция 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? Тут надёжности не было и не будет? Ведь даже в тестере не хочет работать этот код...
|
|
| |
Сообщение: 934
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация:
2
|
|
Отправлено: 09.11.14 15:53. Заголовок: hoz пишет: Потом ош..
hoz пишет: цитата: | Потом ошибка... Как это понимать? |
| Это нужно понимать, как ошибку в коде. Только вот ошибку Вы ищите не в том месте, которое привели здесь. Если бы ошибка возникала в результате именно этого кода, то в логе были бы строки, начинающиеся со строки "После модификации тикета". Но так как ее нет, получается, что ошибка возникает в другом месте кода, которое Вы упустили из рассмотрения на предмет ошибки. Ищите, где в программе еще есть OrderModify. Чтобы такого не было, используйте функции работы с ордерами по одному экземпляру на всю программу. Их просто больше не нужно. В итоге всегда будете знать, с чего начинать поиск ошибок.
|