Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
...
Док,
Всего использовано 2 буфера (осталось еще 6) Я не знаю, как именно вам нужен histo, поэтому вместо него выкладываю этот (без histo, алерты добавлены в какой-то момент, и я не выписываю "short" и "long" в названии) Кричите, если вам нужна помощь с histo.
с уважением
mladen
Hy mladen,
подскажите пожалуйста, есть ли возможность поставить этот инди на бары histo?
Все буферы заняты, и я не знаю, как его модифицировать...
Пожалуйста, помогите.
Спасибо всем.
С наилучшими пожеланиями
ДокСпасибо, Младен!
Вы удивительны! Какой фантастический код за такое короткое время!
Слишком фантастический для меня ... я немного запутался, как его модифицировать, потому что он полностью отличается от моих стандартных знаний.
Я хотел бы иметь несколько гисто-баров для пересечения этих двух линий: эргодической линии cci и линии триггера.
С наилучшими пожеланиями
Док
...
Две версии :
"Classical histo" - первое подокно.
"Bars histo" -> тот, который вы хотели - зеленый, когда триггер ниже эргодического CCI, красный, когда триггер выше эргодического CCI, серый, когда (если) они равны.
с уважением
mladen
Спасибо, Младен!
Вы удивительны! Какой фантастический код за такое короткое время!
Слишком фантастический для меня ... я немного запутался, как его модифицировать, потому что он полностью отличается от моих стандартных знаний.
Я хотел бы иметь несколько гисто-баров для пересечения этих двух линий: эргодической линии cci и линии триггера.
С наилучшими пожеланиями
ДокДве версии:
"Classical histo" - первое подокно
"Bars histo" -> тот, который вы хотели - зеленый, когда триггер ниже эргодического CCI, красный, когда триггер выше эргодического CCI, серый, когда (если) они равны.
с уважением,
mladenИменно то, что мне нужно!
Спасибо mladen, вы гений!
С наилучшими пожеланиями
Doc
Привет, Младен,
Заглянул ненадолго сегодня днем и вынужден спешить, прежде чем поздороваться.
Спасибо за новый индикатор и статью от самого МакГинли. Все еще читаю ее. Да, я тоже был удивлен близким сходством, когда впервые поставил вашу 1-ю версию рядом с 9-EMA. Да, формула Метастока не похожа на формулу МакГинли. Извините за неверную информацию, но это то, что я почерпнул из сети.
По крайней мере, теперь мы знаем, что статья в Investopedia была немного преувеличена. Но поскольку это действительно было довольно неизвестно, это вызвало некоторый интерес, и в целом это весело.
Спасибо и наилучшие пожелания,
jswei.
Простите, Младен,
не могли бы вы помочь мне с последней частью?
возможно ли иметь (как на картинке) эти цвета без серой и желтой линии и с полосами в одном ряду?
С наилучшими пожеланиями
Doc
...
Вот так?
пожелания
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
Я пытаюсь внести (дальнейшие) изменения в индикатор 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()
*/