初學者的Python金融分析日記 EP7-用pybacktest來做均線策略回測

pybacktest框架介紹-MA策略回測

pybacktest是一個基於pandas的vectorized回測框架,這個框架可能不太適合更專業的回測需求,但剛好適合我們練習需求,讓我們看看怎麼用pybacktest來回測一個簡單的MA策略。

MA策略

主要的想法是,我們計算兩個移動平均線,一條是長線,用來捕捉長期是,一條是短線,用來捕捉短期趨勢,當短線從下方突破長線則代表短期向上動能強,則我們買進,而短線從上方突破,則我們賣出。

我們的第一步仍然是載入資料庫以及整理資料

#載入套件庫與讀入資料
import pandas as pd
import matplotlib.pyplot as plt
import sqlite3

db = sqlite3.connect('TWStock_2')
tsmc = pd.read_sql(con=db,sql='SELECT * FROM "2330"')

整理資料

根據官方教學,這邊 pybacktest預設接受pandas.DataFrame格式,然後索引值為時間,columns則為 O,H,L,C,所以我們把格式整理為需要的形式。

#清理資料
#我們需要成交股數、開盤價、最高價、最低價、收盤價的資料
#並使用Date當作我們的索引值

tsmc.index = pd.to_datetime(tsmc['Date'])
tsmc = tsmc[['開盤價','最高價','最低價','收盤價']]
tsmc.columns = ['O','H','L','C']
cols = tsmc.columns
tsmc[cols] = tsmc[cols].apply(pd.to_numeric, errors='coerce')

接下來我們載入pybacktest

#載入pybacktest

import pybacktest   

pybacktest是基於一串交易訊號序列進行回測計算,我們只要把回測訊號算出來就可以進行回測了。

short_ma = 50
long_ma = 200

short_mavg = tsmc['C'].rolling(short_ma).mean()
long_mavg = tsmc['C'].rolling(long_ma).mean()

buy=cover = (short_mavg > long_mavg) & (short_mavg.shift() < long_mavg.shift()) # ma cross up
sell= short = (short_mavg < long_mavg) & (short_mavg.shift() > long_mavg.shift()) # ma cross down

在這邊,pybacktest任一個特殊的變數名ohlc當作他的bar價格資料,所以我命名ohlc = tsmc.copy()

ohlc = tsmc.copy()

pybacktest.Backtest的第一個變數填入我們需要用來計算的信號以及價格資料,接受的資料格式是字典或是DataFrame,這邊我們使用loacls()將所有命名過的變數丟進去。

bt = pybacktest.Backtest(locals(), 'ma_cross')  

pybacktest在呼叫屬性才會進行計算,我們可以呼叫的屬性有下列
[‘dataobj’, ‘default_price’, ‘eqplot’, ‘equity’, ‘name’, ‘ohlc’, ‘plot_equity’, ‘plot_trades’, ‘positions’, ‘prices’, ‘report’, ‘run_time’, ‘signals’, ‘sigplot’, ‘stats’, ‘summary’, ‘trade_price’, ‘trades’, ‘trdplot’]

舉例來說,呼叫trade後的結果

小結

這邊只是簡單介紹如何使用pybacktest來進行回測分析,感覺相較於zipline,pybacktest相對陽春一些,但是整體語法也更為簡單好上手,我們下集會在做更進一步的介紹。

Share

2 thoughts on “初學者的Python金融分析日記 EP7-用pybacktest來做均線策略回測

  1. 您好 ,我安裝pybacktest 出現以下訊息
    可以向您請教是什麼原因,如何解決麼? 謝謝

    (base) PS C:\Users\Gary> pip install git+https://github.com/ematvey/pybacktest.git
    Collecting git+https://github.com/ematvey/pybacktest.git
    Cloning https://github.com/ematvey/pybacktest.git to c:\users\gary\appdata\local\temp\pip-req-build-5a6exfsw
    Running command git clone -q https://github.com/ematvey/pybacktest.git ‘C:\Users\Gary\AppData\Local\Temp\pip-req-build-5a6exfsw’
    ERROR: Error [WinError 2] 系統找不到指定的檔案。 while executing command git clone -q https://github.com/ematvey/pybacktest.git ‘C:\Users\Gary\AppData\Local\Temp\pip-req-build-5a6exfsw’
    ERROR: Cannot find command ‘git’ – do you have ‘git’ installed and in your PATH?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *