46
3
21
4
举报
发布时间:2020-12-02 10:15
全部评论
大家都在搜:
...
前复权价格能从网上直接下载吗
1年前

0

分享
回复
你好 请问一下 我的 trading view 怎么用不了啦 显示没有网络
4年前

0

分享
回复
...
1呢
4年前

0

分享
回复
扫地僧量化
扫地僧量化

粉丝280获赞165

智能文稿

使用Backtrader进行五日均线策略回测教程

一、策略概述

本教程通过Backtrader框架实现一个简单的五日均线策略,具体规则如下:

  • 买入条件:当收盘价上穿五日均线,且当前无持仓时,试价买入100股。
  • 卖出条件:当收盘价下破五日均线,且当前有持仓时,试价卖出100股。
  • 初始条件:初始股票仓位为0,初始资金10000元。

二、数据准备

1. 数据源

使用CSV格式的股票行情数据(示例为浦发银行前复权数据,文件名“600000q全幅全.csv”),包含以下关键列(从0开始索引):

  • 第2列:交易日期
  • 第3列:开盘价
  • 第4列:最高价
  • 第5列:最低价
  • 第6列:收盘价
  • 第10列:成交量

2. 复权数据的重要性

回测时需使用复权数据以保证价格一致性,需特别注意:

  • 前复权:将历史价格统一调整为当前价格水平,方便观察价格趋势与实际价格的一致性,但可能导致分红时出现负数价格,回测收益率可能失真(未考虑分红再投资)。
  • 后复权:将当前价格追溯调整为历史价格水平,能准确反映分红再投资的收益率,实际回测中应优先使用后复权数据,避免前复权可能导致的价格异常和收益率计算错误。

三、回测基本步骤

1. 创建策略类

定义策略类(如SMA),实现五日均线策略的核心逻辑,包括初始化(__init__)、数据处理(计算五日均线)、买卖信号判断(next方法)等。

2. 初始化Backtrader引擎

创建Backtrader引擎实例(cerebro,西班牙语“大脑”之意,即策略引擎),负责协调策略、数据、分析器等组件的交互。

3. 加载行情数据

  • 通过bt.feeds.GenericCSVData类读取CSV文件,需指定关键参数:
    • 日期列索引(dtformat)、开盘价/最高价/最低价/收盘价/成交量列索引(openidx/highidx/lowidx/closeidx/volidx);
    • 若数据中无“未平仓量”列(如A股数据),需将openinterestidx设为-1;
  • 通过cerebro.adddata(data)将数据对象注入引擎。

4. 注入策略类

通过cerebro.addstrategy(SMA)将自定义策略类注入引擎,引擎会自动实例化策略并执行逻辑。

5. 设置初始资金

通过cerebro.broker.setcash(10000)设置初始资金为10000元。

6. 执行回测

调用cerebro.run()启动回测流程,引擎会按时间序列逐笔处理数据并触发策略逻辑。

7. 结果分析

  • 通过cerebro.broker.getvalue()获取最终市值;
  • 通过cerebro.plot()可视化回测结果(如资产曲线、价格走势等)。

四、代码实现要点

数据读取关键参数配置示例:

data = bt.feeds.GenericCSVData(
    dataname=file_path,
    dtformat=('%Y-%m-%d'),  # 日期格式
    datetime=2,  # 日期列索引(第2列)
    open=3,       # 开盘价列索引(第3列)
    high=4,       # 最高价列索引(第4列)
    low=5,        # 最低价列索引(第5列)
    close=6,      # 收盘价列索引(第6列)
    volume=10,    # 成交量列索引(第10列)
    openinterest=-1  # 无未平仓量列,设为-1
)

五、回测结果示例

  • 最终市值:10272元(初始资金10000元,收益率约2.72%);
  • 可视化输出:通过cerebro.plot()生成资产净值曲线与价格走势对比图,直观展示策略表现。

总结

Backtrader回测核心流程可概括为:策略类定义→引擎初始化→数据加载→策略注入→资金设置→执行回测→结果分析。实际应用中需重点关注数据质量(如复权处理)和策略逻辑的严谨性,以确保回测结果的可靠性。

猜你喜欢

推荐视频

热榜推荐