¿Puede alguien ayudarme a afinar un EA por favor?
puede hacerlo mejor - todo lo que veo es comprar y vender en los lugares equivocados
¿Quiere explicar su estrategia? Tenemos que comprobar si está codificado de acuerdo con la estrategia indicada antes de que podamos afinarla.
Si los códigos son correctos y estamos obteniendo malas operaciones del EA, entonces la estrategia es la culpable. ¿Funciona bien la estrategia en el trading manual?
¿Quiere explicar su estrategia? Tenemos que comprobar si está codificada de acuerdo con la estrategia indicada antes de poder afinarla.
Si los códigos son correctos y estamos obteniendo malas operaciones del EA, ¿entonces la estrategia es la culpable? ¿Funciona bien la estrategia desde el trading manual?
gracias por volver
la estrategia es - solo debe comprar o vender cuando la ema se cruza. hay una configuración que funciona bien y si solo compra y vende en los cruces tomará ganancias
lo he atado tal cual pero no compra en el cruce de las 2 ema's
debe cerrar la orden abierta y comprar cuando la ema corta cruce la ema larga y al revés. en esta etapa quiero que solo haga eso.
Luego podemos hacer la 2da etapa. no hay manejo de dinero en esta etapa. soy nuevo en la programación pero quiero aprender más
me puedes ayudar
como es que hacer el trabajo en el eur / usd 15 and1h tf - pero no es suficiente
gracias por volver
la estrategia es - solo debe comprar o vender cuando se cruzan las ema's. hay una configuración que funciona bien y si solo compra y vende en los cruces tomará ganancias
lo he atado tal cual pero no compra en el cruce de las 2 ema's
debe cerrar la orden abierta y comprar cuando la ema corta cruce la ema larga y al revés. en esta etapa quiero que solo haga eso.
Luego podemos hacer la 2da etapa. no hay manejo de dinero en esta etapa. soy nuevo en la programación pero quiero aprender más
me puedes ayudar
tal y como está hace el trabajo en el eur/usd 15 y1h tf - pero no lo suficiente
sospecho que sí; para los cruces EMA tu código es incorrecto
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);
necesitas dos iMA para la longema y la shortema
SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
y para comprobar el cruce
si (SEMA1>LEMA1 && SEMA2<LEMA2) enviar orden de compra
y para la venta
si (SEMA1<LEMA1 && SEMA2>LEMA2) enviar orden de venta
Sospecho que sí; para los cruces de EMA tu código es incorrecto
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);
necesitas dos iMA para la longema y la shortema
SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
y para comprobar el cruce
si (SEMA1>LEMA1 && SEMA2<LEMA2) enviar orden de compra
y para la venta
si (SEMA1<LEMA1 && SEMA2>LEMA2) enviar orden de venta
ok así que el
SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
debe colocarse en las condiciones de "comprobación de órdenes abiertas" - debajo de "obtener la media móvil"
y en la condición "
si (SEMA1>LEMA1 && SEMA2<LEMA2) enviar orden de compra" donde ?
también el LEMA1 Y LEMA2 debe ser definido en la parte superior
todavía es nuevo en esto
mi skype es delcor59 si quieres skypearme
gracias por tu ayuda
Bien, entonces el
SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
debe colocarse en las condiciones de "comprobación de órdenes abiertas" - debajo de "obtener la media móvil"
y en la condición "
si (SEMA1>LEMA1 && SEMA2<LEMA2) enviar orden de compra" donde ?
también el LEMA1 Y LEMA2 debe ser definido en la parte superior
todavía nuevo en esto
mi skype es delcor59 si quieres skypearme
gracias por tu ayuda
algo como esto modificando tus propios códigos....
void CheckForOpen()
{
doble Ema;
int res;
//---- ir a operar sólo para los primeros tiks de la nueva barra
if(Volume[0]>1) return;
//---- obtener la media móvil
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
//---- condiciones de venta
// if(Open[1]>Ema && Close[1]<Ema)
si (SEMA1<LEMA1 && SEMA2>LEMA2)
{
res=Enviar orden(Símbolo(),OP_VENTA,LotesOptimizados(),Oferta,3,0,0,"",MAGICMA,0,Rojo);
res;
}
//---- condiciones de compra
// if(Open[1]<Ema && Close[1]>Ema)
if (SEMA1>LEMA1 && SEMA2<LEMA2)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
res;
}
//----
}
void CheckForClose()
{
doble Ema;
//---- ir a operar sólo para los primeros tiks de la nueva barra
if(Volume[0]>1) return;
//---- obtener la media móvil
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
//----
for(int i=0;i<Total de pedidos();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA | OrderSymbol()!=Symbol()) continue;
//---- comprobar el tipo de pedido
if(OrderType()==OP_BUY)
{
// if(Open[1]>Ema && Close[1]<Ema)
if (SEMA1<LEMA1 && SEMA2>LEMA2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
romper;
}
if(OrderType()==OP_SELL)
{
// if(Open[1]<Ema && Close[1]>Ema)
if (SEMA1>LEMA1 && SEMA2<LEMA2) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
romper;
}
}
//----
}
algo así modificando sus propios códigos....
void CheckForOpen()
{
double Ema;
int res;
//---- ir a operar sólo para los primeros tiks de la nueva barra
if(Volume[0]>1) return;
//---- obtener la media móvil
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
//---- condiciones de venta
// if(Open[1]>Ema && Close[1]<Ema)
si (SEMA1<LEMA1 && SEMA2>LEMA2)
{
res=Enviar orden(Símbolo(),OP_VENTA,LotesOptimizados(),Oferta,3,0,0,"",MAGICMA,0,Rojo);
res;
}
//---- condiciones de compra
// if(Open[1]<Ema && Close[1]>Ema)
if (SEMA1>LEMA1 && SEMA2<LEMA2)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
res;
}
//----
}
void CheckForClose()
{
doble Ema;
//---- ir a operar sólo para los primeros tiks de la nueva barra
if(Volume[0]>1) return;
//---- obtener la media móvil
Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0);
double SEMA1=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,1);
double LEMA1=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,1);
double SEMA2=iMA(NULL,0,ShortEma,0,MODE_EMA,PRICE_CLOSE,2);
double LEMA2=iMA(NULL,0,LongEma,0,MODE_EMA,PRICE_CLOSE,2);
//----
for(int i=0;i<Total de pedidos();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA | OrderSymbol()!=Symbol()) continue;
//---- comprobar el tipo de pedido
if(OrderType()==OP_BUY)
{
// if(Open[1]>Ema && Close[1]<Ema)
if (SEMA1<LEMA1 && SEMA2>LEMA2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
romper;
}
if(OrderType()==OP_SELL)
{
// if(Open[1]<Ema && Close[1]>Ema)
if (SEMA1>LEMA1 && SEMA2<LEMA2) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
romper;
}
}
//----
}
gracias de nuevo
algo no está bien. cuando hago el back test de la Ea sólo muestra compras y no ventas
me he dado cuenta de que dependiendo de la orden que se dispare primero, es decir, de compra o de venta, una vez que se inicia el cruce se dispara una orden y cuando se cruza la contraria se cierra la orden; en el start() cuando se comprueba la existencia de una orden de mercado, se evita que se dispare la del tipo de orden, es decir, cuando se inicia con una orden de compra siempre será de compra; cuando se inicia con una orden de venta, siempre será de venta; quita esa condición de comprobación
noté que dependiendo de la orden que se dispare primero, es decir, compra o venta, una vez que se inicia el cruce se dispara una orden y cuando se cruza la contraria se cierra la orden; en start() cuando se comprueba la existencia de una orden de mercado, se evita que se dispare la del tipo de orden, es decir, cuando se inicia con una orden de compra siempre será de compra; cuando se inicia con una orden de venta, siempre será de venta; elimine esa condición de comprobación
¿se refiere a la condición de control en la parte inferior del EA?
//+------------------------------------------------------------------+//| Función de inicio |
//+------------------------------------------------------------------+
void start()
{
//---- comprueba el historial y las operaciones
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcula las órdenes abiertas por símbolo actual
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----
}
porque también hay
void CheckForOpen()
void CheckForClose()
¿se refiere a la condición de comprobación en la parte inferior del EA?
//+------------------------------------------------------------------+//| Función de inicio ||.
//+------------------------------------------------------------------+
void start()
{
//---- comprueba el historial y las operaciones
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcular las órdenes abiertas por el símbolo actual
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----
}
porque también hay
void CheckForOpen()
void CheckForClose()
dime si hay un sistema de prueba en la programación del EA que te muestre paso a paso lo que sucede cuando este EA se ejecuta
¿se refiere a la condición de comprobación en la parte inferior del EA?
//+------------------------------------------------------------------+//| Función de inicio
//+------------------------------------------------------------------+
void start()
{
//---- comprueba el historial y las operaciones
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcular las órdenes abiertas por el símbolo actual
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//----
}
porque también hay
void CheckForOpen()
void CheckForClose()
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcular las órdenes abiertas por el símbolo actual
CheckForOpen();
CheckForClose();
//----
- 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
¿Puede alguien ayudarme a afinar un EA por favor?
puede hacerlo mejor - todo lo que veo es comprar y vender en los lugares equivocados