MQL5:写一个简单的自定义指标

2 篇文章 0 订阅

MQL5:写一个简单的自定义指标

在MT5平台中,交易者可根据自己的习惯、需要,去编写供自己参考的指标。

如何写一个简单的自定义的指标?

在这里将写一个 取当日最高价和最低价中值的折线 的指标 作为演示(结尾有可运行的完整代码)。

写指标一般可以概述为如下步骤:
1.新建自定义指标项目
2.代码部分
2.1 设置指标属性
2.2 定义数据存放的数组
2.3 在初始化函数 OnInit中设置数组映射
2.4 在OnCalculate函数中,编写绘制指标的算法

1.新建自定义指标项目。

在编辑器中,点击左上角的 新

在这里插入图片描述
然后在 向导 中 选择 自定义指标。
在这里插入图片描述

填写 自定义指标 的名字和 作者信息
在这里插入图片描述在模板选择中选择 OnCalculate(…,开盘,最高,最低,收盘)

为什么选择OnCalculate(…,开盘,最高,最低,收盘)?
首先OnCalculate是所有价格计算处理函数,其次此处我们要写的是一个取当日最高价和最低价中值的折线指标。选择带有最高价(&high[])和最低价(&low[])参数的OnCalculate更合适。

在这里插入图片描述
然后点击下一步,下一步不选择独立窗口,最后点击完成

在得到的my_indicator.mq5中可以看到已经生成的模板

//+------------------------------------------------------------------+
//|                                                 my_indicator.mq5 |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

到这步就已经完成了自定义指标的第一步准备。

2.代码部分
2.1 设置指标属性

使用语句 **#property identifier value **来设置指标属性。

#property
每个mql5-程序都允许指定额外的名为#property的特殊参数,有助于客户端不用启动程序就能够进行贴切的互联网服务。首先,它包括指标外部设置。包括文件中描述的属性完全忽略。属性必须在mql5-主文件中指定。
该部分写在全局,
具体代码和释义如下:

#property indicator_chart_window //显示依附在 图表窗口 的指标
#property indicator_buffers 1    //表示有1个缓冲数组
#property indicator_plots   1    //表示有1种类型的指标图解

#property indicator_label1  "my_indicator"
#property indicator_type1   DRAW_LINE //type后的1为图解系列的序号,从1开始排序。DRAW_LINE表示画线
#property indicator_color1  clrGold //color后1为图解系列的序号,从1开始排序。clrBlue为颜色。
#property indicator_style1  STYLE_SOLID//STYLE_SOLID为实线
#property indicator_width1  1      //线段的粗细为1

指标的颜色名称在 MQL5帮助文档里有
例如:网页颜色
在这里插入图片描述

2.2 定义数据存放的数组

该数组为自定义。在本文中,因为要计算的是 当前K线的最高价和最低价的中值,所以应该定义一个双精度数组。

double mybuffer[];//定义一个存放数据的数组,该数组存放用于描绘指标的值
2.3 在初始化函数 OnInit中设置数组映射

关键部分

int OnInit()
  {
//SetIndexBuffer函数在全局 水平使用一维动态 双精度 数组捆绑指定指标缓冲区。INDICATOR_DATA是数据
   SetIndexBuffer(0,mybuffer,INDICATOR_DATA);//指标缓冲数组映射。
   return(INIT_SUCCEEDED);
  }
2.4 在OnCalculate函数中,编写绘制指标的算法

这个算法就是简单的(最高价+最低价)/2 。代码如下。
注意要先检查循环的变量值,若忽略该部分,可能导致画不出指标 。

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 pos;
   int i;
//检查循环变量
   if(prev_calculated==0)
      pos=0;
   else
      pos=prev_calculated-1;
//main cycle
   for(i=pos; i<rates_total; i++)
     {
      //--- 指标值写入缓冲区
      mybuffer[i]=(high[i]+low[i])/2;
     }
//return value of prev_calculated for next call
   return(rates_total);
 }

然后编译,效果如图

在这里插入图片描述
到此,就完成了一个简单指标的编写。
完整代码,放在这

//设置指标属性
#property indicator_chart_window //显示依附在 图表窗口 的指标
#property indicator_buffers 1    //表示有1个缓冲数组
#property indicator_plots   1    //表示有1种类型的指标图解
#property indicator_label1  "my_indicator"
#property indicator_type1   DRAW_LINE //type后的1为图解系列的序号,从1开始排序。DRAW_LINE表示画线
#property indicator_color1  clrGold //color后1为图解系列的序号,从1开始排序。clrBlue为颜色。
#property indicator_style1  STYLE_SOLID//STYLE_SOLID为实线
#property indicator_width1  1      //线段的粗细为1

double mybuffer[];//定义一个存放数据的数组,该数组用于描绘指标
int OnInit()
  {
//SetIndexBuffer函数在全局 水平使用一维动态 双精度 数组捆绑指定指标缓冲区。INDICATOR_DATA是数据z
   SetIndexBuffer(0,mybuffer,INDICATOR_DATA);//指标缓冲数组映射。
   return(INIT_SUCCEEDED);
  }
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 pos;
   int i;
//检查循环变量
   if(prev_calculated==0)
      pos=0;
   else
      pos=prev_calculated-1;
//main cycle
   for(i=pos; i<rates_total; i++)
     {
      //--- 指标值写入缓冲区
      mybuffer[i]=(high[i]+low[i])/2;
     }
//return value of prev_calculated for next call
   return(rates_total);
 }

以上。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MQL5交易指标源码是用于编自定义交易指标的源代码。MQL5是MetaQuotes Language 5的缩,是用于开发交易策略和指标的高级编程语言。 MQL5交易指标源码主要用于技术分析,并且可以根据交易者的需求进行修改和定制。通过编MQL5指标源码,交易者可以计算并显示不同的技术指标,如移动平均线,相对强弱指标(RSI),布林带和MACD等。这些指标有助于交易者识别市场趋势、超买超卖条件以及可能的价格反转点。 MQL5交易指标源码通常包括以下几个部分:初始化函数、重新计算函数和绘图函数。初始化函数用于指标的初始化设置,重新计算函数用于计算指标的值,绘图函数用于在图表上绘制指标的图形。交易者可以根据自己的需求来编这些函数,并使用MQL5编程语言中的各种函数和操作来处理指标的计算和绘图。 编MQL5交易指标源码需要具备一定的编程知识和经验。交易者需要理解技术指标的原理和计算方法,并熟悉MQL5编程语言的语法和函数。此外,交易者还需要对金融市场和交易策略有一定的了解,以便正确地应用和使用这些指标。 总之,MQL5交易指标源码是编自定义交易指标的源代码,交易者可以根据自己的需求来定制和修改这些代码。通过编MQL5指标源码,交易者能够使用各种技术指标来辅助分析市场,并制定有效的交易策略。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值