1

直到昨天有人要求我将 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

4

0 回答 0