“交易系统是完整的交易规则体系”,首先一套最简单的完整的交易系统,包括最基本的交易点组成的框架,也就是由两个点组成,一个是买入点的切入和卖出点的切出,整个的交易系统就是围绕着这两个基本的点形成的循环,整个的交易系统的确立、测试和优化,简单讲只是围绕这两个基本点的确认而展开。
但是,一个交易系统绝对不只是局限于得到两个点的工作,买入和卖出的有机结合,交易资金的合理分配使用,根据市场状况的变动相应的调整以适应新的变化等等后期的跟踪和再优化,以及保证交易循环的连续性都是一个“完整的交易规则体系”的要求。
一个完整的交易系统由以下的步骤组成:
交易策略的提出
交易对象的筛选
交易策略的公式化
交易系统的统计检验
交易系统的外推实验
交易系统的实战检验
交易系统的检测与维护
实际上,简单的讲来就是将一些的经验和方法首先通过量化和公式化,变成计算机可以识别的语言,并且在历史的数据中进行统计和成功率检验。首先通过了不同的市场,不同的历史环境的数据检验后付之实战,最终在实践的考验中不断完善和进步。在本章中,重点介绍利用金字塔决策交易系统如何实现交易策略的公式化以及交易系统的统计检验。
金字塔为了满足不同层次用户的需要,提供两种程式化交易,图表程式化交易和后台程式化交易.
图表自动交易是为基础用户所设立,使用ENTERLONG,EXITLONG,ENTERSHORT,EXITSHORT这4种传统的交易信号来实现下单.交易过程是基于图表之上的,用户事先将写有上述4种交易信号的公式添加到图表上,然后再来启动交易.
后台程式化交易是基于后台的预警模式,金字塔提供了一系列的功能和众多交易函数,可以在不影响用户前台图形操作情况下,可以高效与预警系统一起工作来实现自动交易,并且可以一个交易策略同时交易几个品种。
4.1 图表程式化交易系统的基础和格式
在金字塔决策交易系统的图形分析界面,按功能键F3就会出现公式编辑器的界面,然后在“交易系统”按鼠标右键, 如图所示
选“新建公式”,将出现下列编辑器
交易系统公式和其他的公式遵守相同的编写规则,如果观察以上的界面,可以发现主要有几点不同:
多档买卖条件的设定:交易系统最简单的结构由两个条件组成,买入和卖出(多头市场当中),或者卖出和买入(空头市场当中)。
ENTERLONG 开多
EXITLONG 平多
ENTERSHORT 开空
EXITSHORT 平空
以上四个条件分别表示两个市场行为的买入和卖出条件,每一个条件分别由独立的公式组成
一个完整的交易系统必须有进出两个条件组成,也就是说至ENTERLONG、EXITLONG或者ENTERSHORT、EXITSHORT中其中一组组成。
在交易系统编辑中,点击[ << ]可弹出函数列表,可按类查找需要的函数。公式中的蓝色字段为函数名,将鼠标放在未知的蓝色字段上,将看到该函数的描述和基本用法。
测试步长
交易系统中的参数设定时需要考虑测试步长的问题,因为参数过短造成测试量的巨幅几何增长会严重影响计算机的计算速度,所以在金字塔决策交易系统中对步长作出了限制,具体的计算公式如下:
参数1:
A=参数最大值
B=参数最小值
C=参数测试步长
参数1的计算量:D1=(B-A)/C的取整值;
将所有的参数的计算量计算得出之后相乘的值小于10000即在合理的范围内。
参数名 最小 最大 缺省 测试步长
N 1 100 9 3
N1 2 10 3 2
N2 2 30 3 2
如上图中的参数计算如下:
参数
N的计算量:D1=(100-1)/3=33;
D2=(10-2)/2=4
D3=(30-2)/2=14
虽以计算量
D=33*4*14=1848<10000
相反如果计算量过大溢出,公式系统将提示您无法完成,请修改相应的参数测试步长。
4.2交易系统示例
KDJ交易系统:
因为公式的编写基本原则都是一样的,所以对于公式编写而言,交易系统是多个条件的组合,我们打开金字塔决策交易系统的交易系统,规定其中的KD交易系统并打开。得到上图:
第一步:按照以前的公式编写方法,我们分别设定公式的名称、分析周期、参数的各项内容等,首先我们在公式编写栏中编写KD的表达式,并且将K、D表达为两个中间表达式。
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,M1,1);
D:=SMA(K,M2,1);
第二步:根据对KD使用的理解,得出需要编辑的条件并且加以量化、公式化--例如,我们知道了如果在D小与20的区域发生了K线向上穿过D线是很好的买入条件;相反的,D>80并且发生了D线向下穿过了K线,则是很好的卖出条件,这两个条件组成了一个比较完整的循环,达到了一个最简单的交易系统的结构要求,事实上就是我们把两个有机条件并列起来的过程。
ENTERLONG:CROSS(K,D)ANDK<20;//K值上传D值并且小于20的情况下开多
EXITLONG:CROSS(D,K)ANDK>80;//K值下破D值并且大于80的情况下平多
注:上面的完整公式在金字塔的交易系统组里面找到。
经过上面的两个步骤,完成了投资理念的公式化,这只是完成交易系统的最简单的一个环节,其后的测评与优化,直至实战检测,维护都是十分重要的工作,这一部分我们将在后一章的测试系统系统中提到。
一个简单的均线双向交易系统:
MA5:=MA(CLOSE,5);
MA10:=MA(CLOSE,10);
//先平后开的原则
EXITLONG:CROSS(MA10,MA5);//平多
EXITSHORT:CROSS(MA5,MA10);//平空
ENTERLONG:CROSS(MA5,MA10);//开多
ENTERSHORT:CROSS(MA10,MA5);//开空
4.3 金字塔的新交易系统
使用传统的ENTERLONG程式化交易信号做出的自动交易策略,存在着例如无法进行头寸管理,灵活性不够的缺点,为了对介入价位和仓位进行精确的控制,譬如海龟交易法的头寸管理.,需要金字塔提供扩展性更为强大的程式化交易模式,为此提供了一系列的功能和众多交易函数。这些函数用户可以在公式函数列表的“交易系统”组里找到.但是需要注意的是金字塔的新交易系统,是不能与旧的交易系统比如ENTERLONG混用的.金字塔的新交易系统采取的虚拟仓位和资金再图表做显示和模拟交易的,使用之前用户需要在公式属性里将资金和费率设置正确,以确保能更加贴近实战.真实自动交易时,系统将根据交易指令发出的交易类型和价格以及数量进行下单交易.
金字塔的后台自动交易下单模型主要由下列语句构成:
BUY(COND,V,Type,P); //开多
SELL(COND,V,Type,P); //平多
BUYSHORT(COND,V,Type,P); //开空
SELLSHORT(COND,V,Type,P); //平空
交易系统示例,
例一:KD交易系统
我们仍然使用前面的KD交易系统为例,将其修改为新版的程式化交易模型。
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,M1,1);
D:=SMA(K,M2,1);
//注意看下面两行语句
BUY(CROSS(K,D) AND <20,V,TYPE,P);
SELL(CROSS(D,K) AND K>80,V,TYPE,P);
例二:一个最简单的3天均线穿越5天均线的多头交易系统
资产:ASSET,LINETHICK0;
可用现金:CASH(0),LINETHICK0;
持仓:HOLDING,LINETHICK0;
MA3:MA(C,3);
MA5:MA(C,5);
BUY(CROSS(MA3,MA5),1,THISCLOSE); //开多1手
SELL(CROSS(MA5,MA3),0,THISCLOSE);//平多0表示平掉全部持仓
上述的交易模型之能在图表做显示使用,并可以做图表交易。
在交易系统评测中,介入时机与价位,是针对旧交易系统的4种信号指定买卖的介入时机与价位的,这里是以BUY函数的实际指定价格为准。
4.4 新交易系统的函数
交易系统之开多操作,
用法: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 最大利润率
当前位置之前所有交易中利润率最大一次的利润率,其数值在0—1之间
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 交易胜率
当前位置之前盈利交易占总交易次数的比例,其数值在0—1之间
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、平空
例如:TYPEBAR(2,1)表示:倒数第2个开多信号历时
WORSTPERCENT 最大亏损率
当前位置之前所有交易中亏损率最大一次的利润率,其数值在0—1之间
WORSTTRADE 最大亏损额
当前位置之前所有交易中亏损最大一次的亏损额