1、#property indicator_color2 Greenextern int 变色均线=18;double duo;double kong;int init() SetIndexBuffer(0,duo); SetIndexBuffer(1,kong); SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexDrawBegin(0,变色均线); SetIndexDrawBegin(1,变色均线); IndicatorDigits(Digits); return(0); int start() double tem
2、p0,temp1; int limit; int counted_bars=IndicatorCounted(); if(counted_bars0) counted_bars-; limit=Bars-counted_bars; for(int i=limit; i=0; i-) duoi=EMPTY_VALUE; kongi=EMPTY_VALUE; temp0=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i); temp1=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i+1); if(iClose(NULL,0,i)=i
3、MA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i) duoi=temp0; duoi+1=temp1; else kongi=temp0; kongi+1=temp1; -当然,上面这个是以价格在均线上下方为条件的,我们也可以以MACD、KDJ、RSI等指标作为均线变色的条件。我们还可以更进一步,把双色线改为三色线等等 =语句简要解释如下:指标放在主图设置指标线数组为2个设置第一条指标线颜色值为Red,第二条颜色值为Green设立一个自定义变量,允许外部值修改,整数形,变量名为变色均线,默认值18设立一个自定义数组,双精度型,名称为duo该数组在后面用于存储红线数
4、据设立一个自定义数组,双精度型,名称为kong该数组在后面用于存储绿线数据设立初始化函数init。init为系统规定函数名,函数内容自定义。该函数在指标被加载时运行一次 设置第一、二条指标线的数组为duo和kong 设置第一、二条指标线的样式,线型为连续曲线 设置第一、二条指标线的最左边的起始划线位置 设置指标精确到的小数位数 Digits是当前汇率小数位,日系Digits=2,其他币对Digits=4 init函数结束,返回零值设立触发函数start。start为系统规定函数名,函数内容自定义。当数据变动时,start函数被触发 设立双精度型自定义变量temp0、temp1 设立自定义变量l
5、imit,整数型 设立整数型自定义变量counted_bars,并将IndicatorCounted()的值赋给counted_bars IndicatorCounted()为缓存数,即已经计算过值的烛柱数 如果counted_bars值小于零,start函数结束 如果counted_bars值大于零,则counted_bars值减掉1。这是为了配合下一句,以避免limit相差1而出错 给limit赋值 Bars为图表中的烛柱数 counted_bars为缓存数,即已经运算过的烛柱数 这样limit的值就是未经运算的烛柱数 这样做的目的是避免重复运算,优化程序 循环语句,括号中有三个语句: 第
6、一句int i=limit; 表示循环从i=limit开始 第二句i 这是循环的条件,如果条件满足则执行大括号中的循环体,如果条件不满足,则中止循环,跳到大括号下面的语句执行 第三句i-,这是循环步调控制语句,每循环一次后执行一次此语句。 i-相当于i=i-1,即i值在原有数值上减少1 给数组duo和kong在i位置上赋空值 EMPTY_VALUE:空值 把均线在i和i+1位置上均线值,分别赋给temp0和temp1 这是为了使后面的语句看起来简洁=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i) 判断条件语句:如果价格高于均线 判断执行语句:给数组元素duo
7、i、duoi+1分别赋值 如果判断条件不成立,即价格低于均线:则给数组元素kongi、kongi+1分别赋值 start函数结束,返回零值在欧元图上显示英磅的RSI指标作者:秃鹫 来自:韬客外汇论坛下面这个图是AUD图上,叠加了英磅的RSI指标。(当然也可以不叠加,分两个窗口)从RSI指标图上我们看到,英磅强势,而澳元很弱下面是指标源码-#property indicator_separate_window#property indicator_buffers 1#property indicator_color1 Aqua#property indicator_level1 30#prope
8、rty indicator_level2 70extern int RSI=12;extern string 商品=GBPUSD;double ind_buffer; SetIndexBuffer(0,ind_buffer); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1); IndicatorShortName(RSI(+商品+, +RSI+); for(int i=0; ilimit; i+) ind_bufferi=iRSI(商品,0,RSI,PRICE_CLOSE,i);下面是指标叠加的操作方法:当然这里用的是RSI指标,别的指标如KDJ、威廉等指标也
9、可以类似操作,只要把上面源码中的取值函数和参数换一个行了。=指标放在副图设置指标线数组为1个设置第一条指标线颜色值为Aqua,即介于蓝绿之间的一种颜色在副图中,30值位置上画一条水平直线在副图中,70值位置上画一条水平直线设立一个自定义变量,允许外部值修改,整数型,变量名为RSI,默认值12设立一个自定义变量,允许外部值修改,字符串型,变量名为商品,默认值设立一个自定义数组,双精度型 设置第一条指标线的数组为ind_buffer 设置第一条指标线的样式,DRAW_LINE表示连续曲线,STYLE_SOLID表示实心线,1号粗线 设置指标线的显示简称 初始化函数结束 IndicatorCount
10、ed()为缓存数量,即已经计算过值的烛柱数 (注:可能这里解释得不是很准确,大致就这个意思) Bars为图表中的柱数 counted_bars为已经赋值的柱数 这样limit的值就是未赋值的烛柱数 第一句int i=0; 表示循环从i=0开始 第二句itemp0 & Closei+1temp1) mki=temp0; if(Closei/源码到此已结束设置指标线数为1条设置第一条指标线颜色为黄色均线,默认值10设立二个自定义变量,双精度型,变量名为temp0、temp1该函数在指标被加载时仅运行一次 指标线数量为1条 第一条指标线的数组为mk 第一条指标线的线型为箭头符号 第一条指标线的箭头符
11、号为第204种符号,如果换一个编号,那出现的就是另一种符号。箭头符号的编码详见MT4编程参考 设置指标线的小数位数 Digits=当前汇率的小数位数,如日元叉盘Digits=2,其他币对Digits=4 函数结束,返回零值 设立整数型自定义变量limit 如果counted_bars大于零,则将counted_bars的值减掉1 这是为了配合下一句,以避免limit相差1而发生出错 这是给limit赋值 这样limit的结果就是未赋值的烛柱数 再减去“均线”是因为图表最右边段均线无意义 把均线在i位置上的值赋给temp0 iMA:均线取值函数 把均线在(i+1)位置上的值赋给temp1 给数组mk在i位置上赋空值 EMPTY_VALUE就是空值 条件判断语句。如果在i位置上价格大于均线,并且在(i+1)位置上价格小于均线(即价格上穿均线),则给数组mk在i位置上赋该位置的均线值 Closei:在i位置上收盘价。 &:逻辑运算符“并且” 与上一句相似 start函数结束语句把所有时段MACD一起显示上
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2