【项目】基于蚁群算法的证券投资组合优化

在证券交易中,为了降低风险,经常使用一笔资金购买多支股票。那么,如何合理地选择证券组合,并确定每支证券的资金分配系数,以使预期风险最低,预期收益最高,就成了一个经典的经济学问题 – 证券投资组合优化问题。

1952年,马科维茨首次提出均值-方差模型(Markowitz Mean-Variance Model)。该模型利用股票的历史交易数据,定义了股票的预期风险与收益,并引入“无差异曲线”和“有效市场边界”的概念,最终导出了最佳投资组合的计算公式。

本文利用蚁群算法,求解马科维茨均值-方差模型。蚁群算法是一个群体智能算法,因其较强的鲁棒性和适用性,被广泛应用于工业界,是一种研究较为成熟的算法。

研究背景

一个证券投资组合,简单来说就是一组证券及其选购系数的组合。选购系数均大于零(不允许做空),且和为1。

portfolio

余超在**《基于蚁群算法的投资组合优化研究》**中给出了完整的模型假设。概括如下:

  1. 一只蚂蚁代表了一个投资组合;
  2. 在投资组合优化问题中的蚁群算法要采用连续域优化;
  3. 相较于传统蚁群问题,该算法中信息素应该在城市而非路径上积累;
  4. 可在蚂蚁移动过程中加入随机扰动以增加全局搜索能力。

余超在模型基础上已经做了非常完整的工作,但是没能求出完整的有效市场边界。

于是,卞蓓丽在**《蚁群算法在多目标优化的证券投资组合中的应用研究》**中指出,多目标优化的证券投资组合问题是没有绝对最优解的,而是有一群无法相互支配的解形成的有效边界。对多目标优化问题而言,最重要的是求出有效边界,而不仅仅是求出一两个更优解,后者用单目标就可以完成。余超的多目标研究没有求出有效边界。”

卞蓓丽提示我们:因为,投资组合问题,本质上是一个多目标优化问题。所以,我们要计算出完整的有效边界曲线,才算达成预期目标。

余超建立了基础模型,而卞蓓丽在余超的基础上进行了改进。本文借鉴他们二人建立的数学模型,利用多元函数连续域蚁群算法,求解马科维茨均值-方差模型。

研究方法

(一)马科维茨投资组合理论简介

投资组合的预期收益($𝒓_𝒑$):单一证券i的预期收益为$E\left(r_{i}\right) $,式中$r_{i s}$为针对状况s证券i的收益率,$P_{s}$是状态s出现的概率;在计算了所有N个证券的预期收益率后,就可以计算出证券组合的预期收益率$𝒓_𝒑$,式中$x_{i}$表示组合中证券i所占的比例,即加权系数。

  • 单一证券i的预期收益: $E\left(r_{i}\right)=\sum_{s=1}^{n} r_{i s} * P_{s}$

  • 证券组合的预期收益: $\overline{r_{p}}=\sum_{i=1}^{N} x_{i} * E\left(r_{i}\right)$

投资组合的预期风险($𝝈_{𝒑}$):单一证券i的预期风险为$\sigma_{\mathrm{i}} $,式中$r_{i s}$为针对状况s证券i的收益率,$P_{S}$是状态s出现的概率,$E\left(r_{i}\right) $为证券i的预期收益率 ;在计算了所有N个证券的预期风险后,就可以计算出证券组合的预期风险$\sigma_{\mathrm{p}}$ ,式中$\operatorname{cov}_{i j}$表示证券i和证券j的协方差,$x_{i}$$x_{j}$表示组合中证券i和证券j所占的比例,即加权系数。

  • 单一证券i的预期风险: $\sigma_{\mathrm{i}}=\left(\sum_{s=1}^{n}\left[r_{i s}-E\left(r_{i}\right)\right]^{2} * P_{S}\right)^{\frac{1}{2}}$

  • 证券组合的预期风险: $\sigma_{\mathrm{p}}=\left(\sum_{i=1}^{N} \sum_{j=1}^{N} \operatorname{cov}_{i j} * x_{i} * x_{j}\right)^{\frac{1}{2}}$

有效市场边界: 有效市场边界是所有最佳投资组合(Efficient Portfolio)的集合。有效前沿曲线上面的每一点都代表一个最佳投资组合。下图曲线就是有效市场边界,有效市场边界满足以下两个条件:

  1. 对每一水平的风险,该组合提供最大的预期收益;
  2. 对每一水平的预期收益,该组合能提供最小的风险。

有效市场边界

(二)蚁群算法在马科维茨模型中的应用

具体到蚁群算法中,一只蚂蚁代表一个投资组合$𝑃=\{𝑥_1,𝑥_2,⋯,𝑥_𝑛\}$。通过马科维茨理论,我们可以计算出该投资组合P对应的均值和方差。将均值、方差绘制在r-σ二维空间上,可以观察各个投资组合之间的帕累托关系,可分为三种情况:明显优于、明显劣于、和无法比较优劣。

最终我们求出的有效市场边界上的近似点,就是由这样一组无法比较优劣的点组成的,我们把它叫作一组无法相互支配的最优解。

投资组合之间的关系

研究模型

(一)模型假设

  1. 假设投资者选择n只证券,则每个投资组合可视为一个n维单位向量$𝑃=\{𝑥_1,𝑥_2,⋯,𝑥_𝑛\}$,其中$𝑥_𝑖$表示第𝑖只证券所占权重,$x_𝑖>0$
  2. 假设在蚁群中有m只蚂蚁,每只蚂蚁都代表一个投资组合P。蚂蚁移动的过程,相当于从一个投资组合变换到另一个投资组合。
  3. 目标函数空间是一个连续的r-σ二维空间,其值由每个投资组合P的收益率的均值方差决定。其中r代表收益率均值,σ代表收益率的标准差。
  4. 该模型采用的是单期方法,即在t=0时刻买入一个资产组合,在t=1时卖出。
  5. 信息素在蚂蚁身上积累,越接近有效边界的蚂蚁,释放的信息素越多。蚂蚁对身边一定范围内的其他蚂蚁有吸引作用,且自身积累的信息素越多,吸引越强。
  6. 交易没有最小交易单位限制,即能以分数股的形式交易。
  7. 交易中无交易成本。
  8. 交易不允许卖空。(即$𝑥_𝑖≥0$)

(二)模型改进:多元函数连续域蚁群算法

本文以一种二元函数连续域蚁群算法为蓝本,改进为**n元函数连续域蚁群算法**。原算法效果如下:

多元函数连续域蚁群算法

Note: 众所周知,绘图最高只能画到三维,恕我无法直观地表达n元函数连续域蚁群算法的效果。但是最终效果可以从求解马科维茨均值方差模型的近似求解中看出来。详细效果见后文

(三)模型特点

目前的研究者大多采用改进TSP蚁群算法求解投资组合优化问题。而本文采用的是一种改进的多元函数极值寻优蚁群算法。TSP问题和投资组合问题的区别在于,TSP问题的决策空间是离散的,而投资组合问题的决策空间则是连续的。这就导致在将TSP蚁群算法应用到组合优化问题时,需要对数据类型、信息素积累规则和寻优方式进行一系列改进,造成不必要的麻烦。本文采用的改进的多元函数极值寻优蚁群算法,本身就是一种连续域算法,仅需很小的改动,就能运用于投资组合问题中。

(四)寻优步骤

  1. 初始化蚂蚁。算法会根据信息素,确定每只蚂蚁对应的转移概率。
  2. 本文以转移概率作为衡量指标。按照转移概率大小的不同,分别选择局部搜索策略和全局搜索策略。当转移概率较小时,说明当前蚂蚁比较接近最优蚂蚁,采用局部搜索策略;当转移概率较大时,采用全局搜索策略。
  3. 计算搜索产生的新投资组合的均值和方差,判断新组合和原组合解的帕累托关系,如果新组合优于原组合,则用新组合的投资组合P替代原组合。
  4. 根据出现的新投资组合,计算本轮信息素。考虑挥发系数Rou,将上轮信息素乘以(1-Rou),在加上本轮新增信息素,得出迭代至下一轮的信息素向量。

研究成果

(一)原始数据

股票选取的方法是:随机选取一只基金,取持股比例排名前十的股票构成我们的投资组合。我选取的是名为“国泰策略收益灵活配置混合”的基金,它的持股情况如下:

股票简称 证券代码 持股比例
招商银行 600036 4.98%
浙江医药 600216 4.30%
中国平安 601318 3.73%
京东方A 000725 3.54%
宁波银行 002142 3.49%
桐昆股份 601233 3.36%
隆基股份 601012 3.24%
牧原股份 002714 2.59%
平安银行 000001 2.49%
复星医药 600196 2.47%

十只股票确定后,收集这些股票近一个月的收盘价数据(左图),用MATLAB的price2ret函数,可通过收盘价计算股票的收益率(右图)。

计算收益率

(二)计算结果

从下图中可以看出,蚁群算法的解形成了清晰的Pateto有效前沿。而且解的分布范围广,说明该算法具有良好的搜索能力,能保证结果的多样性。

计算结果

和MATLAB金融工具箱相比,因为蚁群算法的迭代次数较多,对解的探索能力强,因此整体而言,蚁群算法的解要优于MATLAB金融工具箱的解。

为了进一步验证本文设计的蚁群算法的算法性能,我们选取了前3只股票。即在n=3的情况下,暴力计算了有效市场边界。下图表示了MATLAB金融工具箱、蚁群算法、暴力算法的结果比较:

结果比较

从图中可以看出,蚁群算法确实优于金融工具箱的解,和真实的有效市场边界更为接近。

本篇是我的本科毕业论文,
如有兴趣,欢迎探讨: )