移动平均指标用于各种交易策略,以发现价格数据的长期趋势。简单移动平均线策略的一个潜在缺点是它们对所有价格的权重相同,而您可能希望最近的价格占有更大的比重。指数移动平均线 (EMA) 是实现这一目标的一种方法。

下面我们通过代码示例详细介绍 EMA 的实现,并将其与 SMA (简单移动平均)进行比较。

EMA 通过加权乘数赋予最新价格更多权重。这个乘数应用于最后一个价格,因此它比其他数据点占移动平均线更大的部分。EMA 是通过采用最近的价格(我们将其称为“时间 t 的价格”) 减去前一个时间段 (EMA_{t-1})。此差异由您将 EMA 设置为 (N) 并加回到 EMA_{t-1}的时间段数加权。在数学上,我们可以这样写:

你可能已经注意到上面的等式有一个小问题,它是如何开始的?它参考了最后一个时期的 EMA,所以如果你进行第一次计算,它参考的是什么?这通常可以通过替换简单移动平均线 (SMA) 来初始化计算来延缓,这样您就可以在第一次之后的所有时间段构建 EMA。

让我们通过导入我们的包,用 Python 中的一个简单示例来展示它是如何工作的。

import numpy as np
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt

从这里开始,我们将构建两个函数来协同工作并计算我们的指标。第一个函数将是我们上面概述的公式的简单实现:

def _calcEMA(P, last_ema, N):return (P - last_ema) * (2 / (N + 1)) + last_ema

第二个函数将计算我们所有数据的 EMA,首先使用 SMA 对其进行初始化,然后迭代我们的数据以使用我们的 SMA 列中的值更新每个后续条目,或者调用我们上面定义的 _calcEMA 函数来处理大于 N的值。

def calcEMA(data, N):# Initialize seriesdata['SMA_' + str(N)] = data['Close'].rolling(N).mean()ema = np.zeros(len(data))for i, _row in enumerate(data.iterrows()):row = _row[1]if i < N:ema[i] += row['SMA_' + str(N)]else:ema[i] += _calcEMA(row['Close'], ema[i-1], N)data['EMA_' + str(N)] = ema.copy()return data

现在,让我们获取一些数据,看看它是如何工作的。我们将拉出比回测更短的时间段,并比较 EMA 和 SMA 的 10、50 和 100 天。

ticker = 'BABA'
yfObj = yf.Ticker(ticker)
data = yfObj.history(ticker, start='2018-01-01', end='2020-12-31')N = [10, 50, 100]
_ = [calcEMA(data, n) for n in N]colors = plt.rcParams['axes.prop_cycle'].by_key()['color']fig, ax = plt.subplots(figsize=(18, 8))
ax.plot(data['Close'], label='Close')
for i, n in enumerate(N, 1):ax.plot(data[f'EMA_{n}'], label=f'EMA-{n}', color=colors[i])ax.plot(data[f'SMA_{n}'], label=f'SMA-{n}', color=colors[i], linestyle=':')ax.legend()
ax.set_title(f'EMA and Closing Price Comparison for {ticker}')
plt.show()

您可以在上图中看到,EMA 比 SMA 对最近的变化更敏感。较短的时间范围也比较长的时间范围更具响应性,较长的时间范围具有可以追溯到几个月或更长时间的价格“记忆”。

所有类型的移动平均线都是滞后指标,这意味着它们只能告诉您价格中已经发生了什么。然而,这并不意味着它们不能用于识别趋势和制定使用一个或多个移动平均指标的策略。如果您有想法,请继续进行测试,看看如何结合 EMA、SMA 和其他值来开发新的盈利交易策略。

扫描本文最下方二维码获取全部完整源码和Jupyter Notebook 文件打包下载。

长按扫码获取完整源码

用 Python 实现股票指数移动平均线相关推荐

  1. Python绘制指数加权平均线

    以下是绘制指数加权平均线的 Python 代码 # -*- coding: utf-8 -*- import numpy as np np.random.seed(1337) # for reprod ...

  2. python : pandas 画移动平均线

    数据文件 66001_.txt 内容格式: date,jz0,jz1,jz2,jz3,jz4,jz5 2012-12-28,0.9326,0.8835,1.0289,1.0027,1.1067,1.0 ...

  3. Python matplotlib 柱状图 添加平均线

    直接上代码 主要是在代码中添加 ax.hlines(33,-1,7,linestyles='--',colors='#4472C4',label='平均值') import matplotlib.py ...

  4. python使用pyechart快速绘制各类可视化表格-包括带平均线的折线图、雷达图等等,超实用!(不断更新)

    近期由于在计算绩效的时候,老板需要每个季度针对绩效给一个报告PPT,之前总是用excel来进行数据的统计,以及画图来贴进PPT里面,在接触了PYTHON的一段时间后,发现可以将数据导入就自动生成表格, ...

  5. python 移动平均线_Python中的移动平均线

    python 移动平均线 There are situations, particularly when dealing with real-time data, when a conventiona ...

  6. 移动平均线ma分析_使用动态移动平均线构建交互式库存量和价格分析图

    移动平均线ma分析 I decided to code out my own stock tracking chart despite a wide array of freely available ...

  7. Python数据分析之股票双均线策略制定

    Python数据分析之股票双均线策略制定 需求:双均线策略制定 库 tushare包 预处理数据 df = pd.read_csv('./maotai.csv').drop(labels='Unnam ...

  8. 量化投资常用技能——绘图篇 2:绘制移动平均线

    量化投资常用技能--绘图篇 2 前言 移动平均线 使用numpy库计算移动平均值 量化投资第三方库:abupy 欢迎大家关注我们 我们的抖音号:金融观察(JRGC8888) 前言 上一篇文章" ...

  9. 股票移动平均线matlab,股票的移动平均线 (图文)

    股票的移动平均线 [泸指]股票的移动平均线 移动平均线是个强大的工具,能够更清晰地展示一系列无规律的数值变化 (比如股市波动).此外,泸指移动平均线还可别除任何周期性变化(正常的季节性温度变化)的影响 ...

最新文章

  1. 别看乐高模板了!利用计算机视觉技术,这个软件几秒就识别满地积木,还能激发灵感...
  2. 维基百科创始人:将欧盟隐私规定推至全球将带来灾难
  3. Disruptor 线程间共享数据无需竞争
  4. 一次面试引发的思考(中小型网站优化思考) (转)
  5. mysql yum安装与配置文件_MySQL 8.0 yum安装和配置
  6. python保存mat文件_python读取文件——python读取和保存mat文件
  7. Openssl genrsa命令
  8. VB实际读写INI文件
  9. android经典动态壁纸,android中自定义动态壁纸
  10. 论文篇-----基于拉依达准则的交通数据粗大误差处理优化方法
  11. IDEA2020版本下载、安装
  12. Linux7安装oracle11g报错 Error in invoking target 'agen
  13. 一个能够让你快速从html结构生成css结构的vscode插件
  14. 微观经济学案例分析(八)
  15. 【C#】基于System.Speech库实现语音合成与语音识别
  16. 怎样重启Gunicorn
  17. 在线扫描php后门_webshell后门扫描-PHP版
  18. 【计算机网络实验】 主机路由器服务器的基本配置 | Cisco Packet Tracer
  19. zk-web框架的学习之路,重新认识Java,Eclipse安装zk插件
  20. 【R语言数据科学】:变量选择(三)主成分回归和偏最小二乘回归

热门文章

  1. gks的定义计算机图形学,计算机图形学(概念)
  2. 火星存在大型地下水系统,火星或曾是一片海洋
  3. redis的使用(转载自:http://www.cnblogs.com/edisonfeng/p/3571870.html)
  4. 第二天-Hcia回顾(2)
  5. #HHD32F107# AD采集
  6. java 反射 对象的方法_java通过反射创建对象并调用方法
  7. Excel排序 九度教程第4题
  8. 大数据征信与个人隐私保护
  9. 微型计算机原理中的mov,微机原理考试题目类型
  10. 高频交易是如何发展起来的?