aide fineturn EA

 

Est-ce que quelqu'un peut m'aider à affiner un EA, s'il vous plaît ?

il peut faire mieux - tout ce que je vois c'est acheter et vendre aux mauvais endroits

Dossiers :
jbtest3.mq4  5 kb
 
delcor wrote >>

Est-ce que quelqu'un peut m'aider à affiner un EA, s'il vous plaît ?

il peut faire mieux - tout ce que je vois, c'est acheter et vendre aux mauvais endroits.

Voulez-vous expliquer votre stratégie ? Nous devons vérifier si elle est codée conformément à la stratégie indiquée avant de pouvoir l'affiner.

Si les codes sont corrects et que nous obtenons de mauvaises transactions de la part de l'EA, alors la stratégie est en cause ? La stratégie fonctionne-t-elle bien en trading manuel ?

 
ronaldosim

Voulez-vous expliquer votre stratégie ? Nous devons vérifier si elle est codée conformément à la stratégie indiquée avant de pouvoir l'affiner.

Si les codes sont corrects et que nous obtenons de mauvais trades de l'EA, alors la stratégie est en cause ? La stratégie fonctionne-t-elle bien en trading manuel ?

merci d'être revenu

la stratégie est - elle ne doit acheter ou vendre que lorsque les ema se croisent. il y a un paramètre qui fonctionne bien et si elle n'achète et ne vend que sur les croisements, elle prendra des bénéfices.

J'ai attaché la stratégie telle qu'elle est mais elle n'achète pas au croisement des 2 emas.

il doit fermer l'ordre ouvert et acheter lorsque l'ema courte croise l'ema longue et vice-versa. à ce stade, je veux qu'il ne fasse que cela.

Je suis novice en programmation mais je veux en apprendre davantage.

Pouvez-vous m'aider ?

en l'état actuel des choses, il fait le travail sur l'eur/usd 15 et le 1h tf - mais pas assez.

 
delcor wrote >>

merci d'être revenu

La stratégie est la suivante : elle ne doit acheter ou vendre que lorsque les ema se croisent. Il existe un paramètre qui fonctionne bien et s'il n'achète et ne vend que sur les croisements, il prend des bénéfices.

J'ai attaché la stratégie telle qu'elle est mais elle n'achète pas au croisement des 2 emas.

il doit fermer l'ordre ouvert et acheter lorsque l'ema courte croise l'ema longue et vice-versa. à ce stade, je veux qu'il ne fasse que cela.

Je suis novice en programmation mais je veux en apprendre davantage.

Pouvez-vous m'aider ?

en l'état actuel des choses, il fait le travail sur l'eur/usd 15 et le tf 1 h - mais pas assez.

je le soupçonne ; pour les croisements d'EMA votre code est incorrect

Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0) ;

vous avez besoin de deux iMA pour le longema et le shortma.

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) ;

et pour vérifier le croisement

si (SEMA1>LEMA1 && SEMA2<LEMA2) envoyer un ordre d'achat

et pour la vente

si (SEMA1<LEMA1 && SEMA2>LEMA2) envoyer un ordre de vente

 
ronaldosim:

Je le soupçonne ; pour les croisements EMA votre code est incorrect

Ema=iMA(NULL,0,ShortEma,LongEma,MODE_EMA,PRICE_CLOSE,0) ;

vous avez besoin de deux iMA pour le longema et le shortma

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) ;

et pour vérifier le croisement

si (SEMA1>LEMA1 && SEMA2<LEMA2) envoyer un ordre d'achat

et pour la vente

si (SEMA1<LEMA1 && SEMA2>LEMA2) envoyer un ordre de vente

ok alors le

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) ;

doit être placé dans les conditions de "vérification des ordres ouverts" - sous "obtenir la moyenne mobile".

et le "

if (SEMA1>LEMA1 && SEMA2<LEMA2) send buy order" où ?

Je dois également définir les LEMA1 et LEMA2 en haut de la page.


encore nouveau dans ce

mon skype est delcor59 si vous voulez me skypez

merci pour votre aide

 
delcor wrote >>

ok alors

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) ;

doit être placé dans les conditions de "vérification des ordres ouverts" - sous "obtenir la moyenne mobile".

et le "

if (SEMA1>LEMA1 && SEMA2<LEMA2) send buy order" où ?

De plus, les LEMA1 et LEMA2 doivent être définis en haut de la page.

Je suis encore novice dans ce domaine.

mon skype est delcor59 si vous voulez me skypez

merci pour votre aide

quelque chose comme ceci en modifiant vos propres codes....

void CheckForOpen()
{
double Ema ;
int res ;
//---- trading seulement pour les premiers tiks de la nouvelle barre
if(Volume[0]>1) return ;
//---- obtenir la moyenne mobile
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) ;

//---- conditions de vente
// if(Open[1]>Ema && Close[1]<Ema)
si (SEMA1<LEMA1 && SEMA2>LEMA2)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red) ;
retour ;
}
//---- conditions d'achat
// 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) ;
retour ;
}
//----
}

void CheckForClose()
{
double Ema ;
//---- trading seulement pour les premiers tiks de la nouvelle barre
if(Volume[0]>1) return ;
//---- obtenir la moyenne mobile
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<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue ;
//---- vérifier le type d'ordre
if(OrderType()==OP_BUY))
{
// si(Open[1]>Ema && Close[1]<Ema)
if (SEMA1<LEMA1 && SEMA2>LEMA2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White) ;
pause ;
}
si(OrderType()==OP_SELL))
{
// si(Open[1]<Ema && Close[1]>Ema)
if (SEMA1>LEMA1 && SEMA2<LEMA2) OrderClose(OrderTicket(),OrderLots(),Ask,3,White) ;
break ;
}
}
//----
}

 
ronaldosim:

quelque chose comme cela en modifiant vos propres codes....

void CheckForOpen()
{
double Ema ;
int res ;
//---- aller trader seulement pour les premiers tiks de la nouvelle barre
if(Volume[0]>1) return ;
//---- obtenir la moyenne mobile
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) ;

//---- conditions de vente
// if(Open[1]>Ema && Close[1]<Ema)
si (SEMA1<LEMA1 && SEMA2>LEMA2)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red) ;
retour ;
}
//---- conditions d'achat
// 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) ;
retour ;
}
//----
}

void CheckForClose()
{
double Ema ;
//---- trading seulement pour les premiers tiks de la nouvelle barre
if(Volume[0]>1) return ;
//---- obtenir la moyenne mobile
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<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue ;
//---- vérifier le type d'ordre
if(OrderType()==OP_BUY))
{
// si(Open[1]>Ema && Close[1]<Ema)
if (SEMA1<LEMA1 && SEMA2>LEMA2) OrderClose(OrderTicket(),OrderLots(),Bid,3,White) ;
pause ;
}
si(OrderType()==OP_SELL))
{
// si(Open[1]<Ema && Close[1]>Ema)
if (SEMA1>LEMA1 && SEMA2<LEMA2) OrderClose(OrderTicket(),OrderLots(),Ask,3,White) ;
break ;
}
}
//----
}

merci encore

Il y a quelque chose qui ne va pas. Quand je fais un back test de l'Ea, il n'y a que des achats et pas de ventes.

 
delcor wrote >>

merci encore

Il y a quelque chose qui ne va pas. Quand je fais un back test de l'Ea, il n'y a que des achats et pas de ventes.

j'ai remarqué que selon l'ordre qui est lancé en premier, c'est à dire achat ou vente, lorsque le croisement commence, vous lancez un ordre et lorsque le croisement opposé commence, vous fermez l'ordre ; dans votre start(), lorsque vous vérifiez l'existence d'un ordre de marché, vous empêchez celui du type d'ordre de ne jamais être lancé, c'est à dire que lorsque vous commencez par un achat, il sera toujours un achat ; lorsque vous commencez par un ordre de vente, il sera toujours un ordre de vente.

 
ronaldosim:

j'ai remarqué que selon l'ordre qui est lancé en premier, c'est à dire achat ou vente, lorsque le croisement commence, vous lancez un ordre et lorsque le croisement opposé commence, vous fermez l'ordre ; dans votre start(), lorsque vous vérifiez l'existence d'un ordre de marché, vous empêchez celui du type d'ordre de ne jamais être lancé, c'est à dire que lorsque vous lancez un ordre d'achat, il sera toujours un ordre d'achat ; lorsque vous lancez un ordre de vente, il sera toujours un ordre de vente ; supprimez cette condition de vérification.

Faites-vous référence à la condition de contrôle en bas de l'EA ?

//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
//---- check for history and trading
if(Bars<100 || IsTradeAllowed()==false) return ;
//---- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen() ;
else CheckForClose() ;
//----

}


car il y a aussi

void CheckForOpen()

void CheckForClose()

 
delcor:

Faites-vous référence à la condition de vérification au bas de l'EA ?

//+------------------------------------------------------------------+
//| Fonction de démarrage |
//+------------------------------------------------------------------+
void start()
{
//---- vérifier l'historique et les transactions
if(Bars<100 || IsTradeAllowed()==false) return ;
//---- calculer les ordres ouverts par symbole actuel
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen() ;
sinon CheckForClose() ;
//----

}


car il y a aussi

void CheckForOpen()

void CheckForClose()




Dites-moi s'il y a un système de test sur la programmation de l'EA pour vous montrer pas à pas ce qui se passe lorsque cette EA est exécutée.

 
delcor wrote >>

Faites-vous référence à la condition de vérification au bas de l'EA ?

//+------------------------------------------------------------------+
//| Démarrer la fonction |
//+------------------------------------------------------------------+
void start()
{
//---- vérifier l'historique et les transactions
if(Bars<100 || IsTradeAllowed()==false) return ;
//---- calculer les ordres ouverts par symbole actuel
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen() ;
sinon CheckForClose() ;
//----

}

car il y a aussi

void CheckForOpen()

void CheckForClose()

if(Bars<100 || IsTradeAllowed()==false) return ;
//---- calculer les ordres ouverts par le symbole courant
CheckForOpen() ;
CheckForClose() ;
//----

Raison: