交易策略 - Backtrader

以下内容皆参考 Backtrader 官网

之前介绍了 shioaji 如何取得资料, 下单,也介绍了如何利用 Line 和 api 互动,接下来要介绍的是程序交易中,很重要的一块交易策略,也就是我们订下一个买入和卖出的时间点,譬如说 5 日均线突破 20 日均线买进,5 日均线跌破 20 日均线时卖出,这就是一个策略,一个策略好坏怎麽判定,可以利用历史资料来做回策,所谓的回测,就是使用历史资料,搭配自己的策略去进行操作,这样就可以知道自己的策略历史的投资报酬率是多少,虽然是历史资料,不过还是挺有参考价值的。

本次要介绍的工具就是 Backtrader,是一套 python 平台的交易策略工具,配合 shioaji 可以取得历史资料来进行我们交易策略的评估,今天就先介绍怎麽利用 shioaji 来取得需要的资料

  • 安装 backtrader, matplotlib
pip install backtrader matplotlib==3.2.2

matplotlib 比较新的版本在画图的时候会有问题,所以指定 3.2.2 版安装

  • 登入 shioaji
import shioaji as sj
api = sj.Shioaji()
api.login(person_id="帐号", passwd="密码")
  • 取得历史资料
stock2330 = api.Contracts.Stocks["2330"]
# 台积电 2020 年的历史资料
kbar = api.kbars(stock2330, '2020-01-01', '2020-12-31')
  • 转换成 panda 的 dataframe
from datetime import datetime
dts = list(map(lambda x:datetime.utcfromtimestamp(x/10**9), kbar.ts))
df = pd.DataFrame(
    {
        "open": pd.Series(kbar.Open),
        "high": pd.Series(kbar.High),
        "low": pd.Series(kbar.Low),
        "close": pd.Series(kbar.Close),
        "volume": pd.Series(kbar.Volume),
    }
)

df.index = pd.Index(dts)

  • backtracder 引用资料
import backtrader as bt

# 这二行是 jupyter notebook 要画图使用,如果不是用 jupyter notebook 或是没有画图的需求可以不用
import matplotlib.pyplot as plt
%matplotlib inline

cerebro = bt.Cerebro(stdstats=False)

# 引用一个空的策略
cerebro.addstrategy(bt.Strategy)

data = bt.feeds.PandasData(
    # Panda.DataFrame 变数名称
    dataname = df,
    # 因为 kbar 取得的资料是分钟为单位,如果是用其它的资料,可以自己改
    timeframe = bt.TimeFrame.Minutes 
)

# 因为汇入的资料是分钟,我们希望是用每日的资料,所以这边转成日
cerebro.resampledata(data, timeframe=bt.TimeFrame.Days, compression = 1)

# matplot 设定 (如果不是在 jupyter notebook 这一段可以省)
plt.rcParams["figure.figsize"] = [15, 12] # inch
plt.rcParams.update({'font.size': 12})

# iplot = False 是 jupyter notebook 用的
create.plot(style="bar", iplot=False)

这边就简单介绍怎麽将 shioaji 的资料汇入到 Backtrader 里,明天再继续我们的第一个策略


<<:  试着掌握潜在客户需求

>>:  找LeetCode上简单的题目来撑过30天啦(DAY18)

Day 13 运算宝石:【Lab】EC2储存资源 EBS Volume 建立与使用 (下)

今天,我们继续【Lab】EC2储存资源 EBS Volume 建立与使用下半部分。 连进 EC2 ...

<Day21> Snapshots — 取得多档股票最新资讯

● 这章会示范如何用Snapshot取得股票最新资讯 Snapshots 快照 "Snap...

ThinkPHP V5.1 专案创建

甚麽是ThinkPHP? ThinkPHP是大陆人王栋2006年开发的轻量级PHP MVC框架,20...

选择具有 GPU 的 EC2 并完成配置-Day 02

选择具有 GPU 的 EC2 并完成配置-Day 02 需要配置一台电脑来处理接下来所有的服务,因为...

数据分析的好夥伴 - Python基础:物件导向(下)

前面我们有说过,在Python的世界中,万物皆物件。但物件只是这个世界的最小单位而已,接下来让我们认...