Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 911

 
Viktorline14:
¡¡¡Chicos ayuda por favor!!!

¿Es más fácil hacer una captura de pantalla y publicarla aquí que copiar el texto del EA? ¿Crees que alguien lo escribirá manualmente en su ME a partir de una captura de pantalla y tratará de averiguarlo?

Si el compilador dice que debe comprobar el resultado de la función, hay que comprobarlo. No es difícil:

if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) Print("Opening Buy error #", GetLastError()); //ну и другие действия по усмотрению, в случае ошибки
 

 if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, SL, TP, NULL, 0, 0,clrBlue);

     MyOrderStateB = 1; 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 

   Print("Opening Buy error #", GetLastError());}

   else Sleep(2);

Gracias. Pero, ¿correcto o incorrecto? La advertencia sigue apareciendo

 
Tienes el stoploss y el takeprofit en valores absolutos, y lo necesitas en valores relativos, como Bid - Sl*Point.
 
abeiks:

¡Hola!

En mi Asesor Experto, se comprueba la vela anterior y si las condiciones lo permiten, se abre la posición, si no, no se abre. El problema es que la posición se abre antes de comprobar el estado de la vela anterior. Luego veo que la posición se abre en el registro y luego veo que no debería abrirse. ¿Cómo solucionarlo?

Gracias, yo también lo tengo claro. Puse la función de comprobación de la vela anterior por encima de la función de apertura de una posición.
 
Me disculpo por el descuido
 
if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )
{OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, Bid - SL * Point, Ask + TP * Point, NULL, 0, 0,clrBlue);
MiEstadoDeOrdenB = 1;
if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue))
Print("Error de apertura de la compra #", GetLastError());}
si no, Sleep(2);

if(S1a == S1b && S1a>80,0000 && S1b>80,0000 )

{OrderSend(Symbol(), OP_SELL, OrderValue, NormalizeDouble(Bid, Digits), Slippage, Ask + SL * Point, Bid - TP * Point , NULL, 0, 0,clrRed);
MyOrderStateS = 1; }

si no, Sleep(2);

Y con relativo da lo mismo(

 
Viktorline14:

 if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 {OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, SL, TP, NULL, 0, 0,clrBlue);

     MyOrderStateB = 1; 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), 3, SL, TP, NULL, 0, 0,clrBlue)) 

   Print("Opening Buy error #", GetLastError());}

   else Sleep(2);

Gracias. Pero, ¿correcto o incorrecto? La advertencia sigue apareciendo

Error, no es necesario llamar a OrderSend dos veces. Y debemos calcular el SL y el TP en relación al precio, no en pips. Y debemos normalizar no los precios abiertos de Ask y Bid, sino el resultado de los cálculos de SL y TP.

En general, "aprender, aprender y volver a aprender" ))))

 
evillive:

No, no es necesario llamar a OrderSend dos veces. Y el SL y el TP deben calcularse en relación con el precio, no en puntos. Y debemos normalizar no los precios abiertos de Ask y Bid, sino el resultado de los cálculos de SL y TP.

En general, "aprender, aprender y volver a aprender" ))))

Muchas gracias))) Me habéis ayudado mucho, ahora todo funciona:3
 

Muchas gracias de nuevo.

Ahora hay un problema, el EA abre varias órdenes seguidas, no una como yo quería(

int start()



  { S1a = NormalizeDouble(iStochastic(NULL, 0, S1_period, 3, S1_slowing, MODE_SMA, 1, MODE_MAIN, 1), 0);

   S1b = NormalizeDouble(iStochastic(NULL, 0, S1_period, 3, S1_slowing, MODE_SMA, 1, MODE_SIGNAL, 1), 0);

   

   if(MyOrderStateB == 1)Sleep(300000);

    else MyOrderStateB = 0;

   if(MyOrderStateS == 1)Sleep(300000);

    else MyOrderStateS = 0;

    

 

     

   if(S1a == S1b && S1a<20.0000 && S1b<20.0000 )

 

      if(!OrderSend(Symbol(), OP_BUY, OrderValue, NormalizeDouble(Ask, Digits), Slippage, Bid - SL * Point, Ask + TP * Point, NULL, 0, 0,clrBlue))

   Print("Opening Buy error #", GetLastError());  

     else Sleep(2);

   MyOrderStateB = 1;

  

   


      

   if(S1a == S1b && S1a>80.0000 && S1b>80.0000 )


    

    

       if(!OrderSend(Symbol(), OP_SELL, OrderValue, NormalizeDouble(Bid, Digits), Slippage, Ask + SL * Point, Bid - TP * Point , NULL, 0, 0,clrRed))

       Print("Opening Sell error #", GetLastError()); 

       else Sleep(2);

       MyOrderStateS = 1;

       

      

       

       

       

   return(0);}

 

He observado un comportamiento extraño en el probador de estrategias. Mi EA establece y arrastra órdenes de stop pendientes. Sucede lo siguiente. El Asesor Experto establece un Buy Stop y Sell Stop a 30 pips del precio actual (símbolo - GbpUsd. Cuatro dígitos. Nivel mínimo = 3 pips). Al cabo de un tiempo los sube siguiendo el mercado, si no se han disparado. Así que lo que veo. la modificación es exitosa, la modificación es exitosa, y luego en algún momento en los golpes de tiempo y el error # 1 aparece. Es decir, todo estaba bien, el EA estaba haciendo las mismas acciones y de repente aparece este error. Todos los precios se han normalizado a dígitos. En general, todos los valores que se pasan a la entrada de la función OrderModify() están normalizados.

¿Cuál puede ser la razón de este comportamiento del EA en el probador?