ProRealTime
Pour partager sur le trading automatique, nos algorithmes, nos backtests
Répondre • Page 1 sur 1

Aide mql4, grrr !!

par BilouZ36 » 26 oct. 2017 15:40

Bonjour,

je suis en train de d'apprendre à coder en mql4, rien de bien compliqué pour le moment, genre indicateur basé sur le croisement de moyennes mobiles, jusqu'ici tout va bien, mais quand la condition est bonne, l'indicateur me fait des alertes sans arrêt. :musique:
J'aimerais bien savoir comment dire à cet indicateur de s'actualiser à la clôture d'un chandelier, si qlq peux me venir en aide...

Merci d'avance

Re: Aide mql4, grrr !!

par Boom » 26 oct. 2017 15:59

aide-technique-mql4-t18251.html

8 post plus bas que le tien

Re: Aide mql4, grrr !!

par lenanard » 26 oct. 2017 16:03

en mq4 pour le croisement de deux mm essayez ceci.
Si ça ne convient pas poubelle sans hésiter
Bons trades

Code : #

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

//+------------------------------------------------------------------+
//|                                  2MA Crossover.mq4 modified from |
//|                                         EMA-Crossover_Signal.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------
  

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_width1 3
#property indicator_color2 Yellow
#property indicator_width2 3

extern string note1 = "First Moving Average";
extern int MA1 =   21;
extern string note2 = "0=sma, 1=ema, 2=smma, 3=lwma";
extern int MA1Mode = 1; //0=sma, 1=ema, 2=smma, 3=lwma
extern string note3 = "--------------------------------------------";
extern string note4 = "Second Moving Average";
extern int MA2 =   89;
extern string note5 = "0=sma, 1=ema, 2=smma, 3=lwma";
extern int MA2Mode = 1; //0=sma, 1=ema, 2=smma, 3=lwma
extern string note6 = "--------------------------------------------";
extern string note7 = "Arrow Type";
extern string note8 = "0=Thick, 1=Thin, 2=Hollow, 3=Round";
extern string note9 = "4=Fractal, 5=Diagonal Thin";
extern string note10 = "6=Diagonal Thick, 7=Diagonal Hollow";
extern string note11 = "8=Thumb, 9=Finger";
extern int ArrowType=2;
/*
extern string note12 = "--------------------------------------------";
extern string note13 = "turn on Alert = true; turn off = false";
extern bool AlertOn = true;
extern string note14 = "--------------------------------------------";
extern string note15 = "send Email Alert = true; turn off = false";
extern bool SendAnEmail=true;
*/
//
extern string ahi0=" ******* Alert settings:";
//extern int  SignalCandle           = 1;
extern bool PopupAlerts            = TRUE;
extern bool EmailAlerts            = FALSE;
extern bool PushNotificationAlerts = TRUE;
extern bool SoundAlerts            = TRUE;
extern string SoundFileLong        = "alert.wav";
extern string SoundFileShort       = "alert2.wav";
int lastAlert=88;
//

double CrossUp[];
double CrossDown[];
//string AlertPrefix,
string MA1short_name, MA2short_name;

string GetTimeFrameStr() {
   switch(Period())
   {
      case 1 : string TimeFrameStr="M1"; break;
      case 5 : TimeFrameStr="M5"; break;
      case 15 : TimeFrameStr="M15"; break;
      case 30 : TimeFrameStr="M30"; break;
      case 60 : TimeFrameStr="H1"; break;
      case 240 : TimeFrameStr="H4"; break;
      case 1440 : TimeFrameStr="D1"; break;
      case 10080 : TimeFrameStr="W1"; break;
      case 43200 : TimeFrameStr="MN1"; break;
      default : TimeFrameStr=Period();
   } 
   return (TimeFrameStr);
   }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   if (ArrowType == 0) {
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 233);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 234);
   }
   else if (ArrowType == 1) {
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 225);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 226);
   }
   else if (ArrowType == 2) {
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 241);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 242);
   }
   else if (ArrowType == 3) {
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 221);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 222);
   }
   else if (ArrowType == 4) {
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 217);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 218);
   }
   else if (ArrowType == 5) {
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 228);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 230);
   }
   else if (ArrowType == 6) {
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 236);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 238);
   }
   else if (ArrowType == 7) {
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 246);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 248);
   }
   else if (ArrowType == 8) {
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 67);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 68);
   }
   else if (ArrowType == 9) {
      SetIndexStyle(0,DRAW_ARROW);
      SetIndexArrow(0, 71);
      SetIndexStyle(1,DRAW_ARROW);
      SetIndexArrow(1, 72);
   }

   SetIndexBuffer(0, CrossUp);
   SetIndexBuffer(1, CrossDown);

//---- indicator short name
   switch(MA1Mode)
     {
      case 1 : MA1short_name="EMA";  break;
      case 2 : MA1short_name="SMMA"; break;
      case 3 : MA1short_name="LWMA"; break;
      default :
         MA1Mode=0;
         MA1short_name="SMA";
     }
   switch(MA2Mode)
     {
      case 1 : MA2short_name="EMA";  break;
      case 2 : MA2short_name="SMMA"; break;
      case 3 : MA2short_name="LWMA"; break;
      default :
         MA2Mode=0;
         MA2short_name="SMA";
     }

   //AlertPrefix=Symbol()+" ("+GetTimeFrameStr()+"):  ";
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
bool NewBar()
{
   static datetime lastbar;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
}   
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start() {
   int limit, i, counter;
   double MA1now, MA2now, MA1previous, MA2previous;//fxdaytrader, we cannot look into future: MA1after, MA2after;
   double Range, AvgRange;
   int counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
   
   for(i = 0; i <= limit; i++) {
   
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i ;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;
       
      MA1now = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, i);
      MA1previous = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, i+1);
      //MA1after = iMA(NULL, 0, MA1, 0, MA1Mode, PRICE_CLOSE, i-1);

      MA2now = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_CLOSE, i);
      MA2previous = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_CLOSE, i+1);
      //MA2after = iMA(NULL, 0, MA2, 0, MA2Mode, PRICE_CLOSE, i-1);
      
      if ((MA1now > MA2now) && (MA1previous < MA2previous)) {//&& (MA1after > MA2after)) {
                   CrossUp[i] = Low[i] - Range*1.5;
                   
                   if (NewBar() && lastAlert!=0) { lastAlert=0; doAlerts("Buy ",SoundFileLong); }
                   
                   /*
                   if (AlertOn && NewBar()) {
                      Alert(AlertPrefix+MA1short_name+" ("+MA1+") "+"crosses UP " + MA2short_name+" ("+MA2+")");
                   }   
              	    if (SendAnEmail && NewBar()) {
                      SendMail(AlertPrefix,MA1short_name+" ("+MA1+") "+"crosses UP " + MA2short_name+" ("+MA2+")");
              	    }
              	    */
              	    
      }
      else if ((MA1now < MA2now) && (MA1previous > MA2previous)) {//&& (MA1after < MA2after)) {
                   CrossDown[i] = High[i] + Range*1.5;
                   
                   if (NewBar() && lastAlert!=1) { lastAlert=1; doAlerts("SELL",SoundFileShort); }
                   
                   /*
                   if (AlertOn && NewBar()) {
                      Alert(AlertPrefix+MA1short_name+" ("+MA1+") "+"crosses DOWN " + MA2short_name+" ("+MA2+")");
                   }   
              	    if (SendAnEmail && NewBar()) {
                      SendMail(AlertPrefix,MA1short_name+" ("+MA1+") "+"crosses DOWN " + MA2short_name+" ("+MA2+")");
              	    }
              	    */
              	    
              	    
      }
   }
   return(0);
}

void doAlerts(string msg,string SoundFile) {
        msg="Master Alert : " + msg +Symbol()+" -"+DoubleToStr(MarketInfo(Symbol(),MODE_BID),Digits);
 string emailsubject="MT4 alert on acc. "+AccountNumber()+", "+WindowExpertName()+" - Alert on "+Symbol()+", period "+TFtoStr(Period());
  if (PopupAlerts) Alert(msg);
  if (EmailAlerts) SendMail(emailsubject,msg);
  if (PushNotificationAlerts) SendNotification(msg);
  if (SoundAlerts) PlaySound(SoundFile);
}//void doAlerts(string msg,string SoundFile) {

string TFtoStr(int period) {
 if (period==0) period=Period();
 switch(period) {
  case 1     : return("M1");  break;
  case 5     : return("M5");  break;
  case 15    : return("M15"); break;
  case 30    : return("M30"); break;
  case 60    : return("H1");  break;
  case 240   : return("H4");  break;
  case 1440  : return("D1");  break;
  case 10080 : return("W1");  break;
  case 43200 : return("MN1"); break;
  default    : return(DoubleToStr(period,0));
 }
 return("UNKNOWN");
}//string TFtoStr(int period) {

Re: Aide mql4, grrr !!

par BilouZ36 » 26 oct. 2017 16:27

merci de vos réponses, je vais voir ton code lenanard et te tiens au courant ;)

Re: Aide mql4, grrr !!

par Gacanga » 28 oct. 2017 09:00

Voilà un outil parfait pour ce que tu veux sans devoir connaitre la programmation:
http://www.eabuilder.com

100% gratuit, tu pourras "coder" les indicateurs voulu sans difficulté ;)

Re: Aide mql4, grrr !!

par BilouZ36 » 02 nov. 2017 13:08

merci Gacanga, je vais regarder ça

Sujets similaires
Aide Technique MQL4
par Gacanga » 06 oct. 2017 17:43 (2 Réponses)
besoin d'aide en mql4
par Philippe56380 » 09 févr. 2019 14:04 (6 Réponses)
Recherche dev MQL4
par Eversa » 18 sept. 2014 11:59 (2 Réponses)
Programmation en MQL4 : récupérer le contenu d'un email/SMS
par oscar » 15 févr. 2017 19:18 (3 Réponses)
Un seul trade par bougie - mql4
par jefsar » 24 mars 2017 12:31 (4 Réponses)
MQL4 - MagicNumber et Trailing Stop
par Gacanga » 04 avr. 2017 12:39 (5 Réponses)
Calculer la moyenne mobile du rsi en mql4 dans un indicateur
par JFLB » 09 nov. 2017 13:27 (4 Réponses)
MQL4 problème syntaxe!!
par Se7enRise » 19 févr. 2018 17:08 (19 Réponses)
HELP mql4 codage Expert Advisor
par Eversa » 12 avr. 2019 19:39 (1 Réponses)
Backtest MQL4 ultra lent
par Matthieuw31 » 17 avr. 2020 19:07 (2 Réponses)