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,409 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- 本模块功能:另类证券市场指数
4
- 所属工具包:证券投资分析工具SIAT
5
- SIAT:Security Investment Analysis Tool
6
- 创建日期:2025年5月8日
7
- 最新修订日期:
8
- 作者:王德宏 (WANG Dehong, Peter)
9
- 作者单位:北京外国语大学国际商学院
10
- 作者邮件:wdehong2000@163.com
11
- 版权所有:王德宏
12
- 用途限制:仅限研究与教学使用,不可商用!商用需要额外授权。
13
- 特别声明:作者不对使用本工具进行证券投资导致的任何损益负责!
14
- """
15
- #==============================================================================
16
- #关闭所有警告
17
- import warnings; warnings.filterwarnings('ignore')
18
-
19
- from siat.common import *
20
- #==============================================================================
21
-
22
-
23
- def other_index_translate(index_code):
24
- """
25
- ===========================================================================
26
- 功能:另类证券市场指数代码
27
- 参数:
28
- index_code: 指数代码,非标准,来自东方财富和新浪。
29
- 返回值:是否找到,基于语言环境为中文或英文解释。
30
- 语言环境判断为check_language()
31
-
32
- 数据结构:['指数代码','指数符号','指数名称中文','指数名称英文','数据来源']
33
- """
34
-
35
- import pandas as pd
36
- trans_dict=pd.DataFrame([
37
-
38
- ['INDEXCF','俄罗斯MICEX指数','俄罗斯MICEX指数','MICEX Index','sina'],
39
- ['RTS','俄罗斯RTS指数','俄罗斯RTS指数','RTS Index','em'],
40
- ['CASE','埃及CASE 30指数','埃及CASE30指数','CASE30 Index','sina'],
41
- ['VNINDEX','越南胡志明','越南胡志明指数','Ho Chi-Ming Index','em'],
42
- ['HSCEI','国企指数','港股国企指数','HK H-share Index','em'],
43
- ['HSCCI','红筹指数','港股红筹指数','HK Red-share Index','em'],
44
- ['CSEALL','斯里兰卡科伦坡','斯里兰卡科伦坡全指','Colombo Index','em'],
45
- ['UDI','美元指数','美元指数','US Dollar Index','em'],
46
- ['CRB','路透CRB商品指数','路透CRB商品指数','Reuters CRB Index','em'],
47
- ['BDI','波罗的海BDI指数','波罗的海BDI指数','Baltic Dry Index','em'],
48
- ['KSE100','巴基斯坦卡拉奇','巴基斯坦卡拉奇指数','KSE100 Index','em'],
49
-
50
-
51
- ], columns=['code','symbol','name_cn','name_en','source'])
52
-
53
- found=False; symbol=index_code
54
- try:
55
- dict_word=trans_dict[trans_dict['code']==index_code]
56
- found=True
57
- except:
58
- #未查到翻译词汇,返回原词
59
- pass
60
-
61
- if dict_word is None:
62
- found=False
63
- elif len(dict_word) == 0:
64
- found=False
65
-
66
- source=''; name=''
67
- if found:
68
- symbol=dict_word['symbol'].values[0]
69
-
70
- lang=check_language()
71
- if lang == 'Chinese':
72
- name=dict_word['name_cn'].values[0]
73
- else:
74
- name=dict_word['name_en'].values[0]
75
-
76
- source=dict_word['source'].values[0]
77
-
78
- return symbol,name,source
79
-
80
- if __name__=='__main__':
81
- index_code='KSE100'
82
- index_code='CASE'
83
- index_code='XYZ'
84
-
85
- set_language('Chinese')
86
- set_language('English')
87
- other_index_translate(index_code)
88
-
89
- #==============================================================================
90
- def get_other_index_em(index_code,start,end):
91
- """
92
- 功能:获取另类指数历史行情,东方财富
93
- 参数:
94
- index_code:指数代码
95
- start,end:开始/结束日期
96
- """
97
- symbol,name,source=other_index_translate(index_code)
98
- if symbol == index_code:
99
- return None
100
-
101
- import akshare as ak
102
- try:
103
- dft = ak.index_global_hist_em(symbol=symbol)
104
- except:
105
- return None
106
-
107
- dft.rename(columns={'日期':'Date','代码':'ticker','名称':'Name','今开':'Open', \
108
- '最新价':'Close','最高':'High','最低':'Low','振幅':'Change'}, \
109
- inplace=True)
110
- dft['Change']=dft['Change']/100.00
111
- dft['Adj Close']=dft['Close']
112
- dft['source']=source
113
- dft['Volume']=0
114
- dft['Name']=name
115
-
116
- import pandas as pd
117
- dft['date']=dft['Date'].apply(lambda x: pd.to_datetime(x))
118
- dft.set_index('date',inplace=True)
119
-
120
- startpd=pd.to_datetime(start); endpd=pd.to_datetime(end)
121
- df=dft[(dft.index >= startpd) & (dft.index <= endpd)]
122
-
123
- return df
124
-
125
- if __name__=='__main__':
126
- index_code='KSE100'
127
- start='2025-2-1'; end='2025-3-31'
128
- get_other_index_em(index_code,start,end)
129
- #==============================================================================
130
- if __name__=='__main__':
131
- index_code='RTS'
132
- start='2025-2-1'; end='2025-3-31'
133
- get_other_index_em(index_code,start,end)
134
-
135
- def get_other_index_sina(index_code,start,end):
136
- """
137
- 功能:获取另类指数历史行情,新浪财经
138
- 参数:
139
- index_code:指数代码
140
- start,end:开始/结束日期
141
- """
142
- symbol,name,source=other_index_translate(index_code)
143
- if symbol == index_code:
144
- return None
145
-
146
- import akshare as ak
147
- try:
148
- dft = ak.index_global_hist_sina(symbol=symbol)
149
- except:
150
- return None
151
-
152
- dft.rename(columns={'open':'Open','high':'High','low':'Low','close':'Close', \
153
- 'volume':'Volume'},inplace=True)
154
- dft['ticker']=index_code; dft['Name']=name; dft['Date']=dft['date']
155
- dft['Adj Close']=dft['Close']
156
- dft['source']=source
157
-
158
- import pandas as pd
159
- dft['date']=dft['Date'].apply(lambda x: pd.to_datetime(x))
160
- dft.set_index('date',inplace=True)
161
-
162
- startpd=pd.to_datetime(start); endpd=pd.to_datetime(end)
163
- df=dft[(dft.index >= startpd) & (dft.index <= endpd)]
164
-
165
- return df
166
-
167
- if __name__=='__main__':
168
- index_code='CASE'
169
- start='2025-2-1'; end='2025-3-31'
170
- get_other_index_sina(index_code,start,end)
171
- #==============================================================================
172
- def get_other_index_ak(index_code,start,end):
173
- """
174
- 功能:获取另类指数历史行情,新浪财经或东方财富
175
- 参数:
176
- index_code:指数代码
177
- start,end:开始/结束日期
178
- """
179
- symbol,name,source=other_index_translate(index_code)
180
- if symbol == index_code:
181
- return None
182
-
183
- if source == 'em':
184
- df=get_other_index_em(index_code,start,end)
185
- elif source == 'sina':
186
- df=get_other_index_sina(index_code,start,end)
187
- else:
188
- df=None
189
-
190
- return df
191
-
192
- if __name__=='__main__':
193
- index_code='CASE'
194
- index_code='KSE100'
195
- index_code='VNINDEX'
196
- start='2025-2-1'; end='2025-3-31'
197
- get_other_index(index_code,start,end)
198
- #==============================================================================
199
- if __name__=='__main__':
200
- ticker='AAPL'
201
- ticker='^TVX'
202
- ticker='Apple'
203
- start='2025-4-1'; end='2025-4-30'
204
-
205
- get_prices_av(ticker,start,end)
206
-
207
- def get_prices_av(ticker,start,end):
208
- """
209
- 功能:从Alpha Vantage获取美股股价历史行情,使用Alpha Vantage
210
- 参数:
211
- ticker:AV股票代码(假设与雅虎财经的股票代码相同),如不同可通过search_av获得准确代码
212
- start:起始日期
213
- end:结束日期
214
- """
215
- # 免费注册:wangdehong@bfsu.edu.cn,每日25次。
216
- api_key='VTRR3TA7L9O2DIX6'
217
-
218
- from alpha_vantage.timeseries import TimeSeries
219
- ts = TimeSeries(key=api_key, output_format="pandas")
220
- try:
221
- dft, _ = ts.get_daily(symbol=ticker, outputsize="full")
222
- except:
223
- pass
224
- return None
225
-
226
- dft.sort_index(ascending=True,inplace=True)
227
- dft.rename(columns={'1. open':'Open','2. high':'High','3. low':'Low', \
228
- '4. close':'Close','5. volume':'Volume'},inplace=True)
229
- dft['Adj Close']=dft['Close']
230
- dft['source']='Alpha Vantage'
231
- dft['ticker']=ticker
232
- dft['Name']=ticker
233
-
234
- import pandas as pd
235
- startpd=pd.to_datetime(start); endpd=pd.to_datetime(end)
236
- df=dft[(dft.index >= startpd) & (dft.index <= endpd)]
237
-
238
- return df
239
-
240
-
241
- #==============================================================================
242
- if __name__=='__main__':
243
- ticker='AAPL'
244
- ticker='Apple'
245
- start='2025-4-1'; end='2025-4-30'
246
-
247
- get_prices_av_pdr(ticker,start,end)
248
-
249
- def get_prices_av_pdr(ticker,start,end):
250
- """
251
- 功能:从Alpha Vantage获取美股股价历史行情,使用pandas_datareader
252
- 参数:
253
- ticker:AV股票代码(可能与雅虎财经的股票代码不同),可以通过search_av获得准确代码
254
- start:起始日期
255
- end:结束日期
256
- """
257
- # 免费注册:wangdehong@bfsu.edu.cn,限每日25次。
258
- api_key='VTRR3TA7L9O2DIX6'
259
-
260
- import pandas_datareader.data as pdr
261
- try:
262
- dft = pdr.DataReader(ticker, "av-daily", api_key=api_key,start=start,end=end)
263
- dft['ticker']=ticker
264
- dft['Name']=ticker
265
- except: # 拯救一次,查找字符串匹配的股票代码
266
- firstcode,firstname,_=search_av(ticker,api_key)
267
- if firstcode is None:
268
- pass
269
- return None
270
- print(f" Notice: matching keyword {ticker} to stock code {firstcode}({firstname})")
271
- try:
272
- dft = pdr.DataReader(firstcode, "av-daily", api_key=api_key,start=start,end=end)
273
- dft['ticker']=firstcode
274
- dft['Name']=firstname
275
- except:
276
- pass
277
- return None
278
-
279
- if dft is None:
280
- pass
281
- return None
282
- if len(dft) == 0:
283
- pass
284
- return None
285
-
286
- dft.rename(columns={'open':'Open','high':'High','low':'Low','close':'Close', \
287
- 'volume':'Volume'},inplace=True)
288
- dft['Adj Close']=dft['Close']
289
- dft['source']='Alpha Vantage'
290
-
291
- import pandas as pd
292
- dft['Date']=dft['date']=dft.index
293
- dft['date']=dft['date'].apply(lambda x: pd.to_datetime(x))
294
- dft.set_index('date',inplace=True)
295
-
296
- #startpd=pd.to_datetime(start); endpd=pd.to_datetime(end)
297
- #df=dft[(dft.index >= startpd) & (dft.index <= endpd)]
298
- df=dft
299
-
300
- return df
301
-
302
-
303
- #==============================================================================
304
- if __name__=='__main__':
305
- api_key='VTRR3TA7L9O2DIX6'
306
- keyword='AAPL'
307
- keyword='Apple'
308
- keyword='^TYX'
309
-
310
- search_av("microsoft")
311
- search_av("Apple")
312
-
313
- def search_av(keyword,api_key='VTRR3TA7L9O2DIX6'):
314
- """
315
- 过程:给定上市公司关键名称或不带后缀的股票代码,找出Alpha Vantage的股票代码。
316
- """
317
- DEBUG=False
318
-
319
- import requests
320
- url = f"https://www.alphavantage.co/query?function=SYMBOL_SEARCH&keywords={keyword}&apikey={api_key}"
321
- response = requests.get(url)
322
- if response.status_code != 200:
323
- pass
324
- return None,None,None
325
-
326
- data = response.json()
327
- if "bestMatches" in data:
328
- try:
329
- firstcode=data["bestMatches"][0]['1. symbol']
330
- firstname=data["bestMatches"][0]['2. name']
331
- except:
332
- if DEBUG:
333
- print(f" #Warning(search_av): no contents found for {keyword} in Alpha Vantage")
334
- #未找到可匹配的股票代码
335
- return None,None,None
336
-
337
- else:
338
- if DEBUG:
339
- if "Information" in data:
340
- print(f" #Warning(search_av): exceeded limit of requests per day in Alpha Vantage")
341
- else:
342
- print(f" #Warning(search_av): keyword {keyword} not found in Alpha Vantage")
343
- #未找到可匹配的股票代码
344
- return None,None,None
345
-
346
- return firstcode,firstname,data
347
-
348
- #==============================================================================
349
- if __name__=='__main__':
350
- ticker='AAPL'
351
- ticker='^TVX'
352
- start='2025-4-1'; end='2025-4-30'
353
-
354
- get_price_tiingo(ticker,start,end)
355
-
356
- def get_price_tiingo(ticker,start,end):
357
- """
358
- 功能:获取美股历史行情信息,基于TIINGO
359
- """
360
- DEBUG=False
361
-
362
- # 每日限1000次调用,基于wdehong2000@163.com
363
- api_token='0892bdb0533f8114535f354db596e6c244f5618d'
364
-
365
- from tiingo import TiingoClient
366
- # 通过配置字典
367
- config = {
368
- 'api_key': api_token, # 替换为实际密钥
369
- 'session': True # 启用HTTP会话复用,提升性能
370
- }
371
- client = TiingoClient(config)
372
-
373
-
374
- # 获取历史行情(默认返回DataFrame)
375
- try:
376
- dft = client.get_dataframe(
377
- ticker,
378
- startDate=start,
379
- endDate=end,
380
- frequency='daily'
381
- )
382
- except Exception as e:
383
- if DEBUG:
384
- print(f" #Error(get_price_tiingo): {e}")
385
- print(f" #Error(get_price_tiingo): {ticker} not found or exceeded max requests per day")
386
- return None
387
-
388
- # 去掉时区
389
- dft.index = dft.index.tz_localize(None)
390
-
391
- # 整理数据项
392
- dft.rename(columns={'open':'Open','high':'High','low':'Low','close':'Close', \
393
- 'volume':'Volume'},inplace=True)
394
-
395
- dft.rename(columns={'adjOpen':'Adj Open','adjHigh':'Adj High','adjLow':'Adj Low', \
396
- 'adjClose':'Adj Close', \
397
- 'adjVolume':'Adj Volume'},inplace=True)
398
-
399
- dft['source']='Tiingo'
400
- dft['ticker']=ticker; dft['name']=ticker
401
-
402
- return dft
403
-
404
-
405
- #==============================================================================
406
- #==============================================================================
407
- #==============================================================================
408
-
409
-