Bonjour,
j'ai eu l'idée de créer un indicateur de volatilité asser simple, qui donnerait sous forme d'histogramme à 4 niveaux ,une note à la volatilité :
0, trop faible
1et -1 faible
2 et -2 tradable
3 et -3 trés forte
on pourrait regler la periode et les seuils pour chaque niveau , le résultat avait l'air assez interessant (voir image) mais pas de bol dés que je me connecte mt4 plante, est ce que quelqu'un pourrait jeter un oeil à mon code?
//+------------------------------------------------------------------+
//| volatility.mq4 |
//| Copyright © 2012, fog. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Silver
#property indicator_width1 3
//---- input parameters
extern int T=4;
extern double Seuil1=0.0004;
extern double Seuil2=0.0006;
extern double Seuil3=0.0010;
//---- buffers
double VolatilityBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
IndicatorBuffers(1);
IndicatorDigits(Digits);
//---- indicator line
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,VolatilityBuffer);
//---- name for DataWindow and indicator subwindow label
short_name="volatility("+T+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
//----
return(0);
}
//+------------------------------------------------------------------+
//| volatility |
//+------------------------------------------------------------------+
int start()
{
int i,counted_bars=IndicatorCounted();
//----
if(Bars<=T) return(0);
//----
int limit=Bars-counted_bars;
if(counted_bars>0) limit++;
for(i=0; i<limit; i++)
//----
i=Bars-counted_bars-1;
while(i>=0)
{
if(Close[i]-Open[i+T]>=Seuil1&&Close[i]-Open[i+T]<Seuil2) VolatilityBuffer[i]=1;
else if(Close[i]-Open[i+T]<=-Seuil1&&Close[i]-Open[i+T]>Seuil2) VolatilityBuffer[i]=-1;
else if(Close[i]-Open[i+T]>=Seuil2&&Close[i]-Open[i+T]<Seuil3) VolatilityBuffer[i]=2;
else if(Close[i]-Open[i+T]<=-Seuil2&&Close[i]-Open[i+T]>Seuil3) VolatilityBuffer[i]=-2;
else if(Close[i]-Open[i+T]>=Seuil3) VolatilityBuffer[i]=3;
else if(Close[i]-Open[i+T]<=-Seuil3) VolatilityBuffer[i]=-3;
else VolatilityBuffer[i]=0;
i--;
}
//----
return(0);
}
//+------------------------------------------------------------------+
j'ai eu l'idée de créer un indicateur de volatilité asser simple, qui donnerait sous forme d'histogramme à 4 niveaux ,une note à la volatilité :
0, trop faible
1et -1 faible
2 et -2 tradable
3 et -3 trés forte
on pourrait regler la periode et les seuils pour chaque niveau , le résultat avait l'air assez interessant (voir image) mais pas de bol dés que je me connecte mt4 plante, est ce que quelqu'un pourrait jeter un oeil à mon code?
//+------------------------------------------------------------------+
//| volatility.mq4 |
//| Copyright © 2012, fog. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net/"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Silver
#property indicator_width1 3
//---- input parameters
extern int T=4;
extern double Seuil1=0.0004;
extern double Seuil2=0.0006;
extern double Seuil3=0.0010;
//---- buffers
double VolatilityBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
IndicatorBuffers(1);
IndicatorDigits(Digits);
//---- indicator line
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,VolatilityBuffer);
//---- name for DataWindow and indicator subwindow label
short_name="volatility("+T+")";
IndicatorShortName(short_name);
SetIndexLabel(0,short_name);
//----
return(0);
}
//+------------------------------------------------------------------+
//| volatility |
//+------------------------------------------------------------------+
int start()
{
int i,counted_bars=IndicatorCounted();
//----
if(Bars<=T) return(0);
//----
int limit=Bars-counted_bars;
if(counted_bars>0) limit++;
for(i=0; i<limit; i++)
//----
i=Bars-counted_bars-1;
while(i>=0)
{
if(Close[i]-Open[i+T]>=Seuil1&&Close[i]-Open[i+T]<Seuil2) VolatilityBuffer[i]=1;
else if(Close[i]-Open[i+T]<=-Seuil1&&Close[i]-Open[i+T]>Seuil2) VolatilityBuffer[i]=-1;
else if(Close[i]-Open[i+T]>=Seuil2&&Close[i]-Open[i+T]<Seuil3) VolatilityBuffer[i]=2;
else if(Close[i]-Open[i+T]<=-Seuil2&&Close[i]-Open[i+T]>Seuil3) VolatilityBuffer[i]=-2;
else if(Close[i]-Open[i+T]>=Seuil3) VolatilityBuffer[i]=3;
else if(Close[i]-Open[i+T]<=-Seuil3) VolatilityBuffer[i]=-3;
else VolatilityBuffer[i]=0;
i--;
}
//----
return(0);
}
//+------------------------------------------------------------------+