akshare 布林通道策略
生活随笔
收集整理的這篇文章主要介紹了
akshare 布林通道策略
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import datetime
import pandas as pd
import backtrader as bt
import matplotlib.pyplot as plt
from datetime import datetime
import matplotlib
import akshare as ak
%matplotlib inline
class Boll_strategy(bt.Strategy):#自定義參數,每次買入1800手params=(('size',1800),)def __init__(self):self.dataclose=self.datas[0].closeself.order=Noneself.buyprice=Noneself.buycomm=None##使用自帶的indicators中自帶的函數計算出支撐線和壓力線,period設置周期,默認是20self.lines.top=bt.indicators.BollingerBands(self.datas[0],period=20).topself.lines.bot=bt.indicators.BollingerBands(self.datas[0],period=20).botdef next(self):if not self.position:if self.dataclose<=self.lines.bot[0]:#執行買入self.order=self.buy(size=self.params.size)else:if self.dataclose>=self.lines.top[0]:#執行賣出self.order=self.sell(size=self.params.size)# 利用 AKShare 獲取股票的后復權數據,這里只獲取前 6 列
stock_hfq_df = ak.stock_zh_a_hist(symbol="600309", adjust="hfq").iloc[:, :6]
# 處理字段命名,以符合 Backtrader 的要求
stock_hfq_df.columns = [
'date',
'open',
'close',
'high',
'low',
'volume',
]
# 把 date 作為日期索引,以符合 Backtrader 的要求
stock_hfq_df.index = pd.to_datetime(stock_hfq_df['date'])
start_date = datetime(1991, 4, 3) # 回測開始時間
end_date = datetime(2022, 6, 16) # 回測結束時間
data = bt.feeds.PandasData(dataname=stock_hfq_df, fromdate=start_date, todate=end_date) # 加載數據
# 初始化cerebro回測系統設置
cerebro=bt.Cerebro()
#將數據傳入回測系統
cerebro.adddata(data)
# 將交易策略加載到回測系統中
cerebro.addstrategy(Boll_strategy)
# 設置初始資本為10,000
startcash=1000000
cerebro.broker.setcash(startcash)
# 設置交易手續費為 0.25%
cerebro.broker.setcommission(commission=0.001)
#運行回測系統
cerebro.run()
#獲取回測結束后的總資金
portvalue=cerebro.broker.getvalue()
pnl=portvalue-startcash
#打印結果
print(f'總資金: {round(portvalue,2)}')
#最后可視化
cerebro.plot()
總結
以上是生活随笔為你收集整理的akshare 布林通道策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LIMIT M,N分页性能优化方案
- 下一篇: 实体间的联系