日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用Scipy中的linprog解决股票融资中的线性规划问题

發布時間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用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解决股票融资中的线性规划问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。