backtrader单标的创业板动量折时年化181最大回测183

一.效果

backtrader单标的创业板动量折时年化181最大回测183

backtrader单标的创业板动量折时年化181最大回测183

2.年化收益率不同解释

2.1 empyrical计算年化逻辑

backtrader单标的创业板动量折时年化181最大回测183

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

backtrader单标的创业板动量折时年化181最大回测183

二.实现

1.下载df数据

backtrader单标的创业板动量折时年化181最大回测183

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分析

backtrader单标的创业板动量折时年化181最大回测183

4.2quantstats分析

import quantstats as qs
qs.reports.basic(returns)
backtrader单标的创业板动量折时年化181最大回测183

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

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

相关推荐

发表回复

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