[量化投资-学习笔记011]Python+TDengine从零开始搭建量化分析平台-MACD金死叉策略回测

news2025/1/13 9:44:56

在上一章节 MACD金死叉中结束了如何根据 MACD 金死叉计算交易信号。

目录

    • 脚本说明文档(DevChat 生成)
    • MACD 分析脚本
      • 安装依赖库
      • 参数配置
      • 查询与解析数据
      • 计算 MACD 指标
      • 判断金叉和死叉
      • 计算收益
      • 绘制图形
      • 运行脚本

本次将根据交易信号,模拟交易。更加历史数据对MACD金死叉交易策略进行回测,看一下收益如何。

下面进行一个简单的实现:

    1. 定义一个资金池
    1. 当出现买入信号且无仓位时,全仓买入。买入价为第二日收盘价(其实以第二日开盘价计算比较合理)。
    1. 当出现卖出信号且有仓位时,清仓。卖出价为第二日收盘价(同样,也是以第二日开盘价更合理)
    1. 以下程序未计算印花税等交易费用。
    1. 对金额进行了取整,方便展示。
def calculate_profit(prices, signals):
    capital = 100000  # 初始资金000001
    shares = 0  # 持有股票数量
    position = 0  # 0表示空仓,1表示持仓
    balance = 0
    profit = []
    profit.append(capital)
    for i,singal in signals:
        if singal == 'buy' and position == 0 :
            shares = int(capital / prices[i+1] / 100)
            balance = int(capital - (shares*prices[i+1]*100))
            position = 1
        elif singal  == 'sell' and position == 1 :
            capital = int(shares * 100 * prices[i+1] + balance)
            shares = 0 
            position = 0
            profit.append(capital)
    return profit

对MACD 和收益进行图形化输出

plt.figure(figsize=(12, 8))
plt.subplot(3, 1, 1)
plt.plot(df.index, df['close'])
plt.title('收盘价')
plt.xlabel('tdate')
plt.ylabel('Price')


plt.subplot(3, 1, 2)
plt.title("MACD")
plt.plot(df['DIF'],'r',linewidth=1.0,label='DIF')
plt.plot(df['DEA'],'y',linewidth=1.0,label='DEA')
plt.legend()
plt.grid()

plt.subplot(3, 1, 3)
plt.title("收益曲线")
plt.plot(profits,'r',linewidth=1.0,label='Profit')
plt.bar(range(len(profits)),profits)
plt.ylabel('RMB')
plt.legend()
plt.grid()


plt.tight_layout()
plt.show()

以下是不同股票的策略回测结果:
平安银行(000001)
在这里插入图片描述

全柴动力(600218)
在这里插入图片描述

中航高科(600862)
在这里插入图片描述

脚本说明文档(DevChat 生成)

再次展示一下 AI 的力量。

MACD 分析脚本

这是一个用于从 TDengine 数据库查询股票收盘价,并进行 MACD 分析的 Python 脚本示例。脚本会绘制收盘价曲线、MACD 指标曲线以及收益曲线图。

安装依赖库

确保您已安装以下依赖库:

  • requests 用于发送 RESTful 请求
  • json 用于解析 JSON 响应
  • matplotlib 用于绘制图形
  • pandas 用于处理数据

您可以使用 pip 在命令行中安装它们:

pip install requests matplotlib pandas

参数配置

在开始之前,请根据您的实际情况设置以下参数:

  • host:TDengine 数据库的主机名或 IP 地址
  • port:TDengine 数据库的端口号
  • username:TDengine 数据库的用户名
  • password:TDengine 数据库的密码
  • db_name:数据库名称
  • table_name:数据表名称
  • fcode:股票代码

查询与解析数据

首先,脚本通过 RESTful 请求从 TDengine 数据库中查询收盘价数据。然后,将查询结果解析为列表,并将时间戳和收盘价分别存储在 timestampsclose_prices 数组中。

计算 MACD 指标

接下来,使用 calculate_macd 函数计算 MACD 和信号线的值。该函数使用指定的周期参数计算指数移动平均线(EMA),然后计算 MACD 和信号线。同时,还计算了 MACD 的柱状图(MACD-Histogram)。

判断金叉和死叉

使用 check_macd 函数判断金叉和死叉的位置。该函数遍历 MACD 和信号线数组,找到金叉和死叉的位置,并将其存储在 crossing_points 数组中。

计算收益

使用 calculate_profit 函数计算根据金叉和死叉信号的策略产生的收益。在此示例中,初始资金为 100,000 RMB,根据买入和卖出信号以及股票价格的变化,计算并存储了每个时刻的资金余额,并返回收益数组 profits

绘制图形

最后,脚本使用 matplotlib 库绘制了三个子图。第一个子图展示了收盘价的曲线图,第二个子图展示了 MACD 指标的曲线图,第三个子图展示了收益曲线。

运行脚本

确保您已正确安装依赖库并设置了正确的参数后,您可以执行此 Python 脚本来运行 MACD 分析并绘制图形。

当脚本运行完毕后,将会在屏幕上打印金叉和死叉的位置以及对应的时间戳和收盘价。此外,图形窗口将显示收盘价、MACD 指标和收益曲线。

请根据您的实际需求对脚本进行自定义和调整。希望这个示例对您有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1198148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL SELECT INTO 语句

SQL SELECT INTO 语句 使用 SQL,您可以将信息从一个表中复制到另一个表中。 SELECT INTO 语句从一个表中复制数据,然后将数据插入到另一个新表中。 SQL SELECT INTO 语法 我们可以把所有的列都复制到新表中: SELECT * INTO newtable [IN ex…

CIFAR-100数据集的加载和预处理教程

一、CIFAR-100数据集介绍 CIFAR-100(Canadian Institute for Advanced Research - 100 classes)是一个经典的图像分类数据集,用于计算机视觉领域的研究和算法测试。它是CIFAR-10数据集的扩展版本,包含了更多的类别,用…

Semantic Kernel 学习笔记1

1. 挂代理跑通openai API 2. 无需魔法跑通Azure API 下载Semantic Kernel的github代码包到本地,主要用于方便学习python->notebooks文件夹中的内容。 1. Openai API:根据上述文件夹中的.env.example示例创建.env文件,需要填写下方两个内…

51单片机应用从零开始(一)

1. 单片机在哪里 单片机是一种集成电路芯片,通常被嵌入到电子设备中用于控制和处理数据,例如家电、汽车、电子玩具、智能家居等。因此,你可以在许多电子设备中找到单片机的存在。单片机通常被放置在设备的主板或控制板上。 2. 单片机是什么…

【C语言】冒泡排序(图解)

🌈write in front :🔍个人主页 : 啊森要自信的主页 🌈作者寄语 🌈: 小菜鸟的力量不在于它的体型,而在于它内心的勇气和无限的潜能,只要你有决心,就没有什么事情是不可能的…

WebRTC简介及使用

文章目录 前言一、WebRTC 简介1、webrtc 是什么2、webrtc 可以做什么3、数据传输需要些什么4、SDP 协议5、STUN6、TURN7、ICE 二、WebRTC 整体框架三、WebRTC 功能模块1、视频相关①、视频采集---video_capture②、视频编解码---video_coding③、视频加密---video_engine_encry…

AI:83-基于深度学习的手势识别与实时控制

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

ArcGIS:如何迭代Shp文件所有要素并分别导出为Shp文件?

01 前言 尝试用IDL实现,奈何又涉及新的类IDLffShape,觉得实在没有必要学习的必要,毕竟不是搞开发,只是做做数据处理,没必要拿IDL不擅长的且底层的东西自己造轮子。 这里想到使用Python去解决,gdal太久没用…

安装包 amd,amd64, arm,arm64 都有什么区别

现在的安装包也不省心,有各种版本都不知道怎么选。 根据你安装的环境配置。 amd: 32位X86 amd64: 64位X86 arm: 32位ARM arm64: 64位ARM amd64是X86架构的CPU,64位版。amd64又叫X86_64。主流的桌面PC&am…

25期代码随想录算法训练营第十四天 | 二叉树 | 递归遍历、迭代遍历

目录 递归遍历前序遍历中序遍历后序遍历 迭代遍历前序遍历中序遍历后序遍历 递归遍历 前序遍历 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # …

Javaweb之javascript的DOM对象的详细解析

1.5.3 DOM对象 1.5.3.1 DOM介绍 DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML 文档的各个组成部分封装为对象。 DOM 其实我们并不陌生,之前在学习 XML 就接触过,只不过 XML 文档中的标签需要我们写代码解析&#x…

Python---split()方法 + join()方法

split()方法 split 英 /splɪt/ v. 分裂,使分裂(成不同的派别);分开,使分开(成为几个部份);(使)撕裂;分担,分享;划破&…

VueRequest——管理请求状态库

文章目录 前言一、为什么选择 VueRequest?二、使用步骤1.安装2.用例 前言 VueRequest——开发文档 VueReques——GitHub地址 在以往的业务项目中,我们经常会被 loading 状态的管理、请求的节流防抖、接口数据的缓存、分页等重复的功能实现所困扰。每次开…

积极应对云网络安全

以下是 IT 领导者需要了解的内容,才能在云网络安全方面占据上风。 如果您的组织尚未主动解决云网络安全问题,则将面临灾难的风险。等待攻击发生根本没有意义。 主动云安全会采取积极措施来发现潜在威胁并在网络攻击发生之前阻止网络攻击。 这是通过持…

【深度挖掘Java性能调优】「底层技术原理体系」深入挖掘和分析如何提升服务的性能以及执行效率(引导篇)

深入挖掘和分析如何提升服务的性能以及执行效率 前提介绍知识要点 性能概述教你看懂程序的性能案例介绍性能指标性能的参考指标性能瓶颈(木桶原理) 性能分析三大定律Amdahl定律计算公式参数解释案例分析定律总结 Gustafson定律与Amdahl定律相对立Gustafs…

C#中的扩展方法---Extension

C#中扩展方法是C# 3.0/.NET 3.x 新增特性,能够实现向现有类型中“添加”方法,以下主要介绍C#中扩展方法的声明及使用。 1、扩展方法的声明 扩展方法使能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型…

如何知道一个程序为哪些信号注册了哪些信号处理函数?

https://unix.stackexchange.com/questions/379694/is-there-a-way-to-know-if-signals-are-present-in-your-application-and-which-sign 使用 strace

《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》阅读笔记

论文标题 《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》 Swin 这个词貌似来自后面的 Shifted WindowsShifted Windows:移动窗口Hierarchical:分层 作者 微软亚洲研究院出品 初读 摘要 提出 Swin Transformer 可以…

Spark的执行计划

Spark 3.0 大版本发布,Spark SQL 的优化占比将近 50%。Spark SQL 取代 Spark Core,成为新一代的引擎内核,所有其他子框架如 Mllib、Streaming 和 Graph,都可以共享 Spark SQL 的性能优化,都能从 Spark 社区对于 Spark …

Java自学第10课:JavaBean和servlet基础

目录 目录 1 JavaBean (1)概念 (2)分类 (3)使用 2 servlet (1)代码结构 (2)常用接口 (3)如何开发 1 新建servlet 2 配置 1…