当前位置: 首页 > 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…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...