第六講從源碼中提取選股公式
要點:從后往前找,刪除沒用條,去掉修飾符,個別加等號。
例一:找出買點
VAR1:=(((HHV(HIGH,36) -CLOSE) / (HHV(HIGH,36) -LLV(LOW,36))) *100); VAR2:=SMA(VAR1,5,1); VAR3:=SMA(VAR2,8,1);
H1:EMA(CLOSE,8),LINETHICK1; H2:EMA(H1,20),LINETHICK1; VAR4:=(CROSS(VAR2,VAR3)AND(VAR3<20)); VAR5:=((CLOSE > (LLV(CLOSE,60) + (0.3 * LLV(CLOSE,60))))AND VAR4); VAR6:=IF((CLOSE>1000),VAR4,VAR5); M1:EMA(CLOSE,60); M2:EMA(CLOSE,89); M3:EMA(CLOSE,233),LINETHICK1; M4:EMA(CLOSE,583),LINETHICK1; STICKLINE((H1>H2),H1,H2,1,0.8); STICKLINE((H1<H2),H1,H2,1,0.8); DRAWTEXT((CROSS(H1,H2) AND (CLOSE < EMA(CLOSE,60))),(LOW *0.92),'買'); DRAWTEXT(VAR6,(HIGH *1.08),'賣');分解說明:
VAR1:=(((HHV(HIGH,36) -CLOSE) / (HHV(HIGH,36) -LLV(LOW,36))) *100); VAR2:=SMA(VAR1,5,1); VAR3:=SMA(VAR2,8,1);
H1:EMA(CLOSE,8),LINETHICK1; H2:EMA(H1,20),LINETHICK1;
VAR4:=(CROSS(VAR2,VAR3)AND(VAR3<20)); VAR5:=((CLOSE > (LLV(CLOSE,60) + (0.3 * LLV(CLOSE,60))))AND VAR4); VAR6:=IF((CLOSE>1000),VAR4,VAR5); M1:EMA(CLOSE,60); M2:EMA(CLOSE,89); M3:EMA(CLOSE,233),LINETHICK1; M4:EMA(CLOSE,583),LINETHICK1; STICKLINE((H1>H2),H1,H2,1,0.8); STICKLINE((H1<H2),H1,H2,1,0.8);
第一步{從后往前找}找到下面這行 “買”的輸出語句。然后看這條語句的基本條件。
DRAWTEXT((CROSS(H1,H2) AND (CLOSE < EMA(CLOSE,60))),(LOW *0.92),'買');
查看結果:輸出文字交叉條件,條件直接輸出語句輸出位置文字
DRAWTEXT(VAR6,(HIGH *1.08),'賣');
知道 “基本條件 ”為 H1,H2,那么與此沒有任何關系的語句從后往前刪除。刪的辦法有兩種:一是直接刪掉;二是先用{}括上,待沒問題時再一次性刪除。加藍色的為找到的不輸出語句。第二步{刪除沒用條}后,剩下的有用語句:
H1:EMA(CLOSE,8),LINETHICK1;{加藍的為修飾類函數,原則一
律刪除。}
H2:EMA(H1,20),LINETHICK1; DRAWTEXT((CROSS(H1,H2) AND (CLOSE < EMA(CLOSE,60))),(LOW *0.92),'買');
第三步{去掉修飾符}分別去掉:指標線粗細、顯示文字、文字位置函數和文字
H1:EMA(CLOSE,8); H2:EMA(H1,20); CROSS(H1,H2)ANDCLOSE <EMA(CLOSE,60);
第四步{個別加等號}條件選股只能輸出一條語句,上面這三行為全部輸出,所以,作為 “條件 ”的前兩行還必須在冒號后面加上等號,表達不輸出。結果:
H1:=EMA(CLOSE,8); H2:=EMA(H1,20); CROSS(H1,H2)ANDCLOSE <EMA(CLOSE,60);
例二、找出笑臉和買入信號以本人發過的《跟莊建倉》為例。
A01:=DYNAINFO(7); A03:=BARSCOUNT(CLOSE); A04:=(SMA((CLOSE/ HHV(HIGH,120)),3,1) *100); A05:=IF((A03>20),A04,0);
A06:=IF((LOW > A01),0,IF((HIGH < A01),1,(((A01 -LOW) + 0.009) /
((HIGH -LOW) +0.009)))); A07:=DMA(A06,(VOL/CAPITAL)) *60; A09:=IF((((A07 > 0) AND (A07 > REF(A07,1))) AND (A05 <= 88)),A07,0); Var1:=3*SMA((CLOSE-LLV(LOW,27))/(HHV(HIGH,27)-LLV(LOW,27) )*100,5,1)-2*SMA(SMA((CLOSE-LLV(LOW,27))/(HHV(HIGH,27)-LL V(LOW,27))*100,5,1),3,1); Var2:=EMA(Var1,8); Var3:=3*SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1)-2*SM A(SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1),3,1);趨勢 :=EMA(Var3,3)-10; FILLRGN(趨勢 >80,趨勢 ,80); DRAWICON(CROSS(趨勢 ,0),0,1); FILLRGN((A09 > 0AND (趨勢 <20 OR趨勢 >REF(趨勢 ,1)AND趨勢 <50)),0,A09),colorFFFF00;機構建倉區 :0,LINETHICK0,colorFFFF00; Var4:=(趨勢 -REF(趨勢 ,1))/REF(趨勢 ,1)*100; STICKLINE(趨勢 <=13,0,20,5,0),colorcc9900; DRAWTEXT(FILTER(趨勢 <=13,15),30,'準備現金 '),colorcc9900; STICKLINE(趨勢 <=13ANDVar4>13,0,50,5,0),color0099ff; Var5:=FILTER((趨勢 <=13ANDVar4>13),10); DRAWTEXT(Var5,60,'買入 '),color0099ff;
STICKLINE(趨勢 >=90ANDVar4,0,30,5,0),colorgray; Var6:=FILTER(趨勢 >=90,10); DRAWTEXT(Var6,40,'清倉 '),colorgray; Var7:=LLV(LOW,30); Var8:=HHV(HIGH,30); Var9:=EMA((CLOSE-Var7)/(Var8-Var7)*4,4)*25; STICKLINE(Var9>90,100,105,10,2),COLORRED; STICKLINE(CROSS(Var4,-40),10,55,6,0),COLORRED; Var10:=(Var9-LLV(Var9,4))/(HHV(Var9,4)-LLV(Var9,4))*100; DRAWTEXT(IF(CROSS(Var9,Var10) AND Var9>87,95,0),88,'險 '),Color00FF00,ALIGN1; DRAWICON(CROSS(90,Var9),95,9); Var11:=SMA(ABS(L-REF(L,1)),3,1)/SMA(MAX(L-REF(L,1),0),3,1)*10 0; Var12:=HHV(Var11,30)*8;火焰山 :EMA(IF(LOW<=Var7 AND趨勢 <40,(Var11+Var12),0),3)/618,COLORRED,linethick2; STICKLINE(火焰山 >0,0,火焰山 *1.2,8,0),COLORRED; Var13:=(MA(C,1)+MA(C,3)+MA(C,5)+MA(C,7)+MA(C,9))/5; Var14:=(MA(C,2)+MA(C,4)+MA(C,6)+MA(C,8)+MA(C,10))/5;趨勢線 :趨勢 ,colorff0000; Var16:=MAX(EMA(Var13,2)-EMA(Var14,5),0)*200;
Var17:=EMA(Var16,5);波浪峰 :Var17,stick,colorff00ff; STICKLINE(Var17<REF(Var17,1),0,Var17,1,0),color00ff00; Var18:=MA(趨勢線 ,8); if(CROSS(Var2,Var18)ANDVar2<15,50,0),COLORRED; DRAWTEXT(CROSS(趨勢線 ,Var2)AND趨勢線 >REF(趨勢線 ,1)AND趨勢線 <50,50,'追漲 '),COLORFF0000;
分析:這個公式輸出語句非常多,但多數都是用于趨勢判斷的。所以不用管它。仍按我們既定的思路進行。第一步{從后往前找},先刪除發出信號關鍵語句之后的(紅色為輸出語句,它以下的語句已經刪去,藍色為等待下步刪除的)
A01:=DYNAINFO(7); A03:=BARSCOUNT(CLOSE); A04:=(SMA((CLOSE/ HHV(HIGH,120)),3,1) *100); A05:=IF((A03>20),A04,0); A06:=IF((LOW > A01),0,IF((HIGH < A01),1,(((A01 -LOW) + 0.009) / ((HIGH -LOW) +0.009)))); A07:=DMA(A06,(VOL/CAPITAL)) *60; A09:=IF((((A07 > 0) AND (A07 > REF(A07,1))) AND (A05 <= 88)),A07,0); Var1:=3*SMA((CLOSE-LLV(LOW,27))/(HHV(HIGH,27)-LLV(LOW,27) )*100,5,1)-2*SMA(SMA((CLOSE-LLV(LOW,27))/(HHV(HIGH,27)-LL
V(LOW,27))*100,5,1),3,1); Var2:=EMA(Var1,8);
Var3:=3*SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1)-2*SM A(SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1),3,1);趨勢 :=EMA(Var3,3)-10;
FILLRGN(趨勢 >80,趨勢 ,80);
DRAWICON(CROSS(趨勢 ,0),0,1);
FILLRGN((A09 > 0AND (趨勢 <20 OR趨勢 >REF(趨勢 ,1)AND趨勢 <50)),0,A09),colorFFFF00;機構建倉區 :0,LINETHICK0,colorFFFF00;
Var4:=(趨勢 -REF(趨勢 ,1))/REF(趨勢 ,1)*100;
STICKLINE(趨勢 <=13,0,20,5,0),colorcc9900; DRAWTEXT(FILTER(趨勢 <=13,15),30,'準備現金 '),colorcc9900; STICKLINE(趨勢 <=13ANDVar4>13,0,50,5,0),color0099ff;
Var5:=FILTER((趨勢 <=13ANDVar4>13),10);
DRAWTEXT(Var5,60,'買入 '),color0099ff;
第二步{刪除沒用條}后
Var3:=3*SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1)-2*SM A(SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1),3,1);趨勢 :=EMA(Var3,3)-10; DRAWICON(CROSS(趨勢 ,0),0,1); Var4:=(趨勢 -REF(趨勢 ,1))/REF(趨勢 ,1)*100;
Var5:=FILTER((趨勢 <=13ANDVar4>13),10); DRAWTEXT(Var5,60,'買入 '),color0099ff;
第三步{去掉修飾符后}:
趨勢 :=EMA(Var3,3)-10; CROSS(趨勢 ,0); Var4:=(趨勢 -REF(趨勢 ,1))/REF(趨勢 ,1)*100; Var5:=FILTER((趨勢 <=13ANDVar4>13),10); Var5;
第四步{個別加等號}本公式中的 “條件 ”語句都是不輸出的,所以此項省略,但因是要笑臉和買入兩個信號,所以還必須把它們連結起來:
Var3:=3*SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1)-2*SM A(SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1),3,1);趨勢 :=EMA(Var3,3)-10; Var4:=(趨勢 -REF(趨勢 ,1))/REF(趨勢 ,1)*100; Var5:=FILTER((趨勢 <=13ANDVar4>13),10); CROSS(趨勢 ,0)orVar5;江南茶外匯
問題:
我的軟件是銀河雙子星我在寫習題:10日均線與 20日均線金叉和漲幅超過百分之三,且成交量比昨天放大一倍。時做了如下操作: 1,MA1:=MA(CLOSE,10);MA2:=MA(CLOSE,20);CROSS(MA1,MA2);
2,C:=CLOSE/REF(CLOSE,1)>3/100; 3,V:=VOL/REF(VOL,1)>2; 4,CROSS(MA1,MA2)ANDCLOSE/REF(CLOSE,1)>3/100AND(VOL/VOL,1)>2;但我完成測試時電腦不給通過上面提示說'行 2:缺少;'請問我是哪里錯了?謝謝!
講解一下
1、收盤價等專用函數如( C,O,H,L,V,AND,OR)是不能作為引導語句的。 2、后面輸出和前面交待的條件多處重復。整理后的:
MA1:=MA(CLOSE,10); MA2:=MA(CLOSE,20); CROSS(MA1,MA2)ANDCLOSE/REF(CLOSE,1)>3/100 AND VOL/(VOL,1)>2;
或者:
MA1:=MA(CLOSE,10); MA2:=MA(CLOSE,20); AA:=CROSS(MA1,MA2); BB:=CLOSE/REF(CLOSE,1)>3/100; VV:=VOL/REF(VOL,1)>2; AAANDBBANDVV;
編寫公式如同做數學題,要有一個反復領會和實踐的過程,不能指望一蹴而就。沒事時打開公式編輯器,從簡單的入手,編幾個,看看圖形,慢慢就會,熟能生巧。