精英指标 :) - 页 98 1...919293949596979899100101102103104105...1108 新评论 Mladen Rakic 2009.11.10 11:09 #971 ... 文件。 总共用了2个缓冲区(所以还有6个要用) 我不知道你到底想要怎样的histo,所以贴出这个来代替(没有histo,警报是在某个时候添加的,我没有写出名称中的 "短 "和 "长") 如果你需要histo的帮助,请告诉我 问候 毫升登 dr.house7: Hy mladen, 你能告诉我是否有机会让这个indy在histo条上运行?所有的缓冲区都很忙,我不知道如何修改它......。请帮助我。谢谢大家。最好的问候 医师 附加的文件: fx_snippers_ergodic_cci_trigger__alert.mq4 4 kb ergodic.gif 16 kb drhouse7 2009.11.10 11:29 #972 谢谢mladen ! 你真了不起!在这么短的时间内写出了这么棒的代码! 对我来说太神奇了......我对如何修改它有点迷惑,因为它与我的标准知识完全不同。 我希望能有一些这两条线交叉的histo bars: ergodic cci线和触发线。 最好的问候 医生 附加的文件: bars.png 17 kb Mladen Rakic 2009.11.10 11:52 #973 ... 两个版本。 "Classical histo" - 第一个子窗口 "Bars histo"->你想要的版本--当触发器低于遍历CCI时为绿色,当触发器高于遍历CCI时为红色,当(如果)它们相等时为灰色。 问候 mladen dr.house7: 谢谢 mladen ! 你真了不起!在这么短的时间内写出了这么棒的代码!对我来说太不可思议了......我也是如此。 对我来说太神奇了......我对如何修改它有点迷惑,因为它与我的标准知识完全不同。 我希望能有一些这两条线交叉的histo bars: ergodic cci线和触发线。 最好的问候 医生 附加的文件: ergodic_histo.gif 21 kb fx_snippers_ergodic_cci_trigger_histo.mq4 6 kb fx_snippers_ergodic_cci_trigger_histo_bars.mq4 5 kb drhouse7 2009.11.10 13:48 #974 mladen: 两个版本。"Classical histo" - 第一个子窗口 "Bars histo"->你想要的那个--当触发器低于侵蚀性CCI时为绿色,当触发器高于侵蚀性CCI时为红色,当(如果)它们相等时为灰色。 问候 mladen 这正是我所需要的! 谢谢mladen你是个天才! 最好的问候 文档 jswei 2009.11.10 13:53 #975 嗨,mladen。 今天下午短暂停留了一下,在打招呼之前不得不匆匆离开。 谢谢你的新指标和麦金利本人的文章。 我还在读它。 是的,当我第一次把你的第一个版本放在9-EMA旁边时,我也对这种相似性感到惊讶。是的,Metastock的公式并不像McGinley的公式。 对不起,我的信息有误,但这是我从网上得到的信息。 至少现在我们知道Investopedia的文章有点夸大其词了。 但因为它确实很不为人知,这也引发了一些兴趣,总体来说,它很有趣。 谢谢&最好的问候。 jswei. drhouse7 2009.11.10 14:18 #976 对不起 mladen。 你能在最后这部分帮我吗? 是否有可能(像图片中那样)在这些颜色中没有灰色和黄色的线条,并且在同一行中都有条形图案? 最好的问候 医生 附加的文件: fx_histo_bars.png 35 kb Mladen Rakic 2009.11.10 15:13 #977 ... 像这样吗? 问候 mladen dr.house7: 对不起,mladen。你能帮助我完成这最后一部分吗? 是否有可能(像图片中那样)在这些颜色中没有灰色和黄色的线条,并且在同一行中都有条形图案? 最好的问候 医生 附加的文件: fx_snippers_ergodic_cci_trigger_histo_bars_2.mq4 5 kb ergo_bars_2.gif 15 kb drhouse7 2009.11.10 15:56 #978 mladen: 喜欢这个吗? 问候 mladen 正是如此! 非常感谢mladen......祝你有好的收益。 疑问 医生 whitebloodcell 2009.11.14 10:42 #979 我正试图对linuxuser发布的布林%b指标进行(进一步)修改。我想让它的行为与随机指标类似,即有一条信号线,并能在一张图上显示多个周期。在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() */ 附加的文件: bollinger_bands_b_-_multi.mq4 9 kb Elite indicators :) 為甚麼指標無法正常顯示,程式加上這行指令 #property strict ,就無法正常顯示 求好人帮忙把这几行通达信代码改成MQl语言,很感谢 Mladen Rakic 2009.11.14 12:32 #980 ... whiteebloodcell, 你是对的。内置的布林带指标只对标准差 乘数的整数值起作用。这里有一个简单的,允许你使用小数乘数和多个偏差。可能会有帮助。 至于难度:只要不放弃编码就可以了。当你完成你想要的代码时,你会发现 问候 mladen whitebloodcell: 我正试图对linuxuser发布的布林%b指标进行(进一步)修改。我想让它的行为与随机指标类似,即有一条信号线,并能在一张图上显示多个周期。在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() */ 附加的文件: bollinger_bands_multiple_deviations.mq4 4 kb 1...919293949596979899100101102103104105...1108 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
...
文件。
总共用了2个缓冲区(所以还有6个要用) 我不知道你到底想要怎样的histo,所以贴出这个来代替(没有histo,警报是在某个时候添加的,我没有写出名称中的 "短 "和 "长") 如果你需要histo的帮助,请告诉我
问候
毫升登
Hy mladen,
你能告诉我是否有机会让这个indy在histo条上运行?
所有的缓冲区都很忙,我不知道如何修改它......。
请帮助我。
谢谢大家。
最好的问候
医师谢谢mladen !
你真了不起!在这么短的时间内写出了这么棒的代码!
对我来说太神奇了......我对如何修改它有点迷惑,因为它与我的标准知识完全不同。
我希望能有一些这两条线交叉的histo bars: ergodic cci线和触发线。
最好的问候
医生
...
两个版本。
"Classical histo" - 第一个子窗口
"Bars histo"->你想要的版本--当触发器低于遍历CCI时为绿色,当触发器高于遍历CCI时为红色,当(如果)它们相等时为灰色。
问候
mladen
谢谢 mladen !
你真了不起!在这么短的时间内写出了这么棒的代码!对我来说太不可思议了......我也是如此。
对我来说太神奇了......我对如何修改它有点迷惑,因为它与我的标准知识完全不同。
我希望能有一些这两条线交叉的histo bars: ergodic cci线和触发线。
最好的问候
医生两个版本。
"Classical histo" - 第一个子窗口
"Bars histo"->你想要的那个--当触发器低于侵蚀性CCI时为绿色,当触发器高于侵蚀性CCI时为红色,当(如果)它们相等时为灰色。
问候
mladen这正是我所需要的!
谢谢mladen你是个天才!
最好的问候
文档
嗨,mladen。
今天下午短暂停留了一下,在打招呼之前不得不匆匆离开。
谢谢你的新指标和麦金利本人的文章。 我还在读它。 是的,当我第一次把你的第一个版本放在9-EMA旁边时,我也对这种相似性感到惊讶。是的,Metastock的公式并不像McGinley的公式。 对不起,我的信息有误,但这是我从网上得到的信息。
至少现在我们知道Investopedia的文章有点夸大其词了。 但因为它确实很不为人知,这也引发了一些兴趣,总体来说,它很有趣。
谢谢&最好的问候。
jswei.
对不起 mladen。
你能在最后这部分帮我吗?
是否有可能(像图片中那样)在这些颜色中没有灰色和黄色的线条,并且在同一行中都有条形图案?
最好的问候
医生
...
像这样吗?
问候
mladen
对不起,mladen。
你能帮助我完成这最后一部分吗?
是否有可能(像图片中那样)在这些颜色中没有灰色和黄色的线条,并且在同一行中都有条形图案?
最好的问候
医生喜欢这个吗?
问候
mladen正是如此!
非常感谢mladen......祝你有好的收益。
疑问
医生
我正试图对linuxuser发布的布林%b指标进行(进一步)修改。我想让它的行为与随机指标类似,即有一条信号线,并能在一张图上显示多个周期。在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()
*/...
whiteebloodcell,
你是对的。内置的布林带指标只对标准差 乘数的整数值起作用。这里有一个简单的,允许你使用小数乘数和多个偏差。可能会有帮助。
至于难度:只要不放弃编码就可以了。当你完成你想要的代码时,你会发现
问候
mladen
我正试图对linuxuser发布的布林%b指标进行(进一步)修改。我想让它的行为与随机指标类似,即有一条信号线,并能在一张图上显示多个周期。在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()
*/