请教:金字塔的模块化编程,如果传递参数的话会发现不能正常修改。
TR1 :=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR: MA(TR1,length),nodraw;
atr2:#atr.atr(length)#,NODRAW;//这个初始的length,修改参数后还是初始化效果。
不是自己引用自己,是另一个公式。我把引用和原始算法弄一起,对比一下效果。比如初始length=20,调整length的话,原始算法可以看到改变。 模块编程的效果却没有变化。
input:length(20,1,100,1);
就是一个input的参数。我就是在编写策略的时候发现模块编程的参数传递,在公式修改参数的时候无效。故意简单用个测试的公式对比。就是简单的传递参数进去,对比就知道了。
还是不懂你的意思和结论,你把两个公式的代码都贴一下
测试模块编程参数传递
{幅图代码}
input:length(20,1,100,1);
TR1 :=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR: MA(TR1,length);
atr2:#atr.atr(length)#;
{代码结束}
把这段代码作为幅图检测一下
后来测试发现:1.用序列模式,这个模块是正常的传递参数。2.如果用逐K线模式,会导致参数传递部正常。
但一般的策略都是用逐K线模式,模块编程引用的部分多数是序列模式。于是就出现冲突了。
把上面的代码,作为幅图测试一下序列模式和逐K线模式就知道了。引用的ATR系统公式是序列模式。如果上面的代码用逐K模式,就会导致传递的参数不能正常调整。
不知道算不算bug,还是因为程序构建的兼容性没考虑到这个细节。
本地没有发现在逐k线模式下有不正常的地方,用户截图一下自己碰到的问题