Campeonato de Trading Automatizado 2007: errores comunes en los expertos - página 6

 
El mensaje de error "OrderModify error 1" significa que OrderModify ha sido llamado con parámetros no modificados, lo que se debe a una programación inexacta.

Antes de llamar a OrderModify, compruebe si está llamando a la actualización con los nuevos datos o si está intentando establecer los valores existentes.
 
La prueba de su experto ha sido completada. Informe de la prueba de expertos:
-----------------------
2007.09.08 17:47
en 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 segundos
Errores: 20


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

Por favor, corrija su código de Asesor Experto y suba una nueva versión a su página de perfil:

Creo que tu robot se ha vuelto loco, parece que tiene muchos participantes :-) Ya ha mezclado Asesores Expertos. Tengo un Asesor Experto que no escribe "stalker_2" en los comentarios y funciona en gráfico horario. Y el comando OrderModify no lo utiliza en absoluto.
 
Renat:
El mensaje de error "OrderModify error 1" significa que se llama a OrderModify con parámetros no modificados, lo que se debe a una programación inexacta.

Antes de llamar a OrderModify, compruebe si está llamando a la actualización con nuevos datos o si está intentando establecer valores ya existentes.

¿quizás se refiere a la construcción?

si ( RefreshRates() == true )

{

....

OrderModify(Ticket,...

}

en mi búsqueda

Resresh() después de cada modificación de la orden en el bucle

Punto de equilibrio después de 35 pips de beneficio

variables externas, valor más pequeño

PrimerTralStopSell = 35;

posterior trall después de alcanzar 50 pips

no entiendo muy bien cómo puede ocurrir este error - no tengo este error en las pruebas

es posible que después de emitir el comando OrderModify, el sistema de pruebas emule las recotizaciones de tal manera que el precio tenga tiempo de volver en más de 50 pips

pero entonces, ¿cómo evitar esta situación?

¡además mis LOGS no aparecen en el archivo de registro que da el sistema de pruebas!

if (err != 0 )
{
if ( ECHOerror == 1 )
Print("Error("+err+") Open="+OrderOpenPrice()+""+OrderStopLoss()+" modificando 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));
               }
            }
 
He comprobado el mismo código de Experto tres veces. Las dos primeras veces no hubo errores y la tercera vez, de repente, hubo un error y ahora tengo que cambiar el código de Experto. no está claro por qué hay que comprobar el mismo código de Experto varias veces?
 
Renat:
El mensaje de error "OrderModify error 1" significa que OrderModify fue llamado con parámetros no modificados, lo que se debe a una programación inexacta.

Antes de llamar a OrderModify, compruebe si está llamando a la actualización con nuevos datos o si está intentando establecer valores existentes.


Después de introducir el constructo

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

la versión 208 del terminal no funciona en absoluto en las pruebas

RefreshRates() == true ?

LocalDinamicTrallBUY = 50;

entrada a trall

              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);

debe haber algunas sutilezas... No sé si

 
YuraZ:
Renat:
El mensaje de error "OrderModify error 1" significa que OrderModify se llama con parámetros no modificados, lo que se debe a una programación inexacta.

Antes de llamar a OrderModify, compruebe si está llamando a la actualización con nuevos datos o si está intentando establecer valores existentes.

¿quizás se refiere a la construcción?


Esto significa que está tratando de establecer el mismo valor de StopLoss en OrderModify que ya estaba allí. Por ejemplo, si el StopLoss es 1,3020 y se intenta establecer el stop de nuevo en 1,3020, OrderModify devolverá el código 1. Esto se indica explícitamente en la documentación de OrderModify:

bool OrdenModificar( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
Cambia los parámetros de las posiciones abiertas previamente o de las órdenes pendientes. Devuelve TRUE si la función se completa con éxito. Devuelve FALSE si la función falla. Debe llamar a GetLastError() para obtener la información del error.

Nota: El precio de apertura y la hora de vencimiento sólo pueden modificarse para las órdenes pendientes.
Si se pasan valores no modificados como parámetros a la función, se generará un error 1 (ERR_NO_RESULT).
En algunos servidores de comercio puede prohibirse la aplicación del tiempo de caducidad para las órdenes pendientes. En este caso se generará un error 147 (ERR_TRADE_EXPIRATION_DENIED) al intentar establecer un valor distinto de cero en el parámetro de caducidad.
 
Renat:
YuraZ:
Renat:
El mensaje de error "OrderModify error 1" significa una llamada a OrderModify con parámetros no modificados, que se debe a una programación inexacta.

Antes de llamar a OrderModify, compruebe si está llamando a la actualización con datos nuevos o si está intentando establecer valores ya existentes.

¿quizás se refiere a la construcción?


Lo que se quiere decir es que se está tratando de establecer el mismo valor de StopLoss en OrderModify que ya estaba allí. Por ejemplo, si el StopLoss es 1,3020 y se intenta establecer el stop de nuevo en 1,3020, OrderModify devolverá el código 1. Esto se indica explícitamente en la documentación de OrderModify:

bool OrdenModificar( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
Modifica los parámetros de las posiciones abiertas previamente o de las órdenes pendientes. Devuelve TRUE si la función se ha completado con éxito. Devuelve FALSE si la función falla. Llame a GetLastError() para obtener información sobre el error.

Nota: El precio de apertura y la hora de vencimiento sólo pueden modificarse para las órdenes pendientes.
Si se pasan valores no modificados como parámetros a la función, se generará un error 1 (ERR_NO_RESULT).
En algunos servidores de comercio puede prohibirse la aplicación del tiempo de caducidad para las órdenes pendientes. En este caso se generará un error 147 (ERR_TRADE_EXPIRATION_DENIED) al intentar establecer un valor distinto de cero en el parámetro de caducidad.


WOW!!! exactamente!!! Renat, ¡gracias!

se ha añadido la condición de entrada de trall

&& 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));
                     }
                  }

Sin embargo, ¡no hubo errores en mis registros durante las pruebas! - esto es muy extraño

 
pilgrim:

Creo que tu robot se ha vuelto loco, creo que tiene muchos participantes :-) Ya ha empezado a confundir a los EAs. Mi EA no escribe "stalker_2" en los comentarios, funciona en el gráfico horario. Y el comando OrderModify no lo utiliza en absoluto.
El script del probador automatizado ha capturado los registros de otra persona - ya está arreglado.
 
Por ejemplo, dos veces me han enviado un correo electrónico diciendo que el expenrt ha pasado la prueba y estoy registrado... y en la tercera dice que tengo un error en el código... ¿por qué tengo que cambiar el código del experto que subí al perfil una vez?
 
folver:
Por ejemplo, dos veces me han enviado un correo electrónico diciendo que el experto ha pasado la prueba con éxito y que estoy registrado... y la tercera vez dice que tengo un error en el código... ¿por qué debo cambiar el código del Asesor Experto una vez que lo he subido al perfil?
A juzgar por los resultados, el Asesor Experto ha captado un margen de beneficio. No puedo decir nada todavía. Mañana por la mañana se realizarán los siguientes controles y comprobaremos los resultados.