MT编程入门教程(2)----指标画哪里?价格窗口还是独立窗口? 新评论 okwh 2007.03.19 14:58 MT编程入门教程(2)----指标画哪里?价格窗口还是独立窗口? 其实,都可以,不过是坐标的规格化,使得它们在相近的数据范围,就可以画在一起。 看你自己的习惯。画在价格窗口,方便和价格同时感受。 //+本例展示了如何把MA转换后画到独立窗口,同样也可以把独立窗口的指标改画在价格窗口 //要达到这些目的,需要考虑两个方面 1 估计数据的范围,以确定以什么为单位? 2 确定坐标偏移,也就是确定坐标零点。 //目的就是让你要画的多条线在同样的数值范围,这样才能同时画出,达到参考目的 //比如-1000到+1000和0到+4这样两套数据要变换后才能在同图画出, //转换方法复习中学数学直角坐标系的缩放和平移部分-------------------------+ // 共画2条线 #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_color2 Yellow // Parameter // MA-Properties extern double MovingFast = 7; extern double MovingSlow = 13; extern double MovingSlow02 = 13; extern int MaM=2; extern int MaP=2; extern int MaM0=3; extern int MaP0=3;如改 extern int range1 = 11; extern int range2 = 4; int i; // Buffer //// 共画2条线,用2个数组存储线数据 double bufferMA1[]; double bufferMA2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //// 设置2条线的顺序编号,画法,对应数组, SetIndexStyle( 0, DRAW_LINE ); SetIndexBuffer( 0, bufferMA1 ); SetIndexStyle( 1, DRAW_LINE ); SetIndexBuffer( 1, bufferMA2 ); return(0); } int deinit() { return(0);} int start() { double Buffer10,Buffer11,Buffer20,Buffer21,Buffer30, Buffer31; int countedBars = IndicatorCounted(); //---- check for possible errors if ( countedBars < 0 ) { return(-1); } if ( countedBars > 0 ) { countedBars--; } int barsToCount = Bars - countedBars; for ( int i = barsToCount; i >= 0; i-- ) { //// 开始计算 Buffer20 = iMA(NULL,0,MovingFast,0,MaM,MaP, i) ;//MovingFast Buffer30 = iMA(NULL,0,MovingSlow,0,MaM,MaP, i) ;//MovingSlow Buffer21 = iMA(NULL,0,MovingFast,0,MaM,MaP, i+range1) ; Buffer31 = iMA(NULL,0,MovingSlow02,0,MaM,MaP, i+range2) ; //赋值给数组以便画线,使用Point使得坐标以点为单位,保证本指标对不同货币的一致y轴单位和视觉效果 bufferMA1[i] = MathRound((Buffer20-Buffer21)/Point); bufferMA2[i] = MathRound((Buffer30-Buffer31)/Point); } return(0); } 上面把两个MA的差值画在独立窗口,当然若把差值再加上一个MA,就可以画在价格窗口。 MA及其各种变化是最常用的指标基础。MA一般常用来替代价格本身 再做进一步计算。 #property indicator_chart_window //...... Buffer10 = iMA(NULL,0,MovingFast*6,0,MaM,MaP, i) bufferMA1 = MathRound(Buffer20-Buffer21)+Buffer10 ; bufferMA2 = MathRound(Buffer30-Buffer31)+Buffer10 ; //......... 就可以把它们跌加到价格上画了。 你只需修改Buffer10 ,Buffer20, Buffer21 Buffer30, Buffer31为你需要的,在考虑一下数据范围坐标问题,你可以画任意的指标了。 How to set variables by currency symbol value - what's wrong with this code? Possible -> ArraySetAsSeries() and two dimensional Array Is there any ObjectRename or ObjectCopy capability? How can I program this... 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
其实,都可以,不过是坐标的规格化,使得它们在相近的数据范围,就可以画在一起。
看你自己的习惯。画在价格窗口,方便和价格同时感受。
//+本例展示了如何把MA转换后画到独立窗口,同样也可以把独立窗口的指标改画在价格窗口
//要达到这些目的,需要考虑两个方面 1 估计数据的范围,以确定以什么为单位? 2 确定坐标偏移,也就是确定坐标零点。
//目的就是让你要画的多条线在同样的数值范围,这样才能同时画出,达到参考目的
//比如-1000到+1000和0到+4这样两套数据要变换后才能在同图画出,
//转换方法复习中学数学直角坐标系的缩放和平移部分-------------------------+
上面把两个MA的差值画在独立窗口,当然若把差值再加上一个MA,就可以画在价格窗口。
MA及其各种变化是最常用的指标基础。MA一般常用来替代价格本身 再做进一步计算。
就可以把它们跌加到价格上画了。
你只需修改Buffer10 ,Buffer20, Buffer21 Buffer30, Buffer31为你需要的,在考虑一下数据范围坐标问题,你可以画任意的指标了。