Automated Trading Championship 2007: распространенные ошибки в экспертах - страница 6

 
Сообщение об ошибке "OrderModify error 1" означает вызов OrderModify с неизменными параметрами, что связано с неаккауратным программированием.

Перед вызовом OrderModify проверяйте - точно ли вызываете обновление с новыми данными или пытаетесь выставить уже стоящие значения.
 
Завершена проверка Вашего эксперта. Отчет о тестировании эксперта:
-----------------------
2007.09.08 17:47 loading
mazig on EURUSD:60
17:38:34 2007.01.04 00:01 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:02 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:03 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:04 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:04 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:06 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:07 stalker_2 EURUSD,H4: OrderModify error 1
17:38:34 2007.01.04 00:08 stalker_2 EURUSD,H4: OrderModify error 1
0 min 49 seconds
Errors: 20


-----------------------

Исправьте код Вашего эксперта и загрузите новую версию на странице Вашего профиля:

Что то у вашего робота крыша поехала видимо учасников много :-) он уже экспертов стал путать. Мой эксперт в коментариях не пишет stalker_2 и работает на часовом графике. А команду OrderModify вобще не использует.
 
Renat:
Сообщение об ошибке "OrderModify error 1" означает вызов OrderModify с неизменными параметрами, что связано с неаккауратным программированием.

Перед вызовом OrderModify проверяйте - точно ли вызываете обновление с новыми данными или пытаетесь выставить уже стоящие значения.

может имеется ввиду конструкция ?

if ( RefreshRates() == true )

{

....

OrderModify(Ticket,...

}

в моем тралле

в цикле присутвует Resresh() после изменения каждого ордера

вывод в безубыток при достижении 35п профита

внешние переменные , самая малая величина

FirstTralStopSell = 35;

последующий тралл при достижении 50п

как может возникать 130 ошибка не совсем понимаю - на тестах у меня такой ошибки нет

возможно что после выдачи команды OrderModify , тестирующая система эмулирует реквот таким образом что цена успевает вернуться более чем на 50п

но тогда каким образом избежать подобной ситуации ?

кроме того в лог который мне выдает тестирующая система не попадают мои ЛОГИ!?

if (err != 0 )
{
if ( ECHOerror == 1 )
Print("Error("+err+") Open="+OrderOpenPrice()+" "+OrderStopLoss()+" modifying SL: "+(Ask+Point*FirstTralStopSell)+" TP "+(0)+" "+msgErrors(err));
}

void TralYZ(int lLockTralSell, int lLockTralBuy)
{
   int err;
   int cnt=OrdersTotal();
   int LocalDinamicTrallSELL;
   int LocalDinamicTrallBUY;
   int FirstTralStopSell;
   int FirstTralStopBuy;
   LocalDinamicTrallSELL = oDinamicTrallSELL ; // значения по умолчанию 
   LocalDinamicTrallBUY =  oDinamicTrallBUY  ;
   FirstTralStopSell = oFirstTralStopSell;             // первый безуюыток 
   FirstTralStopBuy = oFirstTralStopBuy;
 
 
   while(cnt>=0)
   {
      RefreshRates();
      
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      Sleep(10000);
      int Ticket=OrderTicket();
      int IDorder;
      IDorder = FindID(Ticket);
      if (OrderSymbol() == Symbol() )
      {
         if (OrderType()==OP_SELL && lLockTralSell == 0 ) 
         {         
            if ( OrderMagicNumber() == MAGIC3 )
               FirstTralStopSell = d3FirstTralStopBuy;
            if ( OrderMagicNumber() == MAGIC2 )
               FirstTralStopSell = d2FirstTralStopBuy;
            if ( OrderMagicNumber() == MAGIC1 )
               FirstTralStopSell = d1FirstTralStopBuy;
            if ( OrderMagicNumber() == cMAGIC3 )
               FirstTralStopSell = c3FirstTralStopSell;
            if ( OrderMagicNumber() == cMAGIC2 )
               FirstTralStopSell = c2FirstTralStopSell;
            if ( OrderMagicNumber() == cMAGIC1 )
               FirstTralStopSell = c1FirstTralStopSell;
            if ( 
               ( OrderStopLoss() == 0  && ( OrderOpenPrice()-Ask )>=(FirstTralStopSell*Point) + Ask-Bid ) ||
               ( OrderStopLoss() > OrderOpenPrice()  && ( OrderOpenPrice()-Ask )>=(FirstTralStopSell*Point) + Ask-Bid ) 
               )
            {                  
               if ( DEBUG == 1 )
                  Print( "1 SL="+OrderStopLoss()+" > OP="+OrderOpenPrice() +" && ( OP"+OrderOpenPrice()+" - Ask"+Ask+") "+( OrderOpenPrice()-Ask ) +" >= ( "+FirstTralStopSell+" *  "+Point+")  "+Ask+" - "+Bid+" ="+(Ask-Bid));
               lotlib_PrevLots = OrderLots();  
               lotlib_PrevProfit = OrderProfit();
               OrderModify(Ticket,OrderOpenPrice(),Ask+(Point*FirstTralStopSell) , 0 ,0,Purple);
               Sleep( 10000 );
               err=GetLastError();
               if (err != 0 )
               {
                  if ( ECHOerror == 1 )
                     Print("Error("+err+") Open="+OrderOpenPrice()+" "+OrderStopLoss()+" modifying SL: "+(Ask+Point*FirstTralStopSell)+" TP "+(0)+" "+msgErrors(err));
               }
            }
 
у меня три раз проверялся один и тот ж код эксперта .. первые два раза ошибок небыло и на третий раз вдруг обнаруживается ошибка и я тепрь должен изменять код эксперта. не понятно для чего нужно проверять несколько раз один и тотже код эксперта?
 
Renat:
Сообщение об ошибке "OrderModify error 1" означает вызов OrderModify с неизменными параметрами, что связано с неаккауратным программированием.

Перед вызовом OrderModify проверяйте - точно ли вызываете обновление с новыми данными или пытаетесь выставить уже стоящие значения.


после внесения конструкции

                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Bid-Point*LocalDinamicTrallBUY , 0,0,Purple);

на тестах тралл вообще не отрабатывает версия терминала 208

не срабатывает RefreshRates() == true ?

LocalDinamicTrallBUY = 50;

вход на тралл

              if ( OrderStopLoss() > OrderOpenPrice() && ( Bid - OrderStopLoss() )  >= (LocalDinamicTrallBUY*Point) + Ask-Bid )
                  {
                     lotlib_PrevLots = OrderLots();  
                     lotlib_PrevProfit = OrderProfit();
                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Bid-Point*LocalDinamicTrallBUY , 0,0,Purple);

видимо есть тонкости... о которых не знаю

 
YuraZ:
Renat:
Сообщение об ошибке "OrderModify error 1" означает вызов OrderModify с неизменными параметрами, что связано с неаккауратным программированием.

Перед вызовом OrderModify проверяйте - точно ли вызываете обновление с новыми данными или пытаетесь выставить уже стоящие значения.

может имеется ввиду конструкция ?


Имеется в виду, что Вы пытаетесь выставить в OrderModify то же самое значение StopLoss, которое там уже стояло. Например, если в StopLoss стоит 1.3020, а Вы снова пытаетесь выставить стоп на 1.3020, то OrderModify вернет код 1. Об этом явным образом написано в документации на OrderModify:

bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
Изменяет параметры ранее открытых позиций или отложенных ордеров. Возвращает TRUE при успешном завершении функции. Возвращает FALSE при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Замечания: цену открытия и время истечения можно изменять только у отложенных ордеров.
Если в качестве параметров функции передать неизмененные значения, то в этом случае будет сгенерирована ошибка 1 (ERR_NO_RESULT).
На некоторых торговых серверах может быть установлен запрет на применение срока истечения отложенных ордеров. В этом случае при попытке задать ненулевое значение в параметре expiration будет сгенерирована ошибка 147 (ERR_TRADE_EXPIRATION_DENIED).
 
Renat:
YuraZ:
Renat:
Сообщение об ошибке "OrderModify error 1" означает вызов OrderModify с неизменными параметрами, что связано с неаккауратным программированием.

Перед вызовом OrderModify проверяйте - точно ли вызываете обновление с новыми данными или пытаетесь выставить уже стоящие значения.

может имеется ввиду конструкция ?


Имеется в виду, что Вы пытаетесь выставить в OrderModify то же самое значение StopLoss, которое там уже стояло. Например, если в StopLoss стоит 1.3020, а Вы снова пытаетесь выставить стоп на 1.3020, то OrderModify вернет код 1. Об этом явным образом написано в документации на OrderModify:

bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
Изменяет параметры ранее открытых позиций или отложенных ордеров. Возвращает TRUE при успешном завершении функции. Возвращает FALSE при неудачном завершении функции. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Замечания: цену открытия и время истечения можно изменять только у отложенных ордеров.
Если в качестве параметров функции передать неизмененные значения, то в этом случае будет сгенерирована ошибка 1 (ERR_NO_RESULT).
На некоторых торговых серверах может быть установлен запрет на применение срока истечения отложенных ордеров. В этом случае при попытке задать ненулевое значение в параметре expiration будет сгенерирована ошибка 147 (ERR_TRADE_EXPIRATION_DENIED).


ВАУ!!! точно!!! Ренат спасибо!

добавил условие входа в тралл

&& OrderStopLoss() != Ask+Point*LocalDinamicTrallSELL

if ( 
                         OrderStopLoss()  < OrderOpenPrice()
                      && ( OrderStopLoss()-Ask )>=(LocalDinamicTrallSELL*Point) + Ask-Bid   
                      && OrderStopLoss() !=  Ask+Point*LocalDinamicTrallSELL    
                       ) 
                  {                     
                     if ( DEBUG == 1 )
                        Print( "2 SL="+OrderStopLoss()+" < OP="+OrderOpenPrice() +" && ( OP"+OrderOpenPrice()+" - Ask"+Ask+") "+( OrderOpenPrice()-Ask ) +" >= ( "+LocalDinamicTrallSELL+" *  "+Point+")  "+Ask+" - "+Bid+" ="+(Ask-Bid));
                     lotlib_PrevLots = OrderLots();  
                     lotlib_PrevProfit = OrderProfit();
                     if ( RefreshRates() == true )
                        OrderModify(Ticket,OrderOpenPrice(),Ask+Point*LocalDinamicTrallSELL , 0,0,Purple);
                     err=GetLastError();
                     if (err != 0 )
                     {   
                        if ( ECHOerror == 1 )
                           Print("Error("+err+") Open="+OrderOpenPrice()+" "+OrderStopLoss()+" modifying SL: "+(Ask+Point*LocalDinamicTrallSELL)+" TP "+(0)+" "+msgErrors(err));
                     }
                  }

Но вот на тестировании у себя в логах не было ошибок! - странно как то

 
pilgrim:

Что то у вашего робота крыша поехала видимо учасников много :-) он уже экспертов стал путать. Мой эксперт в коментариях не пишет stalker_2 и работает на часовом графике. А команду OrderModify вобще не использует.
Скрипт автоматического тестера чужие логи захватил - уже исправлено.
 
т.е. два раза мне писали на e-mail, что экспенрт успешно прошел тест и я зарегистрирован... и на третий пишет, что уменя в коде ошибка. .. почему я должен менять код эксперта я его один раз загрузил в профиль?
 
folver:
т.е. два раза мне писали на e-mail, что экспенрт успешно прошел тест и я зарегистрирован... и на третий пишет, что уменя в коде ошибка. .. почему я должен менять код эксперта я его один раз загрузил в профиль?
Судя по результату - эксперт словил маржин колл. Пока ничего сказать не могу. Завтра к утру очередные проверки завершатся и проверим результат.
Причина обращения: