金字塔决策交易系统高级教程
1.2后台程序化交易函数
金字塔的后台程序化交易只能在专业版及更高级的版本中使用,它可以运行在序列和逐K线两种模式,但是推荐序列模式运行,这样可以极大提高后台执行的效率。
为了让用户更快的编写和熟悉金字塔的后台程序化交易,金字塔的程序化交易函数,前面都在交易系统函数名称前加 T 字母,比如BUY改为TBUY, 使用方法大致相同,用户仔细注意查看函数的使用说明。与图表交易系统函数不同的是,后台程序化交易的函数都使用实际的用户持仓和资金。
让我们通过案例来学习后台程序化交易函数。
例1:MA指标后台公式
//中间变量 MA3:MA(C,3); MA5:MA(C,5); //交易系统
TBUY(CROSS(MA3,MA5),1,LMT,C); //按照最新价限价开多
TSELL(CROSS(MA5,MA3),0,LMT,C);//按照最新价限价平多,0表示平掉全部持仓
请注意TBUY和TSELL函数的参数出现了变化,真正的下单时,需要指定下单类型和价格的,否则系统会按照市价进行交易。
用以模拟交易的函数和真实交易的函数,大部分只是有了前面T字母差别,大部分的用以交易评测的交易系统,只要将交易函数部分前面加
T字母即可解决,唯一区别最大的就是
TBUY,TSELL,TBUYSHORT,TSELLSHORT 这4个函数与模拟交易用的函数区别较大,请仔细辨别。
请注意后台程序化交易不能使用图表交易功能,且图表交易和后台交易的函数不能混用。交易控制符 THISCLOSE 在真实交易中被 LMT 等真实交易控制符所取代,金字塔的模拟交易控制符和真实交易控制符两者不能通用。金字塔的真实下单函数只支持LMT限价 MKT市价 STP止损 STPLMT限价止损 这4个交易控制符。
真实下单交易函数,下单数量不再支持百分比模式。 程序化交易的函数介绍: 程序化交易系统之开多操作:
用法:TBUY(COND,V,[Type,P1,P2,AC,STOCK]);表示当COND条件成立时, 买入V股(手)当前品种,
TYPE表示开仓类型,LMT限价 MKT市价 STP止损 STPLMT限价止损
P1表示开仓价格,当TYPE为LMT和STP,STPLMT时为指定限价和止损价格,其他情况填0
P2为止损限价,当TYPE为STPLMT时,必须指定P2的止损限价,其他情况填0,当P1止损价触发时按照
2
金字塔决策交易系统高级教程
P2价格止损操作.
当TYPE参数省略时,为市价开仓。AC为帐户ID,为空时为系统默认帐户,否则将下单到指定帐户中 STOCK为品种代码,比如'SH600215',为空或者不填时为当前品种
后台程序化交易不能使用图表交易功能,且图表交易和后台交易的函数不能混用。例如,限价在图表中函数为Limit,后台为Lmt。市价在图表是函数Market,在后台是Mkt。
例如:TBUY(C>O ,1000,LMT,C);表示收阳线则在本周期收盘价上买入1000股(手)。
TBUY(C>0,1000,STP,CLOSE+0.2);表示收阳线则在本周期收盘价高于0.2元下1000股(手)止损单,当盘中价格到了触发价时按市价开仓止损.
TBUY(C>0,1000,STPLMT,CLOSE+0.2,CLOSE);表示收阳线则在本周期收盘价高于0.2元下1000股(手)止损单,当盘中价格到了触发价时按CLOSE价格开仓止损。
程序化交易系统之平多操作:
TSELL(COND,V,[Type,P1,P2,AC,STOCK]); 用法同上 程序化交易系统之开空操作:
TBUYSHORT(COND,V,[Type,P1,P2,AC,STOCK]); 用法同上 程序化交易系统之平空操作:
TSELLSHORT(COND,V,[Type,P1,P2,AC,STOCK]); 用法同上
注意:程序化交易系统的函数中交易类型Type与交易测试系统的差别
例2:唐奇安通道模型
//中间变量
input:N(20,5,100,1),NS(10,0,60,1); Price:=AVGENTERPRICE;//持仓价位 //交易条件
开多平空条件:=CROSS(H, hhv(ref(h,1),N)); 开空平多条件:=CROSS(llv(ref(l,1), N),L); //交易系统
SELLSHORT(开多平空条件 and 持仓<0,持仓,market); SELLSHORT(持仓<0,持仓,Stopr,Price+NS); //止损 BUY(开多平空条件 and 持仓=0,30%,market); SELL(开空平多条件 and 持仓>0,持仓,market); SELL(持仓>0,持仓,Stopr,Price-NS);//止损
BUYSHORT(开空平多条件 and 持仓=0,30%,market); //其他
资产:asset,noaxis,colorgreen;
3
金字塔决策交易系统高级教程
持仓:HOLDING,LINETHICK0; 总次数: TOTALTRADE,LINETHICK0; 盈利:NUMWINTRADE,LINETHICK0;
胜率:ROUNDS(100*PERCENTWIN,1),LINETHICK0; 连亏:MAXSEQLOSS,LINETHICK0; 连盈:MAXSEQWIN,LINETHICK0;
将交易模型转换成程序化交易系统,主要是涉及交易系统函数的转化,即在交易系统函数前加“t”,以及交易类型的改动;并且程序化交易函数都是在后台运行,不能在图表中显示;交易数量不能用30%的写法,只能用具体数量。
因此,唐奇安通道模型转化为可程序化交易的系统: //中间变量
input:N(20,0,60,1) ,NS(30,0,100,1); 持仓:=tHOLDING,LINETHICK0;
KCS:=intpart(tasset*0.3/(close*multiplier));//也表示30%的开仓数 BUY1:=hhv(ref(h,1),N); SELL1:=llv(ref(l,1),N);
Price:=tAVGENTERPRICE; //持仓价位 //交易条件
开多平空条件:=CROSS(H,BUY1); 开空平多条件:=CROSS(SELL1,L); //交易系统
TSELLSHORT(开多平空条件 and 持仓<0,t持仓,mkt); TSELLSHORT(持仓<0,持仓,Stp,Price+NS); TBUY(开多平空条件 and 持仓=0, KCS,mkt); TSELL(开空平多条件 and 持仓>0,持仓,mkt); TSELL(持仓>0,持仓,Stp,Price-NS);
TBUYSHORT(开空平多条件 and 持仓=0, KCS,mkt); 若想与交易模型完全一样,后6句则需这样写:
tSELLSHORT(ref(开多平空条件,1) and 持仓<0,t持仓,mkt); tSELLSHORT(持仓<0,持仓,Stp,Price+NS); tBUY(ref(开多平空条件,1) and 持仓=0, KCS,mkt); tSELL(ref(开空平多条件,1) and 持仓>0,t持仓,mkt);
4
金字塔决策交易系统高级教程
tSELL(持仓>0,持仓,Stp,Price-NS);
tBUYSHORT(ref(开空平多条件,1) and 持仓=0, KCS,mkt);
注意:在公式编辑中,点击 [ << ] 可弹出函数列表,可按类查找需要的函数,双击该函数将直接引入公式。公式中的蓝色字段为函数名,将鼠标放在未知的蓝色字段上,将看到该函数的描述和基本用法。
1.3后台套利模型范例
基于后台程序化效率高、操作灵活的特性,用来处理对价格异常敏感的套利交易就非常合适了。以下我们选取了常见的集中情况作为范例。
(1)简单价差类型的套利模型
C1为两个品种的价差。
当价差小于 300 时,买入开仓前一品种RB05,卖出开仓后一品种RB03 当价差大于500时,卖出平仓前一品种,买入平仓后一品种 当价差大于 600 时,卖出开仓前一品种,买入开仓后一品种 当价差小于400时,买入平仓前一品种,卖出平仓后一品种
由于涉及到需要同时下单到不同的品种,这里直接使用后台程序化交易系统编写。 //中间变量
C1:= “RB05$close”-“RB03$close”; //交易系统
TBUY(CROSS(300,C1),10, mkt,0,0,'','SQRB05');//开多 TBUYSHORT(CROSS(300,C1),10,mkt, 0,0,'','SQRB03'); //开空 TSELL(CROSS(C1,500),10,mkt,0,0,'','SQRB05'); //平多
TSELLSHORT(CROSS (C1,500),10,mkt, 0,0, '','SQRB03'); //平空 TBUYSHORT(CROSS(C1,600),10,mkt, 0,0, '','SQRB05'); //开空 TBUY(CROSS(C1,600),10, mkt,0,0,'','SQRB03');//开多
TSELLSHORT(CROSS (400,C1),10,mkt, 0,0, '','SQRB05'); //平空 TSELL(CROSS (400,C1),10,mkt, 0,0, '','SQRB03'); //平多
注意在后台程序化交易监控中,用户至少需要监控RB05或者RB03其中的一个。
(2)如何编制技术指标的套利模型:
//中间变量
C1:= “RB05$close”-“RB03$close”;
5
金字塔决策交易系统高级教程
DIFF := EMA(C1,12) - EMA(C1,26); DEA:= EMA(DIFF,9); MACD:=2*(DIFF-DEA); //交易条件
平空开多条件:=MACD>0; 平多开空条件:=MACD<0; //交易系统
TSELLSHORT(平多开空条件,10, mkt, 0,0, '','SQRB03'); //平空 TBUY(平空开多条件,10,mkt,0,0,'','SQRB05');//开多 TSELL(平多开空条件,10, mkt,0,0,'','SQRB05'); //平多 TBUYSHORT(平空开多条件,10,mkt, 0,0, '','SQRB03'); //开空
(3)如何编制技术指标的多账户模型:
账户1:16801 账户2:16802 //中间变量
DIFF := EMA(C,12) - EMA(C,26); DEA:= EMA(DIFF,9); MACD:=2*(DIFF-DEA); //交易系统
IF THOLDING<0 THENBEGIN
TSELLSHORT(MACD>0 and THOLDING<0, THOLDING, mkt,0,0,'16801'); //平空 TSELLSHORT(MACD>0,10, mkt, 0,0, '16802'); //平空 END
IF THOLDING=0 THENBEGIN
TBUY(MACD>0 and THOLDING=0,10,mkt, 0,0, '16801');//开多 TBUY(MACD>0,10,mkt, 0,0, '16802');//开多 END
IF THOLDING>0 THENBEGIN
TSELL(MACD<0 and THOLDING>0, THOLDING,10, mkt,0,0,'16801'); //平多 TSELL(MACD<0,10, mkt,0,0,'16802'); //平多 END
IF THOLDING=0 THENBEGIN
TBUYSHORT(MACD<0 and THOLDING=0,10,mkt,0,0,'16801'); //开空
6