利用Python分析金融交易中的滚动Z值

news2024/11/26 8:28:02

大家好,在不断演变的证券交易领域,能够利用数据和统计学的力量提供重要的优势。无论是预测未来价格、分析市场趋势,还是简单地评估特定证券的波动性,数据驱动的见解已经改变了交易者对证券市场的处理方式。这就是Z值的用途,它是一种统计指标,可以为交易者提供有关证券的相对优势和定位的宝贵见解。

想象只需通过观察证券的历史价格和波动性,就能够简单地识别出证券何时可能被过度买入或卖出,这正是Z值可以提供的,本文将深入探讨如何利用Python(作为数据分析的强大工具)进行证券交易中的Z值计算和解读。

1.Z值介绍

Z值提供了一个数据点相对于均值的标准差距离的度量。在交易中,这可以帮助我们了解证券当前价格是否在统计上“正常”,或者是否为异常值。

如同表示正态分布的钟形曲线,大多数证券价格(假设它们服从正态分布,这是一个很大的假设,实际交易中通常并非如此)将位于中间附近。那些位于尾部,超出一定Z值(如1.5或-1.5)的证券,才会引起我们的兴趣。

图片

Z值公式:这是一个数学表示,详细说明了如何使用总体标准差对偏离均值的程度进行标准化。对于希望将证券价格相对于历史数据量化的交易者来说,这个方程式至关重要。

其中:

  • Z是Z值。

  • X是数据点的值。

  • μ是数据的平均值。

  • σ是标准差。

通过以Z值的视角分析股票价格,交易者可以识别潜在的买入/卖出机会。明显高于1.5的Z值可能表明该证券相对于其历史平均价格被高估,而明显低于-1.5的Z值可能表明相反情况。

2.获取数据和初步设置

在深入研究之前,装备正确的工具是至关重要的。通过导入相关的Python库,如用于获取证券数据的yfinance和用于可视化的matplotlib,可以确保一个顺利的开始。

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

为了评估证券的异常情况,接下来将目标锁定在一只特定的证券上——为了演示的目的,本文选择了“ASML.AS”。然后,我们使用yfinance库获取历史数据。

tickerSymbol = "ASML.AS"
tickerData = yf.Ticker(tickerSymbol)
tickerDf = tickerData.history(period='1d', start='2020-1-1', end='2023-12-25')

3.计算Z值

本文分析的核心是Z值公式,它有助于评估证券价格相对于其历史的“偏离程度”。针对多个滚动期来计算这个值,以捕捉短期和长期的异常情况。

rolling_mean = close_prices.rolling(window=period).mean()
rolling_std = close_prices.rolling(window=period).std()
z_scores = (close_prices - rolling_mean) / rolling_std

4. 使用信号可视化偏离

通过将滚动Z值与证券价格绘制在一起,我们可以了解证券行为“正常”的时间以及何时可能出现异常情况。特别是Z值超过±1.5的区域,这种视觉线索对于交易者非常重要。可以随意更改Z值的阈值。

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

# 常量
Z_THRESH = 2
PERIODS = [30, 60, 90]
TICKER_SYMBOL = "ASML.AS"
START_DATE = '2020-1-1'
END_DATE = '2023-12-25'


def fetch_data(ticker_symbol, start_date, end_date):
    """Fetches historical data for a given ticker symbol."""
    ticker_data = yf.Ticker(ticker_symbol)
    return ticker_data.history(period='1d', start=start_date, end=end_date)

def calculate_z_scores(close_prices, periods):
    """Calculates Z-scores for given periods."""
    z_scores_dict = {}
    for period in periods:
        # 计算给定周期的滚动平均值
        rolling_mean = close_prices.rolling(window=period).mean()      
        # 计算给定周期的滚动标准差
        rolling_std = close_prices.rolling(window=period).std()       
        # 计算收盘价的Z值
        z_scores = (close_prices - rolling_mean) / rolling_std      
        # 将Z值存储在以周期为关键字的字典中
        z_scores_dict[period] = z_scores
    return z_scores_dict

def plot_data(close_prices, z_scores_data):
    """Plots close prices and z-scores."""   
    
    # 为收盘价和Z值创建子图
    fig, (ax1, ax2) = plt.subplots(2, sharex=True, figsize=(20, 8))   
    
    # 在第一个子图上绘制收盘价
    ax1.plot(close_prices.index, close_prices, label='Close Prices')
    for period, z_scores in z_scores_data.items():
        # 在第二个子图上绘制每个时期的Z值
        ax2.plot(z_scores.index, z_scores, label=f'Z-Scores {period} days', alpha=0.7)       
        # 如果周期是列表中的第一个,则在第一个子图上绘制买入/卖出信号
        if period == PERIODS[0]:
            buy_signals = (z_scores < -Z_THRESH)
            sell_signals = (z_scores > Z_THRESH)
            ax1.plot(close_prices[buy_signals].index, close_prices[buy_signals], 'o', color='g', label='Buy Signal')
            ax1.plot(close_prices[sell_signals].index, close_prices[sell_signals], 'o', color='r', label='Sell Signal')
    # 为收盘价子图设置y标签和图例
    ax1.set_ylabel('Close Prices')
    ax1.legend(loc="upper left")
    ax1.grid(True)
    
    # 在Z值子图上绘制表示Z值阈值的水平线
    ax2.axhline(-Z_THRESH, color='red', linestyle='--')
    ax2.axhline(Z_THRESH, color='red', linestyle='--')   
    # 设置Z值子图的Y标签和图例
    ax2.set_ylabel('Z-Scores')
    ax2.legend(loc="upper left")
    ax2.grid(True)

    # 为整个绘图设置主标题
    plt.suptitle(f'{TICKER_SYMBOL} Close Prices and Z-Scores {Z_THRESH} Treshold')
    # 显示图表
    plt.show()

# 获取股票代码的历史数据
ticker_data = fetch_data(TICKER_SYMBOL, START_DATE, END_DATE)

# 计算指定时期的Z值
z_scores_data = calculate_z_scores(ticker_data['Close'], PERIODS)

# 绘制收盘价和Z值
plot_data(ticker_data['Close'], z_scores_data)

ASML.AS证券价格的变化与30天、60天和90天滚动Z值并列,绿色和红色标记分别表示基于Z值阈值的潜在买入和卖出点。

虽然Z值提供了一种数学方法来进行证券分析,但最重要的是要记住交易涉及众多因素。Z值可以是工具箱的一部分,但一定要将统计见解与全面的市场研究相结合。

 

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

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

相关文章

miRNA测序数据生信分析——第四讲,未知物种的生信分析实例

miRNA测序数据生信分析——第四讲&#xff0c;未知物种的生信分析实例 miRNA测序数据生信分析——第四讲&#xff0c;未知物种的生信分析实例1. 下载测序数据2. 原始数据质控——软件fastqc3. 注释tRNA和rRNA&#xff0c;使用Rfam数据库——软件blast&#xff0c;Rfam_statisti…

网页制作工具都有哪些?推荐这几款

随着网络的快速发展&#xff0c;网站迅速崛起&#xff0c;成为无数网络冲浪玩家的首选&#xff0c;网页设计师也成为各大互联网公司竞争的热点。当设计师开始时&#xff0c;他们总是不知道如何选择网页制作工具。以下将列出市场上流行的网页制作工具。设计师可以根据自己的需要…

Leetcode刷题详解——复写零

1.题目链接&#xff1a;复写零 2.题目描述 给你⼀个⻓度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写⼀遍&#xff0c;并将其余的元素 向右平移。 注意&#xff1a;请不要在超过该数组⻓度的位置写⼊元素。请对输⼊的数组就地进⾏上述修改&#xff0c;不…

SpringCould微服务保护01——Sentinel组件下载并使用

1.初识Sentinel 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 如图&#xff0c;如果服务提供者I发生了故障&#xff0c;当前的应用的部分业务因为依赖于服务I&#xff0c;因此也会被…

小程序首页如何进行装修设置

小程序首页是展示给用户的第一屏&#xff0c;它的装修直接影响到用户对小程序的第一印象。小程序首页的设置在小程序管理员后台->页面设置->首页&#xff0c;下图是小程序首页默认的设置。 下图&#xff0c;是小程序首页的具体表现形式。下面具体解释小程序首页各个设置项…

Vue 绑定 class 与 style

在应用界面中&#xff0c;某些元素的样式是动态的。class 与 style 绑定就是专门用来实现动态样式效果的技术。 如果需要动态绑定 class 或 style 样式&#xff0c;可以使用 v-bind 绑定。 绑定 class 样式【字符串写法】 适用于&#xff1a;类名不确定&#xff0c;需要动态指…

滑动窗口算法(C语言描述)

第一种类型&#xff1a;不固定长窗口 问题1&#xff1a;*** C代码1&#xff1a; #include<stdio.h> #include<string.h> #define N 5int min_len(int len1,int len2) {return (len1 < len2 ? len1:len2); }int main() {int target 0;int num[N];scanf("…

被面试官问到分布式ID,别再傻乎乎只会答雪花算法了...

文章目录 1. 分布式ID2. 数据库主键自增3. 数据库号段模式4. Redis自增5. UUID6. Snowflake (雪花算法)7. Leaf (美团分布式ID生成系统)7.1 Leaf-segment 号段方案7.1.2 双buffer优化 7.2 Leaf-snowflake方案7.3 Leaf-snowflake Demo 1. 分布式ID 在分布式系统中&#xff0c;通…

GEE:使用中文做变量和函数名写GEE代码

作者&#xff1a;CSDN _养乐多_ 啊&#xff1f;最近在编写GEE代码的时候&#xff0c;无意中发现 JavaScript 已经能够支持中文字符作为变量名和函数名&#xff0c;这个发现让我感到非常兴奋。这意味着以后在编程过程中&#xff0c;我可以更自由地融入中文元素&#xff0c;不再…

ubuntu20.04 vins-fusion 运行记录

过程记录 环境&#xff1a; ubuntu20.04 opencv4.2.0(此次使用) 3.3.1(其他程序在使用) vins-fusion vision_opencv 1.下载VINS-Fusion和cv_bridge&#xff0c;并进行修改&#xff0c;方便使用opencv4.2.0和对应的cv_bridge。 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src…

jetty嵌入式开发及spring整合quartz(内存模式)

1 依赖jar包 2 jetty嵌入式开发 2.1 jetty服务启动类 package com.primal.server;import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.AbstractHandler;…

[资源推荐] 复旦大学张奇老师科研分享

刷B站的时候首页给我推了这个&#xff1a;【直播回放】复旦大学张奇教授亲授&#xff1a;人工智能领域顶会论文的发表指南先前也散漫地读了些许论文&#xff0c;但没有在一些宏观的方法论下去训练&#xff0c;读的时候能感觉出一些科研的套路&#xff0c;论文写作的套路&#x…

leetCode 583.两个字符串的删除操作 动态规划 + 优化空间复杂度(二维dp、一维dp)

583. 两个字符串的删除操作 - 力扣&#xff08;LeetCode&#xff09; 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 &qu…

3.2.5:VBA对单元格操作的引申

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

【Leetcode刷题(数据结构)】:三路划分与三数随机取中的思想实现快速排序的再优化

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;右 子序列中所有元素均…

JWT前后端分离在项目中的应用

14天阅读挑战赛当你累了&#xff0c;要学会休息&#xff0c;而不是放弃&#xff01; 目录 一、JWT简介 1.1 什么是JWT 1.2 为什么要使用JWT&#xff0c;与session的区别 1.3 JWT组成及工作原理和流程 二、JWT工具类解析 2.1 生成JWT 2.2 解析oldJwt 2.3 复制JWT并延时…

4.04 用户中心-我的订单评价

内容实现效果&#xff1a; 代码实现内容查看&#xff1a; http://www.gxcode.top/code

Unity中Shader光照模型Blinn-Phong原理及实现

文章目录 前言一、Blinn-Phong原理二、Blinn-Phong实现最终代码 前言 Unity中Shader光照模型Blinn-Phong原理及实现&#xff0c;也是经验型光照模型。和Phong模型一样&#xff0c;都是用于实现高光效果 一、Blinn-Phong原理 可以看出&#xff1a;Blinn-Phong模型和Phong模型不…

排序:如何用快排思想在O(n)内查找第K大元素?

文章来源于极客时间前google工程师−王争专栏。 冒泡排序、插入排序、选择排序三种排序算法&#xff0c;时间复杂度都是O(n^2)&#xff0c;比较高&#xff0c;适合小规模数据的排序。 归并排序和快速排序两种时间复杂度O(nlogn)的排序算法&#xff0c;适合大规模的数据排序&am…