![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Bonjour.
J'ai hâte d'apprendre vos astuces et de vous montrer les miennes.
Bonjour, je suis impatient d'apprendre vos astuces et de vous montrer les miennes.
Vous trouverez beaucoup de choses intéressantes sur ce forum.
Lisez et utilisez la fonction de recherche sans aucune restriction ! !!
N'hésitez pas à demander ce que vous voulez... Il y a beaucoup d'excellents contributeurs/assistants ici.
FerruFx
Dans ce code, le trailing stop est fixé à 45 pips. Mais le stop suiveur ne semble pas s'activer avant que la transaction ne bouge de 45 pips. Comment dois-je le modifier pour que le stop suiveur soit activé lorsque la transaction est placée ?
extern string Remark1 = "== Main Settings ==";
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = true;
extern double Lots = 4;
extern int Slippage = 2;
extern bool UseStopLoss = false;
extern int StopLoss = 100;
extern bool UseTakeProfit = false;
extern int TakeProfit = 15;
extern bool UseTrailingStop = true;
extern int TrailingStop = 45;
extern bool MoveStopOnce = False;
extern int MoveStopWhenPrice = 50;
extern int MoveStopTo = 1;
extern int MaxConcurrentTrades = 2;
//Version 2.01
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderStopLoss() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//MoveOnce
if(MoveStopOnce && MoveStopWhenPrice > 0) {
if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {
if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {
OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(((OrderStopLoss - Ask) > (Point * TrailingStop)) || OrderStopLoss() == 0) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
Changé en rouge
J'ai fait les changements en rouge, mais maintenant l'EA ne semble pas vouloir fonctionner. Je vais poster l'EA complète pour que vous puissiez y jeter un coup d'oeil. Merci !
Assurez-vous de mettre () après orderstoploss.
Cool, ça a marché !
Que pensez-vous de cet indicateur....
Pourrait-on le modifier pour que les prix affichent des couleurs différentes en fonction de leur ouverture ? Par exemple, si l'ouverture est supérieure à celle de la barre précédente, le prix serait vert, s'il est inférieur, alors rouge, et s'il est égal, alors jaune ? Ces couleurs étant sélectionnables ? De plus, pourriez-vous l'étendre pour montrer 10 ouvertures au lieu de 6 seulement ?
De plus, sur l'EA que nous venons de corriger, comment pourrais-je mettre un paramètre d'entrée comme "Pips pour activer le Trailing Stop". Je l'ai dans un autre EA mais je ne sais pas comment le coder.
OrderComment()
OrderTicket()
OrderLots()
OrderStopLoss()
OrderTakeProfit()
OrderOpenTime()
Ce sont tous des outils potentiels de filtrage des ordres.
Qu'y a-t-il d'autre dans ces transactions spécifiques qui les rende uniques ?
OrderComment()
OrderTicket()
OrderLots()
OrderStopLoss()
OrderTakeProfit()
OrderOpenTime()
Ce sont tous des outils potentiels de filtrage des ordres.
Qu'y a-t-il d'autre dans ces métiers spécifiques qui les rende uniques ?Deux des plus importants pour filtrer les ordres sont OrderSymbol() et OrderMagicNumber(). Un autre outil intéressant est OrderComment().
La meilleure idée est de saisir l'une de ces fonctions dans le Metaeditor, puis de cliquer sur le mot asnd et d'appuyer sur F1. Vous afficherez ainsi l'aide et la liste de toutes les fonctions d' ordre.
Bonne programmation,
Hiachiever
Utiliser OrderComment
Soyez prudent lorsque vous utilisez OrderComment() pour identifier des transactions. Parfois, le courtier ajoute des caractères au commentaire.
Il est préférable d'utiliser
si (StringFind(OrderComment(), UserComment, 0) > 0)
{
// l'ordre identifié par UserComment est trouvé dans OrderComment
}
au lieu de
if (OrderComment() == UserComment)
{
// l'ordre peut être identifié par UserComment
// si OrderComment n'a pas été modifié par le courtier
}
Robert
Fermer les transactions chez beakeven
..............