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

[金字塔教程五]新交易系统的函数

(2014-01-15 20:47:29)
标签:

金字塔教程

程序化交易

股票

分类: 金字塔决策交易系统

交易系统之开多操作,

用法:BUY(COND,V,Type,P);

表示当COND条件成立时,

买入V股(手)当前品种,TYPE表示买入类型,

P表示买入价格,所有参数均可以省略。

V:买入股(手)数或买入资金百分比(N%),省略表示100%

TYPE:可以是本周期收盘(THISCLOSE),次周期开盘(MARKET),

次周期限价单(LIMIT),次周期停损单(STOP)等交易方式控制符;

P:对于限价单、停损单需要指定的买入价格

例如:BUY(C>O ,1000,THISCLOSE);表示收阳线则在本周期收盘价上买入1000股(手)。

BUY(C>0,50%,LIMIT,CLOSE-0.2);表示在次周期CLOSE-0.2元位置下买入限价单,

若价格达到或低于该价格则用50%资金买入。

 

交易系统之平多操作,

SELL(COND,V,Type,P); 用法同上

 

交易系统之开空操作,

BUYSHORT(COND,V,Type,P); 用法同上

 

交易系统之平空操作,

SELLSHORT(COND,V,Type,P); 用法同上

 

ASSET当前资产

 

户账户客的净自有资产=可用现金+占用保证金-融资(现金+品种市值-融资)

 

AVGENTERPRICE 持仓均价

当前持有品种的平均持仓成本——最近空仓以来计

 

BESTPERCENT 最大利润率

当前位置之前所有交易中利润率最大一次的利润率,其数值在01之间

BESTTRADE 最大盈利额

当前位置之前所有交易中盈利最大一次的利润额

 

CASH(N)  现金存量

得到当前帐户的可用资金余额

用法:CASH(N),N表示投资方向 0多头 1空头

例如:CASH(0)表示取当前多头帐户的可用现金余额

 

ENTERBARS  开仓历时

返回上次开仓到当前的周期数,若之前没有开仓记录返回-1

 

ENTERPRICE  上次开仓价

得到当前位置的上次开仓价

 

ENTERVOL  上次开仓量

得到当前位置的上次开仓量

 

EXITBARS  平仓历时

返回上次平仓到当前的周期数,若之前没有开仓记录返回-1

 

EXITPRICE  上次平仓价

得到当前位置的上次平仓价

 

EXITVOL  上次平仓量

得到当前位置的上次平仓量

 

HOLDING  持仓量

得到当前帐户持仓量,多仓返回正数空仓返回负数

 

LIMIT 限价交易

交易方式控制符:加入限价单,次周期达到限价即操作,否则放弃。处于图表交易时按照指定限价报单交易

 

LIMITR 限价交易

交易方式控制符:加入限价单,本周期达到限价即操作,否则放弃。处于图表交易时按照指定限价报单交易

 

Market  市价交易,交易方式控制符:按照次周期开盘价操作。处于图表交易时按照实际交易市价操作

例如:buy(cond ,1000,market);

该控制符仅对交易评测时有效

 

MAXSEQLOSS  最大连续亏损次数

当前位置之前连续亏损交易的最大次数

 

MAXSEQWIN  最大连续盈利次数

当前位置之前连续盈利交易的最大次数

 

NUMLOSSTRADE  亏损次数

当前位置之前总共有多少次亏损的交易,注意每次卖出算一次交易,而买入不算

 

NUMSEQLOSS  连亏次数

当前位置之前连续有多少次亏损的交易,注意每次卖出算一次交易,而买入不算

 

NUMSEQWIN  连盈次数

当前位置之前连续有多少次盈利的交易,注意每次卖出算一次交易,而买入不算

 

NUMWINTRADE  盈利次数

当前位置之前总共有多少次盈利的交易,注意每次卖出算一次交易,而买入不算

 

OPENBAR 开仓历时

上一次仓位=0以来的周期数

 

OPENPROFIT  浮动盈亏

当前浮动盈亏(当前持仓市值与持仓成本之差)

 

PERCENTWIN  交易胜率

当前位置之前盈利交易占总交易次数的比例,其数值在01之间

 

SEQLOSS  连亏金额

当前位置之前连续亏损总额,注意每次卖出算一次交易,而买入不算

 

SEQWIN  连盈金额

当前位置之前连续盈利总额,注意每次卖出算一次交易,而买入不算

 

STATE  帐户状态

得到当前帐户状态,无仓输出0;有多头仓输出1;有空头仓输出-1

 

STOP  停损交易

交易方式控制符:加入停损单,或又称突破交易,次周期达到设定价格即操作买入,否则放弃。

所谓停损就是交易价比设定的价格要差,具体说来对于买入或卖空就是高于设定价格,

对于卖出或买空就是低于设定价格

例如:BUY(COND ,1000,STOP,CLOSE-0.01);

该控制符仅对交易评测时有效

 

STOPR  停损交易

为本周期的,其它同上

 

THISCLOSE  收盘价交易

交易方式控制符,按照本周期收盘价操作

例如:BUY(COND ,1000,THISCLOSE);

该控制符仅对交易评测时有效

 

TOTALTRADE  交易次数

当前位置之前总共有多少次交易,注意每次卖出算一次交易,而买入不算

 

TYPE(N)  N次信号类型

得到当前位置之前上N次信号类型

输出:0、无信号1、开多2、平多3、开空;4、平空

 

TYPEBAR  表示上次信号,

得到当前位置之前上N次信号指定类型距当前周期

TYPEBAR(N,TYPE)N表示上次信号,

TYPE表示信号类型 0、无信号1、开多2、平多3、开空;4、平空

例如:TYPEBAR21)表示:倒数第2个开多信号历时

 

WORSTPERCENT  最大亏损率

当前位置之前所有交易中亏损率最大一次的利润率,其数值在01之间

 

WORSTTRADE  最大亏损额

当前位置之前所有交易中亏损最大一次的亏损额

5.1快速入门

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

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

{最新值 与“高值”比:

若最新值比“高值”高,返回-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 

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

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 

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 

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

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

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 )这些逻辑语句,将AB模型合并为模型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

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

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); //开空操作

5.2常见问题

1LIMITSTOP指令的区别和联系

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

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

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

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

 

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

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

//结果:成交价≤4000

SELLholding>00LIMIT4000);

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

//结果:成交价≥4000

 

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

//如果无多头持仓

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

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

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

 

SELLholding>00STOP4000);

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

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

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

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

 

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

//如果无空头持仓

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

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

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

 

SELLSHORTholding<00STOP2020);

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

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

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

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

 

2)金字塔下的交易都支持哪些交易指令,有什么区别?

金字塔对于所有的可交易品种,均支持4种交易指令,即限价、市价、停损、限价停损。但是这几种交易指令是通过不同方式完成工作的,限价指令是所有平台都支持的,对于市价和停损单,下面几种交易平台如下:

CTP综合交易平台 除了上期所不支持市价外,其他3个交易所均支持市价指令,在上期所的品种下市价单金字塔是采用加N个变动价位实现,默认是3个,用户可在交易设置中更改。除了大连交易所支持停损指令外,其他交易均不支持停损指令,在不支持停损指令的交易所下停损单时金字塔是采用内部监控模式实现,最新价触及停损价位后立即按照市价发出委托单。金字塔CTP平台不支持限价停损指令,用户使用限价停损指令发出为委托单时,实际会按照停损指令发出。

IB(美国赢透)交易平台 这个平台支持所有限价、市价、停损、限价停损这个4个指令。在IB平台发出停损指令后会将指令单发送到IB的交易服务器上保存,等待触发。

0

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

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

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

新浪公司 版权所有