Indicatori Elite :) - pagina 98

 

...

Doc,

2 buffer usati in tutto (quindi ne rimangono altri 6 da usare) Non so esattamente come vuoi l'isto, quindi posto questo invece (nessun isto, avvisi aggiunti ad un certo punto e non scrivo "short" e "long" nel nome) Urla se hai bisogno di aiuto con l'isto

saluti

mladen

dr.house7:
Hy mladen,

potresti dirmi se c'è qualche possibilità di avere questo indy sulle barre histo?

tutti i buffer sono occupati e non so come modificarlo ...

Per favore qualche aiuto qui

Grazie a tutti.

I migliori saluti

Doc
 

Grazie mladen!

Sei incredibile! Che codice fantastico in così poco tempo!

Troppo fantastico per me ...sono un po' confuso su come modificarlo perché è totalmente diverso dalle mie conoscenze standard

Vorrei avere delle barre isto per l'incrocio di queste due linee: linea cci ergodica con linea trigger

Cordiali saluti

Doc

File:
bars.png  17 kb
 

...

Due versioni :

"Classical histo" - prima sottofinestra

"Bars histo" -> quella che volevi - verde quando il trigger è sotto l'ICC ergodica, rosso quando il trigger è sopra l'ICC ergodica, grigio quando (se) sono uguali

saluti

mladen

dr.house7:
Grazie mladen !

Sei incredibile! Che codice fantastico in così poco tempo!

Troppo fantastico per me ...sono un po' confuso su come modificarlo perché è totalmente diverso dalle mie conoscenze standard

Vorrei avere delle barre isto per l'incrocio di queste due linee: linea cci ergodica con linea trigger

I migliori saluti

Doc
 
mladen:
Due versioni:

"Classical histo" - prima sottofinestra

"Bars histo" -> quella che volevi - verde quando il trigger è inferiore al CCI ergodico, rosso quando il trigger è superiore al CCI ergodico, grigio quando (se) sono uguali

saluti

mladen

Esattamente quello che mi serve!

Grazie mladen sei un genio!

Cordiali saluti

Doc

 

Ciao mladen,

Sono passato brevemente questo pomeriggio e devo scappare prima di salutarti.

Grazie per il nuovo indicatore e l'articolo di McGinley stesso. Lo sto ancora leggendo. Sì, anche io sono rimasto sorpreso dalla stretta somiglianza quando ho messo la tua prima versione accanto a un 9-EMA. Sì, la formula di Metastock non assomiglia alla formula di McGinley. Scusa per l'informazione sbagliata ma questo è quello che ho preso dalla rete.

Almeno ora sappiamo che l'articolo di Investopedia aveva esagerato un po'. Ma perché era davvero abbastanza sconosciuto e questo ha scatenato un po' di interesse e nel complesso è divertente.

Grazie e cordiali saluti,

jswei.

 

Scusa mladen,

potresti aiutarmi su questa parte finale?

è possibile avere (come nella foto) questi colori senza linea grigia e gialla e con le barre tutte nella stessa riga ?

I migliori saluti

Doc

File:
 

...

Come questo?

saluti

mladen

dr.house7:
Scusa mladen,

potresti aiutarmi su questa parte finale ?

è possibile avere (come nella foto) questi colori senza linea grigia e gialla e con le barre tutte nella stessa riga ?

I migliori saluti

Doc
 
mladen:
Come questo?

saluti

mladen

esattamente !

Molte grazie mladen... buoni pips a te

Saluti

Doc

 

Sto cercando di fare (ulteriori) modifiche all'indicatore bollinger %b postato da linuxuser. Sto cercando di farlo comportare in modo simile allo stocastico, cioè avere una linea di segnale, così come essere in grado di visualizzare più periodi su un grafico. Sono riuscito a fare questo con l'aiuto di linuxuser prima, quindi al momento l'ho impostato per visualizzare due o tre periodi sulla stessa finestra.

Ora sto cercando di farlo in modo da poter usare valori frazionari per la deviazione standard nei calcoli. Ho ragione a pensare che non posso usare la funzione standard iBands per questo? Ho provato ad usare il codice fornito nell'indicatore standard Bands ma non ho avuto molto successo. Qualcuno potrebbe aiutarmi per favore?

Spero anche di essere in grado di far visualizzare all'indicatore i calcoli di altri timeframe, ma un passo alla volta, credo. Ho capito che questo potrebbe essere un po' più difficile di quanto pensassi all'inizio.

Grazie in anticipo!

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

//| 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()

*/
 

...

whitebloodcell,

Hai ragione. L'indicatore di bande di Bollinger incorporato funziona solo per valori interi di moltiplicatore di deviazioni standard. Qui ce n'è uno semplice che ti permette di usare moltiplicatori frazionari e deviazioni multiple. Potrebbe essere utile.

Per quanto riguarda il più difficile: non rinunciare a codificarlo. Quando avrai finito quello che volevi codificare, vedrai

saluti

mladen

whitebloodcell:
Sto cercando di fare (ulteriori) modifiche all'indicatore bollinger %b postato da linuxuser. Sto cercando di farlo comportare in modo simile allo stocastico, cioè avere una linea di segnale, così come essere in grado di visualizzare più periodi su un grafico. Sono riuscito a fare questo con l'aiuto di linuxuser prima, così l'ho impostato per visualizzare due o tre periodi sulla stessa finestra al momento.

Ora sto cercando di farlo in modo da poter usare valori frazionari per la deviazione standard nei calcoli. Ho ragione a pensare che non posso usare la funzione standard iBands per questo? Ho provato ad usare il codice fornito nell'indicatore standard Bands ma non ho avuto molto successo. Qualcuno potrebbe aiutarmi per favore?

Spero anche di essere in grado di far visualizzare all'indicatore i calcoli di altri timeframe, ma un passo alla volta, credo. Ho capito che questo potrebbe essere un po' più difficile di quanto pensassi all'inizio.

Grazie in anticipo!

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

//| 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()

*/