用Scipy中的linprog解决股票融资中的线性规划问题
问题:
目前有自有资金100万元,已开通融资融券,可融资额度为100万元。现已经确定需要买的10只股票(见下表),在尽量把自有资金用完的前提下,要求每只股票每只股票买入金额大致相等,并且能够使获得的融资额最大。
下表为每只股票的保证金比例及担保品折算率:
|
保证金比例(A1..A10) |
担保品折算率(B1...B10) |
601996 |
1 |
0.65 |
688598 |
1.5 |
0.5 |
603657 |
0 |
0.65 |
000875 |
1 |
0.65 |
002015 |
0 |
0.65 |
688595 |
1.5 |
0.5 |
601600 |
1 |
0.65 |
002721 |
0 |
0 |
000818 |
1 |
0.65 |
600152 |
0 |
0.65 |
变量分析:
10只股票,每只股票可进行担保品买入和融资买入,则有20个变量:x1,x2...x20.其中x1...x10对应上表中从上往下各股票担保品买入金额,x11...x20对应各股票融资买入金额。
规划目标分析:
融资买入总额最大MAX(z)=x11+x12+...+x20
约束条件分析:
条件1,融资警戒线为145%:x1+x2+...+y10>=1.45(x11+x12+..+x20)
条件2,担保品买入总额:x1+x2+...+x10≤1000000
条件3: 担保品折算后需大于融资额:A1*x11+A2*x12+...+A10*x20<=B1x1+B2x2+...B10*x10
条件4:只股票每只股票买入金额大致相等。每两只股票间具有如下类似关系: x1+x11≤1.2(x2+x12),总计10*9=90个约束。其中1.2为差异度,大致相当于两只股票买入金额差小于20%即为接近相等。
条件5:不能融资的股票。从上表中可以看到,有四只股票保证金比例为0,表示不能融资。例如600152不能融资,则有:X20=0。
运行结果为
[2.95546559e+04 1.33603239e+05 1.60323887e+05 2.95546557e+04
1.60323887e+05 1.33603239e+05 2.95546560e+04 1.33603239e+05
2.95546559e+04 1.60323887e+05 1.30769231e+05 2.83363480e-05
0.00000000e+00 1.30769231e+05 0.00000000e+00 2.83363480e-05
1.30769231e+05 0.00000000e+00 1.30769231e+05 0.00000000e+00]
前10个数字为各股票担保品买入额,后10各数字为各股票融资买入额。
源代码如下:
import numpy as np
from scipy.optimize import linprogmoney=1000000#可用资金额
count=10#股票数量
warning_value=1.45#预警线
balance_value=1.2#股票买入额差异比
levers=[1,1.5,0,1,0,1.5,1,0,1,0]#保证金比例
guarantees=[0.65,0.5,0.65,0.65,0.65,0.5,0.65,0,0.65,0.65]#担保品折算率#规划目标为可融资额总和,每个元素对应各变量的系数,这里后一半变量为可融资额
c=np.zeros(shape=(count*2,), dtype = np.float64)
for i in range(count):c[count+i]=1.0#第一行初始化维持担保比例约束,按警戒线。
#第二行按现金确定最大担保买入量。
#第三行保证金比例约束
data=np.zeros(shape=(3,count*2), dtype = np.float64)
for i in range(count): data[0][i]=-1.0if levers[i]>0:data[0][count+i]=warning_valueelse:data[0][count+i]=0data[1][i]=1.0data[1][count+i]=0data[2][i]=-guarantees[i]data[2][count+i]=levers[i]#第4-93行为股票买入额相近约束
for i in range(count-1):line=np.zeros(shape=(1,count*2),dtype=np.float64)line[0][0]=1.0line[0][count]=1.0line[0][i+1]=0-balance_valueline[0][i+count+1]=0-balance_valuefor j in range(count):line2=np.roll(line,j)data=np.concatenate((data,line2),axis=0)
A_ub=data
B_ub=np.zeros(shape=(count*(count-1)+3,), dtype = np.float64)
B_ub[1]=money#融资额为0的约束。
A_eq=np.empty(shape=(0,count*2),dtype = np.float64)
zero_count=0
for i in range(count):if levers[i]>0:continueelse:tmp=np.zeros(shape=(1,count*2), dtype = np.float64)tmp[0][count+i]=1.0A_eq=np.concatenate((A_eq,tmp),axis=0)zero_count=zero_count+1
B_eq=np.zeros(shape=(zero_count,), dtype = np.float64)
#第1个参数为-c,表示求最大值。
res=linprog(-c,A_ub,B_ub,A_eq,B_eq)
if res.success==False:exit(1)
#res.x中为对应x1,x2...x20的各个变量的值。
print(res.x)
用Scipy中的linprog解决股票融资中的线性规划问题相关推荐
- deepin中zz_如何解决R中的FizzBuzz问题
deepin中zz The FizzBuzz problem is a classic test given in coding interviews. The task is simple: Fiz ...
- servlet和action中获取URL中的汉字(解决URL中汉字为乱码的问题) .
2019独角兽企业重金招聘Python工程师标准>>> 最近在项目中又遇到一个小问题,通过HttpURLConnection来传递汉字时,服务端获取汉字参数时都为乱码,以下分别为在s ...
- python中幂函数_解决python中的幂函数、指数函数问题
最近在调代码,碰到幂函数.指数函数,总是提示 ValueError: math domain error ValueError: negative number cannot be raised to ...
- html中jsonp错误,解决jquery中jsonp格式跨域请求报parsererror的错误
在vs中创建一个空的mvc项目,在Controllers文件夹中添加一个控制器CommonController,并在该控制器下添加一个action用于获取服务器时间,代码如下: public Acti ...
- MATLAB解决线性规划问题,学会使用linprog函数,在一个实例中演示linprog函数各参数的用法
最近接触到了一个线性规划的题目,尝试用MATLAB解决,动手前想了很多思路,上网搜索了一下发现MATLAB中有专门的linprog函数专门解决线性规划问题,了解学习后果然十分方便.事实上,绝大部分的线 ...
- 用matlab中的linprog,matlab中linprog
§15. 利用 Matlab 求解线性规划问题 线性规划是一种优化方法,Matlab 优化工具箱中有现成函数 linprog 对如 下式描述的 LP 问题求解: % min f'x % s.t ... ...
- vue实战(1)——解决element-ui中upload组件使用多个时无法绑定对应的元素
解决element-ui中upload组件使用多个时无法绑定对应的元素 以前写的项目关于图片上传的都是单张或几张图片上传(主要是基于vue的element),图片路径都是固定写的,所以遇见过列表中多个 ...
- 解决Chrome中UEditor插入图片的选择框加载过慢问题
解决Chrome中UEditor插入图片的选择框加载过慢问题 ../resources/plugins/ueditor/ueditor.all.js 中line24489/24498中的 accept ...
- 今日头条首次改进DQN网络,解决推荐中的在线广告投放问题
(图片付费下载自视觉中国) 作者 | 深度传送门 来源 | 深度传送门(ID:gh_5faae7b50fc5) [导读]本文主要介绍今日头条推出的强化学习应用在推荐的最新论文[1],首次改进DQN网络 ...
- 操作系统中进程并发运行的过程_三种电磁流量计运行过程中常见故障解决详情!...
原标题:三种电磁流量计运行过程中常见故障解决详情! 昨天给大家介绍了电磁流量计的一些典型故障,今天我们继续来谈电磁流量计的故障问题!电磁流量计在正常的保养与维护之后,在正常使用的过程中依旧是会因为当时 ...
最新文章
- LInux初始学习篇:基本命令使用
- java图书凭租_如何通过java一步实现租书系统
- 美国检测病毒3270美元,中国仅40,问题出在哪?
- 基于物理着色(二)- Microfacet材质和多层材质
- 邮箱与手机做账号的验证实例
- live2d_Live2D 性能优化
- 计算机的excel的知识,计算机基础知识excel题「附答案」
- HTC One/M7 电信专版802d升级版,毒蛇工具,网络流量,永久root,加固信号稳定,流畅ROM
- 目标跟踪CVPR,ICCV,ECCV文章及代码实时更新
- 高度坍塌的产生条件和解决方法
- 万网域名注册促销活动 - 阿里云域名优惠口令免费获取
- python scratch unity_极客晨星:少儿编程热门语言,除了Scratch还有哪些
- 使用R/qtl进行QTL分析
- AC自动机模板(【洛谷3808】)
- VR全景拍摄怎么设置相机
- onenote 入门笔记_Windows 10中的OneNote入门指南
- 剑指Offer (九):跳台阶问题进阶版(Java版)
- 【数字逻辑与数字系统设计】应对期末考(更新于2022/4/15)
- 4、Kafka API实战
- 计算机考研复试看成绩单吗,【必看】往届生复试你的成绩单去哪儿打印?