{
if(OrdersTotal()==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
}
}
Es una solución, pero no es la mejor solución, como aprenderás si continúas.
Pero puede ayudarte en este momento.
Es una solución, pero no es la mejor solución como usted aprenderá si usted procede.
Pero puede ayudarte en este momento.
si, solucionó el problema en el tema, pero cuando se cierra también crea una nueva orden, si todavía está por encima de la nube. ¿Podría ayudarme a resolver este nuevo problema?
¿Cómo bloquear todas las nuevas órdenes después de cerrar con éxito la primera?
Bueno, puedes crear una bandera.
Entonces puede establecer el valor a uno cuando la orden es colocada.
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
order=1;
}
}
Pero le dará la advertencia de que necesita comprobar el valor de retorno de la función ordersend así que
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
int ticket=OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if(ticket!=-1)
{
order=1;
}
}
}
}
¿Por qué no establecer la bandera dependiendo de si la orden fue colocada con éxito o no?
En ese caso si tu orden falla seguirá intentándolo.
si, solucionó el problema en el tema, pero cuando se cierra también crea una nueva orden, si todavía está por encima de la nube. ¿Podría ayudarme a resolver este nuevo problema?
¿Cómo bloquear todas las nuevas órdenes después de cerrar con éxito la primera?
Como ya ha aludido Marco, probablemente te encontrarás con otros problemas.
¿Qué pasa si hay una orden abierta en otro símbolo?
¿Qué pasa si hay órdenes controladas por otro EA?
¿Y si hay órdenes pendientes?
¿Y si el trigger sigue activo cuando cierras el primero?
En respuesta a esto último, podría utilizar una bandera como Marco ha sugerido. Sólo recuerda que tienes que decidir cuándo restablecer la bandera o el EA no volverá a tomar otra operación.
Alternativamente, usted podría comprobar para un cruce / cambio de estado de abajo / en la nube a por encima de la nube.
Puse tu código y dice que el ticket está sin declarar, así que lo declaré, pero ahora el código abre múltiples órdenes, igual que antes, ¿cómo proceder ahora?
{
bool order= 0;
int ticket;
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Puse tu código y dice que el ticket está sin declarar, así que lo declaré, pero ahora el código abre múltiples órdenes, igual que antes, ¿cómo proceder ahora?
{
bool order= 0;
int ticket;
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket!=1)
{
order=1;
}
}
}
}
Probablemente te ayudaría leer sobre el alcance de las variables.
¿Qué ocurre con el valor de la orden en cada tick?
Bien, entonces declaras la entrada con la bandera booleana.
int ticket;
Y entonces
{
if(order==0)
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMax (up,down) < Bid )
ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
{
if( ticket>0)
{
order=1;
}
}
}
}
No puedes declararlos en OnTick() porque su valor se restablecerá en cada tick por supuesto.
También tenga en cuenta que el OrderSend devuelve el número de ticket , o -1 menos uno si falla.
Pongo
bool order y
int ticket
en variables globales, y el resto del código en OnTick, pero sigue sin hacer ninguna entrada ahora
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Soy nuevo en mql4 y este código abre múltiples órdenes, ¿cómo puedo evitarlo? debería abrir sólo 1 orden hasta que se cierre,
¿Cómo puedo hacer esto?
Gracias
{
double up= iIchimoku (NULL, 5,9,26,52,3,0);
double down= iIchimoku (NULL,5,9,26,52,4,0);
if (MathMin (up,down) < Bid )
OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
}