Demandez ! - page 122

 

Bonjour, je suis nouveau dans la programmation MQL4 et j'ai une question. Je suis en train d'écrire un EA. Je voudrais changer la couleur de ces chandeliers lorsqu'ils répondent à mes critères prédéfinis. Ce serait bien aussi s'il pouvait marquer un signe "Errow" ou "Check" au-dessus ou en dessous du chandelier. Je me demande si c'est possible ? Quelqu'un peut-il m'aider ? Merci.

 
Dossiers :
 

Aide sur l'EA pour tracer une moyenne mobile à l'écran

Bonjour, j'essaie d'apprendre à programmer MT4 et je n'arrive pas à trouver comment tracer une moyenne mobile à l'écran. Je peux obtenir toutes les autres lignes et les trucs que je veux, mais pas de moyenne mobile.

Quelqu'un peut-il m'indiquer un exemple de code ?

Merci d'avance pour votre aide.

 

La moyenne mobile est un indicateur standard dans Metatrader.

Donc, trouvez cet indicateur ici

et attachez-le au graphique.

Lisez également ce fil de discussion https://www.mql5.com/en/forum/178706

Dossiers :
 
newdigital:
La moyenne mobile est un indicateur standard dans Metatrader.

Alors, trouvez cet indicateur ici

Lisez également ce fil de discussion https://www.mql5.com/en/forum/178706

Non, vous avez mal compris ma question. Je sais comment attacher un indicateur, aucun problème. J'ai besoin du code pour appeler l'indicateur à partir d'un EA afin que lorsque je charge mon EA, il affiche automatiquement l'indicateur sur mon écran.

J'espère avoir été clair cette fois-ci ?

 
jwhite1319:
Non, vous avez mal compris ma question. Je sais comment attacher un indicateur, il n'y a aucun problème. J'ai besoin du code pour appeler l'indicateur à partir d'un EA afin que lorsque je charge mon EA, il dessine automatiquement l'indicateur sur mon écran. J'espère avoir été clair cette fois-ci ?

Un exemple d'un code qui trace 2 MAs sur le graphique :

ExtCountedBars=IndicatorCounted() ;

if (ExtCountedBars<0) return(-1) ;

si (ExtCountedBars>0) ExtCountedBars-- ;

int pos=Bars-ExtCountedBars-1 ;

while(pos>=0)

{

ExtMapBuffer1[pos] = iMA(Symbol(),0,MAslow_period,MAslow_shift,MAslow_type,MAslow_price,pos) ;

ExtMapBuffer2[pos] = iMA(Symbol(),0,MAfast_period,MAfast_shift,MAfast_type,MAfast_price,pos) ;

pos-- ;

}

J'espère que cela vous aidera.

FerruFx

 

Je me demandais si quelqu'un pouvait m'aider à faire en sorte que cet EA augmente les lots au fur et à mesure de la croissance du compte... Pour qu'il utilise un pourcentage au lieu de lots fixes. Ou simplement doubler à chaque fois que le compte double... Merci d'avance

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = True;

extern double Lots = 1.0;

extern int Slippage = 3;

extern bool UseStopLoss = True;

extern int StopLoss = 200;

extern bool UseTakeProfit = False;

extern int TakeProfit = 60;

extern bool UseTrailingStop = True;

extern int TrailingStop = 200;

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 |

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

double Buy1_1 = iClose(NULL, 0, Current + 0);

double Buy1_2 = iOpen(NULL, 0, Current + 3);

double Sell1_1 = iClose(NULL, 0, Current + 0);

double Sell1_2 = iOpen(NULL, 0, Current + 0);

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

//| 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()) {

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;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > 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;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

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

//| Signal Begin(Entry) |

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

if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;

if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;

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

//| Signal End |

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

//Buy

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//Sell

if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars;

return(0);

}

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

aide avec le code

Un exemple d'un code qui trace 2 MAs sur le graphique :

J'espère que cela vous aidera.

Parfait. Exactement ce dont j'avais besoin. Merci, FerruFx !

 

Les barres d'outils disparaissent.

Quelqu'un sait-il pourquoi mes barres d'outils disparaissent chaque fois que j'éteins MT4 ? Je dois passer par là et recharger les barres d'outils lorsque je rallume MT.....

 

problème de compilation

Vous pouvez peut-être m'aider.

Parfois, lorsque je compile un nouvel indicateur, MT4 décide de compiler la plupart de mes indicateurs mais pas tous. Certains de mes indicateurs n'apparaissent PAS dans la fenêtre du navigateur lorsque cela se produit, et je ne peux donc pas les faire glisser sur un graphique. Avez-vous une idée de la raison pour laquelle cela peut se produire ?

Je dois déplacer certains indicateurs dans un autre dossier pour que tous mes indicateurs qui commencent par "_TRO_" soient compilés et apparaissent dans la fenêtre du navigateur. Le "_" devant le nom pourrait-il être à l'origine du problème ?

Raison: