利用VAR模型科学管理仓位,提升策略效率

  ​​

数量技术宅团队在CSDN学院推出了量化投资系列课程

欢迎有兴趣系统学习量化投资的同学,点击下方链接报名:

量化投资速成营(入门课程)

Python股票量化投资

Python期货量化投资

Python数字货币量化投资

C++语言CTP期货交易系统开发

数字货币JavaScript语言量化交易系统开发


期货行情瞬息万变,保证金体系决定了期货交易的杠杆属性。保证金放多了,资金利用率低,放少了,可能在大幅度的行情波动中造成强平的结果,甚至成为最终盈利和亏损的界限。所以,需要有一个衡量标准,为我们的仓位设置提供参考,VaR模型是科学管理仓位,提升策略效率的一个不错的选择。

VaR模型简述

在我们决定仓位的时候,我们其实需要考虑两个重要变量,一个是可能发生的亏损金额,另一个是发生亏损的可能性。用通俗的语言来打个比方,在99%置信区间下,Var值为2w,那么意味着每次交易亏掉2w权益的可能性是1%。具体公式:

VaR风险度 = 一定置信度下的VaR值/权益 * 100%

VaR模型的计算方法

VaR计算方法很多,比如历史模拟法、蒙特卡洛模拟法、核函数法、半参数法、参数法等。

本次我们使用参数法中的Delta-正太模型:

在服从正态分布的假设下,资产Var值为:

Var = Capital*(\bar\mu * \delta_t-Z_{1-\alpha}*\sqrt{\delta_t}*\bar\sigma)

式中,$\bar\mu$是资产期望收益,$\bar\sigma$为标准差,$\delta_t$是要计算的时间长度,$Z{1-\alpha}$是从正太分布表中查到的对应于置信度水平$1-\alpha$的Z值,比如$\alpha = 0.01$的$Z{1-\alpha}=2.326$。

在期货市场中,只要我们把保证金控制在Var最大亏损百分比以上,我们就可以认为在这一置信水平下,可以极大程度防范风险。

通过Var模型评估风险

数据选择

选取近两年的期货所有品种的连续合约价格,置信度的选择,我们选取了99%和95%两个。

核心代码模块

    if len(data[price].dropna()) != 0:
        #日收益率 收盘价
        data['d_return'] = data[price].pct_change()
        print(code)
        #收益率均值
        mean_return = data['d_return'].mean()
​
        #标准差
        std = data['d_return'].std()
​
        #VAR值
        var1 = mean_return - Z1 * std
        var5 = mean_return - Z5 * std
​
        #写入表格
        dic = {'code': code,
               'var1': var1,
               'var5': var5}
        if len(table) == 0:
            table = pd.DataFrame([dic])
        else:
            table = table.append([dic])

部分品种VAR结果可视化  

 

 

 

 

买入持有 + VAR

那么我们算出了var之后,仓位的变化是否能够改善投资组合的整体表现呢?

为了排除策略的影响,我们让所有品种都采用最简单的买入并持有策略,在这个策略下,使用所有品种平均持仓和根据var进行仓位微调之后,整个策略的表现是否会有影响。

由于我们使用了var1和var5,因此我们以var1的权重weight_var1,记为w1,同样还有w5,w0表示初始权重,所有仓位平均分配。

我们的目标是计算w0,w1,w5的夏普率的差别,看看通过权重的变化,夏普率是否有所改善。

核心代码模块:

for code in list['wind_code']:
    tmp[code] = data[code]*float(table[table['code'] == code]['w1'])
df['w1'] = tmp.sum(axis = 1)
df['w1_return'] = df['w1'].pct_change()
mean1 = df['w1_return'].mean()
std1 = df['w1_return'].std()
sharp1 = 2**0.5*mean1/std1
​
for code in list['wind_code']:
    tmp[code] = data[code]*float(table[table['code'] == code]['w5'])
df['w5'] = tmp.sum(axis = 1)
df['w5_return'] = df['w5'].pct_change()
mean5 = df['w5_return'].mean()
std5 = df['w5_return'].std()
sharp5 = 2**0.5*mean5/std5

最终我们计算得出:

均值 标准差 夏普率
平均仓位 0.00064372690041408 0.01082542031323569 0.08409533179205349
根据var1调仓 0.00078209905493337 0.01147973020602057 0.09634852655560597
根据var5调仓 0.00078063238309689 0.01148086624921166 0.09615832807729695

可以看到,从夏普率的角度,不论是根据var1调仓还是根据var5调仓,两者数值都有所提高,提高幅度在14.2%。可见,通过VAR模型进行仓位控制,可以在很大程度上,改善投资组合的表现。

VAR仓位管理在量化策略中的表现

我们已经验证了仓位在投资组合当中不可替代的作用,那么在实际的应用表现中,整体仓位比例的变化对于组合的收益率曲线有什么影响。我们以均线策略模型为例,抽取部分策略品种进行体现。从收益率数据的表现看,不管是组合中的品种表现,还是整个组合的表现,var调仓的效果都要比平均仓位的表现要好一些。

部分品种比较曲线,w1代表原始策略表现,w0代表经VAR调整仓位后策略表现:

 

品种汇总曲线,同样的,w1代表原始策略表现,w0代表经VAR调整仓位后策略表现:

 

 

想要获取本次分享的完整代码,或是任何关于数据分析、量化投资的问题,欢迎添加技术宅微信:sljsz01,一起交流

 图片


往期干货分享推荐阅读

数字货币稳定币对网格做市策略

万物皆可秒——淘宝秒杀Python脚本,扫货618,备战双11!

数字货币资金费策略

数字货币无风险收益率又双叒叕扩大了!

分享一个年化15%以上的无风险套利机会

【数量技术宅|交易系统开发系列分享】网格交易系统开发

通过深度学习股价截面数据分析和预测股票价格

剖析一个数字货币高频策略

数字货币交易信号实时预警推送(含群聊)

Omega System Trading and Development Club内部分享策略Easylanguage源码

量化交易如何选择云服务器,如何在本地远程开发与调试云服务器程序

一个真实数据集的完整机器学习解决方案(下)

一个真实数据集的完整机器学习解决方案(上)

如何使用交易开拓者(TB)开发数字货币策略

股指期货高频数据机器学习预测

如何使用TradingView(TV)回测数字货币交易策略

如何投资股票型基金?什么时间买?买什么?

【数量技术宅|量化投资策略系列分享】基于指数移动平均的股指期货交易策略

AMA指标原作者Perry Kaufman 100+套交易策略源码分享

【 数量技术宅 | 期权系列分享】期权策略的“独孤九剑”

如何获取免费的数字货币历史数据

【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单

【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略

【数量技术宅|量化投资策略系列分享】多周期共振交易策略

【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数

  大宗商品现货数据不好拿?商品季节性难跟踪?技术宅带你Python爬虫一键解决没烦恼

【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品

【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略

【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

 

 

Guess you like

Origin blog.csdn.net/sljsz/article/details/119918955