Python实现EMV指标计算:股票技术分析的利器系列(2)

Python实现EMV指标计算:股票技术分析的利器系列(2)

    • 介绍
      • 算法解释:
    • 核心代码:
      • rolling函数介绍
    • 完整代码:
    • 一定要看


介绍

先看看官方介绍:

EMV(简易波动指标)
用法
1.EMV 由下往上穿越0 轴时,视为中期买进信号;
2.EMV 由上往下穿越0 轴时,视为中期卖出信号;
3.EMV 的平均线穿越0 轴,产生假信号的机会较少;
4.当ADX 低于±DI时,本指标失去效用;
5.须长期使用EMV指标才能获得最佳利润。

算法解释:

VOLUME:=MA(VOL,N)/VOL;
MID:=100*(HIGH+LOW-REF(HIGH+LOW,1))/(HIGH+LOW);
EMV:MA(MID*VOLUME*(HIGH-LOW)/MA(HIGH-LOW,N),N);
MAEMV:MA(EMV,M);
指标描述计算方法
MA (Moving Average)移动平均线通过计算一段时间内的价格平均值来观察价格的长期趋势。
VOLUME成交量指在某一时间段内股票交易的总量。成交量通常被认为是价格走势的重要指标之一。
MID价格中点用于衡量价格在一个周期内的相对位置。计算方式为100*(最高价+最低价-上一周期的最高价+最低价)/(最高价+最低价)。
EMV (Ease of Movement)动量潜在指标通过价格变动和成交量的变化率之间的关系来计算,用于衡量价格相对于成交量的变化速度。
MAEMVEMV的移动平均值通过计算EMV的移动平均线,可以进一步平滑数据,更好地观察价格走势的长期趋势。

这些数据都依赖于收盘价格。我们找一个股票进行参考:

在这里插入图片描述

核心代码:

  • data:包含股票数据的DataFrame。
  • n:用于计算移动平均值的窗口大小。
  • m:用于计算MAEMV的窗口大小。

执行步骤:

  1. 计算VOLUME:首先计算成交量的移动平均值,并将其除以原始成交量,得到VOLUME。
  2. 计算MID:根据公式计算价格中点(MID)。
  3. 计算EMV:根据给定的数据,计算EMV值。这里使用了价格中点、VOLUME以及价格波动范围的移动平均值。
  4. 计算MAEMV:计算EMV的移动平均值,以平滑数据。

返回四个Series对象,分别是VOLUME、MID、EMV和MAEMV。


def calculate_EMV(data, n, m):# 计算VOLUMEdata['MA_VOL'] = data['VOL'].rolling(window=n).mean()data['VOLUME'] = data['MA_VOL'] / data['VOL']# 计算MIDdata['MID'] = 100 * (data['HIGH'] + data['LOW'] - data['HIGH'].shift(1) - data['LOW'].shift(1)) / (data['HIGH'] + data['LOW'])# 计算EMVdata['HL_MA'] = data['HIGH'] - data['LOW']data['MA_HL'] = data['HL_MA'].rolling(window=n).mean()data['EMV'] = data['MID'] * data['VOLUME'] * data['HL_MA'] / data['MA_HL']data['EMV'] = data['EMV'].rolling(window=n).mean()# 计算MAEMVdata['MAEMV'] = data['EMV'].rolling(window=m).mean()return data['VOLUME'], data['MID'], data['EMV'], data['MAEMV']

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 pddef calculate_EMV(data, n, m):# 计算VOLUMEdata['MA_VOL'] = data['VOL'].rolling(window=n).mean()data['VOLUME'] = data['MA_VOL'] / data['VOL']# 计算MIDdata['MID'] = 100 * (data['HIGH'] + data['LOW'] - data['HIGH'].shift(1) - data['LOW'].shift(1)) / (data['HIGH'] + data['LOW'])# 计算EMVdata['HL_MA'] = data['HIGH'] - data['LOW']data['MA_HL'] = data['HL_MA'].rolling(window=n).mean()data['EMV'] = data['MID'] * data['VOLUME'] * data['HL_MA'] / data['MA_HL']data['EMV'] = data['EMV'].rolling(window=n).mean()# 计算MAEMVdata['MAEMV'] = data['EMV'].rolling(window=m).mean()return data['VOLUME'], data['MID'], data['EMV'], data['MAEMV']# 示例数据:数据可以参考附件文件,这里就展示一部分
data = {'HIGH': [35.6, 36.74, 38.21, 38.32, 38.2, 37.77, 38.88, 38.65, 38.8, 42.63, 37.75, 37.85, 37.74, 39.97, 38.88, 38.5, 39.07, 38.35, 36.33, 36.5, 38.3, 35.06, 35.66, 35.5, 33.76, 32.0, 34.0, 35.39, 35.1, 35.36, 33.74, 34.25, 37.41, 38.76, 39.0, 37.4, 36.83, 36.99, 37.45, 36.3, 36.4, 36.25, 36.21, 34.95, 33.29, 33.55, 33.05, 32.38, 34.38, 34.01, 34.01, 34.0, 36.3, 33.69, 32.36, 32.96, 32.51, 33.86, 33.44, 32.87, 32.23, 32.68, 31.26, 29.7, 28.36, 28.2, 27.25, 27.1, 27.98, 28.18, 28.36, 27.84, 26.85, 26.03, 25.68, 24.9, 24.98, 24.69, 25.33, 24.95, 23.98, 23.71, 22.87, 23.55, 23.6, 23.38, 22.82, 22.34, 23.99, 24.46, 22.47, 21.39, 20.36, 19.73, 19.44, 18.06, 17.17, 18.15, 17.31],'LOW': [32.89, 33.08, 36.43, 35.97, 36.4, 35.13, 36.3, 37.0, 37.27, 37.91, 35.88, 35.64, 35.9, 36.3, 37.52, 37.28, 36.4, 37.0, 33.34, 32.65, 34.6, 33.0, 32.8, 33.58, 30.8, 30.4, 30.5, 33.02, 33.09, 33.5, 32.72, 32.8, 35.0, 36.51, 36.22, 35.75, 35.84, 35.65, 35.89, 35.37, 35.45, 35.34, 34.38, 32.91, 32.33, 32.43, 32.34, 31.34, 31.3, 33.09, 32.81, 33.04, 34.11, 31.88, 31.72, 32.04, 31.68, 32.37, 32.35, 31.9, 31.8, 30.0, 29.07, 27.96, 27.01, 26.6, 25.89, 26.36, 26.4, 27.09, 27.68, 26.85, 24.7, 25.29, 24.48, 23.77, 23.72, 23.5, 24.0, 23.59, 23.0, 22.63, 21.85, 21.88, 22.7, 21.39, 21.2, 21.21, 21.7, 22.55, 20.84, 20.15, 18.82, 18.41, 17.48, 16.43, 15.3, 15.88, 15.5],'VOL': [45580764, 54578742, 75472698, 55958044, 43471376, 39089870, 65993166, 51725987, 59664851, 95828287, 64692075, 54151833, 54581088, 75630350, 40636266, 32590643, 46535705, 32208972, 65659275, 67488698, 57100011, 37509303, 44494331, 42006720, 56294769, 34236402, 57346512, 52584472, 46156969, 37854741, 30233442, 36844909, 74136219, 93002594, 72105475, 50722258, 30929788, 37269600, 32723194, 27491825, 26022766, 29478877, 37061997, 48042058, 22018987, 18617008, 16107171, 24764608, 47160698, 27157282, 27117523, 19243785, 55337568, 46107093, 22111567, 26169489, 18677657, 33233951, 22255922, 16218969, 11992250, 20560729, 37683555, 33974856, 28911947, 30993108, 23882463, 16380457, 38697438, 33720984, 33462661, 24071288, 40303016, 19186983, 26433462, 26414742, 36953528, 29789634, 54935510, 43667255, 28811811, 39282170, 38366540, 76358853, 40857274, 33171789, 44004578, 35894397, 70170103, 110181175, 62916228, 44189093, 46894875, 46711694, 45525470, 50214148, 56091415, 68644768, 78480358]
}# 转换为DataFrame
df = pd.DataFrame(data)# 设置参数
N = 14
M = 9# 计算指标
volume, mid, emv, maemv = calculate_EMV(df, N, M)print("VOLUME:")
print(volume)
print("\nMID:")
print(mid)
print("\nEMV:")
print(emv)
print("\nMAEMV:")
print(maemv)

四舍五入后:就是 -2.235,和图片一致了,数据越多指标小数点末尾也会随之变化

在这里插入图片描述

一定要看

EMV 指标的准确性取决于所选择的窗口大小以及市场的波动性。一般来说,窗口大小越大,需要的数据量也就越多才能获得更准确的结果。

通常来说,为了获得相对准确的 EMV 指标,至少需要足够长的时间序列数据,以便考虑到市场的变化和波动性。具体来说,EMV 的准确性至少需要数月甚至数年的数据,这样可以更好地捕捉到市场的长期趋势和周期性变化。

然而,对于具体的市场和交易策略,可能需要进行测试和优化,以确定合适的窗口大小和所需的历史数据量。

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

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

相关文章

Base 链上最火的 meme 叙事:All Your Base Are Belong To Us($AYB)

“All Your Base Are Belong To Us($AYB)!这句让人看似摸不着头脑互联网老梗,却正在成为 Base 链上众多 KOL、加密玩家、巨鲸投资者们共同追捧的新 meme 密码。” 最近在与 Base 链相关的各大加密社区,用户们纷纷通过“…

AI引领低代码革命:未来应用开发的新主流

距离ChatGPT发布已经过去快一年时间。 在这一年里,以ChatGPT为代表的自然语言处理领域的重大进步,为我们的对话系统和语言交流提供了更加智能和自然的体验。随着ChatGPT的应用不断扩大,人们开始认识到人工智能(AI)技术…

知识图谱与语言预训练:深度融合的智能问答时代

目录 前言1 直接使用预训练模型 vs. 知识图谱与预训练相结合1.1 直接使用预训练模型1.2 构建知识图谱后与预训练相结合 2 预训练语言模型的发展历程2.1 Word2Vec和GloVe2.2 ELMo2.3 BERT 3 知识图谱对预训练的助力3.1 弥补低频实体信息的不足3.2 提供领域知识的支持 4 典型知识…

详解结构体内存对齐及结构体如何实现位段~

目录 ​编辑 一:结构体内存对齐 1.1对齐规则 1.2.为什么存在内存对齐 1.3修改默认对齐数 二.结构体实现位段 2.1什么是位段 2.2位段的内存分配 2.3位段的跨平台问题 2.4位段的应用 2.5位段使用的注意事项 三.完结散花 悟已往之不谏,知来者犹可…

【蓝桥杯冲冲冲】[CEOI2015 Day2] 世界冰球锦标赛

蓝桥杯备赛 | 洛谷做题打卡day32 文章目录 蓝桥杯备赛 | 洛谷做题打卡day32题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示样例解释 题解代码我的一些话 [CEOI2015 Day2] 世界冰球锦标赛 题目描述 译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的…

2023年全国职业院校技能大赛软件测试赛题第4套

2023年全国职业院校技能大赛 软件测试赛题第4套 赛项名称: 软件测试 英文名称: Software Testing 赛项编号: GZ034 归属产业: 电子与信息大类 …

(三十七)大数据实战——Solr服务的部署安装

前言 Solr是一个基于Apache Lucene的开源搜索平台,它提供了强大的全文搜索、分布式搜索和数据分析功能。Solr 可以用于构建高性能的搜索应用程序,支持从海量数据中快速检索和分析信息。Solr 使用倒排索引和先进的搜索算法,可实现快速而准确的…

物联网技术讲解:蓝牙无线通讯技术

相信大家对蓝牙肯定不会陌生,但蓝牙是怎么来的?为什么叫蓝牙不叫黄牙呢?它是如何发展至今?以及它与物联网未来的发展趋势是什么,今天我们一起来深度的聊一聊。蓝牙无处不在:扬声器、无线耳机、汽车、可穿戴…

【Linux学习】生产者-消费者模型

目录 22.1 什么是生产者-消费者模型 22.2 为什么要用生产者-消费者模型? 22.3 生产者-消费者模型的特点 22.4 BlockingQueue实现生产者-消费者模型 22.4.1 实现阻塞队列BlockQueue 1) 添加一个容器来存放数据 2)加入判断Blocking Queue情况的成员函数 3)实现push和pop方法 4)完…

微软Bing地图获取栅格瓦片或图块

bing地图获取栅格瓦片或图块 获取元数据 https://dev.virtualearth.net/REST/v1/Imagery/Metadata/{imagerySet}?key{BingMapsKey}imagerySet:要为其请求元数据的影像类型。官方说中国支持以下两个值:RoadOnDemand、VibrantDark BingMapsKey&#xff…

快速的搭建一个临时的 Linux 系统instantbox

centos 安装 docker-CSDN博客 首先要有docker && docker-compose mkdir instantbox && cd $_ bash <(curl -sSL https://raw.githubusercontent.com/instantbox/instantbox/master/init.sh) docker-compose up -d instantbox: instantbox 可以让你快速的搭…

【教程】MySQL数据库学习笔记(三)——数据定义语言DDL(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 文章目录 【MyS…