Pine Script编写RCI策略出现ord函数调用警告如何解决
问题解决方法
这个警告的触发核心是Pine Script编译器要求所有自定义计算函数必须保证每根K线都被调用,避免不同K线的计算上下文不一致。你当前代码中ord函数的调用链路嵌套在rci函数内,仅在条件判断时才会触发调用,被编译器判定为存在不被每根K线执行的风险,因此抛出警告。
具体修改方案
- 新增全局变量提前计算RCI数值,保证每根K线都会触发
ord函数的调用 - 后续条件判断直接使用提前计算好的RCI变量即可,原有交易逻辑完全不变
修改后的完整代码
//@version=4 strategy(title="RCI strategy test") itv = input(12, "interval") src = input(close, "source") ord(seq, idx, itv) => p = seq[idx] o = 1 s = 0 for i = 0 to itv - 1 if p < seq[i] o := o + 1 else if p == seq[i] s := s + 1 o + (s - 1) / 2.0 d(itv) => sum = 0.0 for i = 0 to itv - 1 sum := sum + pow((i + 1) - ord(src, i, itv), 2) sum rci(itv) => (1.0 - 6.0 * d(itv) / (itv * (itv * itv - 1.0))) * 100.0 // 新增:全局作用域提前计算RCI值,保证ord函数每根K线都被调用 rci_val = rci(itv) cond1 = rci_val <= 0 cond2 = rci_val > 0 if (cond1) strategy.order("L", strategy.long) if (cond2) strategy.close_all()
修改后不会改变原有策略的任何计算逻辑和交易信号,仅调整了计算顺序让编译器确认ord函数每根K线都会执行,警告即可消失。
内容的提问来源于stack exchange,提问作者pine_beginner
相关产品推荐
相关产品推荐

