《MT4EA编程速成教程》中第33页习题:

第二题:将交易信号改成MACD交叉,金叉做多,死叉做空。

这道题的重点和难点就是获取MACD的指标值,MACD和之前的抛物线指标或者均线指标不一样,稍微复杂些。

MACD指标有两个缓存数组,一个显示的是柱体部分,一个显示的是红色虚线。

double  iMACD( string       symbol,           // 品种int          timeframe,        // 时间周期int          fast_ema_period,  // 快线周期int          slow_ema_period,  // 慢线周期int          signal_period,    // 信号线周期 int          applied_price,    // 应用于价格 int          mode,             // 线索引 int          shift             // 位移 );

系统规定,柱体部分的线索引为0,常量是,红色虚线的线索引为1。

下面是MQL4参考中的常量信息:

ID

Value

Description

MODE_MAIN

0

基础指标线

MODE_SIGNAL

1

信号线

获取MACD指标基础指标线和信号线的值,可以用如下参数:

//如果要获取位移为1的MACD的柱体指标值,可以用如下参数:
double macd_main1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
//如果要获取位移为2的MACD的柱体指标值,可以用如下参数: double macd_main2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
//如果要获取位移为1的MACD的信号线指标值,可以用如下参数: double macd_signal1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
//如果要获取位移为2的MACD的信号线指标值,可以用如下参数: double macd_signal2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2);

金叉和死叉就是四个数据的比较了,信号函数修改如下

int signal(){int res=0;
//如果要获取位移为1的MACD的柱体指标值,可以用如下参数:double macd_main1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
//如果要获取位移为2的MACD的柱体指标值,可以用如下参数:double macd_main2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
//如果要获取位移为1的MACD的信号线指标值,可以用如下参数:double macd_signal1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
//如果要获取位移为2的MACD的信号线指标值,可以用如下参数:double macd_signal2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2);if(macd_main1>macd_signal1 && macd_main2<macd_signal2){res=1;}if(macd_main1<macd_signal1 && macd_main2>macd_signal2){res=-1;}return(res);}
//+------------------------------------------------------------------+

这个EA的完整代码如下:

//+------------------------------------------------------------------+
//|                                                 Test_EA_05_2.mq4 |
//|                                                             云开 |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "http://www.forexmt4.cn"
#property link      "http://www.forexmt4.cn"#property description "【漆天编程】 习题EA2"
#property description "  "
#property description "这是一款测试EA,作者QQ:80364276"
#property description "  "
#property description "发布时间:2021.10.26"
#property strict
#property icon "//Images//sea.ico"input double lots=0.1; //交易手数
input int SL=600;      //止损点数
input int TP=200;      //止盈点数//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit(){
//---
//---return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason){
//---}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick(){int buys=0;  //多单持仓有几笔int sells=0; //空单持仓有几笔int signal=signal();for(int i=0; i<OrdersTotal(); i++){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){if(OrderSymbol()==Symbol() && OrderMagicNumber()==16384 && OrderType()==OP_BUY){buys++;if(signal<0){bool res=OrderClose(OrderTicket(),OrderLots(),Bid,0);if(res){Print("订单平仓成功");}return;}if(OrderStopLoss()==0){bool res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-SL*Point,OrderOpenPrice()+TP*Point,0);if(res)Print("订单修改成功");}}if(OrderSymbol()==Symbol() && OrderMagicNumber()==16384 && OrderType()==OP_SELL){sells++;if(OrderStopLoss()==0){bool res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+SL*Point,OrderOpenPrice()-TP*Point,0);if(res)Print("订单修改成功");}if(signal>0){bool res=OrderClose(OrderTicket(),OrderLots(),Ask,0);if(res){Print("订单平仓成功");}return;}}}}
//---if(signal>0 && buys==0){int ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,3,0,0,"My buy order",16384,0,clrGreen);if(ticket<0){Print("OrderSend failed with error #",GetLastError());}else{Print("OrderSend placed successfully");}}if(signal<0 && sells==0){int ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,3,0,0,"My sell order",16384,0,clrRed);if(ticket<0){Print("OrderSend failed with error #",GetLastError());}else{Print("OrderSend placed successfully");}}}
//+------------------------------------------------------------------+
int signal(){int res=0;
//如果要获取位移为1的MACD的柱体指标值,可以用如下参数:double macd_main1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
//如果要获取位移为2的MACD的柱体指标值,可以用如下参数:double macd_main2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
//如果要获取位移为1的MACD的信号线指标值,可以用如下参数:double macd_signal1=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
//如果要获取位移为2的MACD的信号线指标值,可以用如下参数:double macd_signal2=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2);if(macd_main1>macd_signal1 && macd_main2<macd_signal2){res=1;}if(macd_main1<macd_signal1 && macd_main2>macd_signal2){res=-1;}return(res);}
//+------------------------------------------------------------------+

一单一结的EA使用了这个模版之后,只需要修改信号函数部分,是不是很简单?

漆学军:MACD交叉,金叉做多,死叉做空的例子程序相关推荐

  1. 金叉和死叉看哪几条线?股票macd金叉和死叉怎么看?

    资本市场上,每天都在演绎着转瞬即逝的遗憾,和曙光来临的场景.怎么更好的把握住机遇,人工智能和<股市三大猜想>指出人类在金融领域探索的脚步从未停止过.资本追逐利益是投资者的责任与使命,是金融 ...

  2. macd金叉kdj死叉的准确率_MACD金叉不涨又死叉

    小王根据<乔博士:MACD指标详解>学习到的内容,于是QR社区写下心得分享给大家,MACD金叉KDJ死叉 以下QR社区告诉我们MACD金叉KDJ死叉的解释: MACD指标(Moving A ...

  3. macd金叉公式成功率_MACD金叉kdj死叉和20日线可靠吗

    全球金融市场中,投资者使用各式各样的方法进行投资交易,有价值投资者,有技术分析投资者,那么孰高孰低呢?最近笔者在QR社区学习了<乔博士:MACD指标详解>就给大家讲的就是如何拥有一套自己的 ...

  4. 什么叫金叉和死叉?什么叫macd二次死叉?

    根据QR社区的统计显示,现在股票市场上将近有90%的松散客户都是处于亏损状态,那么原因是什么呢?因为他们都是用散户思维在炒股.所以要是想改变现在的基本状况,主要还是要改变投资者的思维模式. 一.什么叫 ...

  5. 股票中的KD指标金叉和死叉

    股票中的KD指标金叉和死叉    -[ ] Time:2007-01-23 Tag: 投资理财 1.一般而言, D线由下转上为买入信号,由上转下为卖出信号. 2.KD都在0-100的区间内波动,50为 ...

  6. 金融量化-金叉和死叉

    金融量化分析-金叉和死叉 ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt import ...

  7. Python量化编程如何判断均线数据是金叉还是死叉?-股市数据均线策略编程分析

    Python量化编程如何判断均线数据是金叉还是死叉?-股市数据均线策略编程分析 以平安银行的股票数据为例进行分析 1.使用tushare获取股市数据,直接上代码: import pandas as p ...

  8. 金融分析之基本ma5 及金叉、死叉

    1 import pandas as pd 2 import numpy as np 3 import matplotlib.pylab as plt 4 5 res=pd.read_csv(&quo ...

  9. (多头、空头、金叉、死叉、卖出信号、买出信号)的python处理

    1.指标概念 均值性指标:以平均数据作为参考的指标 随机性指标:以最高价最低价等为参考的指标 2.多头.空头.金叉.死叉.卖出信号.买出信号 多头:短期均线在长期均线上方 空头:短期均线在长期均线下方 ...

最新文章

  1. 我的数据工具学习之旅
  2. 四、唱歌不如跳舞(上)
  3. 哈工大计算机系女生的宿舍,哈工大的硕博士们,这次被学校折腾惨了!
  4. Maven-生命周期
  5. 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的餐厅收银管理系统
  7. 华为鸿蒙系统手机央视,央视再次确认!华为投入巨资打造鸿蒙系统生态:体验媲美七成安卓...
  8. 【考证】大一规划、考证大军、水水水!
  9. ASP.NET 实现上传EXCEL,利用NOPI操作,转换得到DataTable
  10. [tensorflow]tensorflw2.1.0张量和变量介绍
  11. C++ Make、Makefile、CMake和CMakeLists关系
  12. 面试突击41:notify是随机唤醒吗?
  13. coreseek mysql_coreseek,php,mysql全文检索部署(一)-阿里云开发者社区
  14. RecycleView多布局的实现
  15. 【每周一爬】爬取盗版小说网的小说
  16. WindowsGhost 还原系统 0xc0000428 错误
  17. 王老吉为何败给加多宝?
  18. Cordova 拨打电话_Cordova 项目开启拨打电话
  19. 华为特聘PPT设计师年薪百万:改变你的不是打卡,而是坚持
  20. jqweui 正在加载样式的用法

热门文章

  1. “F5G+EIoT“构建能源物联网,助力电力物联网数据服务
  2. es是什么意思java_Elasticsearch----java操作ES
  3. 给mongodb设置密码
  4. 移动端tab切换时下划线的滑动效果
  5. 车辆底盘自动集中润滑系统的研究分析
  6. 一零二九、scalac: Token not found: C:\Users\Tuomasi\AppData\Local\JetBrains\IdeaIC2021
  7. ORACLE RAC ASM磁盘规划
  8. 35款免费的国外名片PSD模板
  9. 谷歌收购摩托罗拉乱弹
  10. Event事件-6:new Event自定义事件 / addEvent绑定自定义 / trigger触发自定义 / removeEvent移除自定义