akshare 1.14.49__py3-none-any.whl → 1.17.99__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 (343) hide show
  1. akshare/__init__.py +595 -129
  2. akshare/air/air_hebei.py +77 -54
  3. akshare/air/air_zhenqi.py +0 -4
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/article/cons.py +1 -0
  8. akshare/article/epu_index.py +4 -3
  9. akshare/article/ff_factor.py +19 -8
  10. akshare/article/fred_md.py +4 -1
  11. akshare/article/risk_rv.py +3 -8
  12. akshare/bank/bank_cbirc_2020.py +11 -11
  13. akshare/bank/cons.py +7 -6
  14. akshare/bond/bond_buy_back_em.py +228 -0
  15. akshare/bond/bond_cb_sina.py +1 -0
  16. akshare/bond/bond_cb_ths.py +17 -9
  17. akshare/bond/bond_cbond.py +19 -14
  18. akshare/bond/bond_china.py +38 -39
  19. akshare/bond/bond_china_money.py +1 -1
  20. akshare/bond/bond_convert.py +10 -9
  21. akshare/bond/bond_em.py +37 -17
  22. akshare/bond/bond_summary.py +38 -37
  23. akshare/bond/bond_zh_cov.py +31 -40
  24. akshare/bond/bond_zh_sina.py +4 -0
  25. akshare/bond/cons.py +14 -11
  26. akshare/cal/__init__.py +0 -0
  27. akshare/cal/rv.py +170 -0
  28. akshare/cost/cost_living.py +7 -5
  29. akshare/crypto/__init__.py +1 -1
  30. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  31. akshare/crypto/crypto_hold.py +4 -2
  32. akshare/currency/currency.py +1 -0
  33. akshare/currency/currency_china_bank_sina.py +11 -6
  34. akshare/data/__init__.py +1 -1
  35. akshare/data/cninfo.js +1 -1
  36. akshare/datasets.py +10 -21
  37. akshare/economic/cons.py +10 -3
  38. akshare/economic/macro_australia.py +74 -69
  39. akshare/economic/macro_bank.py +95 -653
  40. akshare/economic/macro_canada.py +92 -81
  41. akshare/economic/macro_china.py +97 -105
  42. akshare/economic/macro_china_hk.py +0 -1
  43. akshare/economic/macro_euro.py +103 -56
  44. akshare/economic/macro_finance_ths.py +7 -5
  45. akshare/economic/macro_germany.py +1 -1
  46. akshare/economic/macro_japan.py +0 -1
  47. akshare/economic/macro_other.py +1 -6
  48. akshare/economic/macro_swiss.py +2 -3
  49. akshare/economic/macro_uk.py +1 -1
  50. akshare/economic/macro_usa.py +7 -9
  51. akshare/economic/marco_cnbs.py +11 -6
  52. akshare/energy/energy_carbon.py +0 -1
  53. akshare/energy/energy_oil_em.py +1 -2
  54. akshare/event/cons.py +1 -0
  55. akshare/exceptions.py +43 -0
  56. akshare/file_fold/calendar.json +245 -2
  57. akshare/forex/__init__.py +0 -0
  58. akshare/forex/cons.py +192 -0
  59. akshare/forex/forex_em.py +149 -0
  60. akshare/fortune/fortune_500.py +1 -37
  61. akshare/fortune/fortune_bloomberg.py +6 -3
  62. akshare/fortune/fortune_forbes_500.py +3 -6
  63. akshare/fortune/fortune_hurun.py +2 -1
  64. akshare/fortune/fortune_xincaifu_500.py +17 -14
  65. akshare/fund/fund_announcement_em.py +145 -0
  66. akshare/fund/fund_aum_em.py +49 -35
  67. akshare/fund/fund_em.py +251 -220
  68. akshare/fund/fund_etf_em.py +44 -35
  69. akshare/fund/fund_etf_sina.py +75 -27
  70. akshare/fund/fund_etf_ths.py +2 -0
  71. akshare/fund/fund_fee_em.py +172 -0
  72. akshare/fund/fund_fhsp_em.py +42 -32
  73. akshare/fund/fund_init_em.py +8 -5
  74. akshare/fund/fund_lof_em.py +12 -19
  75. akshare/fund/fund_manager.py +25 -11
  76. akshare/fund/fund_overview_em.py +42 -0
  77. akshare/fund/fund_portfolio_em.py +23 -21
  78. akshare/fund/fund_position_lg.py +19 -8
  79. akshare/fund/fund_rank_em.py +2 -5
  80. akshare/fund/fund_rating.py +33 -12
  81. akshare/fund/fund_scale_em.py +24 -13
  82. akshare/fund/fund_scale_sina.py +20 -10
  83. akshare/fund/fund_xq.py +3 -2
  84. akshare/futures/cons.py +135 -39
  85. akshare/futures/cot.py +55 -56
  86. akshare/futures/futures_basis.py +49 -11
  87. akshare/futures/futures_comex_em.py +1 -0
  88. akshare/futures/futures_comm_ctp.py +1 -1
  89. akshare/futures/futures_contract_detail.py +59 -9
  90. akshare/futures/futures_daily_bar.py +66 -59
  91. akshare/futures/futures_foreign.py +14 -8
  92. akshare/futures/futures_hf_em.py +215 -61
  93. akshare/futures/futures_hist_em.py +191 -0
  94. akshare/futures/futures_hq_sina.py +5 -3
  95. akshare/futures/futures_index_ccidx.py +24 -82
  96. akshare/futures/futures_inventory_99.py +70 -272
  97. akshare/futures/futures_inventory_em.py +14 -11
  98. akshare/futures/futures_news_shmet.py +2 -2
  99. akshare/futures/futures_roll_yield.py +11 -24
  100. akshare/futures/futures_rule.py +7 -3
  101. akshare/futures/futures_rule_em.py +38 -0
  102. akshare/futures/futures_settlement_price_sgx.py +21 -6
  103. akshare/futures/futures_stock_js.py +0 -1
  104. akshare/futures/futures_to_spot.py +5 -6
  105. akshare/futures/futures_warehouse_receipt.py +48 -47
  106. akshare/futures/futures_zh_sina.py +3 -3
  107. akshare/futures/receipt.py +298 -165
  108. akshare/futures/requests_fun.py +16 -3
  109. akshare/futures/symbol_var.py +32 -13
  110. akshare/futures_derivative/cons.py +100 -103
  111. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  112. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  113. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  114. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  115. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  116. akshare/futures_derivative/futures_contract_info_shfe.py +3 -4
  117. akshare/futures_derivative/futures_cot_sina.py +8 -6
  118. akshare/futures_derivative/futures_index_sina.py +25 -13
  119. akshare/fx/cons.py +12 -7
  120. akshare/fx/fx_c_swap_cm.py +62 -0
  121. akshare/fx/fx_quote.py +3 -2
  122. akshare/fx/fx_quote_baidu.py +2 -1
  123. akshare/hf/__init__.py +1 -1
  124. akshare/hf/hf_sp500.py +8 -7
  125. akshare/index/cons.py +132 -28
  126. akshare/index/index_cni.py +7 -7
  127. akshare/index/index_cons.py +2 -2
  128. akshare/index/index_csindex.py +68 -0
  129. akshare/index/index_cx.py +20 -20
  130. akshare/index/index_drewry.py +17 -16
  131. akshare/index/index_eri.py +1 -0
  132. akshare/index/index_global_em.py +167 -0
  133. akshare/index/index_global_sina.py +82 -0
  134. akshare/index/index_kq_fz.py +17 -14
  135. akshare/index/index_kq_ss.py +1 -0
  136. akshare/index/index_option_qvix.py +351 -16
  137. akshare/index/index_research_sw.py +21 -21
  138. akshare/index/index_spot.py +9 -5
  139. akshare/index/index_stock_hk.py +5 -9
  140. akshare/index/index_stock_zh.py +111 -24
  141. akshare/index/index_stock_zh_csindex.py +3 -367
  142. akshare/index/index_sugar.py +18 -4
  143. akshare/index/index_sw.py +10 -2
  144. akshare/index/index_yw.py +53 -75
  145. akshare/index/index_zh_em.py +15 -82
  146. akshare/interest_rate/interbank_rate_em.py +0 -1
  147. akshare/movie/jm.js +0 -1
  148. akshare/news/__init__.py +1 -1
  149. akshare/news/news_baidu.py +395 -222
  150. akshare/news/news_stock.py +49 -16
  151. akshare/option/cons.py +2 -2
  152. akshare/option/option_commodity.py +341 -220
  153. akshare/option/option_commodity_sina.py +22 -26
  154. akshare/option/option_contract_info_ctp.py +63 -0
  155. akshare/option/option_current_sse.py +61 -0
  156. akshare/option/option_current_szse.py +84 -0
  157. akshare/option/option_czce.py +37 -9
  158. akshare/option/option_daily_stats_sse_szse.py +0 -1
  159. akshare/option/option_em.py +4 -8
  160. akshare/option/option_finance.py +60 -12
  161. akshare/option/option_finance_sina.py +7 -7
  162. akshare/option/option_lhb_em.py +0 -1
  163. akshare/option/option_margin.py +62 -0
  164. akshare/option/option_premium_analysis_em.py +58 -53
  165. akshare/option/option_risk_analysis_em.py +11 -8
  166. akshare/option/option_risk_indicator_sse.py +3 -4
  167. akshare/option/option_value_analysis_em.py +62 -55
  168. akshare/other/__init__.py +1 -1
  169. akshare/pro/__init__.py +0 -1
  170. akshare/pro/client.py +6 -4
  171. akshare/pro/cons.py +3 -2
  172. akshare/pro/data_pro.py +6 -5
  173. akshare/qdii/__init__.py +0 -0
  174. akshare/qdii/qdii_jsl.py +233 -0
  175. akshare/qhkc/__init__.py +1 -6
  176. akshare/qhkc/qhkc_api.py +64 -22
  177. akshare/qhkc_web/__init__.py +1 -6
  178. akshare/qhkc_web/qhkc_fund.py +10 -6
  179. akshare/qhkc_web/qhkc_index.py +28 -14
  180. akshare/qhkc_web/qhkc_tool.py +62 -59
  181. akshare/rate/__init__.py +1 -1
  182. akshare/rate/repo_rate.py +36 -32
  183. akshare/reits/__init__.py +1 -1
  184. akshare/reits/reits_basic.py +149 -13
  185. akshare/request.py +117 -0
  186. akshare/spot/__init__.py +1 -1
  187. akshare/spot/spot_hog_soozhu.py +165 -3
  188. akshare/spot/spot_sge.py +70 -9
  189. akshare/stock/cons.py +60 -23
  190. akshare/stock/stock_allotment_cninfo.py +8 -8
  191. akshare/stock/stock_ask_bid_em.py +3 -78
  192. akshare/stock/stock_board_concept_em.py +160 -35
  193. akshare/stock/stock_board_industry_em.py +163 -70
  194. akshare/stock/stock_dividend_cninfo.py +31 -17
  195. akshare/stock/stock_dzjy_em.py +347 -260
  196. akshare/stock/stock_fund_em.py +72 -64
  197. akshare/stock/stock_fund_hold.py +1 -2
  198. akshare/stock/stock_gsrl_em.py +1 -0
  199. akshare/stock/stock_hk_comparison_em.py +175 -0
  200. akshare/stock/stock_hk_famous.py +4 -5
  201. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  202. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  203. akshare/stock/stock_hk_sina.py +84 -36
  204. akshare/stock/stock_hold_control_cninfo.py +82 -0
  205. akshare/stock/stock_hold_control_em.py +0 -2
  206. akshare/stock/stock_hot_rank_em.py +4 -1
  207. akshare/stock/stock_hot_search_baidu.py +32 -19
  208. akshare/stock/stock_hot_up_em.py +4 -1
  209. akshare/stock/stock_hsgt_em.py +155 -0
  210. akshare/stock/stock_industry.py +1 -0
  211. akshare/stock/stock_industry_cninfo.py +1 -2
  212. akshare/stock/stock_info.py +6 -4
  213. akshare/stock/stock_info_em.py +17 -11
  214. akshare/stock/stock_intraday_em.py +4 -78
  215. akshare/stock/stock_intraday_sina.py +2 -2
  216. akshare/stock/stock_news_cx.py +39 -0
  217. akshare/stock/stock_profile_cninfo.py +7 -7
  218. akshare/stock/stock_profile_em.py +302 -0
  219. akshare/stock/stock_rank_forecast.py +6 -5
  220. akshare/stock/stock_repurchase_em.py +7 -2
  221. akshare/stock/stock_share_changes_cninfo.py +7 -5
  222. akshare/stock/stock_share_hold.py +24 -20
  223. akshare/stock/stock_stop.py +6 -6
  224. akshare/stock/stock_summary.py +153 -417
  225. akshare/stock/stock_us_famous.py +5 -6
  226. akshare/stock/stock_us_js.py +3 -2
  227. akshare/stock/stock_us_pink.py +38 -27
  228. akshare/stock/stock_us_sina.py +7 -3
  229. akshare/stock/stock_weibo_nlp.py +18 -20
  230. akshare/stock/stock_xq.py +24 -22
  231. akshare/stock/stock_zh_a_sina.py +8 -5
  232. akshare/stock/stock_zh_a_special.py +240 -243
  233. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  234. akshare/stock/stock_zh_ah_tx.py +23 -26
  235. akshare/stock/stock_zh_b_sina.py +2 -2
  236. akshare/stock/stock_zh_comparison_em.py +250 -0
  237. akshare/stock/stock_zh_kcb_sina.py +67 -64
  238. akshare/stock_a/__init__.py +0 -0
  239. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  240. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  241. akshare/stock_a/stock_zh_a_spot.py +212 -0
  242. akshare/stock_feature/cons.py +1 -0
  243. akshare/stock_feature/stock_a_indicator.py +9 -54
  244. akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
  245. akshare/stock_feature/stock_account_em.py +0 -1
  246. akshare/stock_feature/stock_all_pb.py +2 -1
  247. akshare/stock_feature/stock_analyst_em.py +36 -30
  248. akshare/stock_feature/stock_board_concept_ths.py +328 -0
  249. akshare/stock_feature/stock_board_industry_ths.py +57 -2
  250. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  251. akshare/stock_feature/stock_classify_sina.py +3 -6
  252. akshare/stock_feature/stock_comment_em.py +81 -144
  253. akshare/stock_feature/stock_congestion_lg.py +2 -1
  254. akshare/stock_feature/stock_cyq_em.py +5 -11
  255. akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
  256. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  257. akshare/stock_feature/stock_ebs_lg.py +5 -4
  258. akshare/stock_feature/stock_esg_sina.py +29 -7
  259. akshare/stock_feature/stock_fhps_em.py +2 -1
  260. akshare/stock_feature/stock_fhps_ths.py +15 -7
  261. akshare/stock_feature/stock_fund_flow.py +30 -22
  262. akshare/stock_feature/stock_gddh_em.py +19 -11
  263. akshare/stock_feature/stock_gdfx_em.py +226 -113
  264. akshare/stock_feature/stock_gdhs.py +75 -50
  265. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  266. akshare/stock_feature/stock_gpzy_em.py +78 -46
  267. akshare/stock_feature/stock_gxl_lg.py +3 -2
  268. akshare/stock_feature/stock_hist_em.py +137 -234
  269. akshare/stock_feature/stock_hist_tx.py +13 -10
  270. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  271. akshare/stock_feature/stock_hot_xq.py +4 -6
  272. akshare/stock_feature/stock_hsgt_em.py +269 -97
  273. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  274. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  275. akshare/stock_feature/stock_info.py +7 -80
  276. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  277. akshare/stock_feature/stock_jgdy_em.py +43 -40
  278. akshare/stock_feature/stock_lhb_em.py +119 -3
  279. akshare/stock_feature/stock_margin_em.py +0 -1
  280. akshare/stock_feature/stock_margin_sse.py +0 -2
  281. akshare/stock_feature/stock_pankou_em.py +71 -35
  282. akshare/stock_feature/stock_qsjy_em.py +13 -4
  283. akshare/stock_feature/stock_report_em.py +151 -7
  284. akshare/stock_feature/stock_research_report_em.py +55 -20
  285. akshare/stock_feature/stock_sy_em.py +20 -15
  286. akshare/stock_feature/stock_technology_ths.py +122 -77
  287. akshare/stock_feature/stock_tfp_em.py +2 -1
  288. akshare/stock_feature/stock_three_report_em.py +21 -5
  289. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  290. akshare/stock_feature/stock_value_em.py +83 -0
  291. akshare/stock_feature/stock_yjbb_em.py +58 -32
  292. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  293. akshare/stock_feature/stock_yjyg_em.py +1 -1
  294. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  295. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  296. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  297. akshare/stock_feature/stock_ztb_em.py +39 -24
  298. akshare/stock_fundamental/__init__.py +1 -1
  299. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  300. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  301. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +60 -7
  302. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  303. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  304. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  305. akshare/stock_fundamental/stock_hold.py +26 -17
  306. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  307. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  308. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  309. akshare/stock_fundamental/stock_notice.py +12 -3
  310. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  311. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  312. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  313. akshare/stock_fundamental/stock_recommend.py +20 -4
  314. akshare/stock_fundamental/stock_zygc.py +5 -62
  315. akshare/utils/context.py +43 -0
  316. akshare/utils/demjson.py +2009 -1338
  317. akshare/utils/func.py +49 -2
  318. akshare/utils/multi_decrypt.py +53 -0
  319. akshare/utils/token_process.py +6 -5
  320. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
  321. akshare-1.17.99.dist-info/RECORD +409 -0
  322. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  323. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  324. tests/test_func.py +3 -5
  325. akshare/bond/bond_futures.py +0 -50
  326. akshare/bond/bond_investing.py +0 -139
  327. akshare/crypto/crypto_hist_investing.py +0 -249
  328. akshare/fund/fund_announcement.py +0 -56
  329. akshare/futures/futures_international.py +0 -170
  330. akshare/futures/futures_news_baidu.py +0 -54
  331. akshare/futures/inventory_data.py +0 -100
  332. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  333. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  334. akshare/futures_derivative/futures_index_volatility_nh.py +0 -53
  335. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  336. akshare/index/index_fear_greed_funddb.py +0 -78
  337. akshare/index/index_investing.py +0 -232
  338. akshare/sport/__init__.py +0 -6
  339. akshare/sport/sport_olympic.py +0 -27
  340. akshare/stock_feature/stock_wencai.py +0 -104
  341. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  342. akshare-1.14.49.dist-info/RECORD +0 -387
  343. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
@@ -5,6 +5,7 @@ Date: 2024/2/28 16:00
5
5
  Desc: 广州期货交易所-业务/服务-合约信息
6
6
  http://www.gfex.com.cn/gfex/hyxx/ywcs.shtml
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
@@ -16,45 +17,56 @@ def futures_contract_info_gfex() -> pd.DataFrame:
16
17
  :return: 交易参数汇总查询
17
18
  :rtype: pandas.DataFrame
18
19
  """
19
- url = f"http://www.gfex.com.cn/u/interfacesWebTtQueryContractInfo/loadList"
20
+ url = "http://www.gfex.com.cn/u/interfacesWebTtQueryContractInfo/loadList"
20
21
  params = {
21
- 'variety': '',
22
- 'trade_type': '0',
22
+ "variety": "",
23
+ "trade_type": "0",
23
24
  }
24
25
  headers = {
25
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
26
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
26
27
  }
27
28
  r = requests.post(url, params=params, headers=headers)
28
29
  data_json = r.json()
29
- temp_df = pd.DataFrame(data_json['data'])
30
- temp_df.rename(columns={
31
- 'tradeType': "-",
32
- 'variety': "品种",
33
- 'varietyOrder': "-",
34
- 'contractId': "合约代码",
35
- 'unit': "交易单位",
36
- 'tick': "最小变动单位",
37
- 'startTradeDate': "开始交易日",
38
- 'endTradeDate': "最后交易日",
39
- 'endDeliveryDate0': "最后交割日",
40
- }, inplace=True)
41
- temp_df['交易单位'] = pd.to_numeric(temp_df['交易单位'], errors="coerce")
42
- temp_df['最小变动单位'] = pd.to_numeric(temp_df['最小变动单位'], errors="coerce")
43
- temp_df['开始交易日'] = pd.to_datetime(temp_df['开始交易日'], format="%Y%m%d", errors="coerce").dt.date
44
- temp_df['最后交易日'] = pd.to_datetime(temp_df['最后交易日'], format="%Y%m%d", errors="coerce").dt.date
45
- temp_df['最后交割日'] = pd.to_datetime(temp_df['最后交割日'], format="%Y%m%d", errors="coerce").dt.date
46
- temp_df = temp_df[[
47
- "品种",
48
- "合约代码",
49
- "交易单位",
50
- "最小变动单位",
51
- "开始交易日",
52
- "最后交易日",
53
- "最后交割日",
54
- ]]
30
+ temp_df = pd.DataFrame(data_json["data"])
31
+ temp_df.rename(
32
+ columns={
33
+ "tradeType": "-",
34
+ "variety": "品种",
35
+ "varietyOrder": "-",
36
+ "contractId": "合约代码",
37
+ "unit": "交易单位",
38
+ "tick": "最小变动单位",
39
+ "startTradeDate": "开始交易日",
40
+ "endTradeDate": "最后交易日",
41
+ "endDeliveryDate0": "最后交割日",
42
+ },
43
+ inplace=True,
44
+ )
45
+ temp_df["交易单位"] = pd.to_numeric(temp_df["交易单位"], errors="coerce")
46
+ temp_df["最小变动单位"] = pd.to_numeric(temp_df["最小变动单位"], errors="coerce")
47
+ temp_df["开始交易日"] = pd.to_datetime(
48
+ temp_df["开始交易日"], format="%Y%m%d", errors="coerce"
49
+ ).dt.date
50
+ temp_df["最后交易日"] = pd.to_datetime(
51
+ temp_df["最后交易日"], format="%Y%m%d", errors="coerce"
52
+ ).dt.date
53
+ temp_df["最后交割日"] = pd.to_datetime(
54
+ temp_df["最后交割日"], format="%Y%m%d", errors="coerce"
55
+ ).dt.date
56
+ temp_df = temp_df[
57
+ [
58
+ "品种",
59
+ "合约代码",
60
+ "交易单位",
61
+ "最小变动单位",
62
+ "开始交易日",
63
+ "最后交易日",
64
+ "最后交割日",
65
+ ]
66
+ ]
55
67
  return temp_df
56
68
 
57
69
 
58
- if __name__ == '__main__':
70
+ if __name__ == "__main__":
59
71
  futures_contract_info_gfex_df = futures_contract_info_gfex()
60
72
  print(futures_contract_info_gfex_df)
@@ -1,15 +1,16 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/28 19:00
4
+ Date: 2024/11/30 19:00
5
5
  Desc: 上海国际能源交易中心-业务指南-交易参数汇总(期货)
6
6
  https://www.ine.cn/bourseService/summary/?name=currinstrumentprop
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
 
11
12
 
12
- def futures_contract_info_ine(date: str = "20240228") -> pd.DataFrame:
13
+ def futures_contract_info_ine(date: str = "20241129") -> pd.DataFrame:
13
14
  """
14
15
  上海国际能源交易中心-业务指南-交易参数汇总(期货)
15
16
  https://www.ine.cn/bourseService/summary/?name=currinstrumentprop
@@ -18,43 +19,51 @@ def futures_contract_info_ine(date: str = "20240228") -> pd.DataFrame:
18
19
  :return: 交易参数汇总查询
19
20
  :rtype: pandas.DataFrame
20
21
  """
21
- url = f"https://www.ine.cn/data/instrument/ContractBaseInfo{date}.dat"
22
- params = {
23
- "rnd": "0.8312696798757147"
24
- }
22
+ url = f"https://www.ine.cn/data/busiparamdata/future/ContractBaseInfo{date}.dat"
23
+ params = {"rnd": "0.8312696798757147"}
25
24
  headers = {
26
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
25
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
26
+ "Chrome/119.0.0.0 Safari/537.36"
27
27
  }
28
28
  r = requests.get(url, params=params, headers=headers)
29
29
  data_json = r.json()
30
- temp_df = pd.DataFrame(data_json['ContractBaseInfo'])
31
- temp_df.rename(columns={
32
- 'BASISPRICE': "挂牌基准价",
33
- 'ENDDELIVDATE': "最后交割日",
34
- 'EXPIREDATE': "到期日",
35
- 'INSTRUMENTID': "合约代码",
36
- 'OPENDATE': "上市日",
37
- 'STARTDELIVDATE': "开始交割日",
38
- 'TRADINGDAY': "交易日",
39
- }, inplace=True)
40
- temp_df = temp_df[[
41
- "合约代码",
42
- "上市日",
43
- "到期日",
44
- "开始交割日",
45
- "最后交割日",
46
- "挂牌基准价",
47
- "交易日",
48
- ]]
49
- temp_df['上市日'] = pd.to_datetime(temp_df['上市日'], errors="coerce").dt.date
50
- temp_df['到期日'] = pd.to_datetime(temp_df['到期日'], errors="coerce").dt.date
51
- temp_df['开始交割日'] = pd.to_datetime(temp_df['开始交割日'], errors="coerce").dt.date
52
- temp_df['最后交割日'] = pd.to_datetime(temp_df['最后交割日'], errors="coerce").dt.date
53
- temp_df['交易日'] = pd.to_datetime(temp_df['交易日'], errors="coerce").dt.date
54
- temp_df['挂牌基准价'] = pd.to_numeric(temp_df['挂牌基准价'], errors="coerce")
30
+ temp_df = pd.DataFrame(data_json["ContractBaseInfo"])
31
+ temp_df.rename(
32
+ columns={
33
+ "BASISPRICE": "挂牌基准价",
34
+ "ENDDELIVDATE": "最后交割日",
35
+ "EXPIREDATE": "到期日",
36
+ "INSTRUMENTID": "合约代码",
37
+ "OPENDATE": "上市日",
38
+ "STARTDELIVDATE": "开始交割日",
39
+ "TRADINGDAY": "交易日",
40
+ },
41
+ inplace=True,
42
+ )
43
+ temp_df = temp_df[
44
+ [
45
+ "合约代码",
46
+ "上市日",
47
+ "到期日",
48
+ "开始交割日",
49
+ "最后交割日",
50
+ "挂牌基准价",
51
+ "交易日",
52
+ ]
53
+ ]
54
+ temp_df["上市日"] = pd.to_datetime(temp_df["上市日"], errors="coerce").dt.date
55
+ temp_df["到期日"] = pd.to_datetime(temp_df["到期日"], errors="coerce").dt.date
56
+ temp_df["开始交割日"] = pd.to_datetime(
57
+ temp_df["开始交割日"], errors="coerce"
58
+ ).dt.date
59
+ temp_df["最后交割日"] = pd.to_datetime(
60
+ temp_df["最后交割日"], errors="coerce"
61
+ ).dt.date
62
+ temp_df["交易日"] = pd.to_datetime(temp_df["交易日"], errors="coerce").dt.date
63
+ temp_df["挂牌基准价"] = pd.to_numeric(temp_df["挂牌基准价"], errors="coerce")
55
64
  return temp_df
56
65
 
57
66
 
58
- if __name__ == '__main__':
59
- futures_contract_info_ine_df = futures_contract_info_ine(date="20240227")
67
+ if __name__ == "__main__":
68
+ futures_contract_info_ine_df = futures_contract_info_ine(date="20241129")
60
69
  print(futures_contract_info_ine_df)
@@ -19,7 +19,7 @@ def futures_contract_info_shfe(date: str = "20240513") -> pd.DataFrame:
19
19
  :return: 交易参数汇总查询
20
20
  :rtype: pandas.DataFrame
21
21
  """
22
- url = f"https://tsite.shfe.com.cn/data/instrument/ContractBaseInfo{date}.dat"
22
+ url = f"https://www.shfe.com.cn/data/busiparamdata/future/ContractBaseInfo{date}.dat"
23
23
  headers = {
24
24
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
25
25
  "Chrome/119.0.0.0 Safari/537.36"
@@ -36,7 +36,6 @@ def futures_contract_info_shfe(date: str = "20240513") -> pd.DataFrame:
36
36
  "OPENDATE": "上市日",
37
37
  "STARTDELIVDATE": "开始交割日",
38
38
  "TRADINGDAY": "交易日",
39
- "UPDATE_DATE": "更新时间",
40
39
  },
41
40
  inplace=True,
42
41
  )
@@ -49,7 +48,6 @@ def futures_contract_info_shfe(date: str = "20240513") -> pd.DataFrame:
49
48
  "最后交割日",
50
49
  "挂牌基准价",
51
50
  "交易日",
52
- "更新时间",
53
51
  ]
54
52
  ]
55
53
  temp_df["上市日"] = pd.to_datetime(temp_df["上市日"], errors="coerce").dt.date
@@ -62,9 +60,10 @@ def futures_contract_info_shfe(date: str = "20240513") -> pd.DataFrame:
62
60
  ).dt.date
63
61
  temp_df["交易日"] = pd.to_datetime(temp_df["交易日"], errors="coerce").dt.date
64
62
  temp_df["挂牌基准价"] = pd.to_numeric(temp_df["挂牌基准价"], errors="coerce")
63
+ temp_df["更新时间"] = data_json['update_date']
65
64
  return temp_df
66
65
 
67
66
 
68
67
  if __name__ == "__main__":
69
- futures_contract_info_shfe_df = futures_contract_info_shfe(date="20240513")
68
+ futures_contract_info_shfe_df = futures_contract_info_shfe(date="20250611")
70
69
  print(futures_contract_info_shfe_df)
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/6/3 15:30
4
+ Date: 2025/3/5 18:00
5
5
  Desc: 新浪财经-期货-成交持仓
6
6
  https://vip.stock.finance.sina.com.cn/q/view/vFutures_Positions_cjcc.php
7
7
  """
@@ -13,7 +13,7 @@ import requests
13
13
 
14
14
 
15
15
  def futures_hold_pos_sina(
16
- symbol: str = "成交量", contract: str = "IC2403", date: str = "20240223"
16
+ symbol: str = "成交量", contract: str = "OI2501", date: str = "20240223"
17
17
  ) -> pd.DataFrame:
18
18
  """
19
19
  新浪财经-期货-成交持仓
@@ -29,7 +29,7 @@ def futures_hold_pos_sina(
29
29
  """
30
30
  date = "-".join([date[:4], date[4:6], date[6:]])
31
31
  url = "https://vip.stock.finance.sina.com.cn/q/view/vFutures_Positions_cjcc.php"
32
- params = {"symbol": contract, "date": date}
32
+ params = {"t_breed": contract, "t_date": date}
33
33
  r = requests.get(url, params=params)
34
34
  if symbol == "成交量":
35
35
  temp_df = pd.read_html(StringIO(r.text))[2].iloc[:-1, :]
@@ -55,20 +55,22 @@ def futures_hold_pos_sina(
55
55
  temp_df["比上交易增减"], errors="coerce"
56
56
  )
57
57
  return temp_df
58
+ else:
59
+ raise ValueError("请输入正确的 symbol 参数")
58
60
 
59
61
 
60
62
  if __name__ == "__main__":
61
63
  futures_hold_pos_sina_df = futures_hold_pos_sina(
62
- symbol="成交量", contract="PTA2407", date="20240531"
64
+ symbol="成交量", contract="IC2403", date="20240203"
63
65
  )
64
66
  print(futures_hold_pos_sina_df)
65
67
 
66
68
  futures_hold_pos_sina_df = futures_hold_pos_sina(
67
- symbol="多单持仓", contract="IC2403", date="20240223"
69
+ symbol="多单持仓", contract="OI2501", date="20241016"
68
70
  )
69
71
  print(futures_hold_pos_sina_df)
70
72
 
71
73
  futures_hold_pos_sina_df = futures_hold_pos_sina(
72
- symbol="空单持仓", contract="IC2403", date="20240223"
74
+ symbol="空单持仓", contract="OI2501", date="20241016"
73
75
  )
74
76
  print(futures_hold_pos_sina_df)
@@ -5,6 +5,7 @@ Date: 2024/3/1 23:00
5
5
  Desc: 新浪财经-期货的主力合约数据
6
6
  https://finance.sina.com.cn/futuremarket/index.shtml
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -30,7 +31,9 @@ def zh_subscribe_exchange_symbol(symbol: str = "dce") -> pd.DataFrame:
30
31
  r = requests.get(zh_subscribe_exchange_symbol_url)
31
32
  r.encoding = "gb2312"
32
33
  data_text = r.text
33
- data_json = demjson.decode(data_text[data_text.find("{"): data_text.find("};") + 1])
34
+ data_json = demjson.decode(
35
+ data_text[data_text.find("{") : data_text.find("};") + 1]
36
+ )
34
37
  if symbol == "czce":
35
38
  data_json["czce"].remove("郑州商品交易所")
36
39
  return pd.DataFrame(data_json["czce"])
@@ -68,14 +71,14 @@ def match_main_contract(symbol: str = "shfe") -> pd.DataFrame:
68
71
  data_df = pd.DataFrame(data_json)
69
72
  try:
70
73
  main_contract = data_df[
71
- data_df["name"].str.contains("连续")
72
- & data_df["symbol"]
73
- .str.extract(r"([\w])(\d)")
74
- .iloc[:, 1]
75
- .str.contains("0")
76
- ].iloc[0, :3]
74
+ data_df["name"].str.contains("连续")
75
+ & data_df["symbol"]
76
+ .str.extract(r"([\w])(\d)")
77
+ .iloc[:, 1]
78
+ .str.contains("0")
79
+ ].iloc[0, :3]
77
80
  subscribe_list.append(main_contract)
78
- except:
81
+ except: # noqa: E722
79
82
  # print(item, "无主力连续合约")
80
83
  continue
81
84
  # print("主力连续合约获取成功")
@@ -98,9 +101,9 @@ def futures_display_main_sina() -> pd.DataFrame:
98
101
 
99
102
 
100
103
  def futures_main_sina(
101
- symbol: str = "V0",
102
- start_date: str = "19900101",
103
- end_date: str = "22220101",
104
+ symbol: str = "V0",
105
+ start_date: str = "19900101",
106
+ end_date: str = "22220101",
104
107
  ) -> pd.DataFrame:
105
108
  """
106
109
  新浪财经-期货-主力连续日数据
@@ -119,9 +122,18 @@ def futures_main_sina(
119
122
  url = f"https://stock2.finance.sina.com.cn/futures/api/jsonp.php/var%20_{symbol}{trade_date}=/InnerFuturesNewService.getDailyKLine?symbol={symbol}&_={trade_date}"
120
123
  r = requests.get(url)
121
124
  data_text = r.text
122
- data_json = data_text[data_text.find("([") + 1: data_text.rfind("])") + 1]
125
+ data_json = data_text[data_text.find("([") + 1 : data_text.rfind("])") + 1]
123
126
  temp_df = pd.read_json(StringIO(data_json))
124
- temp_df.columns = ["日期", "开盘价", "最高价", "最低价", "收盘价", "成交量", "持仓量", "动态结算价"]
127
+ temp_df.columns = [
128
+ "日期",
129
+ "开盘价",
130
+ "最高价",
131
+ "最低价",
132
+ "收盘价",
133
+ "成交量",
134
+ "持仓量",
135
+ "动态结算价",
136
+ ]
125
137
  temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
126
138
  temp_df.set_index(keys=["日期"], inplace=True)
127
139
  temp_df.index = pd.to_datetime(temp_df.index)
akshare/fx/cons.py CHANGED
@@ -4,15 +4,20 @@
4
4
  Date: 2019/10/20 10:58
5
5
  Desc: 外汇配置文件
6
6
  """
7
+
7
8
  # headers
8
9
  SHORT_HEADERS = {
9
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36'
10
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.91 Safari/537.36"
10
11
  }
11
12
  # url
12
- FX_SPOT_URL = "http://www.chinamoney.com.cn/r/cms/www/chinamoney/data/fx/rfx-sp-quot.json"
13
- FX_SWAP_URL = "http://www.chinamoney.com.cn/r/cms/www/chinamoney/data/fx/rfx-sw-quot.json"
14
- FX_PAIR_URL = "http://www.chinamoney.com.cn/r/cms/www/chinamoney/data/fx/cpair-quot.json"
13
+ FX_SPOT_URL = (
14
+ "http://www.chinamoney.com.cn/r/cms/www/chinamoney/data/fx/rfx-sp-quot.json"
15
+ )
16
+ FX_SWAP_URL = (
17
+ "http://www.chinamoney.com.cn/r/cms/www/chinamoney/data/fx/rfx-sw-quot.json"
18
+ )
19
+ FX_PAIR_URL = (
20
+ "http://www.chinamoney.com.cn/r/cms/www/chinamoney/data/fx/cpair-quot.json"
21
+ )
15
22
  # payload
16
- SPOT_PAYLOAD = {
17
- "t": {}
18
- }
23
+ SPOT_PAYLOAD = {"t": {}}
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding:utf-8 -*-
3
+ """
4
+ Date: 2025/9/9 14:57
5
+ Desc: 中国外汇交易中心暨全国银行间同业拆借中心-基准-外汇市场-外汇掉期曲线-外汇掉漆 C-Swap 定盘曲线
6
+ https://www.chinamoney.org.cn/chinese/bkcurvfsw
7
+ """
8
+
9
+ import ssl
10
+
11
+ import pandas as pd
12
+ import requests
13
+ from requests.adapters import HTTPAdapter
14
+
15
+
16
+ class LegacySSLAdapter(HTTPAdapter):
17
+ def init_poolmanager(self, *args, **kwargs):
18
+ context = ssl.create_default_context()
19
+ # 允许不安全的 legacy renegotiation
20
+ context.options |= ssl.OP_LEGACY_SERVER_CONNECT
21
+ kwargs['ssl_context'] = context
22
+ return super().init_poolmanager(*args, **kwargs)
23
+
24
+
25
+ def fx_c_swap_cm():
26
+ """
27
+ 中国外汇交易中心暨全国银行间同业拆借中心-基准-外汇市场-外汇掉期曲线-外汇掉期 C-Swap 定盘曲线
28
+ https://www.chinamoney.org.cn/chinese/bkcurvfsw
29
+ :return: 外汇掉期 C-Swap 定盘曲线
30
+ :rtype: pandas.DataFrame
31
+ """
32
+ session = requests.Session()
33
+ session.mount(prefix='https://', adapter=LegacySSLAdapter())
34
+ url = "https://www.chinamoney.org.cn/r/cms/www/chinamoney/data/fx/fx-c-sw-curv-USD.CNY.json"
35
+ payload = {
36
+ "t": "1757402201554",
37
+ }
38
+ r = session.post(url, data=payload)
39
+ data_json = r.json()
40
+ temp_df = pd.DataFrame(data_json['records'])
41
+ temp_df.rename(columns={
42
+ "curveTime": "日期时间",
43
+ "tenor": "期限品种",
44
+ "swapPnt": "掉期点(Pips)",
45
+ "dataSource": "掉期点数据源",
46
+ "swapAllPrc": "全价汇率",
47
+ }, inplace=True)
48
+ temp_df = temp_df[[
49
+ "日期时间",
50
+ "期限品种",
51
+ "掉期点(Pips)",
52
+ "掉期点数据源",
53
+ "全价汇率",
54
+ ]]
55
+ temp_df["掉期点(Pips)"] = pd.to_numeric(temp_df["掉期点(Pips)"], errors='coerce')
56
+ temp_df["全价汇率"] = pd.to_numeric(temp_df["全价汇率"], errors='coerce')
57
+ return temp_df
58
+
59
+
60
+ if __name__ == '__main__':
61
+ fx_c_swap_cm_df = fx_c_swap_cm()
62
+ print(fx_c_swap_cm_df)
akshare/fx/fx_quote.py CHANGED
@@ -7,6 +7,7 @@ Desc: 中国外汇交易中心暨全国银行间同业拆借中心-市场数据-
7
7
  人民币外汇远掉报价: fx_swap_quote
8
8
  外币对即期报价: fx_pair_quote
9
9
  """
10
+
10
11
  import time
11
12
 
12
13
  import pandas as pd
@@ -49,7 +50,7 @@ def fx_swap_quote() -> pd.DataFrame:
49
50
  中国外汇交易中心暨全国银行间同业拆借中心-市场数据-市场行情-债券市场行情-人民币外汇远掉报价
50
51
  https://www.chinamoney.com.cn/chinese/index.html
51
52
  :return: 人民币外汇远掉报价
52
- :return: pandas.DataFrame
53
+ :rtype: pandas.DataFrame
53
54
  """
54
55
  payload = {"t": str(int(round(time.time() * 1000)))}
55
56
  res = requests.post(FX_SWAP_URL, data=payload, headers=SHORT_HEADERS)
@@ -82,7 +83,7 @@ def fx_pair_quote() -> pd.DataFrame:
82
83
  中国外汇交易中心暨全国银行间同业拆借中心-市场数据-市场行情-债券市场行情-外币对即期报价
83
84
  http://www.chinamoney.com.cn/chinese/mkdatapfx/
84
85
  :return: 外币对即期报价
85
- :return: pandas.DataFrame
86
+ :rtype: pandas.DataFrame
86
87
  """
87
88
  payload = {"t": str(int(round(time.time() * 1000)))}
88
89
  res = requests.post(FX_PAIR_URL, data=payload, headers=SHORT_HEADERS)
@@ -5,6 +5,7 @@ Date: 2023/3/5 18:12
5
5
  Desc: 百度股市通-外汇-行情榜单
6
6
  https://gushitong.baidu.com/top/foreign-common-%E5%B8%B8%E7%94%A8
7
7
  """
8
+
8
9
  import http.client
9
10
  import json
10
11
  import urllib
@@ -59,7 +60,7 @@ def fx_quote_baidu(symbol: str = "人民币") -> pd.DataFrame:
59
60
  big_df["涨跌幅"] = pd.to_numeric(big_df["涨跌幅"].str.strip("%")) / 100
60
61
  out_df = pd.concat([out_df, big_df], ignore_index=True)
61
62
  num = num + 20
62
- except:
63
+ except: # noqa: E722
63
64
  break
64
65
  return out_df
65
66
 
akshare/hf/__init__.py CHANGED
@@ -2,5 +2,5 @@
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
4
  Date: 2020/4/21 15:33
5
- Desc:
5
+ Desc:
6
6
  """
akshare/hf/hf_sp500.py CHANGED
@@ -7,6 +7,7 @@ https://github.com/FutureSharks/financial-data
7
7
  long history data for S&P 500 index daily
8
8
  http://www.econ.yale.edu/~shiller/data.htm
9
9
  """
10
+
10
11
  import pandas as pd
11
12
 
12
13
 
@@ -21,15 +22,15 @@ def hf_sp_500(year: str = "2017") -> pd.DataFrame:
21
22
  url = f"https://github.com/FutureSharks/financial-data/raw/master/pyfinancialdata/data/stocks/histdata/SPXUSD/DAT_ASCII_SPXUSD_M1_{year}.csv"
22
23
  temp_df = pd.read_table(url, header=None, sep=";")
23
24
  temp_df.columns = ["date", "open", "high", "low", "close", "price"]
24
- temp_df['date'] = pd.to_datetime(temp_df['date']).dt.date
25
- temp_df['open'] = pd.to_numeric(temp_df['open'])
26
- temp_df['high'] = pd.to_numeric(temp_df['high'])
27
- temp_df['low'] = pd.to_numeric(temp_df['low'])
28
- temp_df['close'] = pd.to_numeric(temp_df['close'])
29
- temp_df['price'] = pd.to_numeric(temp_df['price'])
25
+ temp_df["date"] = pd.to_datetime(temp_df["date"]).dt.date
26
+ temp_df["open"] = pd.to_numeric(temp_df["open"])
27
+ temp_df["high"] = pd.to_numeric(temp_df["high"])
28
+ temp_df["low"] = pd.to_numeric(temp_df["low"])
29
+ temp_df["close"] = pd.to_numeric(temp_df["close"])
30
+ temp_df["price"] = pd.to_numeric(temp_df["price"])
30
31
  return temp_df
31
32
 
32
33
 
33
- if __name__ == '__main__':
34
+ if __name__ == "__main__":
34
35
  hf_sp_500_df = hf_sp_500(year="2017")
35
36
  print(hf_sp_500_df)