教你学股票公式编程 -(6)

2018-12-25 23:18

不知道函数算法,计算误差在所难免。调整参数“%”可看到不同的移动成本。

///筹码%

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:\

说明:将下面公式的运算,代入开、高、低、收(周K线数据)运算。

(OPEN+HIGH+LOW+CLOSE) / 4

公式C.

公式名称:BB

BB:\

说明:将下面公式的运算,代入开、高、低、收(月K线数据)运算。


教你学股票公式编程 -(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:山东省济宁市2018届高三第二次模拟考试语文试题 Word版含答案&nb

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: