Ошибка #1 при модификации ордеров - страница 7

 
hoz:

Борис, тут всё просто.

Во-первых, в таком случает не забудишь это в будущем т.к. данная проверка будет всегда присуствовать.

Во-вторых, на данную проверку времени нужно так мало, что это не придаст никакой оптимизации кода и не ускорит процесс. Т.е. либо проверить на "Разрешено ли торговать" и войти в функцию, либо войти и проверить "Разрешено ли торговать".

В-третьих, про эксвити я согласен, это уже нужно выносить отдельно. Я у себя этот кусок отпилил. И много чего убрал. Щяс функция короткая уже в общем-то.

Ну и прекрасно! До проб на демо не дошёл?
 
borilunad:
Ну и прекрасно! До проб на демо не дошёл?
Как это не доёшл. Дошёл и прошёл! Всё работает. Осталось несколько моментов уяснить общих и всё будет чётко.
 
Viktar Dzemikhau #:

Борис, у меня в методе fOrderModify() учтены все проверку, и, на СТОПЛЕВЕЛ и на ФРИЗЛЕВЕЛ. Так что, если б какой-то из этих условий не соблюдался бы, то до модификации не до шло бы.

 

Ну так, если бы у меня даже перезаписалась ошибка, как вариант. То последняя то всё-равно 1 в моём случае. Разве не так? 

Если я даже не так с ошибками работаю. Можно на примере показать, что Вы имеете в виду?

Вот моя функция модификации со всеми принтами т.к. щяс я занимаюсь её отладкой. (На другие методы, которые в ней используются  не обращайте внимания).

 

Ну вы функцию ResetLastError(); вызываете прям сразу после проверки. Зачем и что вы хотите таким вызовом увидеть? То есть, сама ошибка происходит после вызова функции OrderModify(), значит функция ResetLastError() должна вызываться после функции OrderModify(). Потом в цикле while() у вас нет проверки перед модификацией ордера, а вот именно из-за этого, что в функцию OrderModify() могут попасть прежние данные и возникает эта ошибка № 1, так как ордер был модифицирован, но ничего не изменилось Вот эту проверку надо поставить в цикл: 

if ((ND (OrderOpenPrice()) != fd_OpenPrice) || ND ((OrderStopLoss()) != fd_NewSL) || (ND (OrderTakeProfit()) != fd_NewTP)) 

и, нельзя ли писать наоборот... сравнивать свои переменные с параметрами ордеров? То есть, в цикле тоже надо сделать примерно вот так: 

if ((ND (OrderOpenPrice()) != fd_OpenPrice) || ND ((OrderStopLoss()) != fd_NewSL) || (ND (OrderTakeProfit()) != fd_NewTP)) 
{     
      if (!OrderModify (fi_Ticket, fd_OpenPrice, fd_NewSL, fd_NewTP, fdt_Expiration, fc_Arrow))
      {
         return false; или break;
      }
}

В общем попробуйте может что получится?! Удачи вам...