Элитные показатели :) - страница 98

 

...

Док,

Всего использовано 2 буфера (осталось еще 6) Я не знаю, как именно вам нужен histo, поэтому вместо него выкладываю этот (без histo, алерты добавлены в какой-то момент, и я не выписываю "short" и "long" в названии) Кричите, если вам нужна помощь с histo.

с уважением

mladen

dr.house7:
Hy mladen,

подскажите пожалуйста, есть ли возможность поставить этот инди на бары histo?

Все буферы заняты, и я не знаю, как его модифицировать...

Пожалуйста, помогите.

Спасибо всем.

С наилучшими пожеланиями

Док
 

Спасибо, Младен!

Вы удивительны! Какой фантастический код за такое короткое время!

Слишком фантастический для меня ... я немного запутался, как его модифицировать, потому что он полностью отличается от моих стандартных знаний.

Я хотел бы иметь несколько гисто-баров для пересечения этих двух линий: эргодической линии cci и линии триггера.

С наилучшими пожеланиями

Док

Файлы:
bars.png  17 kb
 

...

Две версии :

"Classical histo" - первое подокно.

"Bars histo" -> тот, который вы хотели - зеленый, когда триггер ниже эргодического CCI, красный, когда триггер выше эргодического CCI, серый, когда (если) они равны.

с уважением

mladen

dr.house7:
Спасибо, Младен!

Вы удивительны! Какой фантастический код за такое короткое время!

Слишком фантастический для меня ... я немного запутался, как его модифицировать, потому что он полностью отличается от моих стандартных знаний.

Я хотел бы иметь несколько гисто-баров для пересечения этих двух линий: эргодической линии cci и линии триггера.

С наилучшими пожеланиями

Док
 
mladen:
Две версии:

"Classical histo" - первое подокно

"Bars histo" -> тот, который вы хотели - зеленый, когда триггер ниже эргодического CCI, красный, когда триггер выше эргодического CCI, серый, когда (если) они равны.

с уважением,

mladen

Именно то, что мне нужно!

Спасибо mladen, вы гений!

С наилучшими пожеланиями

Doc

 

Привет, Младен,

Заглянул ненадолго сегодня днем и вынужден спешить, прежде чем поздороваться.

Спасибо за новый индикатор и статью от самого МакГинли. Все еще читаю ее. Да, я тоже был удивлен близким сходством, когда впервые поставил вашу 1-ю версию рядом с 9-EMA. Да, формула Метастока не похожа на формулу МакГинли. Извините за неверную информацию, но это то, что я почерпнул из сети.

По крайней мере, теперь мы знаем, что статья в Investopedia была немного преувеличена. Но поскольку это действительно было довольно неизвестно, это вызвало некоторый интерес, и в целом это весело.

Спасибо и наилучшие пожелания,

jswei.

 

Простите, Младен,

не могли бы вы помочь мне с последней частью?

возможно ли иметь (как на картинке) эти цвета без серой и желтой линии и с полосами в одном ряду?

С наилучшими пожеланиями

Doc

Файлы:
 

...

Вот так?

пожелания

mladen

dr.house7:
Извините, mladen,

Не могли бы вы помочь мне с последней частью?

возможно ли иметь (как на картинке) эти цвета без серой и желтой линии и с полосами в одном ряду?

С наилучшими пожеланиями

Док
 
mladen:
Как это?

с уважением

mladen

точно!

Большое спасибо, Младен... хороших вам пипсов.

С уважением

Док

 

Я пытаюсь внести (дальнейшие) изменения в индикатор bollinger %b, размещенный linuxuser. Я пытаюсь заставить его вести себя подобно стохастику, т.е. иметь сигнальную линию, а также отображать несколько периодов на одном графике. Мне уже удалось сделать это с помощью linuxuser, поэтому в данный момент он настроен на отображение двух или трех периодов в одном окне.

Теперь я пытаюсь сделать так, чтобы я мог использовать дробные значения для стандартного отклонения в расчетах. Правильно ли я понимаю, что не могу использовать для этого стандартную функцию iBands? Я пытался использовать код, поставляемый в стандартном индикаторе Bands, но не добился успеха. Не мог бы кто-нибудь помочь мне, пожалуйста?

Я также надеюсь, что смогу сделать так, чтобы индикатор отображал расчеты с других таймфреймов, но, полагаю, по одному шагу за раз. Я понял, что это может быть немного сложнее, чем я думал вначале.

Заранее спасибо!

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

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

*/
Файлы:
 

...

белобрысая клетка,

Вы правы. Встроенный индикатор полос Боллинджера работает только для целых значений множителя стандартных отклонений. Вот простой вариант, который позволяет использовать дробный множитель и множественные отклонения. Может быть полезно.

Что касается более сложного: просто не отказывайтесь от кодирования. Когда вы закончите то, что хотели закодировать, вы увидите.

с уважением,

mladen

whitebloodcell:
Я пытаюсь внести (дальнейшие) изменения в индикатор Bollinger %b, размещенный linuxuser. Я пытаюсь сделать так, чтобы он вел себя подобно стохастику, т.е. имел сигнальную линию, а также мог отображать несколько периодов на одном графике. Мне уже удалось сделать это с помощью linuxuser, поэтому на данный момент он настроен на отображение двух или трех периодов в одном окне.

Теперь я пытаюсь сделать так, чтобы я мог использовать дробные значения для стандартного отклонения в расчетах. Правильно ли я понимаю, что я не могу использовать для этого стандартную функцию iBands? Я пытался использовать код, поставляемый в стандартном индикаторе Bands, но не добился успеха. Не мог бы кто-нибудь помочь мне, пожалуйста?

Я также надеюсь, что смогу сделать так, чтобы индикатор отображал расчеты с других таймфреймов, но, полагаю, по одному шагу за раз. Я понял, что это может быть немного сложнее, чем я думал вначале.

Заранее спасибо!

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

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

*/