[转载]程序化之振荡类、日内交易模型编写范例
(2015-11-07 01:21:53)
标签:
转载 |
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
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<ROCMA;
BPK :=C<REF(LLV(C,N1),1) AND ROC>ROCMA;
{开多} ENTERLONG: BPK,TFILTER;
{平多} EXITLONG: SPK,TFILTER;
{开空} ENTERSHORT: SPK,TFILTER;
{平空} EXITSHORT: BPK,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BPK and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BPK and
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<REF(B36,1);
BPK :REF(B36<REF(LLV(B36,N),1),1) AND B36>REF(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
SELL(SPK and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SPK and HOLDING=0,30%,market); //交易系统之开空操作
日内交易模型编写范例
1)开盘价突破模型
关键函数:REF,VALUEWHEN,TIME,CROSS,DATE
使用周期:五分钟
模型说明:五分钟周期开盘第一根K线的收盘价与当日开盘价比较及最新价和当日开盘价的比较作为买卖依据进行交易,尾盘平仓不留隔夜单。
A:=VALUEWHEN(TIME=90500,CLOSE);
B:=VALUEWHEN(DATE<>REF(DATE,1),OPEN);
BK :=A<B AND CROSS(CLOSE,B) AND TIME<145000;
SP :=(A>B AND CROSS(B,CLOSE)) OR TIME>=145000;
SK :=A>B AND CROSS(B,CLOSE) AND TIME<145000;
BP :=(A<B AND CROSS(CLOSE,B)) OR TIME>=145000;
{开多} ENTERLONG: BK,TFILTER;
{平多} EXITLONG: SP,TFILTER;
{开空} ENTERSHORT: SK,TFILTER;
{平空} EXITSHORT: BP,TFILTER;
图表交易模型就完成了
对于新交易系统模型,可用下面4句代替
SELLSHORT(BP and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BK and
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) )+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<D AND TIME<145500 AND TIME>090000;
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
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<MAN AND BARSLAST(CROSS(MAN,CLOSE ))>=3);
SK :=TIME>=090000 AND TIME<145500 AND CLOSE<MAN AND BARSLAST(CROSS(MAN,CLOSE ))>=3;
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
SELL(SP and HOLDING>0,HOLDING,market); //交易系统之平多操作
BUYSHORT(SK and HOLDING=0,30%,market); //交易系统之开空操作
注:加入BARSLAST函数过滤,避免短时间段内频繁交易。
6.4常见问题
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<MAN;
SK :=TIME>=090000 AND TIME<145500 AND CLOSE<MAN;
BP :=TIME>=145500 OR CLOSE>MAN;
SELLSHORT(BP and HOLDING<0,HOLDING,market); //交易系统之平空操作
BUY(BK and
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 线,所以今天不会发指令,而是在明天第一根开盘时发委托,一定要注意掌握使用。
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(L,ENTERBARS)+NS);
BUY(tt0 and BK and
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
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为单方向只开一次仓,即不连续开仓
上述模型仅供参考,据此交易风险自负。
请各位来访的朋友点击我头像下面的“加关注”,谢谢!铭博财富国内理财联系邮箱:mbmoney@sina.com