Ошибка OrderModify ERROR 1 при изменения уровня стопа функцией трейлингстопа! Как исправить? - страница 2

 
rsi:
Не знаю в чём может быть дело. Можете посмотреть мой прошлогодний эксперт. Ошибок не выдаёт. Попробуйте явно вывести в Print() значения TrailingStop,  TrailingStop1, TrailingStop2 перед оператором модификации и посмотрите в журнале - может даст пищу для размышлений (в приведённом фрагменте они не проверяются).

Я щас пытаюсь с простым тралом сделать. Отказался от трала-удавки - уже нет времени возится.
 
//+------------------------------------------------------------------+
//|                                                   e-Trailing.mq4 |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//| 12.09.2005 Автоматический Trailing Stop всех открытых позиций    |
//|            Вешать только на один график                          |
//+------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
 
//------- Внешние параметры ------------------------------------------
extern bool   ProfitTrailing = True;  // Тралить только профит
extern int    TrailingStop   = 8;     // Фиксированный размер трала
extern int    TrailingStep   = 2;     // Шаг трала
extern bool   UseSound       = True;  // Использовать звуковой сигнал
extern string NameFileSound  = "expert.wav";  // Наименование звукового файла
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start() {
  for (int i=0; i<OrdersTotal(); i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      TrailingPositions();
    }
  }
}
 
//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
void TrailingPositions() {
  double pBid, pAsk, pp;
 
  pp = MarketInfo(OrderSymbol(), MODE_POINT);
  if (OrderType()==OP_BUY) {
    pBid = MarketInfo(OrderSymbol(), MODE_BID);
    if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*pp) {
      if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*pp) {
        ModifyStopLoss(Bid-TrailingStop*pp);
        return;
      }
    }
  }
  if (OrderType()==OP_SELL) {
    pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
    if (!ProfitTrailing || OrderOpenPrice()-Ask>TrailingStop*pp) {
      if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
        ModifyStopLoss(Ask+TrailingStop*pp);
        return;
      }
    }
  }
}
 
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStopLoss) {
  bool fm;
 
  fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
  if (fm && UseSound) PlaySound(NameFileSound);
}
//+------------------------------------------------------------------+

Я в своем эксперте для Чемпионата использовал Трал от Игоря Кима, только везде (где только можно) добавил NormalizeDouble(), никаких ошибок нет

 
Боюсь придётся без трала выпустить на Чемпионат если не найдётся решение!
 
Ок спасибо,sashken ! У вас хороший советник был на прошлом Чемпе. Удачи Вам!
 

Sashken! Тысяча спасибо Вам и Игорю Ким создавшему столь замечательный советник-трал!

 
meta-trader2007 писал (а):
Советник выдаёт ошибку OrderModify ERROR 1 , но не всегда а только иногда. Источник ошибки - скорее всего трал, как ошибка возникает при попытке изменить уровня стопа.
Читаем HELP!!!
Что значит ошибка с номером 1 при модификации ордера? Читаем:
ERR_NO_RESULT - OrderModify пытается изменить уже установленные значения такими же значениями. Необходимо изменить одно или несколько значений и повторить попытку.

Т.е. при "трале" Вы пытаетесь менять уровень стопа сам на себя. Откуда такое может быть? Из операций предварительного сравнения цен перед проведением модификации ордера!
Вы сравниваете ненормализованные цены и получаете результат - цены неравны. Пытаетесь произвести модификацию (при ней цены нормализуются принудительно) и получаете ответ что новая цена уже и так равна старой - менять нечего.
Отсюда вывод - всегда нормализуйте цены в операциях сравнения!!!
 
Жаль уже нет времени для тестирования с этим тралом для получения наилучших результатов. :(
Но ошибок больше нет и это главное! Мой советник теперь может учавствовать!
 
Simca:
meta-trader2007 писал (а):
Советник выдаёт ошибку OrderModify ERROR 1 , но не всегда а только иногда. Источник ошибки - скорее всего трал, как ошибка возникает при попытке изменить уровня стопа.
Читаем HELP!!!
............
Отсюда вывод - всегда нормализуйте цены в операциях сравнения!!!

Точно:) Без нормализации вышеуказанный вариант тоже выдавал эту ошибку.

 
Simca:
meta-trader2007 писал (а):
Советник выдаёт ошибку OrderModify ERROR 1 , но не всегда а только иногда. Источник ошибки - скорее всего трал, как ошибка возникает при попытке изменить уровня стопа.
Читаем HELP!!!
Что значит ошибка с номером 1 при модификации ордера? Читаем:
ERR_NO_RESULT - OrderModify пытается изменить уже
установленные значения такими же значениями. Необходимо изменить одно или
несколько значений и повторить попытку.

Т.е. при "трале" Вы пытаетесь менять уровень стопа сам на себя. Откуда такое может быть? Из операций предварительного сравнения цен перед проведением модификации ордера!
Вы сравниваете ненормализованные цены и получаете результат - цены неравны. Пытаетесь произвести модификацию (при ней цены нормализуются принудительно) и получаете ответ что новая цена уже и так равна старой - менять нечего.
Отсюда вывод - всегда нормализуйте цены в операциях сравнения!!!


Понятно в чём ошибка. Спсибо за разъяснение причины ошибки. Теперь всегда буду учитывать  в советниках такое. Я обычно применял нормализацию только для цен и занчений стопа и тейка  при открытиии позы....
 
Simca:

Читаем HELP!!!
Что значит ошибка с номером 1 при модификации ордера? Читаем:
ERR_NO_RESULT - OrderModify пытается изменить уже установленные значения такими же значениями. Необходимо изменить одно или несколько значений и повторить попытку.

Т.е. при "трале" Вы пытаетесь менять уровень стопа сам на себя. Откуда такое может быть? Из операций предварительного сравнения цен перед проведением модификации ордера!
Вы сравниваете ненормализованные цены и получаете результат - цены неравны. Пытаетесь произвести модификацию (при ней цены нормализуются принудительно) и получаете ответ что новая цена уже и так равна старой - менять нечего.
Отсюда вывод - всегда нормализуйте цены в операциях сравнения!!!
Semica, ОГРОМНОЕ СПАСИБО! Ну почему таким доступным языком нельзя написать весь мануал к MT4?! Дорогие разработчики представьте что перед группой писателей стоит задача написать самый интересный рассказ не важно какой но с одним условием писать на идише! Как вы думаете выявит ли такой отбор действительно самого талантливого писателя или всё же победит только тот, кто знает идиш? В ваших же интересах достич максимально популярности MT4 - так напишите же наконец за 3 года полный и доступный хелп вместо записок соседу разработчику, вернувшемуся после отпуска для того чтобы он наверстал упущенное. А это выглядит именно так, если программисты со стажем не могут с первого раз понять, что к чему, и только методом "научного тыка" проясняют ситуацию. ПОЖАЛУЙСТА ПРИСЛУШАЙТЕСЬ! Все вам скажут только СПАСИБО!
Причина обращения: