Indicateurs d'élite :) - page 98

 

...

Doc,

2 tampons utilisés en tout (il en reste donc 6 à utiliser) Je ne sais pas exactement comment vous voulez l'histo, donc je poste celui-ci à la place (pas d'histo, des alertes ajoutées à un moment donné et je n'écris pas le "court" et le "long" dans le nom) Appelez-moi si vous avez besoin d'aide avec l'histo.

Salutations

mladen

dr.house7:
Hy mladen,

pourriez-vous me dire s'il y a une chance d'avoir cet indy sur les barres histo ?

tous les buffers sont occupés et je ne sais pas comment le modifier ...

S'il vous plaît un peu d'aide ici

Merci à tous.

Meilleures salutations

Doc
 

Merci mladen !

Tu es incroyable ! Quel code fantastique en si peu de temps !

Trop fantastique pour moi ... je suis un peu confus sur la façon de le modifier car il est totalement différent de mes connaissances standard.

J'aimerais avoir des barres d'histo pour le croisement de ces deux lignes : ligne de cci ergodique et ligne de trigger.

Cordialement

Doc

Dossiers :
bars.png  17 kb
 

...

Deux versions :

"Classical histo" - première sous-fenêtre.

"Bars histo" -> celle que vous vouliez - vert quand le trigger est en dessous du CCI ergodique, rouge quand le trigger est au dessus du CCI ergodique, gris quand (si) ils sont égaux.

salutations

mladen

dr.house7:
Merci mladen !

Vous êtes incroyable ! Quel code fantastique en si peu de temps !

Trop fantastique pour moi ... Je suis un peu confus sur la façon de le modifier car il est totalement différent de mes connaissances standard.

J'aimerais avoir des barres d'histo pour le croisement de ces deux lignes : ligne de cci ergodique et ligne de trigger.

Merci.

Doc
 
mladen:
Deux versions :

"Classical histo" - première sous-fenêtre

"Bars histo" -> celui que vous vouliez - vert quand le déclencheur est en dessous du CCI ergodique, rouge quand le déclencheur est au-dessus du CCI ergodique, gris quand (si) ils sont égaux.

salutations

mladen

Exactement ce dont j'ai besoin !

Merci mladen tu es un génie !

Meilleures salutations

Doc

 

Bonjour mladen,

Je suis passé brièvement cet après-midi et je dois me dépêcher de partir avant de te saluer.

Merci pour le nouvel indicateur et l'article de McGinley lui-même. Je continue à le lire. Oui, j'ai aussi été surpris de la ressemblance quand j'ai mis votre première version à côté d'un 9-EMA. Oui, la formule Metastock ne ressemble pas à la formule de McGinley. Désolé pour la mauvaise information mais c'est ce que j'ai trouvé sur le net.

Au moins maintenant nous savons que l'article d'Investopedia l'avait un peu exagéré. Mais parce que c'était vraiment assez méconnu et cela a suscité un certain intérêt et dans l'ensemble c'est amusant.

Merci et meilleures salutations,

jswei.

 

Désolé mladen,

pourriez-vous m'aider sur cette dernière partie ?

Est-il possible d'avoir (comme dans l'image) ces couleurs sans les lignes grises et jaunes et avec des barres toutes sur la même ligne ?

Cordialement

Doc

Dossiers :
 

...

Comme ceci ?

Salutations

mladen

dr.house7:
Désolé mladen,

Pourriez-vous m'aider sur cette dernière partie ?

Est-il possible d'avoir (comme dans l'image) ces couleurs sans les lignes grises et jaunes et avec des barres toutes dans la même ligne ?

Merci.

Doc
 
mladen:
Comme ceci ?

salutations

mladen

exactement !

Merci beaucoup mladen...bons pips à vous

Salutations

Doc

 

J'essaie d'apporter des modifications (supplémentaires) à l'indicateur bollinger %b posté par linuxuser. J'essaie de le faire se comporter d'une manière similaire aux stochastiques, c'est-à-dire avoir une ligne de signal, ainsi que d'être capable d'afficher plusieurs périodes sur un graphique. J'ai réussi à le faire avec l'aide de linuxuser auparavant, donc il est configuré pour afficher deux ou trois périodes sur la même fenêtre pour le moment.

J'essaie maintenant de faire en sorte que je puisse utiliser des valeurs fractionnaires pour l'écart type dans les calculs. Ai-je raison de penser que je ne peux pas utiliser la fonction standard iBands pour cela ? J'ai essayé d'utiliser le code fourni dans l'indicateur standard Bands mais je n'ai pas eu beaucoup de succès. Quelqu'un pourrait-il m'aider ?

J'espère également pouvoir faire en sorte que l'indicateur affiche des calculs provenant d'autres horizons temporels, mais une étape à la fois, je suppose. Je me suis rendu compte que cela pourrait être un peu plus difficile que je ne le pensais au départ.

Merci d'avance !

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

//| Bollinger %b - Multi.mq4 |

//| based on Bollinger Bands %b.mq4 |

//| Original indicator by Alejandro Galindo |

//| Modified and Corrected by Linuxser for forex TSD |

//| Further modifications made by whitebloodcell |

//|

//| John Bollinger original formula is: |

//| (Last - Lower BB)/(Upper BB - Lower BB) |

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

#property copyright ""

#property link ""

#property indicator_separate_window

#property indicator_buffers 6

#property indicator_color1 LightSalmon

#property indicator_color2 LightSalmon

#property indicator_color3 SkyBlue

#property indicator_color4 SkyBlue

#property indicator_color5 Green

#property indicator_color6 Green

//---- input parameters

extern bool ShowBand1 = TRUE;

extern int Timeframe_1 = 15;

extern int BBPeriod_1=5;

extern double StdDeviation_1=1.9;

extern int MainLineMAPeriod_1=1;

extern int MainLineMAMethod_1=1;

extern int SignalMAPeriod_1=2;//corresponds to %D - the signal line

extern int SignalMAMethod_1=1;

extern bool ShowBand2 = TRUE;

extern int Timeframe_2 = 15;

extern int BBPeriod_2=10;

extern double StdDeviation_2=2;

extern int MainLineMAPeriod_2=2;

extern int MainLineMAMethod_2=1;

extern int SignalMAPeriod_2=3;

extern int SignalMAMethod_2=1;

extern bool ShowBand3 = TRUE;

extern int Timeframe_3 = 15;

extern int BBPeriod_3=20;

extern double StdDeviation_3=2.0;

extern int MainLineMAPeriod_3=2;

extern int MainLineMAMethod_3=1;

extern int SignalMAPeriod_3=3;

extern int SignalMAMethod_3=1;

extern int AppliedPrice=0;

extern string s2 = "0=SMA,1=EMA,2=Smoothed,4=LWMA";

extern string s1 = "0=Close,1=Open,2=High,3=Low,4=Median,5=Typical,6=Weighted";

//---- buffers

double BLG_Buffer_1[];

double MainLineBuffer_1[];

double SignalBuffer_1[];

double BLG_Buffer_2[];

double MainLineBuffer_2[];

double SignalBuffer_2[];

double BLG_Buffer_3[];

double MainLineBuffer_3[];

double SignalBuffer_3[];

//#include

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

//| Custom indicator initialization function |

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

int init() {

string short_name;

SetIndexStyle(0,DRAW_LINE,EMPTY,2);

SetIndexBuffer(0,MainLineBuffer_1);

SetIndexStyle(1,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(1,SignalBuffer_1);

SetIndexStyle(2,DRAW_LINE,EMPTY,2);

SetIndexBuffer(2,MainLineBuffer_2);

SetIndexStyle(3,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(3,SignalBuffer_2);

SetIndexStyle(4,DRAW_LINE,EMPTY,2);

SetIndexBuffer(4,MainLineBuffer_3);

SetIndexStyle(5,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(5,SignalBuffer_3);

//SetLevelValue(1,10);

SetLevelValue(0,0);

SetLevelValue(1,20);

SetLevelValue(2,40);

SetLevelValue(3,60);

SetLevelValue(4,80);

SetLevelValue(5,100);

SetLevelStyle(STYLE_DOT,1,DimGray);

SetIndexDrawBegin(0,BBPeriod_1);

SetIndexDrawBegin(1,BBPeriod_1+SignalMAPeriod_1);

SetIndexDrawBegin(2,BBPeriod_2);

SetIndexDrawBegin(3,BBPeriod_2+SignalMAPeriod_2);

SetIndexDrawBegin(4,BBPeriod_3);

SetIndexDrawBegin(5,BBPeriod_3+SignalMAPeriod_3);

//name for DataWindow and indicator subwindow label

short_name="Bollinger Percent B (%b)("+BBPeriod_1+","+MainLineMAPeriod_1+") ("+BBPeriod_2+","+MainLineMAPeriod_2+") ("+BBPeriod_3+","+MainLineMAPeriod_3+")";

IndicatorShortName(short_name);

return(0);

}

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

//| Momentum |

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

int start() {

if(ShowBand1==TRUE) {

if(Bars<=BBPeriod_1) return(0);

MainFunction(BLG_Buffer_1, MainLineBuffer_1, SignalBuffer_1, Timeframe_1, BBPeriod_1, StdDeviation_1,

AppliedPrice, MainLineMAPeriod_1, MainLineMAMethod_1, SignalMAPeriod_1, SignalMAMethod_1);

}

if(ShowBand2==TRUE) {

if(Bars<=BBPeriod_2) return(0);

MainFunction(BLG_Buffer_2, MainLineBuffer_2, SignalBuffer_2, Timeframe_2, BBPeriod_2, StdDeviation_2,

AppliedPrice, MainLineMAPeriod_2, MainLineMAMethod_2, SignalMAPeriod_2, SignalMAMethod_2);

}

if(ShowBand3==TRUE) {

if(Bars<=BBPeriod_3) return(0);

MainFunction(BLG_Buffer_3, MainLineBuffer_3, SignalBuffer_3, Timeframe_3, BBPeriod_3, StdDeviation_3,

AppliedPrice, MainLineMAPeriod_3, MainLineMAMethod_3, SignalMAPeriod_3, SignalMAMethod_3);

}

return(0);

}

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

void MainFunction(double &BLGBuffer[], double &MainLineBuffer[], double &SignalBuffer[], int timefame, int BBPeriod, double StdDeviation,

int AppliedPrice, int MainLineMAPeriod, int MainLineMAMethod, int SignalMAPeriod, int SignalMAMethod) {

int i=0,limit=0;

double PriceArray[];

if (ArrayRange(BLGBuffer,0) != Bars) {

ArrayResize(BLGBuffer,Bars);

ArraySetAsSeries(BLGBuffer, TRUE);

}

//number of bars already processed by indicator

int counted_bars=IndicatorCounted();

//load empty values into array until enough elements for calculation

if(counted_bars<1) {

for(i=1;i<=BBPeriod;i++) {

BLGBuffer=EMPTY_VALUE;

}//end for(i=1;i<=BandsPeriod;i++)

}//end if(counted_bars<1)

if(counted_bars>0) counted_bars--;

limit = MathMin(Bars-counted_bars,Bars-BBPeriod);

for(i=limit;i>=0;i--) {

//(Last - Lower BB)/(Upper BB - Lower BB)

BLGBuffer=((Close - iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_LOWER,i))/

(iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_UPPER,i)-iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_LOWER,i)))*100;

}//end for(i=limit;i>=0;i--)

//smooth the signal by applying a moving average

for (i = limit; i >= 0; i--) MainLineBuffer = iMAOnArray(BLGBuffer, 0, MainLineMAPeriod, 0, MainLineMAMethod, i);

//create a Signal line (akin to stochastics) by further smoothing the (already smoothed) signal line.

for (i = limit; i >= 0; i--) SignalBuffer = iMAOnArray(MainLineBuffer, 0, SignalMAPeriod, 0, SignalMAMethod, i);

}//end MainFunction()

//--------------------------------------------------------------------------------

//Function: BandCalculation - Not yet working

//Purpose: Calculate the value of either the upper or lower bollinger band depen-

// on input variables.

//Inputs: Mode (int) - Calculate either upper or lower band

// limit (int) - Number of bars to calculate

// timeframe (int)

// BandsPeriod (int)

// MAMethod (int)

// BandsDeviation (double)

// AppliedPrice (int)

//Returns:

//--------------------------------------------------------------------------------

/*

void BandCalculation(int Mode, int limit, int timeframe, int BandsPeriod, int MAMethod, double BandsDeviation, int AppliedPrice) {

int i,k;

double deviation;

double sum,oldval,newres;

//if(counted_bars>0) limit++;

for(i=0; i<limit; i++) {

MovingBuffer=iMA(NULL,0,BandsPeriod,BandsShift,MAMethod,AppliedPrice,i);

}//end for(i=0; i<limit; i++)

i=limit;

//i=Bars-BandsPeriod+1;

//if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;

while(i>=0) {

sum=0.0;

k=i+BandsPeriod-1;

oldval=MovingBuffer;

while(k>=i) {

newres=Close[k]-oldval;

sum+=newres*newres;

k--;

}//end while(k>=i)

//calculate deviation

deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);

//Upper/Lower bands are equal to the moving average +/- deviation.

if(Mode==0) {

UpperBuffer=oldval+deviation;

}

else {

LowerBuffer=oldval-deviation;

}

i--;

}//end while(i>=0)

}//end start()

*/
Dossiers :
 

...

whitebloodcell,

Vous avez raison. L'indicateur de bandes de Bollinger intégré ne fonctionne que pour des valeurs entières du multiplicateur d'écarts types. Voici un indicateur simple qui vous permet d'utiliser un multiplicateur fractionnel et des écarts multiples. Il pourrait être utile.

Pour ce qui est de la difficulté : n'abandonnez pas le codage. Lorsque vous aurez terminé ce que vous vouliez coder, vous verrez...

Salutations

mladen

whitebloodcell:
J'essaie d'apporter des modifications (supplémentaires) à l'indicateur bollinger %b posté par linuxuser. J'essaie de le faire se comporter d'une manière similaire aux stochastiques, c'est-à-dire avoir une ligne de signal, ainsi que d'être capable d'afficher plusieurs périodes sur un graphique. J'ai réussi à le faire avec l'aide de linuxuser auparavant, donc il est configuré pour afficher soit deux ou trois périodes sur la même fenêtre pour le moment.

J'essaie maintenant de faire en sorte que je puisse utiliser des valeurs fractionnaires pour l'écart-type dans les calculs. Ai-je raison de penser que je ne peux pas utiliser la fonction standard iBands pour cela ? J'ai essayé d'utiliser le code fourni dans l'indicateur standard Bands mais je n'ai pas eu beaucoup de succès. Quelqu'un pourrait-il m'aider ?

J'espère également pouvoir faire en sorte que l'indicateur affiche des calculs provenant d'autres horizons temporels, mais une étape à la fois, je suppose. Je me suis rendu compte que cela pourrait être un peu plus difficile que je ne le pensais au départ.

Merci d'avance !

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

//| Bollinger %b - Multi.mq4 |

//| based on Bollinger Bands %b.mq4 |

//| Original indicator by Alejandro Galindo |

//| Modified and Corrected by Linuxser for forex TSD |

//| Further modifications made by whitebloodcell |

//|

//| John Bollinger original formula is: |

//| (Last - Lower BB)/(Upper BB - Lower BB) |

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

#property copyright ""

#property link ""

#property indicator_separate_window

#property indicator_buffers 6

#property indicator_color1 LightSalmon

#property indicator_color2 LightSalmon

#property indicator_color3 SkyBlue

#property indicator_color4 SkyBlue

#property indicator_color5 Green

#property indicator_color6 Green

//---- input parameters

extern bool ShowBand1 = TRUE;

extern int Timeframe_1 = 15;

extern int BBPeriod_1=5;

extern double StdDeviation_1=1.9;

extern int MainLineMAPeriod_1=1;

extern int MainLineMAMethod_1=1;

extern int SignalMAPeriod_1=2;//corresponds to %D - the signal line

extern int SignalMAMethod_1=1;

extern bool ShowBand2 = TRUE;

extern int Timeframe_2 = 15;

extern int BBPeriod_2=10;

extern double StdDeviation_2=2;

extern int MainLineMAPeriod_2=2;

extern int MainLineMAMethod_2=1;

extern int SignalMAPeriod_2=3;

extern int SignalMAMethod_2=1;

extern bool ShowBand3 = TRUE;

extern int Timeframe_3 = 15;

extern int BBPeriod_3=20;

extern double StdDeviation_3=2.0;

extern int MainLineMAPeriod_3=2;

extern int MainLineMAMethod_3=1;

extern int SignalMAPeriod_3=3;

extern int SignalMAMethod_3=1;

extern int AppliedPrice=0;

extern string s2 = "0=SMA,1=EMA,2=Smoothed,4=LWMA";

extern string s1 = "0=Close,1=Open,2=High,3=Low,4=Median,5=Typical,6=Weighted";

//---- buffers

double BLG_Buffer_1[];

double MainLineBuffer_1[];

double SignalBuffer_1[];

double BLG_Buffer_2[];

double MainLineBuffer_2[];

double SignalBuffer_2[];

double BLG_Buffer_3[];

double MainLineBuffer_3[];

double SignalBuffer_3[];

//#include

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

//| Custom indicator initialization function |

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

int init() {

string short_name;

SetIndexStyle(0,DRAW_LINE,EMPTY,2);

SetIndexBuffer(0,MainLineBuffer_1);

SetIndexStyle(1,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(1,SignalBuffer_1);

SetIndexStyle(2,DRAW_LINE,EMPTY,2);

SetIndexBuffer(2,MainLineBuffer_2);

SetIndexStyle(3,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(3,SignalBuffer_2);

SetIndexStyle(4,DRAW_LINE,EMPTY,2);

SetIndexBuffer(4,MainLineBuffer_3);

SetIndexStyle(5,DRAW_LINE,STYLE_DOT);

SetIndexBuffer(5,SignalBuffer_3);

//SetLevelValue(1,10);

SetLevelValue(0,0);

SetLevelValue(1,20);

SetLevelValue(2,40);

SetLevelValue(3,60);

SetLevelValue(4,80);

SetLevelValue(5,100);

SetLevelStyle(STYLE_DOT,1,DimGray);

SetIndexDrawBegin(0,BBPeriod_1);

SetIndexDrawBegin(1,BBPeriod_1+SignalMAPeriod_1);

SetIndexDrawBegin(2,BBPeriod_2);

SetIndexDrawBegin(3,BBPeriod_2+SignalMAPeriod_2);

SetIndexDrawBegin(4,BBPeriod_3);

SetIndexDrawBegin(5,BBPeriod_3+SignalMAPeriod_3);

//name for DataWindow and indicator subwindow label

short_name="Bollinger Percent B (%b)("+BBPeriod_1+","+MainLineMAPeriod_1+") ("+BBPeriod_2+","+MainLineMAPeriod_2+") ("+BBPeriod_3+","+MainLineMAPeriod_3+")";

IndicatorShortName(short_name);

return(0);

}

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

//| Momentum |

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

int start() {

if(ShowBand1==TRUE) {

if(Bars<=BBPeriod_1) return(0);

MainFunction(BLG_Buffer_1, MainLineBuffer_1, SignalBuffer_1, Timeframe_1, BBPeriod_1, StdDeviation_1,

AppliedPrice, MainLineMAPeriod_1, MainLineMAMethod_1, SignalMAPeriod_1, SignalMAMethod_1);

}

if(ShowBand2==TRUE) {

if(Bars<=BBPeriod_2) return(0);

MainFunction(BLG_Buffer_2, MainLineBuffer_2, SignalBuffer_2, Timeframe_2, BBPeriod_2, StdDeviation_2,

AppliedPrice, MainLineMAPeriod_2, MainLineMAMethod_2, SignalMAPeriod_2, SignalMAMethod_2);

}

if(ShowBand3==TRUE) {

if(Bars<=BBPeriod_3) return(0);

MainFunction(BLG_Buffer_3, MainLineBuffer_3, SignalBuffer_3, Timeframe_3, BBPeriod_3, StdDeviation_3,

AppliedPrice, MainLineMAPeriod_3, MainLineMAMethod_3, SignalMAPeriod_3, SignalMAMethod_3);

}

return(0);

}

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

void MainFunction(double &BLGBuffer[], double &MainLineBuffer[], double &SignalBuffer[], int timefame, int BBPeriod, double StdDeviation,

int AppliedPrice, int MainLineMAPeriod, int MainLineMAMethod, int SignalMAPeriod, int SignalMAMethod) {

int i=0,limit=0;

double PriceArray[];

if (ArrayRange(BLGBuffer,0) != Bars) {

ArrayResize(BLGBuffer,Bars);

ArraySetAsSeries(BLGBuffer, TRUE);

}

//number of bars already processed by indicator

int counted_bars=IndicatorCounted();

//load empty values into array until enough elements for calculation

if(counted_bars<1) {

for(i=1;i<=BBPeriod;i++) {

BLGBuffer=EMPTY_VALUE;

}//end for(i=1;i<=BandsPeriod;i++)

}//end if(counted_bars<1)

if(counted_bars>0) counted_bars--;

limit = MathMin(Bars-counted_bars,Bars-BBPeriod);

for(i=limit;i>=0;i--) {

//(Last - Lower BB)/(Upper BB - Lower BB)

BLGBuffer=((Close - iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_LOWER,i))/

(iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_UPPER,i)-iBands(NULL,timefame,BBPeriod,StdDeviation,0,AppliedPrice,MODE_LOWER,i)))*100;

}//end for(i=limit;i>=0;i--)

//smooth the signal by applying a moving average

for (i = limit; i >= 0; i--) MainLineBuffer = iMAOnArray(BLGBuffer, 0, MainLineMAPeriod, 0, MainLineMAMethod, i);

//create a Signal line (akin to stochastics) by further smoothing the (already smoothed) signal line.

for (i = limit; i >= 0; i--) SignalBuffer = iMAOnArray(MainLineBuffer, 0, SignalMAPeriod, 0, SignalMAMethod, i);

}//end MainFunction()

//--------------------------------------------------------------------------------

//Function: BandCalculation - Not yet working

//Purpose: Calculate the value of either the upper or lower bollinger band depen-

// on input variables.

//Inputs: Mode (int) - Calculate either upper or lower band

// limit (int) - Number of bars to calculate

// timeframe (int)

// BandsPeriod (int)

// MAMethod (int)

// BandsDeviation (double)

// AppliedPrice (int)

//Returns:

//--------------------------------------------------------------------------------

/*

void BandCalculation(int Mode, int limit, int timeframe, int BandsPeriod, int MAMethod, double BandsDeviation, int AppliedPrice) {

int i,k;

double deviation;

double sum,oldval,newres;

//if(counted_bars>0) limit++;

for(i=0; i<limit; i++) {

MovingBuffer=iMA(NULL,0,BandsPeriod,BandsShift,MAMethod,AppliedPrice,i);

}//end for(i=0; i<limit; i++)

i=limit;

//i=Bars-BandsPeriod+1;

//if(counted_bars>BandsPeriod-1) i=Bars-counted_bars-1;

while(i>=0) {

sum=0.0;

k=i+BandsPeriod-1;

oldval=MovingBuffer;

while(k>=i) {

newres=Close[k]-oldval;

sum+=newres*newres;

k--;

}//end while(k>=i)

//calculate deviation

deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);

//Upper/Lower bands are equal to the moving average +/- deviation.

if(Mode==0) {

UpperBuffer=oldval+deviation;

}

else {

LowerBuffer=oldval-deviation;

}

i--;

}//end while(i>=0)

}//end start()

*/