iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
永豐金融APIs

永豐金API之30天不中斷Q&A系列 第 14

Day14 - Shioaji X Backtesting -回測框架搭配API歷史資料

Hi,介紹了api的各種函數後,相信讀者一定很好奇,有了這些資料之後要怎麼回測啊?
畢竟在開始實單做程式交易之前,交易策略到底會賺錢還是賠錢,沒有回測真的不敢用啊!

目前主流的量化交易方式分成兩類:

  • 使用專業軟體
  • 自行開發

專業軟體以MultiCharts市占率最高,而外匯保證金的部分則有很多人使用MT5。
不過今天要介紹的是自行開發的部分,目前已有很多回測框架,讓大家不用從0開始,像是:

  • Backtrader
  • vn.py
  • QuantConnect
  • Zipline
  • PyAlgoTrade**

今天要介紹的是一款圖畫起來很漂亮的回測框架 - Backtesting。

首先用 pip install backtesting安裝,
安裝完後歷史數據的部分可以從我們的Shioaji抓,
標的我們就先以2330台積電為例,輸入完起訖日期後,把分K資料轉為日K並放到df裡。

import shioaji as sj
import pandas as pd

api = sj.Shioaji(backend='https', simulation=False)
#抓取2330台積電2020年到2021年9月的K線資料
kbars =api.kbars(contract=api.Contracts.Stocks['2330'], start = '2020-01-01', end = '2021-09-22' )
#轉成dataframe
df = pd.DataFrame({**kbars})
df.ts = pd.to_datetime(df.ts)

#分K轉成日K
df.set_index(df.ts,inplace=True)
df = df.resample('D').agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume':'sum'})
df.dropna(inplace=True)
df.head(5)

Out:

| ts                  |   Open |   High |   Low |   Close |   Volume |
|:--------------------|-------:|-------:|------:|--------:|---------:|
| 2020-01-02 00:00:00 |  332.5 |  339   | 332.5 |   339   |    31656 |
| 2020-01-03 00:00:00 |  344   |  345   | 335.5 |   339.5 |    41711 |
| 2020-01-06 00:00:00 |  333   |  334.5 | 332   |   332   |    44900 |
| 2020-01-07 00:00:00 |  332.5 |  333   | 326.5 |   329.5 |    50762 |
| 2020-01-08 00:00:00 |  325   |  333   | 325   |   329.5 |    37426 |

處理完資料後就可以來介紹backtesting拉,大家準備好了嗎?
下面先放一張圖給大家聞香一下,
圖的上方可以顯示出的淨值曲線變化、區間內每筆交易賺賠及進出場、
接下來幾篇會和大家介紹怎麼用backtesting來實做交易策略!


上一篇
Day13 - 如何用shioaji搭配Ta-Lib計算技術指標: 安裝篇
下一篇
Day15 - Shioaji X Backtesting -均線突破策略
系列文
永豐金API之30天不中斷Q&A26

尚未有邦友留言

立即登入留言