(四)公式编写入门

来源:百度文库 编辑:神马文学网 时间:2024/04/27 19:07:21
第六讲:均线(选股)的基本形态

  提示:K线的初步平均。(O+H+L+C*2)/5; 或  (H+L+C*2)/4;  
  一般认为:收盘价是最有说服力的和最有价值的,它是每天激烈争夺的最后妥协。但也有人认为:收盘价固然重要,其他价格也是争夺的产物。所以将全天的几种价格因素都考虑进去更能反映每天的真实情况。
  1、最简单的指标线
  (1)均价线 就是移动平均线MA,“MA”表示的就是计算平均值。
  MA1=MA(CLOSE,5);5日平均线=(今天收盘价+昨天收盘价+.....--5天前的收盘价)/5;
  MA2=MA(CLOSE,10);10日平均线=(今天收盘价+昨天收盘价+......+10天前的收盘价)/10;
  (2)均量线 均价线会了,照着葫芦画瓢,把收盘价CLOSE换成成交量VOL就行了!
  例:MA1:MA(VOL,5);
  MA2:MA(VOL,10);   
  2、再次平均 指将已有的均线(多条均线)相加后进行再平均。
  MA1=MA(CLOSE,5);
  MA2=MA(CLOSE,10);
  (MA1+MA2)/2;  
  3、N日均线向上 (本题反映均线波浪式延伸过程中某阶段的形态。)
  AA:=MA(C,N);
  BB:=REF(AA,1);
  AA>BB
  均线向下呢? AA< BB 就可以了。
  N日均线走平怎么表述?AA=BB  
  4、均线由下跌状态刚刚转为上升
  AA:=MA(C,N);
   COUNT(AA  //用来确认前5日处于下跌状态
    AND AA>REF(AA,5);
  5、年线拐头向上
  A250:=MA(C,250);
  REF(A250,1)REF(A250,1);  
  6、两条均线交叉
  股软中专门设定了一条函数来描述两条线交叉:CROSS(X,Y),此函数通用。
  假如两条均线一条名叫X,另外一条叫Y  且(X<Y)
  CROSS(X,Y)表示X向上穿过了Y  通称:金叉
  CROSS(Y,X)表示Y向上穿过了X  通称:死叉
  特别提示:交叉有两种,一种是向上交叉,另一种是向下交叉。如果要求向上交叉时,X线必须比前一天高,所以需要加上 X>REF(X,1) 。完整的表达式为:CROSS(X,Y)AND  X>REF(X,1)
  加餐:
  上述交叉是不限制周期的,有时我们会感到交叉特别频繁,如何取得他们较长时间交叉一次的数据呢,系统提供了另一个函数: LONGCROSS(X,Y,N) 两条线维持N周期后交叉。如果N等于15,则X Y两条线超过15天后交叉有效,否则不输出。
  7、多次金叉(以常见的MACD指标为例)
  (1)二次金叉
  (COUNT(CROSS(DIF,DEA),20)=2 AND CROSS(DIF,DEA);
  (2)二次死叉
  COUNT(CROSS(DEA,DIF),20)=2 AND CROSS(DEA,DIF);
  (3)0轴上二次金叉
  COUNT(CROSS(DIF,DEA) AND DEA>0,20)=2 AND CROSS(DIF,DEA) AND
  DEA>0;
  (4)0轴上三次金叉
  COUNT(CROSS(DIF,DEA) AND DEA>0,20)=3 AND CROSS(DIF,DEA) AND
  DEA>0; 
  8、三线金叉
  A5:=MA(C,5);
  A10:=MA(C,10);
  A30:=MA(C,30);
  AA:=CROSS(A5,A10);
  BB:=CROSS(A5,A30);
  CC:=CROSS(A10,A30);
  COUNT(AA,3)=1 AND COUNT(BB,3)=1 AND COUNT(CC,3)=1;
  9、三线同时金叉
  A5:=MA(C,5);
  A10:=MA(C,10);
  A20:=MA(C,20);
  AA:=CROSS(C,A5);
  BB:=CROSS(C,A10);
  CC:=CROSS(C,A20);
  AA AND BB AND CC;  
  10、均线多头排列
  A1:=MA(C,N1);
  A2:=MA(C,N2);
  A3:=MA(C,N3);
  A4:=MA(C,N4);
  A1>A2 AND A2>A3 AND A3>A4;
  11、均线空头排列3天以上
  A1:=MA(C,N1);
  A2:=MA(C,N2);
  A3:=MA(C,N3);
  A4:=MA(C,N4);
  COUNT(A1< A2 AND A2< A3 AND A3< A4,3)>=3;

  12、向前N日至M日出现过均线死叉(P1< P2)
  AA:=MA(C,P1);
  BB:=MA(C,P2);
  CC:=REF(CROSS(BB,AA),N);
  COUNT(CC,M);  
  13、均线粘合
  MA1:=MA(C,5);
  MA2:=MA(C10);
  MA3:=MA(C,20);
  P1:=ABS(MA1-MA2)+ABS(MA2-MA3);
  P1/C<1/100 AND MA1>REF(MA1,1) AND MA2>REF(MA2,1); 

  14、均线粘合(另种表达式)
  MA1:=MA(C,5);
  MA2:=MA(C,10);
  MA3:=MA(C,30);
  A:=MAX(MAX(MA1,MA2),MA3);
  B:=MIN(MIN(MA1,MA2),MA3);
  COUNT(ABS(A-B)/B<0.01,3)=3;表示已粘合3天(含3天)以上

  15、多条均线粘合  如5、10、20、30、120、250日移动平均线粘合
  aa:=(ma(c,5)+ma(c,10)+ma(c,20)+ma(c,30)+ma(c,120)+ma(c,250))/6;
  up:=aa*n/100+aa;
  down:=aa-aa*n/100;
  count(BETWEEN(ma(c,5),up,down) and BETWEEN(ma(c,10),up,down) and BETWEEN(ma(c,20),up,down) and BETWEEN(ma(c,30),up,down)and BETWEEN(ma(c,120),up,down) and BETWEEN(ma(c,250),up,down),m)=m;
    n(2,1,500) m(10,1,100)调整参数n为粘合程度,n值越小粘合的程度越高,即均线距离越近;m为粘合周期。

  16、乖离均线
  BIAS1:(CLOSE-MA(CLOSE,N))/MA(CLOSE,N)*100;
  当日股价与N日均线的乖离率=(当日股价-N日均价)/N日均价*100; 
  特别提示:乖离均线是由乖离率的“点”连成的均线。此线虽非普通均线,因常用,故单提出来。
  原理:以当日的均线价格为准,股价和均价之间的差距称为乖离程度,以乖离程度除以均价的百分比就是乖离率。

新兵老头ch
谢谢老杨班长,提供了这么好的学习与交流的平台。
新兵有个想法,不知怎样用公式表达,望高手指教。
    各股涨跌同步,没有强弱的情况下,大盘的涨跌幅度对应分摊到各股,各股的涨跌幅度是多少?如何用公式表达。
我的意思是:大盘涨跌幅度,对应到各股是不同的。比如:大盘下跌1%,各股分别应下跌多少(假设各股之间没有强弱之分)才能对应。

大庆老杨
(INDEXC/REF(INDEXC,1)-1)/1400;
全A股1400多支,每天开盘的约1400支,不考虑各股所占比重,均摊如上。注意,负数时为下降。

教师学炒股
请教大庆老杨老师:
我们知道,每一天的交易中,涨停版、跌停版、上涨家数、下跌家数代表了今天的大势的强弱,我想做一组指标线;如下:
A1:=IF(CLOSE/REF(CLOSE,1)>=1.097,1,0);
涨停:MA(SUM(A1,1),1)*50;
B1:=IF(CLOSE/REF(CLOSE,1)<=0.98,1,0);
跌停:MA(SUM(B1,1),1)*50;
A2:=INDEXADV;
上涨:MA(A2,1)/10;
B2:=INDEXDEC;
下跌:MA(B2,1)/10;
这样得到了上涨和下跌的家数,但是表示涨停、跌停不对,得不到指标线?望能指教!!
可能的话准备改编成类似VOL指标的柱状图和平均线

大庆老杨
这样编写不对路。
大致方法是将你的 A1 B1 两个条件,单独建立两个公式,然后进行横向统计,再引用回来。
我也没编过类似公式。
请会的同学直接出手。

 第七讲从源码中提取选股公式

  要点:从后往前找,删除没用条,去掉修饰符,个别加等号。

例一:找出买点
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) AND CLOSE < EMA(CLOSE,60);

第四步{个别加等号} 条件选股只能输出一条语句,上面这三行为全部输出,所以,作为“条件”的前两行还必须在冒号后面加上等号,表达不输出。结果:
H1:=EMA(CLOSE,8);
H2:=EMA(H1,20);
CROSS(H1,H2) AND CLOSE < 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)-LLV(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*SMA(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 > 0 AND (趋势<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(趋势<=13 AND Var4>13,0,50,5,0),color0099ff;
Var5:=FILTER((趋势<=13 AND Var4>13),10);
DRAWTEXT(Var5,60,'买入'),color0099ff;
STICKLINE(趋势>=90 AND Var4,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)*100;
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(Var17Var18:=MA(趋势线,8);
if(CROSS(Var2,Var18) AND Var2<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)-LLV(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*SMA(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 > 0 AND (趋势<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(趋势<=13 AND Var4>13,0,50,5,0),color0099ff;
Var5:=FILTER((趋势<=13 AND Var4>13),10);
DRAWTEXT(Var5,60,'买入'),color0099ff;

第二步{删除没用条}后
Var3:=3*SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1)-2*SMA(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((趋势<=13 AND Var4>13),10);
DRAWTEXT(Var5,60,'买入'),color0099ff;
第三步{去掉修饰符后}:
趋势:=EMA(Var3,3)-10;
CROSS(趋势,0);
Var4:=(趋势-REF(趋势,1))/REF(趋势,1)*100;
Var5:=FILTER((趋势<=13 AND Var4>13),10);
Var5;
第四步{个别加等号}本公式中的“条件”语句都是不输出的,所以此项省略,但因是要笑脸和买入两个信号,所以还必须把它们连结起来:
Var3:=3*SMA((C-LLV(L,55))/(HHV(H,55)-LLV(L,55))*100,5,1)-2*SMA(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((趋势<=13 AND Var4>13),10);
CROSS(趋势,0)or Var5;
江南茶外汇
请问老师?
我的软件是银河双子星我在写习题: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;
AA AND BB AND VV;

编写公式如同做数学题,要有一个反复领会和实践的过程,不能指望一蹴而就。
没事时打开公式编辑器,从简单的入手,编几个,看看图形,慢慢就会,熟能生巧。