【股票策略】使用backtrader测试狗股策略版本4---在版本3的基础上进行代码改进优化(2025-02-11更新)

本文针对狗股策略的代码进行了改进,以解决股票停牌可能导致的回测不准确问题。通过引入指数数据确保每个交易日都能被处理。回测结果显示,年化收益率从19.52%降低到15.4%,表明策略有待进一步优化。使用了backtrader和pyfolio工具进行策略评估。

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

在上几次测试狗股策略的时候,忽略了我们加载的第一个数据可能有停牌的可能性,这次考虑所有股票的交易时间之后再进行测试,可以使用指数的数据,或者如果是全市场的股票数据,把所有股票的时间加载到一块,也可以充当指数数据,我们的指数数据仅仅是为了能够让backtrader能够运行每个交易日。

有读者反映代码里面更新日期之后,回导致回测报错,是因为更改日期之后,某些股票数据可能就不满足计算指标需求了,比如某些退市股票没有那么多交易天数了,就会导致计算指标失败,需要根据具体的开始时间进行过滤。

下面是新版本的代码:

import backtrader as bt
import datetime
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
这篇论文的英文版可以在 http://ssrn.com/abstract=3247865.Spanish 找到:本书对大量资产类别的 150 多种交易策略进行了详细的描述,包括 550 多个数学公式和交易风格。 这包括股票、期权、债券(固定收益)、期货、ETF、指数、商品、货币、可转换债券、结构性资产、波动性(作为资产类别)、房地产、不良资产、现金、加密货币、杂项(如气候、能源、通胀)、全球宏观、基础设施和税收套利。 一些策略基于机器学习算法(如人工神经网络、贝叶斯、k 个最近邻)。 本书还包括带有解释性注释的样本外回测代码; 大约 2,000 个参考书目; 包含词汇表、首字母缩略词和数学定义的 900 多个术语。 该演示文稿旨在具有描述性和教学性,特别适合金融专业人士、交易员、研究人员、学者以及商学院和金融课程的学生。这是以下书籍的完整版本:Z. Kakushadze 和 JA Serur。 151 交易策略(西班牙语版,2019 年),398 页; ISBN 978-1071261873。 它是以下书籍的英语到西班牙语的翻译(完整版可在此处找到 http://ssrn.com/abstract=3247865):Z. Kakushadze 和 JA Serur。 151 种交易策略。 瑞士 Cham:Palgrave Macmillan,Springer Nature 的印记,第 1 版(2018 年),XX,480 页; ISBN 978-3-030-02791-9.English:这本书是西班牙文,提供了详细的描述,包括 550 多个数学公式,涵盖了大量资产类别(和交易风格)的 150 多种交易策略。 这包括股票、期权、固定收益、期货、ETF、指数、商品、外汇、可转换债券、结构性资产、波动性(作为资产类别)、房地产、不良资产、现金、加密货币、杂项(如天气、能源、通货膨胀)、全球宏观、基础设施和税收套利。 一些策略基于机器学习算法(如人工神经网络、贝叶斯、k-最近邻)。 我们还提供: 用于说明样本外回测的源代码以及说明; 大约 2,000 个参考书目; 以及 900 多个词汇表、首字母缩略词和数学定义。 该演示文稿旨在具有描述性和教学性,并且对金融从业人员、交易员、研究人员、学者以及商学院和金融课程的学生特别感兴趣。这是以下书籍的完整版本:Z. Kakushadze 和 JA Serur。 151 交易策略(西班牙语版,2019 年),398 页; ISBN 978-1071261873。 后者是以下书(其完整版本可在 http://ssrn.com/abstract=3247865 上找到)的英语翻译成西班牙语:Z. Kakushadze 和 JA Serur。 151 种交易策略。 瑞士 Cham:Palgrave Macmillan,Springer Nature 的印记,第 1 版(2018 年),XX,480 页; ISBN 978-3-030-02791-9。
### Backtrader 量化交易平台简介 Backtrader 是一个功能强大的 Python 库,专为金融市场的量化交易策略设计。该库支持多种资产类别(股票、期货、外汇等)以及不同时间周期的数据处理。 #### 安装 backtrader 和准备环境 为了开始使用 backtrader 进行量化交易策略开发,首先需要确保已正确安装此库并配置好工作环境[^1]: ```bash pip install backtrader ``` 确认安装成功后可以通过官方提供的测试样例验证环境是否正常运作[^3]。 #### 创建基础策略类 每一个具体的交易策略都应继承自 `bt.Strategy` 类,并重写其中的方法来自定义行为逻辑。下面是一个简单的移动平均交叉策略实例: ```python import backtrader as bt class SmaCross(bt.SignalStrategy): params = (('pfast', 12), ('pslow', 26),) def __init__(self): sma_fast = bt.ind.SMA(period=self.p.pfast) sma_slow = bt.ind.SMA(period=self.p.pslow) self.signal_add(bt.SIGNAL_LONG, bt.ind.CrossOver(sma_fast, sma_slow)) ``` 在此基础上还可以进一步调整参数以适应不同的市场状况或个人偏好。 #### 设置数据源与执行回测 准备好策略之后便可以加载历史行情数据来进行模拟测试了。这里展示了一个读取 CSV 文件作为输入的例子[^4]: ```python if __name__ == '__main__': cerebro = bt.Cerebro() data = bt.feeds.GenericCSVData( dataname='data.csv', fromdate=datetime(2020, 1, 1), todate=datetime(2021, 12, 31), nullvalue=0.0, dtformat='%Y-%m-%d', datetime=0, high=2, low=3, open=1, close=4, volume=5, openinterest=-1 ) cerebro.adddata(data) cerebro.addstrategy(SmaCross) start_value = cerebro.broker.getvalue() print(f'Starting Portfolio Value: {start_value:.2f}') cerebro.run() end_value = cerebro.broker.getvalue() print(f'Final Portfolio Value: {end_value:.2f}') ``` 上述代码片段展示了如何构建 Cerebro 实例并将之前定义好的策略应用于给定的时间范围内;同时记录了起始和结束的投资组合价值以便评估绩效表现。 #### 分析结果 完成一次完整的回溯测试流程后,通常还需要对产生的订单列表、持仓变动情况以及其他统计指标进行全面审查,从而找出潜在改进空间并优化现有模型性能。
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

云金杞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值