[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 389

 
Dimka-novitsek:
Cuando el EA se inicia nada, es sólo para comprobar si las nuevas órdenes no se abrirá con cada tick
OrderSelect( tiket,SELECT_BY_TICKET, MODE_TRADES );
if(OrderSymbol()==Symbol())
{
   if (OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 )
   {
      i=OrdersTotal() ;
      if (i<2)
      {
         tiket= OrderSend( Symbol(), OP_BUYSTOP, volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
         Alert ("OP_BUYSTOP", GetLastError( ));
         tikett= OrderSend( Symbol(), OP_SELLSTOP, volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
         Alert ("OP_SELLSTOP", GetLastError( ));
         i=OrdersTotal();
      }
   }
}

Este es su código, no hice ningún cambio

Usted escribió que el pedido se realizará si se selecciona la orden del tiket y el símbolo mágico, y el número total de pedidos es inferior a 2.

 
¡¡¡Gracias!!! Lo siento, y definitivamente escribí una tontería.
 
drknn:


Sin el código es difícil decirlo. Es muy posible que el EA esté escrito para cuatro dígitos, pero la cuenta demo es de cinco dígitos. Entiendes que si establecemos, por ejemplo, un stop loss de 10 pips en el EA de cinco dígitos, es la misma distancia que 1 pip en el EA de cuatro dígitos. Si fijamos la distancia mínima permitida para establecer órdenes de stop en, digamos, 3 puntos, entonces en un mercado de cinco dígitos serían treinta puntos en lugar de tres. El servidor rechazará, como es lógico, la orden de establecer una orden con un stop de 10 puntos a los cinco dígitos.

Pero la razón puede ser diferente. Verás, has preguntado a la gente por qué su coche no arranca. La gente no podrá decirte la razón sin abrir el capó y escuchar cómo reacciona el coche al intentar arrancar...

He intentado ejecutar un probador de estrategias por EURUSD y ejecutarlo por varias divisas, EURUSD, GBPUSD, USDJPY, pero no ha funcionado. Utilicé Point al enviar órdenes de compra/venta, así que debería funcionar para todos los símbolos. Lo que más no entiendo es por qué el probador muestra resultados, pero el EA no abre posiciones en una cuenta demo. ¿En qué casos puede ocurrir esto?

De todos modos gracias por la respuesta, publicaré el código por la noche.

 
Dimka-novitsek:


Disculpa, he escrito algunas tonterías aquí, si pudieras mostrarme dónde soy completamente omiso.

Todos ellos: )))))))))))))))))))

Empecemos por el principio:

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int      tiket, tikett;
int      i=0, R1=0, R2=0, A=1;
double   volume=0.1;
double   price=PRICE_OPEN;
// R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;

int start()
{
//----

   OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);
   if(OrderSymbol()==Symbol()) {
      if (OrderMagicNumber()==1000 || OrderMagicNumber()==2000) {
         i=OrdersTotal();
         if (i<2) {
            tiket=OrderSend(Symbol(), OP_BUYSTOP, volume*A, price+otstup*Point, Point*3, R1, PRICE_OPEN+takeprofit*Point+otstup, "OP_BUYSTOP", 1000, expiration, Red);
            Alert ("OP_BUYSTOP", GetLastError( ));
            tikett=OrderSend(Symbol(), OP_SELLSTOP, volume*A, price-otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup, "OP_SELLSTOP", 2000, expiration,C'0,128,255' );
            Alert ("OP_SELLSTOP", GetLastError( ));
            i=OrdersTotal();
            }
         }
      }

//----
return(0);
}
//+------------------------------------------------------------------+

Inicialmente se inicializan dos variables con cero:

int      tiket, tikett;

entonces la primera línea de código es donde seleccionamos el orden de las entradas:

OrderSelect (tiket, SELECT_BY_TICKET, MODE_TRADES);

aquí la variable ticket es cero. Es decir, tratamos de seleccionar una orden con un ticket cero. Al hacerlo, ni siquiera hemos leído la ayuda, ya que el parámetro pool se ignora al seleccionar por ticket, y seguimos especificando MODE_TRADES. Esto no es un error - es un parámetro extra en este caso que simplemente se ignora. En consecuencia, el pedido con un ticket cero no se selecciona - no existe...

Entonces todo va en las condiciones anidadas; la primera condición es:

if(OrderSymbol()==Symbol())

... Si el símbolo de la orden seleccionada coincide con el símbolo del gráfico actual... Y como no se ha elegido ningún orden, llegaremos con seguridad a la salida de start() sin hacer nada.

Te puedo asegurar... Más adelante tiene una no menos interesante, pero... No es interesante hurgar.

Empiece por buscar las posiciones ya abiertas o las órdenes pendientes que se hayan establecido.

Buena suerte.

 
ilunga:

este es su código, no he hecho ningún cambio

Usted ha escrito que las órdenes serán colocadas si usted selecciona la orden tiket del símbolo dado y la orden mágica dada y hay menos de 2 órdenes en total.


Ah, no, es cierto, cuando inicias una orden menos de dos, se colocan dos órdenes pendientes, y en el siguiente tick son dos y no pasa nada.

Debo estar teniendo algún tipo de crisis en mi cabeza.

 
Dimka-novitsek:


Ah, no, es cierto, cuando inicias una orden menor a dos, se colocan dos órdenes pendientes, y en el siguiente tick hay dos y no pasa nada.

Debo estar teniendo algún tipo de crisis en mi cabeza.

Ya te he dicho paso a paso dónde está tu crisis...
 
Sersad:

Hice una prueba de la estrategia en EURUSD, traté de ejecutarla en varias divisas, EURUSD, GBPUSD, USDJPY - no funcionó en ninguna parte. Utilicé Point al enviar órdenes de compra/venta, así que debería funcionar para todos los símbolos. Lo que más no entiendo es por qué el probador muestra resultados, pero el EA no abre posiciones en una cuenta demo. ¿En qué casos puede ocurrir esto?

De todos modos, gracias por la respuesta, publicaré el código por la noche.


La cuestión es que el valor del punto es diferente.

 
PapaYozh:


Esa es la cuestión: el valor del punto varía.

El valor del punto difiere de una cotización a otra, pero su esencia es la misma para todas las cotizaciones con cualquier número de decimales: es el paso mínimo del precio.

Por eso el hecho de que haya utilizado para un stop-loss, por ejemplo, Ask-30*Punto en lugar de Ask-0,003 niega el comentario de drknn.

"Es muy posible que el EA esté escrito para una cuenta de cuatro dígitos, mientras que la cuenta demo es de cinco dígitos. Verás, si estableces, por ejemplo, una orden de stop loss de 10 pips, entonces es la misma distancia en un EA de cinco dígitos que 1 pip en uno de cuatro. Si fijamos la distancia mínima permitida para establecer órdenes de stop en, digamos, 3 puntos, entonces en un mercado de cinco dígitos serían treinta puntos en lugar de tres. Está claro que el servidor simplemente rechazaría la orden de establecer una orden con un stop de 10 puntos...".

double Point - Tamaño del punto del instrumento actual en la moneda de cotización.
 

Un consejo.

Escribí un sencillo script para obtener el valor del nivel mínimo de stop loss/stake profit en pips.

int start()
{
int min=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert(min);
return(0);
}

La salida es cero. ¿Es un valor estándar para este parámetro?

 

fx_max:

Escribí un sencillo script que da como resultado el valor del nivel mínimo permitido de stop loss/stake profit en pips.


int min=MarketInfo(Symbol(),MODE_STOPLEVEL);

La salida es cero. ¿Es un valor estándar para este parámetro?


no
Razón de la queja: