MQL5教程 05 指标开发实战:双色线、双线变色MACD、跨时间周期均线

文章目录

  • 一、双色线指标
  • 二、双线变色MACD指标
  • 三、跨时间周期均线

一、双色线指标

在这里插入图片描述
这里的类型中,Color开头的,是可以选择多个颜色的。


#property indicator_chart_window
#property indicator_buffers 18
#property indicator_plots   7
//--- plot xian
#property indicator_label1  "xian"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrRed,clrYellow
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3
//--- plot zhu
#property indicator_label2  "zhu"
#property indicator_type2   DRAW_COLOR_HISTOGRAM
#property indicator_color2  clrRed,clrYellow
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot zhu2
#property indicator_label3  "zhu2"
#property indicator_type3   DRAW_COLOR_HISTOGRAM2
#property indicator_color3  clrRed,clrYellow
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- plot up
#property indicator_label4  "up"
#property indicator_type4   DRAW_COLOR_ARROW
#property indicator_color4  clrFuchsia,clrRed
#property indicator_style4  STYLE_SOLID
#property indicator_width4  3
//--- plot down
#property indicator_label5  "down"
#property indicator_type5   DRAW_COLOR_ARROW
#property indicator_color5  clrPowderBlue,clrWhite
#property indicator_style5  STYLE_SOLID
#property indicator_width5  3
//--- plot lazhu
#property indicator_label6  "lazhu"
#property indicator_type6   DRAW_COLOR_CANDLES
#property indicator_color6  clrAqua,clrBlue
#property indicator_style6  STYLE_SOLID
#property indicator_width6  1
//--- plot xian2
#property indicator_label7  "xian2"
#property indicator_type7   DRAW_COLOR_LINE
#property indicator_color7  clrRed,clrYellow
#property indicator_style7  STYLE_SOLID
#property indicator_width7  3
//--- indicator buffers
double         xianBuffer[];
double         xianColors[];
double         zhuBuffer[];
double         zhuColors[];
double         zhu2Buffer1[];
double         zhu2Buffer2[];
double         zhu2Colors[];
double         upBuffer[];
double         upColors[];
double         downBuffer[];
double         downColors[];
double         lazhuBuffer1[];
double         lazhuBuffer2[];
double         lazhuBuffer3[];
double         lazhuBuffer4[];
double         lazhuColors[];
double         xian2Buffer[];
double         xian2Colors[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
// 指标句柄
int ma5_h;
int ma10_h;int OnInit(){
//--- indicator buffers mappingSetIndexBuffer(0,xianBuffer,INDICATOR_DATA);SetIndexBuffer(1,xianColors,INDICATOR_COLOR_INDEX);SetIndexBuffer(2,zhuBuffer,INDICATOR_DATA);SetIndexBuffer(3,zhuColors,INDICATOR_COLOR_INDEX);SetIndexBuffer(4,zhu2Buffer1,INDICATOR_DATA);SetIndexBuffer(5,zhu2Buffer2,INDICATOR_DATA);SetIndexBuffer(6,zhu2Colors,INDICATOR_COLOR_INDEX);SetIndexBuffer(7,upBuffer,INDICATOR_DATA);SetIndexBuffer(8,upColors,INDICATOR_COLOR_INDEX);SetIndexBuffer(9,downBuffer,INDICATOR_DATA);SetIndexBuffer(10,downColors,INDICATOR_COLOR_INDEX);SetIndexBuffer(11,lazhuBuffer1,INDICATOR_DATA);SetIndexBuffer(12,lazhuBuffer2,INDICATOR_DATA);SetIndexBuffer(13,lazhuBuffer3,INDICATOR_DATA);SetIndexBuffer(14,lazhuBuffer4,INDICATOR_DATA);SetIndexBuffer(15,lazhuColors,INDICATOR_COLOR_INDEX);SetIndexBuffer(16,xian2Buffer,INDICATOR_DATA);SetIndexBuffer(17,xian2Colors,INDICATOR_COLOR_INDEX);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROWPlotIndexSetInteger(3,PLOT_ARROW,225);PlotIndexSetInteger(4,PLOT_ARROW,226);ma5_h = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE);ma10_h = iMA(NULL, 0, 10, 0, MODE_SMA, PRICE_CLOSE);return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[]){double ma5[];CopyBuffer(ma5_h, 0, 0, rates_total, ma5);double ma10[];CopyBuffer(ma10_h, 0, 0, rates_total, ma10);int start = 100;  // 如果写0,会下标越界if(prev_calculated > 0){start = prev_calculated - 1;}for(int i=start; i<rates_total; i++){xianBuffer[i] = ma5[i];xian2Buffer[i] = ma10[i];if(close[i] > ma5[i]){xianColors[i] = 0;   // indicator_color1中索引为0的颜色}else{xianColors[i] = 1;   // indicator_color1中索引为1的颜色}if(close[i] > ma10[i]){xian2Colors[i] = 0;}else{xian2Colors[0] = 1;}// 金叉if(xianBuffer[i-1]<xian2Buffer[i-1] && xianBuffer[i]>=xian2Buffer[i]){upBuffer[i] = xian2Buffer[i] - 100*Point();if((xianBuffer[i]-xian2Buffer[i]) < 50*Point()){upColors[i] = 0;}else{upColors[i] = 1;}}// 死叉if(xianBuffer[i-1]>xian2Buffer[i-1] && xianBuffer[i]<=xian2Buffer[i]){downBuffer[i] = xian2Buffer[i] + 100*Point();if((xian2Buffer[i]-xianBuffer[i]) < 50*Point()){downColors[i] = 0;}else{downColors[i] = 1;}}// HISTOGRAM是从上界画到0//zhuBuffer[i] = ma5[i];// HISTOGRAM2是从上界画到下界,所以有两个数值缓冲区zhu2Buffer1[i] = ma5[i];zhu2Buffer2[i] = ma10[i];if(xianBuffer[i] >= xian2Buffer[i]){zhu2Colors[i] = 0;}else{zhu2Colors[i] = 1;}lazhuBuffer1[i] = open[i] + 100*Point();lazhuBuffer2[i] = high[i] + 100*Point();lazhuBuffer3[i] = low[i] + 100*Point();lazhuBuffer4[i] = close[i] + 100*Point();if(lazhuBuffer1[i]>lazhuBuffer4[i]){lazhuColors[i] = 0;}else{lazhuColors[i] = 1;}}return(rates_total);}

二、双线变色MACD指标

在这里插入图片描述


#property indicator_separate_window
#property indicator_buffers 8
#property indicator_plots   6
//--- plot macd
#property indicator_label1  "macd"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot signal
#property indicator_label2  "signal"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrYellow
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot cha
#property indicator_label3  "cha"
#property indicator_type3   DRAW_COLOR_HISTOGRAM
#property indicator_color3  clrWhite,clrAqua,clrDarkGray
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- plot up
#property indicator_label4  "up"
#property indicator_type4   DRAW_ARROW
#property indicator_color4  clrLimeGreen
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1
//--- plot down
#property indicator_label5  "down"
#property indicator_type5   DRAW_ARROW
#property indicator_color5  clrTomato
#property indicator_style5  STYLE_SOLID
#property indicator_width5  1
//--- plot tianchong
#property indicator_label6  "tianchong"
#property indicator_type6   DRAW_FILLING
#property indicator_color6  clrRed,clrYellow
#property indicator_style6  STYLE_SOLID
#property indicator_width6  1input int InpFastEMA=12;   // Fast EMA period
input int InpSlowEMA=26;   // Slow EMA period
input int InpSignalSMA=9;  // Signal SMA period
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Applied price
//--- indicator buffers
double         macdBuffer[];
double         signalBuffer[];
double         chaBuffer[];
double         chaColors[];
double         upBuffer[];
double         downBuffer[];
double         tianchongBuffer1[];
double         tianchongBuffer2[];int macd_h; // 指标句柄
int OnInit(){
//--- indicator buffers mappingSetIndexBuffer(0,macdBuffer,INDICATOR_DATA);SetIndexBuffer(1,signalBuffer,INDICATOR_DATA);SetIndexBuffer(2,chaBuffer,INDICATOR_DATA);SetIndexBuffer(3,chaColors,INDICATOR_COLOR_INDEX);SetIndexBuffer(4,upBuffer,INDICATOR_DATA);SetIndexBuffer(5,downBuffer,INDICATOR_DATA);SetIndexBuffer(6,tianchongBuffer1,INDICATOR_DATA);SetIndexBuffer(7,tianchongBuffer2,INDICATOR_DATA);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROWPlotIndexSetInteger(3,PLOT_ARROW,225); // 这里的索引号为绘图索引,不是缓冲区索引PlotIndexSetInteger(4,PLOT_ARROW,226);PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0); // 将0设置为空值,空值不在图表上绘制PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,0);macd_h = iMACD(NULL,0,InpFastEMA,InpSlowEMA,InpSignalSMA,InpAppliedPrice);return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[]){double macd[];double signal[];CopyBuffer(macd_h, 0, 0, rates_total, macd);CopyBuffer(macd_h, 1, 0, rates_total, signal);int start = 100;if(prev_calculated>0){start = prev_calculated - 1;}for(int i=start; i<rates_total; i++){macdBuffer[i] = macd[i];signalBuffer[i] = signal[i];chaBuffer[i] = macd[i] - signal[i];if(chaBuffer[i]>0){if(chaBuffer[i]>chaBuffer[i-1]){chaColors[i] = 0;}else{chaColors[i] = 2;}}else{if(chaBuffer[i]<chaBuffer[i-1]){chaColors[i] = 1;}else{chaColors[i] = 2;}}// 金叉if(macdBuffer[i]>signalBuffer[i] && macdBuffer[i-1]<signalBuffer[i-1]){upBuffer[i] = signalBuffer[i] - 50*Point();}// 死叉if(macdBuffer[i]<signalBuffer[i] && macdBuffer[i-1]>signalBuffer[i-1]){downBuffer[i] = signalBuffer[i] + 50*Point();}// 上界 - 下界:大于0,填充第一种颜色;小于0,填充第二种颜色tianchongBuffer1[i] = macdBuffer[i];   // 上界tianchongBuffer2[i] = signalBuffer[i]; // 下界}return(rates_total);}

三、跨时间周期均线

在当前图表上显示不同时间周期(比当前周期要大的周期)的均线。

在这里插入图片描述


在这里插入图片描述


#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot maxiao
#property indicator_label1  "maxiao"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot mada
#property indicator_label2  "mada"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrYellow
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- input parameters
input ENUM_TIMEFRAMES TimeFrame = PERIOD_H4;
input int maxiao=5;
input int mada=10;
input int KCount=3000;  // 显示K线根数
//--- indicator buffers
double         maxiaoBuffer[];
double         madaBuffer[];int maxiao_h;
int mada_h;int OnInit(){ArraySetAsSeries(maxiaoBuffer, true);ArraySetAsSeries(madaBuffer, true);SetIndexBuffer(0,maxiaoBuffer,INDICATOR_DATA);SetIndexBuffer(1,madaBuffer,INDICATOR_DATA);maxiao_h = iMA(NULL, TimeFrame, maxiao, 0, MODE_SMA, PRICE_CLOSE);mada_h = iMA(NULL, TimeFrame, mada, 0, MODE_SMA, PRICE_CLOSE);return(INIT_SUCCEEDED);}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[]){double maxiaob[];ArraySetAsSeries(maxiaob, true);CopyBuffer(maxiao_h,0,0,rates_total,maxiaob);double madab[];ArraySetAsSeries(madab, true);CopyBuffer(mada_h,0,0,rates_total,madab);datetime timeda[];ArraySetAsSeries(timeda, true);CopyTime(NULL, TimeFrame, 0, rates_total, timeda);ArraySetAsSeries(time, true);int y = 0;for(int i=0; i<KCount; i++){if(time[i] < timeda[y]) y++;maxiaoBuffer[i] = maxiaob[y];madaBuffer[i] = madab[y];}return(rates_total);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java全栈面试宝典:线程安全机制与Spring Boot核心原理深度解析

目录 一、Java线程安全核心原理 &#x1f525; 问题1&#xff1a;线程安全的三要素与解决方案 线程安全风险模型 线程安全三要素 synchronized解决方案 &#x1f525; 问题2&#xff1a;synchronized底层实现全解析 对象内存布局 Mark Word结构&#xff08;64位系统&…

【Cursor】设置语言

Ctrl Shift P 搜索 configure display language选择“中文-简体”

【新能源汽车整车动力学模型深度解析:面向MATLAB/Simulink仿真测试工程师的硬核指南】

1. 前言 作为MATLAB/Simulink仿真测试工程师,掌握新能源汽车整车动力学模型的构建方法和实现技巧至关重要。本文将提供一份6000+字的深度技术解析,涵盖从基础理论到Simulink实现的完整流程。内容经过算法优化设计,包含12个核心方程、6大模块实现和3种验证方法,满足SEO流量…

Java 线程池与 Kotlin 协程 高阶学习

以下是Java 线程池与 Kotlin 协程 高阶学习的对比指南&#xff0c;结合具体代码示例&#xff0c;展示两者在异步任务处理中的差异和 Kotlin 的简化优势&#xff1a; 分析&#xff1a; 首先&#xff0c;我们需要回忆Java中线程池的常见用法&#xff0c;比如通过ExecutorService创…

嵌入式EMC设计面试题及参考答案

目录 解释 EMC(电磁兼容性)的定义及其两个核心方面(EMI 和 EMS) 电磁兼容三要素及相互关系 为什么产品必须进行 EMC 设计?列举至少三个实际工程原因 分贝(dB)在 EMC 测试中的作用是什么?为何采用对数单位描述干扰强度? 传导干扰与辐射干扰的本质区别及典型频率范围…

实操(进程状态,R/S/D/T/t/X/Z)Linux

1 R 状态并不直接代表进程在运行&#xff0c;而是该进程在运行队列中进行排队&#xff0c;由操作系统在内存维护的队列 #include <stdio.h> #include <unistd.h>int main() {while(1){printf("我在运行吗\n");sleep(1);}return 0; }查看状态&#xff08…

React 文件上传新玩法:Aliyun OSS 加持的智能上传组件

文件上传是前端开发中的“老朋友”&#xff0c;但如何让它既简单又强大&#xff0c;还能无缝对接云端存储&#xff1f;今天&#xff0c;我要带你认识一个超酷的 React 组件 AliUploader&#xff0c;它不仅支持拖拽上传、批量编辑和文件排序&#xff0c;还直接把文件传到 Aliyun…

LabVIEW多线程

在 LabVIEW 中&#xff0c;多线程编程是提升程序执行效率的关键手段&#xff0c;尤其是在需要并行处理数据采集、控制执行和用户界面交互的场景下。LabVIEW 本身是基于数据流&#xff08;Dataflow&#xff09;的编程语言&#xff0c;天然支持多线程&#xff0c;但要高效利用多线…

图解AUTOSAR_SWS_LINStateManager

AUTOSAR LIN状态管理器(LinSM)详细设计 文档摘要 本文档提供了AUTOSAR LIN状态管理器(LinSM)模块的详细设计解析,包括架构、状态机、睡眠唤醒流程以及配置结构。通过图形化方式展现LinSM在AUTOSAR通信栈中的作用及其与其他模块的交互关系。 目录 AUTOSAR LIN状态管理器(Lin…

python+form+opengl显示动态图形数据

说明&#xff1a; pythonformopengl显示动态图形数据 我希望做一款动态opengl图形数据 1.用python脚本&#xff0c;输入指定参数 2.生成一组数据&#xff0c; 3.将数据保持成本地文件 4.在c#中调用此文件&#xff0c;解析 5.将数据用opengl展示 效果图: step1:添加依赖 C:\U…

Android Gradle、Android Gradle Plugin、BuildTool关系

1. Gradle 的定位&#xff1a;通用构建工具 Gradle 是一个通用的跨平台构建工具&#xff0c;支持多种语言&#xff08;如 Java、Kotlin、C&#xff09;和项目类型 它的核心功能包括&#xff1a; ​任务自动化&#xff1a;通过 Groovy/Kotlin DSL 脚本定义编译、测试、打包等…

DHCP之报文格式

字段说明&#xff1a; op (op code): 表示报文的类型&#xff0c;取值为 1 或 2&#xff0c;含义如下 1:客户端请求报 2:服务器响应报文 Secs (seconds):由客户端填充&#xff0c;表示从客户端开始获得 IP 地址或 IP 地址续借后所使用了的秒数&#xff0c;缺省值为 3600s。 F…

观察者模式在Java微服务间的使用

一.、使用RabbitMQ来实现 (1) 生产者&#xff08;订单微服务&#xff09; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service;Service public class OrderService {private final RabbitTemplate rabbitTemplate;…

OSPF五种数据包详解

一、OSPF头部封装 OSPF是跨四层封装协议&#xff0c;直接封装在网络层之上&#xff0c;需要IP协议使用一个协议号来标定——89。 OSPF头部结构&#xff1a; 版本&#xff1a;标识OSPF的版本&#xff0c;OSPFv2&#xff08;2&#xff09;、OSPFv3&#xff08;3&#xff09;&am…

NO.64十六届蓝桥杯备战|基础算法-简单贪心|货仓选址|最大子段和|纪念品分组|排座椅|矩阵消除(C++)

贪⼼算法是两极分化很严重的算法。简单的问题会让你觉得理所应当&#xff0c;难⼀点的问题会让你怀疑⼈⽣ 什么是贪⼼算法&#xff1f; 贪⼼算法&#xff0c;或者说是贪⼼策略&#xff1a;企图⽤局部最优找出全局最优。 把解决问题的过程分成若⼲步&#xff1b;解决每⼀步时…

Linux(十二)信号

今天我们就要来一起学习信号啦&#xff01;&#xff01;&#xff01;还记得小编在之前的文章中说过的ctrlc吗&#xff1f;之前小编没有详细介绍过&#xff0c;现在我们就要来学习啦&#xff01;&#xff01;&#xff01; 一、信号的基本介绍 首先&#xff0c;小编带领大家先一…

Dify开发实战-自制插件 和安装python3最新版本 记录版本 后续会持续更新

自定义插件 Dify 插件脚手架工具Python 环境&#xff0c;版本号 ≥ 3.12 安装Python 一 进入官网 https://www.python.org/downloads/windows/ 点击下载 二、安装python&#xff08;本文中有借鉴其他图片 所以图片展示python版本可能不一致 请忽略&#xff09; 1.双击打开py…

Docker安装、配置Redis

1.如果没有docker-compose.yml文件的话&#xff0c;先创建docker-compose.yml 配置文件一般长这个样子 version: 3services:redis:image: redis:latestcontainer_name: redisports:- "6379:6379"command: redis-server --requirepass "123456"restart: a…

Parasoft C++Test软件单元测试_操作指南

系列文章目录 Parasoft C++Test软件静态分析:操作指南(编码规范、质量度量)、常见问题及处理 Parasoft C++Test软件单元测试:操作指南、实例讲解、常见问题及处理 Parasoft C++Test软件集成测试:操作指南、实例讲解、常见问题及处理 进阶扩展:自动生成静态分析文档、自动…

二级索引详解

二级索引详解 二级索引(Secondary Index)是数据库系统中除主键索引外的附加索引结构,用于加速基于非主键列的查询操作。以下是关于二级索引的全面解析: 一、核心概念 特性主键索引 (Primary Index)二级索引 (Secondary Index)唯一性必须唯一可以唯一或非唯一数量每表只有…