文章 "MQL5 中如何调用指标" - 页 2

 

对我来说,它不让我编译文件。

我不知道这到底是怎么回事。

谢谢、

约尔迪

 
感谢你们所做的大量工作!
 

谢谢!

下面是我边玩边整理出来的一个简单示例。

如果有错,请指正,我会修改。

我觉得奇怪的是,这些值似乎与图表上的简单移动平均线不一致。

################### 在脚本中

int period = 21; // 21 条移动平均线
int sampleSize = 100;// 这是您要获取的数据条数
int handle = iCustom(Symbol(),0, "Examples\Custom Moving Average",
period、// 期间
0, // 偏移量
MODE_SMA、// 计算方法
PRICE_CLOSE // 按收盘价计算
);


void OnTick()
{

// 这是一个数组,移动平均值将被复制到其中。
// 这里的每个项都是一个移动平均值
// 数组中的第一个项(位置为 0 的项)是最近的
// 最后一个项是数组 ArraySize() - 1 中的最后一个项
double movingAverageValues[];

ArraySetAsSeries(movingAverageValues,true);
if (CopyBuffer(handle,0,0,sampleSize,movingAverageValues) <0){Print("CopyBufferMA1 error =",GetLastError());}

double currentMovingAverage = movingAverageValues[0];

double earliestMovingAverage = movingAverageValues[ArraySize(movingAverageValues) - 1];


################################# 在 EA 中(注意:OnInit 和 OnTick)

int OnInit(){

int period = 21; // 21 条移动平均线

int sampleSize = 100; //这是希望获取的数据条数
int handle = iCustom(Symbol(),0, "Examples\Custom Moving Average",
period, // Period
0, // 偏移量
MODE_SMA, // 计算方法
PRICE_CLOSE // 按收盘价计算
);

}

OnTick()
{

// 这是一个数组,移动平均值将被复制到其中。
// 这里的每个项都是一个移动平均值
// 数组中的第一个项(位置为 0 的项)是最近的
// 最后一个项是数组 ArraySize() - 1 中的最后一个项
double movingAverageValues[];

ArraySetAsSeries(movingAverageValues,true);
if (CopyBuffer(handle,0,0,sampleSize,movingAverageValues) <0){Print("CopyBufferMA1 error =",GetLastError());}

double currentMovingAverage = movingAverageValues[0];

double earliestMovingAverage = movingAverageValues[ArraySize(movingAverageValues) - 1];

}

 
好文章
 
是啊......发明自己的指标并将其内置到机器人代码中,比每次都编写这些句柄要容易得多...乏味