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

article/2025/9/19 6:45:21

《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使用了这个模版之后,只需要修改信号函数部分,是不是很简单?


http://chatgpt.dhexx.cn/article/lnJFW7Od.shtml

相关文章

金叉走势图解上半年暴跌行情,如何证明macd金叉死叉模型确实有用?

《MACD指标详解》课程学员&#xff1a;如何证明一种指标实战效果是否有效&#xff1f; 同济桥博士&#xff1a;今年的上半年是特殊的一个上半年&#xff0c;我们国内的A股也遇到了从来没有遇到过的疫情。行情特别的罕见&#xff0c;暴跌加超强反弹。我之前也有一个理论&#x…

python A股金叉死叉量化交易

文章目录 前言准备python代码总结 前言 本研究旨在探讨 A 股市场的均线理论及波动性变化情况。在研究中&#xff0c;我们使用了历史股价数据&#xff0c;并基于这些数据计算了不同时间段的简单移动平均线和指数移动平均线。 我们的结果表明&#xff0c;A 股市场的均线理论较为…

量化投资策略——金叉死叉策略

本文向大家详细介绍如何在BigQuant平台开发传统的择时策略&#xff0c;旨在帮助大家对BigQuant平台回测有初步印象。 金叉死叉策略其实就是双均线策略。策略思想是&#xff1a;当短期均线上穿长期均线时&#xff0c;形成金叉&#xff0c;此时买入股票。当短期均线下穿长期均线时…

漆学军:均线交叉,金叉做多,死叉做空的例子程序

《MT4EA编程速成教程》中第33页习题 第一题&#xff1a;将交易信号改成均线交叉&#xff0c;金叉做多&#xff0c;死叉做空。 金叉死叉&#xff0c;需要获取小均线两个点&#xff0c;大均线两个点&#xff0c;然后比较四个点的大小变化&#xff0c;就能判断金叉和死叉。 当黄…

Backtrader简单均线交易策略“金叉和死叉”

Backtrader简单均线交易策略“金叉和死叉” 1、使用5日均线和10日均线 MA5和MA10的交叉点作为买入和卖出信号 交易策略是量化交易的核心&#xff0c;MA均线策略也称为SMA均线策略&#xff0c;是量化交易的最简单的量化交易策略之一&#xff0c;当5日均线向上穿过10日均线的时…

平滑KDJ指标公式,减少无效金叉死叉

软件自带的KDJ指标比较敏感&#xff0c;在震荡上涨或者震荡下跌时会反复出现金叉死叉信号&#xff0c;不利于指标的使用以及进一步开发。为了减少无效金叉死叉&#xff0c;本文对KDJ指标公式进行平滑处理。 一、KDJ指标对比 以下为软件自带的KDJ指标&#xff0c;加上了图标。本…

用python找出400多万次KDJ金叉死叉,胜率有多高?附代码

引言: 邢不行的系列帖子“量化小讲堂”&#xff0c;通过实际案例教初学者使用python进行量化投Z&#xff0c;了解行业研究方向 这是邢不行第90期量化小课堂分享 作者 l 邢不行 不知道大家有没有发现&#xff0c;打开任意一个交易软件&#xff0c;无论是针对A股、美股、期货、…

金叉死叉图解,金叉死叉的短线操作方法

小沙我自己长期以来一直对二级市场交易很有热情,从三年前开始,就不断地在理论实践两方面逐渐加深对于金融市场的理解,最近发现一个叫QR量化社区的平台,也给了自己很多灵感。经历了最近的市场波动,突然来了动力,在此就分享一篇自己这段时间的一点总结。 最近,股票市场不…

python股票量化交易(4)---金叉与死叉

纯是济世之心&#xff0c;则为端。苟有一毫媚世之心&#xff0c;即为曲。纯是爱人之心&#xff0c;则为端。有一毫愤世之心&#xff0c;即为曲。纯是敬人之心&#xff0c;则为端。有一毫玩世之心&#xff0c;即为曲。 文章目录 什么是金叉与死叉金叉与死叉的运算绘制金叉与死叉…

量化交易——双均线策略(金叉死叉)

一、双均线概念 均线&#xff1a;对于每一个交易日&#xff0c;都可以计算出前N天的移动平均值&#xff0c;然后把这些平均值连起来&#xff0c;成为一条线&#xff0c;就叫做N日移动平均线。移动平均线常用线有5日、10日、30日、60日、120日的指标。 5日和10日的是短线操作参照…

什么是金叉、死叉

转载自&#xff1a;http://blog.sina.com.cn/s/blog_1578c31fd0102wuxu.html 均线系统最基本最简单第一大战法就是“金叉做多&#xff0c;死叉做空”&#xff0c;它是趋势发生转变的重要信号。金叉也称“黄金交叉”&#xff0c;就是一条短期均线成功上穿另一条长期均线&#xf…

“鬼影”浅析 - 反病毒,信息安全,网络安全,反木马,病毒资讯平台,安全解决方案,电脑使用技巧,杀毒软件交流,anti-virus,民间反病毒联盟

访问原文 这个鬼影病毒相信大家都比较熟悉&#xff0c;但是最近似乎那个什么XX工作室已经宣布停止开发了&#xff0c;所以逐渐淡出的人们的视线&#xff0c;但是这个病毒的技术含量比较高&#xff0c;值得去学习…… 鬼影主体:WMPLAYER.EXE MD5:f377e0f7c8f1a37cd5c92cf7aea3c8…

写计算机病毒吗,会写计算机病毒很牛吗

满意答案 djipuh90 2016.02.11 采纳率&#xff1a;52% 等级&#xff1a;12 已帮助&#xff1a;8216人 先假设你说的病毒是os系统病毒&#xff0c;以windows系统为例 类似熊猫烧香这种层次的病毒&#xff0c;大概只能算是非常非常普通的&#xff0c;技术上也没有什么特别之处…

鬼影3分析笔记

这是学习笔记&#xff0c;供自己再次调试回忆&#xff0c;别人看没什么价值&#xff0c;因为写的太乱了。而且有些点自己也没理清 前面是wowocock老师的文档 首先根据教程了解到感染好mbr之后存在磁盘最后的区段的信息有 1.ProtectMode Code是Hook了OsLoader.exe之后获得控制…

鬼影病毒分析报告

鬼影病毒分析报告 一、 鬼影病毒概述 这是一个***下载器&#xff0c;使用了ring3恢复内核钩子、感染磁盘引导区&#xff08;MBR&#xff09;、多种方法结束杀毒软件等 技术自启动并对抗杀毒软件。完全感染后&#xff0c;是一个看不到可疑文件、没有启动项、普通重装系统也无法解…

用友与鬼影病毒

昨天一客户打电话&#xff0c;说软件无法登陆。 上门查看现象如下&#xff1a; 用友服务无法启动&#xff0c;双击启动&#xff0c;报错&#xff1a;本地计算机上的用友通服务启动后又停止了。一些服务自动停止&#xff0c;如果它们没有什么可做的&#xff0c;例如性能和日志警…

鬼影病毒

鬼影病毒是指寄生在磁盘 主引导记录&#xff08;MBR&#xff09;&#xff0c;即使格式化重装系统&#xff0c;也无法清除的病毒。 2010年3月15日&#xff0c;国内某安全中心发现一种被命名为“鬼影”的电脑病毒&#xff0c;由于该病毒成功运行后&#xff0c;在进程中、系统启动…

鬼影病毒6.0分析

原理图 文件名功能1001.exe主模块camhgzsswk.sys释放模块p2phook.sys释放模块的克隆p2pc.ini攻击模块配置文件safemon.dll注入攻击模块beep.sys持久化攻击模块 主模块1001.exe [1]创建用户mima1&#xff0c;运行ipconfig进行掩饰。 [2]释放病毒驱动sys文件。 [3]将病毒驱动注…

鬼影病毒和浏览器锁狼狈为奸,用户浏览器遭强行劫持

鬼影病毒和浏览器锁狼狈为奸&#xff0c;用户浏览器遭强行劫持 据金山毒霸安全实验室监测&#xff0c;发现鬼影病毒变种再次高发&#xff0c;其中一个伪装成阿里旺旺的变种感染量就达1.6万台/天。中毒电脑桌面出现多个图标&#xff0c;浏览器被锁定为go2000.com或soolaa.com&am…

新鬼影病毒

今天和明天是最后两天宿舍有空调的日子啦,暑假宿舍没空调啊,悲催T__T 好吧,今天是最精华的部分啦对于鬼影3的分析,剩下的都是浮云啦,alg.exe不准备分析了,能用OD调试的货.分析起来只是时间问题.但是MBR和之后的保护模式的代码就不一样啦同学们,纯静态分析,伤不起啊,各种硬编码,…