原创内容第954篇,专注量化投资,AGI和智能体落地、个人成长与财富自由。

对于轮动策略,bt框架是非常合适的,还有风险平价这样的策略,也是非常之方便,前面几篇文章咱们演示过。

不过,像定投,海龟这样需要精细化仓位管理,以及实盘,回测一体的话,bt框架就心有余而力不足了,传统量化框架里,backtrader还是最为成熟的。

今天的策略,给出动量策略在backtrader里的实现,大家可以与bt框架做一下对比,

图片

# 在Jupyter Notebook中使用backtrader和pyfolio进行高级分析import backtrader as btimport pandas as pdimport numpy as np
import pyfolio as pf
%matplotlib inline

import backtrader as btimport pandas as pd
class RocStrategy(bt.Strategy):    params = (        ('roc_period', 20),   # ROC计算周期        ('buy_threshold', 0.08),  # 买入阈值        ('sell_threshold', 0.0),  # 卖出阈值    )
    def __init__(self):        self.roc = bt.indicators.RateOfChange(self.data.close, period=self.params.roc_period)        self.order = None
    def next(self):        # 取消前一个未完成订单        if self.order:            self.cancel(self.order)            self.order = None
        # 没有持仓且ROC突破买入阈值        if not self.position:            if self.roc[0] > self.params.buy_threshold:                # 计算可用资金可买数量                size = int(self.broker.getcash()*0.98 / self.data.close[0])                if size > 0:                    self.order = self.buy(size=size)                    #print(f'{self.datetime.date()}: BUY {size} shares at {self.data.close[0]:.2f}')
        # 有持仓且ROC跌破卖出阈值        else:            if self.roc[0] < self.params.sell_threshold:                self.order = self.sell(size=self.position.size)                #print(f'{self.datetime.date()}: SELL {self.position.size} shares at {self.data.close[0]:.2f}')
# 设置回测cerebro = bt.Cerebro()cerebro.addstrategy(RocStrategy)

cerebro.adddata(data)cerebro.broker.setcash(100000.0)  # 设置初始资金cerebro.broker.setcommission(commission=0.001)  # 0.1%佣金
# 添加分析器cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')cerebro.addanalyzer(bt.analyzers.DrawDown, _name='drawdown')cerebro.addanalyzer(bt.analyzers.Returns, _name='returns')# 添加PyFolio分析器cerebro.addanalyzer(bt.analyzers.PyFolio, _name='pyfolio')

print('回测开始...')results = cerebro.run()print('回测完成!')
# 获取策略实例strat = results[0]
# 提取PyFolio分析结果pyfoliozer = strat.analyzers.getbyname('pyfolio')returns, positions, transactions, gross_lev = pyfoliozer.get_pf_items()
# 打印分析结果print('\n===== 策略分析 =====')print(f"夏普比率: {strat.analyzers.sharpe.get_analysis()['sharperatio']:.3f}")print(f"最大回撤: {strat.analyzers.drawdown.get_analysis()['max']['drawdown']:.2f}%")print(f"年化收益率: {strat.analyzers.returns.get_analysis()['rnorm100']:.2f}%")

backtrader框架还能进行参数优化,网格搜索等,应该这么说,backtrader本身就是可以实盘的框架,它所有策略都可以实现。

但对于要实现风险平价,以及多因子机器学习这种呢,会略显麻烦,但可以做到。

图片

我们也会带大家用backtrader来实现如上的策略。

吾日三省吾身

脑袋里奇奇怪怪的想法,尤其是负面的想法,你去分析来分析去,就会越来越强化。甚至你多看它一眼,都是错误。

你越无视,它来的频率,强度都会降低,就是这样。

少折腾没有的事情,不仅内耗,浪费时间,关键是它在持续强化这种习惯,这就是“负复利”的逻辑了。这是要坚决打断的。

找点真正有价值的事情做,如果没有,那就把情绪,把心情写下来。

人生没有什么所谓确定性的。你可以相信前面有好运等着你,但不必去担忧还没有发生的有的没有。担心也没有用,你不知道的事情多着呢。

守好人生的底线,做该做的事情。

我们终归是要失去一切的。

好的,不好的,体验一场,问心无愧。

但行好事,莫问前程。

EarnMore(赚得更多)基于RL的投资组合管理框架:一致的股票表示,可定制股票池管理。(附论文+代码)

年化收益200%+的策略集 | 实时板块资金热力图 「aitrader 5.0系统代码发布」

机器学习驱动的策略开发通过流程 | 普通人阶层跃迁的可能路径?

年化30.24%,最大回撤19%,综合动量多因子评分策略再升级(python代码+数据)

三秒钟创建一个年化28%,夏普比1.25的策略(python系统已开放源代码下载)

会员专属策略可以直接下载了,多个十年年化30+%策略集|polars重构因子引擎(代码+数据下载)

6年年化收益46%,最大回撤率为16%的策略(附python代码)

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐