【零基础】MT4量化入门一:跑一个简单的boll

【零基础】MT4量化入门一:跑一个简单的boll一、前言  今天开始研究MT4了,MT4是大大有名的外汇交易和量化软件,使用一种叫做MQL的语言来开发量化程序(跟C比较像)。因为是外国人做的,用的也大部分是外国人,使用起来不是很顺手,跟极星各有优劣吧。这里我就先逐步讲一下MT4的使用,然后再简单跑一个boll指标,最后汇总下使用心得。二、安装  1、下载MT4  不熟悉这东西,连安装都是个麻烦事儿。MT4官网好找一搜就有,下载链…

大家好,又见面了,我是你们的朋友全栈君。

一、前言

  今天开始研究MT4了,MT4是大大有名的外汇交易和量化软件,使用一种叫做MQL的语言来开发量化程序(跟C比较像)。因为是外国人做的,用的也大部分是外国人,使用起来不是很顺手,跟极星各有优劣吧。这里我就先逐步讲一下MT4的使用,然后再简单跑一个boll指标,最后汇总下使用心得。

二、安装

  1、下载MT4

  不熟悉这东西,连安装都是个麻烦事儿。MT4官网好找一搜就有,下载链接好找安装包不大,一会就安装上了。可是你给我装的啥?我要的MT4你咋给我装个MT5?

  原来这家公司现在力推MT5,但是大家都用惯了MT4不想换,所以官网只能下载MT5,但你可以到各经纪商下载老版本的MT4。由于二者间有些差别,而且大部分人都不用新版本的,所以我也从善如流找个老版本吧。

  最后经网友帮助终于下了经纪商的版本,我使用的下载链接:

  https://www.fuhuiyazhou.com/

  翻到中间就有下载链接了

【零基础】MT4量化入门一:跑一个简单的boll

 

  2、注册模拟账户

  安装后直接打开,会提示你开户。我们先注册个模拟账户,下图中就是可接入的站点,你选一个ping值较小的,然后地址名带Demo的(Real是实盘不是模拟)。

【零基础】MT4量化入门一:跑一个简单的boll

【零基础】MT4量化入门一:跑一个简单的boll

 

  填写信息后即可注册成功,一开始会给你1万的资金用来模拟。启动后的窗口大概就是下图这样。就不说MT4本身的操作了,大家可以自己摸索下。

【零基础】MT4量化入门一:跑一个简单的boll

 

 

三、编写量化代码

  1、新建量化

  现在我们看到这个叫“交易端”,在上方的功能菜单中选择“工具->MQ语言编辑器”打开量化编辑窗口。然后新建一个量化策略,注意是“新建”而不是“新建项目”。

【零基础】MT4量化入门一:跑一个简单的boll

 

  新建向导里有很多选择,一般我们用到的就是:

  EA交易:就是我们说的量化了,在MT4他们叫EA(Expert Advisor 智能交易系统)。

  自定义指标:比如我们在K线图上看到的MA指标、BOLL指标,在MT4你可以自己来编辑指标然后应用到K线图上,国内一般将指标编辑放在交易端,MT4把这些全部放到了MQL编辑器里了。

  脚本:脚本可以在你触发后自动执行一系列操作,与EA不同的是,脚本是手动触发,而EA是行情触发。

 

   选择“EA”->下一步->名称输入“testboll”->下一步

【零基础】MT4量化入门一:跑一个简单的boll

 

   接着就会让你选一些额外的触发函数。什么叫额外呢,因为一般我们是来一个行情触发一次量化执行的,现在你可以多加几个,比如下面的“OnTimer定时触发”就是到时间了就触发一次。这里我们统统不要选,直接下一步。

 【零基础】MT4量化入门一:跑一个简单的boll

 

  创建成功啦,代码的目录在左侧导航器的Experts目录里,这是默认的。

【零基础】MT4量化入门一:跑一个简单的boll

【零基础】MT4量化入门一:跑一个简单的boll

 

   2、代码结构说明

  从前面的图可以看到,默认有三个函数,分别是:

  OnInit():启动EA时触发一次的函数

  OnDeinit():结束EA时触发一次的函数

  OnTick():来一个行情触发一次的函数

  3、简单的boll策略

 【零基础】MT4量化入门一:跑一个简单的boll

 

 

 【零基础】MT4量化入门一:跑一个简单的boll

 

 

   代码比较简单,向上突破后做空,向下突破做多,而且只做一单。需要说明的不多:

  iBands是MT4自带计算boll指标的函数,其中PRICE_CLOSE代表了当前收到的最新价。

  Close 中存着所有收到的收盘价,Close[0]是最新的那个。

  OrderSend 就是下单函数。

    Symbol返回当前合约,其实填NULL也行。

    OP_BUY、OP_SELL分别是买和卖。还有四个类型分别是:OP_BUYLIMIT、OP_SELLLIMIT、OP_BUYSTOP、OP_SELLSTOP

    Ask、Bid分别代表当前的卖价和买价

    Bid+50*Point、Bid-50*Point分别用作止损和止盈,即在下单价的基础上,上浮和下浮50个点止损、止盈。一个点就是合约的最小变动价

    Green、Red设置箭头的颜色,在跑EA时下单的话可以在K线上显示一个箭头表明下单了。国外一般绿色是多、红色是空(跟我们反过来)

  更多的参数说明可以看用户手册,英文版的在“帮助->MQL4帮助文件”,文末附上了中文版的说明(翻译的一般,看的吃力)

四、回测

  由于今天刚好不是交易日,所以就只能做一下历史数据回测。

  1、检查代码

  在开始测试可以先运行下调试,主要是检测下代码有没有问题,没有问题的话会进入MT4下单界面。

【零基础】MT4量化入门一:跑一个简单的boll

  点确定即可

【零基础】MT4量化入门一:跑一个简单的boll

 

 

   然后你会发现什么都没发生。但是注意看K线图的右上角,会有你当前测试EA的名字,还有个哭哭脸。这是因为EA已经加载了,但你还没启动策略执行。

【零基础】MT4量化入门一:跑一个简单的boll

 

 

   在工具栏找到“自动交易”,点击即可。

【零基础】MT4量化入门一:跑一个简单的boll

 

 

   如果是在有即时行情的时候,点击“自动交易”后,哭哭脸就会变成笑笑脸,那策略就真的开始执行了。但现在没有行情,我们只能做回测,就没必要点“自动交易”了。

  2、启动回测

  建议修改代码后,每次都点一下“运行调试”,一是看看代码有没有问题,其次有时我更新代码后立即做回测发现代码并没有更新,执行一次“运行调试”就一定是最新的,反正是比较玄乎。

  在下方的回测栏中选择我们刚写好的策略、回测的合约、K线周期等等。

【零基础】MT4量化入门一:跑一个简单的boll

 

 

  注意1:复盘模型选“仅用开盘价”即可,这样显示复盘的速度会快点,如果选了“每个即时价格”则K线生成的会比较慢

  注意2:勾选“复盘显示”后会在K线图上重现K线生成的过程,后面那个滑动条是快进的速度

  注意3:“时间周期”设置的是K线显示的周期,而不是触发的周期,这个后面详细说明

  3、结果查看

  K线图上会以图标的方式显示你的下单情况

【零基础】MT4量化入门一:跑一个简单的boll

 

 

 

  最下方有“结果”、“净值图”、“报告”、“日志”分别代表了“下单明细”、“资金变化”、“回测报告”、“系统和用户日志”可以查看回测的各方面信息。

  注意在“下单明细”中,除了我们操作的buy和sell外,还有自动执行的止盈和止损(下单时就设置了的)。

【零基础】MT4量化入门一:跑一个简单的boll

 

 

 五、注意事项

  1、回测的K线周期只是显示的周期,不是触发的周期。

  你看代码里触发的函数是OnTick,意思是每一个tick都会触发一次,而不是5分钟、10分钟触发一次,所以你获取到的close是当前tick的,而不是K线bar柱的。这一点跟我以前的经验有很大不同。但是呢,open获取到的开盘价又确实是指定周期bar柱的开盘价。总的来说MT4的回测有点像极星的即时行情,从这个角度来说确实是实现了更高真实度的回测。

  2、历史数据可能没有你期待的那么可靠

  通过数次测试我发现,越是以前的数据tick越稀松,越是现在的数据tick越密集。比如你做3月26日到3月27日的回测,26日开始时的tick数据是1分钟一个触发,而到了27日可能一秒钟一个触发。具体怎么回事我还得再测测看。

 六、总结

  本节简单做了个boll回测,而且把大概的流程搞清楚了,但也发现了很多问题导致回测不准,后面还得花时间把问题搞清楚先。

  关注公众号“零基础爱学习”回复”MT1″获取本节的示例代码和中文用户手册。

【零基础】MT4量化入门一:跑一个简单的boll

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142706.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据结构之哈希表(HASH)

    前言   当我们在编程过程中,往往需要对线性表进行查找操作。在顺序表中查找时,需要从表头开始,依次遍历比较a[i]与key的值是否相等,直到相等才返回索引i;在有序表中查找时,我们经常使用的是二分查找,通过比较key与a[i]的大小来折半查找,直到相等时才返回索引i。最终通过索引找到我们要找的元素。   但是,这两种方法的效率都依赖于查找中比较的次数。我们有一种想法,能不能不经过比较,而是

  • C语言之格式化输出字符

    C语言之格式化输出字符1、格式化输出字符:%d十进制有符号整数%ld十进制long有符号整数%u十进制无符号整数%o以八进制表示的整数%x以十六进制表示的整数%ffloat型浮点数%lfdouble型浮点数%e指数形式的浮点数%c单个字符%s字符串%p指针的值2、特殊应用:%5d要求宽度为5位,如果不足5位,前面空格补齐;如果足够5位,此语句无效。%05d要求宽度为5位,如果不足5位,前面0补…

  • ETL开发命名规范

    ETL开发命名规范命名规范1、模块名缩写、表面缩写2、一次性初始化的表:[库名].表名_INIT

  • 经典永不过时的句子_网红的成功案例分析

    经典永不过时的句子_网红的成功案例分析本周给大家分享的数据分析案例是泰坦尼克号幸存者预测的项目,没记错的话,这应该是很多朋友写在简历上的项目经历。如果你目前正在找工作,自身缺少项目经历并且想要充实项目经历的话,可以考虑一下这个项目!…

    2022年10月22日
  • spark flatmap

    spark flatmapflatMap算子,在java中,接收的参数是FlatMapFunction,我们需要自己定义FlatMapFunction的第二个泛型类型,即,代表了返回的新元素的类型      call()方法,返回的类型,不是U,而是Iterable,这里的U也与第二个泛型类型相同      flatMap其实就是,接收原始RDD中的每个元素,并进行各种逻辑的计算和处理,返回可以返回多个元素

  • 按位取反运算符~_c语言∧按位异或运算符

    按位取反运算符~_c语言∧按位异或运算符https://www.cnblogs.com/shy1766IT/p/6184874.html二进制数在内存中以补码的形式存储。按位取反:二进制每一位取反,0变1,1变0。~9的计算步骤:转二进制:01001计算补码:01001按位取反:10110转为原码:按位取反:11001末位加一:11010符号位为1是负数,即-10varx…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号