楼主: cxy199088
4253 17

[实际应用] 【MATLAB】多期投资组合交易成本最优化问题(附样本数据和code) [推广有奖]

  • 0关注
  • 4粉丝

本科生

61%

还不是VIP/贵宾

-

威望
0
论坛币
3683 个
通用积分
44.7036
学术水平
16 点
热心指数
18 点
信用等级
14 点
经验
3849 点
帖子
74
精华
0
在线时间
109 小时
注册时间
2017-9-13
最后登录
2024-4-16

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
最近读到一篇2014年斯坦福的多期资产组合最优化的文章,觉得该模型的实证结果很不错,特来分享下:

模型大概思路是这样的。假设我们有N个资产可供选择来构建投资组合。假定我们交易时间为 0 到 T, A_t 为 t 时刻时每个资产的头寸 (N*1的position vector ,如果头寸为0,说明未投资,如果为正说明是多头,负为空头)。交易仅发生在 t 时刻,且交易量(position change)为D_t (此时价格仍然为 t 期的,并未发生变化),那么交易后的资产组合的头寸就变为 A_t + D_t。然后,A_t+1 为 t+1 时期的资产头寸,等于交易后的资产组合头寸乘以收益率(即asset return),即:

A_t+1 = R_t+1 * (A_t + D_t)  (注意,R_t+1是 N*1 的收益率 vector 而非净收益率的 vector,也就是说log(R)才是净收益,可以采用正态分布、t 分布或者其他类似分布来拟合)。

然后,D_t,也就是交易头寸量,是关于 t 时刻头寸 A_t 的一个时变函数(因为不同时刻交易策略可能不同)。假设这个函数为L_t,那么

D_t = L_t (A_t),

此时的函数L, 就是所谓的交易策略,而我们要做的就是在每一个时期去最优化该策略。

现在假设另一个关于 A_t 和 D_t 的时变函数K_t,用来表达交易发生时所需的总成本。同时,时变函数 M_t (A_t, D_t) 表示交易发生时的纯交易费用(比如佣金啦,空头的利息啦,风控成本啦等,这些有的和交易量有关,我们称之为交易费用,比如佣金等;和仓位有关,我们称之为资产组合维持费用,比如空头的利息等。故整体上看和二者都有关),这样,在 t 时刻,我们就会有如下的函数式:

K_t (A_t, D_t) = 1’ * D_t + M_t (A_t, D_t)

其中 1’ * D_t 就是总交易量 (N*1的vector D_t 中所有元素求和),也就是我们在 t 时刻要完成交易所必须的总现金流成本,而 M_t (A_t, D_t) 则是 t 时刻因为交易而产生的额外的交易成本,两者加起来,即为 t 时刻的总成本。

而最优的策略,就是所有时期的 K_t (A_t, D_t) 的总和最小,即 0 到 T 过程中总成本最小。

这里函数的设定可以有很多种,有的是一次关系,比如佣金啦 (交易多少,按比例收对应交易量的佣金),有的是更复杂的关系。与此同时,K_t (A_t, D_t) 必须要满足一定的限制,比如交易后的资产组合总仓位不得低于某个值啦,终期 T 必须清仓啦,也就是仓位为0啦什么的。

在这里,我把问题简化了下,只考虑二次关系的交易成本和非不等式的交易限制(比如终期 T 清仓,仓位=0。但不得低于某个值什么的,或者资产组合的杠杆限制都是不等式,比较复杂,先不考虑)。这样,凸优化是有严格的解的,比较适合讲解。更复杂的尝试可以参见斯坦福的2014年文章:

《Performance Bounds and Suboptimal Policies for Multi-Period Investment》

然后呢,我们需要用Bellman方程做动态规划(dynamic programming),也就是一个递归的函数(假设 t 时刻的value function 为 V_t (A_t)):

V_t (A_t) = inf {K_t (A_t, D_t) + E [V_t+1 (A_t+1)] }

V_t+1 (A_t+1) 实际上就等于V_t+1 [R_t+1 * (A_t + D_t) ]。由于 R_t+1 是未知的,所以我们需要用历史数据对其做分布预测,我简化了下,用了2017.07.01 到 2018.06.30 的 asset return 天数据拟合了正态分布。更复杂的可以拟合t 分布,广义误差分布,甚至偏 t 分布,拉普拉斯分布等等。这里不做介绍,大家自行开发。


附件:

1. Sample Code.mat

Code 包含参数设定,二次关系的最优化,外加Monte Carlo Simulation, 以及相应MC的Plots.

2. Sample_Data. mat


样本数据,CRSP里2017年6月30号根据 Fama-French 的 Industry SICCD 分类后的所有 Business Equipment 的股票 (采用PERMNO作为identifier,基本涵盖所有美国市场NYSE、NASDAQ、AMEX上市的常见IT、软件技术公司的股票),大概500多只的股票的天数据(weekday)。时期是从2017.06.30 到 2018.06.30,主要是为了保证 asset return 是从2017.07.01 到 2018.06.30。CFACPR是用来调整 stock split 的,都考虑在内。

大致结果:

样本里是30天的交易结果,从仓位0 (t=0)到仓位 0 (t=T), 交易结果,最小总成本为-2.4700, 也就是净赚2.4700 (随着天数增加,该数值呈几何增长)。样本code中的plots部分运行结果如下图(这是100次Monte Carlo后的均值结果,灰色线是每一次MC的结果,每个图代表各变量随时间的变化图):

Figure1.jpg
原文用的不是历史数据,我在他的基础上进行了历史数据模拟。更多的,原文采用的是凸优化解的近似DP过程,也就是ADP,需要用cvx package, 比较复杂。

欢迎大家讨论。

Sample_Data.zip (992.1 KB, 需要: 5 个论坛币) 本附件包括:
  • Sample_Data.mat



Sample_Code.zip (2.86 KB, 需要: 10 个论坛币) 本附件包括:
  • Sample_Code.m







二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:金融工程 MATLAB 最优化问题 投资组合交易

已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
cooloutman + 1 + 1 + 1 精彩帖子
我的素质低 + 100 + 10 + 2 + 2 + 2 精彩帖子
crystal8832 + 50 + 3 + 3 + 3 奖励积极上传好的资料

总评分: 经验 + 100  论坛币 + 60  学术水平 + 6  热心指数 + 6  信用等级 + 6   查看全部评分

加油吧,少年!
沙发
ZZXSIN 发表于 2018-9-2 10:55:58 |只看作者 |坛友微信交流群
楼主,真会赚金币,数据和代码分开上传,关键代码还没办法运行,谢谢你的分享,我看看能不能改一改代码

使用道具

藤椅
cxy199088 学生认证  发表于 2018-9-2 16:07:22 |只看作者 |坛友微信交流群
ZZXSIN 发表于 2018-9-2 10:55
楼主,真会赚金币,数据和代码分开上传,关键代码还没办法运行,谢谢你的分享,我看看能不能改一改代码
Trial 1.jpg run code之后
加油吧,少年!

使用道具

板凳
cxy199088 学生认证  发表于 2018-9-2 16:14:30 |只看作者 |坛友微信交流群
ZZXSIN 发表于 2018-9-2 10:55
楼主,真会赚金币,数据和代码分开上传,关键代码还没办法运行,谢谢你的分享,我看看能不能改一改代码
朋友你好,我已经把code跑之前和之后的截图上传给你了,希望你弄明白之后再来水帖。如果你有什么高见,我欢迎,或者说你觉得有什么困难和错误,我接受,也会尽我所能帮助你。但你这样说我会赚金币的态度,我有点不能接受。我分开上传是因为数据和code都带有原创性的,应该有各自的价值,而且我不确认其他同学是否同时需要这两样,因为我讲的已经很清楚了,数据怎么弄,如果不需要,何必花钱买呢?是不是我打包起来卖15金币,就是合理的了?我倒觉得有点强买强卖了。

使用道具

报纸
kenzo01 发表于 2018-9-12 09:08:29 |只看作者 |坛友微信交流群
非常感谢楼主。
刚接触matlab,这样的案例对现在的我来说太难。先留下,慢慢研究。
最优组合,资产管理中心SAA的老师们一天到晚在研究的,永远的题目啊。

使用道具

地板
cxy199088 学生认证  发表于 2018-9-12 21:23:52 |只看作者 |坛友微信交流群
kenzo01 发表于 2018-9-12 09:08
非常感谢楼主。
刚接触matlab,这样的案例对现在的我来说太难。先留下,慢慢研究。
最优组合,资产管理中 ...
不客气哈。大家相互学习。

其实这个案例看似难,但里面有很多基本但非常有用的矩阵运算,弄透了会收益很多。

使用道具

7
nihaojay 发表于 2019-4-22 15:56:10 |只看作者 |坛友微信交流群
楼主,代码运行不了啊,缺少POS函数

使用道具

8
cxy199088 学生认证  发表于 2019-4-22 21:20:40 来自手机 |只看作者 |坛友微信交流群
nihaojay 发表于 2019-4-22 15:56
楼主,代码运行不了啊,缺少POS函数
同学 你私信我一下你出现问题的截图 我看看能不能帮你解决

使用道具

9
nihaojay 发表于 2019-4-23 10:09:10 |只看作者 |坛友微信交流群
cxy199088 发表于 2019-4-22 21:20
同学 你私信我一下你出现问题的截图 我看看能不能帮你解决
截图未命名0423100541.jpeg

使用道具

10
nihaojay 发表于 2019-4-23 10:10:35 |只看作者 |坛友微信交流群
cxy199088 发表于 2019-4-22 21:20
同学 你私信我一下你出现问题的截图 我看看能不能帮你解决
缺少POS运算的代码,你上传的时候可能没放进去

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 06:06