程序化交易高级教程2016

更新时间:2023-10-10 10:07:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

注:此教程适用于赢智Wh8。

目录

第一章如何优化你的交易策略 ....................................................................................................... 1

1.1 PANZHENG函数,减少盘整行情中的交易次数 ............................................................ 1 1.2 CHECKSIG函数,实现更具有优势进场价格 ................................................................ 7 1.3 MULTSIG函数,在一根k线上灵活进出 .................................................................... 12 1.4 TRADE_OTHER函数,在指数交易中的应用 ................................................................ 17 1.5 拓展思路—结合盘口数据研发策略 ........................................................................... 27 第二章多模型组合回测 ................................................................................................................. 35

2.1 回测一篮子合约 ........................................................................................................... 35 2.2 多模型组合回测 ........................................................................................................... 38 2.3 段落式交易回测 ........................................................................................................... 42 第三章编写资金管理模型 ............................................................................................................. 45

3.1 加码模型 ....................................................................................................................... 45 3.2 回撤控制模型 ............................................................................................................... 47 3.3 资金曲线跟随模型 ....................................................................................................... 48 第四章盘口模型的基本结构与应用 ............................................................................................. 49

4.1 盘口模型的分类 ........................................................................................................... 49 4.2 盘口模型使用的函数类型和运行机制 ....................................................................... 50 4.3 盘口模型的语法及编写规则 ....................................................................................... 50 4.4 盘口模型的加载流程 ................................................................................................... 54 第五章盘口高频模型的编写 ......................................................................................................... 56

5.1 什么是高频交易 ........................................................................................................... 56 5.2 盘口高频模型的编写—追涨高频策略 ....................................................................... 57 5.3 盘口高频模型的编写—辅助判断趋势策略 ............................................................... 61 5.4 盘口高频模型的编写—基差策略 ............................................................................... 62 第六章盘口模型控制滑点 ............................................................................................................. 63

6.1 了解滑点的产生 ........................................................................................................... 63 6.2 盘口模型控制滑点的原理 ........................................................................................... 64 6.3 盘口模型控制滑点策略编写 ....................................................................................... 64 第七章后台程序化 ......................................................................................................................... 71

7.1 运行模组 ....................................................................................................................... 71 7.2 盘口模型运行池 ........................................................................................................... 80 第八章远程监控 ............................................................................................................................. 86

8.1 设置运行模式 ............................................................................................................... 86 8.2 日志邮件 ....................................................................................................................... 88

第一章 如何优化你的交易策略

1.1 PANZHENG函数,减少盘整行情中的交易次数

很多趋势模型,在行情出现趋势的时候,都可以很好的抓住趋势,实现盈利,但长期运行下来,最终的结果却是小赚甚至亏钱,问题出在哪里?

原因在于,盘整行情中模型在不断的反复交易,而盘整中的交易都是不盈利甚至亏损的,行情中绝大部分又都是盘整行情,长时间的连续小亏损导致之前的利润全部回吐

关键函数:PANZHENG, 判断当前行情是否为盘整 注:返回1:表示盘整,返回0:表示不是盘整。

1

作用一:增加收益率 简单的均线模型 MA1:=MA(C,5); MA2:=MA(C,10); CROSS(MA1,MA2),BPK; CROSS(MA2,MA1),SPK; AUTOFILTER;

上面的模型在这段行情中实现盈利77040元,如下图所示

2

(增加阅读软件的页面放大率可查看清晰图片)

加入PANZHENG函数,在盘整行情中不开仓 做多代码如下: MA1:=MA(C,5); MA2:=MA(C,10);

CROSS(MA1,MA2)&&PANZHENG=0,BK; CROSS(MA2,MA1),SP; AUTOFILTER;

做多实现盈利179580元,如下图所示

3

模型中加入MULTSIG,在实现指令价模型的同时,同时可以实现在一根k线上反复进行交易,实现更精致的交易策略,可以很好的规避掉秒杀行情。

函数用法:

MULTSIG(Sec1,Sec2,N,INTERVAL):当INTERVAL不为0时,设置信号复核确认方式,开仓信号出信号sec1个数据时间间隔下单不复核,平仓信号出信号Sec2个数据时间间隔下单不复核,一根K线上最大的信号个数为N,INTERVAL为数据时间间隔。

当INTERVAL为0时,设置信号复核确认方式,开仓信号出信号Sec1秒下单不复核,平仓信号出信号Sec2秒下单不复核,一根K线上最大的信号个数为N,INTERVAL为数据时间间隔。 通过调整INTERVAL参数,模型可设置不同数据快照频率进行回测 INTERVAL代表数据时间间隔

1)支持0、3、5、10四个值,不支持变量。

2)参数为3、5、10分别代表用每隔3秒、5秒、10秒,计算一次模型 3)参数为3、5、10 ,回测速度可提升3-10倍,回测精度稍差 4)参数为0的时候 为每笔TICK计算一次模型,不限制加载周期 5)一个模型中只能写入一个INTERVAL值

MULTSIG_MIN(min1,min2,N):设置一根k线多信号的指令价方式(逐分钟回测),开仓信号出信号min1分钟下单不复核,平仓信号出信号min2分钟下单不复核,一根K线上最大的信号个数为N。

14

模型源码:

C>REF(H,1),BK;//价格大于上一根k线最高价,开多仓 C

MULTSIG_MIN(0,0,3);//开仓信号,出信号立即下单,不复核;平仓信号出信号立即下单,不复核。一根K线上最大信号个数为3。 AUTOFILTER;

案例:

收盘价模型,只能在下一根k线的开盘时止损 ST:=ABS(C-O);

ST>MA(ST,20)&&C>O,BK; ST>MA(ST,20)&&CHV(C,3),BP; C(H-O)*0.2,SP; (C-L)>(O-L)*0.2,BP; AUTOFILTER;

15

(增加阅读软件的页面放大率可查看清晰图片)

加入MULTSIG函数,实现在同一根k线上开仓后及时止损,亏损变为盈利 ST:=ABS(C-O);

ST>MA(ST,20)&&C>O,BK; ST>MA(ST,20)&&CHV(C,3),BP; C(H-O)*0.2,SP; (C-L)>(O-L)*0.2,BP; MULTSIG_MIN(0,0,2); AUTOFILTER;

16

(增加阅读软件的页面放大率可查看清晰图片)

1.4 TRADE_OTHER函数,在指数交易中的应用

1.4.1 拓展思路--指数交易

用指数回测本身是没有问题的,因为指数连续性好,能反应某个品种的连续走势。但现实中很多人发现,指数测试效果是盈利,但是实盘跑下来却是亏钱的,为什么会出现这种情况呢? 导致历史回测和实盘差距较大的一个因素—指数回测并参与计算交易结果,但指数本身并不能交易,指数的价格并不是当时交易合约的价格,就会导致与实际交易不符的情况。

我们能不能测试出指数和实际交易差别的真实情况呢?

关键函数:TRADE_OTHER('CODE') 指定CODE合约为交易合约,CODE为合约代码。 注: 1、

回测时:信号价格取值为该函数定义的交易合约的信号价格。

模组加载时:数据合约为加载模组时选择的数据合约,交易合约为该函数指定的合约。不写入该函数时,交易和数据合约一致。

2、该函数写为TRADE_OTHER('AUTO')时,可以加载到指数、主连、主指合约,实现自动换月移仓。建议加载到指数或主指合约使用,主连合约切换主力合约的接缝会有跳空,破坏合约趋势,可能导致出现不应该出现的信号

3、(1)CODE位置写为'AUTO'时,如果加载在指数合约上,主连数据开始时间在指定信号计算时间之内,从主连数据开始时间开始计算信号;

17

(2)CODE位置为具体合约时,具体合约数据开始时间在指定信号计算时间之内,从具体合约数据开始时间开始计算信号

4、数据合约和交易合约的数据不对齐时,会计算信号,交易合约的相关价格取交易合约最后一根K线的收盘价。

5、(1)CODE位置写为'AUTO'时:

如果加载在主连合约上,该函数可以和CHECKSIG,MULTSIG、CHECKSIG_MIN、MULTSIG_MIN,CLOSEKLINE_MIN函数连用;

如果加载在指数、主指合约上,该函数可以和CLOSEKLINE_MIN,CHECKSIG_MIN,MULTSIG_MIN函数连用;不支持和CHECKSIG,MULTSIG函数连用

(2)CODE位置为具体合约时:该函数可以和CLOSEKLINE_MIN,CHECKSIG_MIN,MULTSIG_MIN函数连用;不支持和CHECKSIG,MULTSIG函数连用。

6、(1)CODE位置写为'AUTO'时:该函数可以加载到指数、主连上,不可以加载到主指和其他具体合约上。

(2)CODE位置为具体合约时:该函数可以加载到到所有合约上。 7、该函数必须在有信号的模型中使用。 8、TRADE_OTHER函数不支持加载到副图中。

9、CODE位置写为合约代码时,该函数不支持加载到TICK周期,量能周期,秒周期上使用;CODE位置写为'AUTO'时,该函数不支持加载到日线以上周期使用。 10、CODE位置不支持写入文华码。 11、该函数不支持加载到页面盒子中使用。

一个均线模型,在未指定交易合约的时候,测试结果如下: 模型源码: MA10:=MA(C,10); MA30:=MA(C,30);

EVERY(C>MA10,4)&&C>MA30,BK; EVERY(CMA10,4),BP; EVERY(C

18

相应的,在回测报告中,我们也可以通过查看调整后的权益,来了解模型在历史回测中的变现。如下图所示:

44

最终权益=最终权益 = 初始资金 + 入金 - 出金 + 净利润。也就是初始资金+最后阶段的盈亏

(例如:使用DAYTRAD函数,是初始资金+最后一天的盈亏值)之后的指标均由“调整 后的权益”计算得来的。

调整后的权益=初始资金+净利润(即交易明细中各平仓盈亏之和) 出金=当上一阶段交易结束,且获利时,开始下一阶段交易前所出金额总和 入金=当上一阶段交易结束,且亏损时,开始下一阶段交易前所入金额总和

第三章 编写资金管理模型

3.1 加码模型

加仓模型有一套固定的编写套路,在初接触加码模型编写的时候,我们可以按照下面的模板来进行编写,熟练后,可以更自由的进行发挥。 加减仓模型编写模板: A:=多头开仓条件; A1:=多头加仓条件1;

45

A2:=多头加仓条件2; B:=空头开仓条件; B1:=空头加仓条件1; B2:=空头加仓条件2; E:=多头减仓条件; E1:=多头全平条件; F:=空头减仓条件; F1:=空头全平条件;

A && NOT(ISLASTBK) && NOT(ISLASTSK), BK(2); B && NOT(ISLASTSK) && NOT(ISLASTBK) ,SK(2); (A1||A2) &&BKVOL>=2 && BARSBK>1&&BKVOL=2 && BARSSK>1&&SKVOL

需要注意的是:由于加仓模型必须保证加仓时所开仓位和当前已经持有仓位方向相同,因此,在模型中需要判断当前信号、当前持仓、前一个信号等状态,进行过滤信号的条件 相关几种资金管理编写方法:

1、SETDEALPERCENT(20); //每次下单使用当时资金的20% 2、控制交易资金使用率不超过50% 资金使用率=持仓保证金/权益 BKVOL>2 && A && BARSBK>1&&MONEYRATIO<0.5,BK(1); 3、设置每次下单手数按照可用资金的20% K:=MONEY*0.2/(C*MARGIN*UNIT+FEE);

BKVOL>2 && A && BARSBK>1&&MONEYRATIO<0.5,BK(K);

范例:海龟法则模型编写

关键函数:BKPRICE,ISLASTBK,MONEYTOT,SKVOL 建议使用周期:所有K线周期 模型说明:

入市:以20日突破为基础的短期系统 加仓:以上次开仓价格的0.5倍ATR逐步加仓 止损:止损标准是2倍的ATR 退出:采用10日突破退出法则 //中间变量

46

TR : MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)); ATR : MA(TR,N); //平均真实波幅ATR定义

TC:INTPART((MONEYTOT*0.01/(UNIT*ATR))); //权益的1%和平均波动浮动来确定交易头寸 MTC:4*TC; //最大头寸上限计算 //交易条件

TMK1: CROSSUP(C,HV(H,20))&&ISLASTBK=0&&ISLASTSK=0;

TMK2:CROSSDOWN(C,LV(L,20))&&ISLASTBK=0&&ISLASTSK=0; //入市条件 JMK1:C>=BKPRICE+0.5*ATR&&BKVOL

JMK2: C<=SKPRICE-0.5*ATR&&SKVOL0;

JMP2: C>=(SKPRICE+2*ATR)&&SKVOL>0; //止损条件 TMP1:CROSSUP(H,HV(H,10))&&SKVOL>0;

TMP2: CROSSDOWN(L,LV(L,10))&&BKVOL>0; //出场条件 //交易系统 TMK1,BK(TC); TMK2,SK(TC);//入市 JMK1,BK(TC); JMK2,SK(TC);//加仓 JMP1,SP(BKVOL); JMP2,BP(SKVOL);//止损 TMP1,BP(SKVOL); TMP2,SP(BKVOL);//退出

//控制信号连续发出次数(保证了加仓信号可以执行)

3.2回撤控制模型

运作一只基金,回撤的控制至关重要,而程序化交易是如何实现对基金回撤的控制呢? 我们用一个具体的案例来探讨这个问题,假如现在有一只规模为3000万的基金,经理人将其分成30份,以每份100万的金额分配到30个不同的模组中。那么,这只基金的总体表现就由这30个模组的综合表现来决定了。我们都知道,每个模组都盈利只是一种理想状态,实际上在基金运作过程中必然会有表现不佳的模组,而我们要做的,就是控制好每一个模组的回撤,这样一来,整个基金的资金曲线才有可能保持稳定上升的状态。 关键函数:INITMONEY 模组初次加载时的起始资金 MONEYREAL模组子账户实际权益

范例:多模组运行,各子账户做回撤控制

47

策略思路:还是上面的案例,在将3000万资金分成30等份后,我们将用INITMONEY记录每一个

子账户的初始资金,模型运行过程中,监控资金相对于初始资金的变化情况,确保每个子账户的回撤不超过20%,例如子账户初始资金100万,当权益回撤至80万时平掉所有持仓,模型终止出新信号。

模型说明:INITMONEY函数可以取得模组初次加载时的起始资金,MONEYREAL可以取得模组子账

户实际权益。我们可以用(INITMONEY-MONEYREAL)/ INITMONEY计算出各子账户资金回撤幅度,当达到我们设定的上限时,平掉持仓。

//中间变量

HC:=(INITMONEY-MONEYREAL)/ INITMONEY //子账户资金回撤比例 MA1:=MA(C,100);

MA2:=MA(C,350);//定义双重均线 //交易条件

TMK1:=CROSS(MA1,MA2); TMK2:=CROSS(MA2,MA1);

TMP1:=CROSS(MA2,MA1)|| (C>BKPRICE&&C

TMP2:=CROSS(MA1,MA2)|| (CSKLOW+M); //回撤止损 //交易系统

TMK1&& HC<0.2,BK;//在可容忍回撤范围内开仓 TMK2&& HC<0.2,SK; //在可容忍回撤范围内开仓

TMP1||TMP3||HC>0.2,SP; //回撤超过可容忍上限,平仓出场 TMP2||TMP3||HC>0.2,BP; //回撤超过可容忍上限,平仓出场 //过滤函数 AUTOFILTER;

3.3资金曲线跟随模型

在软件的运行模组中会绘制两条资金曲线,实际资金曲线和理论资金曲线。实际资金曲线由实际成交价计算产生,理论资金曲线由信号指令价计算产生。提起与资金曲线有关的交易思路我们通常会想到控制实际资金的回撤幅度、控制实际资金的使用率等。那么理论资金曲线是没有价值了么?当然不是。

理论资金曲线,根据模组信号绘制,也就是说,它并不包含实盘运行中信号忽闪、滑点成本等因素的干预,可以认为是模型在顺利交易的状态下应该有的表现。恰恰因为它不受前面说道的几个因素干预,所以理论资金曲线更能反映出一个模型对当前行情的根本适应度。如果连理论资金曲线都下滑了,这个模型的实际资金曲线不会更好,当模型表现不好时,我们暂时不交易。 关键函数:MONEYTOT 模组子账户权益

48

(增加阅读软件的页面放大率可查看清晰图片)

模型在指数上计算信号,交易也直接在指数上进行,而现实中指数是无法完成交易的,这种测试结果的真实性就无法保证。

那么真实的情况是什么样的? 加入TRADE_OTHER函数 ,模型源码入下: MA10:=MA(C,10); MA30:=MA(C,30);

EVERY(C>MA10,4)&&C>MA30,BK; EVERY(CMA10,4),BP; EVERY(C

19

(增加阅读软件的页面放大率可查看清晰图片)

我们指定RB1501为交易合约后,发现盈利并没有明显变化,说明指数开平仓价格的价差,和具体合约比较接近。

但这是真实的情况吗?

下图是螺纹1501合约,2014年6月3号至今的走势,红圈中交易量较少,在这个时间段中出现的信号,很难完成交易或者将付出较大的滑点成本,必定会导致盈利的减少,那么如何知道最终的真实的交易结果?

20

我们在模型中加入了流动性限制,即成交量。根据经验螺纹的成交量应该在50万手以上的时候,才能够使交易顺畅。

即指定交易合约又保证流动性的代码如下: MA10:=MA(C,10); MA30:=MA(C,30);

EVERY(C>MA10,4)&&C>MA30&&VV>500000,BK; EVERY(C500000,SK; EVERY(C>MA10,4),BP; EVERY(C

//VV为跨合约引用RB1501的成交量

21

真实结果

(增加阅读软件的页面放大率可查看清晰图片)

当我们加入了流动性限制后,发现真实的交易情况,比开始的测试结果又差了一些。 这才是真实的结果。

所以,是否支持指数映射到主力合约交易并不重要,重要的是我们是否可以测试出这种映射交易的真实结果。

程序化交易平台 赢智wh8.1 赢智wh8.2 其他程序化交易平台 是否支持回测 否 支持 否 是否支持映射交易 是 是 是 1.4.2 如何解决移仓换月问题

我们常常会这样做:模型加载在主力连续合约上,指定主力合约为交易合约,只要主力合约切换,就自动移仓,这种方法正确吗?正确的方法应该是怎么样的?我们可以测试出来吗? 有没有更好的方法?我们能找到吗?

主连合约加载模型,自动移仓换月,会产生较大的移仓成本 MA10:=MA(C,10);

22

MA30:=MA(C,30);

EVERY(C>MA10,4)&&C>MA30,BK; EVERY(CMA10,4),BP; EVERY(C

(增加阅读软件的页面放大率可查看清晰图片)

怎么做才能解决指数加载模型,移仓换月的问题呢?

23

更好的方法是:加载两个模型,分别交易新主力合约和老主力合约。

在保证流动性的前提下,提前运行新主力合约,继续运行老主力合约,既减少移仓成本,又抓住更多的交易机会。 模型1源码: MA10:=MA(C,10); MA30:=MA(C,30); #CALL[6881,VVA] AS AA

VV:=AA.VV; //VV为跨合约引用RB1501的成交量 EVERY(C>MA10,4)&&C>MA30&&VV>500000,BK; EVERY(C500000,SK; EVERY(C>MA10,4),BP; EVERY(C

VV:=AA.VV; //VV为跨合约引用RB1410的成交量 EVERY(C>MA10,4)&&C>MA30&&VV>500000,BK;

24

EVERY(C500000,SK; EVERY(C>MA10,4),BP; EVERY(C

VV:=AA.VV; //VV为跨合约引用RB1501的成交量 EVERY(C>MA10,4)&&C>MA30&&VV>500000,BK; EVERY(C500000,SK; EVERY(C>MA10,4),BP; EVERY(C

虽然模型加载在指数上,但是交易都是在1501上进行,并且只在流动充足的时候交易,交易时间段为2014年7月至11月,其他时间1501因流动性差,不进行交易

25

(增加阅读软件的页面放大率可查看清晰图片)

对模型2进行回测: MA10:=MA(C,10); MA30:=MA(C,30); #CALL[6890,VVA] AS AA

VV:=AA.VV; //VV为跨合约引用RB1410的成交量 EVERY(C>MA10,4)&&C>MA30&&VV>500000,BK; EVERY(C500000,SK; EVERY(C>MA10,4),BP; EVERY(C

虽然模型加载在指数上,但是交易都是在1410上进行,并且只在流动充足的时候交易,交易时间段为2014年2月至7月初,其他时间1410因流动性差,不进行交易

(增加阅读软件的页面放大率可查看清晰图片)

总结:

这样在某段时间内,既可以因为合约流动性低而停止交易,减少滑点,又在主力合约切换之前的一段时间内,因为两个合约的流动性都较高,获得了重叠部分的交易机会,不但解决了移仓

26

换月带来的巨大成本,又因为重叠部分的交易,获得更高的收益。

1.5拓展思路—结合盘口数据研发策略

A:=(ASK1*ASK1VOL+ASK2*ASK2VOL+ASK3*ASK3VOL+ASK4*ASK4VOL+ASK5*ASK5VOL)/(ASK1VOL+ASK2VOL+ASK3VOL+ASK4VOL+ASK5VOL);//空方挂单均价

B:=(BID1*BID1VOL+BID2*BID2VOL+BID3*BID3VOL+BID4*BID4VOL+BID5*BID5VOL)/(BID1VOL+BID2VOL+BID3VOL+BID4VOL+BID5VOL);//多方挂单均价

我们分别用A和B代表空方和多方,当价格突破一方的时候,就会出现短暂的上涨或下跌行情, 而很多时候,价格都是在多方和空方阵营之间波动

1.5.1 文华通道线 :

策略思路:分别用空头和多头的挂单均价代表多空阵营,当价格向上突破空方阵营时做多,当价格向下突破多方阵营时做空。 MA(CLOSE,30);

27

A:=(ASK1*ASK1VOL+ASK2*ASK2VOL+ASK3*ASK3VOL+ASK4*ASK4VOL+ASK5*ASK5VOL)/(ASK1VOL+ASK2VOL+ASK3VOL+ASK4VOL+ASK5VOL);

B:=(BID1*BID1VOL+BID2*BID2VOL+BID3*BID3VOL+BID4*BID4VOL+BID5*BID5VOL)/(BID1VOL+BID2VOL+BID3VOL+BID4VOL+BID5VOL); RISING(60)&&C>MA(A,30),BK; RISING(60)=0&&C

28

1.5.2 盘口函数

RISING(N) 判断TICK图的价格趋势。

用法:参数N代表周期,在N个周期内,上涨趋势返回1,下跌趋势返回0,平盘时返回空值。 注:

1、该函数必须在TICK图中使用,在K线图上返回空值。 2、该函数需要有五档行情授权才能取到有效值,否则返回空值。 例:

RR:RISING(N);//加载到有五档授权的TICK图中,上涨趋势返回1,反之返回0。 TICK盘口模型范例

策略原理:日内走势出现逐笔连续上涨或者下跌的概率较小,当短暂的上涨或者下跌形成后,价

格极容易反向运行,连续10笔上涨趋势,并且10笔中有4笔以上主动卖,且单次手数超过50手,开空仓,反之开多仓。

DEF_TICKDATA(1,10); SETBIGVOL(50); SHE:=ASKBIGCOUNT; BHE:=BIDBIGCOUNT; SHE>=4&&RISING(10)=1,SK; BHE>=4&&RISING(10)=0,BK;

29

NEW<=BKPRICE-4*MINPRICE,SP; NEW>=SKPRICE+4*MINPRICE,BP; NEW>=BKPRICE+4*MINPRICE,SP; NEW<=SKPRICE-4*MINPRICE,BP; AUTOFILTER;

一些其他盘口概念的解释 :

多开:多头开仓 持仓量增加 多平:多头平仓 持仓量减少 换手:多空换手 持仓量不变 双开:多头开仓 空头开仓 持仓量增加 双平:多头平仓 空头平仓 持仓量减少 空开:空头开仓 持仓量增加 空平:空头平仓 持仓量减少

30

让我们来思考一个问题,这些盘口概念分别反映了市场上投资者的哪种心态和行为? 主动买:买开、卖平 主动卖:卖开、买平 增仓:持仓量的增减 现手:成交量

价格和数量反映了目前多空双方达成一致的均衡:

1、价格不变化或者变化很小,市场正处于横盘小幅震荡的走势 交易不活跃 2、价格在很大范围内上下变化,市场正处于剧烈震荡中 交易不活跃 3、价格不断升高,上涨行情,反之下跌行情 交易活跃 4、价格变化缓慢,缺乏动力 交易不活跃 5、价格不断跳动,有走出趋势行情的动力 交易活跃 6、价格迅速跳动,价格均速变大,价位连续,稳健趋势行情的特征,后期可能加速 7、价格迅速跳动,变化不连续,呈跳跃性,表示放量突破的行情

???? 更多TICK盘口函数

ASK1 取得TICK图该笔TICK的卖一价 ASK2 取得TICK图该笔TICK的卖二价 ASK3 取得TICK图该笔TICK的卖三价

31

ASK4 取得TICK图该笔TICK的卖四价 ASK5 取得TICK图该笔TICK的卖五价 ASK1VOL 取得TICK图该笔TICK的卖一量 ASK2VOL 取得TICK图该笔TICK的卖二量 ASK3VOL 取得TICK图该笔TICK的卖三量 ASK4VOL 取得TICK图该笔TICK的卖四量 ASK5VOL 取得TICK图该笔TICK的卖五量

BID1 取得TICK图该笔TICK的买一价 BID2 取得TICK图该笔TICK的买二价 BID3 取得TICK图该笔TICK的买三价 BID4 取得TICK图该笔TICK的买四价 BID5 取得TICK图该笔TICK的买五价 BID1VOL 取得TICK图该笔TICK的买一量 BID2VOL 取得TICK图该笔TICK的买二量 BID3VOL 取得TICK图该笔TICK的买三量 BID4VOL 取得TICK图该笔TICK的买四量 BID5VOL 取得TICK图该笔TICK的买五量

NEW 取得TICK图的最新价 TICK_OPI 取得TICK图的持仓量

TICK_SCALE 取得TICK图该笔TICK是否为主动买 TICK_VOL 取得TICK图的成交量

DEF_TICKDATA(Type,N) 定义五档TICK数据区 BKVOLUME 取得TICK图所定义数据区买开成交量的和 BPVOLUME 取得TICK图所定义数据区买平成交量的和 BIDVOL 取得TICK图所定义数据区主动买成交量的和 SKVOLUME 取得TICK图所定义数据区卖开成交量的和 SPVOLUME 取得TICK图所定义数据区卖平成交量的和 ASKVOL 取得TICK图所定义数据区主动卖成交量的和

SETBIGVOL 设置TICK图所定义数据区大单阀值

ASKBIGCOUNT 取得TICK图所定义数据区主动卖大单次数的和

32

ASKBIGTOTVOL 取得TICK图所定义数据区主动卖大单成交量的和 SKBIGCOUNT 取得TICK图所定义数据区卖开大单成交次数的和 SKBIGTOTVOL 取得TICK图所定义数据区卖开大单成交量的和 SPBIGCOUNT 取得TICK图所定义数据区卖平大单成交次数的和 SPBIGTOTVOL 取得TICK图所定义数据区卖平大单成交量的和 BIDBIGCOUNT 取得TICK图所定义数据区主动买大单次数的和 BIDBIGTOTVOL 取得TICK图所定义数据区主动买大单成交量的和 BKBIGCOUNT 取得TICK图所定义数据区买开大单成交次数的和 BKBIGTOTVOL 取得TICK图所定义数据区买开大单成交量的和 BPBIGCOUNT 取得TICK图所定义数据区买平大单成交次数的和 BPBIGTOTVOL 取得TICK图所定义数据区买平大单成交量的和 TICK盘口策略 关于成交量和持仓量 1、成交量代表市场活跃度

2、成交量/持仓量 代表投机度,投机度强一般波动性大 3、增仓、放量伴随大涨,代表相当强势 4、减仓、缩量伴随下跌,代表相当弱势 5、价量仓方向不统一,代表分歧和能量不均 关于单量

1、挂单量大的一方为强 2、主动成交的一方为强 3、撤单一方为弱

4、反复在同一价位成交表示争夺激烈,短期价格无方向,也可能是短期趋势可能反转 5、不断挂单、撤单表示不坚定,也可能是吸引成交 关于价格涨跌

1、匀速拉升或者匀速下跌容易导致大跳水或大反弹 2、阶梯上涨或者下跌,不易转向 3、不断加速易触板 4、不断减速需要修正走势 TICK盘口模型范例 范例1:

策略原理:日内走势出现逐笔连续上涨或者下跌的概率较小,当短暂的上涨或者下跌形成后,价

格极容易反向运行,连续6笔无主动卖,开多仓,反之开空仓。

DEF_TICKDATA(1,6);

33

SZD:=ASKVOL; BZD:=BIDVOL; SZD=0,SK; BZD=0,BK;

NEW>=BKPRICE+4*MINPRICE,SP; NEW<=SKPRICE-4*MINPRICE,BP; NEW<=BKPRICE-4*MINPRICE,SP; NEW>=SKPRICE+4*MINPRICE,BP; AUTOFILTER;

范例2:

策略原理:当tick图上,价格突破了一定时间中的高低点后形成短暂趋势,入场后固定止损止

盈或者时间出场。

M:=30; J:MA(NEW,M);

EVERY(NEW>J,10)&&NEW>HV(NEW,20)&&TIME<151450,SK; EVERY(NEWBKPRICE+0.8,SP; NEWSKPRICE+0.8,BP;

34

EVERY(NEW>=SKPRICE,40)&&BARSSK>40,BP; EVERY(NEW<=BKPRICE,40)&&BARSBK>40,SP; TIME>=151450,CLOSEOUT; AUTOFILTER;

范例3: MA1:MA(NEW,60); DEF_TICKDATA(0,10);

BHE:=BID1VOL+BID2VOL+BID3VOL; SHE:=ASK1VOL+ASK2VOL+ASK3VOL;

NEW>MA1&&NEW>HV(NEW,20)&&ASKVOLSHE*1.5,3),BK; NEWBIDVOL&&EVERY(BHE*1.5MA1,5),BP; EVERY(NEW

第二章 多模型组合回测

2.1 回测一篮子合约

如果你已经有了一个模型,想看一下它在那个合约上的表现更好一点,那么回测一篮子合约

35

将是你的不二选择。利用这个功能,我们可以将一个模型同时加载给不同的合约,以查看它在每个合约上的表现。

如下图所示是如何回测一篮子合约: 第一步:建立合约篮子

在这一步,我们要将打算回测的合约放在一个篮子里,统一保存起来,这样,稍后当我们加载模型的时候对该篮子加载即可同时加载到篮子中的每个合约上。

第二步:加载模型

在这一步,我们可以把想要测试的模型加载给合约篮子里的每一个合约。

36

第三步:查看测试结果

37

这是一个很实用的功能,特别是对于需要做模型筛选的用户,你可以很方便的找到与模型合适的合约,省去了一次一次加载的繁琐步骤。

2.2 多模型组合回测

很多投资者在寻找一种模型可分辨趋势行情和震荡行情,因为一个在趋势行情中表现不错的模型到了震荡行情可能损失惨重,甚至反盈为亏。而使用多模型组合可将震荡模型和趋势模型同时加载到一个合约中,当行情震荡时,震荡模型的盈利可冲抵趋势模型的亏损。而当趋势行情到来的时候,这种多模型组合可共振盈利。

下图可直观的揭示投资组合的优势。组合的形式起到了削峰填谷的作用。为的是追求资金曲线平滑稳定的增长,避免资金的大幅回撤所导致的交易风险。

38

如下图①-③所示是如何对组合策略进行测试:

39

相关常见问题解答

1、已经进行过测试的组合,能否保存起来以便于下一次直接调出?

答:可以,可通过下图所示的方法对当前组合进行保存。再次打开点击【打开现有组合文件】即

可。

2、为什么添加组合成员后“进度”中显示的是未计算?

答:这是由于在添加组合成员时没有勾选【添加后自动计算】;选中未计算的组合成员,点击下

方【更新】按钮即可,如下图:

3、组合成员的资金曲线颜色可修改么?

答:可修改,如下图所示是如何修改资金曲线颜色:

40

4、已经添加的组合成员如何修改合约参数?

答:选中要修改的组合成员,点击组合测试界面下方的【编辑】按钮,即可对组合成员参数进行

修改。

5、为什么组合测试界面的【回测】中,有左右两个纵坐标,分别代表什么?

答:左侧纵坐标为各策略组合后的资金曲线坐标,右侧纵坐标为各个策略的资金曲线坐标。 6、组合测试界面的【阶段总结】中,权益增长速度如何计算? 答:权益增长速度=(本期净利润-上期净利润)/本期期初权益 。 7、回撤贡献度得分越高越好么?

答:是的,回撤贡献度分数越高说明回撤小,贡献大。

贡献度分数算法:

(1)策略1和策略2每个时点上比较,回撤小的得2分,回撤大的得1分,总分就是每个

时点得分之和,比如在某一个时点上,策略1的回撤小,策略2的回撤大,那么策略1就得2分,策略2就得1分,此时总分是3分。

每个时点上都会计算得分,然后把策略1和策略2的得分分别加起来就是各自的得分。得分高说明策略的回撤小,贡献就大。

(2)回撤贡献度是绝对值得分,回撤比贡献度就是比例,就是每个策略各自的得分,比上所有策略加起来的总得分。

8、如何实现快速将同一模型加载至不同合约进行测试? 答:如下图所示,利用合约篮子功能可实现该想法。

(1)在组合测试界面点击菜单栏中的【合约篮子】—>【新建篮子】

41

(2)在弹出的窗口中选择选择一些要加载的合约。

(3)点击“合约篮子”中的【加载合约篮子】,在弹出窗口中设置一些选项,点击【加载】, 可实现快速对同一模型加载至不同合约进行测试。

9、如何实现快速将同一合约同一周期加载不同模型进行测试? 答:如下图所示,利用模型篮子功能可实现该想法。

(1)在组合测试界面点击菜单栏中的【模型篮子】—>【新建篮子】 (2)在弹出的窗口中选择选择一些要加载的模型。

(3)点击“模型篮子”中的【加载模型篮子】,在弹出窗口中设置一些选项,点击【加载】, 可实现快速对同一合约同一周期加载不同模型进行测试。

10、如何将回测的组合应用到实盘程序化中?

答:可以通过运行模组功能将不同的模型加载到不同合约上,这部分我们会在第七章做详细介绍。(点击查看链接)

2.3 段落式交易回测

在实际交易中,我们通常不会从一至终的不对资金做任何调整,常用的方法是将交易这一长期工作分割成以月、度或年为单位的不同段落,每个段落开始时赋予策略相同的初始资金,当前交易段落结束时对策略平仓。

例如,每月进行一次总结,盈利则将利润拿出使账户资金恢复到月初首次入金状态;亏损则对账户资金进行补充同样使之恢复到月初状态。软件中提供了一类函数可以对这种段落交易的方式进行回测,更具有实盘参考价值。

关键函数:WEEKTRADE/MONTHTRADE/QUARTERTRADE/YEARTRADE

42

WEEKTRADE:使用每周数据计算。 MONTHTRADE:使用每月数据计算。 QUARTERTRADE:使用每季度数据计算。 YEARTRADE:使用每年数据计算。

函数说明:这几个函数语法相同,我们以MONTHTRADE为例进行说明 模型中写入该函数,信号和资金每月重新初始化进行计算,与历史割裂。 注:

1、该函数不支持自定义N日、季、年周期,其他周期均支持。 2、回测报告中的出金/入金,为每月出金/入金的和。

3、模型中不能同时使用DAYTRADE1\\DAYTRADE\\WEEKTRADE\\MONTHTRADE\\QUARTERTRADE\\YEARTRADE

函数。

范例:段落式交易,每月第一个交易日资金和信号重新初始化

模型说明:初始资金100000,以月为周期进行交易,每月第一个交易日资金和信号重新初始化

在模型中加入MONTHTRADE函数来实现想法。

模型源码: HH:=HHV(HIGH,N); LL:=LLV(LOW,N);

HH1:=BARSLAST((HH > REF(HH,1))); LL1:=BARSLAST((LL < REF(LL,1))); HH1>LL1,SPK; HH1

CLOSEMINUTE<=1,CLOSEOUT;//收盘前一分钟,清仓。 AUTOFILTER;//过滤模型

MONTHTRADE;//使用每月数据计算

我们可以将上面编写好的源码加载到合约上进行回测,回测过程中软件会自动将每个交易阶段区分开来,在每月第一个交易日时重新初始化资金和信号,如下图所示,是回测报告的成交明细,通过该明细我们可以看出,每当新一月的交易日开始,权益都会变为我们所设定的100000。这样一来,及时是这种段落式交易的想法也可以实现历史数据回测了。

43

本文来源:https://www.bwwdw.com/article/ov0f.html

Top