涉及的内容

现在我们来通过MT5自带的MQL5编辑器来编写一个简单的交易EA。这个EA我们把它命名为“FirstEA”,它实现如下功能:
1、初始化的时候打印一些信息到MT5终端
2、每一次报价的时候判断前一个BAR的均线值(均线周期参数通过EA的输入参数设定)
3、前一个已经收盘的BAR穿越了均线就执行开仓操作
这个代码基本完成以上的内容。这些代码都已经编译通过。
需要注意的是:代码只展示MQL5的函数使用方法,不能用于真实交易

创建EA


上图中包括了创建的基本步骤,以后按照涉及的内容逐步细化。

代码展示

#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"//--- 输入参数定义部分
input int      indicator_param = 15; //MA周期设定//+------------------------------------------------------------------+
//| EA初始化函数,由系统调用,调用场景至少包括:
//| 1、EA首次加载到图表的时候执行
//| 2、参数发生变化的时执行
//| 3、EA重新编译并且EA未从图表中卸载的时候执行
//| 4、图表周期发生变化的时候执行
//+------------------------------------------------------------------+
int OnInit() {
//---//输出基本信息:当前Symbol,当前图表周期PrintFormat("OnInit::symbol= %s, time_peroid= %d",  Symbol(), Period());
//---return(INIT_SUCCEEDED);
}//+------------------------------------------------------------------+
//| EA析构函数,
//| 系统在环境发生变化或者EA被从所在图表中卸载的时候调用。
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---//输出基本信息:当前Symbol,当前图表周期以及卸载原因PrintFormat("OnDeinit::symbol= %s, time_peroid= %d, reason= %d",  Symbol(), Period(), reason);
}//+------------------------------------------------------------------+
//| 每一次报价发生的时候调用,交易高峰期报价会很频繁,
//| 因此,此函数会非常频繁的被系统调用。
//| 实现的功能:
//| 1、获取15当前图表周期的简单均线(MA)值
//| 2、如果当前一K线的开盘价和收盘价从上往下穿越的时候,当前周期现价开做多
//| 3、反之开做空
//+------------------------------------------------------------------+
void OnTick() {
//---//获取上一周期的均线值double pre_ma_value = iMA(Symbol(), PERIOD_CURRENT, indicator_param, 1, MODE_SMA, PRICE_CLOSE);//获取上一周期的开盘价和收盘价double pre_close = iClose(Symbol(), PERIOD_CURRENT, 1);double pre_open  = iOpen(Symbol(), PERIOD_CURRENT, 1);//判断向上或者向下穿越if(pre_open > pre_ma_value && pre_close < pre_ma_value) {openBuyOrder(Symbol(), 0.1, 0, 0);} else if(pre_open < pre_ma_value && pre_close > pre_ma_value) {openSellOrder(Symbol(), 0.1, 0, 0);} else {//啥都不做}
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+
//| 做多
//+------------------------------------------------------------------+
bool openBuyOrder(string input_symbol, double input_shares, double sl_price, double tp_price) {MqlTradeRequest request = {0};MqlTradeResult  result  = {0};request.action    = TRADE_ACTION_DEAL;request.type      = ORDER_TYPE_BUY;request.symbol    = input_symbol;request.volume    = input_shares;request.deviation = 5;//偏差设置,大致为滑点request.price     = SymbolInfoDouble(input_symbol, SYMBOL_ASK);//ASK价格if(sl_price > 0) {request.sl = sl_price;}if(tp_price > 0) {request.tp = tp_price;}bool is_success = OrderSend(request, result);if(is_success == false) {PrintFormat("openBuyOrder::OrderSend error %d", GetLastError());PrintFormat("openBuyOrder::retcode=%u  deal=%I64u  order=%I64u", result.retcode, result.deal, result.order);}return is_success;
}//+------------------------------------------------------------------+
//| 做空
//+------------------------------------------------------------------+
bool openSellOrder(string input_symbol, double input_shares, double sl_price, double tp_price) {MqlTradeRequest request = {0};MqlTradeResult  result  = {0};request.action    = TRADE_ACTION_DEAL;request.type      = ORDER_TYPE_SELL;request.symbol    = input_symbol;request.volume    = input_shares;request.deviation = 5;//偏差设置,大致为滑点request.price     = SymbolInfoDouble(input_symbol, SYMBOL_BID);//BID价格if(sl_price > 0) {request.sl = sl_price;}if(tp_price > 0) {request.tp = tp_price;}bool is_success = OrderSend(request, result);if(is_success == false) {PrintFormat("openSellOrder::OrderSend error %d", GetLastError());PrintFormat("openSellOrder::retcode=%u  deal=%I64u  order=%I64u", result.retcode, result.deal, result.order);}return is_success;
}
//+------------------------------------------------------------------+

关于代码

这个代码会是一个大纲,以后的章节会逐步细化其中的很多细节,这些内容包括:
1、关于系统的回调函数的概念以及用法,这里只处理了报价触发的方法,还有类似交易成功或者失败的回调,定时器等等。
2、一些MQL5的语法的细节
3、如何使用系统自带的指标以及自定义的指标。
4、如何进行交易,包括:市价成交(代码演示的内容)、挂单、止盈止损设置,追踪止盈止损等等
5、查询账户信息以及交易历史记录
6、类的定义以及使用
7、持久化操作,包括:文件操作、数据库操作等

EA开发系列---开发第一个交易EA相关推荐

  1. 【安卓开发系列 -- 开发环境】Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具)

    [安卓开发系列 -- 开发环境]Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具) [1]Unbuntu ...

  2. 【转】storm 开发系列一 第一个程序

    原文: http://blog.csdn.net/csfreebird/article/details/49104777 --------------------------------------- ...

  3. Office365开发系列——开发一个全功能的Word Add-In

    2016年10月我参加了在北京举行的DevDays Asia 2016 - Office 365应用开发"48小时黑客马拉松",我开发的一个Word Add-In Demo--Wo ...

  4. [ Office 365 开发系列 ] 开发模式分析

    前言 本文完全原创,转载请说明出处,希望对大家有用. 在正式开发Office 365应用前,我们先了解一下Office 365的开发模式,根据不同的应用场景,我们选择最适合的开发模式. 阅读目录 Of ...

  5. SDL游戏开发系列第一话:Hello SDL

      各位读者朋友大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com.从今天起博主将带领大家一起走进SDL游戏开发的世界,如果说此前的Unity3D游戏开 ...

  6. Android 快速开发系列 打造万能的ListView GridView 适配器

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...

  7. BizTalk开发系列(十二) Schema设计之Group与Order

    更多内容请查看:BizTalk动手实验系列目录                       BizTalk 开发系列 开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk ...

  8. 高通开发系列 - 总目录

    By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! ...

  9. [ Office 365 开发系列 ] Graph Service

    前言 本文完全原创,转载请说明出处,希望对大家有用. 通过[ Office 365 开发系列 ] 开发模式分析和[ Office 365 开发系列 ] 身份认证两篇内容的了解,我们可以开始使用Offi ...

最新文章

  1. 【Codeforces】1015B Obtaining the String(字符串 交换)
  2. 如何为Pyramid添加Middleware
  3. Spring Boot——2分钟构建springweb mvc REST风格HelloWorld
  4. 【转】简述TCP的三次握手过程
  5. Android 4.4 packageinstaller之权限获取及展现
  6. GDCM:Torture的测试程序
  7. 自动化要不要学python-老男孩linux自动化运维|做人工智能为什么要学Python呢?
  8. oracle查询多张表交集,Oracle中对两个数据表交集的查询-专栏,ORACLE
  9. java 并发变量_二、Java多线程编程 (对象及变量的并发访问)
  10. 数据结构与算法分析:第1、2章:引论和算法分析
  11. SQlite数据库的C编程接口(四) 绑定参数(Bound Parameters) ——《Using SQlite》读书笔记
  12. python3: failed with error code 1 in /tmp/pip-build-qp5puacl/Pillow/
  13. Python深度学习环境配置全流程
  14. 免费的在线PDF转换word网站推荐
  15. 在Vmware 14 pro 中安装中兴新支点操作系统
  16. 几何视角下的线性代数(3)---基与特征
  17. document操作自定义属性
  18. Qt5初见笔记(一)使用单个.pro文件创建Hello World工程(参考Sherriff, Nicholas《Learn Qt5》)
  19. iOS集成支付宝快捷支付
  20. Easy3D配置、安装教程(补充教程)

热门文章

  1. Terraform expressions 表达式
  2. 安装Burn-P3过程种的一些问题
  3. 基于B/S的酒店客房管理系统
  4. 解决使用hive打印无效INFO日志问题
  5. 自组网中继台_自组网电台,传输稳定距离远明溪
  6. 【最全最详细】分布式配置中心 Apollo
  7. 一条python 语句绘制浪漫的心形图案-----附解释(七夕专供)
  8. 回不去啦, 车次天天晚点.
  9. python切片是深拷贝还是浅拷贝_Python 深拷贝和浅拷贝
  10. 手机测试mysql_三种测试华为手机真伪的方法,你确定都知道吗?学会可进行自查...