Salut les traders ! Aujourd'hui, je vais vous parler d'un petit bijou d'expert advisor (EA) qui va vous aider à gérer vos positions après avoir atteint le break-even. Accrochez-vous, c'est parti !
La fonction de comptage des ordres
Le chef-d'œuvre de cet EA réside dans sa fonction de comptage des ordres :
int OrdersCounter() {
int counter=0;
//---
for(int i=OrdersTotal()-1; i>=0; i--)
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) {
// Si l'ordre a été ouvert par cet EA
//--- Vérifie si le break-even a eu lieu
double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();
if(!XBreakeven) {
counter++; // Compte la position
}
}
return counter;
}
Nous ne comptons que les ordres qui n'ont PAS de stop-loss au-dessus ou égal à leur prix d'ouverture pour les achats, et en dessous pour les ventes. En gros, on compte tous les ordres qui n'ont pas atteint le break-even ou dont le trailing stop n'a pas protégé le prix d'ouverture.
double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();
if(!XBreakeven) {
// Si le break-even n'a pas eu lieu
Grâce à cela, nous créons un compteur qui renvoie une valeur que nous utiliserons pour limiter notre position maximale, que nous avons fixé à 1 ordre à la fois.
if(OrdersCounter()<MaximumOrders) Donc, dès qu'un break-even a lieu, cette fonction ne le comptera pas. Dans notre exemple, avec une seule position, elle retournera zéro et boum, on ouvre une autre vente et le processus continue !
Ce serait impossible sans ma fonction de break-even :
void BreakEvenFunction() {
//---
for(int i=OrdersTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS))
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) {
// Pour les achats, si le Bid est au-dessus du prix d'ouverture + pips de break-even
double xHybrid = OrderType()==OP_BUY ? (Bid>OrderOpenPrice()+BreakevenPips*_Point && OrderStopLoss()<OrderOpenPrice()) : (Ask<OrderOpenPrice()-BreakevenPips*_Point && OrderStopLoss()>OrderOpenPrice());
/* Pour les achats, seulement si le StopLoss est égal ou supérieur au prix d'ouverture, vice versa pour les ventes */
if(xHybrid) {
bool modfy = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);
}
}
}
Alors, prêt à essayer ?
연관 포스트
- Maîtriser la Classe ChartButton sur MT4 : Créez des Boutons Interactifs sur vos Graphiques
- Optimisez vos tests de stratégie avec le panneau d'assistance de trading pour MetaTrader 4
- DreamBot : Le Robot de Trading Efficace pour MetaTrader 4
- Profitez des croisements de Moyennes Mobiles avec cet Expert Advisor pour MetaTrader 4
- EA basé sur les Bandes de Bollinger pour MetaTrader 4 : Optimisez vos stratégies de trading