Comment coder ? - page 197

 

Quelqu'un peut-il aider à coder cet EA ?

Bonjour,

Je trade actuellement avec un EA martingale qui ouvre au maximum 4 niveaux d'ordres. Je viens de penser à une stratégie de couverture qui pourrait réduire le risque de l'utilisation de cette EA. Voici une description de ma stratégie :

1. L'EA de couverture va surveiller le drawdown des ordres d'ouverture. Si le total des pertes flottantes est supérieur à un montant prédéterminé, il déclenchera l'EA pour ouvrir un ordre couvert en face des ordres d'ouverture.

2. La taille de lot de l'ordre couvert est calculée sur la base d'un multiple (l'utilisateur peut définir le multiple) de la taille de lot du dernier ordre d'ouverture (par exemple, si la taille de lot du dernier ordre de niveau est de 1,6 et que le multiple est fixé à 2, alors l'ordre couvert sera ouvert avec une taille de lot de 3,2.

3. Lorsque l'ordre couvert revient à son niveau d'ouverture, l'ordre couvert sera fermé automatiquement.

4. Lorsque le panier global (les ordres d'ouverture + l'ordre couvert) atteint un montant de profit net prédéterminé, tous les ordres sont fermés.

Je me demande si un bon programmeur peut coder cet EA de couverture pour moi. Je pense qu'il sera très utile pour d'autres EA martingales également. Merci beaucoup !

Meilleures salutations,

Wallace

 

Whoa...

Merci les gars...

Que diriez-vous d'un stop d'achat et d'un stop de vente?

Il suffit de changer "BUY" par là ?

Je veux juste 2 positions pour 1 paire, pas plus que ça...

Désolé, je suis encore novice...

 

Comment coder cet indis dans EA ?

Bonjour, je suis un nouvel apprenant et je suis intéressé par l'apprentissage de mql, quelqu'un peut-il me dire comment coder ceci dans l'EA ?

extern int Fast.MA.Period = 5 ;

extern int Slow.MA.Period = 34 ;

extern int Signal.period = 5 ;

//---- tampons

double Buffer1[],

Buffer2[],

b2[],

b3[] ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'indicateur personnalisé |

//+------------------------------------------------------------------+

int init()

{

//---- indicateurs

// deux tampons supplémentaires utilisés pour le comptage

IndicateurBuffers(4) ;

IndicateurShortName("MA_5_34") ;

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3) ;

SetIndexArrow(0,242) ; // vers le bas 226 234 242

SetIndexBuffer(0,b2) ;

SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3) ;

SetIndexArrow(1,241) ; //HAUT 225 233 241

SetIndexBuffer(1,b3) ;

// Ces tampons ne sont pas tracés, ils sont juste utilisés pour déterminer les flèches.

SetIndexBuffer (2,Buffer1) ;

SetIndexBuffer (3,Buffer2) ;

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction de désinitialisation de l'indicateur de garde |

//+------------------------------------------------------------------+

int deinit()

{

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur personnalisée |

//+------------------------------------------------------------------+

int start()

{

int i, counted_bars=IndicatorCounted() ;

double MA5,MA34 ;

int limit=Bars_comptées ;

Print(" print limit = ", limit) ;

if(counted_bars>0) limit++ ; <----peut-on m'expliquer ce que cela signifie ?

// Ligne principale

for(i=0 ; i<limit ; i++) <----can someone explain to me what it means ?

{

MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i) ;

MA34=iMA(NULL,0,Slow.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i) ;

Tampon1=MA5-MA34 ;

}

// Ligne de signal

for(i=0 ; i<limit ; i++) <----peut-on m'expliquer ce que cela signifie ?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i) ;

} <_Peut-on m'expliquer ce que cela signifie ?

// Flèches

for(i=0 ; i<limit ; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = High+10*Point ;

si(Buffer1 Buffer2)

b3 = Low-10*Point ; <---- quelqu'un peut-il m'expliquer ce que cela signifie ?

}

//----

return(0) ;

}

Merci les gars =^_^=

 
liew_stanley:
if(counted_bars>0) limit++ ; <----can someone explain to me what it means ?

// Ligne principale

for(i=0 ; i<limit ; i++) <----can someone explain to me what it means ?

// Ligne de signal

for(i=0 ; i<limit ; i++) <----can someone explain to me what it means ?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i) ;

} <_Peut-on m'expliquer ce que cela signifie ?

// Flèches

for(i=0 ; i<limit ; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = High+10*Point ;

si(Buffer1 Buffer2)

b3 = Low-10*Point ; <---- quelqu'un peut-il m'expliquer ce que cela signifie ?

Merci les gars =^_^=

C'est simple.

Lorsque vous démarrez votre indi, Bars=1000 (par exemple) et counted_bars=0. Donc limit=1000 et votre indi calcule les 1000 barres. Après cela, counted_bars=1000, et à chaque nouveau tick, l'indi calcule seulement la dernière (zéro) barre. Quand la prochaine barre arrive, limit=1 et indi recalcule les deux dernières barres.

b3 = Low-10*Point ; - c'est juste une ligne 10 points plus bas que le minimum de la barre.

 
liew_stanley:
Bonjour, je suis un nouvel apprenant et intéressé à apprendre mql, quelqu'un peut-il me dire comment coder cela dans EA ?

extern int Fast.MA.Period = 5 ;

extern int Slow.MA.Period = 34 ;

extern int Signal.period = 5 ;

//---- tampons

double Buffer1[],

Buffer2[],

b2[],

b3[] ;

//+------------------------------------------------------------------+

//| Fonction d'initialisation de l'indicateur personnalisé |

//+------------------------------------------------------------------+

int init()

{

//---- indicateurs

// deux tampons supplémentaires utilisés pour le comptage

IndicateurBuffers(4) ;

IndicateurShortName("MA_5_34") ;

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,3) ;

SetIndexArrow(0,242) ; // vers le bas 226 234 242

SetIndexBuffer(0,b2) ;

SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,3) ;

SetIndexArrow(1,241) ; //HAUT 225 233 241

SetIndexBuffer(1,b3) ;

// Ces tampons ne sont pas tracés, ils sont juste utilisés pour déterminer les flèches.

SetIndexBuffer (2,Buffer1) ;

SetIndexBuffer (3,Buffer2) ;

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction de désinitialisation de l'indicateur de garde |

//+------------------------------------------------------------------+

int deinit()

{

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| Fonction d'itération de l'indicateur personnalisée |

//+------------------------------------------------------------------+

int start()

{

int i, counted_bars=IndicatorCounted() ;

double MA5,MA34 ;

int limit=Bars_comptées ;

Print(" print limit = ", limit) ;

if(counted_bars>0) limit++ ; <----peut-on m'expliquer ce que cela signifie ?

// Ligne principale

for(i=0 ; i<limit ; i++) <----can someone explain to me what it means ?

{

MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i) ;

MA34=iMA(NULL,0,Slow.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i) ;

Tampon1=MA5-MA34 ;

}

// Ligne de signal

for(i=0 ; i<limit ; i++) <----can someone explain to me what it means ?

{

Buffer2=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i) ;

} <_Peut-on m'expliquer ce que cela signifie ?

// Flèches

for(i=0 ; i<limit ; i++)

{

if(Buffer1 > Buffer2 && Buffer1 < Buffer2)

b2 = High+10*Point ;

si(Buffer1 Buffer2)

b3 = Low-10*Point ; <---- quelqu'un peut-il m'expliquer ce que cela signifie ?

}

//----

return(0) ;

}

Merci les gars =^_^=

Si vous voulez utiliser cet indicateur dans un ea, vous pouvez utiliser la fonction icustom() pour y accéder. Vous n'avez pas vraiment besoin de comprendre le code de l'indicateur, juste les données qu'il sort. Du moins, c'est la façon la plus simple de le faire.

 
fxcourt:
Si vous voulez utiliser cet indicateur dans une EA, vous pouvez utiliser la fonction icustom() pour y accéder. Vous n'avez pas vraiment besoin de comprendre le code de l'indicateur, juste les données qu'il sort. Du moins, c'est la façon la plus simple de le faire.

En d'autres termes, utiliser la fonction icustom() dans l'EA pour rappeler les indis ? comment le codage doit-il être écrit dans l'EA ? pouvez-vous me guider ?

Merci beaucoup

 
toiii:
whoa...

merci les gars...

Que diriez-vous d'un stop d'achat et d'un stop de vente ?

Il suffit de changer "BUY" par là ?

Je veux juste 2 positions pour 1 paire, pas plus que ça...

Désolé, je suis encore novice...

Lire ceci

Tutoriel MQL4

 

Ce codage est-il correct ?

extern double TakeProfit=100 ;

extern double Lots=1 ;

extern double TrailingStop=35 ;

extern int ShortEma = 5 ;

extern int LongEma = 34 ;

//+------------------------------------------------------------------+

//| fonction d'initialisation de l'expert

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0) ;

}

//+------------------------------------------------------------------+

//| fonction de désinitialisation experte |

//+------------------------------------------------------------------+

int deinit()

{

//----

//----

return(0) ;

}

int Crossed (double ligne1 , double ligne2)

{

static int last_direction = 0 ;

static int current_direction = 0 ;

if(line1>line2)current_direction = 1 ; //haut

if(line1<line2)current_direction = 2 ; //down

if(current_direction != last_direction) //changé

{

last_direction = current_direction ;

return (last_direction) ;

}

else

{

return (0) ;

}

}

//+------------------------------------------------------------------+

//| fonction de démarrage expert |

//+------------------------------------------------------------------+

int start()

{

//----

int total ;

double shortEma, longEma ;

shortEma = iCustom(NULL,0, "Test_Demo",13,0,0) ;

longEma = iCustom(NULL,0, "Test_Demo",54,0,0) ;

Print("shortEma = " + shortEma + " : longEma = " + longEma) ;

int isCrossed = 0 ;

isCrossed = Crossed (LongEma,ShortEma) ;

total = OrdersTotal() ;

si(total < 1)

{

si(isCrossed == 1)

{

1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, "My EA",12345,0,Green) ;

si(1>0)

{

if(OrderSelect(1,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre BUY ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre BUY : ",GetLastError()) ;

return(0) ;

}

if(isCrossed == 2)

{

2=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, "My EA",12345,0,Red) ;

si(2>0)

{

if(OrderSelect(2,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordre de vente ouvert : ",OrderOpenPrice()) ;

}

else Print("Erreur lors de l'ouverture de l'ordre VENTE : ",GetLastError()) ;

return(0) ;

}

return(0) ;

}

}

j'ai une erreur disant que 1 & 2 unexpected token, qu'est-ce que cela signifie ? pouvez-vous me guider ?

Merci

 

Je suppose que tu as supprimé quelque chose et oublié :

2=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red); if(2>0)

c'est un non-sens.

 
liew_stanley:
extern double TakeProfit=100 ;

extern double Lots=1 ;

extern double TrailingStop=35 ;

J'ai une erreur disant que 1 & 2 sont des jetons inattendus, qu'est-ce que cela veut dire ? pouvez-vous me guider ?

Merci

Supprimer 1=, et 2= avant OrderSend(....