通达信公式技巧.docx
《通达信公式技巧.docx》由会员分享,可在线阅读,更多相关《通达信公式技巧.docx(39页珍藏版)》请在冰豆网上搜索。
通达信公式技巧
编写指标公式技巧
复制内容到剪贴板
代码:
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>A2ANDA2>A3ANDA3>A4,3); 0032--均线空头排列 A1:
=MA(C,N1); A2:
=MA(C,N2); A3:
=MA(C,N3); A4:
=MA(C,N4); COUNT(A1=MA(C,N); BB:
=REF(AA,1); 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=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)=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[=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=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=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(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(HD)>BARSLAST(LD)ANDNOT(LD); PARTLINE(T1,AA),COLORMAGENTA,LINETHICK2; PARTLINE(T2,BB),COLORGREEN,LINETHICK2; DRAWNUMBER(T1=0ANDREF(T1,1)>0,REF(AA,1)+0.1,A1,2); DRAWNUMBER(T2=0ANDREF(T2,1)>0,REF(BB,1)+0.1,B1,2); DRAWNUMBER(ISLASTBARANDT1>0,REF(AA,1)+0.1,A1,2),COLORYELLOW; DRAWNUMBER(ISLASTBARANDT2>0,REF(BB,1)+0.1,B1,2),COLORMAGENTA; 0042--均线变色 MA05:
MA(CLOSE,5); MA30:
MA(CLOSE,30); IF(MA05MA30,MA30,MA30),COLORBLUE; DRAWICON(CROSS(MA05,MA30),L*0.98,4); DRAWICON(CROSS(MA30,MA05),H*1.02,5);
TOP
大户室
贡献
1?
红币
356?
当前离线
2#大中小发表于2007-3-316:
58?
复制内容到剪贴板
代码:
0055--底背离 LLV(L,60)=L)ANDNOT(LLV(DEA,60)=DEA); 0056--顶背离 HHV(H,60)=H)ANDNOT(HHV(DEA,60)=DEA); 0057--N次金叉、死叉 0轴上二次金叉 COUNT(CROSS(DIF,DEA)ANDDEA>0,20)=2ANDCROSS(DIF,DEA)AND DEA>0; 0轴上三次金叉 COUNT(CROSS(DIF,DEA)ANDDEA>0,20)=3ANDCROSS(DIF,DEA)AND DEA>0; 0轴上四次金叉 COUNT(CROSS(DIF,DEA)ANDDEA>0,20)=4ANDCROSS(DIF,DEA)ANDDEA>0; 二次金叉 EXPLAIN(COUNT(CROSS(DIF,DEA),20)=2ANDCROSS(DIF,DEA); 二次死叉 COUNT(CROSS(DEA,DIF),20)=2ANDCROSS(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)=10OROPENMINUTES(TIME)=25OROPENMINUTES(TIME)=40OROPENMINUTES(TIME)=55OROPENMINUTES(TIME)=70OROPENMINUTES(TIME)=85OROPENMINUTES(TIME)=100OROPENMINUTES(TIME)=115OROPENMINUTES(TIME)=130OROPENMINUTES(TIME)=145OROPENMINUTES(TIME)=160OROPENMINUTES(TIME)=175OROPENMINUTES(TIME)=190OROPENMINUTES(TIME)=205OROPENMINUTES(TIME)=220OROPENMINUTES(TIME)=235; HH15:
=IF(TI,H15,C15); LL15:
=IF(TI,L15,C15); STICKLINE(C15>O15,C15,O15,10,0),COLORRED; STICKLINE(C15>O15ANDH15>C15,HH15,C15,0.1,0),COLORRED; STICKLINE(C15>O15ANDO15>L15,O15,LL15,0.1,0),COLORRED; STICKLINE(C15<=O15,C15,O15,10,0),COLORGREEN; STICKLINE(C15<=O15ANDC15>L15,C15,LL15,0.1,0),COLORGREEN; STICKLINE(C15<=O15ANDH15>O15,HH15,O15,0.1,0),COLORGREEN; 注:
以大陆股市为例,四小时,其他市场如超过四小时,可在中间语句“TI:
=”中以15为系数顺序加足,如:
OR250OR265……等等。
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;
TOP
大户室
贡献
1?
红币
356?
当前离线
3#大中小发表于2007-3-316:
58?
复制内容到剪贴板
代码:
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); 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周期新高 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周期新低 附注:
倒数第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线数据)