一.效果


2.年化收益率不同解释
2.1 empyrical计算年化逻辑

2.2quantstats years不是len(returns)交易日计算的,所以这个years会偏大,所以years当分母算出来的res就会偏小

二.实现
1.下载df数据

2.定义交易规则,backtrader当前用个是下标[0]
当20日收益大于0.08买入,小于0时卖出
class roc_trend(bt.Strategy):
# 参数定义
params = dict(
period=20, # 动量周期
)
def __init__(self):
self.roc = bt.indicators.ROC(self.data, period=self.p.period)
def next(self):
if not self.position: # 如果没有持仓
if self.roc[0] > 0.08: # if fast crosses slow to the upside
self.order_target_percent(self.data, 1.0) # 全仓买入
# self.buy() # enter long
elif self.roc[0] < 0: # in the market & cross to the downside
self.close() # 全仓卖出
3.绑定大脑和数据进行回测,
cerebro = bt.Cerebro()
cerebro.broker.setcash(100000.0)
cerebro.addanalyzer(bt.analyzers.PyFolio, _name="pyfolio")
data = bt.feeds.PandasData(dataname=df)
cerebro.adddata(data)
print("初始资金: %.2f" % cerebro.broker.getvalue())
cerebro.addstrategy(roc_trend)
strats = cerebro.run()
print("期末资金: %.2f" % cerebro.broker.getvalue())
4.按如上方式绑定pyfolio,可以查看分析数据
strat0 = strats[0]
pyfolio = strat0.analyzers.getbyname('pyfolio')
returns, positions, transactions, gross_lev = pyfolio.get_pf_items()
4.1 empyrical分析

4.2quantstats分析
import quantstats as qs
qs.reports.basic(returns)

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/268136
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!