TREND:IF(EVWMA>REF(HH,LOOKBACK),LL,VALUEWHEN(EVWMA<REF(LL,LOOKBACK),HH));
VARIABLE:TREND1=0;
TREND1:=IF(EVWMA>REF(HH,LOOKBACK),LL,IF(EVWMA<REF(LL,LOOKBACK),HH,TREND1));
两个写法在跳转的地方取值不一样,上面的取值貌似还好,下面的取值直接为0,该怎么写才是对的?
可是我就是为了测试这两个写法的的结果才做的实验啊好吧我贴完把
LEN:= 20;
LOOKBACK:=10;
NV:= SUM(VOL,LEN);
EVWMA:EMA(CLOSE,NV/VOL,1);
HH:=HHV(EVWMA,LEN);
LL:=LLV(EVWMA,LEN);
VARIABLE:TREND1=0;
TREND1:=IF(EVWMA>REF(HH,LOOKBACK),LL,IF(EVWMA<REF(LL,LOOKBACK),HH,TREND1));
你的代码都无法编译通过。请问,要我们怎么帮您分析问题
LEN:= 20;
LOOKBACK:=10;
NV:= SUM(VOL,LEN);
EVWMA:sMA(CLOSE,NV/VOL,1);
HH:=HHV(EVWMA,LEN);
LL:=LLV(EVWMA,LEN);
VARIABLE:TREND1=0;
TREND1:=IF(EVWMA>REF(HH,LOOKBACK),LL,IF(EVWMA<REF(LL,LOOKBACK),HH,TREND1));
TREND:IF(EVWMA>REF(HH,LOOKBACK),LL,VALUEWHEN(EVWMA<REF(LL,LOOKBACK),HH));
当EVWMA>REF(HH,LOOKBACK) 不成立时,VALUEWHEN(EVWMA<REF(LL,LOOKBACK),HH)最终会向前找,直到找到最近一次EVWMA<REF(LL,LOOKBACK)时的HH。
例如:第30根k位置执行逻辑触发VALUEWHEN(EVWMA<REF(LL,LOOKBACK),HH),并且EVWMA<REF(LL,LOOKBACK)并不成立。而恰好是第5根k线位置才满足。那么你在30根k线上得到的是,第5根k对应的HH。
VARIABLE:TREND1=0;
TREND1:=IF(EVWMA>REF(HH,LOOKBACK),LL,IF(EVWMA<REF(LL,LOOKBACK),HH,TREND1));
当EVWMA>REF(HH,LOOKBACK) 不成立时,IF(EVWMA<REF(LL,LOOKBACK),HH,TREND1); 如果EVWMA<REF(LL,LOOKBACK)成立取值HH,不成立则取上根K对应的TREND1;
例如:第30根k位置执行逻辑触发IF(EVWMA<REF(LL,LOOKBACK),HH,TREND1),EVWMA<REF(LL,LOOKBACK)不成立,那么取的是第29根k上的TREND1。
哦,原来这样啊,我原来的理解错误了
当条件COND满足时,取当时的DATA的值,否则取得VALUEWHEN的前一个值。这话的意思博大精深啊
请看曲线,按照你的说法,用全局变量出来的数值是有问题的,无论上是取HH,或者是LL,还是取上一个trend1的值都不应该出现trend1=0才对啊
或者是我能力不够,分析不出来吗?
你看的是k线图最开始的几根吧?开始因为计算量不够计算0 ,TREND1用的不就是初始化的值吗。
之后该值被改写后(非零),就不会是0.
你自己按照你的代码逻辑,自己在对应的k线位置,分析计算下结果就能排查问题。