一位量化交易程序员手把手教你入门

上篇介绍完了如何配置量化交易所需要的环境,这篇继续介绍如何写第一个量化交易程序。

MT4提供的sample程序只有基本的功能,不能够自动交易。

我们写一个自动交易程序,逻辑如下

· 下一个多单

· 检查当前盈利情况

· 盈利大于1美金止盈平仓,或者亏损大于1美金止损平仓

· 退出程序

//+------------------------------------------------------------------+
//|                                                  QuantSample.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit(){//---//---return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){//---}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick(){//---int ticket = 0;if(OrdersTotal() == 0) {//检查当前是否有订单,没有则下单//send orderticket = OrderSend(Symbol(), OP_BUY, 0.01, MarketInfo(Symbol(), MODE_ASK), 100, 0.0, 0.0, "comment", 1024, 0,0xFFFFFFFF);}double profit = 0;for(int i = 0; i < OrdersTotal(); i++){ //计算当前盈亏if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) break;profit = OrderProfit();}if(profit > 1.0 || profit < -1.0) { //当前盈亏满足条件则平仓退出//close orderfor (int index = OrdersTotal() - 1 ; index >= 0 ; index = index - 1) {if(!OrderSelect(index, SELECT_BY_POS, MODE_TRADES)){ //选择订单PrintFormat(">>> select failed closing trade <%s> at index %d", Symbol(), index);continue;}bool close_result = true ;switch(OrderType()) {case OP_BUY :close_result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID),100,0xFFFFFFFF) ; //关闭订单break;case OP_SELL :close_result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),100,0xFFFFFFFF) ;break;}}ExpertRemove();//退出EA}}
//+------------------------------------------------------------------+

这是一个包含了最最基本功能的交易程序,它没有任何量化相关的逻辑,只展示了最基本的交易能力。

复杂的量化交易程序也需要包含这两个功能,

· 下单

· 平仓

区别在于他们的下单依据,量化交易会用复杂的逻辑分析市场上反馈的数据,再决定下单和平仓的时机。我们后面会再介绍。

EA的生命周期

EA的默认生命周期包括三个函数,

· onInit

· onDeInit

· onTick

和几个可选函数

· onChartEvent

· onTimer

· onTester等

onInit

EA被MT4加载时的入口,只会执行一遍。

一般用来做全局变量初始化,UI界面绘制等操作。

onDeInit

MT4在结束一个EA时会调用onDeInit,代表着一个EA的生命周期结束。只会执行一次。

在这个函数里一般会做全局变量释放,和UI控件释放的操作。

onTick

MT4运行过程中会在有新数据来到的时候通过tick调用EA的onTick接口。

EA在收到onTick调用之后,需要检查新的数据是否满足设定的逻辑。这是一个极高频的接口,在正式环境上是毫秒级的。

onTick在回测的时候也会被调用,但频率是根据回测时设定的tick级别,从1sec到1h都有。

其他可选接口
onChartEvent

EA可以在K线图上绘制控件,用户通过控件的点击修改EA的变量等参数。这些点击事件会通过onChartEvent发送给EA处理。

onTimer

定时接口。EA初始化的时候可以通过 setTimer() 接口设定一个时间间隔,每次到点的时候会调用EA的onTimer接口。我们可以在onTimer里做一些状态校验操作,比如发送邮件,发送告警等操作。

onTester

测试接口,一般不需要实现。

编译运行EA

MT4是一个运行EA的应用,它可以加载已经编译好的EA程序,程序的后缀是ex4。

GoldFlag28.mq4 编译后-> GoldFlag28.ex4

我们把一个mq4的源码编译后,会在同个目录下得到一个ex4程序。

它的编译需要用MT4提供的应用:MetaEditor

MetaEditor在MT4的安装目录下可以找到。打开后界面是这样的。

MetaEditor提供了全套开发功能,甚至包括断点调试。

通过文件->新建项目,新建一个叫QuantSample的项目,然后把上面的代码复制进去。

编译后就可以在MT4的EA栏里面看到刚刚新建的QuantSample EA了。

运行EA

操作方式在上一篇里介绍过。如果一切没问题,会看到在交易里有个订单

让它运行一段时间,在满足条件后它会自动平仓。

然后在历史记录里就有一条记录,

不能交易等问题

MT4需要在有账户的情况下才能交易,我们在运行EA前需要先注册一个模拟账户,然后在左边登录它。

有些MT4第一次打开后会默认有个模拟账户,这种情况就不用管它了

推荐两种申请账户的办法
· 手机下载MT4客户端,申请MT4自带的MetaQuote服务器的模拟账户

· 通过真实交易平台注册模拟账户

这里推荐第二种方式,MetaQuote的服务器速度慢,而且短时间不使用的话会被删除,需要重复申请比较麻烦。

注册链接1

注册链接2

注册后申请开通一个Demo账号,记住账号ID和密码。

第一次登陆MT4需要手动搜索服务器,选择开设模拟账户。

输入刚注册的服务器的名字,点扫描

然后取消,我们只需要它缓存好服务器,这时候再点登陆交易账户,就可以看到注册的服务器了。


输入账号密码,现在就可以正常的交易了。

量化交易入门--写第一个量化程序相关推荐

  1. 【量化】量化交易入门系列6:量化交易学习书籍推荐(二)

    作者:悠悠做神仙 来源: 恒生LIGHT云社区 上一篇 量化交易入门系列5:量化交易学习书籍推荐(一) 我们介绍一些量化交易一些操作和理论性书籍,可能对于刚入门的大家而言,可能有些枯燥.所以这篇文章, ...

  2. 【量化】量化交易入门系列5:量化交易学习书籍推荐(一)

    作者:悠悠做神仙 来源: 恒生LIGHT云社区 量化交易入门系列,给大家介绍了关于量化交易的数据源获取.编程语言推荐.经典的交易策略,那么本篇将介绍一些比较经典的量化交易书籍. 书籍是人类智慧的结晶, ...

  3. python股票量化交易入门到实践_量化资料学习《Python与量化投资从基础到实战》+《量化交易之路用Python做股票量化分析》+《组织与管理研究的实证方法第2版》...

    我们需要利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,重点学习如何高效地利用Python解决投资策略问题,推荐学习<Python与量化投资从基础到实战>等电子资料. ...

  4. python量化交易入门教程_Python期货量化交易基础教程(9)

    9.模块.包和文件: 复杂的程序设计,不可能把所有的代码都写在一个文件里,也不可能把所有文件都放在同一个文件夹里. 9.1.模块 : 模块就是以".py"为扩展名的文件,一个文件中 ...

  5. 【量化】量化交易入门系列2:经典的量化交易策略(上)

    作者:悠悠做神仙 来源: 恒生LIGHT云社区 上一篇文章 量化交易入门系列1:编程语言与数据源 ,介绍了关于量化交易的基本概念,以及要做量化交易的编程语言选择,和量化交易的一些数据源获取工具.那么, ...

  6. 十行代码带你量化交易入门

    说起量化交易入门,很多时候得到的答案都是长长的书单,让人望而却步. 这里,就为新手准备了这篇文章--十行代码带你量化交易入门 数据获取,策略回测,行情链接,交易信号,直接体验整个量化交易的核心流程,立 ...

  7. 量化交易入门读物列表

    量化交易入门读物列表 勿当作专业人员的推荐来看. 量化交易入门-译言网 当真躺着赚钱?量化交易的十大难题 一文弄懂量化交易 怎样躺着赚钱? Quantitative Trading: How to B ...

  8. 量化交易python入门书籍_张杨飞《Python量化交易入门》PDF下载

    张杨飞<Python量化交易入门>PDF下载 首页 > 计算机类 字号:小 中 大 评论:0 条 评论:0 条 Python量化交易入门 [作 者]张杨飞 [形态项] 402 [出版 ...

  9. python量化策略源码_Python量化交易进阶讲堂-创建自定义量化回测框架

    欢迎大家订阅<Python实战-构建基于股票的量化交易系统>小册子,小册子会陆续推出与小册内容相关的专栏文章,对涉及到的知识点进行更全面的扩展介绍,并且会有选择地收录至小册中,更便于广大读 ...

  10. c语言如何输入汉字_C语言入门的第一个小程序

    大部分程序员入门的第一个小程序都是Hello World,还记得当时大一的时候,我室友还特意为了这个发了个说说,现在想起来好有意思,哈哈好了废话不多说,直接干. (PS:如果学过自动忽略) #incl ...

最新文章

  1. 在Ubuntu 14.04 64bit下玩转Qvod快播Linux山寨版本
  2. AOP埋点从入门到放弃(二)
  3. java局部变量说法不正确的是_关于Java的成员变量和局部变量,下面说法错误的是...
  4. 好技术领导和差技术领导区别在哪里
  5. h5怎么加入php代码,HTML5主要新增标签的使用代码分享
  6. 小姐姐笔记:我是如何学习简单源码拓展视野的
  7. 第二十四天 多维数组
  8. 霸主–统治和管理API的地方
  9. mac抹掉磁盘重装系统未能与服务器取得联系_Mac重装系统不再难:苹果电脑重装系统教程...
  10. 你遇到过最尴尬的糗事是什么?
  11. JBox - 模态窗口,工具提示和消息 jQuery 插件
  12. java集合之Stack栈基础
  13. Latex初学入门记载
  14. 挨踢部落故事汇(2):机缘所致转型之路
  15. 1055 集体照 (25分)
  16. 冠军方案解读 | nnUNet改进提升笔记
  17. 3种常用的缓存读写策略
  18. python 换硬币
  19. docker中没有vi/vim命令
  20. 阿里云二手域名哪些值得买?

热门文章

  1. 为什么我的淘宝店铺动态评分清零了?
  2. 电阻参数_电阻/电阻器的主要参数
  3. paypal php 退款,PayPal的Restful-API方式退款、WEB支付、回调
  4. iPS细胞治疗糖尿病的研究
  5. MAC 安装JD-GUI
  6. c语言怎么写最小公倍数的函数,c语言最小公倍数怎么求
  7. 假设检验方法-T检验、Z检验、F检验、卡方检验
  8. Django操作views(一)
  9. 软件工程毕设(四)·调研报告
  10. 电子邮箱地址怎么填?如何登陆电子邮箱地址?