stock_dxsyl_em.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. """
  4. Date: 2024/2/1 16:20
  5. Desc: 东方财富网-数据中心-新股数据-打新收益率
  6. 东方财富网-数据中心-新股申购-打新收益率
  7. https://data.eastmoney.com/xg/xg/dxsyl.html
  8. 东方财富网-数据中心-新股数据-新股申购与中签查询
  9. https://data.eastmoney.com/xg/xg/default_2.html
  10. """
  11. import pandas as pd
  12. import requests
  13. def stock_xgsglb_em(symbol: str = "全部股票") -> pd.DataFrame:
  14. """
  15. 新股申购与中签查询
  16. https://data.eastmoney.com/xg/xg/default_2.html
  17. :param symbol: choice of {"全部股票", "沪市主板", "科创板", "深市主板", "创业板", "北交所"}
  18. :type symbol: str
  19. :return: 新股申购与中签数据
  20. :rtype: pandas.DataFrame
  21. """
  22. market_map = {
  23. "全部股票": """(APPLY_DATE>'2010-01-01')""",
  24. "沪市主板": """(APPLY_DATE>'2010-01-01')(SECURITY_TYPE_CODE in ("058001001","058001008"))(TRADE_MARKET_CODE in ("069001001001","069001001003","069001001006"))""",
  25. "科创板": """(APPLY_DATE>'2010-01-01')(SECURITY_TYPE_CODE in ("058001001","058001008"))(TRADE_MARKET_CODE="069001001006")""",
  26. "深市主板": """(APPLY_DATE>'2010-01-01')(SECURITY_TYPE_CODE="058001001")(TRADE_MARKET_CODE in ("069001002001","069001002002","069001002003","069001002005"))""",
  27. "创业板": """(APPLY_DATE>'2010-01-01')(SECURITY_TYPE_CODE="058001001")(TRADE_MARKET_CODE="069001002002")""",
  28. }
  29. url = "http://datacenter-web.eastmoney.com/api/data/v1/get"
  30. params = {
  31. "sortColumns": "APPLY_DATE,SECURITY_CODE",
  32. "sortTypes": "-1,-1",
  33. "pageSize": "50",
  34. "pageNumber": "1",
  35. "reportName": "RPTA_APP_IPOAPPLY",
  36. "columns": "SECURITY_CODE,SECURITY_NAME,TRADE_MARKET_CODE,APPLY_CODE,TRADE_MARKET,MARKET_TYPE,ORG_TYPE,ISSUE_NUM,ONLINE_ISSUE_NUM,OFFLINE_PLACING_NUM,TOP_APPLY_MARKETCAP,PREDICT_ONFUND_UPPER,ONLINE_APPLY_UPPER,PREDICT_ONAPPLY_UPPER,ISSUE_PRICE,LATELY_PRICE,CLOSE_PRICE,APPLY_DATE,BALLOT_NUM_DATE,BALLOT_PAY_DATE,LISTING_DATE,AFTER_ISSUE_PE,ONLINE_ISSUE_LWR,INITIAL_MULTIPLE,INDUSTRY_PE_NEW,OFFLINE_EP_OBJECT,CONTINUOUS_1WORD_NUM,TOTAL_CHANGE,PROFIT,LIMIT_UP_PRICE,INFO_CODE,OPEN_PRICE,LD_OPEN_PREMIUM,LD_CLOSE_CHANGE,TURNOVERRATE,LD_HIGH_CHANG,LD_AVERAGE_PRICE,OPEN_DATE,OPEN_AVERAGE_PRICE,PREDICT_PE,PREDICT_ISSUE_PRICE2,PREDICT_ISSUE_PRICE,PREDICT_ISSUE_PRICE1,PREDICT_ISSUE_PE,PREDICT_PE_THREE,ONLINE_APPLY_PRICE,MAIN_BUSINESS",
  37. "filter": market_map[symbol],
  38. "source": "WEB",
  39. "client": "WEB",
  40. }
  41. r = requests.get(url, params=params)
  42. data_json = r.json()
  43. big_df = pd.DataFrame()
  44. temp_df = pd.DataFrame(data_json["result"]["data"])
  45. big_df = pd.concat([big_df, temp_df], ignore_index=True)
  46. big_df.rename(
  47. columns={
  48. "SECURITY_CODE": "股票代码",
  49. "SECURITY_NAME": "股票简称",
  50. "TRADE_MARKET_CODE": "-",
  51. "APPLY_CODE": "申购代码",
  52. "TRADE_MARKET": "-",
  53. "MARKET_TYPE": "-",
  54. "ORG_TYPE": "-",
  55. "ISSUE_NUM": "发行总数",
  56. "ONLINE_ISSUE_NUM": "网上发行",
  57. "OFFLINE_PLACING_NUM": "_",
  58. "TOP_APPLY_MARKETCAP": "顶格申购需配市值",
  59. "PREDICT_ONFUND_UPPER": "_",
  60. "ONLINE_APPLY_UPPER": "申购上限",
  61. "PREDICT_ONAPPLY_UPPER": "_",
  62. "ISSUE_PRICE": "发行价格",
  63. "LATELY_PRICE": "最新价",
  64. "CLOSE_PRICE": "首日收盘价",
  65. "APPLY_DATE": "申购日期",
  66. "BALLOT_NUM_DATE": "中签号公布日",
  67. "BALLOT_PAY_DATE": "中签缴款日期",
  68. "LISTING_DATE": "上市日期",
  69. "AFTER_ISSUE_PE": "发行市盈率",
  70. "ONLINE_ISSUE_LWR": "中签率",
  71. "INITIAL_MULTIPLE": "询价累计报价倍数",
  72. "INDUSTRY_PE_NEW": "行业市盈率",
  73. "OFFLINE_EP_OBJECT": "配售对象报价家数",
  74. "CONTINUOUS_1WORD_NUM": "连续一字板数量",
  75. "TOTAL_CHANGE": "涨幅",
  76. "PROFIT": "每中一签获利",
  77. "LIMIT_UP_PRICE": "_",
  78. "INFO_CODE": "_",
  79. "OPEN_PRICE": "_",
  80. "LD_OPEN_PREMIUM": "_",
  81. "LD_CLOSE_CHANGE": "_",
  82. "TURNOVERRATE": "_",
  83. "LD_HIGH_CHANG": "_",
  84. "LD_AVERAGE_PRICE": "_",
  85. "OPEN_DATE": "_",
  86. "OPEN_AVERAGE_PRICE": "_",
  87. "PREDICT_PE": "_",
  88. "PREDICT_ISSUE_PRICE2": "_",
  89. "PREDICT_ISSUE_PRICE": "_",
  90. "PREDICT_ISSUE_PRICE1": "_",
  91. "PREDICT_ISSUE_PE": "_",
  92. "PREDICT_PE_THREE": "_",
  93. "ONLINE_APPLY_PRICE": "_",
  94. "MAIN_BUSINESS": "_",
  95. "IS_REGISTRATION": "_",
  96. },
  97. inplace=True,
  98. )
  99. big_df = big_df[
  100. [
  101. "股票代码",
  102. "股票简称",
  103. "申购代码",
  104. "发行总数",
  105. "网上发行",
  106. "顶格申购需配市值",
  107. "申购上限",
  108. "发行价格",
  109. "最新价",
  110. "首日收盘价",
  111. "申购日期",
  112. "中签号公布日",
  113. "中签缴款日期",
  114. "上市日期",
  115. "发行市盈率",
  116. "行业市盈率",
  117. "中签率",
  118. "询价累计报价倍数",
  119. "配售对象报价家数",
  120. "连续一字板数量",
  121. "涨幅",
  122. "每中一签获利",
  123. ]
  124. ]
  125. big_df["申购日期"] = pd.to_datetime(big_df["申购日期"], errors="coerce").dt.date
  126. big_df["中签号公布日"] = pd.to_datetime(big_df["中签号公布日"]).dt.date
  127. big_df["中签缴款日期"] = pd.to_datetime(big_df["中签缴款日期"]).dt.date
  128. big_df["发行总数"] = pd.to_numeric(big_df["发行总数"], errors="coerce")
  129. big_df["网上发行"] = pd.to_numeric(big_df["网上发行"], errors="coerce")
  130. big_df["顶格申购需配市值"] = pd.to_numeric(big_df["顶格申购需配市值"], errors="coerce")
  131. big_df["申购上限"] = pd.to_numeric(big_df["申购上限"], errors="coerce")
  132. big_df["发行价格"] = pd.to_numeric(big_df["发行价格"], errors="coerce")
  133. big_df["最新价"] = pd.to_numeric(big_df["最新价"], errors="coerce")
  134. big_df["首日收盘价"] = pd.to_numeric(big_df["首日收盘价"], errors="coerce")
  135. big_df["发行市盈率"] = pd.to_numeric(big_df["发行市盈率"], errors="coerce")
  136. big_df["行业市盈率"] = pd.to_numeric(big_df["行业市盈率"], errors="coerce")
  137. big_df["中签率"] = pd.to_numeric(big_df["中签率"], errors="coerce")
  138. big_df["询价累计报价倍数"] = pd.to_numeric(big_df["询价累计报价倍数"], errors="coerce")
  139. big_df["配售对象报价家数"] = pd.to_numeric(big_df["配售对象报价家数"], errors="coerce")
  140. big_df["涨幅"] = pd.to_numeric(big_df["涨幅"], errors="coerce")
  141. big_df["每中一签获利"] = pd.to_numeric(big_df["每中一签获利"], errors="coerce")
  142. return big_df
  143. if __name__ == "__main__":
  144. #显示所有列
  145. pd.set_option('display.max_columns', None)
  146. #显示所有行
  147. pd.set_option('display.max_rows', None)
  148. #设置value的显示长度为100,默认为50
  149. pd.set_option('max_colwidth',100)
  150. stock_xgsglb_em_df = stock_xgsglb_em(symbol="全部股票")
  151. print(stock_xgsglb_em_df)