布林帶止盈止損策略改進

布林帶止盈止損策略改進

萬維鋼的《高手》裏提到了《算法之美 指導工作與生活的算法》這本書,裏面提到了諸如“什麼時候開始談女朋友”、“看房看到什麼時候纔開始決定買”等擇時策略問題,數學家經過嚴密的推理計算得到了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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章