ThinkOrSwim脚本转MQL4指标 ATR计算逻辑正确性核验问询
转换逻辑核验结果
1. input ATRs=1理解核验
你的理解完全正确:
- 该参数是ATR计算结果的乘数,MQL4中定义为
double类型可以支持1.2、2.5这类小数系数,灵活性更高,符合需求。
2. AverageType.WILDERS对应关系核验
你的理解完全正确:
- Wilders发明的平滑平均算法和MQL4中的
SMMA(平滑移动平均线)计算逻辑完全一致,参数对应没有问题。
3. 核心计算逻辑思路核验
整体思路正确,只有一处需要补充:
iATR(_Symbol, 周期, 1, i)取周期为1的ATR值,确实就是单根K线的真实波幅TR(True Range),这个处理是对的- 以TR数组为数据源,传入原代码的
length参数作为均线周期计算对应类型的均线,完全匹配原ThinkOrSwim的MovingAverage(trueRangeAverageType, TrueRange(...), length)逻辑 - 注意补充缺失逻辑:你当前贴出的MQL4代码只计算了ATR值,最后还要乘以
ATRs系数才是shift1的最终结果,不要漏了这一步。
关于shift1命名的说明
这个命名是ThinkScript开发者的通用习惯:
- 该值的本质是计算出来的价格偏移量,通常用来和前面计算的EMA相加/相减,构建布林带、肯特纳通道这类通道类指标的上下轨
- 命名为
shift1一般意味着这是第一个偏移参数,如果后续有不同ATR乘数的偏移量,会依次命名为shift2、shift3。
内容的提问来源于stack exchange,提问作者Reza Nasimi
相关产品推荐
相关产品推荐

