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 14: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 14:59

aide-technique-mql4-t18251.html

8 post plus bas que le tien

Re: Aide mql4, grrr !!

par lenanard » 26 Oct 2017 15:03

en mq4 pour le croisement de deux moyennes mobiles essayez ceci.
Si ça ne convient pas poubelle sans hésiter
Bons trades
Code: Tout sélectionner
//+------------------------------------------------------------------+
//
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                  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 15: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 08: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 12:08

merci Gacanga, je vais regarder ça

Articles en relation
Aide Technique MQL4
par Gacanga » 06 Oct 2017 16:43 (2 Réponses)
Un seul trade par bougie - mql4
par Gacanga » 24 Mar 2017 11:31 (3 Réponses)
MQL4 - MagicNumber et Trailing Stop
par Gacanga » 04 Avr 2017 11:39 (5 Réponses)
Programmation en MQL4 : récupérer le contenu d'un email/SMS
par oscar » 15 Fév 2017 18:18 (3 Réponses)
Calculer la moyenne mobile du rsi en mql4 dans un indicateur
par Gacanga » 09 Nov 2017 12:27 (2 Réponses)
Aide code fonctions temporelles
par Mat » 16 Juin 2016 14:00 (3 Réponses)
Condition EA à l'aide de Heiken Ashi
par pingoo67 » 22 Nov 2017 22:19 (17 Réponses)
Besoin d'aide pour amélioration algo cac 40
Fichier(s) joint(s) par Ernesto » 21 Mai 2016 23:43 (2 Réponses)

ProRealTime

Alors partagez-le 5 fois c'est bon pour la santé