backtrader实现真正的多股组合操作策略,看这一篇就够了,用定时器进入策略逻辑

本文介绍了如何利用backtrader库实现一个基于定时器的多股组合定期再平衡策略。策略在每年的5月1日、9月1日和11月1日进行再平衡,选取上市超过3年、ROE大于0.1、PE在0到100之间的股票,按成交量排名前100只进行等比例投资。文章详细讲解了策略实现的关键技术点,包括数据处理、交易逻辑和定时器的使用,并提供了完整的Python代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下策略来自我们编写的教程和视频课程

多股组合操作,是一种高级的操作模式。多股组合操作通常有两种模式,一种是定期调仓,即定期再平衡,比如每周1调仓,或每月1号调仓等。另一种是非定期调仓,比如每日判断,进行调仓,或者每隔n天进行调仓。

定期调仓(再平衡)通常通过定时器timer来进入调仓逻辑,而非定期调仓通常通过传统的策略next方法进入调仓逻辑。当然,这并非绝对。

这两种多股调仓操作,都不能用backtrader内置的自动确定最小期的方法来做(比如为了求20日均线,自动跳过前20个bar),因为有些股票有交易的日期很靠后,它的最小期很大,其他股票也会采用这个最小期,这会导致其他股票浪费最小期前的数据,因此,必须自己控制最小期,也就是prenext方法里必须写上self.next()直接跳转到next。然后如果用到了比如5日均线这样的指标,你要自己判断数据对象线长度是否够长。下面的案例策略没有用到此类技术指标,因此没有判断线长,理论上从第一根bar就可执行逻辑。

尽管网上有一个用backtrader执行多股组合回测的案例,但并未很好地处理好多股回测中的一些问题。本文将给出完善的处理方案。

(基于next的非定期再平衡的策略实现请参考我们编写的教程和视频课程)

本文介绍基于定时器timer的多股定期再平衡策略的实现.

本案例的目的是介绍使用backtrader进行组合管理时,要注意的一些技术要点,策略本身仅供参考。策略的大致逻辑如下:每年5月1日,9月1日,11月1日进行组合再平衡操作(若该日休市,则顺延到开市日进行再平衡操作)。

首先加载一组股票(股票池),在再平衡日,从股票池挑出至少上市3年,且净资产收益率roe>0.1,市盈率 pe在0到100间的股票,这组选出的股票再按成交量从大到小排序,选出前100只股票(如果选出的股票少于100只,则按实际来),将全部账户价值按等比例分配买入这些股票。

该策略反应了如下几个技术要点,把这些要点整明白,基本上就可用于实战了,代码更详细的解读特别是定时器timer的用法参考我们编写的教程和视频课程:

1 扩展PandasData类

2 第一个数据应该对应指数,作为时间基准

3 数据预处理:删除原始数据中无交易的及缺指标的记录

4 先平仓再执行后续买卖

5 下单量的计算方法

6 如何保证先卖后买以空出资金

7 怎样按明日开盘价计算下单数量

8 为行情数据对象提供名字

9 买卖数量如何设为100的整数倍

10 设置符合中国股市的佣金模式,考虑印花税

11 涨跌停板的处理

# 考虑中国佣金,下单量100的整数倍,涨跌停板,滑点
# 考虑一个技术指标,展示怎样处理最小期问题

from datetime import datetime, time
from datetime import timedelta
import pandas as pd
import numpy as np
import backtrader as bt
import os.path  # 管理路径
import sys  # 发现脚本名字(in argv[0])
import glob
from backtrader.feeds import PandasData  # 用于扩展DataFeed

# 创建新的data feed类


class PandasDataExtend(PandasData):
    # 增加线
    lines = ('pe', 'roe', 'marketdays')
    params = (('pe', 15),
              ('
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扫地僧量化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值