问题:

目前有自有资金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解决股票融资中的线性规划问题相关推荐

  1. deepin中zz_如何解决R中的FizzBu​​zz问题

    deepin中zz The FizzBuzz problem is a classic test given in coding interviews. The task is simple: Fiz ...

  2. servlet和action中获取URL中的汉字(解决URL中汉字为乱码的问题) .

    2019独角兽企业重金招聘Python工程师标准>>> 最近在项目中又遇到一个小问题,通过HttpURLConnection来传递汉字时,服务端获取汉字参数时都为乱码,以下分别为在s ...

  3. python中幂函数_解决python中的幂函数、指数函数问题

    最近在调代码,碰到幂函数.指数函数,总是提示 ValueError: math domain error ValueError: negative number cannot be raised to ...

  4. html中jsonp错误,解决jquery中jsonp格式跨域请求报parsererror的错误

    在vs中创建一个空的mvc项目,在Controllers文件夹中添加一个控制器CommonController,并在该控制器下添加一个action用于获取服务器时间,代码如下: public Acti ...

  5. MATLAB解决线性规划问题,学会使用linprog函数,在一个实例中演示linprog函数各参数的用法

    最近接触到了一个线性规划的题目,尝试用MATLAB解决,动手前想了很多思路,上网搜索了一下发现MATLAB中有专门的linprog函数专门解决线性规划问题,了解学习后果然十分方便.事实上,绝大部分的线 ...

  6. 用matlab中的linprog,matlab中linprog

    §15. 利用 Matlab 求解线性规划问题 线性规划是一种优化方法,Matlab 优化工具箱中有现成函数 linprog 对如 下式描述的 LP 问题求解: % min f'x % s.t ... ...

  7. vue实战(1)——解决element-ui中upload组件使用多个时无法绑定对应的元素

    解决element-ui中upload组件使用多个时无法绑定对应的元素 以前写的项目关于图片上传的都是单张或几张图片上传(主要是基于vue的element),图片路径都是固定写的,所以遇见过列表中多个 ...

  8. 解决Chrome中UEditor插入图片的选择框加载过慢问题

    解决Chrome中UEditor插入图片的选择框加载过慢问题 ../resources/plugins/ueditor/ueditor.all.js 中line24489/24498中的 accept ...

  9. 今日头条首次改进DQN网络,解决推荐中的在线广告投放问题

    (图片付费下载自视觉中国) 作者 | 深度传送门 来源 | 深度传送门(ID:gh_5faae7b50fc5) [导读]本文主要介绍今日头条推出的强化学习应用在推荐的最新论文[1],首次改进DQN网络 ...

  10. 操作系统中进程并发运行的过程_三种电磁流量计运行过程中常见故障解决详情!...

    原标题:三种电磁流量计运行过程中常见故障解决详情! 昨天给大家介绍了电磁流量计的一些典型故障,今天我们继续来谈电磁流量计的故障问题!电磁流量计在正常的保养与维护之后,在正常使用的过程中依旧是会因为当时 ...

最新文章

  1. LInux初始学习篇:基本命令使用
  2. java图书凭租_如何通过java一步实现租书系统
  3. 美国检测病毒3270美元,中国仅40,问题出在哪?
  4. 基于物理着色(二)- Microfacet材质和多层材质
  5. 邮箱与手机做账号的验证实例
  6. live2d_Live2D 性能优化
  7. 计算机的excel的知识,计算机基础知识excel题「附答案」
  8. HTC One/M7 电信专版802d升级版,毒蛇工具,网络流量,永久root,加固信号稳定,流畅ROM
  9. 目标跟踪CVPR,ICCV,ECCV文章及代码实时更新
  10. 高度坍塌的产生条件和解决方法
  11. 万网域名注册促销活动 - 阿里云域名优惠口令免费获取
  12. python scratch unity_极客晨星:少儿编程热门语言,除了Scratch还有哪些
  13. 使用R/qtl进行QTL分析
  14. AC自动机模板(【洛谷3808】)
  15. VR全景拍摄怎么设置相机
  16. onenote 入门笔记_Windows 10中的OneNote入门指南
  17. 剑指Offer (九):跳台阶问题进阶版(Java版)
  18. 【数字逻辑与数字系统设计】应对期末考(更新于2022/4/15)
  19. 4、Kafka API实战
  20. 计算机考研复试看成绩单吗,【必看】往届生复试你的成绩单去哪儿打印?

热门文章

  1. 11gR2 RAC vip和network资源的依赖性与频繁failover
  2. 怎么设置计算机 图标显示桌面快捷方式,如何设置显示桌面快捷键 设置显示桌面快捷键方法【图文】...
  3. Cocoa与Cocoa Touch区别
  4. kinect游戏下载
  5. JavaWeb 登陆界面
  6. 【颜纠日记】祛痘广告那么神?分享确切的祛痘方式。
  7. Paul Graham:如何做好天使投资
  8. 百度Clouda的初步探索
  9. iphone 操作手势种类
  10. 透过数据看真相:手游市场趋势报告