0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何从MySQL中提取数据并增加换手率指标进行回测

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-11-02 10:38 次阅读

事实上,backtrader虽然没有直接提供接口给我们做这样的优化,但是我们可以通过继承DataBase基类重写DataFeed实现目的。下面就给大家演示一下如何从MySQL中提取数据并增加换手率指标进行回测。

本文完整源代码和数据均在开源代码仓库中:
https://github.com/Ckend/pythondict-quant

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

此外,推荐大家用VSCode编辑器,因为它可以在编辑器下方的终端运行命令安装依赖模块:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开 Cmd (开始-运行-CMD),苹果系统环境下请打开 Terminal (command+空格输入Terminal),准备开始输入命令安装依赖。

在终端输入以下命令安装我们所需要的依赖模块:

pip install backtrader
pip install numpy
pip install matplotlib

看到 Successfully installed xxx 则说明安装成功。

2.自定义DataFeed

何为DataFeed?DataFeed 即 backtrader 中的“数据源”,任何数据进入策略回测前都要通过DataFeed,而DataFeed中会对数据进行处理,使得策略可以高效地进行计算。

我们今天要做的,就是增加一个基于MySQL的DataFeed,使得整个流程变得更加自动化。

首先,需要定义一个类,使其继承与backtrader的数据基类 DataBase:

from backtrader.feed import DataBase
from backtrader import date2num


class MySQLData(DataBase):
  pass

如果需要从外部传入所需股票数据的代码和其一定范围内的K线数据,需要提前定义params. 此外,如果你有除了:datetime(时间)、open(开盘价)、close(收盘价)、high(最高价)、low(最低价)、volume(成交量) 之外的指标。需要提前定义lines,如下所示:

图片

从上图可见,在lines中我增加了两个自定义指标:turnover(成交额) 和 turnover_rate(换手率)。

接下来,编写一个函数根据params参数从MySQL中获取数据:

图片

代码本身没有什么可说的,记得替换你本地的mysql配置,值得注意的是最后一行,拿到mysql数据后需要转化为迭代器。

在类初始化的时候,需要定义相关的数据存放变量并调用上述函数获取数据:

图片

接下来到了关键的步骤,在调用回测策略前,cerebro会遍历Datafeed的所有数据,此时会调用_load函数, 因此我们需要在这里,将数据库中提取的每列数据对应到lines上:

图片

如果你完整地看完了我的上述分析,那么理解下面整个DataFeed,甚至自己写一个DataFeed,是非常容易的。

图片

3.使用自定义数据流进行回测

接下来,让我们尝试使用这个自定义数据流输入数据,采用第二章的macd策略辅助增加换手率指标进行回测。

这里当然需要你先读懂第二章的内容,如果有点忘记了,可以回头阅读一下,非常简单:

Python 量化投资实战教程(2) —MACD策略

首先,在回测模块及next函数中,引入换手率指标:

图片

next函数买入时增加判断换手率必须小于3%的条件:

图片

最后,引入我们刚刚编写完成的MySQLData Feed,传入相关参数读取股票为603520.SH的数据流,取2017年1月1日至2020年4月12日的数据,并调用回测函数:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8504

    浏览量

    150846
  • 数据
    +关注

    关注

    8

    文章

    6898

    浏览量

    88839
  • 终端
    +关注

    关注

    1

    文章

    1115

    浏览量

    29832
  • database
    +关注

    关注

    0

    文章

    5

    浏览量

    10807
  • MySQL
    +关注

    关注

    1

    文章

    802

    浏览量

    26446
收藏 人收藏

    评论

    相关推荐

    如果采集的数据中提取一个完整的脉冲数据

    本帖最后由 eehome 于 2013-1-5 09:43 编辑 由于我不是学信号出生的,现在有一个难题请大家帮忙,谢谢了!从一个100M的采集卡中采集到的数据存放到TDMS文件中,如何从这些数据中提取区分出一个个完整的脉
    发表于 12-23 11:24

    怎么EXA中提取IQ数据进行后期处理

    我正试图EXA中提取IQ数据进行后期处理。我设法捕获了I / Q样本并将它们转储到一个文件中(附带示例),但有两个问题:1 - IQ Analyzer文档中似乎没有描述文件格式(ht
    发表于 03-05 16:41

    怎么绘图或变换中提取特定数据

    嗨,大家好,我想在剧情或转换中有一套iccap数据。我想自动提取数据的特定点分别存储值。是否有任何内部函数直接提取
    发表于 08-14 08:44

    怎么DHT11温度传感器中提取数据

    嘿,伙计们,我试图DHT11温度传感器中提取数据。你能告诉我是否存在一个示例项目或一个图书馆?试着自己写还没有成功…
    发表于 09-12 06:16

    如何特征值中提取两个字节?

    请求时,很容易WReqq=(CyLay-GATSSAWReqEyReqqPARAMYT**)事件PARAMARM中提取值,其值如下:LILUNIT8值=WReq-& Gt;但这不
    发表于 10-15 13:24

    如何以编程方式STL库中提取版本信息?

    我们正在将 STL 库集成到需要 IEC 61508 安全完整性级别 2 (SIL2) 的项目环境中。我们如何以编程方式 STL 库中提取版本信息?API 没有显示任何相关信息。另外,我们要使用的最新版本是什么?
    发表于 12-30 08:18

    如何通过M480系列的PDMAA步态模式RGB颜色阵列中提取

    应用程序: 以 PDMA 向下模式 RGB 颜色阵列中提取红色、 绿色 和 蓝色 数据 。 BSP 版本: M480系列 BSP CMSIS V3.04.000 硬件
    发表于 08-22 08:23

    JAVA教程之压缩包中提取文件

    JAVA教程之压缩包中提取文件,很好的JAVA的资料,快来学习吧
    发表于 04-11 17:28 3次下载

    如何HTML或XML文件中提取数据的Python爬虫库Beautiful Soup概述

    Beautiful Soup是一个可以HTML或XML文件中提取数据的Python库,简单来说,它能将HTML的标签文件解析成树形结构,然后方便地获取到指定标签的对应属性。
    的头像 发表于 07-29 09:56 2.6w次阅读

    新加坡研发空气中提取水的气凝胶

    新加坡国立大学的研究人员创造了一种新的物质,能够在不需要外部动力的情况下空气中提取水。这种物质是一种气凝胶,可用于为生活在难以找到清洁饮用水的环境中的人们制造饮用水。气凝胶是一种固体材料,重量特别轻。
    的头像 发表于 01-21 14:47 2034次阅读

    MySQL端口可以MySQL数据库中存储和检索数据

    使用选定的表和列生成一个XML架构结构。 生成输入映射后,当端口接收到与输入映射的XML结构匹配的XML文件时,它将自动将数据插入数据库。生成输出映射后,端口将从数据中提取
    的头像 发表于 02-15 14:07 1648次阅读

    利用MySQL进行一主一的主从复制

    本文讲述了如何使用MyBatisPlus+ShardingSphereJDBC进行读写分离,以及利用MySQL进行一主一的主从复制。
    的头像 发表于 07-28 09:47 1012次阅读

    如何使用OpenCV和Python图像中提取感兴趣区域

    今天我们将一起探究如何使用OpenCV和Python图像中提取感兴趣区域(ROI)。 在之间的文章中,我们完成了图像边缘提取,例如从台球桌中提取桌边。使用了简单的OpenC
    的头像 发表于 02-07 14:42 1773次阅读

    光体积图中提取呼吸速率的信号处理技术的比较

    电子发烧友网站提供《光体积图中提取呼吸速率的信号处理技术的比较.pdf》资料免费下载
    发表于 06-12 09:20 0次下载

    OST中提取邮箱数据和重置丢失的WindowsServer 密码的工具

       还原Exchange数据库 MVP 和 IT 管理员强烈推荐的 5 合 1 专用工具套件,用于修复损坏的 EDB 、备份中提取邮箱以及将 Exchange 数据库 (EDB)
    的头像 发表于 06-24 11:58 1168次阅读
    OST<b class='flag-5'>中提取</b>邮箱<b class='flag-5'>数据</b>和重置丢失的WindowsServer 密码的工具