[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 595
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Instalé MetaTrader 4, abrí una cuenta demo. Intento de abrir/cerrar órdenes. ¿Cómo puedo hacer ahora que el propio terminal active una orden de venta cuando el precio sube y una orden de compra cuando baja, utilizando información como "necesitas una diferencia de 2 velas para cerrar la orden anterior y abrir una nueva"?
Buenas noches. Pregunta: Cuando cierro parte de una operación, el EA como que abre una nueva operación con una nueva entrada. ¿La magia del nuevo orden sigue siendo la misma?
Sí
¿ALGUIEN PUEDE EXPLICAR POR QUÉ TODOS LOS INTERCAMBIOS SON SÓLO EN LA COMPRA? No tengo operaciones en SELL, el indicador de bandera antes de if() en SELL es siempre 1 por alguna razón, WHY???? es long&short en la configuración.
TAMBIÉN QUIERO PREGUNTAR POR QUÉ DEJO QUE MI EA PIERDA ALGUNAS POSICIONES QUE PODRÍA ABRIR? ¡NO PUEDO ENTRAR!
¡Este es el código(la declaración de las variables está truncada):
double upfr,dnfr=0.0;//niveles de los últimos fractales
int flag=0;
int start() //abrir en la ruptura del fractal y cerrar después de s velas
{
if(iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4)!=0)
{
upfr=iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4);
}
if(iFractals(Symbol(),PERIOD_H1,MODE_UPPER,4)==0)
{
upfr=0;
}
if(iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4)!=0)
{
dnfr=iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4);
}
if(iFractals(Symbol(),PERIOD_H1,MODE_LOWER,4)==0)
{
dnfr=0;
}
//Operar órdenes por PROBIT
H=iHigh(Symbol(),PERIOD_H1,1);
L=iLow(Symbol(),PERIOD_H1,1);
tOpen=iTime(Symbol(),PERIOD_H1,1);
if(H>upfr && flag==0) //si el fractal está arriba y se supera el nivel del fractal
{
tClose=tOpen+s*stime*60;
OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,NULL,NULL);
flag=1;
}
if(L<dnfr)
Print(L," -L dnfr- ",dnfr," flag- ",flag);
if(L<dnfr && flag==0)//si el fractal está abajo y el nivel del fractal está abajo
{
tClose=tOpen+s*stime*60;
OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,NULL,NULL);
flag=1;
}
// CERRAR ÓRDENES POR FIN DE TIEMPO
if(Time[1]>=tClose && flag==1)// si el tiempo designado ha pasado
{
Print("CLOSE FUNCTION");
OrClose();
flag=0;
upfr=0;
dnfr=0;
}
return(0);
}
Me encontré con esto...
Al eliminar un EA, tiene que eliminar las órdenes pendientes
Hay dos variantes
1. Simplemente borra todo...
int deinit()
{
int i;
//----
for(i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderType() == OP_BUYSTOP)
{
OrderDelete(OrderTicket());
}
if (OrderType() == OP_SELLSTOP)
{
OrderDelete(OrderTicket());
}
}
}
//----
return(0);
}
2. Selectivamente...
int deinit()
{
OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket1);
OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket2);
return(0);
}
Ahora, la pega es que en la demo, funciona bien en ambos casos... Pero en la vida real... sólo un lote pendiente es eliminado por alguna razón... Pregunta: ¿quién sabe por qué?
Me encontré con esto...
Al eliminar un EA, tiene que eliminar las órdenes pendientes
Hay dos variantes
1. Simplemente borra todo...
int deinit()
{
int i;
//----
for(i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS))
{
if (OrderType() == OP_BUYSTOP)
{
OrderDelete(OrderTicket());
}
if (OrderType() == OP_SELLSTOP)
{
OrderDelete(OrderTicket());
}
}
}
//----
return(0);
}
2. Selectivamente...
int deinit()
{
OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket1);
OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES);
OrderDelete(ticket2);
return(0);
}
Ahora, la pega es que en la demo, funciona bien en ambos casos... Pero en la vida real... sólo un lote pendiente se borra por alguna razón... La pregunta: ¿quién sabe por qué?
IMHO "no tiene suficiente tiempo":
El tiempo de ejecución de la función especial deinit() está limitado a 2,5 segundos. Si el código de una función especial deinit() se ejecuta durante más tiempo del especificado, el terminal cliente terminará forzosamente la función especial deinit() y el programa en su conjunto.
En mi opinión, "no a tiempo":
La función especial deinit() tiene un tiempo de ejecución de 2,5 segundos. Si el código de la función especial deinit() se ejecuta más de este tiempo, el terminal cliente terminará forzosamente la función especial deinit() y el programa en su conjunto.
:(
Es decir, ¿no hay esperanza? A grandes rasgos, comenzamos con el uso del script para cerrar las órdenes pendientes... Y luego cerramos el búho... Bonito auto-transporte...
Una pregunta más - el asistente ha puesto los colgantes https://forum.mql4.com/ru/42300/page588
Cuando cambio de plazo, las órdenes se borran por alguna razón...
:(
¿Entonces no hay esperanza? A grandes rasgos, empezamos con un script para cerrar los colgantes... y luego cerramos el búho... Bonito auto-transporte...
Una pregunta más - el asistente ha puesto los colgantes https://forum.mql4.com/ru/42300/page588
Cuando cambio de plazo, las órdenes se borran por alguna razón...
El script o alguna otra forma de ordenar al EA que termine su operación (por ejemplo, a través de una variable global)
cambio de marco temporal = reinicio del Asesor Experto
o un script, o alguna otra forma de ordenar al EA que termine (por ejemplo, a través de una variable global)
cambio de marco temporal = reinicio del Asesor Experto
Hmm... ¿no hay forma de evitar el cambio de horario?