以下内容皆参考 Backtrader 官网
之前介绍了 shioaji 如何取得资料, 下单,也介绍了如何利用 Line 和 api 互动,接下来要介绍的是程序交易中,很重要的一块交易策略,也就是我们订下一个买入和卖出的时间点,譬如说 5 日均线突破 20 日均线买进,5 日均线跌破 20 日均线时卖出,这就是一个策略,一个策略好坏怎麽判定,可以利用历史资料来做回策,所谓的回测,就是使用历史资料,搭配自己的策略去进行操作,这样就可以知道自己的策略历史的投资报酬率是多少,虽然是历史资料,不过还是挺有参考价值的。
本次要介绍的工具就是 Backtrader,是一套 python 平台的交易策略工具,配合 shioaji 可以取得历史资料来进行我们交易策略的评估,今天就先介绍怎麽利用 shioaji 来取得需要的资料
pip install backtrader matplotlib==3.2.2
matplotlib 比较新的版本在画图的时候会有问题,所以指定 3.2.2 版安装
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')
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)
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)
今天,我们继续【Lab】EC2储存资源 EBS Volume 建立与使用下半部分。 连进 EC2 ...
● 这章会示范如何用Snapshot取得股票最新资讯 Snapshots 快照 "Snap...
甚麽是ThinkPHP? ThinkPHP是大陆人王栋2006年开发的轻量级PHP MVC框架,20...
选择具有 GPU 的 EC2 并完成配置-Day 02 需要配置一台电脑来处理接下来所有的服务,因为...
前面我们有说过,在Python的世界中,万物皆物件。但物件只是这个世界的最小单位而已,接下来让我们认...