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;//计算误差大
//穿透力2WINNER(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→不输出的表达式→不秀数值也不秀线图}
DDAA+BB+CC)/3;{;分号,告诉程序要换行执行了}
EE:=(AA+CC)/2;
PARTLINE(CLOSE>0,EE);{秀线图但不秀数值}
注:{ }大括号内或在//后面,可用来输入公式批注。
0063--跨周期引用数据
(一)指针线公式的运算,大部份都是代入开、高、低、收、量等数据去运%C |
|