最新文华期货自动化交易模型编写教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、程序化交易的编写
㈠、交易模型编写规范和一般原则
1、编辑平台支持的操作符
2、编辑平台支持的函数
⑴引用数据
⑵金融统计
⑶数理统计
更多期货股票学习资料点击:http:///item。
htm?id=43955572047
⑷逻辑判断
⑸数学运算
更多期货股票学习资料点击:http:///item。
htm?
id=43955572047
⑹时间函数
⑺绘图
更多期货股票学习资料点击:http://item。
taobao。
com/item。
htm?id=43955572047
3、编辑平台可以使用的常数
注:在公式内即使你定义了某种颜色,在显示的时候也未必是此种颜色,取决于背景颜色当前页面里是否保了该指标的颜色及您是否在显示的时候改变了该指标的颜色设置.
更多期货股票学习资料点击:http://item。
taobao。
com/item。
htm?id=43955572047
4、编辑平台的语法
(1)关于公式名称:
公式的名称不可以和已经存在的公式重复。
(2)关于参数:
每个自编公式最多可以在参数设置栏中定义四个参数,参数的定义如下,首先是参数名称,然后是参数的最小值,最大值,最后是参数的默认值。
在定义参数时要注意的是参数名称不可以重复.
(3)关于变量名称:
变量名称不可以互相重复,不可以和参数名重复,不可以和函数名称重复. (4)关于公式内容:
公式的每个语句应该以分号结束,包括最后一条语句.在数据公式的时候请您注意一定要使用半角输入. 在编写公式的过程中,如果您不记得某个函数的确切写法,可以选择插入函数来插入函数。
(5)如果您在编写公式之后,想给这个公式加上注释,说明之类的东西,可以使用公式说明来输入。
(6)IF ELSE:
该语句只有Mytrader2009和Myadvisor(赢智)支持
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
MA30:=MA(CLOSE,30);
IF(MA5〉MA10)
MA5,COLORRED;
ELSE
{
IF(MA10>MA30)
MA10,COLORMAGENTA;
ELSE
MA30,COLORGREEN;
}
以上内容表达 MA5、MA10、MA30三者中最大的数值。
(7)IFELSE(C,A,B)
如果条件C成立则返回A值,否则返回B值
例:IFELSE(CLOSE>REF(CLOSE,1),1,0);表示若今日收盘价高于前一日收盘价,则返回1,否则返回0
5、编辑平台使用的交易指令
交易模型中的交易指令如下:
期货交易指令
股票、权证、外汇交易指令
套利模型中的交易指令如下:
注:在效果测试使用如下机制:
连续的开仓指令只使用第一个指令进行开仓,开仓时使用当时的全部资金,连续的平仓指令,只有第一个有效,平掉当时的全部持仓,其他的平仓指令算做错误指令!
6、快速入门
★以下模型源码内容仅供编写参考使用,如用于交易使用,风险自负.
⑴如何把熟悉的技术指标转换成交易模型?
第一步:把KDJ指标公式COPY过来.
RSV:=(CLOSE—LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;//算出(收盘价—N周期内的最低价)/(N周期的最高价—N周期内的最低价)*100的值,用RSV来表示.
BACKGROUNDSTYLE(1);//确定背景的样式,(钝化)
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;
CROSS(K,D),BK;//K向上穿越D,发出买开交易指令
CROSS(J,100),SP;//J向上穿越100,发出卖平交易指令
CROSS(D,K),SK;//K向下穿越D,发出卖开交易指令
CROSS(0,J),BP;//J向下穿越0,发出买平交易指令
//”//”后为文字说明,编写模型时不用写出
⑵如何把自编变色K线转换成交易模型?
模型说明:第一根K线变红时买,第一根K线变蓝时卖
指标源码:
HH1:=IF(H<REF(H,2)&&REF(H,1)<REF(H,2),REF(H,2),0);LL1:=IF(L〉REF(L,2)&&REF(L,1)〉REF(L,2),REF(L,2),0);
HH2:=V ALUEWHEN(HH1〉0,HH1);
LL2:=V ALUEWHEN(LL1>0,LL1);
K1:=IF(CLOSE>HH2,—3,IF(CLOSE<LL2,1,0));
K2:=V ALUEWHEN(K1〈>0,K1);
G:=IF(K2=1,HH2,LL2);
G1:=V ALUEWHEN(ISLASTBAR,G);
//以上是在定义变量,转换成模型时直接引用
DRAWNUMBER(L>0,G1,G1,0,COLORCYAN);
//以上是在编著数值,转换成模型时直接删除
W1:=K2;
W2:=OPEN-CLOSE;
HT:=IF(OPEN〉CLOSE,OPEN,CLOSE);
LT:=IF(OPEN〈CLOSE,OPEN,CLOSE);
//以上是在定义变量,转换成模型时直接引用
DRAWLINE(W1=1,HIGH,W1=1,HT,COLORCYAN);
DRAWLINE(W1=1,LOW,W1=1,LT,COLORCYAN);
DRAWLINE(W1=-3,HIGH,W1=-3,HT,COLORRED);
DRAWLINE(W1=-3,LOW,W1=-3,LT,COLORRED);
STICKLINE(W1>0,OPEN,CLOSE,COLORCYAN,1);
STICKLINE(W1<=0,OPEN,CLOSE,COLORRED,1); STICKLINE(W2〉0&&W1〈=0,OPEN,CLOSE,COLORRED,0);
STICKLINE(W2>0&&W1>0,OPEN,CLOSE,COLORCYAN,0); DRAWLINE (W1=1&&REF(W1,1)=1,G,W1=1&&REF(W1,1)=1,REF(G,1),COLORGREEN); DRAWLINE(W1=-3&&REF(W1,1)=—3,G,W1=—3&&REF(W1,1)=—3,REF(G,1),COLORYELLOW);
DRAWSL(K2=1,G,0,1,0,COLORGREEN);
DRAWSL(K2=—3,G,0,1,0,COLORYELLOW);
//以上是在绘图,转换成模型时直接删除,只保留判断k线颜色的逻辑语句。
例如:STICKLINE(W1〉0,OPEN,CLOSE,COLORCYAN,1);则保留W1〉0,再加上交易指令即可改写为交易模型
修改为交易模型如下:
HH1:=IF(H〈REF(H,2)&&REF(H,1)<REF(H,2),REF(H,2),0);
LL1:=IF(L>REF(L,2)&&REF(L,1)>REF(L,2),REF(L,2),0);
HH2:=V ALUEWHEN(HH1>0,HH1);
LL2:=V ALUEWHEN(LL1〉0,LL1);
K1:=IF(CLOSE〉HH2,-3,IF(CLOSE<LL2,1,0));
K2:=V ALUEWHEN(K1〈>0,K1);
G:=IF(K2=1,HH2,LL2);
G1:=V ALUEWHEN(ISLASTBAR,G);
W1:=K2;
W2:=OPEN—CLOSE;
CROSS(W1,0)||(CROSS(W2,0)&&CROSS(W1,0)),BPK;
CROSS(0,W1)||(CROSS(W2,0)&&CROSS(0,W1)),SPK;
//从上面看,编写交易模型要比编写指标简单得多。
⑶如何合并两个不同的交易模型?
在两个模型方向相同时才开仓,两个模型指令不同时就平仓
参数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);
CROSS(AB,CLOSE),SPK;
CROSS(CLOSE,AB),BPK;
模型B
HH1:=IF(H<REF(H,2)&&REF(H,1)<REF(H,2),REF(H,2),0);
LL1:=IF(L>REF(L,2)&&REF(L,1)>REF(L,2),REF(L,2),0);
HH2:=V ALUEWHEN(HH1>0,HH1);
LL2:=V ALUEWHEN(LL1〉0,LL1);
K1:=IF(CLOSE>HH2,-3,IF(CLOSE<LL2,1,0));
K2:=V ALUEWHEN(K1〈〉0,K1);
K2=1,SPK;
K2=—3,BPK;
利用并且(&&)和或者(||)这些逻辑语句,将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<REF(H,2)&&REF(H,1)<REF(H,2),REF(H,2),0);
LL1:=IF(L〉REF(L,2)&&REF(L,1)〉REF(L,2),REF(L,2),0);
HH2:=V ALUEWHEN(HH1>0,HH1);
LL2:=V ALUEWHEN(LL1〉0,LL1);
K1:=IF(CLOSE>HH2,—3,IF(CLOSE〈LL2,1,0));
K2:=V ALUEWHEN(K1〈>0,K1);
CROSS(AB,CLOSE)&&K2=1,SK;
CROSS(AB,CLOSE)||K2=1,SP;
CROSS(CLOSE,AB)&&K2=—3,BK;
CROSS(CLOSE,AB)||K2=—3,BP;
(二)、基础指标编写示范和注意事项
1、学习编写前学要明确注意的几个概念
公式:
泛指指标、模型。
没有具体指向性。
指标:
指能够绘出图线但不发交易指令的公式。
指标是一个技术分析范畴的概念。
交易信号:
指指标上出现的提示投资者买卖的指示,可以是图线交叉、文字、图形。
投资者需要按照信号指示去手动委托下单。
交易信号也是一个技术分析范畴的概念。
交易模型:
指能够发出BK、SP等交易指令但是不绘出图线的公式,模型还包含下单方向,交易手数,止盈止损等与交易、资金使用相关的参数设置。
交易模型是一个程序化交易范畴的概念。
交易指令:
指交易模型自动发出的下单委托指令,可以不经过投资者确认直接下单,也可以等待投资者回车确认再下单。
交易指令在K线图上以不同颜色和形状的箭头来代表.交易指令是一个程序化交易范畴的概念。
2、如何进行基础指标的编写
(1)、均线指标
关键函数MA
MA5:MA(CLOSE,5);
②均线组合
MA5:MA(CLOSE,5),COLORWHITE;
MA10:MA(CLOSE,10),COLORYELLOW;
MA30:MA(CLOSE,30),COLORGREEN;
MA60:MA(CLOSE,60),COLORMAGENTA;
③K线+均线组合
MA5:MA(CLOSE,5),COLORWHITE;
MA10:MA(CLOSE,10),COLORYELLOW;
MA30:MA(CLOSE,30),COLORGREEN;
MA60:MA(CLOSE,60),COLORMAGENTA;
TMP:=OPEN-CLOSE;
DRAWLINE(TMP>0。
00001,HIGH,TMP>0。
00001,OPEN,COLORCYAN); DRAWLINE(TMP>0。
00001,LOW,TMP>0.00001,CLOSE,COLORCYAN);DRAWLINE(TMP〈-0.00001,HIGH,TMP<-0.00001,CLOSE,COLORRED); DRAWLINE(TMP〈-0.00001,LOW,TMP<—0。
00001,OPEN,COLORRED);DRAWLINE(ABS(TMP)〈0。
00001,LOW,ABS(TMP)<0.00001,OPEN,COLORWHITE);
DRAWLINE(ABS(TMP)〈0.00001,HIGH,ABS(TMP)<0.00001,OPEN,COLORWHITE);
STICKLINE(TMP〉0,OPEN,CLOSE,COLORCYAN,0);
STICKLINE(TMP<=0,OPEN,CLOSE,COLORRED,1);
小技巧:如何最快捷的增加K线在我的指标里,
当需要书写的源代码比较长时,如果系统中已经有完整的指标,我们可以直接拿来引用,而不需要重复录入。
更多期货股票学习资料点击:/item.htm?id=43955572047
(2)、四周法则
关键函数HHV、LLV、REF
LL:REF(LLV(LOW,19),1);
(三)、交易模型编写示范和注意事项
1、趋势类交易模型编写示范
⑴均线类
①均线排列模型
关键函数:MA
使用周期:任意
模型说明:MA5,MA10,MA20多头排列时做多,空头排列时做空。
编者以一个周期内这三条均线的大小关系为判断标准举例,大家也可以使用多个周期的比较来判断多/空头排列关系。
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
MA20:=MA(CLOSE,20);
MA5〉MA10&&MA10>MA20,BPK;
MA5<MA10&&MA10〈MA20,SPK;
★模型源码内容仅供编写参考使用,如用于交易使用,风险自负
容易犯的编写错误:
A、交易模型中不允许使用只写:(即定义并画线)的写法。
如:MA5:=MA(CLOSE,5);
错误写成MA5:MA(CLOSE,5);
B、对于三个数的比较,大家往往习惯写成MA5〉MA10>MA20这样,而在文华的模型编写中,目前只能两个变量之间进行比较,也就是说此类三个以上变量连续比较需要像模型中那样拆分来写:MA5>MA10&&MA10>MA20.
C、缺少计算函数。
如:求均线时,写为MA5:(CLOSE,5),而缺少了MA,此类错误语法检测无法识别,往往造成软件应用错误.
②均线金死叉模型
关键函数:MA、EMA、EMA2、CROSS
使用周期:所有K 线周期。
模型说明:短期均线上穿长期均线(金叉)做多,短期均线下穿长期均线(死叉)做空。
参数设置:
参数N1 ,最小值0,最大值100,缺省值5;
参数N2 ,最小值0,最大值100,缺省值30;
A、简单移动平均线:
P1:=MA(CLOSE,N1);
P2:=MA(CLOSE,N2);
CROSS(P1,P2),BPK;
CROSS(P2,P1),SPK;
B、指数加权平均线:
P1:=EMA(CLOSE,N1);
P2:=EMA(CLOSE,N2);
CROSS(P1,P2),BPK;
CROSS(P2,P1),SPK;
C、线性加权平均线:
P1:=EMA2(CLOSE,N1);
P2:=EMA2(CLOSE,N2);
CROSS(P1,P2),BPK;
CROSS(P2,P1),SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
③均线结合MACD模型
关键函数:EMA
使用周期:日线
模型说明:利用DIFF和DEA的比较和收盘价的15日指数加权和最新价的比较作为买卖依据进行交易。
DIFF := EMA(CLOSE,12) — EMA(CLOSE,26);
DEA := EMA(DIFF,9);
EMA15:=EMA(CLOSE,15);
DIFF〉DEA&&CLOSE〉EMA15,BPK;
DEA〉DIFF&&EMA15〉CLOSE,SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑵通道类
①唐奇安通道模型
关键函数:HHV、LLV、REF、CROSS
使用周期:日线
模型说明: 突破前20天最高价做多,突破前20天最低价做空。
参数设置:
N ,最小值5,最大值100,缺省值20;
HH:=HHV(HIGH,N);
LL:=HHV(LOW,N);
CROSS(CLOSE,REF(HH,1)),BPK;
CROSS(REF(HH,1),CLOSE),SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
②布林通道结合阴阳K线模型
关键函数:STD、CROSS、ISUP、ISDOWN
使用周期:日线
模型说明:收盘价向上突破布林通道下轨并前当根k线收阳做多,收盘价向下突破布林通道上轨并前当根k线收阴做空。
参数设置:
N,最小值1, 最大值100, 缺省值26
M, 最小值1,最大值100,缺省值26
MID:=MA(CLOSE,N);
TMP2:=STD(CLOSE,M);
TOP:=MID+2*TMP2;
BOTTOM:=MID-2*TMP2;
CROSS(CLOSE,BOTTOM)&&ISUP,BPK;
CROSS(TOP,CLOSE)&&ISDOWN,SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑶其他类
①宝塔线
关键函数:REF、HHV、LLV
使用周期:日线
模型说明:宝塔线变红做多,宝塔线变绿做空。
因为文华并未公布宝塔线的后台公式,所以此指标的显示结果与文华系统中的宝塔显示能结果有一定的区别.
C1:=REF(CLOSE,1);
C2:=REF(CLOSE,2);
C3:=REF(CLOSE,3);
C4:=REF(CLOSE,4);
CMAX:=HHV(CLOSE,2);
CMIN:=LLV(CLOSE,2);
(CLOSE=CMAX&&(C1>=C2||C1〉=C3)||C1=CMAX&&(C2=CMIN||
C3=CMIN)&&CLOSE〉=C2||C2=CMAX&&C3=CMIN&&CLOSE〉=C1||C3=CMAX&&CLOSE>=C1&&CLOSE>=C2),BPK;
(CLOSE=CMIN&&(C1〈C2||C1〈C3)||C1=CMIN&&(C2=CMAX||
C3=CMAX)&&CLOSE<C2
||C2=CMIN&&C3=CMAX&&CLOSE<C1||C3=CMIN&&CLOSE<C1&&CLOSE<C2),SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
②分形
关键函数:MA、REF、REFX(未来函数)、BARSLAST、CROSS、V ALUEWHEN 使用周期:日线
模型说明:向上突破分形做多,向下突破分形做空
MA13:=MA(CLOSE,13);
HO:=H>REF(H,1)&&H>REF(H,2)&&H>=REFX(H,1)&&IF(H=REFX (H,2),H〉REFX(H,3),H〉REFX(H,2));
FXH:=CROSS(HO,0.9);
HH:=REF(H,BARSLAST(FXH));
LO:=L〈REF(L,1) &&L〈REF(L,2)&&L〈=REFX(L,1)&&IF(L=REFX(L,2),L〈REFX(L,3),L<REFX(L,2));
FXL:=CROSS(LO,0.9);
LL:=REF(L,BARSLAST(FXL));
A:=V ALUEWHEN(CROSS(CLOSE,HH),REF(LL,1));
A1:=V ALUEWHEN(CROSS(CLOSE,HH),CLOSE);
B:=V ALUEWHEN(CROSS(LL,CLOSE),REF(HH,1));
B1:=V ALUEWHEN(CROSS(LL,CLOSE),CLOSE);
(CROSS(CLOSE,HH)&&CLOSE>MA13)||CROSS(CLOSE,B),BK; (CLOSE〉A1&&CROSS(MA13,CLOSE))||CROSS(A,CLOSE),SP; (CROSS(LL,CLOSE)&&CLOSE〈MA13)||CROSS(A,CLOSE),SK; (CLOSE〈B1&&CROSS(CLOSE,MA13))||CROSS(CLOSE,B),BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
③SAR模型
关键函数:ABS,SAR
使用周期:任意
模型说明:SAR指标出现红点买平开,蓝点卖平开
N: 最小值1 最大值100 缺省值4
STEP: 最小值0。
01 最大值0。
2 缺省值0。
02
MV ALUE: 最小值0.01 最大值1 缺省值0.2
SARLINE:=ABS(SAR(N,STEP,MV ALUE));
CLOSE〉SARLINE,BPK;
CLOSE<SARLINE,SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
容易犯的编写错误:
直接写CLOSE>SARLINE是不对的,CLOSE恒大于0,而SARLINE有正有负,应将SARLINE取绝对值。
如下:
SARLINE:=ABS(SAR(4,0。
02,0。
2));
再用CLOSE进行比较
更多期货股票学习资料点击:http://item.taobao。
com/item。
htm?
id=43955572047
2、振荡类交易模型编写示范
⑴主动买与主动卖模型
关键函数:SCALE,CROSS,V ALUEWHEN,TIME
模型说明:现价大于当日开盘价并且主动买大于主动卖时买平开,现价小于开盘价并且主动卖大于主动买时卖平仓。
另SCALE为内部函数,不可以进行效果测试的。
A、使用周期:日线
ZB:=SCALE*VOL;
ZS:=(1-SCALE)*VOL;
CLOSE>OPEN&&CROSS(ZB,ZS),BPK;
CLOSE〈OPEN&&CROSS(ZS,ZB),SPK;
B、使用周期:任意分钟线
ZB:=SCALE*VOL;
ZS:=(1-SCALE)*VOL;
OO:=V ALUEWHEN(TIME=0900,OPEN);
CLOSE>OO&&CROSS(ZB,ZS),BPK;
CLOSE<OO&&CROSS(ZS,ZB),SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑵ROC(变动速率)与价格趋势变动背离:
关键函数:REF,CROSS,MA,HHV
使用周期:所有K 线周期。
模型说明:价格创新高,ROC未配合上升,显示上涨动力减弱;价格创新低,ROC 未配合下降,显示下跌动力减弱
参数设置:
参数N ,最小值5,最大值100,缺省值24;
参数M,最小值5,最大值100,缺省值20;
ROC:=(CLOSE-REF(CLOSE,N))/REF(CLOSE,N)*100;
ROCMA:=MA(ROC,M);
C>REF(HHV(C,N1),1)&&ROC〈ROCMA,SPK;
C〈REF(HHV(C,N1),1)&&ROC〉ROCMA,BPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑶三减六日乖离模型:
关键函数:REF,MA,HHV,LLV
使用周期:所有K 线周期。
模型说明:乖离值为正数时,未能突破前期高值,卖出;反之,买进。
参数设置:
参数N ,最小值0,最大值20,缺省值5;
B36 := MA(CLOSE,3)-MA(CLOSE,6);
B612 :=MA(CLOSE,6)—MA(CLOSE,12);
REF(B36>REF(HHV(B36,N),1),1)&&B36〈REF(B36,1),SPK;
REF(B36<REF(LLV(B36,N),1),1)&&B36〉REF(B36,1),BPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
3、日内交易模型编写示范
⑴开盘价突破模型
关键函数:REF,V ALUEWHEN,TIME,CROSS,DATE
使用周期:五分钟
模型说明:五分钟周期开盘第二根K线的收盘价与当日开盘价比较及最新价和当日开盘价的比较作为买卖依据进行交易,尾盘平仓不留隔夜单.
A:=V ALUEWHEN(TIME=905,CLOSE);
B:=V ALUEWHEN(DATE<>REF(DATE,1),OPEN);
A<B&&CROSS(CLOSE,B)&&TIME〈1450,BK;
(A〉B&&CROSS(B,CLOSE))||TIME>=1450,SP;
A>B&&CROSS(B,CLOSE)&&TIME〈1450,SK;
(A〈B&&CROSS(CLOSE,B))||TIME〉=1450,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
更多期货股票学习资料点击:http://item.taobao。
com/item.htm?id=43955572047
容易犯的编写错误:
A、所选周期与所用模型时间上不统一
如5分钟周期最小能取到的时间点就是5分钟,如1455,1450,1445这样,所以其最后一根K线的1455这根。
而如果您使用的是3分钟周期,那么1455就不是最后一根K线了,因为3分钟周期上所能取到的时间点为每3分钟,如1454,1457,那么就需要作出相应修改,如TIME=1455,BP;就需要修改为TIME=1457,BP;
B、开仓漏写时间控制
进行日内交易时注意时间函数的使用,不仅平仓条件中需要使用时间函数控制,有时开仓条件也需要使用时间函数来进行控制.
例如:上面的模型,14:50进行平仓,不仅需要在平仓条件中写入时间1450,还需要写入开仓条件,否则可能会在1450平仓后,继续开仓进行交易。
C、使用这种V ALUEWHEN(TIME=AA,DATA)格式的交易模型,一定要注意限制开仓时间在时间AA之后,否则在开盘到AA之前,对比的是昨日的DATA值
⑵开盘后前三十分钟最高最低价突破模型
关键函数:REF,V ALUEWHEN,TIME, DATE,HHV,LLV,BARSLAST
使用周期:五分钟
模型说明:以最新价与开盘30分钟内的最高最低价进行比较开仓,在收盘前平仓。
M:=BARSLAST(DATE<>REF(DATE,1) );
B:=V ALUEWHEN(TIME<=0930,HHV(HIGH,M));
D:=V ALUEWHEN(TIME<=0930,LLV(LOW,M));
CLOSE〉B&&TIME〈1455&&TIME〉0900,BK;
TIME=1455,SP;
CLOSE〈D&&TIME<1455&&TIME〉0900,SK;
TIME=1455,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑶单均线模型
关键函数:MA,TIME
使用周期:1分钟K线
模型说明:开盘后15分钟再根据均线与收盘价之间的关系进行日内买卖,尾盘平仓。
MAN:=MA(CLOSE,15);
TIME〉=0915&&TIME〈1455&&CLOSE〉MAN&&BARSLAST(CROSS (CLOSE,MAN ))>=3,BK;
TIME〉=1455||(CLOSE<MAN&&BARSLAST(CROSS(MAN,CLOSE ))〉=3),SP;
TIME〉=0900&&TIME〈1455&&CLOSE〈MAN&&BARSLAST(CROSS(MAN,CLOSE ))>=3,SK;
TIME>=1455||(CLOSE〉MAN&&BARSLAST(CROSS(CLOSE,MAN ))〉=3),BP;
注:加入BARSLAST函数过滤,避免短时间段内频繁交易。
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
4、跨合约、跨周期模型编写示范
⑴如何将沪铜1002合约(文华码:2102)日K线的M5,M10,M25均线引用到其他合约5分钟K线图上?
关键函数:#IMPORT,CROSS,MA
使用周期:五分钟
第一步:建立指标“MA1”
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
MA25:=MA(CLOSE,25);
第二步:建立指标“5MA”并在5分钟周期应用
#IMPORT[2102 ,DAY,MA1]AS A
M1:A.MA5;
M2:A。
MA10;
M3:A.MA25;
容易犯的编写错误:
A、被引用指标文件类型及名称不符合要求
编写跨合约,跨周期指标或模型,被引用的只能是“指标(即.FLM文件)”。
被引用的指标中不能存在引用其他指标语句。
被引用指标名称需以英文开头,可以是英文加数字形式,但不能出现汉字。
如:被引用指标名称可以是“MAA”、“MA1”,但不可以是“1MA”或“MA组合"。
B、文华码输入错误
如沪铜1002合约文华码为2102,并不是1002,各合约文华码可在报价列表“文华码”抬头列或各合约K线图右上角合约名称后括号内查到。
同品种不同周期间调用数据时可不必填写文华码,但#IMPORT函数填写文华码位置需以空格代替,不可省略。
C、周期使用混乱
目前跨周期函数只允许短周期引用长周期数据,如不能在日周期上引用分钟周期数据.
目前可供引用周期:MIN1、MIN3、MIN5、MIN10、MIN15、MIN30、HOUR1、HOUR3、HOUR8、DAY、WEEK、MONTH 。
⑵跨周期均线组合模型
关键函数:#IMPORT,CROSS
使用周期:三十分钟
模型说明:日周期均线为多头排列时,三十分钟周期上只做多,不做空;日周期均线为空头排列时,三十分钟周期上只做空,不做多.
第一步:建立日周期均线指标“MAD”
MA1:=MA(CLOSE,5);
MA2:=MA(CLOSE,10);
MA3:=MA(CLOSE,25);
第二部:编写跨周期交易模型
#IMPORT[ ,DAY,MAD] AS A
M1:=A。
MA1;
M2:=A。
MA2;
M3:=A.MA3;
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
CROSS(MA5,MA10)&&M1〉M2&&M2>M3,BK;
CROSS(MA10,MA5),SP;
CROSS(MA10,MA5)&&M1<M2&&M2〈M3,SK;
CROSS(MA5,MA10),BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑶跨合约MACD模型
关键函数:#IMPORT
使用周期:五分钟
模型说明:当沪铜指数(文华码2100)五分钟周期DIFF金叉DEA时,在沪铜1002合约上买平开;当沪铜指数(文华码2100)五分钟周期DIFF死叉DEA时,在沪铜1002合约上卖平开。
第一步:文华自带“MACD”指标,所以无需另新建指标。
第二步:编写跨合约交易模型
#IMPORT[2100,MIN5,MACD] AS V AR
D:=V AR.DIFF;
E:=V AR。
DEA;
CROSS(D,E),BPK;
CROSS(E,D),SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
容易犯的编写错误:
所引用变量名称需与原指标变量名称相符,如:
#IMPORT[2100,MIN5,MACD] AS VAR
D:=VAR.DIFF;
编写跨合约模型前需确认原MACD指标中确实含有DIFF变量名称(确认方法:通过公式管理器找到原指标,打开查看);
请注意原指标变量名称的大小写,如原指标变量名称为diff,则需要在引用时引用D:=VAR.diff; 而不是D:=VAR。
DIFF;
5、头寸及信号记录模型编写示范
⑴按资金比例下单模型
关键函数:SETDEALPERCENT
使用周期:五分钟
模型说明:当满足开仓条件时按可用资金比例的30%下单. SETDEALPERCENT(0.3);
A:=V ALUEWHEN(TIME=905,CLOSE);
B:=V ALUEWHEN(DATE<>REF(DATE,1),OPEN);
A〈B&&CROSS(CLOSE,B)&&TIME〈1450,BK;
(A〉B&&CROSS(B,CLOSE))||TIME>=1450,SP;
A>B&&CROSS(B,CLOSE)&&TIME<1450,SK;
(A<B&&CROSS(CLOSE,B))||TIME>=1450,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑵资金权益模型
关键函数:TRD_CAPITAL,TRD_ASSETS,SAR
使用周期:十五分钟
模型说明:只有当可用资金占总权益50%以上时满足价格上/下突破止损点才执行开仓条件,否则不予执行。
SARLINE:=ABS(SAR(4,0。
02,0。
2));
A:=TAD_CAPITAL/TRD_ASSETS;
CROSS(CLOSE,SARLINE)&&A〉0.5,BK;
CROSS(SARLINE,CLOSE),SP;
CROSS(SARLINE,CLOSE)&&A〉0.5,SK;
CROSS(CLOSE,SARLINE),BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑶信号记录模型
关键函数:BKPRICE ,SKPRICE
使用周期:五分钟
模型说明:突破4个周期最高/最低价开仓,获利15个点以上平仓。
CLOSE>=REF(HHV(HIGH,4),1),BK;
CLOSE-BKPRICE>15,SP;
CLOSE〈=REF(LLV(LOW,4),1),SK;
SKPRICE—CLOSE〉15,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
6、LEVEL-2模型编写示范
⑴LEVEL—2盘口模型
关键函数:L2_BPTIMES,L2_BKTIMES,L2_SPTIMES,L2_SKTIMES
使用周期:一分钟
模型说明:创5个周期最高/最低价时统计周期内多/空开平仓次数确定是否开仓. CS1:=L2_BPTIMES;
CS2:=L2_BKTIMES;
CS3:=L2_SKTIMES;
CS4:=L2_SPTIMES;
MA1:=MA(CLOSE,5);
CS2+CS4〉CS1+CS3&&HIGH〉=HHV(HIGH,M),BK;
CROSS(REF(MA1,1),LOW),SP;
CS2+CS4〈CS1+CS3&&LOW<=LLV(LOW,M),SK;
CROSS(HIGH,REF(MA1,1)),BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑵LEVEL—2量能模型
关键函数:L2_ASKACCOUNT,L2_BIDACCOUNT
使用周期:一分钟
模型说明:周期内卖主动次数大于周期内买主动次数并且收阳,平空仓并反手开多;周期内买主动次数大于周期内卖主动次数并且收阴,平多仓并反手开空。
L2_ASKACCOUNT〉L2_BIDACCOUNT&&CLOSE〉OPEN,BPK;
L2_BIDACCOUNT〉L2_ASKACCOUNT&&CLOSE〈OPEN,SPK;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑶LEVEL-2秒周期时间模型
关键函数:L2_BIDBIGTURNOVER,L2_ASKBIGTURNOVER,L2_ASKBIGCOUNT,
L2_BIDBIGCOUNT,L2_ASKBIGENTRASTCOUNT,L2_BIDBIGENTRASTCOUNT,TIME 使用周期:十五秒
模型说明:14点58分之前由周期内多/空头大单成交额及周期内多/空头平仓次数对比决定是否开仓;通过买1及卖1委托大量次数对比决定是否平仓,不留隔夜单。
L2_BIDBIGTURNOVER>L2_ASKBIGTURNOVER&&L2_ASKBIGCOUNT〉L2_BIDBIGCOUNT&&ISUP&&TIME<145800,BK;
L2_ASKBIGENTRASTCOUNT>L2_BIDBIGENTRASTCOUNT||TIME〉145800,SP;
L2_BIDBIGTURNOVER
〈L2_ASKBIGTURNOVER&&L2_ASKBIGCOUNT<L2_BIDBIGCOUNT&&ISUP&&TIME〈145800,SK;
L2_ASKBIGENTRASTCOUNT<L2_BIDBIGENTRASTCOUNT||TIME〉145800,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑷LEVEL—2 TICK模型
关键函数:SETDEALVOL,L2_TICK_DATA,BKPRICE,SKPRICE
使用周期:TICK
模型说明:模型每次下单手数为3手,当盘面总买量大于卖量且为主动买时,买开仓;当盘面总买量小于卖量且为主动卖是,卖开仓;盈利20点以上或亏损5点以上平仓出场。
SETDEALVOL(3);
L2_TICK_DATA('tbidvol’)〉L2_TICK_DATA('taskvol')&&L2_TICK_DATA (’activity’)=0,BK;
CLOSE-BKPRICE〉20||CLOSE—BKPRICE〈-5,SP;
L2_TICK_DATA(’tbidvol’)〈L2_TICK_DATA (’taskvol')&&L2_TICK_DATA(’activity’)=1,SK;
SKPRICE-CLOSE〉20||SKPRICE-CLOSE〈-5,BP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
7、套利交易模型编写示范
⑴如何编制简单价差类型的套利模型?
CROSS(300,CLOSE),BKSK;//CLOSE为两个品种的价差。
当价差小于300时,
买入开仓前一品种,卖出开仓后一品种
CROSS(CLOSE,500),SPBP;//当价差大于500时,卖出平仓前一品种,买入平仓后一品种
CROSS(CLOSE,600),SKBK;//当价差大于600时,卖出开仓前一品种,买入开仓后一品种
CROSS(400,CLOSE),BPSP;//当价差小于400时,买入平仓前一品种,卖出平仓后一品种
////内为文字说明,编写模型时不用写出
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑵如何编制技术指标的套利模型?
DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);
DEA := EMA(DIFF,9);
MACD:=2*(DIFF—DEA);
MACD>0,BKSK;
MACD〈0,SPBP;
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑶如何编制组合类型的套利模型?
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;//以上为KDJ公式
CLOSE<300&&CROSS(K,D),BKSK;//当价差小于300并且K上穿D时,买入开仓前一品种,卖出开仓后一品种
CROSS(CLOSE,500)||CROSS(D,K),SPBP;//当价差上穿500或者D上穿K 时,卖出平仓前一品种,买入平仓后一品种
CLOSE>600&&CROSS(D,K),SKBK;//当价差大于600并且D上穿K时,卖出开仓前一品种,买入开仓后一品种
CROSS(400,CLOSE)||CROSS(K,D),BPSP;//当价差下穿400或者K上穿D 时,买入平仓前一品种,卖出平仓后一品种
★以上模型源码内容仅供编写参考使用,如用于交易使用,风险自负
8、常见编写错误
★以下模型源码内容仅供编写参考使用,如用于交易使用,风险自负
⑴不允许使用交易指令作为变量名称。
如:BK:=CROSS(MA5,MA10);
正确写法为:CROSS(MA5,MA10);
⑵交易语句前不允许定义变量名称.
如:A:=CROSS(MA5,MA10),BK;
正确写法为:CROSS(MA5,MA10),BK;
⑶模型中只有开仓条件,没有平仓条件,如:
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
CROSS(MA5,MA10),BK;
CROSS(MA10,MA5),SK;
注:模型默认有过滤机制,如果缺少完整的开平仓条件,模型不会进行监测和执行。
如只想要模型来开仓,自己手动平仓,那么请在模型结尾处加入NOFILTER函数,修改如下: MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
CROSS(MA5,MA10),BK;
CROSS(MA10,MA5),SK;
NOFILTER;
⑷模型中必须使用‘:=’定义变量名称。
不允许只使用‘:’,如:
MA5:MA(CLOSE,5);
MA10:MA(CLOSE,10);
CROSS(MA5,MA10),BPK;
CROSS(MA10,MA5),SPK;
正确写法为:CROSS(MA5,MA10),BK;
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
CROSS(MA5,MA10),BPK;
CROSS(MA10,MA5),SPK;
⑸编写时掉入逻辑思维的陷阱,在考虑模型条件时,不需要考虑什么条件下不进行交易,而是正向的去考虑一定要达到何种条件时才会进行交易,这样在编写语句的时候,只需将要求的各个条件逐个罗列出来,使用操作符连接即可。
例如,均线与MACD结合编写模型时,要求均线金叉时,MACD数值不得为负值,那么正向考虑,均线金叉时MACD的数值应该大于等于0,直接编写为:MACD>0&&CROSS(MA5,MA30)
⑹交易指令SK、SP与SPK以及BP、BK与BPK混合穿插使用,如:
例如将
A,BPK;
B,SPK;
TIME>=1458,BP;
TIME〉=1458,SP;
写在一个模型中,主要问题是:
A、在进行多条件编写时,容易忽略掉交叉的情况使得模型编写不缜密;
B、模型执行时也会出现逻辑执行错误。
可以改写成:
A&&TIME<1458,BK;
B&&TIME〈1458,SK;
A||TIME〉=1458,BP;
B||TIME〉=1458,SP;
⑺指标,模型的混用.如:
DRAWTEXT(CLOSE〉OPEN,LOW,’*');//模型中不允许使用绘图函数CLOSE>OPEN,BPK;
CLOSE〈OPEN,SPK;
改为:
CLOSE>OPEN,BPK;
CLOSE<OPEN,SPK;
⑻买卖方向容易混淆,比如平多单对应的是SP而不是BP;。