党的女儿观后感600字:(4)交易系统编写范例和常见问题
来源:百度文库 编辑:中财网 时间:2024/05/09 02:01:19
第五章 交易系统编写范例和常见问题
1、趋势类交易模型编写范例
1)均线类
①均线排列模型
关键函数:MA
使用周期:任意
模型说明:MA5,MA10,MA20多头排列时做多,空头排列时做空。编者以一个周期内这三条均线的大小关系为判断标准举例,大家也可以使用多个周期的比较来判断多/空头排列关系。
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
MA20:=MA(CLOSE,20);
{开多} ENTERLONG: MA5>MA10 AND MA10>MA20,TFILTER;
{平多} EXITLONG: MA5
{开空} ENTERSHORT: MA5
{平空} EXITSHORT: MA5>MA10 AND MA10>MA20,TFILTER;
图表交易模型就完成了,其仓位控制在第5页图中设置
图表交易模型中不能使用交易函数和程式化函数
对于新交易系统模型,可用下面4句代替
SELLSHORT(MA5>MA10 AND MA10>MA20 and HOLDING<0,HOLDING,market); //平空操作
BUY(MA5>MA10 AND MA10>MA20 and HOLDING=0,30%,market);//开多操作
SELL(MA5
BUYSHORT(MA5
容易犯的编写错误:
A、交易模型中不允许使用只写:(即定义并画线)的写法。
如:MA5:=MA(CLOSE,5);
错误写成MA5:MA(CLOSE,5);
B、对于三个数的比较,大家往往习惯写成MA5>MA10>MA20这样,而在金字塔的模型编写中,目前只能两个变量之间进行比较,也就是说此类三个以上变量连续比较需要像模型中那样拆分来写:MA5>MA10 AND 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);
BPK :=CROSS(P1,P2);
SPK :=CROSS(P2,P1);
B、指数加权平均线:
P1:=EMA(CLOSE,N1);
P2:=EMA(CLOSE,N2);
BPK :=CROSS(P1,P2);
SPK :=CROSS(P2,P1);
C、线性加权平均线:
P1:=EMA2(CLOSE,N1);
P2:=EMA2(CLOSE,N2);
BPK :=CROSS(P1,P2);
SPK :=CROSS(P2,P1);
{开多} ENTERLONG: BPK,TFILTER;
{平多} EXITLONG: SPK,TFILTER;
{开空} ENTERSHORT: SPK,TFILTER;
{平空} EXITSHORT: BPK,TFILTER;
图表交易模型就完成了,其仓位控制在第5页图中设置
对于新交易系统模型,可用下面4句代替
SELLSHORT(BPK and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BPK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SPK and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SPK and HOLDING=0,30%,market); //交易系统之开空操作
③均线结合 MACD 模型
关键函数:EMA
使用周期:日线
模型说明: 利用 DIFF 和 DEA 的比较和收盘价的 15 日指数加权和最新价的比较作为买卖依据进行交易。
DIFF := EMA(CLOSE,12) - EMA(CLOSE,26);
DEA := EMA(DIFF,9);
EMA15:=EMA(CLOSE,15);
BPK :=DIFF>DEA AND CLOSE>EMA15;
SPK :=DEA>DIFF AND EMA15>CLOSE;
{开多} ENTERLONG: BPK,TFILTER;
{平多} EXITLONG: SPK,TFILTER;
{开空} ENTERSHORT: SPK,TFILTER;
{平空} EXITSHORT: BPK,TFILTER;
图表交易模型就完成了,其仓位控制在第5页图中设置
对于新交易系统模型,可用下面4句代替
SELLSHORT(BPK and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BPK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SPK and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SPK and HOLDING=0,30%,market); //交易系统之开空操作
2)通道类
①唐奇安通道模型
关键函数:HHV、LLV、REF、CROSS
使用周期:日线
模型说明: 突破前 20 天最高价做多,突破前 20 天最低价做空。
参数设置:N,最小值 5,最大值 100,缺省值 20;
input:N(20,5,100,1),NS(10,0,60,1);
持仓:HOLDING,LINETHICK0;
总次数: TOTALTRADE,LINETHICK0;
盈利:NUMWINTRADE,LINETHICK0;
胜率:ROUNDS(100*PERCENTWIN,1),LINETHICK0;
连亏:MAXSEQLOSS,LINETHICK0;
连盈:MAXSEQWIN,LINETHICK0;
BK:=CROSS(H, hhv(ref(h,1),N));
SK:=CROSS(llv(ref(l,1), N),L);
Price:=AVGENTERPRICE;//持仓价位
图表交易模型中不能使用交易函数和程式化函数,故在第64页图中有图表唐奇安通道模型
SELLSHORT(BK and 持仓<0,持仓,market);
SELLSHORT(持仓<0,持仓,Stopr,Price+NS);
BUY(BK and NOT(TYPE(1)=1),30%,market);
SELL(SK and 持仓>0,持仓,market);
SELL(持仓>0,持仓,Stopr,Price-NS);
BUYSHORT(SK and NOT(TYPE(1)=3),30%,market);
其中,NS为止损点数
容易犯的编写错误:
最高价高于前 20 周期最高价。应写为 HIGH>REF(HHV(HIGH,20),1),常见错误是
直接写为 HIGH>HHV(HIGH,20);
②布林通道结合阴阳 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;
BPK :=CROSS(CLOSE,BOTTOM) AND ISUP;
SPK :=CROSS(TOP,CLOSE) AND ISDOWN;
{开多} ENTERLONG: BPK,TFILTER;
{平多} EXITLONG: SPK,TFILTER;
{开空} ENTERSHORT: SPK,TFILTER;
{平空} EXITSHORT: BPK,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BPK and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BPK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SPK and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SPK and HOLDING=0,30%,market); //交易系统之开空操作
3)其他类
①宝塔线
关键函数: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);
BPK :=(CLOSE=CMAX AND (C1>=C2 OR C1>=C3) OR C1=CMAX AND (C2=CMIN OR C3=CMIN) AND CLOSE>=C2 OR C2=CMAX AND C3=CMIN AND CLOSE>=C1 OR C3=CMAX AND CLOSE>=C1 AND CLOSE>=C2);
SPK :=(CLOSE=CMIN AND (C1
{开多} ENTERLONG: BPK,TFILTER;
{平多} EXITLONG: SPK,TFILTER;
{开空} ENTERSHORT: SPK,TFILTER;
{平空} EXITSHORT: BPK,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BPK and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BPK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SPK and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SPK and HOLDING=0,30%,market); //交易系统之开空操作
②分形
关键函数:MA、REF、REFX(未来函数)、BARSLAST、CROSS、VALUEWHEN
使用周期:日线
模型说明:向上突破分形做多,向下突破分形做空
MA13:=MA(CLOSE,13);
HO:=H>REF(H,1) AND H>REF(H,2) AND H>=REFX(H,1) AND IF(H=REFX(H,2),H>REFX(H,3),H>REFX(H,2));
FXH:=CROSS(HO,0.9);
HH:=REF(H,BARSLAST(FXH));
FXL:=CROSS(LO,0.9);
LL:=REF(L,BARSLAST(FXL));
A:=VALUEWHEN(CROSS(CLOSE,HH),REF(LL,1));
A1:=VALUEWHEN(CROSS(CLOSE,HH),CLOSE);
B:=VALUEWHEN(CROSS(LL,CLOSE),REF(HH,1));
B1:=VALUEWHEN(CROSS(LL,CLOSE),CLOSE);
BK :=(CROSS(CLOSE,HH) AND CLOSE>MA13) OR CROSS(CLOSE,B);
SP :=(CLOSE>A1 AND CROSS(MA13,CLOSE)) OR CROSS(A,CLOSE);
SK :=(CROSS(LL,CLOSE) AND CLOSE
BP :=(CLOSE
{开多} ENTERLONG: BK,TFILTER;
{平多} EXITLONG: SP,TFILTER;
{开空} ENTERSHORT: SK,TFILTER;
{平空} EXITSHORT: BP,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BP and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SP and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SK and HOLDING=0,30%,market); //交易系统之开空操作
由于用到未来函数,仅作示范参考
③SAR 模型
关键函数:ABS,SAR
使用周期:任意
模型说明:SAR 指标出现红点买平开,蓝点卖平开
N:最小值 1 最大值 100 缺省值 4
STEP: 最小值 0.01 最大值 0.2 缺省值 0.02
M1:最小值 0.01 最大值 1 缺省值 0.2
SARLINE:=ABS(SAR(N,STEP,M1));
BPK :=CLOSE>SARLINE;
SPK :=CLOSE
{开多} ENTERLONG: BPK,TFILTER;
{平多} EXITLONG: SPK,TFILTER;
{开空} ENTERSHORT: SPK,TFILTER;
{平空} EXITSHORT: BPK,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BPK and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BPK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SPK and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SPK and HOLDING=0,30%,market); //交易系统之开空操作
容易犯的编写错误:
直接写CLOSE>SARLINE是不对的,CLOSE恒大于0,而SARLINE有正有负,应将SARLINE
取绝对值。如下:
SARLINE:=ABS(SAR(4,0.02,0.2));
再用 CLOSE 进行比较
2、振荡类交易模型编写范例
1)主动买与主动卖模型
关键函数:BUYVOL(), SELLVOL(),CROSS,VALUEWHEN,TIME
模型说明:现价大于当日开盘价并且主动买大于主动卖时买平开,现价小于开盘价并且主动卖大于主动买时卖平仓。
使用周期:分钟线
ZB:=SUM( BUYVOL(),5);
ZS:= SUM( SELLVOL(),5);
BPK := CLOSE > OPEN AND CROSS(ZB,ZS);
SPK := CLOSE < OPEN AND CROSS(ZS,ZB);
{开多} ENTERLONG: BPK,TFILTER;
{平多} EXITLONG: SPK,TFILTER;
{开空} ENTERSHORT: SPK,TFILTER;
{平空} EXITSHORT: BPK,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BPK and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BPK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SPK and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SPK and HOLDING=0,30%,market); //交易系统之开空操作
2)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);
SPK :=C>REF(HHV(C,N1),1) AND ROC
BPK :=CROCMA;
{开多} ENTERLONG: BPK,TFILTER;
{平多} EXITLONG: SPK,TFILTER;
{开空} ENTERSHORT: SPK,TFILTER;
{平空} EXITSHORT: BPK,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BPK and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BPK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SPK and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SPK and HOLDING=0,30%,market); //交易系统之开空操作
3)三减六日乖离模型:
关键函数:REF,MA,HHV,LLV
使用周期:所有 K 线周期。
模型说明:乖离值为正数时,未能突破前期高值,卖出;反之,买进。
参数设置:参数 N ,最小值 0,最大值 20,缺省值 5;
B36 := MA(CLOSE,3)-MA(CLOSE,6);
B612 : =MA(CLOSE,6)-MA(CLOSE,12);
SPK :=REF(B36>REF(HHV(B36,N),1),1) AND B36
BPK :REF(B36REF(B36,1);
{开多} ENTERLONG: BPK,TFILTER;
{平多} EXITLONG: SPK,TFILTER;
{开空} ENTERSHORT: SPK,TFILTER;
{平空} EXITSHORT: BPK,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BPK and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BPK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SPK and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SPK and HOLDING=0,30%,market); //交易系统之开空操作
3、日内交易模型编写范例
1)开盘价突破模型
关键函数:REF,VALUEWHEN,TIME,CROSS,DATE
使用周期:五分钟
模型说明:五分钟周期开盘第二根K线的收盘价与当日开盘价比较及最新价和当日开盘价的比较作为买卖依据进行交易,尾盘平仓不留隔夜单。
A:=VALUEWHEN(TIME=90500,CLOSE);
B:=VALUEWHEN(DATE<>REF(DATE,1),OPEN);
BK :=A
SP :=(A>B AND CROSS(B,CLOSE)) OR TIME>=145000;
SK :=A>B AND CROSS(B,CLOSE) AND TIME<145000;
BP :=(A=145000;
{开多} ENTERLONG: BK,TFILTER;
{平多} EXITLONG: SP,TFILTER;
{开空} ENTERSHORT: SK,TFILTER;
{平空} EXITSHORT: BP,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BP and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SP and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SK and HOLDING=0,30%,market); //交易系统之开空操作
容易犯的编写错误:
A、所选周期与所用模型时间上不统一
如 5 分钟周期最小能取到的时间点就是 5 分钟,如 145500,145000,144500 这样,所以其最后一根 K 线的 145500 这根。而如果您使用的是 3 分钟周期,那么 145500 就不是最后一根 K 线了,因为 3 分钟周期上所能取到的时间点为每 3 分钟,如 145400,145700,那么就需要作出相应修改,如 BP :=TIME=145500;就需要修改为 BP :=TIME=145700;
B、开仓漏写时间控制
进行日内交易时注意时间函数的使用,不仅平仓条件中需要使用时间函数控制,有时开仓条件也需要使用时间函数来进行控制。
例如:上面的模型,14:50 进行平仓,不仅需要在平仓条件中写入时间 145000,还需要写入开仓条件,否则可能会在 145000 平仓后,继续开仓进行交易。
C、使用这种 VALUEWHEN(TIME=AA,DATA)格式的交易模型,一定要注意限制开仓时间在时间 AA 之后,否则在开盘到 AA 之前,对比的是昨日的 DATA 值
2)开盘后前三十分钟最高最低价突破模型
关键函数:REF,VALUEWHEN,TIME, DATE,HHV,LLV,BARSLAST
使用周期:五分钟
模型说明:以最新价与开盘 30 分钟内的最高最低价进行比较开仓,在收盘前平仓。
M:=BARSLAST(DATE<>REF(DATE,1) );
B:=VALUEWHEN(TIME<=093000,HHV(HIGH,M));
D:=VALUEWHEN(TIME<=093000,LLV(LOW,M));
BK :=CLOSE>B AND TIME<145500 AND TIME>090000;
SP :=TIME=145500;
SK :=CLOSE
BP :=TIME=145500;
{开多} ENTERLONG: BK,TFILTER;
{平多} EXITLONG: SP,TFILTER;
{开空} ENTERSHORT: SK,TFILTER;
{平空} EXITSHORT: BP,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BP and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SP and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SK and HOLDING=0,30%,market); //交易系统之开空操作
⑶单均线模型。
关键函数:MA,TIME
使用周期:1 分钟 K 线
模型说明:开盘后15分钟再根据均线与收盘价之间的关系进行日内买卖,尾盘平仓。
MAN:=MA(CLOSE,15);
BK :=TIME>=091500 AND TIME<145500 AND CLOSE>MAN AND BARSLAST(CROSS(CLOSE,MAN ))>=3;
SP :=TIME>=145500 OR (CLOSE
SK :=TIME>=090000 AND TIME<145500 AND CLOSE
BP :=TIME>=145500 OR (CLOSE>MAN AND BARSLAST(CROSS(CLOSE,MAN ))>=3);
{开多} ENTERLONG: BK,TFILTER;
{平多} EXITLONG: SP,TFILTER;
{开空} ENTERSHORT: SK,TFILTER;
{平空} EXITSHORT: BP,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BP and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SP and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SK and HOLDING=0,30%,market); //交易系统之开空操作
注:加入BARSLAST函数过滤,避免短时间段内频繁交易。
4、套利交易模型编写范例
1)如何编制简单价差类型的套利模型?
CLOSE 为两个品种的价差。
当价差小于 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”;
DIFF := EMA(C1,12) - EMA(C1,26);
DEA := EMA(DIFF,9);
MACD:=2*(DIFF-DEA);
BKSK :=MACD>0;
SPBP :=MACD<0;
TSELLSHORT(SPBP,10, mkt, 0,0, '', 'SQRB03'); //平空
TBUY(BKSK,10,mkt, 0,0,'', 'SQRB05');//开多
TSELL(SPBP,10, mkt, 0,0,'', 'SQRB05'); //平多
TBUYSHORT(BKSK,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 THEN
BEGIN
TSELLSHORT(MACD>0 and THOLDING<0, THOLDING, mkt, 0,0,'16801'); //平空
TSELLSHORT(MACD>0,10, mkt, 0,0, '16802'); //平空
END
IF THOLDING=0 THEN
BEGIN
TBUY(MACD>0 and THOLDING=0,10,mkt, 0,0, '16801');//开多
TBUY(MACD>0,10,mkt, 0,0, '16802');//开多
END
IF THOLDING>0 THEN
BEGIN
TSELL(MACD<0 and THOLDING>0, THOLDING,10, mkt, 0,0,'16801'); //平多
TSELL(MACD<0,10, mkt, 0,0,'16802'); //平多
END
IF THOLDING=0 THEN
BEGIN
TBUYSHORT(MACD<0 and THOLDING=0,10,mkt, 0,0,'16801'); //开空
TBUYSHORT(MACD<0,10,mkt, 0,0, '16802'); //开空
END
上面3个例子用到了程式化交易函数
所有上述模型仅供参考,据此交易风险自负。
5、常见问题
1) AND 与 OR关系书写不完整明确,使得语句执行的结果与实际想要表达的内容不符。如:MACD 数值为正时,5 日线金叉 10 日线或者 10 日线金叉 30 日线时进行交易的条件语句不可直接写作:
MACD>0 AND CROSS(MA5,MA10) OR CROSS(MA10,MA30);
而应该使用括号将后面的均线条件括起来:
MACD>0 AND (CROSS(MA5,MA10) OR CROSS(MA10,MA30));
注:不要吝啬使用 () ,只有准确的书写了语句才能达到想要的结果。
2) 编写时掉入逻辑思维的陷阱,在考虑模型条件时,不需要考虑什么条件下不进行交易,而是正向的去考虑一定要达到何种条件时才会进行交易,这样在编写语句的时候,只需将要求的各个条件逐个罗列出来,使用操作符连接即可。
例如,均线与 MACD 结合编写模型时,要求均线金叉时,MACD 数值不得为负
值,那么正向考虑,均线金叉时MACD 的数值应该大于等于0,直接编写为:
MACD>0 AND CROSS(MA5,MA30)
3) 买卖方向容易混淆,比如平多单对应的是 SP 而不是 BP;
如示例,这样就不是一个完整的开平仓。BP 是指平空单,而不是平多单。
A:=VALUEWHEN(TIME=091500,HIGH);
B:=VALUEWHEN(TIME=091500,LOW);
BK :=TIME>091500 AND CROSS(CLOSE,B) AND TIME<145000;
BP :=TIME>145000;
正确书写:
A:=VALUEWHEN(TIME=091500,HIGH);
B:=VALUEWHEN(TIME=091500,LOW);
BK :=TIME>091500 AND CROSS(CLOSE,B) AND TIME<145000;
SP :=TIME>145000;
4) 模型存在过滤机制的前提下,BARSLAST函数求的是上次满足条件到当前的周期数,可能取到的只是满足条件处,而非实际执行指令位置,在求开仓位置时,要合理使用此函数。如:
A:=VALUEWHEN(TIME=091500,HIGH);
B:=VALUEWHEN(TIME=091500,LOW);
BK :CROSS(CLOSE,B);
SP :=CROSS(A,CLOSE);
如果你想求开仓位置的最高价,写为
N:=BARSLAST(CROSS(CLOSE,B))
HH:REF(HIGH,N);
是不对的。由于开仓后曾多次满足此条件,但是相应持仓并未平掉,所以此指令被自动过滤。这样写求的可能是上次满足开仓条件的位置,而非实际开仓位置。
5)进行日内交易时注意时间函数的使用,不仅平仓条件中需要使用时间函数控制,开仓条件也需要使用时间函数来进行控制。另外如果采取了 当前 K线走完后发出交易指令 的交易策略,更加要注意时间轴刻度与语句执行时间的关系。
如:
MAN:=MA(CLOSE,15);
BK :=TIME>=091500 AND TIME<145500 AND CLOSE>MAN;
SP :=TIME>=145500 OR CLOSE
SK :=TIME>=090000 AND TIME<145500 AND CLOSE
BP :=TIME>=145500 OR CLOSE>MAN;
SELLSHORT(BP and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BK and HOLDING=0,30%,market);//交易系统之开多操作
SELL(SP and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SK and HOLDING=0,30%,market); //交易系统之开空操作
说明:5 分钟周期,09:15 之后进行日内交易,14:55 进行平仓,不仅需要在平仓条件中写入时间 145500,还需要写入开仓条件,否则可能会在 145500 平仓后,继续开仓进行交易。
另外如果勾选当 K 先走完发出交易指令,该机制是出现指令的下一根 K 线开盘时发委托,由于尾盘平仓是在 145500 是最后一根 K 线,所以今天不会发指令,而是在明天第一根开盘时发委托,一定要注意掌握使用。
6) 金字塔的时间函数精确到秒,所以是6位,即HHMMSS;
7) 在金字塔中,“逻辑与”用 “ AND ” ,不用“&&”;“逻辑或”用“ OR ” ,不用“||” ;“不等于”用“<>” 。
8)追踪止赢功能(按点数)
input:NS(10,1,100,1);{高点或低点回来10点}
{可自设开平仓条件}
持仓: holding;
tt0:=time<145000;
tt2:=time>145700;//收盘时间
SELLSHORT(tt0 and BP and 持仓<0,持仓,market);
SELLSHORT(tt0 and 持仓<0,持仓,Stopr,LLV(H,ENTERBARS)+NS);
BUY(tt0 and BK and 持仓=0,20%,market);
SELL(tt0 and SP and 持仓>0,持仓,market);
SELL(tt0 and 持仓>0,持仓,Stopr,HHV(H,ENTERBARS)-NS);
BUYSHORT(tt0 and SK and 持仓=0,20%,market);
9) 追踪止赢功能(按回调比例)
input:NS(5,1,100,1);{ 回调比例}
持仓: holding;
tt0:=time<145000;
tt2:=time>145700;//收盘时间
SELLSHORT(tt0 and BP and 持仓<0,持仓,market);
SELLSHORT(tt0 and 持仓<0,持仓,Stopr, LLV(L,ENTERBARS)*(1+NS/100));
BUY(tt0 and BK and 持仓=0,20%,market);
SELL(tt0 and SP and 持仓>0,持仓,market);
SELL(tt0 and 持仓>0,持仓,Stopr, HHV(H,ENTERBARS)*(1-NS/100));
BUYSHORT(tt0 and SK and 持仓=0,20%,market);
其中,条件 and 持仓=0为单方向只开一次仓,即不连续开仓
上述模型仅供参考,据此交易风险自负。
10) 文华模型转换金字塔模型
①、文华中的&&和||,在金字塔中分别是" AND "和" OR "
可在WORD中通过【编辑】---【替换】即可
②、文华中TIME是4位,金字塔是6位的
在文华的TIME后加“00”,扩充为6位,如
TIME<1458 改为 TIME<145800
③、开平仓语句语句不同,文华比较简单,而金字塔的内容丰富,功能强大、灵活,更接近真实情况,使用者需细心揣摩、实际验证。
④、由于金字塔不鼓励使用未来函数,所以,文华的:
NN1:=BARSLAST(DATE<>REFX(DATE,1));
NN:=MAX(NN1,1);
在金字塔中用这一条指令替换
NN:=barslast(DATE<>REF(DATE,1))+1;
11)金字塔程式化交易的特点和与TradeStation等软件的不同点
金字塔为了满足不同层次用户的需要,提供两种程式化交易,前台图表程式化交易和后台程式化交易.
前台图表自动交易是为基础用户所设立,即可使用ENTERLONG,EXITLONG,ENTERSHORT,EXITSHORT这4种传统的交易信号,也可使用交易系统函数来实现下单.交易过程是基于图表之上的,用户事先将交易信号的公式添加到图表上,然后再来启动交易.
后台程式化交易是基于后台的预警模式,金字塔提供了一系列的功能和众多交易函数,可以在不影响用户前台图形操作情况下,可以高效与预警系统一起工作来实现自动交易,并且可以一个交易策略同时交易几个品种。而TradeStation是必须在图表上才能实现交易的.
TradeStation程式化交易时,图表上只有最后一个周期走完才发出交易指令,而金字塔提供了两种模式,一种是基于预警轮询模式,在一个K线周期内会被多次执行交易判断(频率取决于预警时间间隔这个选项),这样可以保证在出现信号时能够以最快速度的发出交易指令,但是用户不用担心一个周期内多次重复交易问题,因为金字塔可以自动防止此现象(可以使用ALLOWREPEAT控制符允许反复开平仓)。另外金字塔也提供K线走完再发信号这种工作模式,与TradeStation保持了一致.
由于程式化交易模式不同,所以用金字塔做自动交易时应特别注意几个问题:
①使用了即时发出预警信号选项时,自动交易不局限于最后的K线走完,所以可能会导致中间发出信号,而价格变动后信号消失
金字塔的图表程式化交易和后台程式化交易的简要描述和结构
前台图表交易
金字塔前台图表交易是将交易系统指标放在图表上进行显示和下单交易的,金字塔图表交易适用ENTERLONG,EXITLONG,ENTERSHORT,EXITSHORT这四种交易信号来分别表示多空头的进出场描述.
除此之外,金字塔还提供了功能更为强大的新交易系统函数,可以使用BUY,SELL,BUYSHORT,SELLSHORT,函数,对介入价位和仓位进行精确的控制,可以对譬如海龟交易法的头寸管理.金字塔的新交易系统函数,用户可以在公式函数列表的“交易系统”组里找到.但是需要注意的是金字塔的新交易系统,是不能与旧的交易系统比如ENTERLONG混用的.金字塔的新交易系统采取的虚拟仓位和资金再图表做显示和模拟交易的,使用之前用户需要在公式属性里将资金和费率设置正确,以确保能更加贴近实战.真实自动交易时,系统将根据交易指令发出的交易类型和价格以及数量进行下单交易.
后台程式化交易
金字塔的后台程式化交易在金字塔公式系统里用户可以在“后台程式化交易”函数组里找到,后台程式化交易是基于预警模式进行工作, 由于后台程式化交易是金字塔在后台进行,不需要图表打开不占用过多的资源,由于只只需要最后一个周期的信号,所以原则上公式不要多余计算,故效率高,便于对多个品种同一个策略进行轮循监控.用户前期编写的自动交易策略是需要先在图表上和程式化交易评测上通过后才可以放到后台去执行程式化交易。为了让用户更快的编写和熟悉金字塔的后台程式化交易,金字塔的程式化交易函数,前面都在交易系统函数名称前加 T 字母,比如BUY改为TBUY, 使用方法大致相同.户仔细注意查看函数的使用说明。与图表显示的交易系统函数不同的是,后台程式化交易的函数都使用的实际的用户持仓和资金.
13)使用金字塔自动交易的常见问题和注意事项:
1、前台图表ENTERLONG控制指令和BUY等图表显示函数是不能放在后台做监控交易的,但是将"允许程式化交易"勾去掉后单独做预警是可以的。
2、不带T的交易系统所有函数,均不能与ENTERLONG等传统的交易系统混用。
3、只有少数的带T的后台交易函数允许使用在Enterlong和BUY前台图表交易策略中. TAVGENTERPRICE,Taccount,Tholding,Tasset,但是金字塔强烈不建议使用,因为这样会造成图表上的交易信号与实际的下单记录不符。
4、金字塔的后台交易部分,使用手工闪电下单的记录,将无法通过比如TENTERPRICE等与交易记录有关函数中得到结果,但可以通过程式化交易监控中的手工下单干预功能完成此项目的。
5、金字塔的后台交易,查询持仓和资产均为用户当前的实际数值,如果多个策略同时多一个品种或通一个帐户进行操作会产生相互干扰现象,解决办法就是通过使用交易系统使用虚拟持仓和资金,这样就完全可以避免这种共振现象,但是推荐高级用户使用,因为需要很多技巧需要处理。
6、传统的交易信号ENTERLONG虽然功能较弱,但是由于不需要头寸管理,故金字塔可以使用公式的特殊算法达到高效运行,故在不需要介入点和仓位控制的策略中,尽量避免使用BUY等新交易系统,尤其在使用了BUY的新交易系统的策略中,使用未来函数更会导致效率下降。同样如此,如果在同一个策略中使用TBUY和BUY函数,也会导致在后台自动交易时的效率下降。
7、用以图表显示的交易系统和后台程式化交易的交易指令函数,参数有明显的不同,用户不能简单的将BUY函数加个T就可以直接后台交易,使用前应该将鼠标放在TBUY函数上认真看看函数说明。