Page 1 sur 1

Aide modification d'un indicateur

Publié : 19 déc. 2011, 19:17
par kewin
Bonjour,

Je souhaiterais de l'aide afin de modifier un indicateur Heiken Ashi.
J'ai réussi à m'insérer une alerte mail pour chaque changement de statut d'une bougie mais je me retrouve souvent spammé le temps que la bougie se décide définitivement.

Cette fois j'aimerais recevoir une alerte mail à la clôture de la bougie, si celle si est différente de l'ancienne.

Code : Tout sélectionner

//+------------------------------------------------------------------+
//|                                         Heiken Ashi Smoothed.mq4 |
//+------------------------------------------------------------------+
//|                                                      mod by Raff |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, forex-TSD.com "
#property link      "http://www.forex-tsd.com/"
#property link      "Alerts added by cja"

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 RoyalBlue
#property indicator_color3 Red
#property indicator_color4 RoyalBlue
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 3
#property indicator_width4 3

//---- parameters
extern int MaMetod  = 2;
extern int MaPeriod = 6;
extern int MaMetod2  = 3;
extern int MaPeriod2 = 2;

extern bool POP_UP_Box_Alert = false;
extern bool Sound_Alert = false;
extern bool Mail_Alert = false;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];
//----
int ExtCountedBars=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//|------------------------------------------------------------------|
int init()
  {
//---- indicators
   IndicatorBuffers(8);

   SetIndexStyle(0,DRAW_HISTOGRAM, 0);
   SetIndexBuffer(0, ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM, 0);
   SetIndexBuffer(1, ExtMapBuffer2);
   SetIndexStyle(2,DRAW_HISTOGRAM, 0);
   SetIndexBuffer(2, ExtMapBuffer3);
   SetIndexStyle(3,DRAW_HISTOGRAM, 0);
   SetIndexBuffer(3, ExtMapBuffer4);
//----
   SetIndexDrawBegin(0,5);
//---- indicator buffers mapping
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexBuffer(4,ExtMapBuffer5);
   SetIndexBuffer(5,ExtMapBuffer6);
   SetIndexBuffer(6,ExtMapBuffer7);
   SetIndexBuffer(7,ExtMapBuffer8);
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
  return(0);
  }  
bool Crossed (double haOpen , double haClose )
{

static string last_direction = "";
string current_direction = "";

if(haOpen<=haClose) current_direction = "LONG";
if(haOpen>haClose) current_direction = "SHORT";



if(current_direction != last_direction) 
{
      if(POP_UP_Box_Alert==true)Alert ("H/Ashi Direction change "+current_direction+"  " ,Symbol()," ",Period()," @ ",Bid);
      if(Sound_Alert==true) PlaySound("alert2.wav");
      if(Mail_Alert==true)SendMail("Alerte Forex","H/Ashi Direction change "+current_direction+" "+Symbol()+" "+Period()+" "+" @ "+Bid); 
      last_direction = current_direction;
      return (true);
}
else
{
      return (false);

}
 
  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   double maOpen, maClose, maLow, maHigh;
   double haOpen, haHigh, haLow, haClose;
   if(Bars<=10) return(0);
   ExtCountedBars=IndicatorCounted();
//---- check for possible errors
   if (ExtCountedBars<0) return(-1);
//---- last counted bar will be recounted
   if (ExtCountedBars>0) ExtCountedBars--;
   int pos=Bars-ExtCountedBars-1;
   while(pos>=0)
     {
      maOpen=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_OPEN,pos);
      maClose=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_CLOSE,pos);
      maLow=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_LOW,pos);
      maHigh=iMA(NULL,0,MaPeriod,0,MaMetod,MODE_HIGH,pos);

      haOpen=(ExtMapBuffer5[pos+1]+ExtMapBuffer6[pos+1])/2;
      haClose=(maOpen+maHigh+maLow+maClose)/4;
      haHigh=MathMax(maHigh, MathMax(haOpen, haClose));
      haLow=MathMin(maLow, MathMin(haOpen, haClose));

      if (haOpen<haClose) 
        {
         ExtMapBuffer7[pos]=haLow;
         ExtMapBuffer8[pos]=haHigh;
        } 
      else
        {
         ExtMapBuffer7[pos]=haHigh;
         ExtMapBuffer8[pos]=haLow;
        } 
      ExtMapBuffer5[pos]=haOpen;
      ExtMapBuffer6[pos]=haClose;

 	   pos--;
     }

   int i;
   for(i=0; i<Bars; i++) ExtMapBuffer1[i]=iMAOnArray(ExtMapBuffer7,Bars,MaPeriod2,0,MaMetod2,i);
   for(i=0; i<Bars; i++) ExtMapBuffer2[i]=iMAOnArray(ExtMapBuffer8,Bars,MaPeriod2,0,MaMetod2,i);
   for(i=0; i<Bars; i++) ExtMapBuffer3[i]=iMAOnArray(ExtMapBuffer5,Bars,MaPeriod2,0,MaMetod2,i);
   for(i=0; i<Bars; i++) ExtMapBuffer4[i]=iMAOnArray(ExtMapBuffer6,Bars,MaPeriod2,0,MaMetod2,i);
   
  

     Print(Crossed (ExtMapBuffer1[0],ExtMapBuffer2[0]));
//----
   return(0);
  }
//+------------------------------------------------------------------+

Re: Aide modification d'un indicateur

Publié : 20 déc. 2011, 17:13
par Teal'C
Lien intéressant pour apprendre à programmer sous MQL4

http://www.trading-automatique.fr/MQL4/ ... -nuls.html

Re: Aide modification d'un indicateur

Publié : 03 janv. 2012, 14:33
par kewin
Merci pou le lien.

C'est effectivement sur ce support que je travail actuellement.Malheureusement il ne me semble pas avoir trouver la réponse pour le moment.

Sinon que me conseillez-vous par la suite pour continuer mon apprentissage ?

Re: Aide modification d'un indicateur

Publié : 04 janv. 2012, 08:26
par Fabien LABROUSSE
Désolé je serais pas t'aider pour ton problème mais pour apprendre le mql rien de mieux que le site officiel en anglais que tu peux traduire en français avec google traduction ( mais tu l'avais peut-être déjà étudié?):

http://docs.mql4.com/

Re: Aide modification d'un indicateur

Publié : 06 janv. 2012, 13:04
par AUTOFOREX
Effectivement le site mql4.com est une véritable mine d'or, pour le peu que l'on ne soit pas anglophobe ! :)

Re: Aide modification d'un indicateur

Publié : 07 avr. 2012, 13:01
par kewin
(Re)Bonjour,

J'ai mis le temps mais je pense être sur la bonne piste.Faut dire que par manque de temps j'avais un peu lâché l'affaire. :mrgreen:
En fouillant un peu à droite et à gauche je suis tombé sur une fonction qui fait ce que je cherche :

Code : Tout sélectionner

bool isNewBar() {
if (NbBars < Bars) {
NbBars = Bars;
return (TRUE);
}
return (FALSE);
}
Je l'ai donc intégrer au code (rouge = rajout) :

if(isNewBar())
{

if(current_direction != last_direction)
{
if(POP_UP_Box_Alert==true)Alert ("H/Ashi Direction change "+current_direction+" " ,Symbol()," ",Period()," @ ",Bid);
if(Sound_Alert==true) PlaySound("alert2.wav");
if(Mail_Alert==true)SendMail("Alerte Forex","H/Ashi Direction change "+current_direction+" "+Symbol()+" "+Period()+" "+" @ "+Bid);
last_direction = current_direction;
return (true);
}
else
{
return (false);

}
}

Re: Aide modification d'un indicateur

Publié : 07 avr. 2012, 17:41
par traders59
Effectivement le site mql4.com est une véritable mine d'or, pour le peu que l'on ne soit pas anglophobe ! :)
LOL je te rejoins là :x

a quand une version francaise?