Python 实现 ATR 指标计算(真实波幅):股票技术分析的利器系列(10)

Python 实现 ATR 指标计算(真实波幅):股票技术分析的利器系列(10)

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


介绍

ATR(真实波幅)是一种技术指标,用于衡量市场波动性的程度

优点缺点
提供波动性度量,有助于风险管理和交易决策ATR本身不提供买卖信号,需要结合其他指标使用
简单易懂,计算方法清晰对于极端行情,ATR可能无法准确反映实际波动
可适用于不同市场和时间周期信号滞后,因为ATR是基于历史数据计算的
可以帮助设定止损和止盈水平
可以作为确定交易仓位大小的参考

先看看官方介绍:

ATR(真实波幅)
用法
今日振幅、今日最高与昨收差价、今日最低与昨收差价中的最大值,为真实波幅,求真实波幅的N日移动平均
参数:N为天数,一般取14

算法解释

MTR:MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR:MA(MTR,N);
  1. Mean True Range (MTR):

    MTR代表的是平均真实波幅,它是真实波幅(TR)的移动平均值。TR是用来度量单个交易周期内的价格波动性的指标,其计算方法是当日最高价和最低价之间的差值,当日最高价和前一个交易日的收盘价之间的差值,以及当日最低价和前一个交易日的收盘价之间的差值中的最大值。MTR通过对TR进行移动平均来平滑价格波动性的波动,因此提供了更稳定的参考。

  2. Average True Range (ATR):

    ATR也是用来衡量价格波动性的指标,但它直接计算了一段时间内的平均波幅。与MTR不同,ATR并没有对真实波幅进行平均化处理,而是直接计算了一定时期内的TR的平均值。ATR通常用于确定价格波动性的程度,例如,较大的ATR值表示市场波动较大,而较小的ATR值表示市场波动较小。

代码

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

核心代码

# 计算 ATR
def calculate_atr(df, n=14):
    # 计算真实范围(True Range)
    df['HL'] = df['HIGH'] - df['LOW']
    df['HC'] = abs(df['CLOSE'].shift(1) - df['HIGH'])
    df['LC'] = abs(df['CLOSE'].shift(1) - df['LOW'])
    df['MTR'] = df[['HL', 'HC', 'LC']].max(axis=1)

    # 计算ATR
    df['ATR'] = df['MTR'].rolling(window=n).mean()

    return df.drop(['HL', 'HC', 'LC'], axis=1)

df['HL'] = df['HIGH'] - df['LOW']: 这一行计算了每个交易周期内的价格范围,即当日最高价和最低价之间的差值,结果保存在DataFrame的新列’HL’中。

df['HC'] = abs(df['CLOSE'].shift(1) - df['HIGH']): 这一行计算了当日最高价与前一个交易日收盘价之间的价差的绝对值,结果保存在DataFrame的新列’HC’中。shift(1)函数将CLOSE列向上偏移一个位置,以便与前一个交易日的CLOSE值进行计算。

df['LC'] = abs(df['CLOSE'].shift(1) - df['LOW']): 这一行计算了当日最低价与前一个交易日收盘价之间的价差的绝对值,结果保存在DataFrame的新列’LC’中。

df['MTR'] = df[['HL', 'HC', 'LC']].max(axis=1): 这一行计算了每个交易周期内的真实范围(Mean True Range)。它取了之前计算的’HL’、'HC’和’LC’列的最大值,结果保存在DataFrame的新列’MTR’中。max(axis=1)表示沿着每一行取最大值。

df['ATR'] = df['MTR'].rolling(window=n).mean(): 这一行计算了ATR(Average True Range)。它对MTR列进行滚动平均,使用了窗口大小为’n’的移动窗口。结果保存在DataFrame的新列’ATR’中。这里假设变量’n’已经在代码中定义并赋值。

完整代码

import pandas as pd

import a_get_data

# 计算 ATR
def calculate_atr(df, n=14):
    # 计算真实范围(True Range)
    df['HL'] = df['HIGH'] - df['LOW']
    df['HC'] = abs(df['CLOSE'].shift(1) - df['HIGH'])
    df['LC'] = abs(df['CLOSE'].shift(1) - df['LOW'])
    df['MTR'] = df[['HL', 'HC', 'LC']].max(axis=1)

    # 计算ATR
    df['ATR'] = df['MTR'].rolling(window=n).mean()

    return df.drop(['HL', 'HC', 'LC'], axis=1)



data = {
    'CLOSE': 填每日收盘的数据,
    'HIGH': 填每日最高的数据,
    'LOW': 填每日最低的数据
    'OPEN': 填每日开盘的数据
}

df = pd.DataFrame(data)

# 计算ATR
df = calculate_atr(df)

print(df)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频评论挖掘软件|抖音视频下载工具

针对抖音视频下载的需求,我们开发了一款功能强大的工具,旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们希望用户能够通过简单的关键词搜索,实现自动批量抓取视频,并根据需要进行选择性批量下载。因此&#…

备战蓝桥杯—— 双指针技巧巧答链表1

对于单链表相关的问题,双指针技巧是一种非常广泛且有效的解决方法。以下是一些常见问题以及使用双指针技巧解决: 合并两个有序链表: 使用两个指针分别指向两个链表的头部,逐一比较节点的值,将较小的节点链接到结果链表…

算法沉淀——FloodFill 算法(leetcode真题剖析)

算法沉淀——FloodFill 算法 01.图像渲染02.岛屿数量03.岛屿的最大面积04.被围绕的区域05.太平洋大西洋水流问题06.扫雷游戏07.衣橱整理 Flood Fill(泛洪填充)算法是一种图像处理的基本算法,用于填充连通区域。该算法通常从一个种子点开始&am…

力扣经典题目解析--下一个排列(字节面试题)

这是一道中等难度的字节秋招面试题,很多伙伴都被问到了,同时也有很多同学表示连题目都看不懂,我们来看下原题 原题 题目地址: . - 力扣(LeetCode) 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例…

(九)springmvc+mybatis+dubbo+zookeeper分布式架构 整合 - maven构建ant-framework核心代码Base封装

今天重点讲解的是ant-framework核心代码Base封装过程。 因为涉及到springmvc、mybatis的集成,为了使项目编码更简洁易用,这边将基础的BASE进行封装,其中包括:BaseBean、BaseDao、BaseService、CRUD的基础封装、分页组件的封装、m…

STM32物联网(封装AT指令进行TCP连接及数据的接收和发送)

文章目录 前言一、AT指令函数封装1.向ESP8266发送数据函数2.设置ESP8266工作模式3.连接WIFI函数4.查询IP地址5.连接TCP服务器6.发送数据到TCP服务器7.接收并解析来自TCP服务器的数据8.关闭TCP服务器 二、代码测试总结 前言 本篇文章将继续带大家学习STM32物联网,那…

基于事件触发机制的孤岛微电网二次电压与频率协同控制MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 本模型质量非常高,运行效果完美。本模型为4机并联孤岛系统,在下垂控制的基础上加入二次控制,二次电压与频率协同控制策略利用事件触发的方法来减少控制器的更新次数。该方法…

2024图像处理分析与信息工程国际学术会议(IACIPIE2024)

2024图像处理分析与信息工程国际学术会议(IACIPIE2024) 会议简介 2024图像处理分析与信息工程国际学术会议(IACIPIE2024)将在中国长沙举行。 IACIPIE2024是一个年度会议,探讨图像处理分析和信息工程相关领域的发展和影响,旨在介…

树莓派 开启 I2C

sudo raspi-config喜欢或对你有帮助,点个赞吧,自己先点个嘿嘿。 有错误或者疑问还请评论指出。 我的个人网站 点击访问 hongweizhu.com。 END

第十二天-ppt的操作

目录 创建ppt文档 安装 使用 段落的使用 段落添加数据 段落中定义多个段落 自定义段落 ppt插入表表格 PPT插入图片 读取ppt 读取ppt整体对象 ​编辑 获取ppt文本 获取表格内容 创建ppt文档 安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python…

新能源汽车PACK电池包的气密性测试需要用到哪些快速密封连接器

PACK电池包是新能源汽车的重要部件之一,在全部组装完成后需要对其壳体进行气密性测试,以确保壳体的密封性能,避免有雨水、灰尘等外界侵扰拒之门外,从而保证电池的使用寿命不受损害。 新能源汽车PACK电池包 在做气密性测试时需要用…

力扣经典题目解析--旋转图像(字节二面)

题目 原题地址: . - 力扣(LeetCode) 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1…

如何使用ChatGPT创建一份优质简历

目录 第一步:明确目标和重点 第二步:与ChatGPT建立对话 第三步:整理生成的内容 第四步:注重行文风格 第五步:强调成就和量化结果 第六步:个性化和定制 第七步:反复修改和完善 总结 在现…

接口自动化如何处理用例依赖?

情况一 获取token 需要在所有接口用例前执行的用例,如登录接口获取到token。 这种情况不适合将这个获取token的方法写到任何一个测试用例文件里,应该写成fixture,并写入conftest文件,供全局使用。 如图,fixture获取到…

浅拷贝导致的bug

错误代码: //初始化formTableData的值 const formTableData ref({saleOrderTime:,saleOrderDetails:[] });const showModal async (item) > {//调接口获取后端返回的数据let data (await api.searchSaleOrderById({saleOrderId:item.id})).dataconsole.log(&…

open3d 连接两个点云

连接两个点云 一、连接两个点云二、代码三、结果1.coloud1点云2.cloud2点云3.cloud1 和 colud2 合并4.生成连接字段(拼接颜色) 四、相关链接五、问题与解决方案1.问题2.解决方案 一、连接两个点云 看代码吧。。。 二、代码 import numpy as np import…

1TB! 台湾最新倾斜摄影3DTiles数据分享

之前的文章分享了546GB香港倾斜摄影3DTiles数据,主要是验证倾斜模型3DTiles转换工具的生产效率和数据显示效率,结果对比可以看出无论是数据生产速度以及成果数据显示效率上,都优于其他两种技术路线。最近使用倾斜模型3DTiles工具生产了台湾地…

Zookeeper简介及选举机制

1.概述 Zookeeper是一个开源的,分布式的,为分布式框架(如下图中的Hadoop和Hive)提供协调服务的Apache项目。 工作机制:基于观察者设计模式的分布式服务管理框架,负责存储和管理数据,接受观察者…

查看navicat保存的数据库连接密码

背景 经常使用navicat的朋友可能会碰到忘记数据库连接密码的情况,自然会想到navicat连接配置中就保存了密码。 个人经验,按以下步骤可查看密码明文 本人在mac上使用的navicat版本 1,导出connection_local.ncx 点击OK导出保存为connection_l…

文件上传失败原因汇总(个人情况总结)

1.后端配置application里有服务限制大小 # Spring spring:servlet:multipart:max-file-size: 500MBmax-request-size: 500MB 2.如果你用了dubbo,要调整生产者和消费者超时时间以及payload大小,最好是dubbo自增策略,防止用了dubbo的服务端口冲…