在策略中加止损,应该选择哪种方式比较好?

2023年7月28日11:13:09186

不同的交易策略对于不同的市场趋势以及不同标的股票组合得到的收益都是不同的,我们不能保证使用交易策略一定能够获得更多盈利。相反的,策略使用不当可能反盈为亏或加大亏损幅度。因此任何投资策略都必须具备风险控制的基本措施,即进行止盈和止损,在降低风险的前提下获取最大收益。

先看一个例子。。。

以移动均线交叉趋势为例,在上一篇文章中具体说过这个策略,当发生金叉买入信号时,系统首先对已经持有的空头仓位进行平仓,然后再建立多头仓位,相反,当发生死叉卖出信号时,对多头仓位进行平仓,然后建立空头头寸。

这个策略本身已经隐含了止损的功能,但是当价格波动大的时候,不能及时止损,而一个好的程序化交易策略系统,不要将风险控制寄希望于隐含止损策略,而应该建立专门的止损策略。

01固定限额止损

下面介绍一个固定限额止损的策略。

固定限额止损策略就是根据固定的止损限额确定止损点位,当市场价格超越改价位时即进行平仓止损的操作。在移动均线系统策略中加入止损代码如下:

#==================================止损========== 
       for i in ContextInfo.ZS.keys():
            if ContextInfo.ZS[i]*0.97> h[i][-1]:
                order_target_value(i,0,ContextInfo,ContextInfo.accID)
                print("止损",i)

2016年至今,以5只权重股构建股票池,策略回测绩效如下:

在策略中加止损,应该选择哪种方式比较好?

沪深300指数基准净值1.231,策略净值2.375,年化收益12.81%,夏普比列0.72,最大回测24.13%,优于不加止损的策略。

02不变价差跟踪止损策略

下面介绍一种限价止损的例子。

跟踪止损就是止损点随着价格变动而调整,跟踪价格变化的止损策略。不变价差跟踪止损策略是指在止损价格跟踪市场价格调整的过程中,其止损价差是不变的,其止损原理如下图所示:

在策略中加止损,应该选择哪种方式比较好?

我们在原始策略中加入不变价差止损代码:

#==================止损==================
        for i in ContextInfo.ZS.keys():
            if (ContextInfo.ZS[i]-pc*0.03)> h[i][-1]: 
               order_target_value(i,0,ContextInfo,ContextInfo.accID)
                print("止损",i)

我们按照同样的时间长度对策略回测,不变价差策略回测绩效曲线如下图所示:

在策略中加止损,应该选择哪种方式比较好?

2016年至今,不变价差跟踪止损策略年化收益10.86,累计净值2.10,夏普比例0.59,最大回撤22.29%。对比发现采用不变价差跟踪止损后策略收益低于固定限额止损策略,是因为随着价格的上涨,股票价格振幅也趋向于增大,此时采用不变的价差进行跟踪止损,会导致平仓量增加,原本的止损策略反而变成了止盈,因此我们可以把振幅因素加进去,采用可变价差跟踪止损策略对原始策略优化。

03可变价差跟踪止损

下面介绍一个用可变价差跟踪止损的列子。

在第二个案例中用不变价差跟踪止损,在交易中不同时刻的股价波动幅度是不同,止损价差在操作中比较难确定。止损价差设置的太小容易被市场波动震出市场;止损价差太大,则损失又会比较大。如果能够将止损价差与市场波动联系起来,当市场波动高时,止损价差相应扩大,当市场波动较低时,使用较小的止损价差。

一个比较好的方法,就是利用ATR(市场真实波动均值)将止损价差与市场波动性联系起来。

设置ATR参数的一个原则:如果希望止损点与市场高点的距离变化不要过于剧烈,可以使用长期ATR;如果希望止损点与市场高点间的距离更好的反应市场的变化,可以使用短期ATR。

在策略中加止损,应该选择哪种方式比较好?

我们在策略中同时计算出短期与长期的ATR,然后选择较大的ATR值,这样我们的止损点就不会太紧。这个方法能让我们的在市场波动较高的时候迅速远离市场高点,同时又不会让我们在市场波动变小时被无畏的止损出局。利用ATR可变价差止损代码如下:

#==================止损==================
    for i in ContextInfo.ZS.keys():
        HL = high[i][-1]-low[i][-1]
        HC = high[i][-1]-close[i][-2]
        CL = close[i][-2]-low[i][-1]
        ContextInfo.val_TrueRange.append(max(HL,HC,CL))
        ATR1 = pd.Series(ContextInfo.val_TrueRange[-21:-1]).mean()
        ATR2 = pd.Series(ContextInfo.val_TrueRange[-5:-1]).mean()
        ATR = max(ATR1,ATR2)        #print(ATR)
        if (ContextInfo.ZS[i]-8*ATR) > close[i][-1]:
            order_target_value(i,0,ContextInfo,ContextInfo.accID)
            print("止损",i)

我们对同样组合进行回测,ATR可变价差策略2016年至今的绩效曲线如下图所示:

在策略中加止损,应该选择哪种方式比较好?

ATR价差止损策略年化收益12%,单位净值2.26,夏普比例0.65,最大回撤24.41%,整体是优于不变价差止损策略的。

最后总结以下,首先策略加入止损是必要的,止损策略收益和波动性要优于不加止损的策略,止损降低了组合的波动性,也提高了组合的稳定性。其次简单的固定限额止损就可以了,如果标的的波动性比较大,可以选择用ATR止损。

  • 特别声明:本文由互联网用户自行发布,仅供参考,不作为投资建议。股市有风险,炒股需谨慎!
  • 本文链接:https://www.gpboke.com/31133.html