加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

程序化之交易模型的编写

(2011-06-02 12:50:29)
标签:

空操作

模型

交易系统

低值

高值

财经

分类: 对冲及程序化交易

1)如何把熟悉的技术指标转换成交易模型?

第一步:把 KDJ 指标公式 COPY 过来,或按“引入公式”按钮,引入

RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;//算出(收盘价-N周期内的最低价)/(N周期的最高价N周期内的最低价)*100 的值,用RSV 来表示。

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;

{开多} ENTERLONG: CROSS(K,D),TFILTER; // K 向上穿越 D,发出开多操作

{平多} EXITLONG: CROSS(J,100),TFILTER; // J向上穿越100,发出平多操作

{开空} ENTERSHORT: CROSS(D,K),TFILTER; //K 向下穿越 D,发出开空操作

{平空} EXITSHORT: CROSS(0,J),TFILTER; //J向下穿越0,发出平空操作

图表交易模型就完成了,其仓位控制在第5页图中设置

 

对于新交易系统模型,可用下面4句代替

SELLSHORT(CROSS(0,J) and HOLDING<0, HOLDING,market); //J向下穿越0,发出平空操作
BUY(CROSS(K,D) and HOLDING=0,30%,market);// K 向上穿越 D,发出开多操作

SELL(CROSS(J,100) and HOLDING>0,HOLDING,market); // J向上穿越100,发出平多操作
BUYSHORT(CROSS(D,K) and HOLDING=0,30%,market); //K 向下穿越 D,发出开空操作

其中,HOLDING为持仓函数,30%表示按可用资金的30%交易,market表示交易类型为市价委托。后为文字说明,编写模型时不用写出。

 

2)如何把自编变色 K 线转换成交易模型

模型说明:第一根 K 线变红时买,第一根 K 线变蓝时卖

指标源码:

 

//如果最新值比满足条件的“高值”高,说明在上涨,红色K线

//如果最新值比满足条件的“低值”低,说明在下跌,绿色K线

//若最新值界于“高值”和“低值”之间,则与前一周期的颜色相同

 

HH1:=IF(H<REF(H,2) AND REF(H,1)<REF(H,2),REF(H,2),0);

LL1:=IF(L>REF(L,2) AND REF(L,1)>REF(L,2),REF(L,2),0);

HH2:=VALUEWHEN(HH1>0,HH1);  //寻找“高值”---比+1周期和+2周期都高

LL2:=VALUEWHEN(LL1>0,LL1);  //寻找“低值”---比+1周期和+2周期都低

K1:=IF(CLOSE>HH2,-3,IF(CLOSE<LL2,1,0));

{最新值 与“高值”比:

若最新值比“高值”高,返回-3;

   否则

最新值 与“低值”比

若最新值比“低值”低,返回1;

若最新值界于“高值”和“低值”之间---即中间值,返回0;}

K2:=VALUEWHEN(K1<>0,K1);//寻找第一个比“高值”高或者比“低值”低的

G:=IF(K2=1,HH2,LL2); //若找到的第一个 比“低值”低,返回当时的“高值”

若找到的第一个 比“高值”高,返回当时的“低值”

G1:=VALUEWHEN(ISLASTBAR,G);  //是否是最后一个周期

W1:=K2;

W2:=OPEN-CLOSE;  

HT:=IF(OPEN>CLOSE,OPEN,CLOSE); 

LT:=IF(OPEN<CLOSE,OPEN,CLOSE); 

//以上是在定义变量,转换成模型时直接引用

STICKLINE(W1>0,OPEN,CLOSE,8,1),COLORCYAN; 

STICKLINE(W1<=0,OPEN,CLOSE,8,1),COLORRED;

STICKLINE(W2>0 AND W1<=0,OPEN,CLOSE,8,0),COLORRED; 

STICKLINE(W2>0 AND W1>0,OPEN,CLOSE,8,0),COLORCYAN;

 

利用STICKLINE 里的条件W1,再加上交易指令即可改写为交易模型

修改为交易模型如下:

HH1:=IF(H<REF(H,2) AND REF(H,1)<REF(H,2),REF(H,2),0); 

LL1:=IF(L>REF(L,2) AND REF(L,1)>REF(L,2),REF(L,2),0);

HH2:=VALUEWHEN(HH1>0,HH1); 

LL2:=VALUEWHEN(LL1>0,LL1); 

K1:=IF(CLOSE>HH2,-3,IF(CLOSE<LL2,1,0)); 

K2:=VALUEWHEN(K1<>0,K1); 

G:=IF(K2=1,HH2,LL2);

G1:=VALUEWHEN(ISLASTBAR,G); 

W1:=K2; 

W2:=OPEN-CLOSE;  

图表交易模型就完成了,其仓位控制在第5页图中设置

对于新交易系统模型,可用下面4句代替

//交易系统之平空操作

SELLSHORT(CROSS(W1,0) OR (CROSS(W2,0) AND CROSS(W1,0)),HOLDING,market);

//交易系统之开多操作

BUY(CROSS(W1,0) OR (CROSS(W2,0) AND CROSS(W1,0)),30%,market);

//交易系统之平多操作

SELL(CROSS(0,W1) OR (CROSS(W2,0) AND CROSS(0,W1)),HOLDING,market);

//交易系统之开空操作

BUYSHORT(CROSS(0,W1) OR (CROSS(W2,0) AND CROSS(0,W1)),30%,market);

 

3)如何合并两个不同的交易模型?

在两个模型方向相同时才开仓,两个模型指令不同时就平仓

参数 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);

SELLSHORT(CROSS(CLOSE,AB) and HOLDING<0,HOLDING,market); //平空操作

BUY(CROSS(CLOSE,AB) and  HOLDING=0,30%,market);//开多操作

SELL(CROSS(AB,CLOSE) and HOLDING>0,HOLDING,market); //平多操作

BUYSHORT(CROSS(AB,CLOSE) and HOLDING=0,30%,market); //开空操作

 

模型B

HH1:=IF(H<REF(H,2) AND REF(H,1)<REF(H,2),REF(H,2),0);

LL1:=IF(L>REF(L,2) AND REF(L,1)>REF(L,2),REF(L,2),0);

HH2:=VALUEWHEN(HH1>0,HH1);

LL2:=VALUEWHEN(LL1>0,LL1);

K1:=IF(CLOSE>HH2,-3,IF(CLOSE<LL2,1,0));

K2:=VALUEWHEN(K1<>0,K1);

SELLSHORT(K2=-3 and HOLDING<0,HOLDING,market); //平空操作

BUY(K2=-3 and  HOLDING=0,30%,market);//开多操作

SELL(K2=1 and HOLDING>0,HOLDING,market); //平多操作

BUYSHORT(K2=1 and HOLDING=0,30%,market); //开空操作

 

利用并且( AND )和或者( OR )这些逻辑语句,将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) AND REF(H,1)<REF(H,2),REF(H,2),0);

LL1:=IF(L>REF(L,2) AND REF(L,1)>REF(L,2),REF(L,2),0);

HH2:=VALUEWHEN(HH1>0,HH1);

LL2:=VALUEWHEN(LL1>0,LL1);

K1:=IF(CLOSE>HH2,-3,IF(CLOSE<LL2,1,0));

K2:=VALUEWHEN(K1<>0,K1);

SELLSHORT(CROSS(CLOSE,AB) OR K2=-3 and HOLDING<0,HOLDING,market); //平空操作

BUY(CROSS(CLOSE,AB) AND K2=-3 and  HOLDING=0,30%,market);//开多操作

SELL(CROSS(AB,CLOSE) OR K2=1 and HOLDING>0,HOLDING,market); //平多操作

BUYSHORT(CROSS(AB,CLOSE) AND K2=1 and HOLDING=0,30%,market); //开空操作

 

(1)LIMIT和STOP指令的区别和联系

LIMIT------加入限价单,交易评测时按照次周期达到限价即操作,否则放弃;处于图表交易时按照指定限价报单交易。

所谓限价就是交易价优于设定的价格。具体说来对于买入或卖空就是低于设定价格,对于卖出或买空就是高于设定价格。

STOP------加入停损单,或又称突破交易,交易评测时按次周期达到设定价格即操作买入,否则放弃;处于图表交易时按照指定停损价格报单交易。

所谓停损就是交易价比设定的价格要差,(就是说和价格运动方向无关,只要比下的价格差,就下单,不管价格是由好到坏还是有坏到好。)具体说来对于买入或卖空就是高于设定价格,对于卖出或买空就是低于设定价格

 

BUY(holding=0, 1, LIMIT, 4000);

//如果无多头持仓,以4000挂单子

//结果:成交价≤4000

SELL(holding>0,0,LIMIT,4000);

//如果有多头持仓,以4000价格挂单子;

//结果:成交价≥4000

 

BUY(holding=0, 1, STOP, 4000);

//如果无多头持仓

//当最新价≥4000,以当时的对手价买一手单子

//结果:成交价根据行情而定

//相当于-----条件单,当价格突破某个值时,买开仓。

 

SELL(holding>0,0,STOP,4000);

//如果有多头持仓,4000是止损触发价(所能接受的最大损失的最低值)。

//当最新价≤4000,以当时的对手价卖出全部持仓。

//结果:成交价根据行情决定。

//相当于----止损----条件单,当价格下跌到某个值时,卖平仓。

 

BUYSHORT(holding=0, 1, STOP, 2020);

//如果无空头持仓

//当最新价≤2020时,以当时的对手价买一手单子

//结果:成交价根据行情而定

//相当于-----条件单,当价格下跌某个值时,卖开仓。

 

SELLSHORT(holding<0,0,STOP,2020);

//如果有空头持仓,2020是止损触发价(所能接受的最大损失的最高值)。

//当最新价≥2020,以当时的对手价卖出全部持仓。

//结果:成交价根据行情决定。

//相当于----止损----条件单,当价格突破某个值时买平仓。

 

请各位来访的朋友点击我头像下面的“加关注”,谢谢!铭博财富国内理财联系邮箱:mbmoney@sina.com

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有