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

002 | 常见的金融量化指标计算

金融量化指标

在金融量化分析中,常用的指标可以帮助我们判断市场走势、评估风险和收益,以及构建交易策略。以下是一些常见的金融量化指标及其计算方法的详细教程,包括公式与Python代码实现。

1. 移动平均线(Moving Average, MA)

简介:移动平均线是对特定时期内的数据进行平均,以平滑价格波动,从而帮助识别趋势方向。

公式
M A n = P 1 + P 2 + . . . + P n n MA_n = \frac{P_1 + P_2 + ... + P_n}{n} MAn=nP1+P2+...+Pn
其中, P i P_i Pi 是第 i i i天的收盘价, n n n 是移动平均的周期。

Python代码

import pandas as pddef moving_average(prices, window):return prices.rolling(window=window).mean()# 示例
data = pd.Series([100, 102, 101, 104, 106, 108])
ma = moving_average(data, 3)
print(ma)
2. 指数平滑移动平均线(Exponential Moving Average, EMA)

简介:EMA对最近的数据赋予更大的权重,从而比简单移动平均线更快地响应价格变化。

公式
E M A t = α × P t + ( 1 − α ) × E M A t − 1 EMA_t = \alpha \times P_t + (1 - \alpha) \times EMA_{t-1} EMAt=α×Pt+(1α)×EMAt1
其中, α = 2 n + 1 \alpha = \frac{2}{n+1} α=n+12 n n n 是平滑周期。

Python代码

def exponential_moving_average(prices, window):return prices.ewm(span=window, adjust=False).mean()# 示例
ema = exponential_moving_average(data, 3)
print(ema)
3. 相对强弱指数(Relative Strength Index, RSI)

简介:RSI衡量股票价格的上涨和下跌的速度,用于判断市场是否超买或超卖。

公式
R S I = 100 − 100 1 + R S RSI = 100 - \frac{100}{1 + RS} RSI=1001+RS100
其中,(RS = \frac{\text{平均上涨值}}{\text{平均下跌值}})。

Python代码

def relative_strength_index(prices, window=14):delta = prices.diff()gain = (delta.where(delta > 0, 0)).rolling(window=window).mean()loss = (-delta.where(delta < 0, 0)).rolling(window=window).mean()rs = gain / lossrsi = 100 - (100 / (1 + rs))return rsi# 示例
rsi = relative_strength_index(data, 14)
print(rsi)
4. 移动平均收敛散度(Moving Average Convergence Divergence, MACD)

简介:MACD是两条指数移动平均线之间的差值,用于判断价格走势的变化趋势。

公式
M A C D = E M A 12 − E M A 26 MACD = EMA_{12} - EMA_{26} MACD=EMA12EMA26
S i g n a l = E M A 9 ( M A C D ) Signal = EMA_{9}(MACD) Signal=EMA9(MACD)

Python代码

def macd(prices, short_window=12, long_window=26, signal_window=9):ema_short = exponential_moving_average(prices, short_window)ema_long = exponential_moving_average(prices, long_window)macd_line = ema_short - ema_longsignal_line = exponential_moving_average(macd_line, signal_window)return macd_line, signal_line# 示例
macd_line, signal_line = macd(data)
print(macd_line, signal_line)
5. 布林带(Bollinger Bands)

简介:布林带由三条线组成,中间的线是移动平均线,上下两条线分别是移动平均线加减一定倍数的标准差,用于衡量价格的波动范围。

公式
上轨 = M A + k × σ \text{上轨} = MA + k \times \sigma 上轨=MA+k×σ
下轨 = M A − k × σ \text{下轨} = MA - k \times \sigma 下轨=MAk×σ
其中, M A MA MA 是移动平均线, σ \sigma σ 是价格的标准差, k k k 是调整因子,一般取2。

Python代码

def bollinger_bands(prices, window=20, num_std_dev=2):ma = moving_average(prices, window)std_dev = prices.rolling(window=window).std()upper_band = ma + num_std_dev * std_devlower_band = ma - num_std_dev * std_devreturn upper_band, lower_band# 示例
upper_band, lower_band = bollinger_bands(data)
print(upper_band, lower_band)

6. 平均真实波动范围(Average True Range, ATR)

简介:ATR用于衡量市场的波动性,反映了价格波动的剧烈程度。

公式
T R = max ⁡ ( 当前最高价 − 当前最低价 , ∣ 当前最高价 − 前一收盘价 ∣ , ∣ 当前最低价 − 前一收盘价 ∣ ) TR = \max(\text{当前最高价} - \text{当前最低价}, |\text{当前最高价} - \text{前一收盘价}|, |\text{当前最低价} - \text{前一收盘价}|) TR=max(当前最高价当前最低价,当前最高价前一收盘价,当前最低价前一收盘价)
A T R = ∑ i = 1 n T R i n ATR = \frac{\sum_{i=1}^{n} TR_i}{n} ATR=ni=1nTRi

Python代码

def true_range(high, low, close):return pd.concat([high - low, (high - close.shift()).abs(), (low - close.shift()).abs()], axis=1).max(axis=1)def average_true_range(high, low, close, window=14):tr = true_range(high, low, close)atr = tr.rolling(window=window).mean()return atr# 示例
high = pd.Series([105, 107, 110, 112])
low = pd.Series([100, 102, 104, 109])
close = pd.Series([102, 106, 108, 111])
atr = average_true_range(high, low, close)
print(atr)

7. 威廉指标(Williams %R)

简介:威廉指标用于判断市场的超买或超卖状态,数值范围在-100到0之间。

公式
% R = 最高价 n − 收盘价 最高价 n − 最低价 n × ( − 100 ) \%R = \frac{\text{最高价}_n - \text{收盘价}}{\text{最高价}_n - \text{最低价}_n} \times (-100) %R=最高价n最低价n最高价n收盘价×(100)
其中, 最高价 n \text{最高价}_n 最高价n 最低价 n \text{最低价}_n 最低价n 分别为过去n天内的最高和最低价格。

Python代码

def williams_r(high, low, close, window=14):highest_high = high.rolling(window=window).max()lowest_low = low.rolling(window=window).min()wr = (highest_high - close) / (highest_high - lowest_low) * -100return wr# 示例
wr = williams_r(high, low, close)
print(wr)

8. 随机指标(Stochastic Oscillator)

简介:随机指标用于衡量收盘价在最近一段时间价格范围内的位置,判断价格的超买或超卖情况。

公式
K = 收盘价 − 最低价 n 最高价 n − 最低价 n × 100 K = \frac{\text{收盘价} - \text{最低价}_n}{\text{最高价}_n - \text{最低价}_n} \times 100 K=最高价n最低价n收盘价最低价n×100
D = ∑ K 3 D = \frac{\sum K}{3} D=3K

Python代码

def stochastic_oscillator(high, low, close, window=14):lowest_low = low.rolling(window=window).min()highest_high = high.rolling(window=window).max()k = (close - lowest_low) / (highest_high - lowest_low) * 100d = k.rolling(window=3).mean()return k, d# 示例
k, d = stochastic_oscillator(high, low, close)
print(k, d)

9. 平滑异同平均指标(Smoothed Moving Average, SMA)

简介:SMA是将移动平均和当前价格进行平滑处理的指标,比EMA更加平滑。

公式
S M A t = ∑ i = 1 n P i n SMA_t = \frac{\sum_{i=1}^{n} P_i}{n} SMAt=ni=1nPi
其中, P i P_i Pi 是价格数据, n n n 是时间周期。

Python代码

def smoothed_moving_average(prices, window):return prices.rolling(window=window).mean()# 示例
sma = smoothed_moving_average(data, 3)
print(sma)

10. 波动率(Volatility)

简介:波动率是衡量价格变化的剧烈程度的重要指标,通常用标准差表示。

公式
Volatility = ∑ i = 1 n ( P i − M A ) 2 n \text{Volatility} = \sqrt{\frac{\sum_{i=1}^{n} (P_i - MA)^2}{n}} Volatility=ni=1n(PiMA)2

Python代码

def volatility(prices, window):return prices.rolling(window=window).std()# 示例
vol = volatility(data, 10)
print(vol)

11. 商品通道指数(Commodity Channel Index, CCI)

简介:CCI衡量价格相对于其均值的偏离程度,用于判断市场的超买或超卖状态。

公式
C C I = P t − M A t 0.015 × M D CCI = \frac{P_t - MA_t}{0.015 \times MD} CCI=0.015×MDPtMAt
其中,(P_t) 是典型价格,(MA_t) 是移动平均,(MD) 是均方差。

Python代码

def commodity_channel_index(high, low, close, window=20):tp = (high + low + close) / 3ma = tp.rolling(window=window).mean()md = tp.rolling(window=window).apply(lambda x: pd.Series(x).mad())cci = (tp - ma) / (0.015 * md)return cci# 示例
cci = commodity_channel_index(high, low, close)
print(cci)

12. 恐慌指数(VIX)

简介:VIX是衡量市场对未来30天价格波动预期的指标,通常被称为“恐慌指数”。

公式:VIX的计算比较复杂,通常基于标普500指数期权的隐含波动率来计算。它的公式涉及多个期权的计算,这里简化为波动率的代表。

Python代码

import numpy as npdef vix(prices):log_returns = np.log(prices / prices.shift(1))vol = log_returns.rolling(window=30).std() * np.sqrt(252)return vol# 示例
vix_index = vix(data)
print(vix_index)

13. 收益率(Rate of Return, RoR)

简介:收益率是衡量投资或资产在特定时间内的增长或减少百分比。它通常用来评估投资的盈利能力。

公式

  • 简单收益率
    Simple Return = P t − P t − 1 P t − 1 × 100 % \text{Simple Return} = \frac{P_t - P_{t-1}}{P_{t-1}} \times 100\% Simple Return=Pt1PtPt1×100%
    其中,(P_t) 是当前价格,(P_{t-1}) 是前一时间点的价格。

  • 对数收益率
    Log Return = ln ⁡ ( P t P t − 1 ) \text{Log Return} = \ln\left(\frac{P_t}{P_{t-1}}\right) Log Return=ln(Pt1Pt)

Python代码

import numpy as npdef simple_return(prices):return (prices / prices.shift(1)) - 1def log_return(prices):return np.log(prices / prices.shift(1))# 示例
simple_r = simple_return(data)
log_r = log_return(data)
print(simple_r, log_r)

使用 Tushare 计算所有指标的综合示例

Tushare 是一个用于获取中国市场数据的开源Python包。我们将使用 Tushare 下载股票数据并计算上面介绍的指标。

1. 安装 Tushare

如果你还没有安装 Tushare,可以使用以下命令进行安装:

pip install tushare
2. 获取股票数据

首先,我们需要获取股票的历史价格数据。

import tushare as ts
import pandas as pd# 设置你的 Tushare token
ts.set_token('your_token_here')
pro = ts.pro_api()# 获取某只股票的日线数据
data = pro.daily(ts_code='000001.SZ', start_date='20220101', end_date='20221231')# 将数据按日期排序并设置日期为索引
data['trade_date'] = pd.to_datetime(data['trade_date'])
data = data.sort_values(by='trade_date')
data.set_index('trade_date', inplace=True)# 提取收盘价、高低价等数据
close = data['close']
high = data['high']
low = data['low']
3. 计算所有指标

我们将结合之前编写的函数,计算所有的指标:

# 移动平均线
ma_20 = moving_average(close, 20)# 指数平滑移动平均线
ema_20 = exponential_moving_average(close, 20)# 相对强弱指数
rsi_14 = relative_strength_index(close, 14)# 移动平均收敛散度
macd_line, signal_line = macd(close)# 布林带
upper_band, lower_band = bollinger_bands(close)# 平均真实波动范围
atr_14 = average_true_range(high, low, close, 14)# 威廉指标
wr_14 = williams_r(high, low, close, 14)# 随机指标
k, d = stochastic_oscillator(high, low, close, 14)# 平滑异同平均指标
sma_20 = smoothed_moving_average(close, 20)# 波动率
vol_10 = volatility(close, 10)# 商品通道指数
cci_20 = commodity_channel_index(high, low, close, 20)# 恐慌指数(这里使用对数收益率的波动率表示)
vix_index = vix(close)# 简单收益率
simple_r = simple_return(close)# 对数收益率
log_r = log_return(close)
4. 将所有指标汇总为一个 DataFrame
# 将所有计算的指标放入一个 DataFrame 中
indicators = pd.DataFrame({'MA_20': ma_20,'EMA_20': ema_20,'RSI_14': rsi_14,'MACD_Line': macd_line,'Signal_Line': signal_line,'Upper_Band': upper_band,'Lower_Band': lower_band,'ATR_14': atr_14,'WR_14': wr_14,'K': k,'D': d,'SMA_20': sma_20,'Volatility_10': vol_10,'CCI_20': cci_20,'VIX_Index': vix_index,'Simple_Return': simple_r,'Log_Return': log_r
})print(indicators.head())

总结

通过上述代码,我们展示了如何使用 Tushare 获取股票数据,并计算多种常见的金融量化指标。这些指标可以帮助分析市场趋势、评估风险和收益,从而构建更为复杂的交易策略。在实际应用中,可以根据自己的需求调整指标的参数和选择的时间窗口,并结合其他数据源和工具进行更深入的分析。

相关文章:

002 | 常见的金融量化指标计算

金融量化指标 在金融量化分析中&#xff0c;常用的指标可以帮助我们判断市场走势、评估风险和收益&#xff0c;以及构建交易策略。以下是一些常见的金融量化指标及其计算方法的详细教程&#xff0c;包括公式与Python代码实现。 1. 移动平均线&#xff08;Moving Average, MA&…...

Web Vitals:提升用户体验的关键指标

Web Vitals 是 Google 提出的一套核心网页性能指标&#xff0c;旨在帮助开发者理解和优化网站的用户体验。这些指标分为核心 Web Vitals 和附加 Web Vitals&#xff0c;涵盖了加载性能、交互性和视觉稳定性三个方面。以下是详细的介绍和如何使用 Web Vitals 来优化你的网站。 …...

c#中的约束、TimeSpan、defult、operator

c#中的约束 在C#中&#xff0c;约束&#xff08;Constraints&#xff09;用于限制泛型类型参数的类型&#xff0c;以确保泛型类型或方法在编译时能够满足特定的要求。约束允许开发者指定泛型类型参数必须满足的条件&#xff0c;比如实现特定的接口或继承自特定的类。以下是一些…...

挖矿木马攻破了服务器

最近被国外的挖矿木马攻破了服务器 根据非法登录&#xff0c;用 #last指令查看登录ip 首先删掉登录主机 #kill -9 pts/0 第二步 #top 看看什么占用cpu高 第三步杀死狂刷CPU的服务 过一分钟后&#xff0c;服务又开始狂刷cpu。 第四步根据pid查到服务地址 #systemctl status…...

从容应对技术面试:策略、技巧与成功案例

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…...

Spring Boot 整合 RestTemplate:详解与实战

Spring Boot 整合 RestTemplate&#xff1a;详解与实战指南 一、引言二、依赖添加Maven 示例&#xff1a;Gradle 示例&#xff1a; 三、创建 RestTemplate 实例四、使用 RestTemplate 发起请求五、处理响应六、高级用法1. 自定义 RestTemplate 实例2. 文件上传、下载以及常见的…...

【利用模板模式和责任链模式实现数据校验】

利用模板模式和责任链模式实现数据校验 一、业务背景二、模板模式和责任链模式代码实现1、数据校验抽象处理器ValidateHandler2、数据校验责任链工具类ValidateChainUtil3、网元调整数据校验抽象类AbstractNodeCheckHandler4、依次定义3个责任链handler&#xff0c;通过Order注…...

学习笔记第十九天

1.标准I/O的基本概念 标准输入&#xff08;stdin&#xff09;&#xff1a;默认是指键盘输入。 标准输出&#xff08;stdout&#xff09;&#xff1a;默认是指显示器输出。 标准错误&#xff08;stderr&#xff09;&#xff1a;用于输出错误信息&#xff0c;也是指向显示器&…...

设计模式 - 单例模式

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 引言一、单例模…...

fastapi之WebSockets

文章目录 WebSockets基本概念FastAPI 中的 WebSocket 支持WebSocket 应用示例示例 1: 简单的 WebSocket 连接解释 示例 2: 广播消息的 WebSocket 实现解释 客户端代码示例 完整示例项目结构服务器端代码 (main.py)解释 简单的前端客户端 (static/index.html)解释 测试 相关代码…...

Kotlin 和 Java区别

Kotlin 和 Java 是两种主要用于 Android 开发的编程语言&#xff0c;它们之间有一些关键的区别&#xff1a; 1. 语法简洁性&#xff1a; Kotlin&#xff1a;具有更简洁的语法&#xff0c;减少了冗余代码。例如&#xff0c;Kotlin 支持类型推断&#xff0c;避免了大量的样板…...

windows 达梦到ORACLE dblink

达梦通过DBLINK访问Oracle数据库有两种: 方式一&#xff1a;通过Oracle oci接口; 方式二&#xff1a;一种是通过ODBC数据源的方式。 本案例选择使用Oralce OCI的方式去访问Oracle数据库。 配置Oracle OCI客户端 下载地址&#xff1a;https://www.oracle.com/database/techno…...

大数据应用组件

1、数据存储1.1、hive->hdfs、mapredus1.2、ClickHouse1.3、Elasticsearch1.4、PostgreSQL1.5、HBase 2、数据抽取2.1、Kettle2.2、DataX2.3、Canal2.4、Flink CDC2.5、Sqoop2.6、Filebeat&Logstash(日志) 3、任务编排3.1、Apache DolphinScheduler 4、数据处理4.1、spa…...

Docker Remote API未授权访问漏洞

9.Docker Remote API未授权访问漏洞 步骤一:使用以下Fofa语句对Docker产品进行搜索. port"2375" 步骤二:直接使用浏览器访问以下路径 /version#查看版本信息 /info#查看容器信息 漏洞修复 1.端口访问控制 对2375端口做网络访问控制&#xff0c;如设置iptables…...

算法训练.

一.扩散 题解&#xff1a; 计算点之间的距离&#xff0c;然后对图进行处理即可&#xff0c;这个数据规模较小&#xff0c;因此我使用了floyd,还有最小生成树和二份答案加并查集的写法&#xff1b; 代码&#xff1a; #include <iostream> #include <cstring> #in…...

08、MySQL-事务

目录 1、事务简介 2、事务操作 2.1 方式一 2.2 方式二 3、事务四大特性 4、并发事务问题 5、事务隔离级别 1、事务简介 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c…...

2024 年的 Node.js 生态系统

数据来源于 Node.js Toolbox&#xff0c;网站展示了 Node.js 生态系统中积极维护且流行的库。...

LVS(Linux Virtual Server)

简介 LVS&#xff08;Linux Virtual Server&#xff09;是一个高性能的开源负载均衡解决方案&#xff0c;它通过在Linux内核中实现IPVS&#xff08;IP Virtual Server&#xff09;模块来提供负载均衡功能。LVS能够将外部请求根据特定的算法分发到后端的多个服务器上&#xff0c…...

回顾Python

一、python基础 1、环境python2、python3 [rootpython ~]# yum list installed | grep python #检查是否有python包 [rootpython ~]# yum list installed | grep epel #检查是否有epel包 [rootpython ~]# yum -y install epel-release [rootpython ~]# yum -y install …...

【数据结构】队列,你必须知道的内部原理!!!

&#x1f31e;&#x1f31e;&#x1f31e;生活本就沉闷&#xff0c;但跑起来就会有风 ~~~ 前言&#xff1a; &#x1f31f;&#x1f31f;Hello家人们&#xff0c;这期讲解数据结构队列的基础知识&#xff0c;希望你能帮到屏幕前的你。 &#x1f4da;️上期博客在这里&#xff1…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...

比特币:固若金汤的数字堡垒与它的四道防线

第一道防线&#xff1a;机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”&#xff08;Hashing&#xff09;就是一种军事级的加密术&#xff08;SHA-256&#xff09;&#xff0c;能将信函内容&#xff08;交易细节&#xf…...