期货自动化交易完整练习(文华财经)
(2013-04-04 10:53:07)
标签:
财经 |
分类: 期货和股票程序化交易 |
//练习1:
//日内交易,均线上穿平空做多,均线下穿平多做空
MA5:MA(C,5);
MA10:MA(C,10);
//buy_in
CROSS(MA5,MA10)&&TIME>=0900&&TIME<1457,BK;
CROSS(MA10,MA5)||TIME>=1457,SP;
//sell_in sell_out
CROSS(MA10,MA5)&&TIME>=0900&&TIME<1457,SK;
CROSS(MA5,MA10)||TIME>=1457,BP;
1.只能引用 .FML/.XFML文件
2.只能引用如下周期:MIN1 MIN3 MIN5 MIN15 MIN30 HOUR1 DAY WEEK MONTH
3.只能短周期引用长周期
4.被引用的指标中不能存在引用
5.如果不写文华码,默认引用当前合约,也可以直接写合约代码如:rb1201
6.FORMULA 引用指标名,只能引用除数字、或者数字开头的名称之外的名称。
//练习2:同一合约不同周期的数据调用
//当日均线出现多头排列时, 5分钟KD线金叉,做多。
//当日均线出现空头排列时, 5分钟KD线死叉,做空。
//先建立一个指标AAA
MA5:=MA(C,5);
MA10:=MA(C,10);
MA30:=MA(C,30);
//再建立交易模型
#IMPORT[,DAY,AAA] AS VAR
DM5:=VAR.MA5;
DM10:=VAR.MA10;
DM30:=VAR.MA30;
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;
DM5>DM10&&DM10>DM30&&CROSS(K,D),BPK;
DM5<DM10&&DM10<DM30&&CROSS(D,K),SPK;
AUTOFILTER;
//练习3:同一合约不同周期的数据调用
//30分钟周期上,当前面一根MA5大于MA10,并且5分钟周期上,MA5上穿MA10,做多。
//30分钟周期上,当前面一根MA5大于MA10,并且5分钟周期上,MA5下穿MA10,做空。
//尾盘平仓
//先建立一个指标AAA
RMA5:=REF(MA(C,5),1);
RMA10:=REF(MA(C,10),1);
//再建立交易模型
#IMPORT[,MIN30,AAA] AS VAR
DM5:=VAR.RMA5;
DM10:=VAR.RMA10;
MA5:=MA(C,5);
MA10:=MA(C,10);
DM5>DM10&&CROSS(MA5,MA10)&&TIME<1450,BK;
(DM5<DM10&&CROSS(MA10,MA5))||TIME>=1450,SP;
DM5<DM10&&CROSS(MA10,MA5)&&TIME<1450,SK;
(DM5>DM10&&CROSS(MA5,MA10))||TIME>=1450,BP;
AUTOFILTER;
//练习4:不同合约的数据调用
//当沪胶指数价格破20日新高,橡胶1201的MA5>MA10,做多。
//当沪胶指数价格破20日新低,橡胶1201的MA5<MA10,做空。
//先建立一个指标AAA
H20:=HHV(H,20);
L20:=LLV(L,20);
A:=C>REF(H20,1);
B:=C<REF(L20,1);
//再建立你的模型
#IMPORT [2300,DAY,AAA] AS VAR //只能引用如下周期:MIN1 MIN3 MIN5 MIN15 MIN30
HOUR1 DAY WEEK MONTH
DH20:=VAR.A;
DL20:=VAR.B;
MA5:=MA(C,5);
MA10:=MA(C,10);
DH20&&MA5>MA10,BPK;
DL20&&MA5<MA10,SPK;
AUTOFILTER;
//练习4 资金管理 利用头寸函数实现对仓位的加减。
//加仓模型
A:=多头开仓条件;
B:=空头开仓条件;
D:=多头平仓条件;
E:=空头平仓条件;
A && NOT(ISLASTSK|| ISLASTBK) ,
BK(2);
B && NOT(ISLASTBK|| ISLASTSK) ,
SK(2);
BUYVOL>2 && A1
&& ISLASTBK , BK(1);
SELLVOL>2 && B1
&& ISLASTSK , SK(1);
D && ISLASTBK,SP(BUYVOL);
E && ISLASTSK,BP(SELLVOL);
//减仓模型
A:=多头开仓条件;
B:=空头开仓条件;
E1:=多头平仓条件1;
F1:=空头平仓条
A ,BK;
B ,SK;
E1 && ISLASTBK,SP(BUYVOL/2);
E2 &&
ISLASTSP&&BUYVOL>0,SP(BUYVOL);
F1 && ISLASTSK,BP(3);
F 2&&
ISLASTBP&&SELLVOL>0,BP(SELLVOL);
//练习5 对交易资金的管理
//过滤模型
SETDEALPERCENT(20);//每次下单使用当时资金的20%
DIFF:=EMA(CLOSE,12) - EMA(CLOSE,26);
DEA:=EMA(DIFF,9);
DIFF<0&&DEA<0&&CROSS(DEA,DIFF),SK;
DIFF<0&&DEA<0&&CROSS(DIFF,DEA),BP;
DIFF>0&&DEA>0&&CROSS(DIFF,DEA),BK;
DIFF>0&&DEA>0&&CROSS(DEA,DIFF),SP;
AUTOFILTER;
//练习6
//非过滤模型
//10日均线之上开多仓(开仓资金可用资金20%),价格每上涨10%止盈平仓50%仓位,上涨20%止盈全部仓位。跌破5日线止损。N为合约单位
MA10:=MA(C,10);
MA5:=MA(C,5);
CROSS(C,MA10),BK(MONEY*0.2/(N*C*MARGIN));
CROSS(C,BKPRICE*1.1),SP(BUYVOL*0.5);
CROSS(C,BKPRICE*1.2),SP(BUYVOL);
CROSS(MA5,C),SP(BUYVOL);
//练习7 加仓
//收盘价上穿5周期均线,买开仓。收盘价连续2根站上5周期均线,且K线收阳,加仓1手。
//收盘价下穿5周期均线,卖开仓。收盘价连续2根小于5周期均线,且K线收阴,加仓1手。
MA5:=MA(C,5);
CROSS(C,MA5)&&NOT(ISLASTBK||ISLASTSK),BK(2);
CROSS(MA5,C)&&NOT(ISLASTBK||ISLASTSK),SK(2);
EVERY(C>MA5,2)&&ISUP&&ISLASTBK,BK(1);
EVERY(C<MA5,2)&&ISDOWN&&ISLASTSK,SK(1);
平多条件&&ISLASTBK,SP(BUYVOL);
平空条件&&ISLASTSK,BP(SELLVOL);
//练习8
//限价止损、限价止盈模型
A:=多头开仓条件;
B:=空头开仓条件;
E:=多头平仓条件;
F:=空头平仓条件;
A,BK;
E||C<=BKPRICE-100||C>=BKPRICE+150,SP;
B,SK;
F||C>=SKPRICE+100||C<=SKPRICE-150,BP;
AUTOFILTER;
//练习9 回撤止损止盈模型
//收盘价大于5周期均线,买开仓。
//收盘价小于5周期均线,平多仓。
//收盘价从高点回调30%,止盈。
N:=0.3; //定义回撤幅度
MA1 := MA(C,5); //5周期均线
HH:=HHV(H,BARSBK+1); //取自开仓K线到现在的最高价
C>MA1,BK;
(C<MA1)||(C>=BKPRICE&&C<=HH-N*(HH-BKPRICE)),
SP;
AUTOFILTER;
//练习10 限价止损止盈模型
//大豆1205合约:
//低于买开仓价10个点差,多头止损;
//高于买开仓价20个点差,多头止赢;
//高于卖开仓价10个点差,空头止损;
//低于卖开仓价20个点差,空头止赢;
A:=MINPRICE('A1205');
多头开仓条件,BK;
(C<=BKPRICE-SL*A||C>=BKPRICE+TP*A)&&BKPRICE>0,SP;
空头开仓条件,SK;
(C>=SKPRICE+SL*A||C<=SKPRICE-TP*A)&&SKPRICE>0,BP;
//止损点差为SL,aaaa止赢点差为TP
AUTOFILTER;
//练习11 引用盘口数据:挂单数据和成交数据
//根据盘口价量变化判断买卖双方的交易气氛,依此作为入场依据,可获得短暂盈利。
//可能用到的函数:各档位委托量、多空双方的大单价格、主动买卖的成交次数等
A:=L2_BIDVOL1+L2_BIDVOL2+L2_BIDVOL3;//定义买盘前3档总量
B:=L2_ASKVOL1+L2_ASKVOL2+L2_ASKVOL3;//定义卖盘前3档总量
D:A-B;
CROSS(D,0)&&ISLASTSK=0&&ISLASTBK=0,BK(1);//买量大于卖量且前一个指令不是开仓指令,则买开仓1手;
CROSS(0,D)&&ISLASTBK=0&&ISLASTSK=0,SK(1);//买量小于卖量且前一个指令不是开仓指令,则卖开仓1手;
EVERY(D>REF(D,1),2)&&ISLASTSK=1&&ISLASTBK=0,BP(1);//连续2个周期买量不断增加且前一个指令是卖开仓,则平1手空单;
EVERY(D<REF(D,1),2)&&ISLASTBK=1&&ISLASTSK=0,SP(1);//连续2个周期卖量不断增加且前一个指令是买开仓,则平1手多单;
//练习12 大单跟踪型
//根据大单累计或者大单变化方向预判价格即将发展的方向入场.
//可能用到的函数:主动买卖大单成交次数、买卖开平大单成交次数等
L2_SETBIGVOL(20); //定义大单,成交超过20手为大单
EVERY(L2_BIDBIGCOUNT>L2_ASKBIGCOUNT,3),BPK;
//三个周期内,主动买大单成交次数一直大于主动卖成交次数,做多
EVERY(L2_BIDBIGCOUNT<L2_ASKBIGCOUNT,3),SPK;
//三个周期内,主动买大单成交次数一直小于主动卖成交次数,做空
AUTOFILTER;