mql5中基于任意价格数组通过icustom函数调用内建指标函数创建新指标的方法

我通过搜索百度、网上各大论坛、贴吧和mql5社区找了很久都没有找到关于如何用任意价格调用内建指标计算均线的方法,在某个mql5编程的培训视频中讲解如何用任意价格创建均线指时,老师也是自己构建的均线指标而非采用调用内建的iMA函数创建。然后我觉得mql5语言这么强大,应该不可能每个指标都需要自己去创建,应该存在直接调用的方法,于是我通过查阅mql5帮助文件,发现了调用所有内建指标的方法,现在将其分享一下。
在mql5编程中,有很多内建指标函数,例如iMA,iATR,iRSI,iCCI函数等,但是他们的计算输入值只能选择ENUM_APPLIED_PRICE枚举变量中的几个价格或者用iCustom和IndicatorCreate创建的指标处理器(指标处理器也称之为指针或者hander)。即当你直接调用此函数时候,只能选择PRICE_CLOSE,PRICE_OPEN,PRICE_HIGH,PRICE_LOW,PRICE_MEDIAN,PRICE_TYPICAL,PRICE_WEIGHTED**这几个价格计算出指标的buffer值,但是我们往往需要创建其他变量的指标,例如以2倍收盘价创建10日均线指标,这个时候就不能直接将2倍收盘价价格数组放到iMA函数中进行计算,而是需要先将2倍收盘价数组变成指针handler,然后才能放入iMA函数中计算出指标值。****
下面以比较常见的创建均线指标iMA函数为例,展示如何用2倍close_price数组(可换成任意价格数组)调用内建指标计算的方法。在mql5帮助文件中,iMA函数说明文档如下:

iMA
函数返回移动平均数指标处理器。只有一个缓冲区。
int iMA(
string symbol, // 交易品种名称
ENUM_TIMEFRAMES period, // 周期
int ma_period, // 平均周期
int ma_shift, // 平移
ENUM_MA_METHOD ma_method, // 平滑类型
ENUM_APPLIED_PRICE applied_price // 价格或者处理程序类型
);
参量
symbol
[in] 证券交易品种名称,数据用来计算指标。 NULL 值代表当前交易品种。
period
[in] 周期值可以是 ENUM_TIMEFRAMES 值中的一个,0代表当前时间表。
ma_period
[in] 计算移动平均数的平均周期。
ma_shift
[in] 与价格图表有关的指标变化。
ma_method
[in] 平滑类型。可以是 ENUM_MA_METHOD 值中的一个。
applied_price
[in] 使用价格。可以是任意 ENUM_APPLIED_PRICE 价格常量或者另外指标处理器。
返回值
返回特殊技术指标处理器,失败返回 INVALID_HANDLE. 计算机内存从不使用的指标中释放,使用指标处理程序传递到的函数 IndicatorRelease() 。

根据以上说明文档中的最后一个参数applied_price可知,需要将2倍close_price价格变成指标处理器才能作为参数传递到函数中,所以最关键的地方就是如何将2倍close_price数组变成handler。解决这个问题只需要用iCustom函数返回指标处理器即可。
iCustom函数官方说明文档如下:

iCustom
函数返回指定自定义指标的处理器。
int iCustom(
string symbol, // 交易品种名称
ENUM_TIMEFRAMES period, // 周期
string name // 文件夹/自定义指标_名称
… // 指标输入参量列表
);

如果已经创建的指标没有指标输入参数,调用该函数只需输入前三个参数,即“交易品种名称” ,“周期”和“文件夹/自定义指标_名称”。其中“自定义指标_名称”则是你需要用于计算的任意价格数组创建的指标名称。所以需要先创建2倍收盘价的指标,然后在将其放在mql5数据文件indicators文件夹中,命名为“2倍收盘价指标”,然后写入iCustom函数的第三个参数中,即可获得2倍收盘价的指针。
例如通过如下函数调用即可将2倍收盘价数组变成指针。

2倍收盘价的指针=iCustom(Symbol(),PERIOD_CURRENT,”2倍收盘价指标”);

而创建2倍收盘价指标需要需要有mql5指标创建基础知识,先在指标创建mq5文档中定义price2数组和设定该数组为指标的缓冲数组,然后在int OnCalculate函数中加入如下循环

for(int i=0; i<rates_total-1; i++)
{
price2[i]=2
close[i];
//price[I]=close[i];
}
*

以上循环可采用其它优化性能计算方式。
然后通过如下代码获取2倍收盘价10日均线handler:

2倍收盘价10日均线handler=iMA(Symbol(),PERIOD_CURRENT,10,0,MODE_SMA,2倍收盘价的指针);

然后通过如下代码将2倍收盘价10日均线handler变为2倍收盘价10日均线数组,将该数组设置为指标计算的缓冲buffer数组,就实现了2倍收盘价10日均线指标的创建。

CopyBuffer(2倍收盘价10日均线handler,0,0,rates_total,2倍收盘价10日均线数组);

然后可以采用这种方法利用任意价格调用所有内建指标函数创建新的指标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sirhzx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值