布林带止盈止损策略改进

万维钢的《高手》里提到了《算法之美 指导工作与生活的算法》这本书,里面提到了诸如“什么时候开始谈女朋友”、“看房看到什么时候才开始决定买”等择时策略问题,数学家经过严密的推理计算得到了37%这个数字,也就是在给定的时间段内,以37%作为分隔点,前37%的时间作为观察,过了这个时间点就该做决策了。
那么联想到量化策略,我们什么时候止盈止损不也是同样的问题吗?
显然我们不能简单把37%作为止盈止损点,我的想法是把每次开仓后最大利润的37%(或者1-37%)作为止盈点,止损仍然是布林带的中轨。
核心代码如下:

info_dict = {'pre_signal': 0, 'open_price': 0, 'profit': 0}

# 计算当前利润
df.at[i, 'profit'] = df.at[i, 'close'] - info_dict['open_price']
# 找到利润最大值并替换字典值
if df.at[i, 'profit'] > info_dict['profit']:
    info_dict['profit'] = df.at[i, 'profit']

# 当本周期有平多仓信号,或者需要止盈止损
# 止盈点为当前收盘价小于最大利润的37%点位
condition1 = df.at[i, 'profit'] > 0
condition2 = df.at[i, 'profit'] < info_dict['profit']
condition3 = df.at[i, 'close'] < (info_dict['profit'] * 0.37 + info_dict['open_price'])
condition = condition1 & condition2 & condition3

if (df.at[i, 'signal_long'] == 0) or condition:
    df.at[i, 'signal'] = 0  # 将真实信号设置为0
    # 重置相关信息
    info_dict = {'pre_signal': 0, 'open_price': 0, 'profit': 0}

对比简单布林带策略的回测结果,发现只有XRP的表现最好,回测数据为Bitfinex从2017年5月20日至2019年7月31日的XRP/USD交易对:
简单布林带30分钟K线回测结果:"[550, 2.0]",1.0,13.020978994861938
此策略回测结果:"[650, 4.5]",1.0,15.271091957919307

简单布林带1小时K线回测结果:"[250, 4.0]",1.0,11.86845895898633
此策略回测结果:"[250, 3.5]",1.0,20.528533025681803

对其它币种来说,BCH和BSV的回测结果略有提高,回测数据为Bitfinex从2018年11月13日至2019年7月31日的BCH/USD、BSV/USD交易对,剩下的币种回测结果基本比简单布林带策略还要差得多,这引出两个问题:

  1. 是不是在追求单笔交易收益后,大行情抓不住?
  2. 是不是止盈止损策略适合震荡行情或者震荡多的币种?

先不考虑上述问题,将37%改成(20%,80%)范围遍历,结果如下:
BCH 15分钟:"[450, 3.0, 0.3]”,1.0,0.3,7.8139314738945815
BSV 1小时:"[800, 1.5, 0.4]",1.0,0.4,3.3144425021985353
BTC 1小时:"[700, 1.5, 0.2]",1.0,0.2,19.07141784696794
DASH 1小时:"[550, 1.5, 0.4]",1.0,0.4,6.313149688177662
EOS 1小时:"[950, 0.5, 0.2]",1.0,0.2,71.07926848532772
ETC 1小时:"[950, 1.5, 0.4]",1.0,0.4,11.392449813728463
ETH 30分钟:"[450, 1.5, 0.2]",1.0,0.2,12.198778802528139
LTC 1小时:"[600, 3.0, 0.4]",1.0,0.4,22.30675663309639
NEO 15分钟:"[450, 3.5, 0.8]",1.0,0.8,3.045600675225343
OMG 15分钟:"[800, 2.5, 0.2]",1.0,0.2,7.118352066554033
QTUM 1小时:"[350, 1.5, 0.2]",1.0,0.2,7.355790185437384
XMR 1小时:"[850, 2.0, 0.2]",1.0,0.2,5.754729568997898
XRP 1小时:"[250, 3.5, 0.4]",1.0,0.4,21.670168180676765
ZEC 1小时:"[700, 1.5, 0.2]",1.0,0.2,5.86152947574348

简单布林带回测结果:
BCH 15分钟:"[950, 2.0]",1.0,4.548056980493423
BSV 1小时:"[750, 1.0]",1.0,2.4428266310284905
BTC 1小时:"[500, 0.5]",1.0,19.19686781323508
DASH 1小时:"[150, 2.5]",1.0,30.51202416576995
EOS 1小时:"[750, 2.0]",1.0,104.33355263999118
ETC 1小时:"[700, 4.5]",1.0,17.230519477228864
ETH 30分钟:"[300, 1.5]",1.0,16.251101335487025
LTC 1小时:"[650, 3.0]",1.0,41.994913026010295
NEO 15分钟:"[950, 2.0]",1.0,7.509372549944163
OMG 15分钟:"[700, 2.5]",1.0,19.02156117250065
QTUM 1小时:"[650, 1.0]",1.0,9.577289343702825
XMR 1小时:"[150, 2.5]",1.0,13.031009898772105
XRP 1小时:"[250, 4.0]",1.0,11.86845895898633
ZEC 1小时:"[300, 1.0]",1.0,37.88666173129326

你可能感兴趣的:(布林带止盈止损策略改进)