一.效果



二.实现
1.获取数据

2.添加策略回测,选择20日涨幅最好的标的
import bt
from bt_algos_extend import SelectTopK
signal = data.pct_change(20) # 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]
for bench in ["000300.SH", "510300.SH", "513100.SH", "518880.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, name=bench)
stras.append(stra)
res = bt.run(*stras)
3.回测数据分析
# 获取每日收益
returns = res["bt_全球大类资产_动量轮转K=1"].returns
res.display_monthly_returns('bt_全球大类资产_动量轮转K=1')
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/281596
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!