直到昨天有人要求我将 ThinkOrSwim 脚本转换为 MQL4 指标时,我才听说过 ThinkOrSwrim。
部分代码如下:
input length = 21;
input price = close;
input ATRs=1;
input trueRangeAverageType = AverageType.WILDERS;
def flag;
def EMA = ExpAverage(close, length);
def shift1 = ATRs * MovingAverage(trueRangeAverageType, TrueRange(high, close, low), length);
我想请您检查一下,让我知道我的理解是否正确。
input ATRs=1; // This should be a multiplier for ATR, then I think I should give it a double
//type for more flexible control.
input trueRangeAverageType = AverageType.WILDERS;
//As far as I understood, wilders is the same as SMMA in MQL.
.
def shift1 = ATRs * MovingAverage(trueRangeAverageType, TrueRange(high, close, low), length);
这是这段代码的主要部分,我需要你的帮助。我的理解如下
ATRs ==>> Just a multiplier
我认为这条线的其余部分正在计算 ATR,对吧?如果是这样,那么我可以看到我不能简单地将其转换为 iATR(在 mql 中),因为我们无法在 mql4 中选择 ATR 的 MA Methode。然后我认为首先我必须将每个柱的“真实范围”放入一个数组中,然后使用这个数组作为价格来源来获得平均值。
MQL4:
for(int i = 0; i < rates_total; i++)
{
data[i] = iATR(_Symbol, TF_1, 1, i);
}
for(int i = 0; i < limit; i++)
{
ExtBuffer[i] = iMAOnArray(data, 0, Inplenght, 0, InpMAMethod, i);
}
如果我的方法正确,那么我认为 iATR 周期必须为 1,才能获得每个柱的 TrueRange 而不是 TrueRanges 的平均值。然后将可变长度(来自 thinkOrSwim 输入)作为 iMAOnArray 的周期参数。
我将不胜感激。
问候
编辑:我忘了问你一些事情,为什么编写这个 thinkscript 代码的程序员要调用这个变量shift1?