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,402 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- 本模块功能:投资组合的风险调整收益率教学插件
4
- 所属工具包:证券投资分析工具SIAT
5
- SIAT:Security Investment Analysis Tool
6
- 创建日期:2023年7月15日
7
- 最新修订日期:2023年7月16日
8
- 作者:王德宏 (WANG Dehong, Peter)
9
- 作者单位:北京外国语大学国际商学院
10
- 作者邮件:wdehong2000@163.com
11
- 版权所有:王德宏
12
- 用途限制:仅限研究与教学使用!
13
- 特别声明:作者不对使用本工具进行证券投资导致的任何损益负责!
14
- """
15
-
16
- #==============================================================================
17
- #关闭所有警告
18
- import warnings; warnings.filterwarnings('ignore')
19
- #==============================================================================
20
- from siat.common import *
21
- from siat.translate import *
22
- from siat.stock import *
23
- from siat.security_prices import *
24
- from siat.security_price2 import *
25
- from siat.risk_adjusted_return import *
26
- from siat.valuation import *
27
- from siat.grafix import *
28
-
29
- import pandas as pd
30
- import datetime as dt; today=str(dt.date.today())
31
- #==============================================================================
32
- #==============================================================================
33
- if __name__=='__main__':
34
- #测试组1
35
- ticker='JD'
36
- indicator='Exp Ret%'
37
- start='2022-1-1'
38
- end='2022-12-31'
39
- datatag=False
40
- power=1
41
- graph=True
42
- source='auto'
43
-
44
- df=security_trend(ticker,indicator=indicator,power=1)
45
-
46
- #测试组2
47
- ticker='AAPL'
48
- indicator=['Close','Open']
49
- start='default'
50
- end='default'
51
- datatag=False
52
- power=0
53
- graph=True
54
- twinx=True
55
- loc1='upper left'
56
- loc2='lower right'
57
- source='auto'
58
-
59
- #测试组3
60
- ticker='AAPL'
61
- indicator=['Close','Open','High','Low']
62
- start='default'
63
- end='default'
64
- datatag=False
65
- power=0
66
- graph=True
67
- twinx=True
68
- loc1='upper left'
69
- loc2='lower right'
70
- source='auto'
71
-
72
- df=security_trend(ticker,indicator=indicator)
73
-
74
- #测试组4
75
- ticker=["GCZ25.CMX","GCZ24.CMX"]
76
- indicator='Close'
77
- start="2020-1-1"
78
- end="2020-6-30"
79
-
80
-
81
-
82
- def security_trend(ticker,indicator='Close', \
83
- start='default',end='default', \
84
- critical_value='', \
85
- average_value=False, \
86
- kline=False,kline_demo=False,mav=[5,10,20], \
87
- stock_dividend=False,stock_split=False, \
88
- market="China",market_index="000300.SS",RF=False,window=252, \
89
- sortby='tpw_mean',trailing=10,trend_threshhold=0.001, \
90
- graph=True,twinx=False,loc1='best',loc2='best', \
91
- datatag=False,power=0, \
92
- smooth=True,date_range=False,date_freq=False,annotate=False, \
93
- preprocess='none',scaling_option='start', \
94
- printout=False, \
95
- source='auto'):
96
-
97
- """
98
- 功能:描述证券指标走势
99
- 指标种类:默认为收盘价,包括收益率指标、风险指标、RAR指标、估值指标。
100
- 窗口:滚动窗口,扩展窗口。
101
- 数量变换:多种,默认不变换,常用的为scaling。
102
-
103
- 注意:base='Annual Ret%'需要与window=252一致,如果不一致,以base为准。
104
- """
105
-
106
- # 检查证券代码
107
- if isinstance(ticker,str):
108
- ticker_num=1
109
- tickers=[ticker]
110
- elif isinstance(ticker,list):
111
- ticker_num=len(ticker)
112
- tickers=ticker
113
- else:
114
- print(" #Error(security_trend): unrecognizable security codes",ticker)
115
- return None
116
-
117
- # 检查日期:截至日期
118
- import datetime as dt; today=dt.date.today()
119
- end=end.lower()
120
- if end in ['default','today']:
121
- todate=today
122
- else:
123
- validdate,todate=check_date2(end)
124
- if not validdate:
125
- print(" #Warning(security_trend): invalid date for",end)
126
- todate=today
127
-
128
- # 检查日期:开始日期
129
- start=start.lower()
130
- if start in ['default','mrm','l1m']: # 默认近一个月
131
- fromdate=date_adjust(todate,adjust=-31-16) #多几天有利于绘图坐标标示
132
- elif start in ['mrq','l3m']: # 近三个月
133
- fromdate=date_adjust(todate,adjust=-31*4-16) #多一个月有利于绘图坐标标示
134
- elif start in ['l6m','mrh']: # 近6个月
135
- fromdate=date_adjust(todate,adjust=-31*7-16)
136
- elif start in ['mry','l12m']: # 近一年
137
- fromdate=date_adjust(todate,adjust=-31*13-16)
138
- elif start in ['l2y']: # 近两年以来
139
- fromdate=date_adjust(todate,adjust=-31*25-16)
140
- elif start in ['l3y']: # 近三年以来
141
- fromdate=date_adjust(todate,adjust=-31*37-16)
142
- elif start in ['l5y']: # 近五年以来
143
- fromdate=date_adjust(todate,adjust=-31*61-16)
144
- elif start in ['l8y']: # 近八年以来
145
- fromdate=date_adjust(todate,adjust=-31*97-16)
146
- elif start in ['l10y']: # 近十年以来
147
- fromdate=date_adjust(todate,adjust=-31*121-16)
148
- elif start in ['ytd']: # 今年以来
149
- fromdate=str(today.year-1)+'-12-1'
150
- else:
151
- validdate,fromdate=check_date2(start)
152
- if not validdate:
153
- print(" #Warning(security_trend): invalid date for",start,"/b, reset to MRM")
154
- fromdate=date_adjust(todate,adjust=-31-16)
155
-
156
- # 检查窗口长度
157
- if isinstance(window,str):
158
- if window.lower() == "weekly":
159
- window=5
160
- elif window.lower() == "monthly":
161
- window=21
162
- elif window.lower() == "quarterly":
163
- window=63
164
- elif window.lower() == "annual":
165
- window=252
166
- else:
167
- print(" #Warning(security_trend): invalid window size, reset to annual")
168
- window=252
169
-
170
- # 处理K线图=================================================================
171
- if kline and not kline_demo:
172
- # 跟踪
173
- #print(tickers[0],fromdate,todate)
174
- if start in ['default']:
175
- fromdate=date_adjust(todate,adjust=-60)
176
- if not isinstance(mav,list):
177
- mav=[mav]
178
- df=candlestick(stkcd=tickers[0],fromdate=fromdate,todate=todate,mav=mav)
179
- return df
180
-
181
- if kline and kline_demo:
182
- if start in ['default']:
183
- fromdate=date_adjust(todate,adjust=-7)
184
-
185
- df=candlestick_demo(tickers[0],fromdate=fromdate,todate=todate)
186
- return df
187
-
188
- # 处理股票分红和股票分拆:需要访问雅虎财经=====================================
189
- if stock_dividend:
190
- if start in ['default']:
191
- fromdate=date_adjust(todate,adjust=-365*5)
192
-
193
- df=stock_dividend(ticker=tickers[0],fromdate=fromdate,todate=todate)
194
- return df
195
-
196
- if stock_split:
197
- if start in ['default']:
198
- fromdate=date_adjust(todate,adjust=-365*5)
199
-
200
- df=stock_split(ticker=tickers[0],fromdate=fromdate,todate=todate)
201
- return df
202
-
203
-
204
- # 检查指标:是否字符串或列表=================================================
205
- if isinstance(indicator,str):
206
- measures=[indicator]
207
- indicator_num=1
208
- elif isinstance(indicator,list):
209
- measures=indicator
210
- indicator_num=len(indicator)
211
- else:
212
- print(" #Error(security_trend): invalid indicator(s) for",indicator)
213
- return None
214
-
215
- # 检查指标
216
- indicator_list1=['Open','Close','Adj Close','High','Low',
217
- 'Daily Ret','Daily Ret%','Daily Adj Ret','Daily Adj Ret%',
218
- 'log(Daily Ret)','log(Daily Adj Ret)','Weekly Ret','Weekly Ret%',
219
- 'Weekly Adj Ret','Weekly Adj Ret%','Monthly Ret','Monthly Ret%',
220
- 'Monthly Adj Ret','Monthly Adj Ret%','Quarterly Ret','Quarterly Ret%',
221
- 'Quarterly Adj Ret','Quarterly Adj Ret%','Annual Ret','Annual Ret%',
222
- 'Annual Adj Ret','Annual Adj Ret%','Exp Ret','Exp Ret%','Exp Adj Ret',
223
- 'Exp Adj Ret%','Weekly Price Volatility','Weekly Adj Price Volatility',
224
- 'Monthly Price Volatility','Monthly Adj Price Volatility',
225
- 'Quarterly Price Volatility','Quarterly Adj Price Volatility',
226
- 'Annual Price Volatility','Annual Adj Price Volatility',
227
- 'Exp Price Volatility','Exp Adj Price Volatility',
228
- 'Weekly Ret Volatility','Weekly Ret Volatility%',
229
- 'Weekly Adj Ret Volatility','Weekly Adj Ret Volatility%',
230
- 'Monthly Ret Volatility', 'Monthly Ret Volatility%',
231
- 'Monthly Adj Ret Volatility', 'Monthly Adj Ret Volatility%',
232
- 'Quarterly Ret Volatility', 'Quarterly Ret Volatility%',
233
- 'Quarterly Adj Ret Volatility', 'Quarterly Adj Ret Volatility%',
234
- 'Annual Ret Volatility', 'Annual Ret Volatility%',
235
- 'Annual Adj Ret Volatility', 'Annual Adj Ret Volatility%',
236
- 'Exp Ret Volatility', 'Exp Ret Volatility%', 'Exp Adj Ret Volatility',
237
- 'Exp Adj Ret Volatility%', 'Weekly Ret LPSD', 'Weekly Ret LPSD%',
238
- 'Weekly Adj Ret LPSD', 'Weekly Adj Ret LPSD%', 'Monthly Ret LPSD',
239
- 'Monthly Ret LPSD%', 'Monthly Adj Ret LPSD', 'Monthly Adj Ret LPSD%',
240
- 'Quarterly Ret LPSD', 'Quarterly Ret LPSD%', 'Quarterly Adj Ret LPSD',
241
- 'Quarterly Adj Ret LPSD%', 'Annual Ret LPSD', 'Annual Ret LPSD%',
242
- 'Annual Adj Ret LPSD', 'Annual Adj Ret LPSD%', 'Exp Ret LPSD',
243
- 'Exp Ret LPSD%', 'Exp Adj Ret LPSD', 'Exp Adj Ret LPSD%',
244
- ]
245
-
246
- indicator_list2=['treynor','sharpe','sortino','alpha','Treynor','Sharpe','Sortino','Alpha']
247
- indicator_list3=['pe','pb','mv','PE','PB','MV','Pe','Pb','Mv','ROE','roe','Roe']
248
-
249
- # 是否属于支持的指标
250
- for m in measures:
251
- if not (m in indicator_list1 + indicator_list2 + indicator_list3):
252
- print(" #Error(security_trend): unsupported indicator for",m)
253
- print(" Supported indicators:")
254
- printlist(indicator_list1,numperline=4,beforehand=' ',separator=' ')
255
- printlist(indicator_list2,numperline=5,beforehand=' ',separator=' ')
256
- printlist(indicator_list3,numperline=5,beforehand=' ',separator=' ')
257
- return None
258
-
259
- # 不能同时支持indicator_list1、indicator_list2和indicator_list3的指标,即不能跨组比较!
260
- indicator_group1=False
261
- indicator_group2=False
262
- indicator_group3=False
263
-
264
- list_group1=list_group2=list_group3=0
265
- for m in measures:
266
- if m in indicator_list3:
267
- list_group3=1
268
- indicator_group3=True
269
- measures = [x.upper() for x in measures]
270
-
271
- if m in indicator_list2:
272
- list_group2=1
273
- indicator_group2=True
274
- measures = [x.lower() for x in measures]
275
-
276
- if m in indicator_list1:
277
- list_group1=1
278
- indicator_group1=True
279
- measures = [x.title() for x in measures]
280
- measures = [x.replace('Lpsd','LPSD') if 'Lpsd' in x else x for x in measures]
281
-
282
- if list_group1+list_group2+list_group3 >= 2:
283
- print(" #Error(security_trend): cannot support in different indicator groups together for",measures)
284
- return None
285
-
286
- # 情形1:单个证券,单个普通指标===============================================
287
- # 绘制横线
288
- zeroline=False
289
- if (critical_value != ''):
290
- if isinstance(critical_value,float) or isinstance(critical_value,int):
291
- zeroline=critical_value
292
-
293
- if ticker_num==1 and indicator_num==1 and indicator_group1:
294
- df=security_indicator(ticker=tickers[0],indicator=measures[0], \
295
- fromdate=fromdate,todate=todate, \
296
- zeroline=zeroline, \
297
- average_value=average_value, \
298
- datatag=datatag,power=power,graph=graph, \
299
- source=source)
300
- return df
301
-
302
- # 情形2:单个证券,两个普通指标,twinx==True =================================
303
- if ticker_num==1 and indicator_num == 2 and indicator_group1 and twinx:
304
- df=compare_security(tickers=tickers[0],measures=measures[:2], \
305
- fromdate=fromdate,todate=todate,twinx=twinx, \
306
- loc1=loc1,loc2=loc2,graph=graph,source=source)
307
- return df
308
-
309
- # 情形3:单个证券,两个及以上普通指标=========================================
310
- if ticker_num==1 and indicator_num >= 2 and indicator_group1 and not twinx:
311
- df=security_mindicators(ticker=tickers[0],measures=measures, \
312
- fromdate=fromdate,todate=todate, \
313
- graph=graph,smooth=smooth,loc=loc1, \
314
- date_range=date_range,date_freq=date_freq, \
315
- annotate=annotate, \
316
- source=source)
317
- return df
318
-
319
- # 情形4:两个证券,取第一个普通指标,twinx==True =============================
320
- if ticker_num==2 and indicator_group1 and twinx:
321
- df=compare_security(tickers=tickers,measures=measures[0], \
322
- fromdate=fromdate,todate=todate,twinx=twinx, \
323
- loc1=loc1,loc2=loc2,graph=graph,source=source)
324
- return df
325
-
326
- # 情形5:两个及以上证券,取第一个普通指标=====================================
327
- if ticker_num==2:
328
- linewidth=2.5
329
- elif ticker_num==3:
330
- linewidth=2.0
331
- else:
332
- linewidth=1.5
333
-
334
- # 绘制横线
335
- axhline_value=0
336
- axhline_label=''
337
- if (critical_value != ''):
338
- if isinstance(critical_value,float) or isinstance(critical_value,int):
339
- axhline_value=critical_value
340
- axhline_label='零线'
341
-
342
- if ((ticker_num == 2 and not twinx) or ticker_num > 2) and indicator_group1:
343
- df=compare_msecurity(tickers=tickers,measure=measures[0], \
344
- start=fromdate,end=todate, \
345
- axhline_value=axhline_value,axhline_label=axhline_label, \
346
- preprocess=preprocess,linewidth=linewidth, \
347
- scaling_option=scaling_option, \
348
- graph=graph,loc=loc1, \
349
- annotate=annotate,smooth=smooth, \
350
- source=source)
351
- return df
352
-
353
- # 情形6:单个证券,单个或多个RAR指标=========================================
354
- # 特别注意:与收益率对比时若使用扩展收益率可能导致矛盾,要使用滚动收益率
355
- if indicator_group2 and ticker_num==1 and indicator_num >= 1:
356
- df=compare_1security_mrar(ticker=tickers[0],rar_names=measures, \
357
- start=fromdate,end=todate, \
358
- market=market,market_index=market_index,RF=RF,window=window, \
359
- axhline_value=0,axhline_label='零线',graph=graph,printout=printout, \
360
- sortby=sortby,source=source,trailing=trailing,trend_threshhold=trend_threshhold, \
361
- annotate=annotate)
362
- return df
363
-
364
- # 情形7:多个证券,取第一个RAR指标===========================================
365
- # 特别注意:与收益率对比时若使用扩展收益率可能导致矛盾,要使用滚动收益率
366
- if indicator_group2 and ticker_num > 1:
367
- df=compare_mrar(tickers=tickers,rar_name=measures[0], \
368
- start=fromdate,end=todate, \
369
- market=market,market_index=market_index,RF=RF,window=window, \
370
- axhline_value=0,axhline_label='零线',graph=graph,printout=printout, \
371
- sortby=sortby,source=source,trailing=trailing,trend_threshhold=trend_threshhold, \
372
- annotate=annotate)
373
- return df
374
-
375
- # 情形8:估值指标PE/PB/MV/ROE===============================================
376
- if indicator_group3:
377
- df=security_valuation(tickers=tickers,indicators=measures,start=fromdate,end=todate, \
378
- preprocess=preprocess,scaling_option=scaling_option, \
379
- twinx=twinx,loc1=loc1,loc2=loc2, \
380
- graph=graph,annotate=annotate)
381
- return df
382
-
383
- # 其他未预料情形
384
- print(" Sorry, unsupported combination of security(ies) and indicator(s):-(")
385
- return None
386
-
387
- #==============================================================================
388
-
389
- #==============================================================================
390
- #==============================================================================
391
- #==============================================================================
392
-
393
-
394
-
395
-
396
-
397
-
398
-
399
-
400
-
401
-
402
-