一.效果

二.实现
1.按bt轮转框架格式,每列都是标的代码,获取数据

2.回测
2.1添加策略进行回测
import bt
from bt_algos_extend import SelectTopK
signal = data.pct_change(20)
# signal.dropna(inplace=True)
all = []
for K in [
1,
]:
s = bt.Strategy(
"bt_创业成长+红利低波_动量轮转K={}".format(K),
[
SelectTopK(signal, K), # 先选最好的k个
bt.algos.WeighEqually(), # 等权
bt.algos.Rebalance(), # 重新平衡
],
)
all.append(s)
stras = [bt.Backtest(s, data) for s in all]
2.2也可以添加比较基线
for bench in ["000300.SH"]:
data = CSVDataloader.get([bench])
s = bt.Strategy(
bench,
[
bt.algos.RunOnce(), # 执行一次
bt.algos.SelectAll(), # 选择所有
bt.algos.WeighEqually(),
bt.algos.Rebalance(),
],
)
stra = bt.Backtest(s, data)
stras.append(stra)
res = bt.run(*stras)
3.获取回测数据进行分析
# 获取每日收益
returns = res['bt_创业成长+红利低波_动量轮转K=1'].returns
import empyrical
print("累计收益:", round(empyrical.cum_returns_final(returns), 3))
print("年化收益:", round(empyrical.annual_return(returns), 3))
print("最大回撤:", round(empyrical.max_drawdown(returns), 3))
print("夏普比", round(empyrical.sharpe_ratio(returns), 3))
print("卡玛比", round(empyrical.calmar_ratio(returns), 3))
import quantstats as qs
qs.reports.basic(returns)

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