?
第00节? 教程简介
公式是对价格、成交量、时间、周期等原始数据的比较判断或者运算变化,说通俗一点,就是我们告诉股票软件做什么、怎么做的命令。
第一,公式可以提高我们的操作效率。
第二,公式可以帮助我们直观地检验操作理念。
第三,使用公式构建自己的交易系统。
?虽然现在到处可以找到各种各样的公式,但却很少刚好符合自己要求的,很多时候我们要对现成公式进行修改或者重新编写。
即使你只使用现成的公式,也需要掌握一些公式编写知识。因为要使用好一条公式,必须了解公式的设计理念、前提条件、影响因素、变化规律、可靠性等等,而要了解这些,就得分析公式的算法。
本教程一共十节,详细讲解与公式编写相关的各种知识,绝大多数知识在飞狐、金狐、分析家、大智慧新一代、大智慧网络版、通达信、同花顺、操盘手、博易大师、文华等主流软件上都是通用的,也就是说,认真学完本教程,就可以在这些软件上编写自己需要的常用公式。每一节的内容:
第一节,公式管理器——详细讲解公式管理器的每个功能,以及技术指标、条件选股、交易系统和五彩K线这四种不同类型公式的特点。
第二节,添加现成公式——详细讲解如何添加现成公式,以及在添加公式时常见问题的处理方法。
第三节,公式语句规则——详细讲解编写公式需要遵守的规则。
第四节,函数详解——把函数按照实际功能进行重新分类,并结合实际应用对常用函数进行详细地讲解。
第五节,公式转换——详细讲解如何把技术指标变成选股公式、交易系统或者五彩K线等,并顺带讲解如何给公式加上时间限制和如何解除公式的时间限制。
第六节,公式进阶——对如何进行横向统计、如何建立和使用扩展数据、如何建立和使用自定义数据、如何采集F10数据、如何建立板块指数、如何编写分时图公式等进行详细地演示。
第七节,公式测试——详细讲解如何对公式进行测试、测试需要注意的事项以及如何正确看待测试的结果。
第八节,公式使用——详细讲解如何使用公式进行选股和预警等。
第九节,公式解读——详细讲解正确解读公式的方法。
第十节,学习建议——推荐一些经过实战检验、个人认为真正能够帮助大家实现稳定盈利的操作理念。
?
第01节? 公式管理器
?打开公式管理器的方式:菜单栏中的功能——专家系统——公式管理器;工具栏中的公式管理器按钮;键盘上的快捷键ctrl f。
按照不同使用类型分为技术指标、条件选股、交易系统和五彩K线这四大类,一个大类里面又分为很多小类。全部——把某一类型的公式完全展开。系统——只显示系统自带的公式,前面有一个蓝色小方块。用户——只显示用户添加的公式,前面有一个粉红色小方块。方块前面有一个小锁标志的是加密公式。
新建、修改(系统公式在关闭软件后会自动还原)、删除、恢复、用户配置、导出公式(密码保护)、导入公式、临时导入(关闭软件后会自动清除)、关闭。
公式名称(如果公式名称是汉字,快捷键是每个汉字的第一个拼音字母)、密码保护、公式描述、公式类型(自己编写的公式,最好选择其它类型)、画线方法(副图、主图叠加、副图(叠加K线)、叠加美国线、叠加收盘站线)、坐标线位置(自动)、额外Y轴分界、引入指标公式、插入函数(把鼠标停留在函数上面,也可以看到它的说明和用法)、测试公式、测试结果、参数栏、公式编辑区、动态翻译、参数精灵(Param #参数序号)、用法注释。
技术指标调出方式:键盘上输入技术指标名称;工具栏中的选择指标按钮;工具栏中的财经资讯树。可以输出线条、数字、图形和文字,可以选股(需要指明条件)、不能预警、只有软件自带的一部分技术指标才能进行系统测试。
条件选股公式在通达信中不能输出显示(要观察它的信号,最好改成技术指标),只有一个输出,可以选股、预警和系统测试。
交易系统公式调出方式:主图上按右键——专家指示——交易系统指示;工具栏中的财经资讯树。成对输出提示买卖的上下箭头,可以选股(需要指明条件)、不能预警,可以系统测试。不想显示交易系统指示:在箭头上按右键——删除交易系统指示。
五彩K线公式调出和删除方法与交易系统一样,通过不同颜色来区分满足条件的K线和不满足条件的K线,可以选股,不能预警和系统测试。
四种类型的公式可以相互转换,也可以组合使用。
?
第02节? 添加现成公式
??
以文件形式显示的是公式文件,可以看到函数和算法的是公式源码。
Tni 通达信(新)Tnc通达信(老)
alg 飞狐、金狐
exp 大智慧网络版
fnc 大智慧新一代、分析家
hxf 同花顺
源码:
?
INPUT.:N(5,1,100),M(10,1,100);
N 1,100,5? M 1,100,10
N 5? M 10
{参数申明——中间(数字大小关系)数值为缺省值}
均线
MA1:MA(C,5);十日均线
MA2:MA(C,10),,COLORRED
{名称、语句说明处理,逗号少多、缺少分号}
MA3:MA(C,20);
{标点符号要英文样式}
MA4:MA(MA(C,5),10;
{括号不匹配}
MA5:MA(C,30),COLORFF,LINEDASH;
{语句中有软件不认识的函数}
MA5:=MA(MA7,5),CIRCLEDOT,COLORGREEN;
{公式不完整,中间语句不带线型和颜色函数}
{主图公式——画线方法改成主图叠加,条件选股公式——建立在条件选股类别}
?
第03节? 公式语句规则
MA1:MA(C,5),LINETHICK2,COLORRED;
{C:MA(C,5),LINETHICK2,COLORRED;}
{MA(C,5),LINETHICK2,COLORRED;}
?
指标线格式——指标线名称:函数(数据,参数),线形,颜色;
指标线名称不能是c、o、h、l、v等系统保留字,同一公式中名称不能相同,也可没有名称,如果没有名称,冒号不用写,冒号、括号、逗号、分号等标点符号必须是英文的。
?
MA2:???? MA(MA1,5);
?
MA3:=MA(MA(C,5),10);{五日均线的十日简单移动平均线}
?
空格和回车不影响公式计算,函数或者指标线名称不能被空格和回车分开。冒号后面加上等号,把语句变成中间语句,中间语句不会输出显示,以免图表凌乱、加快运算速度。括号从里到外运算、成对工作的,注释部分用大括号括起来(飞狐可用//代替)。
?
Ma1:ma(c,5);
Ma2:ma(c,10);
Ma3:ma(c,20);
……
Man:ma(c,n);
?
?
Spj:=c;
Ma1:ma(spj,5);
Ma2:ma(spj,10);
Ma3:ma(spj,20);
……
Man:ma(spj,n);
?
引用其它公式指标线格式——"指标名称.指标线名称"(参数表)
每个参数之间用逗号分开,双引号可要可不要;参数表可以不写。
?
K:"KDJ.K"(9,3,3);
{K:KDJ.K;}
?
跨周期引用格式——"指标名称.指标线名称#周期"(参数表)
每个参数之间用逗号分开,双引号和参数表可以不写。小周期可以引用大周期,大周期不能引用小周期。通达信跨周期引用有时会计算错误,最好在飞狐上使用。
?
日K:"KDJ.K";
周K:"KDJ.K#WEEK"(9,3,3);
三十分钟K:KDJ.K#MIN30;
?
三十分钟K:"KDJ.K";
日K:"KDJ.K#DAY";
周K:"KDJ.K#WEEK";
?
引用其它品种行情数据格式——"品种代码代码$行情函数"
双引号一定要写。引用与当前股票相对应的大盘的数据,可用大盘行情函数。
?
万科A收盘价:"000002$C";
综艺股份收盘价:"600770$C";
?
大盘收盘价:INDEXC;
?
算术运算符:*/ -
比较运算符:=等于,!=不等于(飞狐<>),>大于,<小于,>=大于等于,<=小于等于< /P>
逻辑运算符:AND / &&与(并且),OR / ||或(或者)
运算顺序从左到右、从上到下。
?
第04节? 函数详解
?
要有信心,不怕辛苦,要有方法。
主要函数——获取数据、比较判断、运算变化,辅助函数——修饰美化、形态描述。
K线数据,可以只写开头第一个字母。
?
开盘价:OPEN;{O}
收盘价:CLOSE;{C}
最高价:HIGH;{H}
最低价:LOW;{L}
?
大盘K线数据,必须下载完整盘后数据。Drawkline——画K线,数据顺序——最高价、开盘价、最低价、收盘价。
?
DRAWKLINE(INDEXH,INDEXO,INDEXL,INDEXC);
{H、O、L、C}
?
上涨家数和下跌家数,第一组只在大盘窗口才有数据,第二组哪个窗口都有数据。
?
涨家1:ADVANCE;
跌家1:DECLINE;
?
涨家2:INDEXADV;
跌家2:INDEXDEC;
?
??? 在一定周期内某项数据的最大值——hhv,在一定周期内某项数据的最小值——llv。
?
HH:HHV(H,10);
LL:LLV(L,10);
?
MA1:MA(C,5);
HHMA:HHV(MA1,10);
LLMA:LLV(MA1,10);
?
??? 创新高或者创新低。
?
创新高:H=HHV(H,60);
创新低:L=LLV(L,60);
?
当前位置取得以前位置数据——ref,取得指定日期数据——refdate,注意日期的格式。
?
以前数据:REF(C,1);
?
{以前数据:REF(H,2);}
?
指定日期数据:REFDATE(C,1090508);
?
{1998年5月25日——980525、2011年12月8日——1111208}
?
成交量——vol,可写成V,单位是手。成交金额——amount,单位是元。Indexv——大盘成交量, indexa——大盘成交金额。Buyvol——外盘, sellvol——内盘,只能取得与最后一根K线相对应的数据。
?
成交量:VOL;{V}
成交金额:=AMOUNT;
大盘成交量:=INDEXV;
大盘成交金额:=INDEXA;
外盘:BUYVOL;
内盘:SELLVOL;
?
涨幅、振幅、均价,成交量复权:工具——系统设置——设置1——勾选“分析图成交量复权”——按确定——再按确定——退出K线图——重新进入K线图。
?
涨幅:=(C-REF(C,1))/REF(C,1)*100;
振幅:=(H-L)/L*100;
均价1:(H L O C)/4;
均价2:AMOUNT/(V*100);
?
即时行情函数只取得与最后一根K线相对应的数据。
?
振幅1:DYNAINFO(13)*100;
振幅2:(H-L)/L*100;
?
finance(7)的单位是股,根据流通盘变化而变化。capital的单位是手,只取得最新流通盘。
?
流通盘1:FINANCE(7);
流通盘2:CAPITAL;
?
换手率,finance(7)写的换手率更合理。
?
换手率1:V*100/FINANCE(7)*100;
换手率2:V/CAPITAL*100;
?
FINANCE(42)——上市日期,date——日期,date加19六个0,一号的日为0, year——年份,month——月份,day——日,weekday——星期。
?
上市日期:FINANCE(42);
日期1:DATE;
日期2:DATE 19000000;
年:YEAR;
月:MONTH;
日:DAY;
日期3:YEAR*10000 MONTH*100 DAY;
星期:WEEKDAY;
?
Time——时间,hour——小时,MINUTE——分钟,只在日线以下周期有效。FROMOPEN——当前时刻距离开盘分钟数。
?
时间:TIME;
小时:HOUR;
分钟:MINUTE;
距开盘分钟数:FROMOPEN;
?
BARSCOUNT——某数据从第一个有效值到现在的周期数,TOTALBARSCOUNT——总周期数,下载完整盘后数据、不连接行情使用。CURRBARSCOUNT——当前K线到最后交易日周期数。
?
有效数据周期数:BARSCOUNT(C);
总周期数:TOTALBARSCOUNT;
到最后周期数:CURRBARSCOUNT;
?
Cross——是否发生交叉,两条指标线不一定全是变化的曲线。Barslast——上一次条件成立到当前的周期数,BARSSINCE——第一次条件成立到当前的周期数,count——统计在一定周期内满足条件的周期数。
?
K1:KDJ.K;
D1:KDJ.D;
金叉:CROSS(K1,D1)*10;
死叉:CROSS(D1,K1)*-10;
{K1上穿60:CROSS(K1,60);
?K1下穿20:CROSS(20,K1);}
上次到现周期数:BARSLAST(金叉);
首次到现周期数:BARSSINCE(金叉),NODRAW;
统计{N周期内满足条件}次数:COUNT(金叉=10,20);
?
Hhvbars——某数据在一定周期内的最大值到当前的周期数,llvbars——某数据在一定周期内的最小值到当前的周期数。
?
上一高点{到现在}周期:HHVBARS(H,20);
上一低点{到现在}周期:LLVBARS(L,20);
?
某数据是近多少周期内的最大值——TOPRANGE,某数据是近多少周期内的最小值——LOWRANGE。
?
多少周期的最大:TOPRANGE(H);
多少周期的最小:LOWRANGE(L);
?
BARSLASTCOUNT——统计连续满足条件的周期数,sumbars——某数据向前累加到指定值到当前的周期数。
?
统计{连续满足条件}周期数:BARSLASTCOUNT(C>REF(C,1));
加到指定值周期:SUMBARS(V,CAPITAL);
?
PERIOD——当前窗口的周期类型。
?
窗口周期类型:PERIOD;
?
在不同周期类型使用不同参数。
?
参数:=IF(PERIOD=5,20,IF(PERIOD=6,10,0));
MA1:MA(C,参数);
?
最基本的比较判断是用大于、小于、等于等等。某数据是否在某个范围之内——RANGE,某数据是否在某个范围——BETWEEN。
?
宽幅震荡:(H-L)/L*100>12;
是否在某个范围1:RANGE(C,8,10);{X>A AND A
是否在某个范围2:BETWEEN(C,10,13);{X>=A AND X<=B};< /P>
?
是否发生交叉——cross,LONGCROSS——是否维持一定周期后发生交叉。
?
上穿:CROSS(MA(C,5),MA(C,10));
{持续}一段时间后上穿:LONGCROSS(MA(C,5),MA(C,10),10)*2;
?
UPNDAY——某数据在一定周期内是否连涨,DOWNNDAY——某数据在一定周期内是否连跌,NDAY——是否在一定周期内前面的数据都大于后面的数据,ISLASTBAR——当前周期是否是最后一个周期。
?
连涨:UPNDAY(C,5);
连跌:DOWNNDAY(C,5);
连大:NDAY(C,O,5);
是否最后周期:ISLASTBAR;
?
EXIST——是否在一定周期内存在符合某种条件的情况,EVERY——是否在一定周期内一直存在符合条件的情况,LAST——是否在某一段周期内一直存在符合某种条件的情况,not——是否不符合条件。
?
存在:EXIST(C>REF(C,1)*1.099,10);
一直存在:EVERY(C>O,5);
持续存在:LAST(C>O,10,5);
并非:NOT(C>O);
?
??? If——是否符合条件,符合条件输出前面的数据,不符合条件输出后面的数据, max——哪个更大输出哪个,min——哪个更小输出哪个。
?
条件:=CROSS(MA(C,5),MA(C,10));
如果:IF(条件,5,-5);
较大者:MAX(C,O);
较小者:MIN(C,O);
?
FILTER——过滤连续出现的信号。
?
J大于80:"KDJ.J">80;
过滤:FILTER(J大于80,10)*2;
?
Abs——取得数据的绝对值,sum——求的数据在一定周期内的总和。
?
涨幅:(C-REF(C,1))/REF(C,1)*100;
零轴:0;
绝对值:ABS(涨幅);
求和:SUM(涨幅,5);
?
Ma——简单移动平均值,ema——指数移动平均值,sma——加权移动平均值(前面参数大于后面参数),dma——动态移动平均值(参数小于1),后面三个函数降低本周期的权重、减少波动性而使输出变得相对平滑稳定,同时也降低了灵敏度。
?
简单移动平均:MA(C,5);{(C0 C1 C2 … C(N-1))/N}
指数移动平均:EMA(C,5);{Y=2*X/(N 1) (N-1)/(N 1)*Y',Y'上一周期Y}
加权移动平均:SMA(C,5{N},1{M});{Y=(M*X (N-M)*Y')/N, Y'上一周期Y,N必须大于M}
动态移动平均:DMA(C,0.5);{Y=N*X (1-N)*Y',Y'上一周期Y,N必须小于1};
?
LINETHICK——粗细,color——颜色,stick——柱状线,CROSSDOT——小交叉线,CIRCLEDOT——小圆圈线,POINTDOT——小圆点线。
?
MA1:MA(C,5);
MA2:MA(C,20),LINETHICK3,COLORRED;
均线差值1:(MA1-MA2)*1,STICK;
均线差值2:(MA1-MA2)*3,CROSSDOT;
均线差值3:(MA1-MA2)*6,CIRCLEDOT;
均线差值4:(MA1-MA2)*9,POINTDOT;
?
LINESTICK——指标线加柱状线。
?
MA1:=MA(C,5);
MA2:=MA(C,10);
均线差值:MA1-MA2,LINESTICK;
?
COLORSTICK——彩色柱状线。
?
MA1:=MA(C,5);
MA2:=MA(C,10);
均线差值:MA1-MA2,COLORSTICK;
?
VOLSTICK——成交量柱状线。
?
MA1:=MA(C,5);
MA2:=MA(C,10);
均线差值:MA1-MA2,VOLSTICK;
?
DRAWTEXT——写文字(必须写在一对单引号内),DRAWICON——画图标。
?
?
MA1:MA(C,5);
MA2:MA(C,10);
金叉:=CROSS(MA1,MA2);
写文字:DRAWTEXT(金叉,MA1,'金叉');
画图标:DRAWICON(金叉,MA2,1);
?
STICKLINE——画柱线,0实心柱,-1虚线空心柱,1实线空心柱。后面的输出会遮挡住前面的输出。
?
MA5:MA(C,5);
?
画柱线1:STICKLINE(C>O,C,O,2,0);
画柱线2:STICKLINE(C>O,H,L,0,0),COLORBLUE;
?
画柱线3:STICKLINE(C 画柱线4:STICKLINE(C ? MA10:MA(C,10),COLORGREEN; ? DRAWLINE——绘制直线段,0不延长,1向右延长。PLOYLINE——绘制折线。 ? 画直线:DRAWLINE(L=LLV(L,10),L,H=HHV(H,10),H,0); 画折线:PLOYLINE(H=HHV(H,30),H); ? 均线变色,DRAWNULL——返回无效值。nodraw——只输出数值、不输出线条,不影响公式坐标。LINETHICK0——只输出数值、不输出线条,在其它软件中不影响公式坐标,在通达信中影响公式坐标。 ? MA1:MA(C,5); MA2:MA(C,10); 变色:IF(MA1>REF(MA1,1),MA1,DRAWNULL),LINETHICK2,COLORRED; 成交量:V,NODRAW; ? MA1:MA(C,5); MA2:MA(C,10); 变色:IF(MA1>MA2,MA1,DRAWNULL),LINETHICK2,COLORRED; 成交量:V,LINETHICK0; ? Winner——获利盘,cost——成本分布情况。 ? 获利盘:WINNER(C)*100; 成本分布:COST(80); ? Zig——之字转向,1最高价、2最低价、3收盘价。PEAK——波峰价格,1最高价、2最低价、3收盘价。TROUGH——波谷价格,1最高价、2最低价、3收盘价。 ? 之字转向:ZIG(3,10); 波峰:PEAK(3,10,1); 波谷:TROUGH(3,10,1); ? 波峰到现在的周期数——PEAKBARS,波谷到现在的周期数——TROUGHBARS。 ? 波峰到现在周期:PEAKBARS(3,10,1); 波谷到现在周期:TROUGHBARS(3,10,1); ? BACKSET——回设,马后炮。 ? MA10:MA(C,10); 回设:=BACKSET(C/REF(C,1)>1.09,2); A:=IF(REF(回设,1)=0 AND 回设=1,1,0); DRAWICON(A,L*0.98,1); ? 跨周期引用的公式也具有未来性质。 ? 周J:"KDJ.J#WEEK"; 周D:"KDJ.D#WEEK"; 金叉:CROSS(周J,周D)*30; ? 还有一种作弊手法——将公式信号限制在有行情的时段发出。 ? 另外一种作弊:O ? 建议暂时关闭本教程,把讲义中这一节的内容挨个复制到你自己的软件中,按照这一节开始时所讲的函数学习方法复习一遍。 要将自己的思路用公式去表达出来,首先是确定需要哪些数据,然后观察这些数据之间的关系,再按语句规则的要求用函数去定义观察到的关系。 ? {K线形态} ? 阴线:C 阳线:C>O; ? 上涨:C>REF(C,1); 下跌:C 平盘:C=REF(C,1); ? 大阳线:C/REF(C,1)>1.05; 大阴线:C/REF(C,1)<0.95;< /P> ? 高开:O>REF(C,1); 低开:O ? 高开高走:O>REF(C,1) AND C>O; 高开低走:O>REF(C,1) AND C ? 低开低走:O 低开高走:OO; ? 上跳空:L>REF(H,1); 下跳空:H ? 长上影:H/MAX(O,C)>1.03; 长下影:MIN(O,C)/L>1.03; ? 十字星:MAX(O,C)/MIN(O,C)<1.02 AND H/MAX(O,C)>1.01 AND MIN(O,C)/L>1.01; ? 正T字:O=C AND C=H AND L 倒T字:O=C AND C=L AND H>L; ? 一字涨停:O=C AND C=H AND L=H AND C>REF(C,1); 一字跌停:O=C AND C=L AND L=H AND C ? 横盘:HHV(H,20)/LLV(L,20)<1.15;< /P> ? ??? 均线状况——金叉和死叉。 ? MA1:MA(C,5); MA2:MA(C,10); 金叉:CROSS(MA1,MA2); 死叉:CROSS(MA2,MA1); ? ??? 均线上拐、下拐、将死未死。 ? MA1:MA(C,5); MA2:MA(C,10); 上拐:=REF(MA1,1)REF(MA1,1); 下拐:=REF(MA1,1)>REF(MA1,2) AND MA1 将死未死:=COUNT(MA1>MA2,5)=5 AND 上拐; DRAWICON(上拐,MA1*0.98,1); DRAWICON(下拐,MA1*1.01,2); DRAWICON(将死未死,MA1*0.96,11); ? 多头排列、空头排列。 ? MA1:MA(C,5); MA2:MA(C,10); MA3:MA(C,20); 多头排列:=MA1>MA2 AND MA2>MA3; 空头排列:=MA1 STICKLINE(多头排列,MA1,MA3,0,0),COLORRED; STICKLINE(空头排列,MA1,MA3,0,0),COLORGREEN; ? ??? 均线粘合、粘合一段时间。 ? MA1:MA(C,5); MA2:MA(C,10); MA3:MA(C,20); 粘合:=MAX(MAX(MA1,MA2),MA3)/MIN(MIN(MA1,MA2),MA3)<1.02;< /P> 粘合一段时间:=COUNT(粘合,10)=10; STICKLINE(粘合,MAX(MAX(MA1,MA2),MIN(MIN(MA1,MA2),MA3)),MA3,1,0),COLORRED; DRAWICON(粘合一段时间,MA3*0.98,1); ? ??? 三金叉。 ? DIF2:"MACD.DIF"; DEA2:"MACD.DEA"; 单金叉:CROSS(DIF2,DEA2); 三金叉:(单金叉 AND COUNT(单金叉,10)>=3)*2; ? 成交量状况——主要观察成交量之间、成交量与均量线之间以及换手率之间的关系。放量、历史天量。 ? 放量1:V>REF(V,1)*2; 放量2:V>MA(V,60); 放量3:V*100/FINANCE(7)*100>8; 历史天量:V=HHV(V,0); ? 连续放量。 ? 连续放量1:COUNT(V>REF(V,1),5)=5; 连续放量2:(COUNT(V>MA(V,60),5)=5)*2; 连续放量3:(COUNT(V*100/FINANCE(7)*100>8,5)=5)*3; ? ??? 缩量、历史地量。 ?
