Не работает Траал Кима?

 

Наткнулся я на ветку Кимовских функций. Обрадовался. Всё в основном логично и понятно. Изучил логику некоторых функций и написал себе Траал на основе 2 функций Кима SimpleTrailing и ModifyOrder:

//+------------------------------------------------------------------+

void TrailingPositions(string sy="", double op=-1,double mn=-1)
{
  int dg, i, TrailForBuy=100, TrailForSell=100, CurPo;
  double CurBid, CurAsk;
 
  if (sy=="0") sy=Symbol();
  for(i=OrdersTotal()-1;i>=0;i--)
   { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
          { if( (OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op) && (mn<0 || OrderMagicNumber()==mn) )
                { CurPo=MarketInfo(OrderSymbol(),MODE_POINT);
                   { if(OrderType()==OP_BUY)
                         { CurBid=MarketInfo(OrderSymbol(),MODE_BID);
                           TrailingStop=NormalizeDouble(TrailForBuy,dg);
                                { if(CurBid-OrderOpenPrice()>TrailingStop*CurPo)
                                   {
                                     if (OrderStopLoss()<CurBid-TrailingStop*CurPo)
                                      {
                                        ModifyOrder(-1, CurBid-TrailingStop*CurPo, -1);
                                      }
                                   }

                                }  
                         } 
                   }

                   { if(OrderType()==OP_SELL)
                         { CurAsk=MarketInfo(OrderSymbol(),MODE_ASK);
                            TrailingStop=NormalizeDouble(TrailForSell,dg);
                                { if(OrderOpenPrice()-CurAsk>TrailingStop*CurPo)
                                   { if(OrderStopLoss()<CurAsk+TrailingStop*CurPo)
                 
                                           {
                                             ModifyOrder(-1, CurAsk+TrailingStop*CurPo, -1);
                                           }
                                   } 
                                }
                         }
                   }
                }
          }
   }
}
//+-----------------------------------------------------------------+

void ModifyOrder(double pr=-1, double sl=0, double tp=0, color cl=CLR_NONE) {
  bool   SendMod, UseSound;
  double op, pa, pb, os, ot;
  int    dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it, NumberOfTry=10;
 
  if (pr<=0) pr=OrderOpenPrice();
  if (sl<0 ) sl=OrderStopLoss();
  if (tp<0 ) tp=OrderTakeProfit();
  
  pr=NormalizeDouble(pr, dg);
  sl=NormalizeDouble(sl, dg);
  tp=NormalizeDouble(tp, dg);
  op=NormalizeDouble(OrderOpenPrice() , dg);
  os=NormalizeDouble(OrderStopLoss()  , dg);
  ot=NormalizeDouble(OrderTakeProfit(), dg);
 
  if (pr!=op || sl!=os || tp!=ot) {
        for (it=1; it<=NumberOfTry; it++) {
          if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
          while (!IsTradeAllowed()) Sleep(5000);
          RefreshRates();
          SendMod=OrderModify(OrderTicket(), pr, sl, tp, 0, cl);
          if (SendMod)
      {
        if (UseSound) PlaySound("expert.wav"); break;
      }
           else {
                er=GetLastError();
                pa=MarketInfo(OrderSymbol(), MODE_ASK);
                pb=MarketInfo(OrderSymbol(), MODE_BID);
//              Print("Error(",er,") modifying order: ",ErrorDescription~(er),", try ",it);
//              Print("Ask=",pa,"  Bid=",pb,"  sy=",OrderSymbol(),
//                        "  op="+GetNameOP(OrderType()),"  pp=",pr,"  sl=",sl,"  tp=",tp);
                Sleep(1000*10);
          }
        }
  }
}

Ну и вставил данную функцию в start() так:

   if(TrailingStop>0.0 && OrdersTotal()>0)
      TrailingPositions();

Много раз уже пересматривал код, всё вроде бы в порядке. Но Траал не работает. В тестере при прогонке советника на истории появляется ошибка:

2012.09.18 14:05:23     2011.08.02 11:07  swb grid 4.1_Traal_Correct____1 EURUSD,M15: OrderModify error 130
2012.09.18 14:05:23     2011.08.02 11:07  swb grid 4.1_Traal_Correct____1 EURUSD,M15: OrderModify error 130
2012.09.18 14:05:23     2011.08.02 11:07  swb grid 4.1_Traal_Correct____1 EURUSD,M15: OrderModify error 130
2012.09.18 14:05:23     2011.08.02 11:07  swb grid 4.1_Traal_Correct____1 EURUSD,M15: OrderModify error 130
2012.09.18 14:05:23     2011.08.02 11:07  swb grid 4.1_Traal_Correct____1 EURUSD,M15: OrderModify error 130
2012.09.18 14:05:23     2011.08.02 11:07  swb grid 4.1_Traal_Correct____1 EURUSD,M15: OrderModify error 130
2012.09.18 14:05:23     2011.08.02 11:07  swb grid 4.1_Traal_Correct____1 EURUSD,M15: OrderModify error 130

Я так понимаю это могло быть связано с близким стопом. Но стоп в настройках 100пп. на 5-ти знаке.

Хм. Тока что проверил, что на Alpari работает сова отлично и ордера модифицируются. Первоначально же я тестил на fxstart. Как узнать причину ошибки на одном ДЦ, в то время, когда на другом всё отлино работает?

Файлы:
 
Проверку на стоплевелы делали ?
 

Я ещё вчера выводил значение стоплевела через принт . Вот щяс прошолся снова:

2012.09.18 15:17:10     2011.08.02 11:12  swb grid 4.1_Traal_Correct____1 EURUSD,M15: StoPLevel = 14
 
hoz:

Я ещё вчера выводил значение стоплевела через принт . Вот щяс прошолся снова:

Не парьтесь - в прицепе библиотека тралов от Юрия Дзюбан - часть проверял у себя на реале - всё работает исправно согласно логики вида трала.

Файлы:
 
Роман, Благодарю за библиотеку. Буду осваивать и изучать. Но всё же хотелось быть понять свою ошибку. Ведь это полезно знать, где сам наступил на грабли. Иначе опыта не появится.
 
hoz:
Скоро вы придёте к выводу, что трал вам совсем не нужен - это будут следующие грабли :)) Вспомните тогда меня.
Кстати, если в вашей системе доля спреда не очень высока, то можете заменить трал на сетку отложенных ордеров - логика работы разная, но - аналогия.
 
hoz:
Роман, Благодарю за библиотеку. Буду осваивать и изучать. Но всё же хотелось быть понять свою ошибку. Ведь это полезно знать, где сам наступил на грабли. Иначе опыта не появится.
Разберите по полочкам трал учебника Tral_Stop() в конце этой странички - делайте аналогично. Разбирайтесь с библиотекой (я её ф-ии использовал в качестве инклюдов в экспах) - в итоге, ИМХО, ПОЛЮБАСУ выйдете на свою щас ошибку... В коде Вашем не копался, щас сходу написать по допущенной Вами ошибке - не готов. Но - там всё просто, разберётесь и уже будете делать на автомате без ошибок, используя верные подходы...
 
Проверки на стоплевелы у вас нет, поэтому на альпари с нулевым работает а на "старте" - нет.
 
hoz:

Наткнулся я на ветку Кимовских функций. Обрадовался. Всё в основном логично и понятно. Изучил логику некоторых функций и написал себе Траал на основе 2 функций Кима SimpleTrailing и ModifyOrder:

Ну и вставил данную функцию в start() так:

Много раз уже пересматривал код, всё вроде бы в порядке. Но Траал не работает. В тестере при прогонке советника на истории появляется ошибка:

Я так понимаю это могло быть связано с близким стопом. Но стоп в настройках 100пп. на 5-ти знаке.

Хм. Тока что проверил, что на Alpari работает сова отлично и ордера модифицируются. Первоначально же я тестил на fxstart. Как узнать причину ошибки на одном ДЦ, в то время, когда на другом всё отлино работает?

Если ОЧЕНЬ хочется разобраться, то менее трудозатратно разобрать уже имеющиеся разработки. Если говорить о функциях, задействованных в исполении торговых приказов, то есть целые библиотеки, в которых уже решены все проблемы проверки на MODE_STOPLEVEL и MODE_FREEZELEVEL. Гугль в помощь, например, по запросу "Reliable". И вот одна из таких библиотек.
 
FAQ:
Проверки на стоплевелы у вас нет, поэтому на альпари с нулевым работает а на "старте" - нет.


 Выходит, что Ким неопытный программист? Неужели у него опыта как у меня?

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

DmitriyN:
Скоро вы придёте к выводу, что трал вам совсем не нужен - это будут следующие грабли :)) Вспомните тогда меня.
Кстати, если в вашей системе доля спреда не очень высока, то можете заменить трал на сетку отложенных ордеров - логика работы разная, но - аналогия.
 Дмитрий, не скоро, а уже. Сам я не использую Траалы, и не собираюсь их использовать. Подключить Траал попросил меня приятель, который торгует только советниками. Вот я и решил заодно научится этому. Не смог отказать..
TarasBY:
Если ОЧЕНЬ хочется разобраться, то менее трудозатратно разобрать уже имеющиеся разработки. Если говорить о функциях, задействованных в исполении торговых приказов, то есть целые библиотеки, в которых уже решены все проблемы проверки на MODE_STOPLEVEL и MODE_FREEZELEVEL. Гугль в помощь, например, по запросу "Reliable". И вот одна из таких библиотек.
Благодарю! Буду изучать.
 
Ким - опытный программист, просто многие функции из его библиотеки были написаны достаточно давно, ещё до пятизнака, и с тех пор не обновлялись. С тех пор кое-где сильно ужесточились требования по заморозкам/стоплевелам и пр.
Причина обращения: