更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。

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

VaR模型简述

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

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

VaR模型的计算方法

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

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

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

 

式中,$\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,一起交流


往期干货分享推荐阅读

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

数字货币资金费策略

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

网格交易系统开发

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

商品现货数据不好拿?商品季节性难跟踪?一键解决没烦恼的Python爬虫分享

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

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

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

利用VAR模型科学管理仓位,提升策略效率的更多相关文章

  1. 利用 AWK 的数值计算功能提升工作效率(转载)

    Awk 是一种优秀的文本样式扫描和处理工具.转文侧重介绍了 awk 在数值计算方面的运用,并通过几个实际工作中的例子,阐述了如何利用 awk 的计算功能来提高我们的工作效率.转文源自IBM Bluem ...

  2. DirectX11 With Windows SDK--19 模型加载:obj格式的读取及使用二进制文件提升读取效率

    前言 一个模型通常是由三个部分组成:网格.纹理.材质.在一开始的时候,我们是通过Geometry类来生成简单几何体的网格.但现在我们需要寻找合适的方式去表述一个复杂的网格,而且包含网格的文件类型多种多 ...

  3. Atitit 项目管理 提升开发效率的项目流程方法模型 哑铃型  橄榄型 直板型

    Atitit 项目管理 提升开发效率的项目流程方法模型 哑铃型  橄榄型 直板型 项目主体三个部分 ui界面,中间层,数据库 按照不同的比重可以分为一下三个模型  哑铃型  橄榄型 直板型 哑铃型 开 ...

  4. StartDT AI Lab | 智能运筹助力企业提升决策效率、优化决策质量

    在人工智能和大数据时代,越来越多的云上数据和越来越智能的模型开始辅助人们做出各种最优决策,从运营效率.成本节约.最优配置等方方面面,实现降本增效,进一步提升商业效率.京东.美团.滴滴.顺丰等众多知名厂 ...

  5. atitit.提升开发效率---mda 软件开发方式的革命--(2)

    atitit.提升开发效率---mda 软件开发方式的革命--(2) 1. 一个完整的MDA规范包含: 1 2. 一个完整的MDA应用程序包含: 1 3. MDA能够带来的最大的三个好处是什么? 2 ...

  6. atitit.提升开发效率---mda 软件开发方式的革命

    atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...

  7. 通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率

    原文:通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率 使用 Visual Studio 开发 C#/.NET 应用程序,以前有 ReSharper 来不足其各项功能短板 ...

  8. Java进阶教程:使用Lombok提升开发效率

    Java进阶教程:使用Lombok提升开发效率 Lombok Lombok是一种Java™实用工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO).它通过注释实现这 ...

  9. Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结

    Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结 1. 管道抽象 1 2. 层次结构抽象(json,xml etc) 1 3. 异步抽象promise 1 4. Ide ...

随机推荐

  1. WPF教程十一:简单了解并使用控件模板

    WPF教程十一:简单了解并使用控件模板 这一章梳理控件模板,每个WPF控件都设计成无外观的,但是行为设计上是不允许改变的,比如使用Button的控件时,按钮提供了能被点击的内容,那么自由的改变控件外观 ...

  2. 探索互斥锁 Mutex 实现原理

    Mutex 互斥锁 概要描述 mutex 是 go 提供的同步原语.用于多个协程之间的同步协作.在大多数底层框架代码中都会用到这个锁. mutex 总过有三个状态 mutexLocked: 表示占有锁 ...

  3. git rebase 和 git merger

    & git merge 在上图中,每一个绿框均代表一个commit.除了c1,每一个commit都有一条有向边指向它在当前branch当中的上一个commit. 图中的项目,在c2之后就开了另 ...

  4. CentOS 命令提示符

    命令提示符的设置就是对PS1的配置: export PS1="\[\e[35;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\[\e[36;40m\]\h  \[\e ...

  5. PYTHON2.7安装 pyinstaller出错,不能正常安装

    解决方法: pip2.7 install pyinstaller==3.4

  6. web系统国际化思路

    需求:php开发多个中文系统支持国际化 思路: 提炼各个系统中的中文字符,替换为资源key. 多媒体文件中的中文定位(图片中的中文,中文录音,中文视频,中文模板等). 统一翻译文字.准备资源文件. 各 ...

  7. React 模块与组件

    React 模块与组件 几个重要概念理解 1). 模块与组件 1. 模块: 理解: 向外提供特定功能的js程序, 一般就是一个js文件 为什么: js代码更多更复杂 作用: 复用js, 简化js的编写 ...

  8. springMVC-7-数据处理转换

    我们为什么要对数据进行处理? 需求:在上个crud中我们如果需要每次修改的时候都要把时间也记录下来 解决:在jsp中新增一个input,在employee中新增一个Data字段 问题:input输出来 ...

  9. 记一次 .NET 某云采购平台API 挂死分析

    一:背景 1. 讲故事 大概有两个月没写博客了,关注我的朋友应该知道我最近都把精力花在了星球,这两个月时间也陆陆续续的有朋友求助如何分析dump,有些朋友太客气了,给了大大的红包,哈哈,手里面也攒了1 ...

  10. Matplotlib不能显示中文和正负号的问题

    参考链接:https://www.jianshu.com/p/240ea3ae0dc9 在使用matplotlib画饼状图时,遇到了如下问题 UserWarning: findfont: Font f ...