EA开发系列---开发第一个交易EA
涉及的内容
现在我们来通过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相关推荐
- 【安卓开发系列 -- 开发环境】Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具)
[安卓开发系列 -- 开发环境]Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具) [1]Unbuntu ...
- 【转】storm 开发系列一 第一个程序
原文: http://blog.csdn.net/csfreebird/article/details/49104777 --------------------------------------- ...
- Office365开发系列——开发一个全功能的Word Add-In
2016年10月我参加了在北京举行的DevDays Asia 2016 - Office 365应用开发"48小时黑客马拉松",我开发的一个Word Add-In Demo--Wo ...
- [ Office 365 开发系列 ] 开发模式分析
前言 本文完全原创,转载请说明出处,希望对大家有用. 在正式开发Office 365应用前,我们先了解一下Office 365的开发模式,根据不同的应用场景,我们选择最适合的开发模式. 阅读目录 Of ...
- SDL游戏开发系列第一话:Hello SDL
各位读者朋友大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是http://qinyuanpei.com.从今天起博主将带领大家一起走进SDL游戏开发的世界,如果说此前的Unity3D游戏开 ...
- Android 快速开发系列 打造万能的ListView GridView 适配器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...
- BizTalk开发系列(十二) Schema设计之Group与Order
更多内容请查看:BizTalk动手实验系列目录 BizTalk 开发系列 开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk ...
- 高通开发系列 - 总目录
By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! ...
- [ Office 365 开发系列 ] Graph Service
前言 本文完全原创,转载请说明出处,希望对大家有用. 通过[ Office 365 开发系列 ] 开发模式分析和[ Office 365 开发系列 ] 身份认证两篇内容的了解,我们可以开始使用Offi ...
最新文章
- 【Codeforces】1015B Obtaining the String(字符串 交换)
- 如何为Pyramid添加Middleware
- Spring Boot——2分钟构建springweb mvc REST风格HelloWorld
- 【转】简述TCP的三次握手过程
- Android 4.4 packageinstaller之权限获取及展现
- GDCM:Torture的测试程序
- 自动化要不要学python-老男孩linux自动化运维|做人工智能为什么要学Python呢?
- oracle查询多张表交集,Oracle中对两个数据表交集的查询-专栏,ORACLE
- java 并发变量_二、Java多线程编程 (对象及变量的并发访问)
- 数据结构与算法分析:第1、2章:引论和算法分析
- SQlite数据库的C编程接口(四) 绑定参数(Bound Parameters) ——《Using SQlite》读书笔记
- python3: failed with error code 1 in /tmp/pip-build-qp5puacl/Pillow/
- Python深度学习环境配置全流程
- 免费的在线PDF转换word网站推荐
- 在Vmware 14 pro 中安装中兴新支点操作系统
- 几何视角下的线性代数(3)---基与特征
- document操作自定义属性
- Qt5初见笔记(一)使用单个.pro文件创建Hello World工程(参考Sherriff, Nicholas《Learn Qt5》)
- iOS集成支付宝快捷支付
- Easy3D配置、安装教程(补充教程)
热门文章
- Terraform expressions 表达式
- 安装Burn-P3过程种的一些问题
- 基于B/S的酒店客房管理系统
- 解决使用hive打印无效INFO日志问题
- 自组网中继台_自组网电台,传输稳定距离远明溪
- 【最全最详细】分布式配置中心 Apollo
- 一条python 语句绘制浪漫的心形图案-----附解释(七夕专供)
- 回不去啦, 车次天天晚点.
- python切片是深拷贝还是浅拷贝_Python 深拷贝和浅拷贝
- 手机测试mysql_三种测试华为手机真伪的方法,你确定都知道吗?学会可进行自查...