没有合适的资源?快使用搜索试试~ 我知道了~
首页MT4的MQL4编程实例
MT4的MQL4编程实例
4星 · 超过85%的资源 需积分: 16 113 下载量 33 浏览量
更新于2023-03-16
评论 8
收藏 428KB DOC 举报
MT4的MQL4编程入门 适合初入门者 对实例进行每句进行讲解 对入门非常有好处
资源详情
资源评论
资源推荐
MT4 编程实例:会变色的均线
这里实际上有两条均线,一条红线,一条绿线:
当价格在均线上方时,红线显示,绿线隐藏;
当价格在均线下方时,红线隐藏,绿线显示,
所以看起来就只是一条会变色的均线。
要隐藏一条指标线中的其中一段,也很简单,只要把这一段指标线的值赋为空值(EMPTY_VALUE)就
行了。
说说容易,但实际操作的时候,我们又遇到了一个小问题,那就是红绿转换点的“断点”问题,红线和绿线
不连续了。图:
这个问题着实困扰了
我好一阵,后来终于
想通了。
原来,画线的条件是:
前后两个时点上都必
须有值,才能画出线
来。而上图中 2 和 3
之间应该画上红线,
但在 3 点位上,红线
的值为空,所以,红
线画不出来。
要让红线、绿线连续,必须使 3 点位上,既有绿线值又有红线值,这样 2 和 3 之间才能出现红线,红线绿
才会连续。
为了做到这一点,我们
在给指标线循环赋值的
时候:
1、在 i 时点上,除了给
i 时点赋值,同时还要给
i+1 时点赋同色值(以
上图为例:我们在给 3
时点赋绿线值时,同时
给 4 时点赋绿线值;在
给 2 时点赋红线值时,
同时再给 3 点赋红线值;
这样 3 时点上就既有红线值,又有绿线值);
2、赋值的顺序为从左向右,即递减循环,以避免前一操作所赋的值被清空。
这样我们的目的就达到了。
下面这是经过测试的源代码
---------------------------------------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Green
extern 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 temp0,temp1;
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(int i=limit; i>=0; i--)
{
duo[i]=EMPTY_VALUE;
kong[i]=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)>=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i))
{duo[i]=temp0; duo[i+1]=temp1;}
else {kong[i]=temp0; kong[i+1]=temp1;}
}
return(0);
}
-----------------------------------------------------------------------------------------------------------
当然,上面这个是以价格在均线上下方为条件的,我们也可以以 MACD、KDJ、RSI 等指标作为均线变色
的条件。我们还可以更进一步,把双色线改为三色线等等
===================================================
语句简要解释如下:
===================================================
#property indicator_chart_window
指标放在主图
#property indicator_buffers 2
设置指标线数组为 2 个
#property indicator_color1 Red
#property indicator_color2 Green
设置第一条指标线颜色值为 Red,第二条颜色值为 Green
extern int 变色均线=18;
设立一个自定义变量,允许外部值修改,整数形,变量名为"变色均线",默认值 18
double duo[];
设立一个自定义数组,双精度型,名称为 duo
该数组在后面用于存储红线数据
double kong[];
设立一个自定义数组,双精度型,名称为 kong
该数组在后面用于存储绿线数据
int init()
设立初始化函数 init。init 为系统规定函数名,函数内容自定义。该函数在指标被加载时运行一次
{
SetIndexBuffer(0,duo);
SetIndexBuffer(1,kong);
设置第一、二条指标线的数组为 duo 和 kong
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
设置第一、二条指标线的样式,线型为连续曲线
SetIndexDrawBegin(0,变色均线);
SetIndexDrawBegin(1,变色均线);
设置第一、二条指标线的最左边的起始划线位置
IndicatorDigits(Digits);
设置指标精确到的小数位数
Digits 是当前汇率小数位,日系 Digits=2,其他币对 Digits=4
return(0);
init 函数结束,返回零值
}
int start()
设立触发函数 start。start 为系统规定函数名,函数内容自定义。当数据变动时,start 函数被触发
{
double temp0,temp1;
设立双精度型自定义变量 temp0、temp1
int limit;
设立自定义变量 limit,整数型
int counted_bars=IndicatorCounted();
设立整数型自定义变量 counted_bars,并将 IndicatorCounted()的值赋给 counted_bars
IndicatorCounted()为缓存数,即已经计算过值的烛柱数
if(counted_bars<0) return(-1);
如果 counted_bars 值小于零,start 函数结束
if(counted_bars>0) counted_bars--;
如果 counted_bars 值大于零,则 counted_bars 值减掉 1。这是为了配合下一句,以避免 limit 相差 1 而
出错
limit=Bars-counted_bars;
给 limit 赋值
Bars 为图表中的烛柱数
counted_bars 为缓存数,即已经运算过的烛柱数
这样 limit 的值就是未经运算的烛柱数
这样做的目的是避免重复运算,优化程序
for(int i=limit; i>=0; i--)
循环语句,括号中有三个语句:
第一句 int i=limit; 表示循环从 i=limit 开始
第二句 i>=0; 这是循环的条件,如果条件满足则执行大括号中的循环体,如果条件不满足,则中止循环,
跳到大括号下面的语句执行
第三句 i--,这是循环步调控制语句,每循环一次后执行一次此语句。
i--相当于 i=i-1,即 i 值在原有数值上减少 1
{
duo[i]=EMPTY_VALUE;
kong[i]=EMPTY_VALUE;
给数组 duo 和 kong 在 i 位置上赋空值
EMPTY_VALUE:空值
temp0=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i);
temp1=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i+1);
把均线在 i 和 i+1 位置上均线值,分别赋给 temp0 和 temp1
这是为了使后面的语句看起来简洁
if(iClose(NULL,0,i)>=iMA(NULL,0,变色均线,0,MODE_SMA,PRICE_CLOSE,i))
判断条件语句:如果价格高于均线
{duo[i]=temp0; duo[i+1]=temp1;}
判断执行语句:给数组元素 duo[i]、duo[i+1]分别赋值
else {kong[i]=temp0; kong[i+1]=temp1;}
如果判断条件不成立,即价格低于均线:则给数组元素 kong[i]、kong[i+1]分别赋值
}
return(0);
start 函数结束,返回零值
}
MT4 编程实例:在欧元图上显示英磅的 RSI 指标
作者:秃鹫 来自:韬客外汇论坛 http://www.talkforex.com
下面这个图是 AUD 图上,叠加了英磅的 RSI 指标。
(当然也可以不叠加,分两个窗口)
从 RSI 指标图上我们看到,英磅强势,而澳元很弱
下面是指
标源码
剩余35页未读,继续阅读
qc0008
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2023年中国辣条食品行业创新及消费需求洞察报告.pptx
- 2023年半导体行业20强品牌.pptx
- 2023年全球电力行业评论.pptx
- 2023年全球网络安全现状-劳动力资源和网络运营的全球发展新态势.pptx
- 毕业设计-基于单片机的液体密度检测系统设计.doc
- 家用清扫机器人设计.doc
- 基于VB+数据库SQL的教师信息管理系统设计与实现 计算机专业设计范文模板参考资料.pdf
- 官塘驿林场林防火(资源监管)“空天地人”四位一体监测系统方案.doc
- 基于专利语义表征的技术预见方法及其应用.docx
- 浅谈电子商务的现状及发展趋势学习总结.doc
- 基于单片机的智能仓库温湿度控制系统 (2).pdf
- 基于SSM框架知识产权管理系统 (2).pdf
- 9年终工作总结新年计划PPT模板.pptx
- Hytera海能达CH04L01 说明书.pdf
- 数据中心运维操作标准及流程.pdf
- 报告模板 -成本分析与报告培训之三.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论7