当前位置: 首页 > news >正文

量化交易系统开发-实时行情自动化交易-4.1.3.A股平均趋向指数(ADX)实现

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。

接下来继续说说A股平均趋向指数实现。

平均趋向指数(ADX,Average Directional Index)是一种衡量市场趋势强度的技术指标,广泛用于判断 A 股市场的趋势强弱,而不判断趋势方向。ADX 是基于正向趋向指标 (+DI) 和负向趋向指标 (-DI) 计算得出的一个趋势强度指标,通常用于确认趋势是否强劲。以下是通过 Python 和 Tushare 实现 A 股市场的 ADX 指标的代码示例。

1. ADX 的基本组成
  • +DI(Positive Directional Indicator):衡量价格上升的强度。

  • -DI(Negative Directional Indicator):衡量价格下降的强度。

  • ADX:基于 +DI 和 -DI 计算的指数,用于衡量趋势的强度,而非方向。

2. 获取 A 股数据

使用 Tushare 获取 A 股的股票数据,确保你有 Tushare 的 API token。

import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt# 设置 Tushare token
ts.set_token('your_tushare_token')
pro = ts.pro_api()# 获取 A 股的日线数据(以贵州茅台为例)
def get_a_stock_data(stock_code, start_date, end_date):df = pro.daily(ts_code=stock_code, start_date=start_date, end_date=end_date)df = df[['trade_date', 'high', 'low', 'close']]df['trade_date'] = pd.to_datetime(df['trade_date'])df.set_index('trade_date', inplace=True)df = df.sort_index()return df# 获取贵州茅台(600519.SH)的日线数据
stock_code = '600519.SH'
start_date = '20200101'
end_date = '20221231'
stock_data = get_a_stock_data(stock_code, start_date, end_date)
3. 计算 ADX 指标
# 计算 ADX 指标
def calculate_adx(data, window=14):"""计算平均趋向指数 (ADX) 指标。:param data: 股票数据的 pandas DataFrame,必须包含 'high', 'low', 'close' 列:param window: ADX 的窗口大小,通常为 14:return: 包含 ADX 指标的 DataFrame"""# 计算 True Range (TR)data['tr1'] = data['high'] - data['low']data['tr2'] = abs(data['high'] - data['close'].shift(1))data['tr3'] = abs(data['low'] - data['close'].shift(1))data['TR'] = data[['tr1', 'tr2', 'tr3']].max(axis=1)# 计算 +DM 和 -DMdata['+DM'] = np.where((data['high'] - data['high'].shift(1)) > (data['low'].shift(1) - data['low']), data['high'] - data['high'].shift(1), 0)data['+DM'] = np.where(data['+DM'] < 0, 0, data['+DM'])data['-DM'] = np.where((data['low'].shift(1) - data['low']) > (data['high'] - data['high'].shift(1)), data['low'].shift(1) - data['low'], 0)data['-DM'] = np.where(data['-DM'] < 0, 0, data['-DM'])# 计算平滑的 TR, +DM, -DMdata['TR_smooth'] = data['TR'].rolling(window=window).sum()data['+DM_smooth'] = data['+DM'].rolling(window=window).sum()data['-DM_smooth'] = data['-DM'].rolling(window=window).sum()# 计算 +DI 和 -DIdata['+DI'] = 100 * (data['+DM_smooth'] / data['TR_smooth'])data['-DI'] = 100 * (data['-DM_smooth'] / data['TR_smooth'])# 计算 DX 和 ADXdata['DX'] = 100 * abs(data['+DI'] - data['-DI']) / (data['+DI'] + data['-DI'])data['ADX'] = data['DX'].rolling(window=window).mean()return data# 计算贵州茅台的 ADX 指标
stock_data = calculate_adx(stock_data)# 打印结果
data[['high', 'low', 'close', '+DI', '-DI', 'ADX']]# 绘制 ADX 图表
plt.figure(figsize=(12, 8))
plt.subplot(2, 1, 1)
plt.plot(stock_data.index, stock_data['close'], label='Close Price', color='blue')
plt.title(f'{stock_code} Close Price')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid()plt.subplot(2, 1, 2)
plt.plot(stock_data.index, stock_data['+DI'], label='+DI', color='green')
plt.plot(stock_data.index, stock_data['-DI'], label='-DI', color='red')
plt.plot(stock_data.index, stock_data['ADX'], label='ADX', color='blue')
plt.title('ADX Indicator')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.grid()plt.tight_layout()
plt.show()
4. 代码解释
  • 获取数据:我们使用 Tushare 的 pro.daily 接口获取贵州茅台的日线数据,数据包括最高价、最低价和收盘价。

  • 计算 True Range (TR):TR 是衡量市场波动的真实范围,计算方式为最高价与最低价的差值、前一日收盘价与最高价的差值、前一日收盘价与最低价的差值三者中的最大值。

  • +DM 和 -DM:+DM 和 -DM 分别表示向上和向下的价格动向,用于衡量价格上涨和下跌的强度。

  • +DI 和 -DI:+DI 和 -DI 分别表示正向和负向的趋向指标,表示价格上涨或下跌的强度相对于真实范围的百分比。

  • DX 和 ADX:DX 是 +DI 和 -DI 的差值的绝对值除以其和的百分比,用于衡量趋势的强弱。ADX 是 DX 的移动平均值,表示趋势强度的平滑值。

5. 使用 ADX 的交易信号
  • 趋势强度判断:当 ADX 高于 25 时,通常表示市场处于强趋势状态,无论是上升趋势还是下降趋势;当 ADX 低于 20 时,表示市场处于无趋势状态或震荡阶段。

  • 结合 +DI 和 -DI:当 +DI 高于 -DI 且 ADX 上升时,表明上升趋势强烈,可以考虑买入;当 -DI 高于 +DI 且 ADX 上升时,表明下跌趋势强烈,可以考虑卖出。

6. 总结

平均趋向指数(ADX)是 A 股市场中衡量趋势强度的重要工具,通过分析 +DI、-DI 和 ADX 的变化,交易者可以判断当前市场是否具有明确的趋势,以及趋势的强度。ADX 常与其他技术指标结合使用,以便更好地识别市场的交易机会和风险。

相关文章:

量化交易系统开发-实时行情自动化交易-4.1.3.A股平均趋向指数(ADX)实现

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来继续说说A股平均趋向指数实现。 …...

tcp的网络惊群问题

1. SO_REUSEPORT 可以解决epoll的惊群问题 但是&#xff0c;现在的 TCP Server&#xff0c;一般都是 多进程多路IO复用(epoll) 的并发模型&#xff0c;比如我们常用的 nginx 。如果使用 epoll 去监听 accept socket fd 的读事件&#xff0c;当有新连接建立时&#xff0c;所有进…...

云原生之运维监控实践-使用Prometheus与Grafana实现对Nginx和Nacos服务的监测

背景 如果你要为应用程序构建规范或用户故事&#xff0c;那么务必先把应用程序每个组件的监控指标考虑进来&#xff0c;千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章&#xff0c;当…...

软考教材重点内容 信息安全工程师 第 4 章 网络安全体系与网络安全模型

4,1 网络安全体系的主要特征: (1)整体性。网络安全体系从全局、长远的角度实现安全保障&#xff0c;网络安全单元按照一定的规则&#xff0c;相互依赖、相互约束、相互作用而形成人机物一体化的网络安全保护方式。 (2)协同性。网络安全体系依赖于多种安全机制&#xff0c;通过各…...

机器学习——期末复习 重点题归纳

第一题 问题描述 现有如下数据样本&#xff1a; 编号色泽敲声甜度好瓜1乌黑浊响高是2浅白沉闷低否3青绿清脆中是4浅白浊响低否 &#xff08;1&#xff09;根据上表&#xff0c;给出属于对应假设空间的3个不同假设。若某种算法的归纳偏好为“适应情形尽可能少”&#xff0c;…...

MYSQL——数据更新

一、插入数据 1.插入完整的数据记录 在MYSQL中&#xff0c;使用SQL语句INSERT插入一条完整的记录&#xff0c;语法如下&#xff1a; INSERT INTO 表名 [(字段名1[,...字段名n])] VALUES (值1[...,值n]); 表名——用于指定要插入的数据的表名 字段名——用于指定需要插入数据…...

Vite 基础理解及应用

文章目录 概要Vite基础知识点1. 快速启动和热更新热更新原理 2. 基于ES模块的构建3. 对不同前端框架的支持 vite.config.js配置实例1. 基本结构2. 服务器相关配置3. 输入输出路径配置4. 打包优化配置 项目构建一、项目初始化二、项目结构理解三、CSS处理四、静态资源处理五、构…...

[JAVA]用MyBatis框架实现一个简单的数据查询操作

基于在前面几章我们已经学习了对MyBatis进行环境配置&#xff0c;并利用SqlSessionFactory核心接口生成了sqlSession对象对数据库进行交互&#xff0c;执行增删改查操作。这里我们就先来学习如何对数据进行查询的操作&#xff0c;具体查询操作有以下几个步骤 创建实体类创建Ma…...

CSS 样式的优先级?

在CSS中&#xff0c;样式的优先级决定了当多个样式规则应用于同一个元素时&#xff0c;哪个样式会被最终使用。以下是一些决定CSS样式优先级的规则&#xff1a; 就近原则&#xff1a; 最后应用在元素上的样式具有最高优先级。这意味着如果两个选择器都应用了相同的样式&#xf…...

Linux驱动开发快速入门——字符设备驱动(直接操作寄存器设备树版)

Linux驱动开发快速入门——字符设备驱动 前言 笔者使用开发板型号&#xff1a;正点原子的IMX6ULL-alpha开发板。ubuntu版本为&#xff1a;20.04。写此文也是以备忘为目的。 字符设备驱动 本小结将以直接操作寄存器的方式控制一个LED灯&#xff0c;可以通过read系统调用可以…...

数据结构《栈和队列》

文章目录 一、什么是栈&#xff1f;1.1 栈的模拟实现1.2 关于栈的例题 二、什么是队列&#xff1f;2.2 队列的模拟实现2.2 关于队列的例题 总结 提示&#xff1a;关于栈和队列的实现其实很简单&#xff0c;基本上是对之前的顺序表和链表的一种应用&#xff0c;代码部分也不难。…...

C# 超链接控件LinkLabel无法触发Alt快捷键

在C#中&#xff0c;为控件添加快捷键的方式有两种&#xff0c;其中一种就是Windows中较为常见的Alt快捷键&#xff0c;比如运行对话框&#xff0c;记事本菜单等。只需要按下 Alt 框号中带下划线的字母即可触发该控件的点击操作。如图所示 在C#开发中&#xff0c;实现类似的操作…...

JVM类加载过程-Loading

一、Class对象的生命周期 .class文件是如何加载到内存中:.class文件是ClassLoader通过IO将文件读到内存,再通过双亲委派的模式进行Loading,再Linking、以及Initializing,代码调用等一系列操作后,进行GC,组成完整的生命周期; 二、双亲委派模式(Loading的过程): 1、类…...

2024年11月19日Github流行趋势

项目名称&#xff1a;build-your-own-x 项目维护者&#xff1a;danistefanovic, rohitpaulk, sarupbanskota 等项目介绍&#xff1a;通过从零开始重新创建你最喜欢的技术来掌握编程。项目star数&#xff1a;312,081项目fork数&#xff1a;29,004 项目名称&#xff1a;freqtrad…...

详细描述一下Elasticsearch索引文档的过程?

大家好&#xff0c;我是锋哥。今天分享关于【详细描述一下Elasticsearch索引文档的过程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 详细描述一下Elasticsearch索引文档的过程&#xff1f; Elasticsearch的索引文档过程是其核心功能之一&#xff0c;涉及将数据存储到…...

基于css的Grid布局和vue实现点击左移右移轮播过渡动画效果

直接上代码&#xff0c;以下代码基于vue2,需要Vue3或者react可以使用国内直连GPT/Claude来帮你转换下 代码如下&#xff1a; // ScrollCardsGrid.vue <template><div class"scroll-cards-container"><!-- 左箭头 --><div v-show"showLef…...

HarmonyOS NEXT应用元服务开发Intents Kit(意图框架服务)习惯推荐方案概述

一、习惯推荐是HarmonyOS学习用户的行为习惯后做出的主动预测推荐。 1.开发者将用户在应用/元服务内的使用行为向HarmonyOS共享&#xff0c;使得HarmonyOS可以基于共享的数据学习用户的行为习惯。 2.在HarmonyOS学习到用户的行为习惯后&#xff0c;会给用户推荐相应功能&#x…...

【AtCoder】Beginner Contest 380-F.Exchange Game

题目链接 Problem Statement Takahashi and Aoki will play a game using cards with numbers written on them. Initially, Takahashi has N N N cards with numbers A 1 , … , A N A_1, \ldots, A_N A1​,…,AN​ in his hand, Aoki has M M M cards with numbers B …...

30. 并发编程

一、什么是多任务 如果一个操作系统上同时运行了多个程序&#xff0c;那么称这个操作系统就是 多任务的操作系统&#xff0c;例如&#xff1a;Windows、Mac、Android、IOS、Harmony 等。如果是一个程序&#xff0c;它可以同时执行多个事情&#xff0c;那么就称为 多任务的程序。…...

【包教包会】CocosCreator3.x框架——带翻页特效的场景切换

一、效果演示 二、如何获取 1、https://gitee.com/szrpf/TurnPage 2、解压&#xff0c;导入cocos creator&#xff08;版本3.8.2&#xff09;&#xff0c;可以直接运行Demo演示 三、算法思路 1、单场景 页面预制体 通过loadScene来切换页面&#xff0c;无法实现页面特效。…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...