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相對陽春一些,但是整體語法也更為簡單好上手,我們下集會在做更進一步的介紹。
您好 ,我安裝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?
因為您的機器並沒有安裝git或是沒有把git放在環境路徑中
可以先下載git並安裝,然後設置環境路徑
可參考這邊