Python基于粒子群优化的投资组合优化研究|附代码数据
全文链接:http://tecdat.cn/?p=6811
最近我们被客户要求撰写关于粒子群优化的研究报告,包括一些图形和统计输出。
我今年的研究课题是使用粒子群优化(PSO)的货币进位交易组合优化。在本文中,我将介绍投资组合优化并解释其重要性。其次,我将演示粒子群优化如何应用于投资组合优化。第三,我将解释套利交易组合,然后总结我的研究结果
组合优化
投资组合包括资产和投资资本。投资组合优化涉及决定每项资产应投入多少资金。随着诸如多样化要求,最小和最大资产敞口,交易成本和外汇成本等限制因素的引入,我使用粒子群优化(PSO)算法。
投资组合优化的工作原理是预测投资组合中每种资产的预期风险和收益。该算法接受这些预测作为输入,并确定应在每个资产中投入多少资本,以使投资组合的风险调整收益最大化并满足约束。每种资产的预期风险和收益的预测需要尽可能准确,以使算法表现良好。存在各种方法,在本研究中,我研究了三种常用的方法。
- 正态分布式收益- 在此方法中,创建历史资产值的分布并随机抽样以获得每个资产的未来值。该方法假设历史和未来值是正态分布的。
- 收益遵循布朗运动 - 在这种方法中,随着时间的推移生成每个资产的随机游走,表示每日收益。由此计算出投资组合的总体收益。这种方法假设未来的收益遵循随机游走。
- 收益遵循几何布朗运动 - 在这种方法中,再次生成随机游走,但根据每日方差和长期市场漂移进行标准化。该方法假设未来的收益遵循标准化的随机游走。
在我的研究中,我发现第三种方法是最准确的
粒子群优化(PSO)
在PSO中,群中的每个粒子表示为向量。在投资组合优化的背景下,这是一个权重向量,表示每个资产的分配资本。矢量转换为多维搜索空间中的位置。每个粒子也会记住它最好的历史位置。对于PSO的每次迭代,找到全局最优位置。这是群体中最好的最优位置。一旦找到全局最优位置,每个粒子都会更接近其局部最优位置和全局最优位置。当在多次迭代中执行时,该过程产生一个解决该问题的良好解决方案,因为粒子会聚在近似最优解上。
# 此类包含群中的粒子代码
class Particle:
velocity = []
pos = []
pBest = []
def __init__(self):
for i in range(dimension):
self.pos.append(random.random())
self.velocity.append(0.01 * random.random())
self.pBest.append(self.pos[i])
return
点击标题查阅往期内容
左右滑动查看更多
01
02
03
04
该图描绘了粒子群优化算法相对于全局最优(蓝色)和局部最优位置(红色)如何更新群体中每个粒子的位置。
# 此类包含粒子群优化算法类粒子参数优化器
class ParticleSwarmOptimizer:
solution = []
swarm = []
def __init__(self):
for h in range(swarmSize):
particle = Particle()
self.swarm.append(particle)
PSO的表现受到权重的影响。探索描述了PSO探索搜索空间不同区域的能力。Exploitation描述了PSO将搜索集中在搜索空间的有前途区域的能力。为了增强PSO的探索和开发能力,应用了以下算法增强功能:
- 聚合粒子的随机重新初始化 - 通过在粒子聚集在全局最优粒子上时重新启动粒子来改进探索。使用两个粒子(载体)之间的相似性函数测量收敛。
如果粒子在全局最优粒子附近会聚,但不如全局最优粒子合适,则在搜索空间的某处随机重新初始化。这提高了PSO的探索能力。
- 最优粒子的选择性突变 - 通过初始化邻近全局最优粒子的邻居来改进。如果邻居比全局最优粒子更好,则全局最优粒子被邻居取代。
对于算法的每次迭代,在全局最优粒子附近创建邻居。如果这些邻居中的任何一个优于全局最优粒子,则替换全局最优粒子。
使用粒子群优化的投资组合优化
PSO算法可用于优化投资组合。在投资组合优化的背景下,群中的每个粒子代表投资组合中资产之间的潜在资本分配。这些投资组合的相对适应性可以使用许多平衡风险和预期收益的金融效用函数之一来确定。我使用夏普比率,因为这已成为行业认可的基准投资组合表现标准。考虑以下适用于由三个资产组成的投资组合的PSO图示,
使用粒子群优化(PSO)的投资组合优化的例证。灰色粒子正在更新。红色粒子是灰色粒子的局部最优位置,蓝色粒子是全局最优位置。
灰色粒子转换为向量(0.5,0.2,0.3),意味着投资组合资本的50%分配给资产1,20%分配给资产2,30%分配给资产3。该分配的预期夏普比率为0.38,小于局部最优位置(红色粒子)和全局最优位置(蓝色粒子)。这样,灰色粒子的位置被更新,使得它更接近全局最优粒子和局部最优粒子。
使用粒子群优化(PSO)的投资组合优化的例证。灰色粒子被更新,使其更接近全局最优,并且是局部最优的。得到的矢量比以前更好。
灰色粒子已移动,现在转换为矢量(0.3,0.3,0.4),其预期夏普比率为0.48。该值高于之前的局部最优位置,因此局部最优位置(红色粒子)将更新为当前位置。
使用粒子群优化(PSO)的投资组合优化的例证。局部最优位置(红色粒子)现已更新为粒子的当前位置。
使用粒子群优化的真正挑战是确保满足投资组合优化的约束。如前所述,存在许多限制。最常见的限制因素首先是资产之间不再分配和不少于100%的可用资本(即权重向量必须加起来为1.0)。其次,不允许对资产进行负分配。最后,资本应该分配给投资组合中至少这么多资产。后者是基数约束。两种常用技术用于确保粒子满足约束条件,
- 修复不满足约束的粒子 - 对于不满足约束的每个粒子,应用一组规则来改变粒子的位置。
- 惩罚不满足约束的粒子的适应性 - 对于不满足约束的每个粒子,惩罚该粒子的夏普比率。
套利交易组合组合
对于我的研究,我将这种技术应用于套利交易组合。套利交易组合包括多个套利交易。套利交易是一种交易策略,其中交易者卖出利率相对较低的货币,并使用这些资金购买不同的货币,从而产生更高的利率。使用此策略的交易者试图找到称为利率差异的利率之间的差异。
通过使多种货币的投资多样化,可以减轻外汇损失的风险,但不能消除。因此,套利交易的投资组合本身风险低于个别套利交易。在套利交易投资组合的背景下,投资组合优化的目标是进一步降低外汇损失的风险,同时提高投资组合实现的投资收益。
投资组合优化的目标是确定应为每笔交易分配多少资金以优化风险调整收益。
在我的研究中,我使用粒子群优化算法来确定一组套利交易之间的投资资本的最优分配。我的研究中的套利交易投资组合包括22种不同的货币。货币包括澳元,加拿大元,瑞士法郎,人民币等。
非常感谢您阅读本文,有任何问题请在下面留言!
本文摘选 《 Python基于粒子群优化的投资组合优化研究 》 ,点击“阅读原文”获取全文完整资料。
点击标题查阅往期内容
动量和马科维茨Markowitz投资组合(Portfolio)模型实现
Python风险价值计算投资组合VaR、期望损失ES
极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析
Fama French (FF) 三因子模型和CAPM模型分析股票市场投资组合风险/收益可视化
R语言Fama-French三因子模型实际应用:优化投资组合
R语言动量和马科维茨Markowitz投资组合(Portfolio)模型实现
Python计算股票投资组合的风险价值(VaR)
R语言Markowitz马克维茨投资组合理论分析和可视化
R语言中的广义线性模型(GLM)和广义相加模型(GAM):多元(平滑)回归分析保险资金投资组合信用风险敞口
Python基于粒子群优化的投资组合优化研究
多均线趋势策略玩转股票投资R语言中的广义线性模型(GLM)和广义相加模型(GAM):多元(平滑)回归分析保险资金投资组合信用风险敞口Python基于粒子群优化的投资组合优化研究隐马尔科夫模型(HMM)在股票市场实战R语言隐马尔可夫模型HMM识别不断变化的股票市场条件基于ARCH模型股价波动率建模分析
R使用LASSO回归预测股票收益
IBM SPSS Modeler通过数据挖掘我们能从股市数据得到什么
用R语言实现神经网络预测股票实例
使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略
用R语言实现神经网络预测股票实例
用机器学习识别不断变化的股市状况—隐马尔科夫模型(HMM)股票指数预测实战
Python基于粒子群优化的投资组合优化研究|附代码数据的更多相关文章
- 基于粒子群优化的无约束50维Rosenbrock函数求解
基于粒子群优化的无约束50维Rosenbrock函数求解 一.问题重述 无约束50维的Rosenbrock函数可以描述如下: 其中, 0 要求按PSO算法思想设计一个该问题的求解算法. Rosenbr ...
- 基于粒子群算法求解求解TSP问题(JAVA)
一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...
- 基于粒子群算法的分组背包MATLAB实现
抽空看了一段时间的粒子群算法,这里仅针对其应用于动态规划中的背包问题的情况做下总结归纳,其他应用可以之后想到了再添加. 一:分组背包问题简介 假设有3个组,每组有2个物品,每种物品有3种属性,价值.体 ...
- 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)
前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...
- python工具-将视频按帧截取图片(附代码)
描述:将一个视频流按帧数截取大量的图片 用途:AI的数据集制作,得到大量的图片,之后将其打标签 更改的地方 1.default--间隔的帧数 2.input/output--输入视频的路径.存放截 ...
- python德国信用评分卡建模(附代码AAA推荐)
欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 python信用评分卡建模视频系列教程(附代码) 博主录制 https://study.163.com/course/i ...
- 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(二)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 前面我们介绍了特征选择(Feature S ...
- 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(一)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:Geppetto 在机器学习中,离散化(Discretiza ...
- 粒子群优化算法(PSO)之基于离散化的特征选择(FS)(三)
作者:Geppetto 前面我们介绍了特征选择(Feature Selection,FS)与离散化数据的重要性,总览的介绍了PSO在FS中的重要性和一些常用的方法,介绍了FS与离散化的背景,介绍本文所 ...
- [Algorithm] 群体智能优化算法之粒子群优化算法
同进化算法(见博客<[Evolutionary Algorithm] 进化算法简介>,进化算法是受生物进化机制启发而产生的一系列算法)和人工神经网络算法(Neural Networks,简 ...
随机推荐
- new Date(time).getTime()在ios返回NaN
解决: IOS识别(年月日时分秒) new Date(2010,0,1,0,0,0).getTime() 1.问题出在: 日期转成时间戳getTime(): var time = "2017 ...
- AI 能多强「GitHub 热点速览」
不知道 AI 在你那边是什么样的具象,在我这就是各种搞图:从给线稿图上色,到直接给你生成一张小色图,AI 最近是真出风头,本周热点速览也收录了 2 个 AI 项目,也和图像有关.还有一个和 AI 相关 ...
- sqlit 自增id为null
CREATE TABLE proejct( id UNSIGNED INTEGER AUTO_INCREMENT, name VARCHAR(50) NOT NULL, type CHAR(10) N ...
- C# 游戏雏形 人物地图双重移动
1. 设计出发点 准备做一个旅游短视频,想实现一个小人或汽车在百度地图上按指定路线移动的效果,把之前自己写的代码拿出来,修改完成. 主要修改内容: (1)实现了人物地图双移动.即如果人物向屏幕中间移动 ...
- element-ui的collapse中嵌套table表格 的 高度跳跃 问题
<script src="//unpkg.com/vue@2.6.10/dist/vue.js"></script><script src=" ...
- element的upload手动submit前动态设置上传请求地址
标签地址绑定一个变量 动态修改上传请求地址代码: nextTick是DOM更新后触发,不使用nextTick直接submit,上传地址仍然会使用初始url地址 _this = this; this.u ...
- Datax-web入门配置与启动
在idea中启动Datax-web 需要先将Datax在本地安装,可以参考这篇文章(datax在win10中的安装) 1.从github上拉取源码 https://github.com/WeiYe-J ...
- Ansible 实记
自动化运维工具 Ansible ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件co ...
- java 复习篇1-----人机交互
CMD命令 盘符名称+冒号 说明:盘符切换 举例:e:回车,表示切换到e盘 dir: 说明:查看当前路径下的内容 cd目录: 说明:进入单级目录 举例:cd itheima cd. . 说明:回退到上 ...
- cuda、cudnn、tnesorrt的查看安装
1.首先本地查看cuda已安装的版本 11.7输入命令:[nvcc -V]输出:nvcc: NVIDIA (R) Cuda compiler driverCopyright (c) 2005-2022 ...