飞狐公式编写基础.docx

上传人:b****6 文档编号:7454698 上传时间:2023-01-24 格式:DOCX 页数:107 大小:84.22KB
下载 相关 举报
飞狐公式编写基础.docx_第1页
第1页 / 共107页
飞狐公式编写基础.docx_第2页
第2页 / 共107页
飞狐公式编写基础.docx_第3页
第3页 / 共107页
飞狐公式编写基础.docx_第4页
第4页 / 共107页
飞狐公式编写基础.docx_第5页
第5页 / 共107页
点击查看更多>>
下载资源
资源描述

飞狐公式编写基础.docx

《飞狐公式编写基础.docx》由会员分享,可在线阅读,更多相关《飞狐公式编写基础.docx(107页珍藏版)》请在冰豆网上搜索。

飞狐公式编写基础.docx

飞狐公式编写基础

例5:

设计一个副图指标,8日内如果先后出现5日均价线上穿10日均价线、5日均价线上穿20日均价线,则返回1,否则返回0。

求解:

根据上面的学习,“5日均价线上穿10日均价线”的条件表达式是cross(ma(c,5),ma(c,10)),“5日均价线上穿20日均价线”的条件表达式是cross(ma(c,5),ma(c,20)),那么本例是不是可以写成

cross(ma(c,5),ma(c,10))andcross(ma(c,5),ma(c,20))

答案是否定的。

因为这个条件表达式是表示同时满足2个条件,怎么办?

本指标的设计要用到逻辑函数EXIST(X,N),查询EXIST(X,N)的注释如下

{是否存在

用法:

EXIST(X,N)返回N周期内是否存在满足条件X,N可为常数或变量

例如:

EXIST(C>O,10)表示10个周期中存在阳线}

正确代码结果如下,我们把公式命名为sl003:

信号:

EXIST(cross(ma(c,5),ma(c,10)),8)ANDEXIST(cross(ma(c,5),ma(c,20)),8)

  代码说明:

  ①飞狐的公式代码不区分字母的大小写,字母可以大写,也可以小写或者大小写混合。

  ②本例中,公式代码使用了函数嵌套,即一个函数套一个函数,这里使用了三重嵌套。

  ③要看懂嵌套函数,基本的分析方法是,从里到外一层层分析,如EXIST(cross(ma(c,5),ma(c,20)),8),先分析ma(c,5)、ma(c,10)是什么意思,然后分析cross(ma(c,5),ma(c,20))是什么意思,最后再分析EXIST(cross(ma(c,5),ma(c,20)),8)是什么意思。

  例5的公式,显示的结果如何,不错吧?

条件满足时,指标线的值会由0突变为1,“信号”很醒目。

不过还是有点不爽,如果连续出现信号则第一次满足条件才给出“信号”,似乎更好些,怎么办呢?

留给大家作为练习吧^_^。

  给一点提示:

①利用“引用函数”类中的“信号过滤”函数FILTER(X,N)。

②巧妙利用“突变”这个特征。

  这个练习对于初学者有点难度,只有不断学习、不断钻研,才能更快进步,南客给大家加油!

  2、中间变量:

考察上面的示例公式sl003中,ma(c,5)共出现了2次,每出现一次,飞狐软件都要进行一次5日均价的运算,要重复算2次相同的运算。

如果一个公式中,类似这样ma(c,5)出现的次数是N次,那岂不是要重复N次相同的运算,是不是有点太“笨”了?

效率太低了?

解决的办法是,把运算结果先“存”到中间变量,要用时,从中间变量中取出。

  例6:

选用适当的中间变量,改写公式sl003。

  求解:

正确结果如下,我们下面公式命名为sl004

ma5:

=ma(c,5);

ma10:

=ma(c,10);

ma20:

=ma(c,20);

信号:

EXIST(cross(ma5,ma10),8)ANDEXIST(cross(ma5,ma20),8);

或者

n:

=8;

ma5:

=ma(c,5);

ma10:

=ma(c,10);

ma20:

=ma(c,20);

tj1:

=EXIST(cross(ma5,ma10),n);

tj2:

=EXIST(cross(ma5,ma20),n);

信号:

tj1andtj2;

  第二段代码解释:

  ①ma5:

=ma(c,5)是中间语句,ma5是中间变量(也可称为临时变量),中间变量是用“:

=”来定义的,而变量(即序列变量)的定义是用“:

”,前者在冒号后多了个等号;ma10、ma20也是中间变量,想想看公式代码中,“信号”是中间变量吗?

  ②公式中间变量的结果,不会在K线图的主图或副图中显示出来。

  ③公式代码中,n:

=8,不是为了减少运算量,这里使用中间变量的目的,是为了改写代码方便,例如,公式设计好后,发现用8不大妥,想写为9,于是就需要在代码中找若干处把8改写为9,用中间语句n:

=8,则公式代码只需修改一处就行了。

  说明:

通过以上修改代码,减少了公式的运算量,这称之为公式的优化,一个公式定型前,要养成优化的好习惯,以提高公式的运算速度,提高运行效率。

  3、条件函数:

设计飞狐公式时,条件函数IF很重要,经常都要用到,查询注释如下:

{根据条件求不同的值。

用法:

IF(X,A,B)若X不为0则返回A,否则返回B

例如:

IF(CLOSE>OPEN,HIGH,LOW)表示该周期收阳则返回最高值,否则返回最低值}

  例7:

问题同例5,但输出的“信号”修改为10和0。

  求解:

公式代码如下

n:

=8;

ma5:

=ma(c,5);

ma10:

=ma(c,10);

ma20:

=ma(c,20);

tj1:

=EXIST(cross(ma5,ma10),n);

tj2:

=EXIST(cross(ma5,ma20),n);

tj3:

=tj1andtj3;

信号:

if(tj3=1,10,0);

  代码解释:

  ①信号:

if(tj3=1,10,0),表示如果tj3成立(即等于1)则返回10,否则返回的值为0。

  ②信号:

if(tj3=1,10,0)可以简写为信号:

if(tj3,10,0),参阅IF的注释,想想看,这是为什么?

四、绘图函数、线型描述:

  上一讲,我们学习了条件表达式,这是公式设计中较难的部分,也是最为灵活多变的部分。

今天轻松一下,学习绘图函数、线型描述符。

  1、线型描述函数:

查询可知,目前飞狐本类函数中,共有函数22个,其中描述指标线颜色的有11个,其余11个函数描述指标线的形状、宽度、偏移等,下面举例说明部分函数的常见用法。

  例1:

指定5日均价线显示为红色。

  求解1:

ma5:

ma(c,5),colorred

  求解2:

ma5:

ma(c,5),color0000ff

  说明:

  ①colorXXXXXX形式的颜色描述,XXXXXX是6位颜色代码,其中0000ff表示红色,其它颜色的代码,请查阅飞狐帮助文件中的附录部分。

  ②用colorXXXXXX形式来描述,可以表达更多的颜色。

  例2:

指定5日均价显示为红色,并加宽显示,10日均价显示为蓝色,线宽为默认,20日均线不显示指标线但显示数值。

  求解:

代码如下

ma5:

ma(close,5),colorred,linethick2;

ma10:

ma(c,10),colorblue;

ma20:

ma(c,20),linethick0;

这里用到了描述符linethick,注释如下:

{改变指标线粗细

例如:

ma1:

ma(close,5),linethick3;

LINETHICK0表示不画出指标线,不影响坐标,但可在顶部显示数值}

  2、绘图函数:

飞狐提供了丰富的绘图函数,巧妙应用绘图函数,可以使指标线色彩鲜艳,可以画出自己绘出K线等等。

  例3:

5日均价线走平或向右上倾斜时,显示为晶红色,否则显示为绿色。

  求解:

ma5:

ma(c,5),colormagenta;

partline(ma5

代码解释:

  ①ma5:

ma(c,5),colorred,5日均价线显示为晶红色。

  ②partline(ma5

本语句在第一条代码语句之后,所画的绿线将覆盖第一条语句所画的晶红色线。

这样第一条语句所画的晶红色线,只剩下走平、向上倾斜部分保持晶红色。

  例4:

利用STICKLINE(COND,PRICE1,PRICE2,WIDTH,EMPTY)函数绘制K线。

  分析:

K线由上、下影线、实体部分组成,影响K线的股价有open、close、high、low,如果今上涨,K线为红色,否则为蓝色。

代码如下:

stickline(isup,low,high,1,1),colorred;{今上涨,在最低价到最高价间画红色细线}

stickline(isup,open,close,7,1),colorred;{今上涨,在收盘价到开盘价间画红色空心柱线}

stickline(isdown,low,high,1,0),colorblue;{今下跌,在最低价至最高价间画蓝色细线}

stickline(isdown,open,close,7,0),colorblue;{今下跌,在开盘价至收盘价间画蓝色实心柱线}

五、引用其它公式、引用其它周期、引用其它个股数据:

  1、摘录飞狐帮助文件中的相关内容如下,其中选股公式、交易公式将在后面陆续讲解:

 

  ㈠引用指标公式/交易系统/条件选股公式

  1、引用指标公式,可以写成:

  "公式名称.指标线名称"(参数表),其中参数表中的参数个数应该与该公式的实际参数数量一致,若不写参数表,则表示使用缺省参数。

  例如:

"MACD.DIFF",表示引用根据缺省参数,引用MACD指标中DIFF指标线数值。

  2、引用交易系统公式,可以写为:

  "SYSTEM.公式名称.交易类型"(参数表),交易类型可以为ENTERLONG、EXITLONG、ENTERSHORT或者 EXITSHORT,分别表示引用多头买入、多头卖出、空头买入、空头卖出。

  例如:

"SYSTEM.MACD.ENTERLONG",表示根据缺省参数,引用MACD交易系统的多头买入条件。

  3、用条件选股公式,可以写为:

  "EXPLORER.公式名称"(参数表)

  例如:

"EXPLORER.MACD",表示根据缺省参数,引用MACD条件选股条件。

  ㈡跨周期引用公式  

  下面举例说明跨周期引用的书写方法:

  例1."MACD.DIFF#WEEK"(26,10,5)

  表示引用MACD指标公式DIFF指标线的数值,在计算指标线值时,参数取(26,10,5),计算周期取周线。

  例2."SYSTEM.MACD.ENTERLONG#MONTH"

  表示引用MACD交易系统的多头买入信号,参数取缺省值,计算周期取月线。

 

  注意:

跨周期引用只能从较短周期引用较长周期,不允许反方向的引用。

  可供引用的周期类型有:

MIN1,MIN5,MIN15,MIN30,MIN60,DAY,WEEK,MONTH等八种,分别表示1、5、15、30、60分钟线,以及日线、周线、月线。

 

  ㈢引用任意股票的数据

  在公式中可以引用其它任何股票的数据,方法为:

  "股票代码$数据名称"

  数据名称可以是OPEN、HIGH、LOW、CLOSE、VOL、AMOUNT,分别表示包括开盘价、最高价、最低价、收盘价、成交量、成交额。

  例如,"000001$CLOSE",表示引用深发展A的收盘价。

 

  2、举例说明:

其实上面已经有例子了,这里再举一个综合性的例子:

  例1:

在分笔周期的主图,显示价位线(即PRICE主图),按下面要求设计主图指标,设为SL005:

  ⑴显示最新价;

  ⑵显示均价线;

  ⑶显示昨收盘,以红色线表示;

  求解:

(请回顾一下,什么是主图指标、主图叠加指标)

  ⑴显示最新价,就是最新的收盘价。

公式代码很简单,即

最新价:

close;

  ⑵所谓均价,就是今天的平均成交价,等于“当前”的总成交金额除以“当前”的总成交量。

在分笔周期,显示的主图,仅显示当天的数据,它的有效起始周期,是当天的开盘时间,结束于当天收盘。

  “当前”的总成交金额,等于从开盘到“当前”的成交金额总和,需用“引用函数”类中的求和函数即SUM(X,N),经查询,其注释为

{求总和。

用法:

SUM(X,N),统计N周期中X的总和,N=0则从第一个有效值开始。

例如:

SUM(VOL,0)表示统计从上市第一天以来的成交量总和}

成交金额的函数是amount,因此,“当前”的总成交金额为

sum(amount,0)

同理,“当前”的总成交量为

sum(vol,0)

这样,我们就得到均价的公式代码为

均价:

sum(amount,0)/sum(vol,0);

  ⑶昨收盘,是日周期,现在我们是设计分笔周期的公式,这就是说,现在要从分笔周期引用日周期的昨收盘价。

怎么办?

当然要设计一个被引用的指标公式,设为yy001(意为“引用001”),只需一行代码

zsp:

ref(c,1);

有了被引用的公式yy001,设计引用昨收盘的公式如下

昨收盘:

"yy001.zsp#day",colorred;{意思是,引用公式yy001的变量(即指标线)zsp,被引用的周期是日线}

综合起来,本题的主公式代码如下(另有一个被引用公式yy001),

最新价:

c;

均价:

sum(amount,0)/sum(vol,0)/100;

昨收盘:

"yy001.zsp#day",colorred;

最后公式编辑器中,设定公式的默认周期为分笔,其它周期全部禁用。

  一、选股公式:

  显然选股公式,就是用于选出符合条件的股票,由若干中间语句组成,并且其中不含绘图函数。

只有一行输出语句,位于最后一条语句,且必须是条件表达式。

  例1:

设计一个公式,选出N周期内涨幅大于或等于5%的股票。

  求解:

公式代码如下,其中N为参数:

 

--------------------------------------------------------------------------------

收盘价:

=close;

N日前收盘:

=ref(close,N);

选股条件:

收盘价/N日前收盘>=1.05;-

  代码解释:

公式由我们所熟悉的代码组成,共3行,前2行是中间语句,最后一行是选股的条件,其中最后一行“选股条件:

”,也可以不写。

  操作简介:

在飞狐中,按F7,弹出如图界面。

图中①可以调整参数。

②可以选择在什么分析周期下选股。

③可以改变选股范围,默认为A股市场。

④可以让选出的股票输出到指定的板块,并将该板块设为自动板块。

⑤可以指定时段进行选股,默认是对最后一天进行选股。

⑥对某些公式,还可以进行成功率测试。

  在选股的操作过程中,大家可以发现,利用技术指标也可以进行选股。

  练习1:

编制一个选股公式,选出RSI突破80的股票。

  思考1:

建立如下选股公式,该公式的意义是什么?

实际操作一下,看看有什么问题?

为什么?

 

--------------------------------------------------------------------------------

spj:

close;

zsp:

=ref(c,1);

spj/zsp<0.95;--------------------------------------------------------------------------------

  思考2:

选股操作时,当选择输出到板块时,有个自动板块的选择,起什么作用?

  思考与操作1:

利用例1的选股公式,想选出最近10天,所有2天内涨幅超过5的A股板块股票。

  解疑1:

某股友选股时,发现500001符合选股条件,但却选不出来,你能帮他分析一下原因吗?

  二、交易系统:

  交易系统公式(简称交易公式),用于指示满足特定条件时的买入信号和卖出信号。

公式的由若干中间语句,加上指定的最后4行条件表达式代码组成,最后4行分别由“ENTERLONG:

”“EXITLONG:

”、“ENTERSHORT:

”、“EXITSHORT:

”开始,表示多头买入、多头卖出及空头买入、空头卖出的条件。

这4行也可以删去若干行,但至少保留其中的一行,表示只指示其中一种信号。

  例2:

我们来看看飞狐交易系统中的“RSI相对强弱指标交易系统”公式,其中LL、LH是参数:

--------------------------------------------------------------------------------

LC:

=REF(CLOSE,1);{LC为中间变量}

RSI:

=SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1)*100;{RSI为中间变量}

ENTERLONG:

CROSS(RSI,LL);{多头买入条件表达式,RSI上穿LL时发出买入信号}

EXITLONG:

CROSS(LH,RSI);{多头卖出条件表达,RSI下穿LH时发出卖出信号}--------------------------------------------------------------------------------

  在新建或编辑修改交易公式时,可以设定介入点的位置,如次周期中价等。

设置止损条件,如目标利润止盈、最大损失止损等。

  交易公式的使用:

①在K线图中,按Ctrl+F6,可以选择交易公式指示买卖信号。

②在选股操作时,也可以选择交易公式进行选股。

③在菜单“工具”中,还可以对交易进行“交易系统评价”、“探索最佳参数”操作。

在菜单“查看”中,可以“优选交易系统”。

  此外,按Shift+W,调出公式树,可以通过鼠标把交易公式拖到K线窗口的方法,使用交易公式。

试试把选股公式也拖到K线窗口,看看有何变化?

说明了什么?

  当想删除在K线图上显示的各种买卖信号时,可以按Ctrl+Del或工具栏上的相应按钮实现。

  练习2:

设计一个均线交易公式,当收盘价上穿5日均线时,发出多头买入信号,收盘价下穿5日均线时发出多头卖出信号。

并观察设置不同的介入点介入时,指示的信号有什么变化。

  练习3:

观察飞狐系统内置的各个交易公式,领会各交易公式的意义。

 函数注释如下:

引用任意证券任意周期的任意指标输出

用法:

STKINDI(STKLABEL,INDINAME,INDITYPE,PERIOD)

INDITYPE为指标类型,有效值范围为(0-2),依次表示技术指标、条件选股、交易系统公式;

PERIOD为周期类型,有效值范围为(-1-11),依次表示:

当前周期、分笔成交、1分钟、5分钟、15分钟、30分钟、60分钟、日、周、月、年、多日、多分钟

例如:

STKINDI('1A0001','MA.MA1',0,DATAPERIOD);

例1:

引用大盘的涨跌家数。

①被引用公式,设被引用的公式名称为“涨跌家数”,其公式代码如下:

A:

ADVANCE;

D:

DECLINE;

②引用大盘的涨跌家数,示例代码如下:

fStkName:

=if(STRCMP(STKMARKET,'SH'),'399301','1A0001');

fAdvance:

=STKINDI(fStkName,'涨跌家数.A',0,6);

fDecline:

=STKINDI(fStkName,'涨跌家数.D',0,6);

说明:

大盘函数advance、decline只能被大盘所使用,不能在个股中直接使用,这段代码,示范了如何利用STKINDI函数达到在个股中引用的目的。

例2:

在日k线中引用本股票5分钟的obv该怎么写?

求解:

代码如下

StkIndi(StkLabel,'OBV',0,2);{注意,公式的名称应使用大写字母}

二、横向统计相关函数的用法简介:

1、横向统计数据函数ESTDATA(N),取得横向统计日线数据(1-N),仅在日线分析周期有效;

2、用法举例:

例:

设计一个公式,统计当日A股板块涨停板的股票数。

3、方法如下:

①设计一个公式,判断个股是否涨停,代码如下,设公式名称是“涨停判断”:

bl:

=if(STKINBLOCK('ST板块'),1.05,1.1);{如果为ST涨停为5%,否则为10%}

ztb:

abs(c-intpart(ref(c,1)*bl*100+0.5)/100)<0.0001;{如果涨停返回1,否则返回0}

{注:

对新股的涨停未做判断,另外个股因历史的原因,是否被ST或PT处理无法判断,因此对历史数据的判断并不准确}

②建立横向统计数据项:

鼠标点菜单“管理/横向统计管理”,在“横向统计管理”对话框中,点“新增”,找到刚才设计的公式“涨停判断”。

⑴数据名称改为“涨停板”

⑵选择技术指标“涨停判断”,计算周期“日线”、指标线“ztb”为默认,不作修改。

⑶横向统计方法选“全部累加”。

⑷“计算时选择除权后的数据”不选即前面不打勾。

⑸点“设置范围”按钮,选择统计范围。

⑹置好范围后,点确定。

至此,我们就设计了一个横向统计数据项“涨停板”,在图中序号是1,则引用时是estdata

(1)。

③设计一个引用“涨停板”的公式,公式代码如下,设公式的名称是zttj:

涨停板统计:

estdata

(1);

在K线图中,调用公式zttj,就可以看到我们所需要的结果了。

练习:

如果对横向统计有兴趣的话,可以仿此,做一个跌停板统计公式。

当然可以把涨停、跌停做成二合一公式。

三、如何计算当日交易分钟数:

T定义为1分钟周期图上,开盘后的交易分钟数,

1、代码之一

 

--------------------------------------------------------------------------------

T:

=IF(BETWEEN(HOUR,9,11),(HOUR-9.5)*60+MINUTE,

IF(BETWEEN(HOUR,13,15),(HOUR-9.5-1.5)*60+MINUTE,240));

--------------------------------------------------------------------------------

 

稍加优化:

 

--------------------------------------------------------------------------------

T:

=IF(BETWEEN(HOUR,9,11),(HOUR-9.5)*60+MINUTE,

IF(BETWEEN(HOUR,13,15),(HOUR-11)*60+MINUTE,240));

 

--------------------------------------------------------------------------------

代码解释:

如果小时数介于9和11间,返回值(HOUR-9.5)*60+MINUTE

  否则

    如果小时数介于13和15之间,返回值(HOUR-9.5-1.5)*60+MINUTE

      否则返回值240

2、观察所有的股票一天的1分钟周期图,可以发现,都是起始于9:

31,结束于15:

00,并且中午休市不显示,因此代码一可以简化为如下公式代码二,请自行解释代码。

公式代码二:

 

--------------------------------------------------------------------------------

T:

=IF(HOUR<=11,(HOUR-9.5)*60+MINUTE,

IF(HOUR>=11,(HOUR-11)*60+MINUTE,240));

 

------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1