Python实现DMI工具判断信号:股票技术分析的工具系列(3)

Python实现DMI工具判断信号:股票技术分析的工具系列(3)

    • 介绍
      • 算法解释
    • 代码
      • rolling函数介绍
      • 完整代码


介绍

先看看官方介绍:

DMI (趋向指标)
用法
1.PDI线从下向上突破MDI线,显示有新多头进场,为买进信号;
2.PDI线从上向下跌破MDI线,显示有新空头进场,为卖出信号;
3.ADX值持续高于前一日时,市场行情将维持原趋势;
4.ADX值递减,降到20以下,且横向行进时,市场气氛为盘整;
5.ADX值从上升倾向转为下降时,表明行情即将反转。

算法解释

MTR:= SUM(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),N);
HD := HIGH-REF(HIGH,1);
LD := REF(LOW,1)-LOW;
DMP:= SUM(IF(HD>0 AND HD>LD,HD,0),N);
DMM:= SUM(IF(LD>0 AND LD>HD,LD,0),N);
PDI: DMP*100/MTR;
MDI: DMM*100/MTR;
ADX: MA(ABS(MDI-PDI)/(MDI+PDI)*100,M);
ADXR:(ADX+REF(ADX,M))/2;

优势:

优势描述
清晰的买卖信号当PDI线从下向上突破MDI线时,显示有新多头进场,为买进信号;而当PDI线从上向下跌破MDI线时,显示有新空头进场,为卖出信号,提供了明确的交易信号。
确定趋势强度ADX值持续高于前一日时,表明市场行情将维持原趋势,有助于投资者确认趋势的持续性,为持仓决策提供参考。
识别盘整行情当ADX值递减并降到20以下,并且横向行进时,表明市场处于盘整状态,这对于那些偏好在趋势不明朗时选择观望或进行波段交易的投资者是有帮助的。

劣势:

劣势描述
滞后性DMI指标可能会出现滞后现象,尤其是在市场行情急剧变化时,指标可能无法及时反应新的市场趋势,导致错过买卖时机。
假信号尽管DMI指标提供了明确的买卖信号,但在市场波动较大或盘整时,可能会出现假信号,导致交易损失。
需要结合其他指标DMI指标虽然提供了趋势方向和趋势强度的信息,但并不能覆盖市场的所有方面,因此投资者在使用时需要结合其他指标和分析方法进行综合判断。

代码

rolling函数介绍

rolling 函数通常与其他函数(如 meansumstd 等)一起使用,以计算滚动统计量,例如滚动均值、滚动总和等。

以下是 rolling 函数的基本语法:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
  • window: 用于计算统计量的窗口大小。
  • min_periods: 每个窗口最少需要的非空观测值数量。
  • center: 确定窗口是否居中,默认为 False
  • win_type: 窗口类型,例如 Noneboxcartriang 等,默认为 None
  • on: 在数据帧中执行滚动操作的列,默认为 None,表示对整个数据帧执行操作。
  • axis: 执行滚动操作的轴,默认为 0,表示按列执行操作。
  • closed: 确定窗口的哪一端是闭合的,默认为 None

完整代码

import pandas as pd
import stock_data# 将股票数据存储到字典中
data = {'DATE': stock_data.DATE,'CLOSE': stock_data.CLOSE,'HIGH': stock_data.HIGH,'LOW': stock_data.LOW,'OPEN': stock_data.OPEN,'CHANGE': stock_data.CHANGE,'VOL': stock_data.VOL,'CAPITAL': stock_data.CAPITAL
}df = pd.DataFrame(data)def check_signal(v_df, day_index=-1):"""检查信号参数:v_df: pandas.DataFrame,包含DMI指标的DataFrameday_index: int,要检查的日期索引,默认为最后一天返回:str,表示信号的字符串,可能为"买入信号"、"卖出信号"或"无信号""""# 生成信号signal = "无信号"latest_data_PDI = v_df['PDI'].iloc[day_index]latest_data_PDI2 = v_df['PDI'].iloc[-1 + day_index]latest_data_MDI = v_df['MDI'].iloc[day_index]latest_data_MDI2 = v_df['MDI'].iloc[-1 + day_index]if latest_data_PDI > latest_data_MDI and latest_data_PDI2 <= latest_data_MDI2:signal = "买入信号"elif latest_data_PDI < latest_data_MDI and latest_data_PDI2 >= latest_data_MDI2:signal = "卖出信号"return signaldef DMI(v_df, N, M):"""计算DMI指标参数:v_df: pandas.DataFrame,包含股票数据的DataFrameN: int,计算MTR和移动平均的窗口大小M: int,计算ADX的平滑窗口大小返回:无,结果直接存储在输入的DataFrame中"""# 计算 MTRv_df['HL'] = v_df['HIGH'] - v_df['LOW']v_df['HC'] = abs(v_df['HIGH'] - v_df['CLOSE'].shift(1))v_df['LC'] = abs(v_df['LOW'] - v_df['CLOSE'].shift(1))v_df['MAX1'] = v_df[['HL', 'HC']].max(axis=1)v_df['MAX2'] = v_df[['MAX1', 'LC']].max(axis=1)v_df['MTR'] = v_df['MAX2'].rolling(window=N).sum()# 计算 HDv_df['HD'] = v_df['HIGH'] - v_df['HIGH'].shift(1)# 计算 LDv_df['LD'] = v_df['LOW'].shift(1) - v_df['LOW']# 计算 DMPv_df['DMP'] = df.apply(lambda x: x['HD'] if (x['HD'] > 0 and x['HD'] > x['LD']) else 0, axis=1).rolling(window=N).sum()# 计算 DMMv_df['DMM'] = df.apply(lambda x: x['LD'] if (x['LD'] > 0 and x['LD'] > x['HD']) else 0, axis=1).rolling(window=N).sum()# 计算 PDI、MDI 和 ADXv_df['PDI'] = v_df['DMP'] * 100 / v_df['MTR']v_df['MDI'] = v_df['DMM'] * 100 / v_df['MTR']v_df['DX'] = (v_df['PDI'] - v_df['MDI']).abs() / (v_df['PDI'] + v_df['MDI']) * 100v_df['ADX'] = v_df['DX'].rolling(window=M).mean()# 计算 ADXRv_df['ADXR'] = (v_df['ADX'] + v_df['ADX'].shift(M)) / 2# 删除中间计算用的列df.drop(['LOW', 'HL', 'HC', 'LC', 'MAX1', 'MAX2', 'HD', 'LD', 'DX'], axis=1, inplace=True)DMI(df, 14, 6)
print(check_signal(df, day_index=-1))

在这里插入图片描述

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

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

相关文章

系统架构29 - 架构风格补充(下)

面向服务架构风格 关键目标关键技术实现方式WEB Service服务注册表企业服务总线ESB特点&#xff1a; SOA是一种 粗粒度、松耦合服务架构&#xff0c;服务之间通过简单、精确定义接口进行通信&#xff0c;不涉及底层编程接口和通信模型。 在SOA中&#xff0c; 服务是一种为了满…

BUUCTF---[BJDCTF2020]藏藏藏1

1.题目描述 2.下载附件&#xff0c;解压之后是一张图片和一个文本 3.把图片放在winhex,发现图片里面包含压缩包 4.在kali中使用binwalk查看&#xff0c;然后使用foremost分离&#xff0c;在使用tree查看分离出来的文件&#xff0c;最后将zip文件使用unzip进行解压。步骤如下 5.…

pdf编辑软件哪个好用?5款PDF编辑器分享

pdf编辑软件哪个好用&#xff1f;PDF编辑软件在现代办公和学术研究中发挥着举足轻重的作用&#xff0c;它们不仅具备基础的编辑和修改功能&#xff0c;还能够支持多种注释工具&#xff0c;帮助我们高效地管理和整理PDF文件。无论是需要调整文档布局、添加文本或图像&#xff0c…

RocketMQ - 从RocketMQ全链路分析一下为什么用户支付后没收到红包?

1. 订单系统推送消息到MQ的过程会丢失消息吗? 订单系统在接收到订单支付成功的通知之后,必然会去推送一条订单支付成功的消息到MQ,那么在这个过程中,会出现丢失消息的问题吗? 答案是可能会丢失的,比如订单系统在推送消息到RocketMQ的过程中,是通过网络去进行传输的,但…

C++ 前缀和

目录 例1 例2 例3 例4 例5 例6 例7 例8 例1 DP34 【模板】前缀和 分析&#xff1a;dp和arr的大小并不是固定的&#xff0c;就是有没有偏移量&#xff0c;这里的n是从1开始&#xff0c;不如直接放到下标1处&#xff0c;在最后的减法时&#xff0c;如果用第一个参考代码会…

MySQL - #1115 - Unknown character set: ‘utf8mb4‘

问题描述 #1115 - Unknown character set: utf8mb4 原因分析 因为在创建表的时候是有这个编码的&#xff0c;但是在单独修改某个字段的编码时发现报错&#xff0c;虽然觉得莫名其妙&#xff0c;那就将机就计&#xff0c;改成大概率有的编码——UTF8&#xff0c;因为这边为的是…

rtt的io设备框架面向对象学习-touch设备

目录 1.触摸设备基类2.触摸设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 io设备管理层 4.总结5.使用5.1实例 1.触摸设备基类 此层处于设备驱动框架层。此层的类是抽象类。 在/ components / drivers / include / drivers /touch.h定义了如下touch设备…

云计算 3月2号 (自配本地和远程yum源)

自建yum源 本地源 一、使用本地的镜像文件来制作yum源(做完记得删除) 1、挂载dvd镜像或将镜像拷贝到机器中 mkdir /yum-repo mount /dev/cdrom /yum-repo # 如果我们在设置中挂载了镜像使用这个方法 mount 镜像的路径 /yum-repo # 如果我们拷贝镜像到了系统中&#xff0c;可…

flink on yarn paimon

目录 概述实践paimon 结束 概述 ogg kafka paimon 实践 前置准备请看如下文章 文章链接hadoop一主三从安装链接spark on yarn链接flink的yarn-session环境链接 paimon 目标: 1.同步表2.能过 kafka 向 paimon写入 SET parallelism.default 2; set table.exec.sink.not-n…

Ai学社致力于Ai视觉设计和AI绘画

Ai学社来啦&#xff01;致力于短时间搞定Ai视觉设计、AI绘画。 遍知首席Ai讲师&#xff0c;教大家如何利用Ai迅速提升工作效率&#xff0c;升职加xin&#xff01;目前申请对ai感兴趣的均可以参加&#xff01;免费报名。 招生人数&#xff1a;本批次至少招募100名。招生时间&…

C++ Date类型定义 (类的简单实践案例)

//头文件#include<iostream> #include<assert.h> using namespace std;class Date { public:// 获取某年某月的天数int GetMonthDay(int year, int month);// 全缺省的构造函数Date(int year 1900, int month 1, int day 1);// 拷贝构造函数// d2(d1)Date(const…

LeetCode-02

225. 用队列实现栈 用两个队列实现栈的功能&#xff0c;思路如下&#xff1a; 往空队列中放新元素把非空队列中的元素依次放入刚才添加了新元素的队列&#xff0c;直到非空队列变为空队列 class MyStack(object):def __init__(self):self.queue1 []self.queue2 []def push(…

【教程】Kotlin语言学习笔记(四)——方法(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【Kotlin语言学习】系列文章 第一章 《认识Kotlin》 第二章 《数据类型》 第三章 《数据容器》 第四章 《方法》 文章目录 【…

突发,Anthropic推出突破性Claude 3系列模型,性能超越GPT-4

&#x1f989; AI新闻 &#x1f680; 突发&#xff0c;Anthropic推出突破性Claude 3系列模型 摘要&#xff1a;人工智能创业公司Anthropic宣布推出其Claude 3系列大型语言模型&#xff0c;该系列包括Claude 3 Haiku、Claude 3 Sonnet和Claude 3 Opus三个子模型&#xff0c;旨…

Cesium 自定义Primitive-绘制圆

一、创作来源 1、cesium的entity绘制圆 2、不使用entity的情况下&#xff0c;使用自定义的primitive来动态绘制圆 3、结合上一篇文章的圆&#xff0c;执行动态圆的更新 二、编写步骤 1、创建绘制线的类 包括构造函数、绘图函数以及销毁函数 import { Viewer, ScreenSpaceEven…

docker-compose启动postgres数据库,实现主从备份

文章目录 1. 主库2. 从库3. 测试 1. 主库 创建pg-m 目录&#xff0c;并进入该目录创建docker-compose.yml文件&#xff0c;内容如下&#xff1a; version: "3.1" services:pg_master:image: postgres:15.3container_name: pg_masterenvironment:POSTGRES_PASSWORD:…

Domain Adaptation Vs. Prompt-Tuning:能否用域自适应解决大模型提示学习问题?

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 作者简介 李江梦&#xff0c;中国科学院软件研究所天基综合信息系统全国重点实验室助理研究员 论文简介 今天介绍的是被机器学习领域顶级学术会议ICLR 2024接收的论文&#xff1a;BayesPrompt: Prompting Large…

广东Lenovo SR588服务器维修升级硬盘内存

本案例描述了对联想SR588服务器进行硬件升级的过程&#xff0c;包括更换固态硬盘作为系统盘&#xff0c;以及增加内存容量至128GB。升级后&#xff0c;服务器性能得到显著提升&#xff0c;同时通过重新配置RAID阵列和操作系统的重新安装&#xff0c;确保了系统的稳定性和数据的…

STM32 NAND FLASH知识点

1.NAND FLASH的简介 NAND FLASH 的概念是由东芝公司在 1989 年率先提出&#xff0c;它内部采用非线性宏单元模式&#xff0c;为固态大容量内存的实现提供了廉价有效的解决方案。 NAND FLASH 存储器具有容量较大&#xff0c;改写速度快等优点&#xff0c;适用于大量数据的存储&…

MySQL EXPLAIN 性能分析工具详解

EXPLAIN 是 MySQL 中一个非常重要的性能分析工具&#xff0c;它用于显示 MySQL 如何执行 SQL 查询。通过 EXPLAIN&#xff0c;你可以查看查询的执行计划&#xff0c;从而理解查询是如何被优化和执行的&#xff0c;从而找出可能的性能瓶颈。 如何使用 EXPLAIN 使用 EXPLAIN 非…