如果直接写hhvbars(close,90),取得的是从当前起算的前90天内的close最高值的位置。我想取得10天前起算的90个周期的close最高值的位置,但不是当前起算的100个周期内的最高值的位置,该如何用hhvbars实现?
ref(hhvbars(close,90),10)
外面套一个ref取前面的数据就行了
这个获取到的值还要再加上你ref偏移的长度才是 这个90周期最高价位置 距离现在的位置。因为你ref获取的值不是基于当前位置的。
ref(hhvbars(close,90),10)+10
我遇到一个奇怪的问题,我在5均线死叉21均线的位置显示当前位置往前6个周期起算36天内50天均线的最高值,在图表上我按照上述方法取到的hhv值是对的,但是在后台精细化历史测评中debugfile取到的hhv值却不对,但hhvbars的数值在图表上和debugfile里都是对的。
代码如下:
MA21:=MA(close,21);
MA5:=MA(close,5);
MA50:=MA(close,50);
drawtext(cross(MA21,MA5),high,'5死叉21 hhv: '&NUMTOSTR(ref(hhv(MA50,36),6),3) &' hhvbars:'&NUMTOSTR(ref(hhvbars(MA50,36),6)+6,0),colorgreen);
if cross(MA21,MA5) then begin
str:=' 5死叉21 hhv: '&NUMTOSTR(ref(hhv(MA50,36),6),3) &' hhvbars:'&NUMTOSTR(ref(hhvbars(MA50,36),6)+6,0);
DEBUGFILE('C:\log.txt',str,0);
end
以节能国祯(300388)2020年7月28日的5均线死叉21均线为例,图表上显示 hhv是10.382;但在debugfile里显示的hhv是 9.623;两者的hhvbars都是一致的,都是41
debugfile里输出的结果:“5死叉21 hhv: 9.623 hhvbars:41”
图表显示结果截图如下,见红圈标注
此主题相关图片如下:wx20210219-165347dddiie.png
我排查后发现是因为我选取的精细化历史测评的周期是2020年5月7日至12月7日,这个周期导致7月28日往前41个周期的MA50没有取到正确的值。这个问题会导致图表测试和后台精细化测评得到的结果不一致,从而影响后台精细化测评的实际结论。
虽然我可以把精细化历史测评的周期提前到2020年3月从而把7月28号的这个错误结果避免掉。但问题是,将测评起始时间提前到3月份之后,也会有靠近3月份的MA50的取值不对,导致产生新的测评结论不准确的问题。
这个问题能否解决?
你这个问题在图表上也会有的,图表上靠近历史方向的ma也会因为数据不足从而无法产生有效数据的。这个无法规避的。你如果要对比后台 图表,首先涉及纯指标的计算的部分 要设置好起始时间才能保住均线计算是一致的。
后台
此主题相关图片如下:temp.png
图表
此主题相关图片如下:temp.png
然后你可以对交易代码做一个限制,在BARPOS大于指定数值之后 才运行交易。这样可以规避掉ma无法计算的部分了。
不过图表后台实际运行和回测 机制上都有差异,你如果要完全回测结果一致,那可能要额外做很多工作才行。可能要做一些单独针对回测的修改才行。