siat 3.10.132__py3-none-any.whl → 3.11.1__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 (221) hide show
  1. siat/__init__.py +0 -0
  2. siat/allin.py +8 -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 +4 -4
  13. siat/common.py +9 -6
  14. siat/compare_cross.py +0 -0
  15. siat/copyrights.py +0 -0
  16. siat/cryptocurrency.py +0 -0
  17. siat/economy.py +0 -0
  18. siat/economy2.py +0 -0
  19. siat/esg.py +0 -0
  20. siat/event_study.py +0 -0
  21. siat/exchange_bond_china.pickle +0 -0
  22. siat/fama_french.py +0 -0
  23. siat/fin_stmt2_yahoo.py +0 -0
  24. siat/financial_base.py +0 -0
  25. siat/financial_statements.py +0 -0
  26. siat/financials.py +0 -0
  27. siat/financials2.py +0 -0
  28. siat/financials_china.py +0 -0
  29. siat/financials_china2.py +0 -0
  30. siat/fund.py +0 -0
  31. siat/fund_china.pickle +0 -0
  32. siat/fund_china.py +0 -0
  33. siat/future_china.py +0 -0
  34. siat/google_authenticator.py +0 -0
  35. siat/grafix.py +55 -4
  36. siat/holding_risk.py +0 -0
  37. siat/luchy_draw.py +0 -0
  38. siat/market_china.py +0 -0
  39. siat/markowitz.py +0 -0
  40. siat/markowitz2.py +1 -0
  41. siat/markowitz2_20250704.py +0 -0
  42. siat/markowitz2_20250705.py +0 -0
  43. siat/markowitz_simple.py +0 -0
  44. siat/ml_cases.py +0 -0
  45. siat/ml_cases_example.py +0 -0
  46. siat/option_china.py +0 -0
  47. siat/option_pricing.py +0 -0
  48. siat/other_indexes.py +0 -0
  49. siat/risk_adjusted_return.py +0 -0
  50. siat/risk_adjusted_return2.py +8 -4
  51. siat/risk_evaluation.py +0 -0
  52. siat/risk_free_rate.py +0 -0
  53. siat/save2docx.py +345 -0
  54. siat/save2pdf.py +145 -0
  55. siat/sector_china.py +0 -0
  56. siat/security_price2.py +0 -0
  57. siat/security_prices.py +168 -6
  58. siat/security_trend.py +0 -0
  59. siat/security_trend2.py +2 -2
  60. siat/stock.py +11 -1
  61. siat/stock_advice_linear.py +0 -0
  62. siat/stock_base.py +0 -0
  63. siat/stock_china.py +0 -0
  64. siat/stock_info.pickle +0 -0
  65. siat/stock_prices_kneighbors.py +0 -0
  66. siat/stock_prices_linear.py +0 -0
  67. siat/stock_profile.py +0 -0
  68. siat/stock_technical.py +0 -0
  69. siat/stooq.py +0 -0
  70. siat/transaction.py +0 -0
  71. siat/translate.py +0 -0
  72. siat/valuation.py +0 -0
  73. siat/valuation_china.py +0 -0
  74. siat/var_model_validation.py +0 -0
  75. siat/yf_name.py +0 -0
  76. {siat-3.10.132.dist-info/licenses → siat-3.11.1.dist-info}/LICENSE +0 -0
  77. {siat-3.10.132.dist-info → siat-3.11.1.dist-info}/METADATA +234 -235
  78. siat-3.11.1.dist-info/RECORD +80 -0
  79. {siat-3.10.132.dist-info → siat-3.11.1.dist-info}/WHEEL +1 -1
  80. {siat-3.10.132.dist-info → siat-3.11.1.dist-info}/top_level.txt +0 -1
  81. build/lib/build/lib/siat/__init__.py +0 -75
  82. build/lib/build/lib/siat/allin.py +0 -137
  83. build/lib/build/lib/siat/assets_liquidity.py +0 -915
  84. build/lib/build/lib/siat/beta_adjustment.py +0 -1058
  85. build/lib/build/lib/siat/beta_adjustment_china.py +0 -548
  86. build/lib/build/lib/siat/blockchain.py +0 -143
  87. build/lib/build/lib/siat/bond.py +0 -2900
  88. build/lib/build/lib/siat/bond_base.py +0 -992
  89. build/lib/build/lib/siat/bond_china.py +0 -100
  90. build/lib/build/lib/siat/bond_zh_sina.py +0 -143
  91. build/lib/build/lib/siat/capm_beta.py +0 -783
  92. build/lib/build/lib/siat/capm_beta2.py +0 -887
  93. build/lib/build/lib/siat/common.py +0 -5360
  94. build/lib/build/lib/siat/compare_cross.py +0 -642
  95. build/lib/build/lib/siat/copyrights.py +0 -18
  96. build/lib/build/lib/siat/cryptocurrency.py +0 -667
  97. build/lib/build/lib/siat/economy.py +0 -1471
  98. build/lib/build/lib/siat/economy2.py +0 -1853
  99. build/lib/build/lib/siat/esg.py +0 -536
  100. build/lib/build/lib/siat/event_study.py +0 -815
  101. build/lib/build/lib/siat/fama_french.py +0 -1521
  102. build/lib/build/lib/siat/fin_stmt2_yahoo.py +0 -982
  103. build/lib/build/lib/siat/financial_base.py +0 -1160
  104. build/lib/build/lib/siat/financial_statements.py +0 -598
  105. build/lib/build/lib/siat/financials.py +0 -2339
  106. build/lib/build/lib/siat/financials2.py +0 -1278
  107. build/lib/build/lib/siat/financials_china.py +0 -4433
  108. build/lib/build/lib/siat/financials_china2.py +0 -2212
  109. build/lib/build/lib/siat/fund.py +0 -629
  110. build/lib/build/lib/siat/fund_china.py +0 -3307
  111. build/lib/build/lib/siat/future_china.py +0 -551
  112. build/lib/build/lib/siat/google_authenticator.py +0 -47
  113. build/lib/build/lib/siat/grafix.py +0 -3636
  114. build/lib/build/lib/siat/holding_risk.py +0 -867
  115. build/lib/build/lib/siat/luchy_draw.py +0 -638
  116. build/lib/build/lib/siat/market_china.py +0 -1168
  117. build/lib/build/lib/siat/markowitz.py +0 -2363
  118. build/lib/build/lib/siat/markowitz2.py +0 -3150
  119. build/lib/build/lib/siat/markowitz2_20250704.py +0 -2969
  120. build/lib/build/lib/siat/markowitz2_20250705.py +0 -3158
  121. build/lib/build/lib/siat/markowitz_simple.py +0 -373
  122. build/lib/build/lib/siat/ml_cases.py +0 -2291
  123. build/lib/build/lib/siat/ml_cases_example.py +0 -60
  124. build/lib/build/lib/siat/option_china.py +0 -3069
  125. build/lib/build/lib/siat/option_pricing.py +0 -1925
  126. build/lib/build/lib/siat/other_indexes.py +0 -409
  127. build/lib/build/lib/siat/risk_adjusted_return.py +0 -1576
  128. build/lib/build/lib/siat/risk_adjusted_return2.py +0 -1900
  129. build/lib/build/lib/siat/risk_evaluation.py +0 -2218
  130. build/lib/build/lib/siat/risk_free_rate.py +0 -351
  131. build/lib/build/lib/siat/sector_china.py +0 -4140
  132. build/lib/build/lib/siat/security_price2.py +0 -727
  133. build/lib/build/lib/siat/security_prices.py +0 -3408
  134. build/lib/build/lib/siat/security_trend.py +0 -402
  135. build/lib/build/lib/siat/security_trend2.py +0 -646
  136. build/lib/build/lib/siat/stock.py +0 -4284
  137. build/lib/build/lib/siat/stock_advice_linear.py +0 -934
  138. build/lib/build/lib/siat/stock_base.py +0 -26
  139. build/lib/build/lib/siat/stock_china.py +0 -2095
  140. build/lib/build/lib/siat/stock_prices_kneighbors.py +0 -910
  141. build/lib/build/lib/siat/stock_prices_linear.py +0 -386
  142. build/lib/build/lib/siat/stock_profile.py +0 -707
  143. build/lib/build/lib/siat/stock_technical.py +0 -3305
  144. build/lib/build/lib/siat/stooq.py +0 -74
  145. build/lib/build/lib/siat/transaction.py +0 -347
  146. build/lib/build/lib/siat/translate.py +0 -5183
  147. build/lib/build/lib/siat/valuation.py +0 -1378
  148. build/lib/build/lib/siat/valuation_china.py +0 -2076
  149. build/lib/build/lib/siat/var_model_validation.py +0 -444
  150. build/lib/build/lib/siat/yf_name.py +0 -811
  151. build/lib/siat/__init__.py +0 -75
  152. build/lib/siat/allin.py +0 -137
  153. build/lib/siat/assets_liquidity.py +0 -915
  154. build/lib/siat/beta_adjustment.py +0 -1058
  155. build/lib/siat/beta_adjustment_china.py +0 -548
  156. build/lib/siat/blockchain.py +0 -143
  157. build/lib/siat/bond.py +0 -2900
  158. build/lib/siat/bond_base.py +0 -992
  159. build/lib/siat/bond_china.py +0 -100
  160. build/lib/siat/bond_zh_sina.py +0 -143
  161. build/lib/siat/capm_beta.py +0 -783
  162. build/lib/siat/capm_beta2.py +0 -887
  163. build/lib/siat/common.py +0 -5360
  164. build/lib/siat/compare_cross.py +0 -642
  165. build/lib/siat/copyrights.py +0 -18
  166. build/lib/siat/cryptocurrency.py +0 -667
  167. build/lib/siat/economy.py +0 -1471
  168. build/lib/siat/economy2.py +0 -1853
  169. build/lib/siat/esg.py +0 -536
  170. build/lib/siat/event_study.py +0 -815
  171. build/lib/siat/fama_french.py +0 -1521
  172. build/lib/siat/fin_stmt2_yahoo.py +0 -982
  173. build/lib/siat/financial_base.py +0 -1160
  174. build/lib/siat/financial_statements.py +0 -598
  175. build/lib/siat/financials.py +0 -2339
  176. build/lib/siat/financials2.py +0 -1278
  177. build/lib/siat/financials_china.py +0 -4433
  178. build/lib/siat/financials_china2.py +0 -2212
  179. build/lib/siat/fund.py +0 -629
  180. build/lib/siat/fund_china.py +0 -3307
  181. build/lib/siat/future_china.py +0 -551
  182. build/lib/siat/google_authenticator.py +0 -47
  183. build/lib/siat/grafix.py +0 -3636
  184. build/lib/siat/holding_risk.py +0 -867
  185. build/lib/siat/luchy_draw.py +0 -638
  186. build/lib/siat/market_china.py +0 -1168
  187. build/lib/siat/markowitz.py +0 -2363
  188. build/lib/siat/markowitz2.py +0 -3150
  189. build/lib/siat/markowitz2_20250704.py +0 -2969
  190. build/lib/siat/markowitz2_20250705.py +0 -3158
  191. build/lib/siat/markowitz_simple.py +0 -373
  192. build/lib/siat/ml_cases.py +0 -2291
  193. build/lib/siat/ml_cases_example.py +0 -60
  194. build/lib/siat/option_china.py +0 -3069
  195. build/lib/siat/option_pricing.py +0 -1925
  196. build/lib/siat/other_indexes.py +0 -409
  197. build/lib/siat/risk_adjusted_return.py +0 -1576
  198. build/lib/siat/risk_adjusted_return2.py +0 -1900
  199. build/lib/siat/risk_evaluation.py +0 -2218
  200. build/lib/siat/risk_free_rate.py +0 -351
  201. build/lib/siat/sector_china.py +0 -4140
  202. build/lib/siat/security_price2.py +0 -727
  203. build/lib/siat/security_prices.py +0 -3408
  204. build/lib/siat/security_trend.py +0 -402
  205. build/lib/siat/security_trend2.py +0 -646
  206. build/lib/siat/stock.py +0 -4284
  207. build/lib/siat/stock_advice_linear.py +0 -934
  208. build/lib/siat/stock_base.py +0 -26
  209. build/lib/siat/stock_china.py +0 -2095
  210. build/lib/siat/stock_prices_kneighbors.py +0 -910
  211. build/lib/siat/stock_prices_linear.py +0 -386
  212. build/lib/siat/stock_profile.py +0 -707
  213. build/lib/siat/stock_technical.py +0 -3305
  214. build/lib/siat/stooq.py +0 -74
  215. build/lib/siat/transaction.py +0 -347
  216. build/lib/siat/translate.py +0 -5183
  217. build/lib/siat/valuation.py +0 -1378
  218. build/lib/siat/valuation_china.py +0 -2076
  219. build/lib/siat/var_model_validation.py +0 -444
  220. build/lib/siat/yf_name.py +0 -811
  221. siat-3.10.132.dist-info/RECORD +0 -218
@@ -1,934 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- @function: 评估一只股票是否值得买入。教学演示用,其他用途责任自负,机器学习课程案例演示用
4
- @model:线性分类模型,logistic, linearSVC
5
- @version:v1.0,2019.4.15
6
- @purpose: 机器学习课程案例
7
- @author: 王德宏,北京外国语大学国际商学院
8
- """
9
-
10
- #=====================================================================
11
- def get_price(ticker,atdate,fromdate):
12
- """
13
- 功能:抓取股价
14
- 输出:指定收盘价格序列,最新日期的股价排列在前
15
- ticker: 股票代码
16
- atdate: 当前日期,既可以是今天日期,也可以是一个历史日期,datetime类型
17
- fromdate: 样本开始日期,尽量远的日期,以便取得足够多的原始样本,类型同atdate
18
- """
19
-
20
- #仅为调试用的函数入口参数,正式使用前需要注释掉!
21
- #ticker='MSFT'
22
- #atdate='3/29/2019'
23
- #fromdate='1/1/2015'
24
- #---------------------------------------------
25
-
26
- #抓取美股股票价格
27
- from pandas_datareader import data
28
- price=data.DataReader(ticker,'stooq',fromdate,atdate)
29
-
30
- #去掉比起始日期更早的样本
31
- price2=price[price.index >= fromdate]
32
-
33
-
34
- #按日期降序排序,近期的价格排在前面
35
- sortedprice=price2.sort_index(axis=0,ascending=False)
36
-
37
- #提取日期和星期几
38
- #sortedprice['Date']=sortedprice.index.date
39
- sortedprice['Date']=sortedprice.index.strftime("%Y-%m-%d")
40
- sortedprice['Weekday']=sortedprice.index.weekday+1
41
-
42
- #生成输出数据格式:日期,星期几,收盘价
43
- dfprice=sortedprice[['Date','Weekday','Close']]
44
-
45
- return dfprice
46
-
47
-
48
- if __name__=='__main__':
49
- dfprice=get_price('MSFT','4/12/2019','1/1/2015')
50
- dfprice.head(5)
51
- dfprice.tail(3)
52
- dfprice[dfprice.Date == '2019-03-29']
53
- dfprice[(dfprice.Date>='2019-03-20') & (dfprice.Date<='2019-03-29')]
54
-
55
- dfindex=get_price('^GSPC','4/12/2019','1/1/2015')
56
-
57
- #=====================================================================
58
- def get_portfolio(tickerlist,sharelist,atdate,fromdate):
59
- """
60
- 功能:抓取投资组合的市值
61
- 输出:指定投资组合的收盘价格序列,最新日期的股价排列在前
62
- tickerlist:投资组合中各个股票的代码列表
63
- sharelist:投资组合中各个股票的份额列表
64
- atdate:当前日期,既可以是今天日期,也可以是一个历史日期,datetime类型
65
- fromdate:样本开始日期,尽量远的日期,以便取得足够多的原始样本,类型同atdate
66
- """
67
-
68
- #仅为调试用的函数入口参数,正式使用前需要注释掉!
69
- #tickerlist=['BILI','PDD']
70
- #sharelist=[0.67,0.33]
71
- #sum(sharelist)
72
- #atdate='4/12/2019'
73
- #fromdate='1/1/2015'
74
- #---------------------------------------------
75
-
76
- #检查投资组合的份额是否等于1
77
- if sum(sharelist) != 1.0:
78
- print("Error: sum of all shares in the portfolio is not 1")
79
- return None
80
-
81
- #抓取股票价格
82
- from pandas_datareader import data
83
- price=data.DataReader(tickerlist,'yahoo',fromdate,atdate)
84
-
85
- #去掉比起始日期更早的样本
86
- price2=price[price.index >= fromdate]
87
-
88
-
89
- #按日期降序排序,近期的价格排在前面
90
- sortedprice=price2.sort_index(axis=0,ascending=False)
91
-
92
- #提取日期和星期几
93
- #sortedprice['Date']=sortedprice.index.date
94
- sortedprice['Date']=sortedprice.index.strftime("%Y-%m-%d")
95
- sortedprice['Weekday']=sortedprice.index.weekday+1
96
-
97
- #合成投资组合的价值
98
- dfprice=sortedprice[['Date','Weekday','Close']]
99
- import copy
100
- dfprice2= copy.deepcopy(dfprice)
101
- dfprice2['Value']=0.0
102
- rownames=dfprice.columns.values.tolist()
103
- for i in range(2,len(rownames)):
104
- value=dfprice2[('Close',rownames[i][1])]*sharelist[i-2]
105
- dfprice2['Value']=dfprice2['Value']+value
106
-
107
- #生成输出
108
- import pandas as pd
109
- dfprice3=pd.DataFrame(columns=['Date','Weekday','Close'])
110
- dfprice3['Date']=dfprice2['Date']
111
- dfprice3['Weekday']=dfprice2['Weekday']
112
- dfprice3['Close']=dfprice2['Value']
113
- dfprice4=dfprice3.dropna()
114
- return dfprice4
115
-
116
-
117
- if __name__=='__main__':
118
- dfprice=get_portfolio(['BILI','PDD'],[0.67,0.33],'4/12/2019','1/1/2015')
119
- dfprice.head(5)
120
- dfprice.tail(3)
121
- dfprice[dfprice.Date == '2019-03-29']
122
- dfprice[(dfprice.Date>='2019-03-20') & (dfprice.Date<='2019-03-29')]
123
-
124
- dfindex=get_price('^GSPC','4/12/2019','1/1/2015')
125
-
126
- #=====================================================================
127
- #=====================================================================
128
-
129
- def tradefee(price,n_shares=1,trade='buy'):
130
- """
131
- 返回买卖1块金额股票证券交易的总费用
132
- trade: buy=买,sell=卖。区分买卖的原因是买卖手续费可能不同
133
- 注意:印花税和券商手续费等与交易金额有关,而过户费与交易股数有关
134
- 设立此函数的原因:各个国家、股票交易所和券商的收费方式和标准存在差异
135
- 为简单起见,教学演示统一为买入时千分之二卖出时千分之三,实际应用时可再进行改造
136
- """
137
- if trade =='buy' : fee=price*n_shares*0.002
138
- if trade =='sell': fee=price*n_shares*0.003
139
- if not (trade in ['buy','sell']): print("Invalid trade")
140
- return fee
141
-
142
- #=====================================================================
143
- def make_advice_sample(dfprice,dfindex,n_nextdays=10, \
144
- n_samples=120,n_features=20, \
145
- samplingtype='AR',n_shares=1):
146
- """
147
- 功能:生成指定股票的样本
148
- n_nextdays:预测从atdate开始未来第几天的股价,默认为1
149
- n_samples:需要生成的样本个数,默认240个(一年的平均交易天数)
150
- n_features:使用的特征数量,默认20个(一个月的平均交易天数)
151
- n_shares: 买卖的股数,默认1股
152
- samplingtype:样本构造方法,AR=使用历史超额收益率,JG=使用历史投资结果
153
- """
154
-
155
- #仅为测试用
156
- #n_shares=1
157
- #n_nextdays=5
158
- #n_samples=240
159
- #n_features=20
160
- #samplingtype='AR'
161
-
162
- #提取收盘价和市场指数,Series类型
163
- closeprice=dfprice.Close
164
- maxrec=len(closeprice)
165
- closeindex=dfindex.Close
166
-
167
- #转换为机器学习需要的ndarray类型
168
- import numpy as np
169
- ndprice=np.asmatrix(closeprice,dtype=None)
170
- ndindex=np.asmatrix(closeindex,dtype=None)
171
-
172
- #建立数组并赋初值
173
- ndRs=np.asmatrix([[0.0 for i in range(maxrec)] for j in range(1)])
174
- ndRm=np.asmatrix([[0.0 for i in range(maxrec)] for j in range(1)])
175
- ndAR=np.asmatrix([[0.0 for i in range(maxrec)] for j in range(1)])
176
- ndJG=np.asmatrix([[-1 for i in range(maxrec)] for j in range(1)])
177
-
178
- for i in range(0,maxrec-n_nextdays-1):
179
- #print("i=",i)
180
- #计算股票买卖收益率
181
- sellprice=ndprice[0,i]
182
- sellfee=tradefee(sellprice,n_shares,trade='sell')
183
- sellgain=sellprice*n_shares - sellfee
184
- buyprice=ndprice[0,i+n_nextdays]
185
- buyfee=tradefee(buyprice,n_shares,trade='buy')
186
- buycost=buyprice*n_shares + buyfee
187
- Rs=(sellgain-buycost)/buycost
188
- ndRs[0,i]=Rs
189
-
190
- #计算市场指数收益率
191
- Rm=(ndindex[0,i]-ndindex[0,i+n_nextdays])/ndindex[0,i+n_nextdays]
192
- ndRm[0,i]=Rm
193
- AR=Rs - Rm
194
- ndAR[0,i]=AR
195
-
196
- #评估投资结果
197
- if (Rs>0) & (AR>0): JG=1
198
- else: JG=-1
199
- ndJG[0,i]=JG
200
-
201
- #生成第一个标签样本:标签矩阵y(形状:n_samples x 1)
202
- y=np.asmatrix(ndJG[0,0])
203
- #生成第一个特征样本:特征矩阵X(形状:n_samples x n_features)
204
- #如果样本构造类型为AR,则以ndAR作为特征,否则以JG作为特征
205
- if samplingtype=='AR': ndfeature=ndAR
206
- else: ndfeature=ndJG
207
-
208
- #row,col=ndfeature.shape
209
- X=ndfeature[0,(n_nextdays+1):(n_features+n_nextdays+1)]
210
-
211
- #生成其余的标签样本和特征样本
212
- for i in range(1,n_samples):
213
- #print("i=",i)
214
-
215
-
216
- X_row=ndfeature[0,(n_nextdays+1+i):(n_features+n_nextdays+1+i)]
217
- m,n=X_row.shape
218
- if n == n_features:
219
- X=np.append(X,X_row,axis=0)
220
- y_row=np.asmatrix(ndJG[0,i])
221
- y=np.append(y,y_row,axis=0)
222
- else:
223
- print("\nInsufficient number of samples, try use smaller parms")
224
- print(" Number of samples:",maxrec)
225
- break #跳出for循环,注意continue只是跳出当前循环就如下一次循环
226
-
227
- return X,y,ndfeature
228
-
229
- if __name__=='__main__':
230
- ticker='MSFT'
231
- market='^GSPC'
232
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
233
- dfindex=get_price(market,'4/12/2019','1/1/2015')
234
-
235
- X,y,ndfeature=make_advice_sample(dfprice,dfindex,120,480,120,'AR')
236
- #m,n=ndfeature.shape
237
- X1,y1,ndfeature1=make_advice_sample(dfprice,dfindex,5,240,20,'JG')
238
-
239
- from sklearn.utils import column_or_1d
240
- y=column_or_1d(y,warn=False)
241
- from sklearn.model_selection import train_test_split
242
- X_train,X_test,y_train,y_test= \
243
- train_test_split(X,y,stratify=y,random_state=0)
244
-
245
- from sklearn.linear_model import LogisticRegression
246
- lr=LogisticRegression(C=1, penalty='l2',solver='liblinear')
247
- lr.fit(X_train,y_train)
248
- lr.score(X_train,y_train)
249
- lr.score(X_test,y_test)
250
- X_new=ndfeature[0,0:20]
251
- lr.predict(X_new)
252
-
253
-
254
- y1=column_or_1d(y1,warn=False)
255
- from sklearn.model_selection import train_test_split
256
- X1_train,X1_test,y1_train,y1_test= \
257
- train_test_split(X1,y1,stratify=y1,random_state=0)
258
-
259
- from sklearn.linear_model import LogisticRegression
260
- lr1=LogisticRegression(C=1, penalty='l2',solver='liblinear')
261
- lr1.fit(X1_train,y1_train)
262
- lr1.score(X1_train,y1_train)
263
- lr1.score(X1_test,y1_test)
264
- X1_new=ndfeature[0,0:20]
265
- lr1.predict(X1_new)
266
-
267
-
268
- ticker='PDD'
269
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
270
- len(dfprice)
271
- X,y,ndfeature=make_advice_sample(dfprice,dfindex,30,120,30,'AR')
272
-
273
- ticker='BILI'
274
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
275
- len(dfprice)
276
- X,y,ndfeature=make_advice_sample(dfprice,dfindex,20,120,40,'AR')
277
- #=====================================================================
278
- def bestLRL1(X,y):
279
- """
280
- 功能:使用LogisticRegression和正则化L1参数C,获得最高测试分数
281
- 返回:最优的C参数和模型
282
- """
283
-
284
- #将整个样本随机分割为训练集和测试集
285
- from sklearn.utils import column_or_1d
286
- y=column_or_1d(y,warn=False)
287
- from sklearn.model_selection import train_test_split
288
- X_train,X_test,y_train,y_test=train_test_split(X,y,stratify=y,random_state=0)
289
-
290
- best_score=0.1
291
- import numpy as np
292
- from sklearn.linear_model import LogisticRegression
293
-
294
- for Cvalue in np.arange(0.01,1,0.01):
295
- lr=LogisticRegression(C=Cvalue, penalty='l1', \
296
- solver='liblinear', max_iter=10000)
297
- lr.fit(X_train,y_train)
298
- score_test = lr.score(X_test, y_test)
299
- if score_test > best_score:
300
- best_score=score_test
301
- best_C=Cvalue
302
- best_model=lr
303
-
304
- for Cvalue in np.arange(1,10,0.1):
305
- lr=LogisticRegression(C=Cvalue, penalty='l1', \
306
- solver='liblinear', max_iter=10000)
307
- lr.fit(X_train,y_train)
308
- score_test = lr.score(X_test, y_test)
309
- if score_test > best_score:
310
- best_score=score_test
311
- best_C=Cvalue
312
- best_model=lr
313
-
314
- for Cvalue in np.arange(10,100,1):
315
- lr=LogisticRegression(C=Cvalue, penalty='l1', \
316
- solver='liblinear', max_iter=10000)
317
- lr.fit(X_train,y_train)
318
- score_test = lr.score(X_test, y_test)
319
- if score_test > best_score:
320
- best_score=score_test
321
- best_C=Cvalue
322
- best_model=lr
323
-
324
- for Cvalue in np.arange(100,1000,10):
325
- lr=LogisticRegression(C=Cvalue, penalty='l1', \
326
- solver='liblinear', max_iter=10000)
327
- lr.fit(X_train,y_train)
328
- score_test = lr.score(X_test, y_test)
329
- if score_test > best_score:
330
- best_score=score_test
331
- best_C=Cvalue
332
- best_model=lr
333
-
334
- score_train=best_model.score(X_train,y_train)
335
- return best_model,best_C,score_train,best_score
336
-
337
-
338
- if __name__=='__main__':
339
- ticker='MSFT'
340
- market='^GSPC'
341
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
342
- dfindex=get_price(market,'4/12/2019','1/1/2015')
343
-
344
- X,y,ndfeature=make_advice_sample(dfprice,dfindex,5,240,20,'AR')
345
- model,C,score_train,score_test=bestLRL1(X,y)
346
- print("%.5f, %.5f, %.5f"%(C,score_train,score_test))
347
- #结果:14,0.66667,0.71667
348
-
349
- X_new=ndfeature[0,0:20]
350
- y_new=model.predict(X_new)
351
- print("%.0f"%y_new)
352
- #结果:-1
353
-
354
- X1,y1,ndfeature1=make_advice_sample(dfprice,dfindex,5,240,20,'JG')
355
- model,C,score_train,score_test=bestLRL1(X1,y1)
356
- print("%.5f, %.5f, %.5f"%(C,score_train,score_test))
357
- #结果:0.14,0.61667,0.63333
358
- #=====================================================================
359
-
360
- def bestLRL2(X,y):
361
- """
362
- 功能:使用LogisticRegression和正则化L2参数C,获得最高测试分数
363
- 返回:最优的C参数和模型
364
- """
365
-
366
- #将整个样本随机分割为训练集和测试集
367
- from sklearn.utils import column_or_1d
368
- y=column_or_1d(y,warn=False)
369
- from sklearn.model_selection import train_test_split
370
- X_train,X_test,y_train,y_test=train_test_split(X,y,stratify=y,random_state=0)
371
-
372
- best_score=0.1
373
- import numpy as np
374
- from sklearn.linear_model import LogisticRegression
375
-
376
- for Cvalue in np.arange(0.01,1,0.01):
377
- lr=LogisticRegression(C=Cvalue, penalty='l2', \
378
- solver='liblinear', max_iter=10000)
379
- lr.fit(X_train,y_train)
380
- score_test = lr.score(X_test, y_test)
381
- if score_test > best_score:
382
- best_score=score_test
383
- best_C=Cvalue
384
- best_model=lr
385
-
386
- for Cvalue in np.arange(1,10,0.1):
387
- lr=LogisticRegression(C=Cvalue, penalty='l2', \
388
- solver='liblinear', max_iter=10000)
389
- lr.fit(X_train,y_train)
390
- score_test = lr.score(X_test, y_test)
391
- if score_test > best_score:
392
- best_score=score_test
393
- best_C=Cvalue
394
- best_model=lr
395
-
396
- for Cvalue in np.arange(10,100,1):
397
- lr=LogisticRegression(C=Cvalue, penalty='l2', \
398
- solver='liblinear', max_iter=10000)
399
- lr.fit(X_train,y_train)
400
- score_test = lr.score(X_test, y_test)
401
- if score_test > best_score:
402
- best_score=score_test
403
- best_C=Cvalue
404
- best_model=lr
405
-
406
- for Cvalue in np.arange(100,1000,10):
407
- lr=LogisticRegression(C=Cvalue, penalty='l2', \
408
- solver='liblinear', max_iter=10000)
409
- lr.fit(X_train,y_train)
410
- score_test = lr.score(X_test, y_test)
411
- if score_test > best_score:
412
- best_score=score_test
413
- best_C=Cvalue
414
- best_model=lr
415
-
416
- score_train=best_model.score(X_train,y_train)
417
- return best_model,best_C,score_train,best_score
418
-
419
-
420
- if __name__=='__main__':
421
- ticker='MSFT'
422
- market='^GSPC'
423
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
424
- dfindex=get_price(market,'4/12/2019','1/1/2015')
425
-
426
- X,y,ndfeature=make_advice_sample(dfprice,dfindex,5,240,20,'AR')
427
- model,C,score_train,score_test=bestLRL2(X,y)
428
- print("%.5f, %.5f, %.5f"%(C,score_train,score_test))
429
- #结果:33, 0.65,0.68333
430
-
431
- X_new=ndfeature[0,0:20]
432
- y_new=model.predict(X_new)
433
- print("%.0f"%y_new)
434
- #结果:-1
435
-
436
- X1,y1,ndfeature1=make_advice_sample(dfprice,dfindex,5,240,20,'JG')
437
- model,C,score_train,score_test=bestLRL2(X1,y1)
438
- print("%.5f, %.5f, %.5f"%(C,score_train,score_test))
439
- #结果:0.02,0.62222,0.66667
440
-
441
- #==============================================================================
442
-
443
- def bestLSVCL1(X,y):
444
- """
445
- 功能:使用LinearSVC和正则化L1参数C,获得最高测试分数
446
- 返回:最优的C参数和模型
447
- """
448
-
449
- #将整个样本随机分割为训练集和测试集
450
- from sklearn.utils import column_or_1d
451
- y=column_or_1d(y,warn=False)
452
- from sklearn.model_selection import train_test_split
453
- X_train,X_test,y_train,y_test=train_test_split(X,y,stratify=y,random_state=0)
454
-
455
- best_score=0.1
456
- import numpy as np
457
- from sklearn.svm import LinearSVC
458
-
459
- for Cvalue in np.arange(0.01,1,0.01):
460
- lr=LinearSVC(C=Cvalue, penalty='l1',dual=False,max_iter=10**6)
461
- lr.fit(X_train,y_train)
462
- score_test = lr.score(X_test, y_test)
463
- if score_test > best_score:
464
- best_score=score_test
465
- best_C=Cvalue
466
- best_model=lr
467
-
468
- for Cvalue in np.arange(1,10,0.1):
469
- lr=LinearSVC(C=Cvalue, penalty='l1',dual=False,max_iter=10**6)
470
- lr.fit(X_train,y_train)
471
- score_test = lr.score(X_test, y_test)
472
- if score_test > best_score:
473
- best_score=score_test
474
- best_C=Cvalue
475
- best_model=lr
476
-
477
- for Cvalue in np.arange(10,100,1):
478
- lr=LinearSVC(C=Cvalue, penalty='l1',dual=False,max_iter=10**6)
479
- lr.fit(X_train,y_train)
480
- score_test = lr.score(X_test, y_test)
481
- if score_test > best_score:
482
- best_score=score_test
483
- best_C=Cvalue
484
- best_model=lr
485
-
486
- for Cvalue in np.arange(100,1000,10):
487
- lr=LinearSVC(C=Cvalue, penalty='l1',dual=False,max_iter=10**6)
488
- lr.fit(X_train,y_train)
489
- score_test = lr.score(X_test, y_test)
490
- if score_test > best_score:
491
- best_score=score_test
492
- best_C=Cvalue
493
- best_model=lr
494
-
495
- score_train=best_model.score(X_train,y_train)
496
- return best_model,best_C,score_train,best_score
497
-
498
-
499
- if __name__=='__main__':
500
- ticker='MSFT'
501
- market='^GSPC'
502
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
503
- dfindex=get_price(market,'4/12/2019','1/1/2015')
504
-
505
- X,y,ndfeature=make_advice_sample(dfprice,dfindex,5,240,20,'AR')
506
- model,C,score_train,score_test=bestLSVCL1(X,y)
507
- print("%.5f, %.5f, %.5f"%(C,score_train,score_test))
508
- #结果:5.3, 0.66111, 0.71667
509
-
510
- X_new=ndfeature[0,0:20]
511
- y_new=model.predict(X_new)
512
- print("%.0f"%y_new)
513
- #结果:-1
514
-
515
- X1,y1,ndfeature1=make_advice_sample(dfprice,dfindex,5,240,20,'JG')
516
- model,C,score_train,score_test=bestLSVCL1(X1,y1)
517
- print("%.5f, %.5f, %.5f"%(C,score_train,score_test))
518
- #结果:0.04, 0.61667, 0.63333
519
-
520
-
521
- #==============================================================================
522
-
523
- def bestLSVCL2(X,y):
524
- """
525
- 功能:使用LinearSVC和正则化L2参数C,获得最高测试分数
526
- 返回:最优的C参数和模型
527
- """
528
-
529
- #将整个样本随机分割为训练集和测试集
530
- from sklearn.utils import column_or_1d
531
- y=column_or_1d(y,warn=False)
532
- from sklearn.model_selection import train_test_split
533
- X_train,X_test,y_train,y_test=train_test_split(X,y,stratify=y,random_state=0)
534
-
535
- best_score=0.1
536
- import numpy as np
537
- from sklearn.svm import LinearSVC
538
-
539
- for Cvalue in np.arange(0.01,1,0.01):
540
- lr=LinearSVC(C=Cvalue, penalty='l2',dual=False,max_iter=10**6)
541
- lr.fit(X_train,y_train)
542
- score_test = lr.score(X_test, y_test)
543
- if score_test > best_score:
544
- best_score=score_test
545
- best_C=Cvalue
546
- best_model=lr
547
-
548
- for Cvalue in np.arange(1,10,0.1):
549
- lr=LinearSVC(C=Cvalue, penalty='l2',dual=False,max_iter=10**6)
550
- lr.fit(X_train,y_train)
551
- score_test = lr.score(X_test, y_test)
552
- if score_test > best_score:
553
- best_score=score_test
554
- best_C=Cvalue
555
- best_model=lr
556
-
557
- for Cvalue in np.arange(10,100,1):
558
- lr=LinearSVC(C=Cvalue, penalty='l2',dual=False,max_iter=10**6)
559
- lr.fit(X_train,y_train)
560
- score_test = lr.score(X_test, y_test)
561
- if score_test > best_score:
562
- best_score=score_test
563
- best_C=Cvalue
564
- best_model=lr
565
-
566
- for Cvalue in np.arange(100,1000,10):
567
- lr=LinearSVC(C=Cvalue, penalty='l2',dual=False,max_iter=10**6)
568
- lr.fit(X_train,y_train)
569
- score_test = lr.score(X_test, y_test)
570
- if score_test > best_score:
571
- best_score=score_test
572
- best_C=Cvalue
573
- best_model=lr
574
-
575
- score_train=best_model.score(X_train,y_train)
576
- return best_model,best_C,score_train,best_score
577
-
578
-
579
- if __name__=='__main__':
580
- ticker='MSFT'
581
- market='^GSPC'
582
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
583
- dfindex=get_price(market,'4/12/2019','1/1/2015')
584
-
585
- X,y,ndfeature=make_advice_sample(dfprice,dfindex,5,240,20,'AR')
586
- model,C,score_train,score_test=bestLSVCL2(X,y)
587
- print("%.5f, %.5f, %.5f"%(C,score_train,score_test))
588
- #结果:4, 0.65000, 0.68333
589
-
590
- X_new=ndfeature[0,0:20]
591
- y_new=model.predict(X_new)
592
- print("%.0f"%y_new)
593
- #结果:-1
594
-
595
- X1,y1,ndfeature1=make_advice_sample(dfprice,dfindex,5,240,20,'JG')
596
- model,C,score_train,score_test=bestLSVCL2(X1,y1)
597
- print("%.5f, %.5f, %.5f"%(C,score_train,score_test))
598
- #结果:0.01, 0.63333, 0.58333
599
-
600
-
601
- #==============================================================================
602
-
603
- def bestMODEL(dfprice,dfindex,n_nextdays=5, \
604
- n_samples=240,n_features=20, n_shares=1):
605
- """
606
- 功能:给定投资天数,样本构造参数,求最佳C值和预测投资结果
607
- """
608
-
609
- #样本构造方法:samplingtype='AR'
610
- best_score=0.1
611
-
612
- #构造样本:AR, JG
613
- X,y,ndfeature=make_advice_sample(dfprice,dfindex,n_nextdays, \
614
- n_samples,n_features,'AR',n_shares)
615
- X1,y1,ndfeature1=make_advice_sample(dfprice,dfindex,n_nextdays, \
616
- n_samples,n_features,'JG',n_shares)
617
-
618
- #测试LRL1优化策略
619
- model,C,score_train,score_test=bestLRL1(X,y)
620
- if score_test > best_score:
621
- bestmodel=model
622
- bestC=C
623
- best_train=score_train
624
- best_score=score_test
625
- besttype='AR'
626
- beststrategy='LRL1'
627
-
628
- model,C,score_train,score_test=bestLRL1(X1,y1)
629
- if score_test > best_score:
630
- bestmodel=model
631
- bestC=C
632
- best_train=score_train
633
- best_score=score_test
634
- besttype='JG'
635
- beststrategy='LRL1'
636
-
637
-
638
- #测试LRL2优化策略
639
- model,C,score_train,score_test=bestLRL2(X,y)
640
- if score_test > best_score:
641
- bestmodel=model
642
- bestC=C
643
- best_train=score_train
644
- best_score=score_test
645
- besttype='AR'
646
- beststrategy='LRL2'
647
-
648
- model,C,score_train,score_test=bestLRL2(X1,y1)
649
- if score_test > best_score:
650
- bestmodel=model
651
- bestC=C
652
- best_train=score_train
653
- best_score=score_test
654
- besttype='JG'
655
- beststrategy='LRL2'
656
-
657
- #测试LSVCL1优化策略
658
- model,C,score_train,score_test=bestLSVCL1(X,y)
659
- if score_test > best_score:
660
- bestmodel=model
661
- bestC=C
662
- best_train=score_train
663
- best_score=score_test
664
- besttype='AR'
665
- beststrategy='LSVCL1'
666
-
667
- model,C,score_train,score_test=bestLSVCL1(X1,y1)
668
- if score_test > best_score:
669
- bestmodel=model
670
- bestC=C
671
- best_train=score_train
672
- best_score=score_test
673
- besttype='JG'
674
- beststrategy='LSVCL1'
675
-
676
- #测试LSVCL2优化策略
677
- model,C,score_train,score_test=bestLSVCL2(X,y)
678
- if score_test > best_score:
679
- bestmodel=model
680
- bestC=C
681
- best_train=score_train
682
- best_score=score_test
683
- besttype='AR'
684
- beststrategy='LSVCL2'
685
-
686
- model,C,score_train,score_test=bestLSVCL2(X1,y1)
687
- if score_test > best_score:
688
- bestmodel=model
689
- bestC=C
690
- best_train=score_train
691
- best_score=score_test
692
- besttype='JG'
693
- beststrategy='LSVCL2'
694
-
695
- print(" ***Model settings***")
696
- print(" Future days :",n_nextdays)
697
- print(" Number of samples :",n_samples)
698
- print(" Number of features:",n_features)
699
- print(" ***Best model specification***")
700
- print(" Model :",beststrategy)
701
- print(" Sampling type :",besttype)
702
- print(" C value : %.2f"%bestC)
703
- print(" Score on train : %.4f"%best_train)
704
- print(" Score on test : %.4f"%best_score)
705
-
706
- ndf=ndfeature
707
- if besttype == 'JG': ndf=ndfeature1
708
-
709
- return bestmodel,beststrategy,bestC,besttype,score_train,best_score,ndf
710
-
711
-
712
- if __name__=='__main__':
713
- ticker='MSFT'
714
- market='^GSPC'
715
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
716
- dfindex=get_price(market,'4/12/2019','1/1/2015')
717
-
718
- n_days=5
719
- n_samples=240
720
- n_features=20
721
- model,strategy,C,ntype,score_train,score_test,ndfeature= \
722
- bestMODEL(dfprice,dfindex,n_days,n_samples,n_features)
723
- #结果:LRL1 AR 14.00, 0.6333, 0.7167
724
-
725
- X_new=ndfeature[0,0:n_features]
726
- y_new=model.predict(X_new)
727
- print(y_new[0])
728
- #结果:-1
729
-
730
- ticker='BILI'
731
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
732
-
733
- n_days=20
734
- n_samples=120
735
- n_features=40
736
- model,strategy,C,ntype,score_train,score_test,ndfeature= \
737
- bestMODEL(dfprice,dfindex,n_days,n_samples,n_features)
738
- """
739
- #结果:'
740
- ***Model settings***
741
- Stock : BILI
742
- Future days : 20
743
- Number of samples : 120
744
- Number of features: 40
745
- ***Best model specification***
746
- Model : LRL1
747
- Sampling type : AR
748
- C value : 2.00
749
- Score on train : 0.7111
750
- Score on test : 0.7000
751
- """
752
-
753
- X_new=ndfeature[0,0:n_features]
754
- y_new=model.predict(X_new)
755
- print(y_new[0])
756
- #结果:1
757
-
758
-
759
- ticker='PDD'
760
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
761
-
762
- n_days=30
763
- n_samples=120
764
- n_features=30
765
- model,strategy,C,ntype,score_train,score_test,ndfeature= \
766
- bestMODEL(dfprice,dfindex,n_days,n_samples,n_features)
767
- """
768
- #结果:
769
- ***Model settings***
770
- Stock : PDD
771
- Future days : 30
772
- Number of samples : 120
773
- Number of features: 30
774
- ***Best model specification***
775
- Model : LRL2
776
- Sampling type : AR
777
- C value : 0.21
778
- Score on train : 0.7667
779
- Score on test : 0.7333
780
- """
781
-
782
- X_new=ndfeature[0,0:n_features]
783
- y_new=model.predict(X_new)
784
- print(y_new[0])
785
- #结果:1
786
-
787
-
788
- ticker='BABA'
789
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
790
-
791
- n_days=20
792
- n_samples=120
793
- n_features=40
794
- model,strategy,C,ntype,score_train,score_test,ndfeature= \
795
- bestMODEL(dfprice,dfindex,n_days,n_samples,n_features)
796
- """
797
- #结果:
798
- ***Model settings***
799
- Future days : 20
800
- Number of samples : 120
801
- Number of features: 40
802
- ***Best model specification***
803
- Model : LSVCL1
804
- Sampling type : JG
805
- C value : 0.26
806
- Score on train : 0.8111
807
- Score on test : 0.8000
808
- """
809
-
810
- X_new=ndfeature[0,0:n_features]
811
- y_new=model.predict(X_new)
812
- print(y_new[0])
813
- #结果:1
814
-
815
-
816
- dfprice=get_portfolio(['BABA','BILI','PDD'],[0.5,0.33,0.17],'4/12/2019','1/1/2015')
817
- model,strategy,C,ntype,score_train,score_test,ndfeature= \
818
- bestMODEL(dfprice,dfindex,30, 80,60)
819
- """
820
- 结果:
821
- ***Model settings***
822
- Future days : 30
823
- Number of samples : 80
824
- Number of features: 60
825
- ***Best model specification***
826
- Model : LRL1
827
- Sampling type : AR
828
- C value : 1.30
829
- Score on train : 0.9333
830
- Score on test : 0.9500
831
- """
832
- X_new=ndfeature[0,0:60]
833
- y_new=model.predict(X_new)
834
- print(y_new[0])
835
- #结果:1
836
-
837
- #==============================================================================
838
-
839
- def bestMODEL2(dfprice,dfindex,n_nextdays=10,n_shares=1):
840
- """
841
- 功能:给定投资天数,寻找最佳样本构造参数,求最佳C值和预测投资结果
842
- """
843
- print("\nLooking for best numbers of samples and features, please wait...")
844
-
845
- best_score=0.1
846
- import numpy as np
847
-
848
- for f in np.arange(20,60,10):
849
- for s in np.arange(120,240,120):
850
- model,strategy,C,ntype,score_train,score_test= \
851
- bestMODEL(dfprice,dfindex,n_days,s,f)
852
- if score_test > best_score:
853
- bestmodel=model
854
- bestsamples=s
855
- bestfeatures=f
856
- beststrategy=strategy
857
- bestC=C
858
- besttype=ntype
859
- best_train=score_train
860
- best_score=score_test
861
-
862
- print(" ***Model settings")
863
- print(" Future days :",n_nextdays)
864
- print(" ***Best model specification")
865
- print(" Model :",beststrategy)
866
- print(" Sampling type :",besttype)
867
- print(" Number of samples :",bestsamples)
868
- print(" Number of features:",bestfeatures)
869
- print(" C value :%.2f"%bestC)
870
- print(" Score on train :%.4f"%best_train)
871
- print(" Score on test :%.4f"%best_score)
872
-
873
- return bestmodel,bestsamples,bestfeatures,beststrategy,bestC,besttype, \
874
- score_train,best_score
875
-
876
-
877
- if __name__=='__main__':
878
- ticker='MSFT'
879
- market='^GSPC'
880
- dfprice=get_price(ticker,'4/12/2019','1/1/2015')
881
- dfindex=get_price(market,'4/12/2019','1/1/2015')
882
-
883
- n_days=5
884
- model,samples,features,strategy,C,ntype,score_train,best_score= \
885
- bestMODEL2(dfprice,dfindex,n_days)
886
- #结果:120 30 LRL1 AR 18.00, 0.7079, 0.8
887
-
888
-
889
- X,y,ndfeature=make_advice_sample(dfprice,dfindex,n_days, \
890
- samples,features,ntype)
891
- X_new=ndfeature[0,0:n_features]
892
- y_new=model.predict(X_new)
893
- print(y_new[0])
894
- #结果:-1
895
-
896
-
897
-
898
-
899
-
900
-
901
-
902
-
903
-
904
-
905
-
906
-
907
-
908
-
909
-
910
-
911
-
912
-
913
-
914
-
915
-
916
-
917
-
918
-
919
-
920
-
921
-
922
-
923
-
924
-
925
-
926
-
927
-
928
-
929
-
930
-
931
-
932
-
933
-
934
-