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

    文章

    7653

    浏览量

    148555
  • 数据
    +关注

    关注

    8

    文章

    6515

    浏览量

    87616
  • 终端
    +关注

    关注

    1

    文章

    999

    浏览量

    29601
  • database
    +关注

    关注

    0

    文章

    5

    浏览量

    10781
  • MySQL
    +关注

    关注

    1

    文章

    776

    浏览量

    26009
收藏 人收藏

    评论

    相关推荐

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

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

    如何LLB管理器中提取子vi

    小弟用的是Labview2014,在修改一个程序,现在想从一个.llb文件中提取子vi,但是打开.llb文件后,里面的vi不能复制,也不能剪切,求指导,该怎么办
    发表于 07-04 15:51

    如何使用Labview從波形文件中提取某單一頻的波形經行分析?

    如何使用Labview從波形文件中提取某單一頻(比如200Hz)的波形,以便在時域上進行分析?我嘗試使用過帶通濾波,不過濾波的上下限難以設定。
    发表于 10-26 18:21

    如何解析串口接收到的字符串中提取的命令和数字参数?

    如何解析串口接收到的字符串中提取命令和数字参数?
    发表于 11-22 11:56

    如何解析stm32串口接收到的字符串中提取命令和数字参数?

    如何解析stm32串口接收到的字符串中提取命令和数字参数?
    发表于 12-13 16:47

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

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

    是否可以使用AXI4流以某种方式收发器中提取输入数据

    大家好。我目前正在使用GTH收发器实现更复杂的设计,这些收发器工作在2.8 GHz(5.6GB),我想知道我是否可以使用AXI4流以某种方式收发器中提取输入数据。有没有办法将数据写入
    发表于 05-05 13:14

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

    嗨,大家好,我想在剧情或转换中有一套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

    如何LittleFS中提取自定义字体文件?

    经过几天的搜索和大量的反复试验,我决定请教专家……简而言之,我想弄清楚如何 LittleFS 中提取自定义字体文件。我的 html 嵌入了 CSS 及其全部在我的代码中(不是外部文件)。但是,我
    发表于 05-11 06:41

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

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

    请问如何解析串口接收到的字符串中提取命令和数字参数?

    如何解析串口接收到的字符串中提取命令和数字参数?
    发表于 10-23 06:13

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

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