在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → MT5外汇黄金K线组合数字标记

MT5外汇黄金K线组合数字标记

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:8.47KB
  • 下载次数:0
  • 浏览次数:0
  • 发布时间:2025-07-16
  • 实例类别:一般编程问题
  • 发 布 人:大君没烦恼
  • 文件格式:.mq5
  • 所需积分:2
 相关标签: MT5 数字 MT 组合

实例介绍

【实例简介】在MT5主图上,标记吞没 孕线
【实例截图】

【核心代码】

// ------------------------------------------------------------------
//|                                                      MACross.mq5 |
//|                        Copyright 2024, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
// ------------------------------------------------------------------
#property copyright "Copyright 2024, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots   4

// 绘图设置
#property indicator_type1   DRAW_ARROW
#property indicator_type2   DRAW_ARROW
#property indicator_type3   DRAW_TEXT
#property indicator_type4   DRAW_TEXT
#property indicator_color1  clrBlue
#property indicator_color2  clrRed
#property indicator_color3  clrGold
#property indicator_color4  clrLime
#property indicator_label1  "20-60 Death Cross"
#property indicator_label2  "20-60 Gold Cross"
#property indicator_label3  "5-60 Gold Cross"
#property indicator_label4  "5-60 Death Cross"

// 定义缓冲区
double DeathCross20_60[];
double GoldCross20_60[];
double GoldCross5_60[];
double DeathCross5_60[];

// 五角星符号代码
#define STAR_CHAR 110

// ------------------------------------------------------------------
//| Custom indicator initialization function                         |
// ------------------------------------------------------------------
int OnInit()
{
   // 设置指标缓冲区
   SetIndexBuffer(0, DeathCross20_60, INDICATOR_DATA);
   SetIndexBuffer(1, GoldCross20_60, INDICATOR_DATA);
   SetIndexBuffer(2, GoldCross5_60, INDICATOR_DATA);
   SetIndexBuffer(3, DeathCross5_60, INDICATOR_DATA);
   
   // 设置箭头属性
   PlotIndexSetInteger(0, PLOT_ARROW, STAR_CHAR);
   PlotIndexSetInteger(1, PLOT_ARROW, STAR_CHAR);
   PlotIndexSetInteger(0, PLOT_ARROW_SHIFT, 0);
   PlotIndexSetInteger(1, PLOT_ARROW_SHIFT, 0);
   PlotIndexSetInteger(0, PLOT_ARROW_SIZE, 8);
   PlotIndexSetInteger(1, PLOT_ARROW_SIZE, 8);
   
   // 设置文本属性
   PlotIndexSetString(2, PLOT_LABEL, "1");
   PlotIndexSetString(3, PLOT_LABEL, "2");
   PlotIndexSetInteger(2, PLOT_LABEL_FONT_SIZE, 14);
   PlotIndexSetInteger(3, PLOT_LABEL_FONT_SIZE, 14);
   
   // 设置空值
   ArrayInitialize(DeathCross20_60, EMPTY_VALUE);
   ArrayInitialize(GoldCross20_60, EMPTY_VALUE);
   ArrayInitialize(GoldCross5_60, EMPTY_VALUE);
   ArrayInitialize(DeathCross5_60, EMPTY_VALUE);
   
   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[])
{
   // 设置数组为时间序列
   ArraySetAsSeries(close, true);
   ArraySetAsSeries(high, true);
   ArraySetAsSeries(low, true);
   ArraySetAsSeries(time, true);
   
   // 需要至少60根K线
   if (rates_total < 60) 
      return(0);
      
   // 计算起始位置
   int start;
   if (prev_calculated == 0) {
      start = 60;
   } else {
      start = prev_calculated - 1;
   }
   
   // 主循环
   for (int i = start; i < rates_total && !IsStopped(); i )
   {
      // 重置缓冲区值
      DeathCross20_60[i] = EMPTY_VALUE;
      GoldCross20_60[i] = EMPTY_VALUE;
      GoldCross5_60[i] = EMPTY_VALUE;
      DeathCross5_60[i] = EMPTY_VALUE;
      
      // 计算均线值
      double ma5_0   = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, i);
      double ma5_1   = iMA(NULL, 0, 5, 0, MODE_SMA, PRICE_CLOSE, i-1);
      double ma20_0  = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, i);
      double ma20_1  = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, i-1);
      double ma60_0  = iMA(NULL, 0, 60, 0, MODE_SMA, PRICE_CLOSE, i);
      double ma60_1  = iMA(NULL, 0, 60, 0, MODE_SMA, PRICE_CLOSE, i-1);
      
      // 计算动态偏移量(使用ATR)
      double atr = iATR(NULL, 0, 14, i);
      double offset = atr * 0.5;
      
      // 1. 20日均线死叉60日均线(蓝色五角星)
      if (ma20_0 < ma60_0 && ma20_1 >= ma60_1) {
         DeathCross20_60[i] = low[i] - offset;
      }
      
      // 2. 20日均线金叉60日均线(红色五角星)
      if (ma20_0 > ma60_0 && ma20_1 <= ma60_1) {
         GoldCross20_60[i] = high[i] offset;
      }
      
      // 3. 5日均线金叉60日均线(数字1)
      if (ma5_0 > ma60_0 && ma5_1 <= ma60_1) {
         GoldCross5_60[i] = high[i] offset * 1.5;
      }
      
      // 4. 5日均线死叉60日均线(数字2)
      if (ma5_0 < ma60_0 && ma5_1 >= ma60_1) {
         DeathCross5_60[i] = low[i] - offset * 1.5;
      }
   }
   
   return(rates_total);
}

标签: MT5 数字 MT 组合

实例下载地址

MT5外汇黄金K线组合数字标记

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警