🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

在JoinQuant聚宽Notebook中计算股票对数收益率的完整指南

joinquant | 发布时间: 2026/6/24
以下内容由 EasyQuant 生成。

问题描述

请问如何在notebook计算对数收益率

量化新手,想问问各路大神如何在notebook计算对数收益率?没有在聚宽找到相关的计算教程,新手教程里的收益率计算最后得到的是指数平均移动曲线,也没有涉及到对数收益率的计算

解决方案

你好!欢迎来到量化交易的世界。在JoinQuant(聚宽)的Notebook(研究环境)中计算对数收益率其实非常简单,主要借助Python强大的数据处理库Pandas和数学计算库Numpy来实现。

为什么使用对数收益率?

在量化金融中,对数收益率(Log Return)比普通收益率(简单收益率)更常用,主要原因包括:

  1. 时间可加性:多期的对数收益率可以直接相加,而简单收益率需要相乘。
  2. 统计特性:对数收益率通常更接近正态分布,便于进行统计建模。

计算公式

对数收益率的公式为:
R_t = ln(P_t / P_{t-1}) = ln(P_t) - ln(P_{t-1})
其中,P_t 是当期价格,P_{t-1} 是上一期价格。

Notebook 实现步骤与代码

以下是一段可以直接在聚宽 Notebook 中运行的完整代码示例:

# 1. 导入必要的库
import jqdata
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 2. 设置参数
security = '000001.XSHE'  # 以平安银行为例
start_date = '2023-01-01'
end_date = '2023-12-31'

# 3. 获取历史收盘价数据
# 使用 get_price 函数获取前复权收盘价
df = get_price(security, start_date=start_date, end_date=end_date, frequency='daily', fields=['close'])

# 4. 计算对数收益率
# 方法一:使用 np.log 和 shift
# df['log_return'] = np.log(df['close'] / df['close'].shift(1))

# 方法二:使用 np.log 和 diff (更简洁)
df['log_return'] = np.log(df['close']).diff()

# 去除第一行的 NaN 值
df = df.dropna()

# 5. 查看结果
print("前5行数据展示:")
print(df.head())

# 6. 可视化对数收益率
plt.figure(figsize=(12, 6))
plt.plot(df.index, df['log_return'], label='Log Return', color='blue')
plt.title(f'{security} 每日对数收益率')
plt.xlabel('Date')
plt.ylabel('Log Return')
plt.legend()
plt.grid(True)
plt.show()

代码原理解析:

  1. get_price:这是聚宽获取历史行情的API。我们获取了平安银行在指定时间段内的每日收盘价(默认前复权,适合计算收益率)。
  2. np.log(df['close']):利用 Numpy 对收盘价序列取自然对数。
  3. .diff():Pandas 的 diff() 函数用于计算当前行与上一行的差值。结合上一步,这就实现了 ln(P_t) - ln(P_{t-1}) 的计算。
  4. .dropna():因为第一天没有前一天的价格来计算收益率,所以计算结果会是 NaN(空值),我们用 dropna() 将其剔除。

你可以直接将这段代码复制到聚宽的 Notebook 单元格中运行。掌握了这个基础后,你就可以进一步计算波动率、夏普比率等更高级的量化指标了!