本文介绍: VaR(Value at Risk)是一种常用的风险管理指标用于衡量投资组合在特定时间内的最大可能损失历史数据模拟法是一种计算VaR的方法本文介绍如何使用Tushare数据库获取“中国工商银行”和“兴业银行”2022年10月1日至2023年3月31日期每个交易日的收盘价格数据假设两个股票的投资额分别是3/4和1/4,如果目前两种股票的市值共计50万元人民币,置信度为99%,利用历史数据模拟法计算该投资组合持有期为5天的VaR。

Python如何使用历史数据模拟法计算投资组合VaR?(数据来源为Tushare

本文数据可以点赞关注私信我获取

VaR(Value at Risk)是一种常用的风险管理指标用于衡量投资组合在特定时间内的最大可能损失。历史数据模拟法是一种计算VaR的方法本文介绍如何使用Tushare数据库获取“中国工商银行”和“兴业银行”2022年10月1日至2023年3月31日期每个交易日的收盘价格数据,假设两个股票的投资额分别是3/4和1/4,如果目前两种股票的市值共计50万元人民币,置信度为99%,利用历史数据模拟法计算该投资组合持有期为5天的VaR。

步骤1:获取数据

首先,需要获取股票数据。我们以中国工商银行和兴业银行为例,获取它们在2022年10月1日至2023年3月31日期每个交易日的收盘价格数据。代码如下:

import pandas as pd
import numpy as np
import tushare as ts
from scipy.stats import norm

# Tushare设置
pro = ts.pro_api('你的token') #你的token

start_date = '20221001' #起始日期
end_date = '20230331' #结束日期

code_list = ['601398.SH','601166.SH'] #你需要的股票代码,上海的是.SH,深圳的是.SZ

for i in code_list: #遍历list
    df = pro.daily(ts_code=i, start_date=start_date, end_date=end_date) #tushare获取股票日度信息
    df = df[['ts_code','trade_date','close']]  #只保留需要的数据
    df.to_csv(f'{i}.csv',encoding='gbk')  #导出csv文件

以上代码中,我们使用了Tushare获取股票数据,并将数据导出csv文件

步骤2:处理数据

获取数据后,需要对数据进行处理。首先,我们需要将数据框中的日期列转换为日期格式,并将数据框中的收盘价列转换浮点数。代码如下:

# 读取数据文件
df1 = pd.read_csv('601398.SH.csv')  #工商银行
df2 = pd.read_csv('601166.SH.csv')  #兴业银行

# 合并数据框
df = pd.concat([df1, df2])

# 将数据框中的日期列转换为日期格式
df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')

# 将数据框中的收盘价列转换浮点数
df['close'] = df['close'].astype(float)

# 重新索引数据框
df = df.set_index('trade_date')

然后,我们需要计算每个股票的收益率,并将两个股票的收益率组合成投资组合的收益率。最后,计算投资组合的每日价值和每日收益率。代码如下:

# 计算每个股票的收益率
returns1 = df.loc[df['ts_code'] == '601398.SH', 'close'].pct_change()
returns2 = df.loc[df['ts_code'] == '601166.SH', 'close'].pct_change()

# 将两个股票的收益率组合成投资组合的收益率
returns = 0.75 * returns1 + 0.25 * returns2

# 计算投资组合的每日价值
initial_value = 500000 # 初始投资组合价值 
values = (returns + 1).cumprod() * initial_value

# 计算投资组合的每日收益率
portfolio_returns = values.pct_change()

# 计算投资组合的总价值
portfolio_value = values[-1]
步骤3:计算VaR

计算VaR需要确定置信度和持有期。本文中,我们使用置信度为99%、持有期为5天的参数。然后,我们需要计算标准正态分布的alpha分位数和投资组合每日收益率的标准差。最后,根据历史数据模拟法公式计算投资组合VaR。代码如下:

#使用历史数据模拟法计算VaR
confidence_level = 0.99 # 置信度
holding_period = 5 # 持有期,单位为天数
alpha = norm.ppf(1 - confidence_level) # 标准正态分布的alpha分位数
daily_volatility = portfolio_returns.std() # 投资组合每日收益率的标准
VaR = portfolio_value * daily_volatility * alpha * np.sqrt(holding_period / 252)
print(f'置信度99%VaR为:{VaR:.2f} RMB')

最后运行以上代码即可得到投资组合VaR的结果

完整代码:

import pandas as pd
import numpy as np
import tushare as ts
from scipy.stats import norm

# Tushare设置
pro = ts.pro_api('你的token') #你的token

start_date = '20221001' #起始日期
end_date = '20230331' #结束日期

code_list = ['601398.SH','601166.SH'] #你需要的股票代码,上海的是.SH,深圳的是.SZ

for i in code_list: #遍历list
    df = pro.daily(ts_code=i, start_date=start_date, end_date=end_date) #tushare获取股票日度信息
    df = df[['ts_code','trade_date','close']]  #只保留需要的数据
    df.to_csv(f'{i}.csv',encoding='gbk')  #导出为csv文件

# 读取数据文件
df1 = pd.read_csv('601398.SH.csv')  #工商银行
df2 = pd.read_csv('601166.SH.csv')  #兴业银行

# 合并数据框
df = pd.concat([df1, df2])

# 将数据框中的日期列转换为日期格式
df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d')

# 将数据框中的收盘价列转换浮点数
df['close'] = df['close'].astype(float)

# 重新索引数据框
df = df.set_index('trade_date')

# 计算每个股票的收益率
returns1 = df.loc[df['ts_code'] == '601398.SH', 'close'].pct_change()
returns2 = df.loc[df['ts_code'] == '601166.SH', 'close'].pct_change()

# 将两个股票的收益率组合成投资组合的收益率
returns = 0.75 * returns1 + 0.25 * returns2

# 计算投资组合的每日价值
initial_value = 500000  # 初始投资组合价值
values = (returns + 1).cumprod() * initial_value

# 计算投资组合的每日收益率
portfolio_returns = values.pct_change()

# 计算投资组合的总价值
portfolio_value = values[-1]

# 使用历史数据模拟法计算VaR
confidence_level = 0.99  # 置信度
holding_period = 5  # 持有期,单位为天数
alpha = norm.ppf(1 - confidence_level)  # 标准正态分布的alpha分位数
daily_volatility = portfolio_returns.std()  # 投资组合每日收益率的标准
VaR = portfolio_value * daily_volatility * alpha * np.sqrt(holding_period / 252)
print(f'置信度99%VaR为:{VaR:.2f} RMB')

本文介绍如何使用历史数据模拟法计算投资组合VaR,并以代码示例的形式进行了详细说明。但是VaR存在一些局限性,例如无法考虑极端事件影响等。因此,在实际应用中,需要结合其他方法来进行风险管理控制

原文地址:https://blog.csdn.net/strangequark/article/details/129925964

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_11789.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注