慈溪方特东方神画图片:(2)交易模型的编写规则

来源:百度文库 编辑:偶看新闻 时间:2024/05/08 02:42:28

第二章 交易模型的编写规则

 

在金字塔的主图分析界面,按功能键F3就会出现公式编辑器的界面,

 

在“交易系统”上按鼠标右键,选“新建公式”


通过该界面我们可以了解该系统的公式设定的内容和相关规则:
A:每一个指标公式必须有一个名称,这个名称由字母和数字组成,公式名称在同类公式中必须是唯一的,例如不能同时存在两个AAA系统公式,公式名称最多16个字符。
B:公式说明是一段文字,用来简单描述该公式的含义,在公式列表时显示这段文字,这段文字不宜过长。
C:计算参数:计算参数用来替代公式中所需要的常数,在使用时可以方便地调节参数,不必修改公式就可以对计算方法进行调节。计算参数包括参数名称、最小值、最大值、缺省值四个部分,参数名称用于标识参数,计算公式时采用缺省值计算,而最小值和最大值是参数的调整范围。
D:公式编辑栏,本栏为公式编辑的文本区。
E:密码保护,选中该栏目为指标公式加密。
F:公式注释是一段文字,相对于公式描述而言它可以很长,主要用来描述一个公式如何使用、注意事项、计算方法等等。
G:周期的设定:数据分析周期就是相邻两组数据的时间间隔,可能是从几秒、1分钟到1000天间的任意间隔;还可以是分笔成交分析周期,这种情况下时间间隔不定。
公式系统的引用周期:
应不同的使用者在分析周期习惯上的差异,金字塔特别设定了周期选择。这主要是针对在引用类函数在引用数据时锁定自己所需要的周期,例如在日线上,或者在周线上等等的要求。
H:费率设置和平仓止损



所有的公式系统都是遵守统一的运算法则,统一的格式进行函数之间的计算,所以我们掌握了技术指标公式的基本原理,其他的公式也不会出脱其外。
例如我们在指标公式系统内写下公式:
A:=X+Y; B:=A/Z;  C:=B*0.618;
分析以上公式,我们可以引出以下相关的格式和法则的结论:

 

1、数据引用
A、数据来源
公式中的基本数据来源于接收的每日行情数据,这些数据有行情函数从数据库中按照一定的方式提取,例如,高开低收,成交量,成交额等等。


B、数据类型
按照公式使用的数据类型,系统可以处理的数据分为两类:变量和常量。
所谓变量就是一个随着时间变化而变化的数据,例如成交量;常量就是一个永远不变的数据。例如3,每个函数需要的参数可能是变量也可能是常量,不能随便乱用,函数计算的结果一般是一个变量。
例如计算收盘价均线MA(CLOSE,5),MA函数要求第一个参数为变量,而CLOSE函数返回的正是一个变量;MA函数要求的第二个参数是常量,5就是一个常量,所以我们就不能这样书写:MA(5,CLOSE)。


2、特殊数据引用
A、指标数据引用

经常地编制公式的过程当中,需要使用另外一个指标的值,如果按照通常的做法,重新编写过这个指标显得很麻烦,因此有必要学习使用如何调用别的指标公式。
基本格式为:“指标.指标线”(参数)
a、指标和指标线之间用逗号分开,一个指标不一定只有一条指标线,所以有必要在指标后标注指标线的名称,但是如果缺失则表示引用最后一条指标线。
b、参数在表达式的末尾,必须用括号括起来,参数之间用逗号分开,通过参数设置可以选择设定该指标的参数,如果参数缺失则表示使用该指标的默认参数设置。
c、整个表达式用引号引在其中,除参数以外。
例如:“MACD.DEF”(26,12,9)表示计算MACD指标的DEA指标线,计算参数为26、12、9,“MACD”(26,12,9)表示该指标的最后一条指标线,计算参数是26、12、9,“MACD”表示该指标的最后一条指标线并且使用公式的默认参数。


B、跨周期引用指标数据
在金字塔当中允许使用不同分析周期上的指标数据,但是只能是向上引用,不能在原周期上使用比现在周期长度小的周期上的指标数据。
a、基本格式为:“指标.指标线#周期(参数)”,格式上只是比上面指标引用多了一个周期设定其他内容和方法一样,在周期调用上存在以下对应关系:
MIN1:1分钟  MIN5:5分钟......DAY:日线 WEEK:周线 MONTH:月线 YEAR:年线
如上图所示,MIN1表示的分析周期为1分钟,那么只能是在当前周期为分笔成交图时才可以实现对该周期指标线数据的引用。例如:当前周期为日线,那么在公式中使用“MACD.DEA#WEEK”(26,12,9)表示使用了当天所在的本周的MACD指标中的数据。
b、以上格式的扩展格式为:“指标.指标线##周期”(参数),该格式比基本格式采用了不同的对齐方式,简而言之,就是说“#”的格式调用的本周期所在的上一级周期的指标数据,那么“##”的格式则表示调用了前一种格式的前一周期的指标数据,举上例而言,“MACD.DEF##WEEK”(26,12,9)表示的是从当天看来的上一周的数据,而基本格式就是当天看来的本周的数据。


C、其他数据引用
使用以下的格式可以在当前的分析界面下引用大盘的数据或者其他个股的数据实现横向上的对比,
a、引用大盘数据引用大盘数据时使用下列函数:INDEXC/INDEXV,等等!
b、引用个股数据引用个股数据时使用下列格式:“品种代码$数据”,在以上格式当中调用CLOSE,VOL,AMOUNT等等!例如“0002$VOL”表示0002该股本周期的成交量,“1A0001$CLOSE”同样也可以表示为大盘本周期的收盘价,此时的大盘被视为一只个股。

 

3、公式体构成结构
A、公式语句
所有的公式体由若干语句按照一定的格式组成,每个语句表示一个计算结果,根据各个语句的功能分为两大类语句,一类是赋值语句,一类是中间表达式。


B、赋值语句

在技术指标“B;A/Z”和“C;B*0.618”就是分别两条指标线,语言间用分号隔开。该语句被称为赋值语句,在技术指标当中,赋值语句的计算结果将会被计算机执行并形成相应的图形。每个语句可以有一个名称,改名称写在语句的最前面,并用一个冒号将它与语句分隔开。例如:ST:MA(CLOSE,5);表示该语句求收盘价的五日均线,语句的名称为ST,在该语句后的语句中可以直接用ST来替代MA(CLOSE,5),例如:MA(ST,5)表示对收盘价的五日均线再求五日平均。


C、中间语句
一个语句如果不需要显示,可以将它定义为中间语句,例如在上例当中的第一句“A:=X+Y;”,这样该语句就不会被系统辨认为是指标线了,中间语句用“:=”替代冒号,其他与一般语句完全一样,使用中间语句可以有效降低公式的书写难度,还可以将需要重复使用的语句定义成中间语句以减少计算量。
每个公式最多可以分6个语句,中间公式数量没有限制,所有语句之间需要使用分号隔开。


D、公式计算符
公式计算符将函数连接成为公式,计算分为算术计算符和逻辑计算苻。
a、算术计算符

包括+、-、*、/,它们分别对计算符两边的数据进行加减乘除计算,这同一般意义上的算术计算没有差异。
b、逻辑计算苻

包括>、<、<>、≥、≤、=、AND、OR八种,分别表示大于、小于、不等于、大于等于、小于等于、等于、逻辑与、逻辑或运算,如果条件成立计算结果就等于1,否则等于0,例如:3+4等于7,4>3就等于1,3≤12就等于0,“逻辑与”表示两个条件都成立时结果才成立;“逻辑或”表示两个条件中只要有一个成立结果成立。例如,4>3AND12≥4的结果等于1,4>3OR3>12的结果等于1。


E、线形描述符
对于技术指标公式可以在语句加上线形描述符,用来表示如何画该语句描述的指标线。
线形描述符号包括以下7种。描述符写在语句后分号前,用逗号将它们与语句分隔开,例如在上例当中加入一句线形描述符,C:B*0.618,COLORSTICK;该语句在被执行时,会在图中添加色彩柱线,该功能在编制MACD等指标的时候会显出它的用处。
STICK:柱状线
COLORSTICK:彩色柱状线,当值为正时显示红色,否则显示绿色
COLORRED:为线形 色,RED表示红色
COLORBLUE:为线形 色,BLUE表示蓝色
COLORYELLOW:为线形 色,YELLOW表示黄色
VOLSTICK:成交量柱状线,当股价上涨时显示红色空心柱,否则绿色
LINESTICK:同时画出柱状线和指标线
LINETHICK:对线体的粗细作出描述
CROSSDOT:小叉线
CIRCLEDOT:小圆圈线
POINTDOT:小圆点线

a、COLORRED等三个线形描述符还可以自定义颜色,格式为COLOR+“BBGGRR”;BB、GG、RR表示蓝色,绿色和红色的分量,每种颜色的取值范围是00-FF,采用了16进制,例如:MA5:MA(CLOSE,5)COLOR00FFFF表示纯红色与纯绿色的混合色;COLOR808000表示淡蓝色和淡绿色的混合色。
b、LINETHICK可以允许对线型的粗细进行自定义的描述,格式“LINETHICK+(0/7)”:参数的取值范围在0-7之间,“LINETHICK0”表示最细的线,而“LINETHICK7”表示最粗的线。

 

4、快速入门

1)如何把熟悉的技术指标转换成交易模型?

第一步:把 KDJ 指标公式 COPY 过来,或按“引入公式”按钮,引入

RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;//算出(收盘价-N周期内的最低价)/(N周期的最高价N周期内的最低价)*100   的值,用RSV 来表示。

K:SMA(RSV,M1,1),COLORWHITE;//RSV 的移动加权平均的值用K表示,并且画白色的线。

D:SMA(K,M2,1),COLORYELLOW;//K 的移动加权平均的值用D表示,并且画黄色的线。

J:3*K-2*D,COLORMAGENTA;//3倍的K减去2倍的D的值用J表示,并且画紫色的线。

 

第二步:原有公式主要是画线,所以稍作修改。如下:

RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;// 第 一 行 不 需要修改

K:=SMA(RSV,M1,1);//在:后加上=  变为只定义不用画线,把后面的颜色函数(COLORWHITE)也去掉

D:=SMA(K,M2,1);//同上

J:=3*K-2*D;//同上

 

第三步:把自己总结的交易条件写上,就可完成交易模型。如下:

RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;

K:=SMA(RSV,M1,1);

D:=SMA(K,M2,1);

J:=3*K-2*D;

{开多} ENTERLONG: CROSS(K,D),TFILTER; // K 向上穿越 D,发出开多操作

{平多} EXITLONG: CROSS(J,100),TFILTER; // J向上穿越100,发出平多操作

{开空} ENTERSHORT: CROSS(D,K),TFILTER; //K 向下穿越 D,发出开空操作

{平空} EXITSHORT: CROSS(0,J),TFILTER; //J向下穿越0,发出平空操作

图表交易模型就完成了,其仓位控制在第5页图中设置

 

对于新交易系统模型,可用下面4句代替

SELLSHORT(CROSS(0,J) and HOLDING<0, HOLDING,market); //J向下穿越0,发出平空操作
BUY(CROSS(K,D) and HOLDING=0,30%,market);// K 向上穿越 D,发出开多操作

SELL(CROSS(J,100) and HOLDING>0,HOLDING,market); // J向上穿越100,发出平多操作
BUYSHORT(CROSS(D,K) and HOLDING=0,30%,market); //K 向下穿越 D,发出开空操作

其中,HOLDING为持仓函数,30%表示按可用资金的30%交易,market表示交易类型为市价委托。后为文字说明,编写模型时不用写出。

 

2)如何把自编变色 K 线转换成交易模型?

模型说明:第一根 K 线变红时买,第一根 K 线变蓝时卖

指标源码:

HH1:=IF(H

LL1:=IF(L>REF(L,2) AND REF(L,1)>REF(L,2),REF(L,2),0);

HH2:=VALUEWHEN(HH1>0,HH1); 

LL2:=VALUEWHEN(LL1>0,LL1); 

K1:=IF(CLOSE>HH2,-3,IF(CLOSE

K2:=VALUEWHEN(K1<>0,K1);

G:=IF(K2=1,HH2,LL2);

G1:=VALUEWHEN(ISLASTBAR,G); 

W1:=K2

W2:=OPEN-CLOSE;  

HT:=IF(OPEN>CLOSE,OPEN,CLOSE); 

LT:=IF(OPEN

//以上是在定义变量,转换成模型时直接引用

STICKLINE(W1>0,OPEN,CLOSE,8,1),COLORCYAN; 

STICKLINE(W1<=0,OPEN,CLOSE,8,1),COLORRED;

STICKLINE(W2>0 AND W1<=0,OPEN,CLOSE,8,0),COLORRED; 

STICKLINE(W2>0 AND W1>0,OPEN,CLOSE,8,0),COLORCYAN;

 

利用STICKLINE 里的条件W1,再加上交易指令即可改写为交易模型

修改为交易模型如下:

HH1:=IF(H

LL1:=IF(L>REF(L,2) AND REF(L,1)>REF(L,2),REF(L,2),0);

HH2:=VALUEWHEN(HH1>0,HH1); 

LL2:=VALUEWHEN(LL1>0,LL1); 

K1:=IF(CLOSE>HH2,-3,IF(CLOSE

K2:=VALUEWHEN(K1<>0,K1); 

G:=IF(K2=1,HH2,LL2);

G1:=VALUEWHEN(ISLASTBAR,G); 

W1:=K2

W2:=OPEN-CLOSE;  

{开多} ENTERLONG: CROSS(W1,0) OR (CROSS(W2,0) AND CROSS(W1,0)),TFILTER;

{平多} EXITLONG: CROSS(0,W1) OR (CROSS(W2,0) AND CROSS(0,W1)),TFILTER;

{开空} ENTERSHORT: CROSS(0,W1) OR (CROSS(W2,0) AND CROSS(0,W1)),TFILTER;

{平空} EXITSHORT: CROSS(W1,0) OR (CROSS(W2,0) AND CROSS(W1,0)),TFILTER;

图表交易模型就完成了,其仓位控制在第5页图中设置

 

对于新交易系统模型,可用下面4句代替

SELLSHORT(CROSS(W1,0) OR (CROSS(W2,0) AND CROSS(W1,0)) and HOLDING<0,HOLDING,market); //交易系统之平空操作

BUY(CROSS(W1,0) OR (CROSS(W2,0) AND CROSS(W1,0)) and  HOLDING=0,30%,market);//交易系统之开多操作

SELL(CROSS(0,W1) OR (CROSS(W2,0) AND CROSS(0,W1)) and HOLDING>0,HOLDING,market); //交易系统之平多操作

BUYSHORT(CROSS(0,W1) OR (CROSS(W2,0) AND CROSS(0,W1)) and HOLDING=0,30%,market); //交易系统之开空操作

 

 

3)如何合并两个不同的交易模型?

在两个模型方向相同时才开仓,两个模型指令不同时就平仓

参数 N:最小值 0 最大值  100   缺省值  8

源码:

 

模型A

X:=BARSLAST(HIGH=HHV(HIGH,N));

LL:=MIN(REF(LOW,X+3),MIN(REF(LOW,X+2),MIN(REF(LOW,X),REF(LOW,X+1))));

Y:=BARSLAST(LOW=LLV(LOW,N));

HH:=MAX(REF(HIGH,Y+3),MAX(REF(HIGH,Y+2),MAX(REF(HIGH,Y),REF(HIGH,Y+1))));

A:=BARSLAST(CLOSE>=HH);

B:=BARSLAST(CLOSE<=LL);

AB:=IF(A>B,HH,LL);

SELLSHORT(CROSS(CLOSE,AB) and HOLDING<0,HOLDING,market); //平空操作

BUY(CROSS(CLOSE,AB) and  HOLDING=0,30%,market);//开多操作

SELL(CROSS(AB,CLOSE) and HOLDING>0,HOLDING,market); //平多操作

BUYSHORT(CROSS(AB,CLOSE) and HOLDING=0,30%,market); //开空操作

 

模型B

HH1:=IF(H

LL1:=IF(L>REF(L,2) AND REF(L,1)>REF(L,2),REF(L,2),0);

HH2:=VALUEWHEN(HH1>0,HH1);

LL2:=VALUEWHEN(LL1>0,LL1);

K1:=IF(CLOSE>HH2,-3,IF(CLOSE

K2:=VALUEWHEN(K1<>0,K1);

SELLSHORT(K2=-3 and HOLDING<0,HOLDING,market); //平空操作

BUY(K2=-3 and  HOLDING=0,30%,market);//开多操作

SELL(K2=1 and HOLDING>0,HOLDING,market); //平多操作

BUYSHORT(K2=1 and HOLDING=0,30%,market); //开空操作

 

利用并且( AND )和或者( OR )这些逻辑语句,将A、B模型合并为模型C:

X:=BARSLAST(HIGH=HHV(HIGH,N));

LL:=MIN(REF(LOW,X+3),MIN(REF(LOW,X+2),MIN(REF(LOW,X),REF(LOW,X+1))));

Y:=BARSLAST(LOW=LLV(LOW,N));

HH:=MAX(REF(HIGH,Y+3),MAX(REF(HIGH,Y+2),MAX(REF(HIGH,Y),REF(HIGH,Y+1))));

A:=BARSLAST(CLOSE>=HH);

B:=BARSLAST(CLOSE<=LL);

AB:=IF(A>B,HH,LL);

HH1:=IF(H

LL1:=IF(L>REF(L,2) AND REF(L,1)>REF(L,2),REF(L,2),0);

HH2:=VALUEWHEN(HH1>0,HH1);

LL2:=VALUEWHEN(LL1>0,LL1);

K1:=IF(CLOSE>HH2,-3,IF(CLOSE

K2:=VALUEWHEN(K1<>0,K1);

SELLSHORT(CROSS(CLOSE,AB) OR K2=-3 and HOLDING<0,HOLDING,market); //平空操作

BUY(CROSS(CLOSE,AB) AND K2=-3 and  HOLDING=0,30%,market);//开多操作

SELL(CROSS(AB,CLOSE) OR K2=1 and HOLDING>0,HOLDING,market); //平多操作

BUYSHORT(CROSS(AB,CLOSE) AND K2=1 and HOLDING=0,30%,market); //开空操作