siat 3.10.132__py3-none-any.whl → 3.10.133__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. siat/__init__.py +0 -0
  2. siat/allin.py +0 -0
  3. siat/assets_liquidity.py +0 -0
  4. siat/beta_adjustment.py +0 -0
  5. siat/beta_adjustment_china.py +0 -0
  6. siat/blockchain.py +0 -0
  7. siat/bond.py +0 -0
  8. siat/bond_base.py +0 -0
  9. siat/bond_china.py +0 -0
  10. siat/bond_zh_sina.py +0 -0
  11. siat/capm_beta.py +0 -0
  12. siat/capm_beta2.py +0 -0
  13. siat/compare_cross.py +0 -0
  14. siat/copyrights.py +0 -0
  15. siat/cryptocurrency.py +0 -0
  16. siat/economy.py +0 -0
  17. siat/economy2.py +0 -0
  18. siat/esg.py +0 -0
  19. siat/event_study.py +0 -0
  20. siat/exchange_bond_china.pickle +0 -0
  21. siat/fama_french.py +0 -0
  22. siat/fin_stmt2_yahoo.py +0 -0
  23. siat/financial_base.py +0 -0
  24. siat/financial_statements.py +0 -0
  25. siat/financials.py +0 -0
  26. siat/financials2.py +0 -0
  27. siat/financials_china.py +0 -0
  28. siat/financials_china2.py +0 -0
  29. siat/fund.py +0 -0
  30. siat/fund_china.pickle +0 -0
  31. siat/fund_china.py +0 -0
  32. siat/future_china.py +0 -0
  33. siat/google_authenticator.py +0 -0
  34. siat/grafix.py +0 -0
  35. siat/holding_risk.py +0 -0
  36. siat/luchy_draw.py +0 -0
  37. siat/market_china.py +0 -0
  38. siat/markowitz.py +0 -0
  39. siat/markowitz2.py +0 -0
  40. siat/markowitz2_20250704.py +0 -0
  41. siat/markowitz2_20250705.py +0 -0
  42. siat/markowitz_simple.py +0 -0
  43. siat/ml_cases.py +0 -0
  44. siat/ml_cases_example.py +0 -0
  45. siat/option_china.py +0 -0
  46. siat/option_pricing.py +0 -0
  47. siat/other_indexes.py +0 -0
  48. siat/risk_adjusted_return.py +0 -0
  49. siat/risk_adjusted_return2.py +0 -0
  50. siat/risk_evaluation.py +0 -0
  51. siat/risk_free_rate.py +0 -0
  52. siat/sector_china.py +0 -0
  53. siat/security_price2.py +0 -0
  54. siat/security_prices.py +40 -2
  55. siat/security_trend.py +0 -0
  56. siat/security_trend2.py +0 -0
  57. siat/stock.py +0 -0
  58. siat/stock_advice_linear.py +0 -0
  59. siat/stock_base.py +0 -0
  60. siat/stock_china.py +0 -0
  61. siat/stock_info.pickle +0 -0
  62. siat/stock_prices_kneighbors.py +0 -0
  63. siat/stock_prices_linear.py +0 -0
  64. siat/stock_profile.py +0 -0
  65. siat/stock_technical.py +0 -0
  66. siat/stooq.py +0 -0
  67. siat/transaction.py +0 -0
  68. siat/translate.py +0 -0
  69. siat/valuation.py +0 -0
  70. siat/valuation_china.py +0 -0
  71. siat/var_model_validation.py +0 -0
  72. siat/yf_name.py +0 -0
  73. {siat-3.10.132.dist-info/licenses → siat-3.10.133.dist-info}/LICENSE +0 -0
  74. {siat-3.10.132.dist-info → siat-3.10.133.dist-info}/METADATA +232 -235
  75. siat-3.10.133.dist-info/RECORD +78 -0
  76. {siat-3.10.132.dist-info → siat-3.10.133.dist-info}/WHEEL +1 -1
  77. {siat-3.10.132.dist-info → siat-3.10.133.dist-info}/top_level.txt +0 -1
  78. build/lib/build/lib/siat/__init__.py +0 -75
  79. build/lib/build/lib/siat/allin.py +0 -137
  80. build/lib/build/lib/siat/assets_liquidity.py +0 -915
  81. build/lib/build/lib/siat/beta_adjustment.py +0 -1058
  82. build/lib/build/lib/siat/beta_adjustment_china.py +0 -548
  83. build/lib/build/lib/siat/blockchain.py +0 -143
  84. build/lib/build/lib/siat/bond.py +0 -2900
  85. build/lib/build/lib/siat/bond_base.py +0 -992
  86. build/lib/build/lib/siat/bond_china.py +0 -100
  87. build/lib/build/lib/siat/bond_zh_sina.py +0 -143
  88. build/lib/build/lib/siat/capm_beta.py +0 -783
  89. build/lib/build/lib/siat/capm_beta2.py +0 -887
  90. build/lib/build/lib/siat/common.py +0 -5360
  91. build/lib/build/lib/siat/compare_cross.py +0 -642
  92. build/lib/build/lib/siat/copyrights.py +0 -18
  93. build/lib/build/lib/siat/cryptocurrency.py +0 -667
  94. build/lib/build/lib/siat/economy.py +0 -1471
  95. build/lib/build/lib/siat/economy2.py +0 -1853
  96. build/lib/build/lib/siat/esg.py +0 -536
  97. build/lib/build/lib/siat/event_study.py +0 -815
  98. build/lib/build/lib/siat/fama_french.py +0 -1521
  99. build/lib/build/lib/siat/fin_stmt2_yahoo.py +0 -982
  100. build/lib/build/lib/siat/financial_base.py +0 -1160
  101. build/lib/build/lib/siat/financial_statements.py +0 -598
  102. build/lib/build/lib/siat/financials.py +0 -2339
  103. build/lib/build/lib/siat/financials2.py +0 -1278
  104. build/lib/build/lib/siat/financials_china.py +0 -4433
  105. build/lib/build/lib/siat/financials_china2.py +0 -2212
  106. build/lib/build/lib/siat/fund.py +0 -629
  107. build/lib/build/lib/siat/fund_china.py +0 -3307
  108. build/lib/build/lib/siat/future_china.py +0 -551
  109. build/lib/build/lib/siat/google_authenticator.py +0 -47
  110. build/lib/build/lib/siat/grafix.py +0 -3636
  111. build/lib/build/lib/siat/holding_risk.py +0 -867
  112. build/lib/build/lib/siat/luchy_draw.py +0 -638
  113. build/lib/build/lib/siat/market_china.py +0 -1168
  114. build/lib/build/lib/siat/markowitz.py +0 -2363
  115. build/lib/build/lib/siat/markowitz2.py +0 -3150
  116. build/lib/build/lib/siat/markowitz2_20250704.py +0 -2969
  117. build/lib/build/lib/siat/markowitz2_20250705.py +0 -3158
  118. build/lib/build/lib/siat/markowitz_simple.py +0 -373
  119. build/lib/build/lib/siat/ml_cases.py +0 -2291
  120. build/lib/build/lib/siat/ml_cases_example.py +0 -60
  121. build/lib/build/lib/siat/option_china.py +0 -3069
  122. build/lib/build/lib/siat/option_pricing.py +0 -1925
  123. build/lib/build/lib/siat/other_indexes.py +0 -409
  124. build/lib/build/lib/siat/risk_adjusted_return.py +0 -1576
  125. build/lib/build/lib/siat/risk_adjusted_return2.py +0 -1900
  126. build/lib/build/lib/siat/risk_evaluation.py +0 -2218
  127. build/lib/build/lib/siat/risk_free_rate.py +0 -351
  128. build/lib/build/lib/siat/sector_china.py +0 -4140
  129. build/lib/build/lib/siat/security_price2.py +0 -727
  130. build/lib/build/lib/siat/security_prices.py +0 -3408
  131. build/lib/build/lib/siat/security_trend.py +0 -402
  132. build/lib/build/lib/siat/security_trend2.py +0 -646
  133. build/lib/build/lib/siat/stock.py +0 -4284
  134. build/lib/build/lib/siat/stock_advice_linear.py +0 -934
  135. build/lib/build/lib/siat/stock_base.py +0 -26
  136. build/lib/build/lib/siat/stock_china.py +0 -2095
  137. build/lib/build/lib/siat/stock_prices_kneighbors.py +0 -910
  138. build/lib/build/lib/siat/stock_prices_linear.py +0 -386
  139. build/lib/build/lib/siat/stock_profile.py +0 -707
  140. build/lib/build/lib/siat/stock_technical.py +0 -3305
  141. build/lib/build/lib/siat/stooq.py +0 -74
  142. build/lib/build/lib/siat/transaction.py +0 -347
  143. build/lib/build/lib/siat/translate.py +0 -5183
  144. build/lib/build/lib/siat/valuation.py +0 -1378
  145. build/lib/build/lib/siat/valuation_china.py +0 -2076
  146. build/lib/build/lib/siat/var_model_validation.py +0 -444
  147. build/lib/build/lib/siat/yf_name.py +0 -811
  148. build/lib/siat/__init__.py +0 -75
  149. build/lib/siat/allin.py +0 -137
  150. build/lib/siat/assets_liquidity.py +0 -915
  151. build/lib/siat/beta_adjustment.py +0 -1058
  152. build/lib/siat/beta_adjustment_china.py +0 -548
  153. build/lib/siat/blockchain.py +0 -143
  154. build/lib/siat/bond.py +0 -2900
  155. build/lib/siat/bond_base.py +0 -992
  156. build/lib/siat/bond_china.py +0 -100
  157. build/lib/siat/bond_zh_sina.py +0 -143
  158. build/lib/siat/capm_beta.py +0 -783
  159. build/lib/siat/capm_beta2.py +0 -887
  160. build/lib/siat/common.py +0 -5360
  161. build/lib/siat/compare_cross.py +0 -642
  162. build/lib/siat/copyrights.py +0 -18
  163. build/lib/siat/cryptocurrency.py +0 -667
  164. build/lib/siat/economy.py +0 -1471
  165. build/lib/siat/economy2.py +0 -1853
  166. build/lib/siat/esg.py +0 -536
  167. build/lib/siat/event_study.py +0 -815
  168. build/lib/siat/fama_french.py +0 -1521
  169. build/lib/siat/fin_stmt2_yahoo.py +0 -982
  170. build/lib/siat/financial_base.py +0 -1160
  171. build/lib/siat/financial_statements.py +0 -598
  172. build/lib/siat/financials.py +0 -2339
  173. build/lib/siat/financials2.py +0 -1278
  174. build/lib/siat/financials_china.py +0 -4433
  175. build/lib/siat/financials_china2.py +0 -2212
  176. build/lib/siat/fund.py +0 -629
  177. build/lib/siat/fund_china.py +0 -3307
  178. build/lib/siat/future_china.py +0 -551
  179. build/lib/siat/google_authenticator.py +0 -47
  180. build/lib/siat/grafix.py +0 -3636
  181. build/lib/siat/holding_risk.py +0 -867
  182. build/lib/siat/luchy_draw.py +0 -638
  183. build/lib/siat/market_china.py +0 -1168
  184. build/lib/siat/markowitz.py +0 -2363
  185. build/lib/siat/markowitz2.py +0 -3150
  186. build/lib/siat/markowitz2_20250704.py +0 -2969
  187. build/lib/siat/markowitz2_20250705.py +0 -3158
  188. build/lib/siat/markowitz_simple.py +0 -373
  189. build/lib/siat/ml_cases.py +0 -2291
  190. build/lib/siat/ml_cases_example.py +0 -60
  191. build/lib/siat/option_china.py +0 -3069
  192. build/lib/siat/option_pricing.py +0 -1925
  193. build/lib/siat/other_indexes.py +0 -409
  194. build/lib/siat/risk_adjusted_return.py +0 -1576
  195. build/lib/siat/risk_adjusted_return2.py +0 -1900
  196. build/lib/siat/risk_evaluation.py +0 -2218
  197. build/lib/siat/risk_free_rate.py +0 -351
  198. build/lib/siat/sector_china.py +0 -4140
  199. build/lib/siat/security_price2.py +0 -727
  200. build/lib/siat/security_prices.py +0 -3408
  201. build/lib/siat/security_trend.py +0 -402
  202. build/lib/siat/security_trend2.py +0 -646
  203. build/lib/siat/stock.py +0 -4284
  204. build/lib/siat/stock_advice_linear.py +0 -934
  205. build/lib/siat/stock_base.py +0 -26
  206. build/lib/siat/stock_china.py +0 -2095
  207. build/lib/siat/stock_prices_kneighbors.py +0 -910
  208. build/lib/siat/stock_prices_linear.py +0 -386
  209. build/lib/siat/stock_profile.py +0 -707
  210. build/lib/siat/stock_technical.py +0 -3305
  211. build/lib/siat/stooq.py +0 -74
  212. build/lib/siat/transaction.py +0 -347
  213. build/lib/siat/translate.py +0 -5183
  214. build/lib/siat/valuation.py +0 -1378
  215. build/lib/siat/valuation_china.py +0 -2076
  216. build/lib/siat/var_model_validation.py +0 -444
  217. build/lib/siat/yf_name.py +0 -811
  218. siat-3.10.132.dist-info/RECORD +0 -218
@@ -1,373 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- 本模块功能:马科维茨投资组合快速示意图
4
- 所属工具包:证券投资分析工具SIAT
5
- SIAT:Security Investment Analysis Tool
6
- 创建日期:2023年7月8日
7
- 最新修订日期:2023年7月9日
8
- 作者:王德宏 (WANG Dehong, Peter)
9
- 作者单位:北京外国语大学国际商学院
10
- 作者邮件:wdehong2000@163.com
11
- 版权所有:王德宏
12
- 用途限制:仅限研究与教学使用,不可商用!商用需要额外授权。
13
- 特别声明:作者不对使用本工具进行证券投资导致的任何损益负责!
14
- """
15
-
16
- #==============================================================================
17
- #关闭所有警告
18
- import warnings; warnings.filterwarnings('ignore')
19
- from siat.security_prices import *
20
-
21
- #==============================================================================
22
- import matplotlib.pyplot as plt
23
-
24
- #统一设定绘制的图片大小:数值为英寸,1英寸=100像素
25
- plt.rcParams['figure.figsize']=(12.8,7.2)
26
- plt.rcParams['figure.dpi']=300
27
- plt.rcParams['font.size'] = 13
28
- plt.rcParams['xtick.labelsize']=11 #横轴字体大小
29
- plt.rcParams['ytick.labelsize']=11 #纵轴字体大小
30
-
31
- title_txt_size=16
32
- ylabel_txt_size=14
33
- xlabel_txt_size=14
34
- legend_txt_size=14
35
-
36
- #设置绘图风格:网格虚线
37
- plt.rcParams['axes.grid']=True
38
- #plt.rcParams['grid.color']='steelblue'
39
- #plt.rcParams['grid.linestyle']='dashed'
40
- #plt.rcParams['grid.linewidth']=0.5
41
- #plt.rcParams['axes.facecolor']='whitesmoke'
42
-
43
- #处理绘图汉字乱码问题
44
- import sys; czxt=sys.platform
45
- if czxt in ['win32','win64']:
46
- plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置默认字体
47
- mpfrc={'font.family': 'SimHei'}
48
-
49
- if czxt in ['darwin']: #MacOSX
50
- plt.rcParams['font.family']= ['Heiti TC']
51
- mpfrc={'font.family': 'Heiti TC'}
52
-
53
- if czxt in ['linux']: #website Jupyter
54
- plt.rcParams['font.family']= ['Heiti TC']
55
- mpfrc={'font.family':'Heiti TC'}
56
-
57
- # 解决保存图像时'-'显示为方块的问题
58
- plt.rcParams['axes.unicode_minus'] = False
59
- #==============================================================================
60
-
61
- # 全局引用,函数中无需再import
62
- from datetime import date
63
- import pandas as pd
64
- import numpy as np
65
- import scipy.optimize as opt
66
-
67
- import seaborn as sns
68
- g=sns.set_style("whitegrid")#横坐标有标线,纵坐标没有标线,背景白色
69
- g=sns.set_style("darkgrid") #默认,横纵坐标都有标线,组成一个一个格子,背景稍微深色
70
- g=sns.set_style("dark")#背景稍微深色,没有标线线
71
- g=sns.set_style("white")#背景白色,没有标线线
72
- g=sns.set_style("ticks")#xy轴都有非常短的小刻度
73
- g=sns.despine(offset=30,left=True)#去掉上边和右边的轴线,offset=30表示距离轴线(x轴)的距离,left=True表示左边的轴保留
74
- g=sns.set(font='SimHei',rc={'figure.figsize':(10,6)})# 图片大小和中文字体设置
75
-
76
- #==============================================================================
77
- if __name__=='__main__':
78
- components = {
79
- 'AAPL':'苹果',
80
- 'AMZN':'亚马逊',
81
- 'GOOGL':'谷歌',
82
- 'BABA':'阿里巴巴'
83
- }
84
-
85
- start='2022-1-1'
86
- end='2022-12-31'
87
-
88
- risk_free=0.015
89
- simulation=25000
90
- price_trend=True
91
- feasible_set=True
92
- efficient_frontier=True
93
- MOP=True #Markowitz Optimized Point
94
- MSR=True #Maximized Sharpe Ratio
95
-
96
- ef_adjust=1.008
97
-
98
- markowitz_sharpe(components,start,end)
99
- markowitz_sharpe(components,start,end,ef_adjust=1.008)
100
- markowitz_sharpe(components,start,end,MOP=True)
101
- markowitz_sharpe(components,start,end,MSR=True)
102
- markowitz_sharpe(components,start,end,MOP=True,MSR=True)
103
-
104
- def markowitz_sharpe(components,start,end,risk_free=0.015,simulation=25000, \
105
- price_trend=True,feasible_set=True,efficient_frontier=True, \
106
- MOP=False,MSR=False,ef_adjust=1.008):
107
- """
108
- 功能:使用期间内夏普比率寻找马科维茨最优点,绘制可行集、有效边界和最优点
109
- components:投资组合成分股票代码与名称,节省搜索股票名称的时间
110
- start,end:开始/结束日期
111
- risk_free:人工指定无风险利率,节省搜索时间,减少搜索失败概率
112
- simulation:生成可行集的模拟次数
113
- price_trend:是否绘制各个成分股票的价格走势,采用股价/起点股价的比值,可一图绘制多只股票
114
- feasible_set:是否绘制可行集
115
- efficient_frontier:是否绘制有效边界
116
- MOP:是否标注MOP点,Markowitz Optimized Point,可能与MSR点不同
117
- MSR:是否标注MSR点,Maximized Sharpe Ratio,可能与MOP点不同
118
- ef_adjust:对有效边界曲线微调,使其处于可行集的上边沿
119
- """
120
- #获取股票数据
121
- tickers=list(components)
122
-
123
- # 使用Adj Close避免分红分拆引起股价不连续导致结果异常
124
- #cprices=get_prices(tickers,start,end)
125
- stock_data=get_prices(tickers,start,end)['Adj Close']
126
- stock_data.rename(columns=components,inplace=True)
127
-
128
- stock_data=stock_data.iloc[::-1]
129
- #stock_data.head()
130
-
131
- # 绘制成分股价格走势,采用股价/起点股价的相对股价,增加可比性
132
- if price_trend:
133
- (stock_data/stock_data.iloc[0]).plot()
134
- titletxt='投资组合的成分股价格走势示意图'
135
- plt.xlabel('')
136
- plt.ylabel("价格/起点值")
137
- plt.title(titletxt)
138
- plt.show()
139
-
140
- #------------------------------------------------------------------------------
141
- # 计算收益率和风险
142
- # 收益率
143
- R=stock_data/stock_data.shift(1)-1
144
- #R.head()
145
-
146
- # 对数收益率
147
- stock_data_shift1=stock_data.shift(1)
148
- log_r=np.log(stock_data/stock_data.shift(1))
149
- #log_r.head()
150
-
151
- # 年化收益率
152
- r_annual=np.exp(log_r.mean()*250)-1
153
- #r_annual
154
-
155
- # 风险
156
- std = np.sqrt(log_r.var() * 250)#假设协方差为0
157
- #std
158
-
159
- #------------------------------------------------------------------------------
160
- # 投资组合的收益和风险
161
- def gen_weights(n):
162
- w=np.random.rand(n)
163
- return w /sum(w)
164
-
165
- n=len(list(tickers))
166
- #w=gen_weights(n)
167
- #list(zip(r_annual.index,w))
168
-
169
- #投资组合收益
170
- def port_ret(w):
171
- return -np.sum(w*r_annual)
172
- #pret=port_ret(w)
173
-
174
- #投资组合的风险
175
- def port_std(w):
176
- return np.sqrt((w.dot(log_r.cov()*250).dot(w.T)))
177
- #pstd=port_std(w)
178
-
179
- #若干投资组合的收益和风险
180
- def gen_ports(times):
181
- for _ in range(times):#生成不同的组合
182
- w=gen_weights(n)#每次生成不同的权重
183
- yield (port_std(w),port_ret(w),w)#计算风险和期望收益 以及组合的权重情况
184
-
185
- # 投资组合模拟次数
186
- print("\n Generating portfolio feasible set ...")
187
- df=pd.DataFrame(gen_ports(25000),columns=["std","ret","w"])
188
- #df.head()
189
- std_min=df['std'].min()
190
- std_max=df['std'].max()
191
-
192
- #------------------------------------------------------------------------------
193
- #计算可行集中每个投资组合期间内的夏普比率
194
- df['sharpe'] = (df['ret'] - risk_free) / df['std']
195
- #list(zip(r_annual.index, df.loc[df.sharpe.idxmax()].w))
196
-
197
- # 画出投资可行集
198
- df_ef=df.rename(columns={'std':'收益率标准差','ret':'收益率','sharpe':'夏普比率'})
199
- fig, ax = plt.subplots()
200
- titletxt="马科维茨投资组合示意图"
201
- plt.title(titletxt)
202
-
203
- #df.plot.scatter('std','ret',c='sharpe',s=30,alpha=0.3,cmap='cool',marker='o',ax=ax)
204
- df_ef.plot.scatter('收益率标准差','收益率',c='夏普比率',s=30,alpha=0.3,cmap='cool',marker='o',ax=ax)
205
- plt.style.use('ggplot')
206
- plt.rcParams['axes.unicode_minus'] = False# 显示负号
207
-
208
- #绘制有效边界曲线
209
- if efficient_frontier:
210
- frontier=pd.DataFrame(columns=['std','ret'])
211
- for std in np.linspace(std_min,std_max):
212
- res=opt.minimize(lambda x:-port_ret(x),
213
- x0=((1/n),)*n,
214
- method='SLSQP',
215
- bounds=((0,1),)*n,
216
- constraints=[
217
- {"fun":lambda x:port_std(x)-std,"type":"eq"},
218
- {"fun":lambda x:(np.sum(x)-1),"type":"eq"}
219
- ])
220
- if res.success:
221
- frontier=frontier._append({"std":std,"ret":-res.fun},ignore_index=True)
222
-
223
- # 略微上调有效边界
224
- frontier2=frontier.copy()
225
- """
226
- fstd0=frontier2['std'].values[0]
227
- frontier2['ret']=frontier2['ret'] * ef_adjust*fstd0/frontier2['std']
228
- """
229
- frontier2['ret']=frontier2['ret'] * ef_adjust
230
- frontier3=frontier2.rename(columns={'std':'收益率标准差','ret':'收益率'})
231
- frontier3.plot('收益率标准差','收益率',label='有效边界',lw=3,c='blue',ax=ax)
232
- plt.legend()
233
- fig
234
-
235
- #------------------------------------------------------------------------------
236
- #单个投资组合的收益和风险
237
- def one_ports(w):
238
- return (port_std(w),port_ret(w),w)#计算风险和期望收益 以及组合的权重情况
239
-
240
- # 计算最优资产配置情况
241
- if MOP:
242
- res=opt.minimize(lambda x:-((port_ret(x)-risk_free)/port_std(x)),
243
- x0=((1/n),)*n,
244
- method='SLSQP',
245
- bounds=((0,1),)*n,
246
- constraints={"fun":lambda x:(np.sum(x)-1), "type":"eq"})
247
-
248
- ax.scatter(port_std(res.x),port_ret(res.x),label='MOP点',marker="*",c="brown",s=300)
249
- ax.legend()
250
- fig
251
-
252
- print("\n***马科维茨优化后组合(MOP)配置:")
253
- ticker_names=components.values()
254
- best_proportion=res.x.round(3)
255
- #best_config = dict(zip(tickers, best_proportion))
256
- best_config = dict(zip(ticker_names, best_proportion))
257
- print(best_config)
258
-
259
- #计算期间内投资组合收益率均值
260
- best_std,best_ret,_=one_ports(best_proportion)
261
- print("收益率标准差:",round(best_std,4),"\b,投资组合收益率:",round(best_ret,4))
262
-
263
- """
264
- #绘制MOP组合价格走势
265
- stock_data2=stock_data.copy()
266
- stock_data2['MOP']=stock_data2.dot(best_proportion)
267
- (stock_data2/stock_data2.iloc[0]).plot()
268
-
269
- titletxt='投资组合及其成分股价格走势示意图'
270
- plt.xlabel('')
271
- plt.ylabel("价格/起点值")
272
- plt.title(titletxt)
273
- plt.show()
274
- """
275
-
276
- if MSR:
277
- sharpe_max=df['sharpe'].max()
278
- std_msr=df[df['sharpe']==sharpe_max]['std'].values[0]
279
- ret_msr=df[df['sharpe']==sharpe_max]['ret'].values[0]
280
- w_msr=df[df['sharpe']==sharpe_max]['w'].values[0]
281
-
282
- ax.scatter(std_msr,ret_msr,label='MSR点',marker="*",c="orange",s=300)
283
- ax.legend()
284
- fig
285
-
286
- print("\n***最大夏普比率组合(MSR)配置:")
287
- ticker_names=components.values()
288
- best_proportion=w_msr
289
- best_config = dict(zip(ticker_names, best_proportion.round(3)))
290
- print(best_config)
291
-
292
- #计算期间内投资组合收益率均值
293
- best_std,best_ret,_=one_ports(best_proportion)
294
- print("收益率标准差:",round(best_std,4),"\b,投资组合收益率:",round(best_ret,4))
295
-
296
- #绘制MOP组合价格走势
297
- """
298
- stock_data3=stock_data.copy()
299
- stock_data3['MOP']=stock_data3.dot(best_proportion)
300
- (stock_data3/stock_data3.iloc[0]).plot()
301
-
302
- titletxt='投资组合及其成分股价格走势示意图'
303
- plt.xlabel('')
304
- plt.ylabel("价格/起点值")
305
- plt.title(titletxt)
306
- plt.show()
307
- """
308
-
309
- if MOP or MSR:
310
- std_min=df['std'].min()
311
- ret_gmvs=df[df['std']==std_min]['ret'].values[0]
312
- w_gmvs=df[df['std']==std_min]['w'].values[0]
313
-
314
- ax.scatter(std_min,ret_gmvs,label='LVS点',marker="o",c="green",s=300)
315
- ax.legend()
316
- fig
317
-
318
- print("\n***最小波动风险组合(LVS)配置:")
319
- ticker_names=components.values()
320
- best_proportion=w_gmvs
321
- best_config = dict(zip(ticker_names, best_proportion.round(3)))
322
- print(best_config)
323
-
324
- #计算期间内投资组合收益率均值
325
- best_std,best_ret,_=one_ports(best_proportion)
326
- print("收益率标准差:",round(best_std,4),"\b,投资组合收益率:",round(best_ret,4))
327
-
328
- #绘制GMVS组合价格走势
329
- """
330
- stock_data4=stock_data.copy()
331
- stock_data4['GMVS']=stock_data4.dot(best_proportion)
332
- (stock_data4/stock_data4.iloc[0]).plot()
333
-
334
- titletxt='投资组合及其成分股价格走势示意图'
335
- plt.xlabel('')
336
- plt.ylabel("价格/起点值")
337
- plt.title(titletxt)
338
- plt.show()
339
- """
340
-
341
- return
342
-
343
-
344
- #------------------------------------------------------------------------------
345
- #------------------------------------------------------------------------------
346
- #------------------------------------------------------------------------------
347
- #------------------------------------------------------------------------------
348
- #------------------------------------------------------------------------------
349
- #------------------------------------------------------------------------------
350
- #------------------------------------------------------------------------------
351
- #------------------------------------------------------------------------------
352
- #------------------------------------------------------------------------------
353
- #------------------------------------------------------------------------------
354
- #------------------------------------------------------------------------------
355
-
356
-
357
-
358
-
359
-
360
-
361
-
362
-
363
-
364
-
365
-
366
-
367
-
368
-
369
-
370
-
371
-
372
-
373
-