Avec le code ci-dessus, vous créez une nouvelle variable pour stocker le numéro de ticket, puis vous pouvez sélectionner la transaction par son numéro de ticket.
Avec le code ci-dessus, vous créez une nouvelle variable pour stocker le numéro de ticket, puis vous pouvez sélectionner la transaction par son numéro de ticket.
Awesome !!!!!! Merci beaucoup pour cela. Après de nombreuses semaines, tout fonctionne maintenant. J'ai beaucoup appris. Merci à tous !!!
Trader3000: Awesome !!!!!! Merci beaucoup pour cela. Après de nombreuses semaines, tout fonctionne maintenant. J'ai beaucoup appris. Merci à tous !!!
Désolé mais j'ai parlé trop vite. Le Trailingstop ne se déclenche que parfois, donc je pense que le code est encore cassé quelque part. Voici l'EA complet. Quelqu'un peut-il vérifier et me faire savoir si vous trouvez une erreur. Merci.
#define magicNumber 12345// Kicks in when position reaches at least TrailingStop pips of profit.externstring Label_Trailingstart = "Pip threshold to activate Trailing stop";
externdouble TrailingStart = 10;
externstring Label_Trailingstop = "Pips trailing behind";
externdouble TrailingStop = 5;
//Set it to some value above 0 to activate Hedgeexterndouble Hedge = 10;
externdouble Multiplier = 3;
externstring Label_StopLoss = "Set StopLoss of original trade";
externdouble StopLoss = 11;
externstring Label_Stoploss1 = "Set Stoploss of Hedge trade";
externstring Label_Stoploss2 = "Value should be less than 'Hedge'";
externstring Label_Stoploss3 = "otherwise a second Hedge trade will open";
externdouble Stoploss = 9;
externstring Label_Percentage = "Lotsize percentage of Equity";
externdouble Percentage = 1;
externdouble Lotsize = 0.01;
int i, result, total;
double stoplevel;
int init()
{
stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10; // get broker's stoplevelif(StopLoss<=stoplevel) StopLoss=stoplevel; // we compare our StopLoss withif(Stoploss<=stoplevel) Stoploss=stoplevel; // stoplevel and adjust it when error occuredif(TrailingStop<=stoplevel) TrailingStart=stoplevel+TrailingStop; // we compared our TakeProfit// as we compared our StopLossif ((StopLoss || Stoploss || TrailingStop) < stoplevel)
{
MessageBox("Please note: If your inputs for StopLoss, Stoploss"+
"\nand/or TrailingStop are below the minimum levels"+
"\nrequired by your broker, they will automatically"+
"\nbe increased to "+StringConcatenate(stoplevel));
}
return(0);
}
int deinit()
{
return(0);
}
int start()
{
//double Lots = NormalizeDouble(AccountEquity()*Percentage*Lotsize/100, 2);int buy_ticket=0;
int sell_ticket=0;
total=0;
for(i = OrdersTotal()-1; i >= 0 ; i--)
if ( OrderSelect(i, SELECT_BY_POS)
&& OrderMagicNumber() == magicNumber
&& OrderSymbol() == Symbol())
{
total++;
if(OrderType()==OP_BUY)
buy_ticket=OrderTicket();
if(OrderType()==OP_SELL)
sell_ticket=OrderTicket();
}
if(total==0 && Close[1]>Close[2])
{
result=OrderSend(Symbol(), OP_BUY, 0.01, Ask, 3, Ask - StopLoss*Point*10, 0, "Original", magicNumber, 0, Blue);
Print("Error setting Original order: ",GetLastError());
}
if (buy_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_BUY)
{
if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits))
{
if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits))
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits),
OrderTakeProfit(), Blue))
Print("Error setting Buy trailing stop: ",GetLastError());
}
}
elseif (OrderOpenPrice() > Bid + NormalizeDouble(Hedge*Point*10,Digits))
if(total == 1)
{
result=OrderSend(Symbol(), OP_SELL, NormalizeDouble(OrderLots() * Multiplier, 2), Bid, 3,
Bid + Stoploss*Point*10, 0, "Hedge", magicNumber, 0, Blue);
Print("Error setting Sell Hedge: ", GetLastError());
}
}
elseif (sell_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_SELL)
{
if (OrderOpenPrice() - Ask > NormalizeDouble(TrailingStart *Point*10,Digits))
{
if (OrderStopLoss() > Ask + NormalizeDouble(TrailingStop *Point*10,Digits))
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), Ask + NormalizeDouble(TrailingStop *Point*10,Digits),
OrderTakeProfit(), Red))
Print("Error setting Sell trailing stop: ",GetLastError());
}
}
elseif (OrderOpenPrice() < Ask - NormalizeDouble(Hedge*Point*10,Digits))
if(total == 1)
{
result=OrderSend(Symbol(), OP_BUY, NormalizeDouble(OrderLots() * Multiplier, 2), Ask, 3,
Ask - Stoploss*Point*10, 0, "Hedge", magicNumber, 0, Red);
Print("Error setting Buy Hedge: ", GetLastError());
}
}
return(0);
}
if (buy_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_BUY)
{
//Code
}
elseif (sell_ticket>0 && OrderSelect(buy_ticket,SELECT_BY_TICKET) && OrderType() == OP_SELL)
{
//If there is an open buy order code here will not be executed//The else is not necessary
}
Merci beaucoup de l'avoir signalé. J'ai corrigé l'erreur et cela fonctionne maintenant. J'ai une autre question. J'essaie de faire apparaître la boîte de message lorsque mon stoploss est inférieur au STOP_LEVEL du courtier, mais elle s'affiche même lorsqu'il est supérieur. J'ai essayé de le mettre dans la section "start" plutôt que dans la section "init", mais cela ne fonctionne pas non plus. Quelqu'un pourrait-il jeter un coup d'œil et me dire ce qui ne va pas ? Merci.
int init()
{
stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10; // get broker's stoplevelif(StopLoss<=stoplevel) StopLoss=stoplevel; // we compare our StopLoss withif(Stoploss<=stoplevel) Stoploss=stoplevel; // stoplevel and adjust it when error occuredif(TrailingStop<=stoplevel) TrailingStart=stoplevel+TrailingStop; // we compared our TakeProfit// as we compared our StopLossif ((StopLoss || Stoploss || TrailingStop) < stoplevel)
{
MessageBox("Please note: If your inputs for StopLoss, Stoploss"+
"\nand/or TrailingStop are below the minimum levels"+
"\nrequired by your broker, they will automatically"+
"\nbe increased to "+StringConcatenate(stoplevel));
}
return(0);
}
Bonjour à tous, j'ai de nouveau rencontré un problème. C'est très étrange et je ne comprends pas pourquoi cela se produit. Comme je l'ai mentionné plus haut, l'EA a bien fonctionné, mais maintenant je veux simplement passer de ceci
Je ne touche à rien d'autre, mais après ce simple changement, ni le Trailing stop ni le hedge ne se déclenchent. C'est bizarre. Le code complet est ci-dessus.
Merci pour votre réponse, mais je ne comprends pas. Le code pour le Trailing stop est ici
{
if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits))
{
if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits))
{
if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits),
OrderTakeProfit(), Blue))
Si j'ai un Stoploss, l'EA fonctionne et le Trailingstop et la couverture se déclenchent, mais si je change le Stoploss à 0, rien ne fonctionne. Je ne vois pas comment et pourquoi le Stoploss aurait une influence sur le Trailingstop et la couverture ?
Oui, vous devez resélectionner l'ordre.
Avec le code ci-dessus, vous créez une nouvelle variable pour stocker le numéro de ticket, puis vous pouvez sélectionner la transaction par son numéro de ticket.
Oui, vous devez resélectionner l'ordre.
Avec le code ci-dessus, vous créez une nouvelle variable pour stocker le numéro de ticket, puis vous pouvez sélectionner la transaction par son numéro de ticket.
Awesome !!!!!! Merci beaucoup pour cela. Après de nombreuses semaines, tout fonctionne maintenant. J'ai beaucoup appris. Merci à tous !!!
Désolé mais j'ai parlé trop vite. Le Trailingstop ne se déclenche que parfois, donc je pense que le code est encore cassé quelque part. Voici l'EA complet. Quelqu'un peut-il vérifier et me faire savoir si vous trouvez une erreur. Merci.
,
,
Merci beaucoup de l'avoir signalé. J'ai corrigé l'erreur et cela fonctionne maintenant. J'ai une autre question. J'essaie de faire apparaître la boîte de message lorsque mon stoploss est inférieur au STOP_LEVEL du courtier, mais elle s'affiche même lorsqu'il est supérieur. J'ai essayé de le mettre dans la section "start" plutôt que dans la section "init", mais cela ne fonctionne pas non plus. Quelqu'un pourrait-il jeter un coup d'œil et me dire ce qui ne va pas ? Merci.
if ((StopLoss || Stoploss || TrailingStop) < stoplevel)ça n'a pas de sens
tu veux dire ?
if ((StopLoss < stoplevel || TrailingStop) < stoplevel)ça n'a pas de sens
tu veux dire ?
Bonjour à tous, j'ai de nouveau rencontré un problème. C'est très étrange et je ne comprends pas pourquoi cela se produit. Comme je l'ai mentionné plus haut, l'EA a bien fonctionné, mais maintenant je veux simplement passer de ceci
à
Je ne touche à rien d'autre, mais après ce simple changement, ni le Trailing stop ni le hedge ne se déclenchent. C'est bizarre. Le code complet est ci-dessus.
Merci pour votre réponse, mais je ne comprends pas. Le code pour le Trailing stop est ici
{ if (Bid - OrderOpenPrice() > NormalizeDouble(TrailingStart *Point*10,Digits)) { if (OrderStopLoss() < Bid - NormalizeDouble(TrailingStop *Point*10,Digits)) { if (OrderModify(OrderTicket(), OrderOpenPrice(), Bid - NormalizeDouble(TrailingStop *Point*10,Digits), OrderTakeProfit(), Blue))Si j'ai un Stoploss, l'EA fonctionne et le Trailingstop et la couverture se déclenchent, mais si je change le Stoploss à 0, rien ne fonctionne. Je ne vois pas comment et pourquoi le Stoploss aurait une influence sur le Trailingstop et la couverture ?