Помогите решить Error 1 с OrderModify - страница 6

 
Artyom Trishkin:

Вы на ровном месте проблему делаете.

Проверяйте перед модификацией чтобы модифицируемые параметры не были равны параметрам модифицируемого ордера. Тогда и не будет ошибки 1

А цикл тут совсем не при чём. Совершенно. Цикл у вас верный - от количества ордеров-1, до нуля включительно. И он не влияет на ошибку модификации. Цикл влияет только на верность выбора очередного ордера в списке.

Да я и не спорю.

Возможно проблема и есть на ровном месте. Какая-то мелочь, но пока не вижу.

А как на счет примера рабочей функции усреднения без ошибки 1 ?  Чтобы не быть голословным... А то советчиков...

 
Hossar:

Да я и не спорю.

Возможно проблема и есть на ровном месте. Какая-то мелочь, но пока не вижу.

А как на счет примера рабочей функции усреднения без ошибки 1 ?  Чтобы не быть голословным... А то советчиков...

Почитайте: https://www.mql5.com/ru/articles/1561

Cуть в том если вы сравниваете два значения, значение установки стопа и цену если там уже стоп, то оно не совпадет. Надо вычитать одно от другого, нормализовывать и сравнивать с нулем, тогда ошибки 1 не будет. 

//+------------------------------------------------------------------+
//| correct comparison of 2 doubles                                  |
//+------------------------------------------------------------------+
bool CompareDoubles(double number1,double number2)
  {
   if(NormalizeDouble(number1-number2,Digits())==0) return(true);
   else return(false);
  }
Особенности работы с числами типа double в MQL4
Особенности работы с числами типа double в MQL4
  • 2009.11.02
  • MetaQuotes Software Corp.
  • www.mql5.com
В данной заметке собраны советы по решению наиболее часто возникающих ошибок при работе с числами типа double в программах на MQL4.
 
Hossar:

Да я и не спорю.

Возможно проблема и есть на ровном месте. Какая-то мелочь, но пока не вижу.

А как на счет примера рабочей функции усреднения без ошибки 1 ?  Чтобы не быть голословным... А то советчиков...

Сложно цены сравнить?
 
Artyom Trishkin:
Сложно цены сравнить?

Давайте без сарказма...

Вот реальный совет, спасибо. Буду прикидывать... 

 
Vladimir Zubov:
Artyom Trishkin:

Чё вы ему про вещественные числа впариваете? Вся проблема в усреднении и особом направлении цикла...

Блин... люди три года проблему не могут решить, а они ему про сравнение чисел...

Hossar:

Алексей!

Ошибка 1 и циклы взаимосвязаны, может не прямо - но косвенно или опосредованно.

В цирк можно не ходить... начитаешься и насмеёшься от души...
 
Alexey Viktorov:

Чё вы ему про вещественные числа впариваете? Вся проблема в усреднении и особом направлении цикла...

Блин... люди три года проблему не могут решить, а они ему про сравнение чисел...

В цирк можно не ходить... начитаешься и насмеёшься от души...

А не с этого ли вы сами начинали, теперешние "умники"... А теперь понтуетесь, тщеславные...

Впрочем проблема решена... А тот, кто начинал эту тему 3 года назад, так и не отписался, что у него получилось...

Спасибо всем, кто молчал смеясь, и кто смеясь советовал...

 Vladimir Zubov !   Респект!

 
Hossar:

А не с этого ли вы сами начинали, теперешние "умники"... А теперь понтуетесь, тщеславные...

Впрочем проблема решена... А тот, кто начинал эту тему 3 года назад, так и не отписался, что у него получилось...

Спасибо всем, кто молчал смеясь, и кто смеясь советовал...

 Vladimir Zubov !   Респект!

Теперь сравни ответ уважаемого Владимира

Vladimir Zubov:

Почитайте: https://www.mql5.com/ru/articles/1561

Cуть в том если вы сравниваете два значения, значение установки стопа и цену если там уже стоп, то оно не совпадет. Надо вычитать одно от другого, нормализовывать и сравнивать с нулем, тогда ошибки 1 не будет.

//+------------------------------------------------------------------+
//| correct comparison of 2 doubles                                  |
//+------------------------------------------------------------------+
bool CompareDoubles(double number1,double number2)
  {
   if(NormalizeDouble(number1-number2,Digits())==0) return(true);
   else return(false);
  }

и мои ответы на предыдущей странице

Alexey Viktorov:

Мне лениво перечитывать всё что написано здесь, поэтому может быть повторю уже сказанное.

Ошибка #1 -

1

ERR_NO_RESULT

Нет ошибки, но результат неизвестен

появляется тогда когда отправляется приказ модифицировать ордер с теми параметрами которые уже установлены ордеру. Следовательно чтобы от неё избавиться надо проверить новое значение с тем которое есть у ордера и только если эти значения не равны, а лучше их нормализованная разность не равна нулю, тогда отправлять приказ OrderModify();

double sl, tp;
 // Потом рассчитываем эти sl и tp или получаем их из входных параметров функции
 // и потом цикл для всех ордеров...
for(int i = OrdersTotal()-1; i >=0; i--)
 {
  if(OrderSelect(i, SELECT_BY_POS) // можно добавить проверку символа и магика
   {
    if(NormalizeDouble(OrderStopLoss()-sl, _Digits) != 0 || NormalizeDouble(OrderTakeProfit()-tp, _Digits) != 0)// Об этом я говорил в предыдущем сообщении
     if(!OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0))
       Print("Чё-та не получился ордермодифай, ");
   }
 }

И посчитай сколько лет извините дней потребовалось это понять...

Причина обращения: