量化投資學習筆記04——回測實盤策略

首先來個免責聲明:本文所有策略均不構成投資建議!
這次我們來回測一下一個實盤策略看看。這是我自己的實盤策略,執行了一年半了:每個月定投三次,每次1000元。定投標的有兩個:300ETF(510300)和納指ETF(513100)。資金平分。我從去年2月開始實盤執行該策略。實盤之前並沒有執行很完善的回測,只是下載了兩個etf的歷史數據,然後計算了二者的相關係數,發現二者相關性很低。想着可以互相對衝。這就是這個策略的基本邏輯。執行的過程中很不嚴格,開始時是每月定投一次,買的時候也不是嚴格的平分資金,最後,當A股漲了一段時間後開始回撤,我有點擔心了,分批"止盈"了300etf持倉的3/4,只留了1/4。定投繼續。事實證明我是跑早了。這也是我學量化投資的原因之一。

300ETF的收益率計算有問題,可能沒把我止盈退出的錢計算在內。
現在開始用pyalgotrade框架來回測這個策略,用上次封裝好的類。有一個問題是之前的策略包括文檔教程裏的策略都是隻有一個標的物,而我這次要回測的策略有兩個標的。
搜了一下,找到答案(https://stackoverflow.com/questions/40728678/pyalgotrade-multiple-tickers
https://groups.google.com/forum/m/#!topic/pyalgotrade/s45Dy39vimk
後一個可能需要技術手段)

 def onBars(self, bars):
     # 每八個交易日交易一次
     if self.__t < 8:
      self.__t += 1
      return
     self.__t = 0
     brk = self.getBroker()
     shares = 100
     # 策略買入
     if len(self.__instrument) == 2:
      for inst in self.__instrument:
       price = bars[inst].getPrice()
       if brk.getCash() < price*shares:
        self.info("現金不足")
        return
       self.__position = self.enterLong(inst, shares, True)
       self.__cost += brk.getCommission().calculate(brk, price, shares)

然後在主程序裏這麼創建並運行回測

if __name__ == '__main__':
    bt = Backtesting(["510300", "513100"], 2018, 2019, MyStrategy, cash = 100000)
    strategy = bt.getStrategy()
    strategy[0].run()
    strategy[1].run()
    result = bt.getResult()
    bt.outputResult()
    print("期末總資產%.2f" % strategy[0].getResult())
    bt.drawResult("test.png")

回測結果


還是不放心,再到聚寬裏回測一下看看

def initialize(context):
    run_daily(period,time='every_bar')
    g.security = ['510300.XSHG','513100.XSHG']
    set_option('use_real_price', True)
    set_order_cost(OrderCost(open_tax=0, close_tax=0.000, open_commission=0.0003, close_commission=0.0003,         close_today_commission=0, min_commission=0), type='stock')
    set_slippage(FixedSlippage(0.0))
    set_benchmark("510300.XSHG")
    #set_benchmark("513100.XSHG")
    g.t = 0
def period(context):
    if g.t >= 8:
        for stock in g.security:
            print(stock)
        order(stock, 100)
        g.t = 0
    g.t = g.t + 1

回測結果:

可以看到策略收益率,最大回測等指標還是近似的,但是夏普比例,阿爾法、貝塔,信息比率等數據就差別很大了。咋辦?再找本書用上面的原始數據回測一下看看吧。
本次程序的代碼: https://github.com/zwdnet/MyQuant/tree/master/04

我發文章的三個地方,歡迎大家在朋友圈等地方分享,歡迎點“在看”。
我的個人博客地址:https://zwdnet.github.io
我的知乎文章首頁: https://www.zhihu.com/people/zhao-you-min/posts
我的博客園博客地址: https://www.cnblogs.com/zwdnet/
我的微信個人訂閱號:趙瑜敏的口腔醫學學習園地

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