MT5和MT4箭头:代码差异详解与自定义指南

理财问答 (50) 2个月前

MT5和MT4箭头:代码差异详解与自定义指南_https://cj001.lansai.wang_理财问答_第1张

MT4和MT5都是流行的外汇交易平台,箭头指标在其中扮演着重要的角色,帮助交易者识别潜在的买卖信号。然而,由于MT4和MT5采用不同的编程语言(MQL4和MQL5)和平台架构,其箭头指标的代码实现存在显著差异。理解这些差异对于希望自定义或移植箭头指标的交易者至关重要。

MT4 (MQL4) 箭头指标代码结构

MQL4 语言基础

MT4 使用 MQL4 语言,这是一种基于 C++ 的过程式编程语言。其核心代码结构通常包含以下几个部分:

  • 属性声明: 使用 #property 声明指标的名称、窗口显示方式等属性。
  • 变量声明: 定义指标计算所需的变量,例如价格数据、缓冲区等。
  • init() 函数: 在指标加载时执行一次,用于初始化变量和缓冲区。
  • deinit() 函数: 在指标卸载时执行一次,用于释放资源。
  • start() 函数: 指标的核心函数,在每个新的价格变动时执行,用于计算指标值并在图表上绘制箭头。

MQL4 箭头绘制示例

以下是一个简单的 MQL4 箭头指标示例,用于在价格上涨时绘制向上箭头,价格下跌时绘制向下箭头:

#property indicator_separate_window#property indicator_buffers 1#property indicator_color1 Bluedouble         ExtMapBuffer[];int init()  {   SetIndexBuffer(0,ExtMapBuffer);   SetIndexStyle(0,DRAW_ARROW,EMPTY,3,Blue);   SetIndexArrow(0,233);  // 233 是向上箭头的 Wingdings 字符代码   return(0);  }int deinit()  {   return(0);  }int start()  {   int counted_bars=IndicatorCounted();   if(counted_bars<0) return(-1);   if(counted_bars>0) counted_bars--;   int limit=Bars-counted_bars;   for(int i=limit-1; i>=0; i--)     {      if(Close[i] > Open[i])        {         ExtMapBuffer[i] = Low[i] - Point*5;        }      else if (Close[i] < Open[i])        {         ExtMapBuffer[i] = High[i] + Point*5;         SetIndexArrow(0,234); // 234 是向下箭头的 Wingdings 字符代码        }      else         ExtMapBuffer[i] = EMPTY_VALUE;     }   return(0);  }

MT5 (MQL5) 箭头指标代码结构

MQL5 语言基础

MT5 使用 MQL5 语言,这是一种面向对象的编程语言,也基于 C++。相比 MQL4,MQL5 在语法、数据类型和函数库方面都有显著改进,提供了更强大的功能和更高的灵活性。

MQL5 的核心代码结构通常包含以下几个部分:

  • 属性声明: 使用 #property 声明指标的名称、窗口显示方式等属性。
  • 输入参数: 使用 input 关键字声明指标的输入参数,允许用户自定义指标的行为。
  • 变量声明: 定义指标计算所需的变量,例如价格数据、缓冲区等。
  • OnInit() 函数: 在指标加载时执行一次,用于初始化变量和缓冲区。
  • OnDeinit() 函数: 在指标卸载时执行一次,用于释放资源。
  • OnCalculate() 函数: 指标的核心函数,在每个新的价格变动时执行,用于计算指标值并在图表上绘制箭头。

MQL5 箭头绘制示例

以下是一个简单的 MQL5 箭头指标示例,功能与上面的 MQL4 示例相同:

#property indicator_separate_window#property indicator_buffers 1#property indicator_color1 clrBluedouble         ExtMapBuffer[];int OnInit()  {   IndicatorSetInteger(INDICATOR_DIGITS, _Digits);   SetIndexBuffer(0,ExtMapBuffer,INDICATOR_DATA);   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_ARROW);   PlotIndexSetInteger(0,PLOT_ARROW,233); // 233 是向上箭头的 Wingdings 字符代码   PlotIndexSetInteger(0,PLOT_COLOR,clrBlue);   return(INIT_SUCCEEDED);  }void OnDeinit(const int reason)  {  }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[])  {   int limit = rates_total - prev_calculated;   for(int i=limit-1; i>=0; i--)     {      if(close[i] > open[i])        {         ExtMapBuffer[i] = low[i] - Point()*5;        }      else if (close[i] < open[i])        {         ExtMapBuffer[i] = high[i] + Point()*5;         PlotIndexSetInteger(0,PLOT_ARROW,234); // 234 是向下箭头的 Wingdings 字符代码        }      else         ExtMapBuffer[i] = EMPTY_VALUE;     }   return(rates_total);  }

MT4 与 MT5 箭头代码的关键差异

特性 MT4 (MQL4) MT5 (MQL5)
编程语言 过程式 面向对象
核心函数 start() OnCalculate()
输入参数 通常通过全局变量定义 使用 input 关键字显式声明
箭头字符 使用 SetIndexArrow() 函数设置 使用 PlotIndexSetInteger(0,PLOT_ARROW,value) 函数设置
数据访问 使用预定义的数组 (例如 Close[], High[]) 通过 OnCalculate() 函数的参数传递 (例如 close[], high[])

自定义箭头指标的注意事项

  • 选择合适的平台: 根据您的交易需求和编程经验选择 MT4 或 MT5。
  • 学习 MQL4/MQL5 语言: 掌握相应的编程语言是自定义指标的基础。
  • 理解平台文档: 仔细阅读 MT4 和 MT5 的guanfang文档,了解 API 和函数库的使用方法。
  • 参考现有代码: 借鉴现有的箭头指标代码,了解其实现原理和技巧。
  • 调试和测试: 在模拟账户中充分测试您的指标,确保其功能正常且不会影响交易。

扩展资源

  • MT4 guanfang文档:MetaTrader 4 Documentation
  • MT5 guanfang文档:MetaTrader 5 Documentation
  • MQL4 社区:MQL4 Community
  • MQL5 社区:MQL5 Community

希望本文能帮助您理解 mt5和mt4的箭头怎么不一样的代码 差异,并为自定义箭头指标提供指导。 请记住,编写指标需要一定的编程知识和耐心,祝您交易顺利!