以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  公式模型编写问题提交  (http://222.73.7.161/bbs/list.asp?boardid=4)
----  请教老师  (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=169025)

--  作者:c100011757
--  发布时间:2019/3/27 16:38:53
--  请教老师
VARIABLE:HH:=0;LL:=0;
IF NOT(H<=HH&&L>=LL) THEN
BEGIN
HH:=H;
LL:=L;
END
SL:=IF(H<=HV(H,0)&&L>=LV(L,0),MIN(NEWHBARS(H,1),NEWLBARS(L,1)),IF(H>HV(H,0)&&L>=LV(L,0),NEWLBARS(L,1),IF(H<=HV(H,0)&&L<LV(L,0),NEWHBARS(H,1),NULL)));
A:=HH<>REF(HH,1)||LL<>REF(LL,1);
P:=BACKSET(REFX(SL,1)>1,REFX(SL,1)-1);
H1:=IF(A,HH,NULL);
L1:=IF(A,LL,NULL);
H2:=IF(P,NULL,H1);
L2:=IF(P,NULL,L1);
G1:=ISNULL(H2)=0&&H<REF(H,SUMBARS(ISNULL(H2)=0,2)-1)&&REF(H,SUMBARS(ISNULL(H2)=0,2)-1)>REF(H,SUMBARS(ISNULL(H2)=0,3)-1);

其中HV和ISNULL,在系统函数中如何表达呢?

--  作者:FireScript
--  发布时间:2019/3/27 16:43:23
--  
 hv和hhv等效。
isnull你这里直接用not替换下也能达到相同的效果。

--  作者:c100011757
--  发布时间:2019/3/27 21:47:58
--  
试过,没用


--  作者:FireScript
--  发布时间:2019/3/28 9:02:42
--  
 VARIABLE:HH:=0;LL:=0;
IF NOT(H<=HH&&L>=LL) THEN
BEGIN
HH:=H;
LL:=L;
END

SL:=IF(H<=HHV(H,0)&&L>=LlV(L,0),MIN(NEWHBARS(H,1),NEWLBARS(L,1)),IF(H>HHV(H,0)&&L>=LLV(L,0),NEWLBARS(L,1),IF(H<=HHV(H,0)&&L<LLV(L,0),NEWHBARS(H,1),DRAWNULL)));
A:=HH<>REF(HH,1) or LL<>REF(LL,1);
P:=BACKSET(REFX(SL,1)>1,REFX(SL,1)-1);
H1:=IF(A,HH,DRAWNULL);
L1:=IF(A,LL,DRAWNULL);
H2:=IF(P,DRAWNULL,H1);
L2:=IF(P,DRAWNULL,L1);
G1:=not(H2)=1&&H<REF(H,SUMBARS(not(H2)=1,2)-1)&&REF(H,SUMBARS(not(H2)=1,2)-1)>REF(H,SUMBARS(not(H2)=1,3)-1);


只能将其中部分函数和表达近似的转换下,但是总体这段代码在金字塔上使用还是有冲突的地方的。比如里面的未来函数只能在序列下稳定使用,但是序列下if语句的判断又和逐K不一样。另外null在金字塔有其他特殊含义,一般用DRAWNULL替换,但是这个函数也很少用。

--  作者:c100011757
--  发布时间:2019/3/28 9:07:29
--  
HV是不包括当前K线的,HHV则不是
--  作者:FireScript
--  发布时间:2019/3/28 9:13:32
--  
 是的,金字塔的HHV是包括当前K的。如果你要不包括当前K可以这样做:
ref(hhv(h,0),1)

另外我不知道你这里的参数0代表的含义和金字塔是否一致。金字塔这里hhv,llv第二个参数如果是0 则表示从图表上第一个K开始统计。

--  作者:c100011757
--  发布时间:2019/3/28 10:23:41
--  
好的,谢谢老师,下一个是
ISNULL 判断空值
用法:ISNULL(N);如果N为空值,函数返回1;如果N为非空值,函数返回0。
例:MA5:IFELSE(ISNULL(MA(C,5))=1,C,MA(C,5));//定义五周期均线,K线数量不足五根时,返回当根K线的收盘价

--  作者:FireScript
--  发布时间:2019/3/28 10:38:45
--  
 没有判断空值的函数。
但是可以用not ,假设N是空值的话.完整的处理方式是下面这样的:

not(N+0=N) 就相当于ISNULL(N)=1


图片点击可在新窗口打开查看此主题相关图片如下:temp.png
图片点击可在新窗口打开查看

要给变量赋null值的话,前面回复里面说过用DRAWNULL代替下。

--  作者:c100011757
--  发布时间:2019/3/28 10:57:03
--  
G1:=ISNULL(H2)=0&&H<REF(H,SUMBARS(ISNULL(H2)=0,2)-1)&&REF(H,SUMBARS(ISNULL(H2)=0,2)-1)>REF(H,SUMBARS(ISNULL(H2)=0,3)-1);
这句给修改一下老师


--  作者:FireScript
--  发布时间:2019/3/28 11:06:36
--  
 ISNULL:not(H2+0=H2);
G1:=(ISNULL=0)&&H<REF(H,SUMBARS(ISNULL=0,2)-1)&&REF(H,SUMBARS(ISNULL=0,2)-1)>REF(H,SUMBARS(ISNULL=0,3)-1);