量化交易入门--写第一个量化程序

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

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

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 order
      ticket = 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 order
      for (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需要手动搜索服务器,选择开设模拟账户。

在这里插入图片描述

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

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

在这里插入图片描述
输入账号密码,现在就可以正常的交易了。

  • 3
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MetaEditor引入第三方库的具体操作包括:1. 打开MetaEditor,并确保已经选择了需要引入第三方库的项目;2. 在菜单栏中点击"工具",然后点击"库管理器";3. 点击"添加",选择需要引入的库;4. 点击"确定",完成引入第三方库的操作。 ### 回答2: 在MetaEditor中引入第三方库的操作步骤如下: 1. 打开MetaEditor,选择需要引入第三方库的项目。 2. 在项目文件夹中创建一个新的文件夹,用于存放第三方库的文件。 3. 在该文件夹中将第三方库的相关文件复制或移动到此文件夹中。 4. 在MetaEditor的“工具”菜单中,选择“选项”。 5. 在弹出的选项对话框中,选择“MQL4/5”选项卡。 6. 点击“文件夹”按钮,将第三方库文件夹的路径添加到“应用程序终端数据文件夹”或“共享文件夹”的路径之一。 7. 点击“确定”按钮保存设置。 8. 在MetaEditor中打开需要引入第三方库的MQL文件。 9. 在文件的顶部添加一个`#include`预处理指令,后面跟着一个引号和第三方库文件的路径。 10. 在文件中使用第三方库提供的函数或功能。 11. 编译并运行项目,确保第三方库能够正常使用。 请注意,以上步骤仅适用于那些没有提供自动安装程序或适用于MetaEditor的第三方库。对于那些具有自动安装程序的第三方库,您只需要按照安装程序的指示进行安装,并在MetaEditor中选择适当的路径即可引入库文件。同时,确保库文件与MetaEditor版本相匹配,并遵循开发者提供的文档或教程,以正确使用第三方库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值