请高手写一个通达信的递归函数的例子

我想处理缠论中的K线包含,但是遇到了一个递归定义的问题,一下子不知道该如何下手了,请高手写个递归的例子我学习下,是不是关于包含处理的都不要紧!

通达信没有递归功能,只能自己做。
我自己做的一个缠论副图公式,尚未完成,但基本功能包括K线包含,底分型,顶分型,都有了。你参考下。

{每一天需要有几个参数:1、最高价,最低价,是否被前K线包含,所属走势类似(1=上升,2=下跌,3=顶分型,4=底分型,走势和分型都是最后一个K线确定,
在顶底未定之前都是走势)}
MA5:=MA(C,5);MA10:=MA(C,10);
ZB:CURRBARSCOUNT,NODRAW;{为每根K线建立坐标}
L1:= ZB>1 AND H<=REF(H,1) AND L>=REF(L,1),NODRAW;{1=当天是左包含关系}L2:= ZB>2 AND REF(L1,1) AND H<=REF(H,2) AND L>=REF(L,2),NODRAW;{1=连续2天是左包含关系}
L3:= ZB>3 AND REF(L2,1) AND H<=REF(H,3) AND L>=REF(L,3),NODRAW;{1=连续3天是左包含关系}L4:= ZB>4 AND REF(L3,1) AND H<=REF(H,4) AND L>=REF(L,4),NODRAW;{1=连续4天是左包含关系}
L5:= ZB>5 AND REF(L4,1) AND H<=REF(H,5) AND L>=REF(L,5),NODRAW;{1=连续5天是左包含关系}L6:= ZB>6 AND REF(L5,1) AND H<=REF(H,6) AND L>=REF(L,6),NODRAW;{1=连续6天是左包含关系}
L7:= ZB>7 AND REF(L6,1) AND H<=REF(H,7) AND L>=REF(L,7),NODRAW;{1=连续7天是左包含关系}L8:= ZB>8 AND REF(L7,1) AND H<=REF(H,8) AND L>=REF(L,8),NODRAW;{1=连续8天是左包含关系}
L9:= ZB>9 AND REF(L8,1) AND H<=REF(H,9) AND L>=REF(L,9),NODRAW;{1=连续9天是左包含关系}L10:= ZB>10 AND REF(L9,1) AND H<=REF(H,10) AND L>=REF(L,10),NODRAW;{1=连续10天是左包含关系}
LIN: IF(L1 OR L2 OR L3 OR L4 OR L5 OR L6 OR L7 OR L8 OR L9 OR L10,1,0),NODRAW; {左包含}
LH: IF(L10,REF(H,10),IF(L9,REF(H,9),IF(L8,REF(H,8),IF(L7,REF(H,7),IF(L6,REF(H,6),IF(L5,REF(H,5),IF(L4,REF(H,4),IF(L3,REF(H,3),IF(L2,REF(H,2),IF(L1,REF(H,1),H)))))))))),NODRAW;
LL: IF(L10,REF(L,10),IF(L9,REF(L,9),IF(L8,REF(L,8),IF(L7,REF(L,7),IF(L6,REF(L,6),IF(L5,REF(L,5),IF(L4,REF(L,4),IF(L3,REF(L,3),IF(L2,REF(L,2),IF(L1,REF(L,1),L)))))))))),NODRAW;
R1:= IF(ISLASTBAR,0,ZB>1 AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=当天是右包含关系}R2:= IF(ISLASTBAR,0,ZB>2 AND REF(R1,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续2天是右包含关系}
R3:= IF(ISLASTBAR,0,ZB>3 AND REF(R2,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续3天是右包含关系}R4:= IF(ISLASTBAR,0,ZB>4 AND REF(R3,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续4天是右包含关系}
R5:= IF(ISLASTBAR,0,ZB>5 AND REF(R4,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续5天是右包含关系}R6:= IF(ISLASTBAR,0,ZB>6 AND REF(R5,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续6天是右包含关系}
R7:= IF(ISLASTBAR,0,ZB>7 AND REF(R6,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续7天是右包含关系}R8:= IF(ISLASTBAR,0,ZB>8 AND REF(R7,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续8天是右包含关系}
R9:= IF(ISLASTBAR,0,ZB>9 AND REF(R8,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续9天是右包含关系}R10:=IF(ISLASTBAR,0,ZB>10 AND REF(R9,1) AND H<=REFX(H,1) AND L>=REFX(L,1)),NODRAW;{1=连续10天是右包含关系}
RIN: IF(R1 OR R2 OR R3 OR R4 OR R5 OR R6 OR R7 OR R8 OR R9 OR R10,1,0),NODRAW; {右包含}LD:= CONST(DAYTODATE((DATETODAY(DATE)-FINANCE(42))))+19000000,NODRAW;{上市年月日}
RH:= IF(R10,REFX(H,10),IF(R9,REFX(H,9),IF(R8,REFX(H,8),IF(R7,REFX(H,7),IF(R6,REFX(H,6),IF(R5,REFX(H,5),IF(R4,REFX(H,4),IF(R3,REFX(H,3),IF(R2,REFX(H,2),IF(R1,REFX(H,1),H)))))))))),NODRAW;
RL:= IF(R10,REFX(L,10),IF(R9,REFX(L,9),IF(R8,REFX(L,8),IF(R7,REFX(L,7),IF(R6,REFX(L,6),IF(R5,REFX(L,5),IF(R4,REFX(L,4),IF(R3,REFX(L,3),IF(R2,REFX(L,2),IF(R1,REFX(L,1),L)))))))))),NODRAW;
CK: NOT(LIN OR RIN),NODRAW;{当前K线是有效的缠论K线}CK0:=LIN OR RIN,NODRAW;
CKA1:= IF(ISLASTBAR,0,IF(REFX(CK,1),1,IF(REFX(CK,2),2,IF(REFX(CK,3),3,IF(REFX(CK,4),4,IF(REFX(CK,5),5,IF(REFX(CK,6),6,IF(REFX(CK,7),7,IF(REFX(CK,8),8,IF(REFX(CK,9),9,IF(REFX(CK,10),10,0))))))))))),NODRAW;
{后续第一根有效缠论K线到当前K线周期数} CKA2:= IF(ISLASTBAR,0,CKA1+REFX(CKA1,CKA1)),NODRAW;{后续第二根缠论K线到当前周期数}

V1: REF(CK,1),NODRAW;V2:= REF(CK0,1) AND REF(CK,2),NODRAW;V3:= REF(CK0,1) AND REF(CK0,2) AND REF(CK,3),NODRAW;V4:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK,4),NODRAW;
V5:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK,5),NODRAW;V6:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK0,5) AND REF(CK,6),NODRAW;
V7:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK0,5) AND REF(CK0,6) AND REF(CK,7),NODRAW;V8:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK0,5) AND REF(CK0,6) AND REF(CK0,7) AND REF(CK,8),NODRAW;
V9:= REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK0,5) AND REF(CK0,6) AND REF(CK0,7) AND REF(CK0,8) AND REF(CK,9),NODRAW;
V10:=REF(CK0,1) AND REF(CK0,2) AND REF(CK0,3) AND REF(CK0,4) AND REF(CK0,5) AND REF(CK0,6) AND REF(CK0,7) AND REF(CK0,8) AND REF(CK0,9) AND REF(CK,10),NODRAW;

CKB1: IF(CK AND V1,1,IF(CK AND V2,2,IF(CK AND V3,3,IF(CK AND V4,4,IF(CK AND V5,5,IF(CK AND V6,6,IF(CK AND V7,7,IF(CK AND V8,8,IF(CK AND V9,9,IF(CK AND V10,10,0)))))))))),NODRAW;
{前面一根有效缠论K线到当前K线周期数} CKB2:= CKB1+REF(CKB1,CKB1),NODRAW;{前面第二根缠论K线到当前的周期数}

UPXBGN:= IF(ISLASTBAR,0,IF(CK AND LH<REFX(LH,CKA1) AND REFX(LH,CKA1)> REFX(LH,CKA2),1,0)),NODRAW;
UPXMID:= IF(CK AND REF(UPXBGN,CKB1) AND LH>REF(LH,CKB1) AND LH>REFX(LH,CKA1),1,0),NODRAW;
UPXEND:= IF(CK AND REF(UPXBGN,CKB2) AND REF(UPXMID,CKB1) AND LH<REF(LH,CKB1) AND REF(LH,CKB1) > REF(LH,CKB2),1,0),NODRAW;
DWXBGN: IF(ISLASTBAR,0,IF(CK=1 AND LL>REFX(LL,CKA1) AND REFX(LL,CKA1)< REFX(LL,CKA2),1,0)),NODRAW;
DWXMID: IF(CK AND REF(DWXBGN,CKB1) AND REF(LL,CKB1) >LL AND LL< REFX(LL,CKA1),1,0),NODRAW;
DWXEND:= IF(CK AND REF(DWXMID,CKB1) AND REF(DWXBGN,CKB2) AND REF(LL,CKB2) > REF(LL,CKB1) AND REF(LL,CKB1) < LL,1,0),NODRAW;
UPX0:= BARSSINCE(UPXMID),NODRAW;DWX0:= BARSSINCE(DWXMID),NODRAW;
X0: IF(UPX0>DWX0,1,0),NODRAW;{X0表示该股第一次分型的类型,1表示顶分型,0表示底分型};
SZXBGN:= IF(CK AND ISLASTBAR AND H<=REF(H,1),0,IF(CK AND LH>REF(LH,CKB1),1,0)),NODRAW;
LASTUPX: REF(BARSLAST(UPXMID),1),NODRAW;
LASTDWX: REF(BARSLAST(DWXMID),1),NODRAW;

NEWUPX: UPXMID,NODRAW;
NEWDWX: DWXMID,NODRAW;
UPX: REF(NEWUPX,CKB1) AND UPXMID,NODRAW;DWX: REF(NEWDWX,CKB1) AND DWXMID,NODRAW;

STICKLINE(LIN OR RIN,H,L,0.8,1),COLORGRAY;

{STICKLINE(NOT(LIN OR RIN) AND C>O,H,L,0.8,2),COLORRED;
STICKLINE(NOT(LIN OR RIN) AND C<O,H,L,0.8,2),COLORCYAN;
STICKLINE(NOT(LIN OR RIN) AND C=O,H,L,0.8,2),COLORWHITE;
}
STICKLINE(NOT(LIN OR RIN) ,H,L,0.8,2),COLORWHITE;

STICKLINE(UPXMID,LH,LL,1,0),COLORRED;
STICKLINE(DWXMID,LH,LL,1,0),COLORCYAN;

DRAWLINE(NEWUPX,LH,DWXMID,LL,0),COLORGREEN,LINETHICK1;
DRAWLINE(NEWDWX,LL,UPXMID,LH,0),COLORGREEN,LINETHICK1;追问

可以看出兄弟也是用了心的,不过我看了下,在应用上并不是很好,公式我只看到了K线包含,提出我的一点小看法,因为我没认真看,如果说的不对还请指出。包含处理应该是新K与已经包含处理过的K线再进行处理,但你公式中并没能做到这一点。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-06
递归就是递归,那里来的定义?你应由大到小,大方向懂了再往下研究小的,然后再往下,递归,如此而已if(a,if(b,if(c,if(d,if(e,0,1),0),0),0) 这就是你想要的例子追问

非常感谢您的回答,可能我说的不是很清楚,我主要是想在通达信中来实现这个功能。您写那个例子意思确实是递归的例子,但在通达信中是无法实现的。。。。。。

追答

他说的递归根本就不需要在电脑上实现的,只是需要你掌握,没必要在软件上实现.抱歉我不知道你看的是哪一章需要这样,不要走入误区!

第2个回答  2018-09-03
是啊,没法递归。我写的一段:UPP:IF (C<=REF(UPP,1) ,UPP,MAX(C,0);
无法通过。
第3个回答  2017-02-19
我最近也在弄弄这个东西,到了递归也是懵逼,在试着用DLL去解决