【零基础】MT4量化入门三:写一个双均线指标
一、前言
原本已经放弃的,但因为一些需要又写了一个MT4的指标,所以这里就继续总结一下为后来人铺路。
现在发现除了用C语言、不好使的公用函数外,MT4写指标或者EA其实难度都不大,就是很多地方超出你的预计很难受。
这里我写一个双均线的指标,逻辑就是一个均线用最大值MA(HMA),另一个均线用最小值的MA(LMA),当最新值下穿HMA做空,上穿LMA做多,跟BOLL的逻辑有点像。由于自带函数不好使,所以这里我自己还写了一些功能函数。
二、新建一个指标
在MT4里,指标与EA是有点区别的,具体区别后面再说,这里先新建一个指标。
1)在MQ编辑窗口中:文件->新建
2)选“自定义指标”->下一步
3)指标命名成“DMA”。
这里的参数就是指标启动时可以修改的参数,这里我们不添加参数,在代码里可以手写。
4)默认就只要个OnCalculate(),意思是每当有一个行情更新就触发执行一次这个函数。继续下一步。
5)这里的“独立窗口指标”,意思是这个指标在副图绘制,如果不勾选就在K线图(主图)上绘制,我们这个是在主图绘制的,自然是不勾选了,而且代码里也是可以修改的。
另外,这里可以提前设置你需要绘制的指标线颜色和类型,一共也就那么几种,我也是在代码里设置,不在这里添加。继续下一步。
6)一个全新的指标就建好了。所有的指标文件都在Indicators目录中。
三、基本说明
在看到MT4这一简短的初始代码时,当然会有点懵的,其实逻辑不复杂。每当有一个bar来到时,就触发一下OnCalculate()这个函数,同时这个函数使用参数传递了你可能会需要的一些资源。
rates_total:当前累计有多少个bar
prev_calculated:上一次处理到第几个bar
time:当前bar的时间
open:bar开盘价
high:bar最高价
low:bar最低价
close:bar收盘价
那么整个运行逻辑是怎样的呢?
1)第一次触发OnCalculate()时,其实是处理历史数据,比如1000个bar,那么rates_total=1000。但是prev_calculated=0,因为还没有处理过数据。需要注意历史数据就触发一次,后面再触发就是最新数据了。
2)第二次触发OnCalculate()时,我们晓得是收到最新数据了,rates_total=1001,而prev_calculated=1000。
3)如果你觉得第三次触发时,是收到新的bar,那你就太天真了,第三次触发时rates_total=1001,而prev_calculated=1001。这是为什么呢?因为一个bar是会多次触发OnCalculate()的。比如你的K线周期设置为1分钟,那么一个bar的成型可能需要十次或数十次数据更新,因为最新价是一直在变得啊,所以触发OnCalculate()大概率是bar的最新价更新了,不一定是有了新的bar。
四、代码的基本结构
1)历史数据和即时数据的区分处理
综合前面的说明,我们需要建立一个基本结构,分别来处理历史数据和最新数据。官方自带的示例呢就有点复杂,让人看不明白,这里我就用非常简单的办法来判断历史数据和最新数据。
有了基本代码结构,下面就该处理数据了,但是在处理数据前还有个问题要解决,那就是怎么绘制指标线和买卖信号。
2)指标线和买卖信号绘制
在MT4绘制指标和买卖信号是一回事,只是显示方式不同。完成这个过程需要做四步工作:
第一步:声明当前存在的指标线和买卖信号。需要注意指标线是line,而买卖信号是arrow
第二步:声明数据缓存容器
第三步:为容器分配buffer,注意顺序,其次这里还对买入和卖出的arrow类型做了指定
第四步:向对应的buffer中存入数值即可绘制指标线和买卖箭头,这一步在后面操作。
3)中间数据的缓存
在指标的计算中,往往还存在中间数据的保存,在MT4里面如果不晓得这个小技巧的话,中间数据存取会很让人崩溃(亲身经历)。
增加存数据的buffer
分配内存,要注意buffer的数量由4变为6
四、处理历史数据
逻辑是简单的:
1)从high中取30个周期内的最大值做为highest
2)在highest的基础上求MA5
3)从low中取30个周期内的最小值作为lowest
4)在lowest的基础上求MA5
5)close上穿lowest的MA5则做多,下穿highest的MA5做空
6)所以将lowest的MA5称为支撑线,highest的MA5称为压力线
代码不多:
这里需要注意的就是,在MT4中,数据在数组中是反着放的,比如现在有1000个数据,最新数据是close[0],而不是close[999]。所以你看到我这里处理历史数据是反序处理的,同时功能函数也都是反序处理的。
那么可否转成正序呢,是可以的,有个自带的函数可以做,不过因为我在发现这个函数前就把功能函数都做好了,也懒得改了。
五、处理即时数据
直接上代码。可以看到即时数据处理跟历史数据是一样的,只是将i全部改成了0。
六、回顾
在写MT4指标时,最痛苦莫过于所有数据在数组里都是反序的,折腾了好久才明白。结果很快又发现一个函数可以把反序转成正序,痛苦啊。
然后你可能会注意到,这里使用数组是不需要按顺序添加数据,甚至还可以间隔着填数据进去。这是咋回事呢?我也不知道,可能为了方便使用吧,结果我一开始按C语言那样使用动态数组来存储中间数据,可把我折腾了半天。
MT4在外汇领域称霸很年了,我感觉该有一款用python编程的国产平台来取代它才对。
文中代码可以关注公众号“零基础爱学习”回复“MT2”获取。
【零基础】MT4量化入门三:写一个双均线指标相关推荐
- 写一个双均线交易系统
写一个双均线交易系统需要完成以下步骤: 数据获取:从金融市场获取股票价格数据. 数据预处理:对获取的数据进行清理.格式化等处理. 计算均线:使用算术平均数等方法计算出短期均线和长期均线. 生成交易信号 ...
- 《零基础D编程入门三》
第三章:win系统下安装D 3.1 要求及下载 3.2 文件 3.3 安装 3.4 示列 3.5 连接 3.6 环境变量 3.7 sc.ini 初始化文件 3.8 常见的安装问题 3.9 Window ...
- 学习笔记(3):零基础掌握 Python 入门到实战-一个圆点的何去何从(二)
立即学习:https://edu.csdn.net/course/play/26676/338772?utm_source=blogtoedu python中可以进行四舍五入的内置函数:round(欲 ...
- 学习笔记(2):零基础掌握 Python 入门到实战-一个圆点的何去何从(一)
立即学习:https://edu.csdn.net/course/play/26676/338762?utm_source=blogtoedu 对象 :属性+方法 内置对象类型:整数.浮点数 字符串 ...
- 【前端】零基础带你入门前端< 三 > —— 实现手机通讯录(微信通讯录)等
零基础带你入门前端 描述类标签 查看手机通讯录 移动端进行查看 浮动 粘性定位 锚点定位 固定定位 实现手机通讯录 完结 前言: 此文章是在 < 一 >与 < 二 >的基础之上 ...
- 码匠编程:零基础从前端入门到前端开发工程师路线
一.前端学习路径规划 下面是一个学习线路图,其实还有很多的技术导图中没有涉及到,对于初学者来说,能够掌握上边的知识点已经很不错了. 零基础从前端入门到前端开发工程师路线 二.入坑前的三问 想要入前端的 ...
- 《零基础掌握 Python 入门到实战》笔记
Python 零基础掌握 Python 入门到实战笔记 文章目录 Python 内置对象类型 基本交互语句 常用内置函数 整数与浮点数 基本数学运算 高级数学运算 字符串 序列 索引 切片 成员函数 ...
- 零基础学习嵌入式入门以及项目实战开发【手把手教+国内独家+原创】
零基础学习嵌入式入门以及项目实战开发[手把手教+国内独家+原创] 独家拥有,绝对经典 创 科 之 龙 嵌入式开发经典系列教程 [第一期] 主讲人: ...
- 零基础编程入门python视频-Python编程零基础小白快速入门完整全系列精品课
1. 课程咨询加老师助理微信:助理1微信: chenjinglei88 ,助理2微信: omf6757 2. 决定购买并想得到陈敬雷老师亲自指导(课程或自己项目难题均可)加老师微信: chenjing ...
- Java零基础并发编程入门
Java零基础并发编程入门 并发编程主要包括: 线程,同步,future,锁,fork/join, volatile,信号量,cas(原子性,可见性,顺序一致性),临界性,分布式 了解基础: JMM: ...
最新文章
- Java_压缩与解压工具类
- Red Hat Linux、rhel 和 Fedora Core 以及 Centos 区别与联系
- 《Spark大数据分析:核心概念、技术及实践》一1.5 NoSQL
- VSTO Office二次开发PPTRibbonX命令操作及对象添加
- 每日一皮:当我在处理别人的代码时...
- 中科元素精准饮食 功能性农业-李喜贵:电视荧屏广州地铁线展示
- opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统
- Caffe编译代码的时候报各种未定义未声明
- Qt下简单的文件读取
- Android:Android SDK的下载与安装
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_08-freemarker基础-空值处理
- Linux环境MySQL卸载教程
- 共享经济-共享汽车市场调研报告
- c# DevExpress Gridview 设置表格背景颜色
- 第4章第14节:图表:使用折线图表制作电脑销量趋势图 [PowerPoint精美幻灯片实战教程]
- mysql 多维度统计_SQL统计——按照各种维度
- laravel + xampp 除了根目录其他路由都是404的解决方法
- 在Dart中使用FFI调用Rust函数
- 儒家文化专题数据:各地级市-儒家学校、学堂孔庙数据量
- ipad适用计算机专业么,并不适合所有人 iPad Pro买前需认识这几点
热门文章
- 程序人生-我已经努力了七年!!!
- 自然语言处理领域介绍
- should be described in NUMA config 和 CPU feature cmt not found
- Neon Love(霓虹爱)
- celery(分布式任务队列)介绍+在django中异步回调使用+定时任务的使用
- codeforces 999 C. Alphabetic Removals(1200)
- 荣耀MagicBook X桌面频繁蓝屏如何重装系统?
- 纯文本,富文本,超文本
- 震惊:爱测未来技术嘉年华竟然这些免费送
- 千万不要和女程序员做同事!否则你会爱上她