bt_大小盘_动量折时_动量轮动年化202最大回撤26

一.效果

bt_大小盘_动量折时_动量轮动年化202最大回撤26

二.实现

1.获取数据

bt_大小盘_动量折时_动量轮动年化202最大回撤26

2.设置排除因子,排序因子 ,回测

import bt
from bt_algos_extend import SelectTopK
# 1.排除因子 大于0.02买入,小于0卖出
factor = data.pct_change(20)  # 20天涨跌幅
signal = np.where(factor > 0.02, 1, np.NaN)
signal = np.where(factor < 0, 0, signal)
signal = pd.DataFrame(signal, data.index, columns=factor.columns)
signal = signal.ffill()
signal = signal.fillna(0)
# 2.排序因子 动量因子
roc = data.pct_change(20)  # 20天涨跌幅
all = []
for K in [
    1,
]:
    s = bt.Strategy(
        "{}K={}".format(title, K),
        [
            bt.algos.RunDaily(),
            bt.algos.SelectWhere(signal),
            SelectTopK(roc, K),  # 涨幅最好选前K个
            bt.algos.WeighEqually(),
            bt.algos.Rebalance(),
        ],
    )
    all.append(s)
stras = [bt.Backtest(s, data) for s in all]
for bench in symbols:
    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.回测数据分析

# 获取每日收益
s_name = title + "K=1"
returns = res[s_name].returns
res.display_monthly_returns(s_name)
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)

bt_大小盘_动量折时_动量轮动年化202最大回撤26

bt_大小盘_动量折时_动量轮动年化202最大回撤26

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

(0)
股市刺客的头像股市刺客
上一篇 1小时前
下一篇 1小时前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注