发表于 2019-04-26 18:00:34 股吧网页版
编写指标公式技巧全集

编写指标公式技巧全集

2008-03-01 22:48:06 / 个人分类:股票知识


公式技巧(0001)

  0001--主图显示代码及板块  
  一、显示板块  
  例一:  
  drawtext(barpos=sysparam(2),h,'\n所属板块:' blkname),align4,coloryellow;
  
  例二:  
  drawtext(sysparam(2)=barpos,c,'所属板块:' blkname),align4,coloryellow;
  
  例三:  
  drawtext(sysparam(2)=barscount(c),h,'[所属版块]:' blkname),align4,coloryellow;
  
  二、显示代码及板块  
  s:=stklabel;
  drawtext(sysparam(2)=barpos,c,s),align4,coloryellow;
  drawtext(barpos=sysparam(2),h,'\n 所属板块:' blkname),align4,coloryellow;{n与所属板块之间空六格,以显示代码}

  0031--均线多头排列  
  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);
  
  0032--均线空头排列  
  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);

  0033--n日均线向下  
  aa:=ma(c,n);
  bb:=ref(aa,1);
  aa< bb


  0034--n日均线向上  
  aa:=ma(c,n);
  bb:=ref(aa,1);
  aa>bb

  0035--n日均线走平  
  aa:=ma(c,n);
  bb:=ref(aa,1);
  aa=bb

  0036--向前n日至m日出现过均线死叉(p1< p2)  
  aa:=ma(c,p1);
  bb:=ma(c,p2);
  cc:=ref(cross(bb,aa),n);
  count(cc,m);

  0037--今日成交量大于n日以来的均量  
  vol>ma(vol,n);


  0038--低位密集  
  a1:=cost(85);
  a2:=cost(15);
  a3:=a1-a2;
  a4:=(a1 a2)/2;
  a5:=a3/a4*100<10;
  b1:=hhv(h,120);
  b2:=llv(l,120);
  b3:=b1-b2;
  b4:=(a4-b2)< b3/2;
  a5 and b4;

  0039--换手率   
  vol/capital*100;

  0040--n日盈亏  
  v1:=vol/sum(vol,n);
  v2:=dma(close,v1);
  v3:(close-v2)/v2*100;

  0041--曲线叠加
  
  指标线的叠加,是为了方便观看和比较,没什么其他的意义。  
  一、对指标曲线的变化幅度放大  
  此法,一线变形,另一线不变,但变形线的走势与原线完全相似。
  
  举例:c叠加v  
  bc:=hhv(c,n)-llv(c,n);//n一般取常用主图上的k线数量
  bv:=hhv(v,n);
  bi:=bc/bv;//叠加比 
  b:=bi[datacount];//最后一根k线的叠加比,保证叠加比前后统一
  成交量:v,volstick;
  f:=c/ref(c,1);
  jc:=ref(c,1)*(1 a*f)*b/a;//a-放大倍数,将c的涨跌幅度f放大
  jl:=llv(jc,n);//平移量。请去掉jc句的=看jl的作用
  收盘价:c,linethick0,coloryellow;//只显示数值,不画线
  partline(c>0,jc-jl[datacount]),coloryellow;//收盘价趋势线,只画线,不显示数值
  
  通式:  
  曲线x叠加曲线y  
  bx:=hhv(x,n)-llv(x,n);
  by:=hhv(y,n)-llv(y,n);
  bi:=bx/by;
  b:=bi[datacount];
  fx:=x/ref(x,1);
  jx:=ref(x,1)*(1 a*fx)*b/a;
  xl:=llv(jx,n);
  曲线y:y;
  曲线x:x,linethick0;//曲线x的值
  partline(c,jx-xl[datacount]);//曲线x的线
  
  二、百分比叠加   
  把两曲线的波动幅度划成百分比进行叠加  
  此法,两线都变形,但走势都与原线完全相似。
  
  举例:c叠加v  
  hv:=hhv(v,n);
  dv:=hv[datacount];
  bv:=100/dv;
  v*bv,volstick;
  hc:=hhv(c,n);
  lc:=llv(c,n);
  bc:=100/(hc[datacount]-lc[datacount]);
  (c-lc[datacount])*bc;
  
  通式一:
  
  曲线x,曲线y  
  xh:=hhv(x,n);
  xl:=llv(x,n);
  xdh:=xh[datacount];
  xdl:=xl[datacount];
  bx:=100/(xdh-xdl);
  曲线x:(x-xdl)*bx;
  
  yh:=hhv(y,n);
  yl:=llv(y,n);
  ydh:=yh[datacount];
  ydl:=yl[datacount];
  by:=100/(ydh-ydl);
  曲线y:(y-ydl)*by;
  
  通式二:
  
  x曲线 y曲线
  
  n:=sysparam(3)-sysparam(2);
  x:=.........; {.........为x曲线定义}
  xh:=hhv(x,n);
  xl:=llv(x,n);
  xdh:=xh[sysparam(3)];
  xdl:=xl[sysparam(3)];
  bx:=100/(xdh-xdl);
  曲线x:(x-xdl)*bx;
  
  y:=.........;{.........为y曲线定义}
  yh:=hhv(y,n);
  yl:=llv(y,n);
  ydh:=yh[sysparam(3)];
  ydl:=yl[sysparam(3)];
  by:=100/(ydh-ydl);
  曲线y:(y-ydl)*by;
  
  三、固定位置叠加
  
  此法应用不多,仅举例。
  
  例一:  
  主图成交量(v叠加c)  
  {m:960,1,2000}
  r0:=m/1000;r:=(l-r0*sysparam(5))/v;
  r1:=llv(r,sysparam(3)-sysparam(2));r2:=r1[sysparam(3)];
  r3:=llv(l-r2*v,sysparam(3)-sysparam(2));
  r4:=r3[sysparam(3)];r5:=(r2*v r4)*0.995;
  stickline(c>=ref(c,1),r5,r0*sysparam(5),6,1)colorred;
  stickline(c< ref(c,1),r5,r0*sysparam(5),6,0)colorcyan;
  partline(v>=0,r0*sysparam(5)) colorwhite;
  partline(r5>0,ma(r5,5));
  partline(r5>0,ma(r5,10));
  partline(r5>0,ma(r5,20));
  
  例二:
  
  input:n(10,2,999);
  m:=sysparam(3)-sysparam(2);
  x:=c;
  y:=sum(if(close>ref(close,1),vol/capital,if(close< ref(close,1),-vol/capital,0)),0);
  xh:=hhv(x,m); xl:=llv(x,m); xdh:=xh[sysparam(3)]; xdl:=xl[sysparam(3)];
  bx:=100/(xdh-xdl);
  收盘:c,linethick0,;
  收盘↑:partline(x>ref(x,1),(x-xdl)*bx),colorred;
  收盘↓:partline(x< ref(x,1),(x-xdl)*bx),colorcyan;
  yh:=hhv(y,m); yl:=llv(y,m); ydh:=yh[sysparam(3)]; ydl:=yl[sysparam(3)];
  by:=100/(ydh-ydl);
  ty:=(y-ydl)*by;
  obv值:y*1000,linethick0,color007bff;
  obv线↑:partline(y>ref(y,1),(y-ydl)*by),coloryellow;
  obv线↓:partline(y< ref(y,1),(y-ydl)*by),color009f00;
  a1:=ref(ty,n)=hhv(ty,2*n 1); b1:=filter(a1,n); c1:=backset(b1,n 1); hd:=filter(c1,n);
  a2:=ref(ty,n)=llv(ty,2*n 1); b2:=filter(a2,n); c2:=backset(b2,n 1); ld:=filter(c2,n);
  aa:=ref(ty,barslast(hd)); bb:=ref(ty,barslast(ld));a1:=ref(y,barslast(hd))*1000; b1:=ref(y,barslast(ld))*1000;
  t1:=barslast(hd)< barslast(ld) and not(hd) ;
  t2:=barslast(hd)>barslast(ld) and not(ld);
  partline(t1,aa),colormagenta,linethick2;
  partline(t2,bb),colorgreen,linethick2;
  drawnumber(t1=0 and ref(t1,1)>0,ref(aa,1) 0.1,a1,2);
  drawnumber(t2=0 and ref(t2,1)>0,ref(bb,1) 0.1,b1,2);
  
  drawnumber(islastbar and t1>0,ref(aa,1) 0.1,a1,2),coloryellow;
  drawnumber(islastbar and t2>0,ref(bb,1) 0.1,b1,2),colormagenta;



  0042--均线变色  
  ma05:ma(close,5);
  ma30:ma(close,30);
  
  if(ma05< ma30,ma05,ma30),colorgreen;
  if(ma05< ma30,ma30,ma05),colorred;
  if(ma05>ma30,ma30,ma30),colorblue;
  
  drawicon(cross(ma05,ma30),l*0.98,4);
  drawicon(cross(ma30,ma05),h*1.02,5);

0055--底背离 
  llv(l,60)=l) and not(llv(dea,60)=dea);

  0056--顶背离  
  hhv(h,60)=h) and not(hhv(dea,60)=dea);

  0057--n次金叉、死叉  
  0轴上二次金叉  
  count(cross(dif,dea) and dea>0,20)=2 and cross(dif,dea) and
  dea>0;
  
  0轴上三次金叉  
  count(cross(dif,dea) and dea>0,20)=3 and cross(dif,dea) and
  dea>0;
  
  0轴上四次金叉  
  count(cross(dif,dea) and dea>0,20)=4 and cross(dif,dea) and dea>0;
  
  二次金叉  
  explain(count(cross(dif,dea),20)=2 and cross(dif,dea);
  
  二次死叉  
  count(cross(dea,dif),20)=2 and cross(dea,dif);

  0058--5分钟副图显示15分钟k线  
  建公式:0015
  
  c15:close;
  o15:open;
  h15:high;
  l15:low;
  
  建公式:十五k线
  
  c15:="0015.c15#min15";
  o15:="0015.o15#min15";
  h15:="0015.h15#min15";
  l15:="0015.l15#min15";
  
  ti:=openminutes(time)=10 or openminutes(time)=25 or openminutes(time)=40 or openminutes(time)=55 or openminutes(time)=70 or openminutes(time)=85 or openminutes(time)=100 or openminutes(time)=115 or openminutes(time)=130 or openminutes(time)=145 or openminutes(time)=160 or openminutes(time)=175 or openminutes(time)=190 or openminutes(time)=205 or openminutes(time)=220 or openminutes(time)=235;
  
  hh15:=if(ti,h15,c15);
  ll15:=if(ti,l15,c15);
  
  stickline(c15>o15,c15,o15,10,0),colorred;
  stickline(c15>o15 and h15>c15,hh15,c15,0.1,0),colorred;
  stickline(c15>o15 and o15>l15,o15,ll15,0.1,0),colorred;
  stickline(c15<=o15,c15,o15,10,0),colorgreen;
  stickline(c15<=o15 and c15>l15,c15,ll15,0.1,0),colorgreen;
  stickline(c15<=o15 and h15>o15,hh15,o15,0.1,0),colorgreen;
  
  注:以大陆股市为例,四小时,其他市场如超过四小时,可在中间语句“ti:=”中以15为系数顺序加足,如:or 250 or 265……等等。
  

  0059--移动成本
  
  不知道函数算法,计算误差在所难免。调整参数“%”可看到不同的移动成本。
  
  ///筹码%
  input:%(90,1,100);
  a:=amount/v/100;
  成本:floor(cost(50-%/2)*100)/100,coloryellow,linethick0;
  ~:ceiling(cost(50 %/2)*100)/100,coloryellow,linethick0;
  集中度:intpart((~-成本)/(~ 成本)*1000)/10,colorgreen;
  平均成本:round(cost(50)*100)/100,linethick0;
  穿透力:(winner(c)-ref(winner(c),1))/v*capital,linethick0;//计算误差大
  //穿透力2:(winner(c)-winner(o))/v*capital,linethick0;//这一写法还是误差大
  获利比例:round(winner(c)*1000)/10,linethick0;


0059--移动成本
  
  不知道函数算法,计算误差在所难免。调整参数“%”可看到不同的移动成本。
  
  ///筹码%
  input:%(90,1,100);
  a:=amount/v/100;
  成本:floor(cost(50-%/2)*100)/100,coloryellow,linethick0;
  ~:ceiling(cost(50 %/2)*100)/100,coloryellow,linethick0;
  集中度:intpart((~-成本)/(~ 成本)*1000)/10,colorgreen;
  平均成本:round(cost(50)*100)/100,linethick0;
  穿透力:(winner(c)-ref(winner(c),1))/v*capital,linethick0;//计算误差大
  //穿透力2:(winner(c)-winner(o))/v*capital,linethick0;//这一写法还是误差大
  获利比例:round(winner(c)*1000)/10,linethick0;
  
  0060--妙用sumbars()函数
  
  sumbars(x,n)
  
  函数的用法如下:
  
  向前累加到指定值到现在的周期数。
  
  用法:  
  sumbars(x,a)  
  将x向前累加直到大于等于a,返回这个区间的周期数
  
  例如:
    sumbars(vol,capital)
  
  1、设计一个指标,计算当日成交量是几天内的最高成交量? 
  2、设计一个指标,计算当日最高价是几天内的最高价?  
  提示:直接用hhv()函数无法得到正确结果。
  
  例一:  
  b:=hhv(h,0);
  a:=if(barpos=1,b[datacount]*1.2,h);
  价:sumbars(ref(a,1)-a,0);
  
  u:=hhv(v,0);
  s:=if(barpos=1,u[datacount]*1.2,v);
  量:sumbars(ref(s,1)-s,0);
  
  或: 
  vh:=hhv(vol,0);
  fv:=if(barpos=1,vh[datacount]*1.2,vol); //vh[datacount]是历史最高成交量
  量创新高周期数:sumbars(ref(fv,1)-fv,0);
  {这里的关键是 ref(fv,1)-fv ,想想看写成 fv-ref(fv,1) 行不行?}
  
  另一种写法:
  vh:=hhv(vol,0);
  fv:=vol;
  fv[1]:=vh[datacount]*1.2; //vh[datacount]是历史最高成交量
  量创新高周期数:sumbars(ref(fv,1)-fv,0);
  {这里的关键是 ref(fv,1)-fv ,想想看写成 fv-ref(fv,1) 行不行?}
  
  代码已经成功了,原理是什么呢?
  
  假设某日成交量是3日内的最大成交量,则必有:  
  ref(vol,3)-vol>=0
  等价于:  
  (ref(vol,3)-ref(vol,2)) (ref(vol,2)-ref(vol,1)) (ref(vol,1)-vol) >=0
  
  意思就是说,“昨成交量与今成交量之差”逐日累加,直到某日累加和大于等于0,则这之间的天数,就是所要求的日数。
  
  我们再来看看sumbars()函数的含义:  
  sumbars(x,a):将x向前累加直到大于等于a,返回这个区间的周期数。
  
  显然上面的式子:  
  (ref(vol,3)-ref(vol,2)) (ref(vol,2)-ref(vol,1)) (ref(vol,1)-vol)>=0
  
  可以写成:  
  sumbars(ref(vol,1)-vol, 0);  
  为何第1周期的成交量要替换成比所有成交量都大的数值?最后,再来思考一个问题,把题目中的求“最大”,改成求“最小”,即多少天内是最小的?
  
  例二:  
  b:=hhv(h,0);
  a:=if(barpos=1,9999,h);
  z:sumbars(ref(a,1)-a,0);
  drawnumber(barpos=sysparam(1),1,z,0)align4,colorwhite;
  
  u:=hhv(v,0);
  s:=if(barpos=1,999999999999,v)
  y:sumbars(ref(s,1)-s,0);
  drawnumber(barpos=sysparam(1),1,y,0)align3,coloryellow;
  
  例三:
  
  hh:=if(barscount(c)=1,9999,h);
  zh:sumbars(ref(hh,1)-hh,0);//价创了n周期新高  
  vh:=if(barscount(c)=1,99999999,v);
  hv:sumbars(ref(vh,1)-vh,0);//量创了n周期新高
  
  ll:=if(barscount(c)=1,0,l);
  zl:sumbars(ll-ref(ll,1),0);//价创了n周期新低
  
  vl:=if(barscount(c)=1,0,v);
  lv:sumbars(vl-ref(vl,1),0);//量创了n周期新低
  
  附注:  
  用99999999等具体数值,最好是尽可能大的数值(比如单精数的上限),否则仍有可能无法全部完成计算,比如上证指数的年线,成交量最大时,仍然超过了99999999。
  
  倒数第6天的最高价格怎么表示?
  
  fh:=high;
  fh[datacount-5]; //倒数第6天的最高价格。
  
  [datacount]
  
  返回k线的数量,即总共有多少根k线。
  

  0061--取得k线的序号
  
  取得k线的序号,正序有下面几种方法:(从1数起)
  
  barpos; 
  sx:barscount(close);  
  sy:sum(1,0);
  datacount;{不随光标变动,只显示最后k线序号}
  
  逆序可用下列方法取得:(从1数起)  
  (datacount-barpos) 1;   
  (datacount-barscount(close)) 1;  
  (datacount-sum(1,0)) 1;
  
  0062--变量宣告   
  指定叙述:经过指定宣告后,飞狐才认识aa、bb、cc,否则会出现"未定义的标示符号"。所谓"定义",程序语言的用语,就叫做"变量宣告"。  
  aa:open;{宣告open,指定给aa→输出的表达式}   
  bb:high,linethick0;{宣告high,指定给bb→输出的表达式→秀数值但不秀线图}   
  cc:=close;{宣告close,指定给cc→不输出的表达式→不秀数值也不秀线图}   
  dd:(aa bb cc)/3;{;分号,告诉程序要换行执行了}   
  ee:=(aa cc)/2;
  partline(close>0,ee);{秀线图但不秀数值}
  
  注:{ }大括号内或在//后面,可用来输入公式批注。
  
  0063--跨周期引用数据   
  (一)指针线公式的运算,大部份都是代入开、高、低、收、量等数据去运算的。  
  (二)开、高、低、收、量又分成下面四种型式出现:  
  开、高、低、收、量(基本的日k线数据)
  开、高、低、收、量(周k线数据)
  开、高、低、收、量(月k线数据)
  开、高、低、收、量(年k线数据)
  
  (三)所以当指针线公式运算,要代入下面数据时:
  
  开、高、低、收、量(周k线数据)
  开、高、低、收、量(月k线数据)
  
  #week 和 #month 就会派上用场。
  
  (四)举例:  
  公式a.建立一个专门被用来引用(quote)的公式区。  
  公式名称:qu  
  a1:(open high low close)/4;  
  说明:上面公式的运算,是代入开、高、低、收(当前周期k线数据)运算的。
  
  公式b.  
  公式名称:aa  
  aa:"qu.a1#week";  
  说明:将下面公式的运算,代入开、高、低、收(周k线数据)运算。
  
  (open high low close) / 4
  
  公式c.
  
  公式名称:bb
  
  bb:"qu.a1#month";
  
  说明:将下面公式的运算,代入开、高、低、收(月k线数据)运算。
  
  (open high low close)/4
  
  附注:
  
  可供引用的周期类型有:
  
  min1,min5,min15,min30,min60,day,week,month
  
  分别表示将1,5,15,30,60分钟k线数据,以及日,周,月k线数据,代入被引用的公式,进行运算。
  
  意义:
  
  可将大周期内跑的数据,引用到小周期内来跑。将小周期内跑的数据,引用到大周期内来跑,就会有问题,因为时间横坐标不一样了。
  
  公式(1):先建立即将被引用的表达式
  
  将公式建立在:技术指针 ( ●主图叠加 ○主图 )
  
  公式名称:nh
  
  aa:=high< ref(high,1);{不输出的表达式,如果被引用还是会变成不输出的表达式}
  bb:=barslast(aa=1);
  cc:ref(high,bb); {输出的表达式,如果被引用还是会变成输出的表达式}
  
  说明:
  
  上面公式的运算,是以当周期时间数列数据运算的。
  
  公式(2):
  
  将公式建立在:技术指针 ( ●主图叠加 ○主图 )
  
  公式名称:nhh
  
  aa:"nh.aa#week";{不输出的表达式}
  bb:"nh.bb#week";
  cc:"www.eastmoney.com#week";{输出的表达式}
  drawnumber(islastbar,cc,cc,2);
  
  说明:上面公式的运算,是以周周期时间数列数据运算的。


0064--未来数据、未知数据
  
  写公式,首先要对已知数据(过去式)、未知数据(未完成式、现在进行式)有通盘的认知。
  
  可将"未来"分为两种情况:
  
  1、实时行情中:在一根k线。
  
  以实时行情中的当前日k线为例。除了o之外,其它h、l、c全有未来之嫌。因为在收盘之前,拉高、打压是司空见惯的事,谁也不能保证h、l不会创出当天的新高和新低,更不用说c了。又如日线周期公式"c>ref(c,1);",前一分钟信号成立,后一分钟可能信号就不成立了。另外,如引用了周k和月k数据,因为当前周k和月k还在变动之中,所以也是未来资料。
  
  2、盘后中:在多根k线。
  
  因为在盘后,日k中的四大要素o、h、l、c就没有未来之可能了。在盘后,除了周五之外,引用的周k指针也是未来数据。除了在月末,引用的月k指针也是未来数据。
  
  总而言之,指针公式就分这两种:
  
  线图信号的确定→全都用已知数据(过去式)来决定。
  线图信号的确定→有用到未知数据(未完成式、现在进行式)来决定。
  
  zig函数
  
  zx:zig(close,8);
  
  最近这次峰点、谷点的确定,也常处在未完成式的状态中。
  
  打个比喻,线图信号的确定→有用到未知数据(未完成式、现在进行式),例如,在实时盘中一根日k线的收盘价变来变去,指针线图当然随之而起舞。
  
  zig函数只是把格局放大,n的日k组合而成的一根多日k线,这一根多日k线的收盘价变来变去,指针线图当然随之而起舞。
  
  0065--主图kd
  
  在主图上,坐标是以k线的价格为主。如何将在0与100中游走的kd指针附加上去,这是写作指针的基本逻辑观念的运用。
  param#1( n,9,2,100 )
  param#2( m1,3,1,40 )
  param#3( m2,3,1,40 )
  
  rsv:=(close-llv(low,9))/(hhv(high,9)-llv(low,9))*100 linethick0;{:=运算过程不显示值与图}
  k:sma(rsv,3,1),linethick0,colorwhite;{linethick0只显值不显图}
  d:sma(k,3,1),linethick0,coloryellow;
  
  hh:=sysparam(4);{主图可见k线最高价}
  ll:=sysparam(5);{主图可见k线最低价}
  
  kk:=k/100*(hh-ll) ll;
  dd:=d/100*(hh-ll) ll;
  
  partline(1=1,kk),colorwhite; {条件成立时,则显示图线形}
  partline(c>0,dd),coloryellow;
  
  c;{显示收盘价的值与图线形}
  partline(c>=ref(c,1),c),colorred;{显示收盘价的图改成涨红跌绿联机图}
  partline(c< ref(c,1),c),colorgreen;
 

  0066--描绘k线  
  例一:普通 
  将下列公式建立在:技术指针 ( ○主图叠加 ●主图 ) 
  公式名称:kl
  
  stickline( isup , high , low , 0.1 , 0 ) , colorred ;
  stickline( isup , close , open , 8 , 1 ) , colorred ;
  stickline( isdown , high , low , 0.1 , 0 ) , colorcyan ;
  stickline( isdown , close , open , 8 , 0 ) , colorcyan ;
  
  stickline( isequal and c>ref( c , 1 ) , high , low , 0.1 , 0 ) , colorred ;
  stickline( isequal and c>ref( c , 1 ) , close , open , 8 , 0 ) , colorred ;
  stickline( isequal and c<=ref( c , 1 ) , high , low , 0.1 , 0 ) , colorcyan ;
  stickline( isequal and c<=ref( c , 1 ) , close , open , 8 , 0 ) , colorcyan ;
  
  x:=barscount( close ) ;
  
  {以下是描绘第一个交易日的k线,以补前面含盖的不足}
  
  stickline( isequal and x = 1 , high, low, 0.1, 0 ) , colorred ;
  stickline( isequal and x = 1 , close , open , 8 , 0 ) , colorred ;
  
  说明:
  
  isup函数:相当于 if( close>open , 1 , 0 )。  
  isequal函数:相当于 if( close=open , 1 , 0 )。  
  isdown函数:相当于 if( close < open , 1 , 0 )。  
  stickline函数,画出来的对象有重叠覆盖性:→后画的对象可覆盖先画的对象。
  
  例二:配色
  
  stickline( isup , high , low , 0.1 , 0 ),color04fefc ;
  stickline( isup , close , open , 8 , 0 ),color0466fc ;
  stickline( isup , close , open , 3 , 0 ),color04fefc ;
  stickline( isdown , high , low , 0.1 , 0 ),colorfcfe04 ;
  stickline( isdown , close , open , 8 , 0 ),colorfc6604 ;
  stickline( isdown , close , open , 3 , 0 ),colorfcfe04 ;
  
  stickline( isequal and c>ref( c , 1 ) , high , low , 0.1 , 0 ),color04fefc ;
  stickline( isequal and c>ref( c , 1 ) , close , open , 8 , 0 ),color0466fc ;
  stickline( isequal and c>ref( c , 1 ) , close , open , 3 , 0 ),color04fefc ;
  stickline( isequal and c<=ref( c , 1 ) , high , low , 0.1 , 0 ),colorfcfe04 ;
  stickline( isequal and c<=ref( c , 1 ) , close , open , 8 , 0 ),colorfc6604 ;
  stickline( isequal and c<=ref( c , 1 ) , close , open , 3 , 0 ),colorfcfe04 ;
  
  x:=barscount( close ) ;
  
  {以下是描绘第一个交易日的k线,以补前面含盖的不足}
  
  stickline( isequal and x = 1 , high, low, 0.1, 0 ),color04fefc ;
  stickline( isequal and x = 1 , close , open , 8 , 1 ),color0466fc ;
  stickline( isequal and x = 1 , close , open , 3 , 1 ),color04fefc ;
  

  0067--分时k线当天k线序号
  
  范例:开盘第一根分时k线,指定一个值=1给它,其它为0。  
  xa:ref(date,1)<>date, stick;
  
  范例:每天的分时k线,指定它的当天k线序号给它  
  xa:=ref(date,1)<>date, stick;   
  xb:barslast(xa=1) 1 ,stick;
  
  应用:每天在分时k线,累计成交张数  
  xa:=ref(date,1)<>date , stick;   
  xb:=barslast(xa=1) 1 ,stick;  
  sv:sum( vol , xb ) ;
  
  范例:标记今天分时k线的今天k线序号。过了午夜12点,就又要等早盘开盘后序号数字才会出现
  
  xa:=currentdate=date ;
  xb:=ref(xa , 1)<>xa ;
  
  xc:hhvbars(xb , 0) xa ;
  
  应用:13均线今天当下最后数值向后延申,画平台线。
  
  xa:=currentdate=date ;
  xb:=ref(xa , 1)<>xa ;
  
  xc:=hhvbars(xb , 0) xa ;
  
  xd:=ma(c,13);
  
  xe:=refx(xd , 300);
  xf:if(xc>=0 , xe , 0) ,linethick0,color99ffff;
  partline(xc>=1 , xf) ,color99ffff;
  

  0068--系统参数函数
  
  这组函数,应用在取得当前可视主图区内的一些数字信息,如下所示:  
  1.当前十字光标所在位置,那根k线的序号;
  2.当前可视主图区,最初那根k线的序号;
  3.当前可视主图区,最后那根k线的序号;
  4.当前可视主图区,最高价;
  5.当前可视主图区,最低价。
  
  注:但须调出十字光标后,这组函数才能发生作用。否则回传的值是不确定的。 
  sysparam(1)
  sysparam(2)
  sysparam(3)
  sysparam(4)
  sysparam(5)
  
  函数:sysparam(1)
  说明: 回传当前 十字光标所在位置那根k线的序号
  
  函数:sysparam(2)
  说明: 回传当前可视主图区 最初那根k线的序号
  
  函数:sysparam(3)
  说明: 回传当前可视主图区 最后那根k线的序号
  
  函数:sysparam(4)
  说明: 回传当前可视主图区 最高价
  
  函数:sysparam(5)
  说明: 回传当前可视主图区 最低价
  
  范例:
  
  将公式建立在:技术指针 ( ●主图叠加 ○主图 )
  
  ss:=sysparam( 1 ) ;
  dd:=sum( 1 , 0 ) ;
  
  cc:close * 1.07 , linethick0 , coloryellow ;
  
  partline( ss>=dd , cc ) , coloryellow ;
  
  注:
  
  dd:sum( 1 , 0 ) ;
  ss:sysparam( 1 ) ;
  
  上面两者,显然有明显的不同之处。
  
  1.dd是一组变量型时间数列,代表k线的序号。
  
  2.ss是隐含有n组常数型时间数列(n=这支股票的k线总数)。
  
  dd:sum(1,0)
  
  以数学的二维空间f(x)=y表示:y=x
  
  ss:sysparam(1)
  
  以数学的二维空间f(x)=y表示,其中a属正整数:y=a
  
  sum(1,0)=sysparam(1)意指,下面两条线交叉成立的那一点:
  
  y=x
  
  y=a
  
  范例:
  
  ma1:=ma(close,5);
  ma2:=ma(close,13);
  
  xa:=cross(ma1,ma2) ;
  
  xb:if(xa=1,sum(1,0),0);{条件成立时回传它的k线序号}


0059--移动成本
  
  不知道函数算法,计算误差在所难免。调整参数“%”可看到不同的移动成本。
  
  ///筹码%
  input:%(90,1,100);
  a:=amount/v/100;
  成本:floor(cost(50-%/2)*100)/100,coloryellow,linethick0;
  ~:ceiling(cost(50 %/2)*100)/100,coloryellow,linethick0;
  集中度:intpart((~-成本)/(~ 成本)*1000)/10,colorgreen;
  平均成本:round(cost(50)*100)/100,linethick0;
  穿透力:(winner(c)-ref(winner(c),1))/v*capital,linethick0;//计算误差大
  //穿透力2:(winner(c)-winner(o))/v*capital,linethick0;//这一写法还是误差大
  获利比例:round(winner(c)*1000)/10,linethick0;
  
  0060--妙用sumbars()函数
  
  sumbars(x,n)
  
  函数的用法如下:
  
  向前累加到指定值到现在的周期数。
  
  用法:  
  sumbars(x,a)  
  将x向前累加直到大于等于a,返回这个区间的周期数
  
  例如:
    sumbars(vol,capital)
  
  1、设计一个指标,计算当日成交量是几天内的最高成交量? 
  2、设计一个指标,计算当日最高价是几天内的最高价?  
  提示:直接用hhv()函数无法得到正确结果。
  
  例一:  
  b:=hhv(h,0);
  a:=if(barpos=1,b[datacount]*1.2,h);
  价:sumbars(ref(a,1)-a,0);
  
  u:=hhv(v,0);
  s:=if(barpos=1,u[datacount]*1.2,v);
  量:sumbars(ref(s,1)-s,0);
  
  或: 
  vh:=hhv(vol,0);
  fv:=if(barpos=1,vh[datacount]*1.2,vol); //vh[datacount]是历史最高成交量
  量创新高周期数:sumbars(ref(fv,1)-fv,0);
  {这里的关键是 ref(fv,1)-fv ,想想看写成 fv-ref(fv,1) 行不行?}
  
  另一种写法:
  vh:=hhv(vol,0);
  fv:=vol;
  fv[1]:=vh[datacount]*1.2; //vh[datacount]是历史最高成交量
  量创新高周期数:sumbars(ref(fv,1)-fv,0);
  {这里的关键是 ref(fv,1)-fv ,想想看写成 fv-ref(fv,1) 行不行?}
  
  代码已经成功了,原理是什么呢?
  
  假设某日成交量是3日内的最大成交量,则必有:  
  ref(vol,3)-vol>=0
  等价于:  
  (ref(vol,3)-ref(vol,2)) (ref(vol,2)-ref(vol,1)) (ref(vol,1)-vol) >=0
  
  意思就是说,“昨成交量与今成交量之差”逐日累加,直到某日累加和大于等于0,则这之间的天数,就是所要求的日数。
  
  我们再来看看sumbars()函数的含义:  
  sumbars(x,a):将x向前累加直到大于等于a,返回这个区间的周期数。
  
  显然上面的式子:  
  (ref(vol,3)-ref(vol,2)) (ref(vol,2)-ref(vol,1)) (ref(vol,1)-vol)>=0
  
  可以写成:  
  sumbars(ref(vol,1)-vol, 0);  
  为何第1周期的成交量要替换成比所有成交量都大的数值?最后,再来思考一个问题,把题目中的求“最大”,改成求“最小”,即多少天内是最小的?
  
  例二:  
  b:=hhv(h,0);
  a:=if(barpos=1,9999,h);
  z:sumbars(ref(a,1)-a,0);
  drawnumber(barpos=sysparam(1),1,z,0)align4,colorwhite;
  
  u:=hhv(v,0);
  s:=if(barpos=1,999999999999,v)
  y:sumbars(ref(s,1)-s,0);
  drawnumber(barpos=sysparam(1),1,y,0)align3,coloryellow;
  
  例三:
  
  hh:=if(barscount(c)=1,9999,h);
  zh:sumbars(ref(hh,1)-hh,0);//价创了n周期新高  
  vh:=if(barscount(c)=1,99999999,v);
  hv:sumbars(ref(vh,1)-vh,0);//量创了n周期新高
  
  ll:=if(barscount(c)=1,0,l);
  zl:sumbars(ll-ref(ll,1),0);//价创了n周期新低
  
  vl:=if(barscount(c)=1,0,v);
  lv:sumbars(vl-ref(vl,1),0);//量创了n周期新低
  
  附注:  
  用99999999等具体数值,最好是尽可能大的数值(比如单精数的上限),否则仍有可能无法全部完成计算,比如上证指数的年线,成交量最大时,仍然超过了99999999。
  
  倒数第6天的最高价格怎么表示?
  
  fh:=high;
  fh[datacount-5]; //倒数第6天的最高价格。
  
  [datacount]
  
  返回k线的数量,即总共有多少根k线。
  

  0061--取得k线的序号
  
  取得k线的序号,正序有下面几种方法:(从1数起)
  
  barpos; 
  sx:barscount(close);  
  sy:sum(1,0);
  datacount;{不随光标变动,只显示最后k线序号}
  
  逆序可用下列方法取得:(从1数起)  
  (datacount-barpos) 1;   
  (datacount-barscount(close)) 1;  
  (datacount-sum(1,0)) 1;
  
  0062--变量宣告   
  指定叙述:经过指定宣告后,飞狐才认识aa、bb、cc,否则会出现"未定义的标示符号"。所谓"定义",程序语言的用语,就叫做"变量宣告"。  
  aa:open;{宣告open,指定给aa→输出的表达式}   
  bb:high,linethick0;{宣告high,指定给bb→输出的表达式→秀数值但不秀线图}   
  cc:=close;{宣告close,指定给cc→不输出的表达式→不秀数值也不秀线图}   
  dd:(aa bb cc)/3;{;分号,告诉程序要换行执行了}   
  ee:=(aa cc)/2;
  partline(close>0,ee);{秀线图但不秀数值}
  
  注:{ }大括号内或在//后面,可用来输入公式批注。
  
  0063--跨周期引用数据   
  (一)指针线公式的运算,大部份都是代入开、高、低、收、量等数据去运%c


0069--概率统计
  
  count,计数。sum,总数、和。
  
  当数组为逻辑运算判断的结果时,count和sum的返回值是一样的。一般习惯上,对于逻辑运算信号,用count统计,返回其它数值的,用sum统计。
  
  当count统计一般数值时,数组大于等于1时,计入;小于1时,不计入。这两个函数,主要用于统计。
  
  用count(cross(ma(c,5),ma(c,10)),0);就可以统计出全部的五天均线上穿十天均线的金叉数。
  
  用sum(cross(ma(c,5),ma(c,10)),0);和以上得出的结果应该是一样的。
  
  股市的不随机规律,隐藏在统计概率之中。用这两个函数,可以统计很多概率性的规律。
  
  比如,以两天的收盘价相比,昨天是下跌的,今天的下跌的概率是多少?
  
  a:=c< ref(c,1);
  b:=ref(a,1) and c>ref(c,1);{昨天下跌,今天上涨}
  d:=ref(a,1) and c=ref(c,1);{昨天下跌,今天平盘}
  e:=ref(a,1) and c< ref(c,1);{昨天下跌,今天下跌}
  f:=count(b,0) count(d,0) count(e,0);
  上升概率:100*count(b,0)/f;
  下跌概率:100*count(e,0)/f;
  平盘概率:100*count(d,0)/f;
  
  从两市指数看,昨天下跌,今天下跌的概率始终大于50%。那么连跌两天之后,第三天收盘的各种概率是多少?
  
  a:=c< ref(c,1) and ref(c,1)< ref(c,2);
  b:=ref(a,1) and c>ref(c,1);{前两天下跌,今天上涨}
  d:=ref(a,1) and c=ref(c,1);{前两天下跌,今天平盘}
  e:=ref(a,1) and c< ref(c,1);{前两天下跌,今天下跌}
  f:=count(b,0) count(d,0) count(e,0);
  上升概率:100*count(b,0)/f;
  下跌概率:100*count(e,0)/f;
  平盘概率:100*count(d,0)/f;
  
  从指数的输出看,概率更明显了。连跌三天之后呢?
  
  a:=c< ref(c,1) and ref(c,1)< ref(c,2) and ref(c,2)< ref(c,3);
  b:=ref(a,1) and c>ref(c,1);{前三天下跌,今天上涨}
  d:=ref(a,1) and c=ref(c,1);{前三天下跌,今天平盘}
  e:=ref(a,1) and c< ref(c,1);{前三天下跌,今天下跌}
  f:=count(b,0) count(d,0) count(e,0);
  上升概率:100*count(b,0)/f;
  下跌概率:100*count(e,0)/f;
  平盘概率:100*count(d,0)/f;
  
  规律就更明显了。
  
  不要小看这些数据。虽然没有有些“高手”做出的成功率达百分之九十左右的公式那么夸张,但很有意义的。要知道股市中的随机因素太多,平衡性很强,稍稍的统计偏向,足可作为有用的参考。
  
  这只是简单的例子,用这两个函数,可以做出很多的有用的统计数据。多数的交易系统的"胜率",可以由此统计出来。
  
  统计:  
  a:=cross(c,ma(c,3));
  b:=cross(ma(c,3),c);
  d:b*(c-ref(c,barslast(a)));
  月:sum(d,20);
  季:sum(d,60);
  半:sum(d,120);
  年:sum(d,250);
  总和:sum(d,0);


  0070--五彩k线常用颜色
  黑色 colorblack 蓝色 colorblue
棕色 colorbrown 青色 colorcyan
灰色 colorgray 绿色 colorgreen
晶红 colormagenta 红色 colorred
白色 colorwhite 黄色 coloryellow
  

  0071--分析家公式设定注意事项
  参数 最多四个参数,每个有最大和最小及缺省值,须有自己名称
注释 用大括号括起来放在被注释语句之后
公式名称 由字母或数字组成,在同类公式中必须唯一,最多九个字符
中间公式 使用":="来定义名字,不能与系统提供的函数同名
param#1-4 对应于参数1-4,大小写敏感
坐标线位置 最多七个,用分号分隔
组合公式设置 小公式间用分号隔开
绘图参数使用 将其插入到指标公式的后面,用逗号分隔开
区分多条指标线 在指标公式前写上名称并加上一个冒号
指标线名字的使用 可以当函数名用
指标线绘制的极限 可同图显示16条指标线
五彩颜色参数使用 将其插入到指标公式的后面,用逗号分隔开

郑重声明:用户在财富号/股吧/博客社区发表的所有信息(包括但不限于文字、视频、音频、数据及图表)仅仅代表个人观点,与本网站立场无关,不对您构成任何投资建议,据此操作风险自担。请勿相信代客理财、免费荐股和炒股培训等宣传内容,远离非法证券活动。请勿添加发言用户的手机号码、公众号、微博、微信及QQ等信息,谨防上当受骗!
郑重声明:用户在社区发表的所有资料、言论等仅仅代表个人观点,与本网站立场无关,不对您构成任何投资建议。用户应基于自己的独立判断,自行决定证券投资并承担相应风险。《东方财富社区管理规定》