漆学军:MACD交叉,金叉做多,死叉做空的例子程序
《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交叉,金叉做多,死叉做空的例子程序相关推荐
- 金叉和死叉看哪几条线?股票macd金叉和死叉怎么看?
资本市场上,每天都在演绎着转瞬即逝的遗憾,和曙光来临的场景.怎么更好的把握住机遇,人工智能和<股市三大猜想>指出人类在金融领域探索的脚步从未停止过.资本追逐利益是投资者的责任与使命,是金融 ...
- macd金叉kdj死叉的准确率_MACD金叉不涨又死叉
小王根据<乔博士:MACD指标详解>学习到的内容,于是QR社区写下心得分享给大家,MACD金叉KDJ死叉 以下QR社区告诉我们MACD金叉KDJ死叉的解释: MACD指标(Moving A ...
- macd金叉公式成功率_MACD金叉kdj死叉和20日线可靠吗
全球金融市场中,投资者使用各式各样的方法进行投资交易,有价值投资者,有技术分析投资者,那么孰高孰低呢?最近笔者在QR社区学习了<乔博士:MACD指标详解>就给大家讲的就是如何拥有一套自己的 ...
- 什么叫金叉和死叉?什么叫macd二次死叉?
根据QR社区的统计显示,现在股票市场上将近有90%的松散客户都是处于亏损状态,那么原因是什么呢?因为他们都是用散户思维在炒股.所以要是想改变现在的基本状况,主要还是要改变投资者的思维模式. 一.什么叫 ...
- 股票中的KD指标金叉和死叉
股票中的KD指标金叉和死叉 -[ ] Time:2007-01-23 Tag: 投资理财 1.一般而言, D线由下转上为买入信号,由上转下为卖出信号. 2.KD都在0-100的区间内波动,50为 ...
- 金融量化-金叉和死叉
金融量化分析-金叉和死叉 ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt import ...
- Python量化编程如何判断均线数据是金叉还是死叉?-股市数据均线策略编程分析
Python量化编程如何判断均线数据是金叉还是死叉?-股市数据均线策略编程分析 以平安银行的股票数据为例进行分析 1.使用tushare获取股市数据,直接上代码: import pandas as p ...
- 金融分析之基本ma5 及金叉、死叉
1 import pandas as pd 2 import numpy as np 3 import matplotlib.pylab as plt 4 5 res=pd.read_csv(&quo ...
- (多头、空头、金叉、死叉、卖出信号、买出信号)的python处理
1.指标概念 均值性指标:以平均数据作为参考的指标 随机性指标:以最高价最低价等为参考的指标 2.多头.空头.金叉.死叉.卖出信号.买出信号 多头:短期均线在长期均线上方 空头:短期均线在长期均线下方 ...
最新文章
- 我的数据工具学习之旅
- 四、唱歌不如跳舞(上)
- 哈工大计算机系女生的宿舍,哈工大的硕博士们,这次被学校折腾惨了!
- Maven-生命周期
- 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
- 基于JAVA+SpringMVC+Mybatis+MYSQL的餐厅收银管理系统
- 华为鸿蒙系统手机央视,央视再次确认!华为投入巨资打造鸿蒙系统生态:体验媲美七成安卓...
- 【考证】大一规划、考证大军、水水水!
- ASP.NET 实现上传EXCEL,利用NOPI操作,转换得到DataTable
- [tensorflow]tensorflw2.1.0张量和变量介绍
- C++ Make、Makefile、CMake和CMakeLists关系
- 面试突击41:notify是随机唤醒吗?
- coreseek mysql_coreseek,php,mysql全文检索部署(一)-阿里云开发者社区
- RecycleView多布局的实现
- 【每周一爬】爬取盗版小说网的小说
- WindowsGhost 还原系统 0xc0000428 错误
- 王老吉为何败给加多宝?
- Cordova 拨打电话_Cordova 项目开启拨打电话
- 华为特聘PPT设计师年薪百万:改变你的不是打卡,而是坚持
- jqweui 正在加载样式的用法
热门文章
- “F5G+EIoT“构建能源物联网,助力电力物联网数据服务
- es是什么意思java_Elasticsearch----java操作ES
- 给mongodb设置密码
- 移动端tab切换时下划线的滑动效果
- 车辆底盘自动集中润滑系统的研究分析
- 一零二九、scalac: Token not found: C:\Users\Tuomasi\AppData\Local\JetBrains\IdeaIC2021
- ORACLE RAC ASM磁盘规划
- 35款免费的国外名片PSD模板
- 谷歌收购摩托罗拉乱弹
- Event事件-6:new Event自定义事件 / addEvent绑定自定义 / trigger触发自定义 / removeEvent移除自定义