趋势跟踪策略

趋势跟踪模型是基于K线图表计算的,可加载到K线图上查看具体的信号。趋势跟踪模型按照信号的执行顺序可以分为一开一平过滤模型和加减仓模型;从下单执行的时间间隔和信号计算精度上又可以分为收盘价模型和指令价模型两种。

一、一开一平过滤重复交易模型

趋势行情中一段大的上涨趋势是由一个个小的上涨行情组成的,但如果我们每个满足条件的点都交易的话,交易成本不断累加在一定程度上会削减利润,一开一平信号过滤模型可以过滤掉重复满足的条件,帮助投资者抓住完整的趋势形态,有效锁住盈利。

1、案例:利用过滤模型实现一开一平交易

如下图所示,多头排列启动上涨行情之后,多头状态一直存在,如果每个多头信号位置都买入,便会加大持仓成本,削减利润。

如下图,通过一开一平信号过滤模型,可以将中间重复的多头信号过滤掉,只在首次出现多头排列的上涨起始点入场,在价格下破均线开始回落时再出场,有效避免了反复交易,节约交易成本,把握住一波完整的趋势行情。

2、一开一平信号过滤模型编写规则

(1)模型中需要写入AUTOFILTER函数。

(2)一开一平信号过滤模型支持的指令:BK、BP、BPK、SK、SP、SPK、CLOSEOUT; 支持指令分组,不支持BK(5)等带手数的指令。如下图所示:

二、加减仓模型实现加仓、资金管理

一开一平信号过滤模型是开平对应的,开仓后下一个动作只能是平仓操作,可有时我们想实现加仓减仓等策略,显然一开一平信号过滤模型无法实现。加减仓模型开仓后可自由加减仓,实现更高级的资金管理策略。

1、案例1:利用加减仓模型实现波段突破加仓策略

下图是基于长短周期波段突破思想编写的策略模型,在行情有效突破周期指定价格时开仓入场,入场后继续判断行情,若行情继续向有利方向做有效突破,策略执行加仓动作,若行情向不利方向发展并满足出场条件,清仓出场。

如上图,是该波段突破加仓模型的信号效果,图中的指标线形是我们的突破判断标准,当行情有效突破时,软件便会自动开仓和加仓。

2、案例2:加减仓模型的实现资金管理策略

资金管理在交易中是一个非常重要的思想,我们常用控制资金使用率、按资金的固定百分比下单等方式来控制交易的风险。这些策略都可通过加减仓模型的编写来实现。

(1)控制资金使用率思想:

思路:在已有1手持仓的情况下,控制做多开仓的资金使用率不超过资金的30%;

编写方法:BKVOL >=1 && A && BARSBK > 1 && MONEYRATIO < 0.3,BK(1);

——其中A为开仓条件,红色为资金控制部分代码,MONEYRATIO表示资金使用率;

(2)按资金的固定百分比下单思想:

思路:在已经有1手持仓的情况下,每次加仓手数按照可用资金的20%计算;

编写方法:BUYVOL >=1 && A && BARSBK > 1,BK(MONEY*0.2/(C*MARGIN*D +FEE));

——其中A为开仓条件,红色为资金控制部分代码,MONEY表示模组资金余额;

注:
MONEY*0.2/(C*MARGIN*D +FEE)解析:用可用资金的百分之二十除以每一手开仓所需资金来计算下单手数;
——其中“每一手开仓所需资金”等于“(最新价*合约保证金比例*合约交易单位)+合约手续费”,D为合约的交易单位;

3、加减仓模型编写规则

(1)源码中不能有AUTOFILTER过滤模型关键字。

(2)不支持不带手数的开平仓指令(如,BK)和反手指令(如,BPK、SPK)。

(3)支持的指令BK(N)、BP(N)、SK(N)、SP(N)、SPK(N)、BPK(N)、CLOSEOUT;支持指令分组,如下图所示。

三、收盘价模型 -- k线走完下单

盘中价格反复波动,如果对行情判断不足,信号未确定就过早的入场,可能会造成信号消失,即使恢复了持仓也会因为反复的交易损失很多手续费。所以稳健型的交易者更倾向以确定的信号执行下单,减少信号消失成本。这种当一根K线走完,以K线最后一笔价格来确定信号并执行下单的模型即为收盘价模型,可以避免信号忽闪的问题。

1、案例1:K线走完确定信号的收盘价模型

如下图,是一个10分钟周期收盘价模型的执行过程。在14:38:50时,K线上就满足了开仓信号,但此时K线没有走完信号还未固定,所以不进行委托;当K线走完时信号固定,则在新K线刚形成时执行委托。

2、案例2:收盘价模型尾盘清仓

收盘价模型需要等到K线走完才能确定信号下单,那对于日内交易的投资者该如何及时在尾盘清仓,避免夜盘期间反向跳空呢?不必担心,软件中有专门的信号执行函数,可以设置K线提前N分钟走完,提前执行下单,收盘价模型中也能够及时出场。

关键字:CLOSEKLINE_MIN(TYPE,N);

TYPE=0,代表以小节或收盘时间为结束时间的K线提前N分钟走完,K线走完进行复核。

TYPE=1,代表以收盘时间为结束时间的K线提前N分钟走完,K线走完进行复核。

TYPE=2,代表每一根K线提前N分钟走完,K线走完进行复核。N是时间(分钟数)。

建立收盘前5分钟清仓的模型,部分源码如下:

CLOSEMINUTE <= 5,CLOSEOUT;---------------------------------//收盘前5分钟清仓

CLOSEKLINE_MIN(1,4);-----------------//设置收盘前最后一根K线提前4分钟走完

IDLE(CLOSEMINUTE<=5);--------------------------//限制收盘前5分钟内不再开仓

如下图,在收盘价模型中写入提前4分钟走完的语句,模型便会在收盘前4分钟提前执行信号下单,及时出场锁住当天利润。

3、收盘价模型编写规则

(1)模型中不含有CHECKSIG、CHECKSIG_MIN、MULTSIG、MULTSIG_MIN、PANZHONG_MIN等指定信号计算频率类函数的都是收盘价模型。

(2)收盘价模型和一开一平信号过滤模型、加减仓模型没有必然联系。支持一开一平的收盘价模型也支持加减仓的收盘价模型。

四、指令价模型 -- 出信号即时下单

收盘价模型在k线走完时委托,可能会错过盘中最佳的入场时机,尤其在大周期上交易时,会增加交易成本。而指令价模型可以满足模型条件时立刻下单,不错过一点利润。

1、案例1:CHECKSIG函数优化模型入场点

指令价模型可以在模型满足条件时立即下单,但与此同时也带来一个问题,盘中行情经常反复,下单后价格可能反向移动,出现下错单的情况。那么如何才能即抓住利润,又减少错单概率呢?CHECKSIG函数可以灵活设置信号的判断和委托方式,合理的优化模型进出场点位。

关键字:CHECKSIG(SIG,MODE1,TIME1,MODE2,TIME2,INTERVAL);设置信号确认与复核的指令价方式

1、当INTERVAL不为0时,INTERVAL数据时间间隔,每隔INTERVAL秒计算一次信号,SIG 为信号,MODE1为信号确认方式,TIME1信号确认时间乘数,MODE2信号复核方式,TIME2信号复核时间乘数。

2、当INTERVAL为0时,每笔TICK计算一次信号,SIG为信号,MODE1为信号确认方式,TIME1信号确认时间,MODE2信号复核方式,TIME2信号复核时间。

3、通过调整INTERVAL参数,模型可设置不同数据快照频率进行回测。

例:INTERVAL为10,豆粕合约开盘第一根K线21:00:09为第一次计算模型,21:00:19为第二次计算模型...

典型思路编写:

CHECKSIG(SIG,'A',0,'C',0,0);//出信号立即下单,不复核
CHECKSIG(SIG,'A',0,'D',0,0);//出信号立即下单,K线走完复核
CHECKSIG(SIG,'A',N,'D',0,0);//出信号N秒确认信号下单,K线走完复核,每笔tick计算一次信号
CHECKSIG(SIG,'A',N,'D',0,3);//出信号第3*N秒确认信号下单,K线走完复核,每3秒计算一次信号
CHECKSIG(SIG,'A',N,'C',0,0);//出信号N秒确认信号下单,不进行复核
CHECKSIG(SIG,'B',N,'D',0,0);//K线走完前N秒确认信号下单,K线走完复核
CHECKSIG(SIG,'B',N,'C',0,0);//K线走完前N秒确认信号下单,不复核
CHECKSIG(SIG,'B',0,'C',N,0);//K线走完确认信号下单,不进行复核
CHECKSIG(SIG,'B',0,'D',N,0);//K线走完确认信号下单,不进行复核
CHECKSIG(SIG,'B',0,'E',N,0);//K线走完确认信号下单,小节休息前N秒复核
CHECKSIG(SIG,'A',0,'F',10,0);//出信号立即下单,收盘前最后一根K线提前10秒进行复核

投资者都希望能以尽可能低的价位买入,以更高的价格卖出。我们可以使用CHECKSIG函数设置K线走完前10秒判断入场信号,K线走完后对信号复核,以减少信号成本;离场时采用出信号立即下单,确保即时出场。

如下图,截取了螺纹指数日线周期上,使用收盘价模型和指令价模型在2018年2月23日和2018年3月5日的交易效果。

下面图表统计了这笔交易的开平仓信息,进行对比,可见使用了CHECKSIG函数后,模型的入场点和出场点都得到优化,平仓盈利提高到2.5倍。

收盘价模型 加入CHECKSIG函数的指令价模型
开仓价格 3930 3927
平仓价格 3934 3937
平仓盈亏 40 100

2、案例2:MULTSIG函数实现一根K线多次交易

期货行情瞬息万变,经常会发生行情迅速拉升又极速反抽的情形,这样的秒杀行情使用收盘价模型交易,就算能够及时出场逃离也无法做到立马开仓抓住反抽行情。在模型中使用MULTSIG函数,可以实现一根K线上多笔交易,不错过任何一波交易机会。

关键字:MULTSIG(Sec1,Sec2,N,INTERVAL);设置一根k线多信号的指令价方式

1、当INTERVAL不为0时,INTERVAL为数据时间间隔,每隔INTERVAL秒计算一次信号,开仓信号在出信号后的第Sec1个数据时间间隔时下单不复核,平仓信号在出信号后的第Sec2个数据时间间隔下单不复核,一根K线上最大的信号个数为N。

例:INTERVAL为10,豆粕合约开盘第一根K线21:00:09为第一次计算模型,21:00:19为第二次计算模型...

2、当INTERVAL为0时,每笔TICK计算一次信号,开仓信号Sec1秒后下单不复核,平仓信号Sec2秒后下单不复核,一根K线上最大的信号个数为N。

例:Sec1为0,则为开仓信号出信号立即下单,不复核;如果Sec1为1,则为开仓信号出信号1秒后下单,不复核

3、通过调整INTERVAL参数,模型可设置不同数据快照频率进行回测。

典型思路编写:

MULTSIG(0,0,2,0);//出信号立即下单不复核,一根K线最多2个信号,每笔TICK计算一次信号

MULTSIG(0,0,2,3);//出信号立即下单不复核,一根K线最多2个信号,每隔3秒计算一次信号

MULTSIG(3,5,2,0);//开仓出信号3秒后下单,平仓出信号5秒下单不复核,一根K线最多2个信号

如下图,在收盘价模型中这根长上影线的位置我们只能做到出场止损,但是盘中一波极速上涨并反抽的行情我们是交易不到的,使用一根K线上多个信号的指令价模型改进后,在一根K线上可以进行多次交易,盘中波动的行情也能尽收囊中。

3、指令价模型编写规则

1.模型中需要写入CHECKSIG、CHECKSIG_MIN、MULTSIG、MULTSIG_MIN、PANZHONG_MIN函数来指定信号执行方式。

2.CHECKSIG、MULTSIG、MULTSIG_MIN、CHECKSIG_MIN、PANZHONG_MIN函数不能同时出现在一个模型中。

3.指令价模型和一开一平过滤模型、加减仓模型没有必然联系,支持一开一平的指令价模型,也支持加减仓的指令价模型。

相关常见问题解答

1、一开一平信号过滤模型在量化运行过程中的规则请参照下方链接

答:http://www.wenhua.com.cn/popwin/guolvmx2.htm

2、加减仓模型在量化运行过程中的规则请参照下方链接

答:http://www.wenhua.com.cn/popwin/feiguolvmx2.htm

3、一开一平信号过滤模型指令后面不能写手数,那么开平仓手数如何设置?

答:开仓信号:下单手数按照参数设置中的默认开仓手数执行(如下图所示)。

4、加减仓模型编写时需要注意的问题有哪些?

答:A、加仓模型中,加仓语句需要判断是否是第一次开仓
方法:可利用判断当前是否有持仓或判断上一个信号是否是相同信号的方法确定是否是第一次开仓。如,加仓条件&&BKVOL>0,BK(N);或者加仓条件&&ISLASTBK=1,BK(N);
B、减仓模型中,减仓语句需要判断当前是否有可平持仓
方法:可利用BKVOL⁄SKVOL这类函数来判断持仓情况。如,平仓条&&BKVOL>0,SP(BKVOL);

5、为什么加减仓模型编写时指令后面一定要有手数?

答:由于加减仓模型中可进行加仓,或者减仓,每笔交易的手数可能会不一样,所以需要具体指定。

6、为什么我的加减仓模型不加仓?

答:在加减仓模型运行时“一个指令行,在一次“开仓->平仓”交易过程中只发一次信号。 如果想让加减仓模型的开仓或平仓指令重复执行可在模型中加入TRADE_AGAIN函数。
例:CLOSE>OPEN,BK(1);
CLOSE<OPEN,SP(1);
TRADE_AGAIN(5);
注:有TRADE_AGAIN(N)函数的模型支持同一指令连续发,因此能够实现加减仓。

7、CHECKSIG_MIN和CHECKSIG函数有什么区别?

答:区别在于回测使用的数据不同,回测精度不同。
CHECKSIG_MIN、MULTSIG_MIN是逐分钟频率计算信号,计算速度快,计算精度略差。
CHECKSIG、MULTSIG函数是逐笔tick数据计算信号,计算精度高,计算速度略慢。
Ps:股票合约的信号执行方式,通过PANZHONG_MIN函数指定。

8、模型中条件A想要以收盘价方式执行,条件B想以指令价方式执行该如何实现?

答:一个模型只能是收盘价模型或者指令价模型,不同条件设置不同的执行方式可以使用REF函数调取上一根K线的状态来近似实现,比如:
REF(A,1),BK;//前一根K线满足A条件,立即下单
B,BK;//盘中满足B条件,立即下单
CHECKSIG_MIN(BK,'A',0,'C',0);//设置BK信号逐分钟计算,出信号立即下单不复核

9、信号复核是什么意思?

答:复核方式是指对已发出的信号进行检查,可以让交易策略的实现更加灵活。
指令价模型中如果策略设计思路不够严谨,可能会产生信号出现后再次消失的情况,称之为信号忽闪,即开错仓或者平错仓,这时可以使用信号复核进行恢复持仓。
软件中对消失信号的处理方式:
还没有成交时的信号消失处理 - 撤单
BK、SK信号消失处理 - 平仓
BPK、SPK信号消失处理 - 平仓+恢复建仓
BP、SP信号消失处理 - 恢复建仓