stock-tracker
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
symbol_market_map = {
|
||||
"EURCNYC": 120,
|
||||
"JPYZAR": 119,
|
||||
"NZDCNYC": 120,
|
||||
"CNYRUBC": 120,
|
||||
"AUDCNYC": 120,
|
||||
"JPYGBP": 119,
|
||||
"JPYSGD": 119,
|
||||
"JPYCNH": 133,
|
||||
"JPYAUD": 119,
|
||||
"USDBRL": 119,
|
||||
"JPYEUR": 119,
|
||||
"JPYTRY": 119,
|
||||
"JPYCAD": 119,
|
||||
"CHFZAR": 119,
|
||||
"JPYHKD": 119,
|
||||
"SEKEUR": 119,
|
||||
"JPYUSD": 119,
|
||||
"GBPCNYC": 120,
|
||||
"JPYNZD": 119,
|
||||
"CHFGBP": 119,
|
||||
"USDIDR": 119,
|
||||
"CHFSGD": 119,
|
||||
"USDPLN": 119,
|
||||
"CHFCNH": 133,
|
||||
"SEKUSD": 119,
|
||||
"CHFAUD": 119,
|
||||
"USDKRW": 119,
|
||||
"EURPLN": 119,
|
||||
"USDHUF": 119,
|
||||
"CHFCAD": 119,
|
||||
"USDTHB": 119,
|
||||
"CHFEUR": 119,
|
||||
"JPYCNYC": 120,
|
||||
"EURHUF": 119,
|
||||
"CHFHKD": 119,
|
||||
"SGDCNYC": 120,
|
||||
"CHFUSD": 119,
|
||||
"USDINR": 119,
|
||||
"USDCZK": 119,
|
||||
"CHFNZD": 119,
|
||||
"USDMXN": 119,
|
||||
"GBPPLN": 119,
|
||||
"USDZAR": 119,
|
||||
"JPYCHF": 119,
|
||||
"EURCZK": 119,
|
||||
"EURZAR": 119,
|
||||
"CADCNYC": 120,
|
||||
"NOKEUR": 119,
|
||||
"NZDGBP": 119,
|
||||
"NOKUSD": 119,
|
||||
"NZDSGD": 119,
|
||||
"USDGBP": 119,
|
||||
"HKDGBP": 119,
|
||||
"NZDCNH": 133,
|
||||
"NZDAUD": 119,
|
||||
"HKDSGD": 119,
|
||||
"CNYSARC": 120,
|
||||
"USDSGD": 119,
|
||||
"CNYAEDC": 120,
|
||||
"EURGBP": 119,
|
||||
"CADGBP": 119,
|
||||
"USDCNH": 133,
|
||||
"CNYTRYC": 120,
|
||||
"CADSGD": 119,
|
||||
"USDAUD": 119,
|
||||
"GBPZAR": 119,
|
||||
"EURSGD": 119,
|
||||
"HKDCNH": 133,
|
||||
"NZDCAD": 119,
|
||||
"CADCNH": 133,
|
||||
"HKDAUD": 119,
|
||||
"NZDEUR": 119,
|
||||
"EURCNH": 133,
|
||||
"EURAUD": 119,
|
||||
"NZDHKD": 119,
|
||||
"CADAUD": 119,
|
||||
"AUDGBP": 119,
|
||||
"USDDKK": 119,
|
||||
"HKDCAD": 119,
|
||||
"USDCAD": 119,
|
||||
"AUDSGD": 119,
|
||||
"USDTRY": 119,
|
||||
"EURTRY": 119,
|
||||
"USDEUR": 119,
|
||||
"NZDUSD": 119,
|
||||
"SGDGBP": 119,
|
||||
"USDHKD": 119,
|
||||
"AUDCNH": 133,
|
||||
"EURDKK": 119,
|
||||
"USDARS": 119,
|
||||
"USDSAR": 119,
|
||||
"TRYUSD": 119,
|
||||
"TRYEUR": 119,
|
||||
"SARUSD": 119,
|
||||
"INRUSD": 119,
|
||||
"HUFUSD": 119,
|
||||
"HUFEUR": 119,
|
||||
"HKDUSD": 119,
|
||||
"HKDEUR": 119,
|
||||
"HKDCNYC": 120,
|
||||
"EURCAD": 119,
|
||||
"DKKUSD": 119,
|
||||
"DKKEUR": 119,
|
||||
"CNYMOPC": 120,
|
||||
"CNHSGD": 133,
|
||||
"CNHGBP": 133,
|
||||
"CNHAUD": 133,
|
||||
"CADEUR": 119,
|
||||
"SGDCNH": 133,
|
||||
"EURHKD": 119,
|
||||
"CADHKD": 119,
|
||||
"USDCNYC": 120,
|
||||
"GBPSGD": 119,
|
||||
"EURUSD": 119,
|
||||
"SGDAUD": 119,
|
||||
"HKDNZD": 119,
|
||||
"USDNZD": 119,
|
||||
"GBPCNH": 133,
|
||||
"CADUSD": 119,
|
||||
"AUDCAD": 119,
|
||||
"CNYTHBC": 120,
|
||||
"CNHEUR": 133,
|
||||
"GBPAUD": 119,
|
||||
"AUDEUR": 119,
|
||||
"CADNZD": 119,
|
||||
"EURNZD": 119,
|
||||
"CNHCAD": 133,
|
||||
"AUDHKD": 119,
|
||||
"SGDCAD": 119,
|
||||
"AUDUSD": 119,
|
||||
"SGDEUR": 119,
|
||||
"CNHHKD": 133,
|
||||
"GBPCAD": 119,
|
||||
"CNHUSD": 133,
|
||||
"SGDHKD": 119,
|
||||
"GBPEUR": 119,
|
||||
"SGDUSD": 119,
|
||||
"AUDNZD": 119,
|
||||
"GBPHKD": 119,
|
||||
"GBPUSD": 119,
|
||||
"CNHNZD": 133,
|
||||
"CHFCNYC": 120,
|
||||
"SGDNZD": 119,
|
||||
"ZARGBP": 119,
|
||||
"USDNOK": 119,
|
||||
"GBPNZD": 119,
|
||||
"CZKEUR": 119,
|
||||
"EURNOK": 119,
|
||||
"CHFJPY": 119,
|
||||
"NZDCHF": 119,
|
||||
"PLNGBP": 119,
|
||||
"HKDCHF": 119,
|
||||
"ZARUSD": 119,
|
||||
"USDCHF": 119,
|
||||
"ZAREUR": 119,
|
||||
"MXNUSD": 119,
|
||||
"EURCHF": 119,
|
||||
"CADCHF": 119,
|
||||
"CZKUSD": 119,
|
||||
"CNYKRWC": 120,
|
||||
"CNHCHF": 133,
|
||||
"AUDCHF": 119,
|
||||
"PLNEUR": 119,
|
||||
"CNYMXNC": 120,
|
||||
"SGDCHF": 119,
|
||||
"PLNUSD": 119,
|
||||
"USDSEK": 119,
|
||||
"GBPCHF": 119,
|
||||
"EURSEK": 119,
|
||||
"CNYMYRC": 120,
|
||||
"NZDJPY": 119,
|
||||
"ZARCHF": 119,
|
||||
"USDJPY": 119,
|
||||
"THBUSD": 119,
|
||||
"HKDJPY": 119,
|
||||
"EURJPY": 119,
|
||||
"CADJPY": 119,
|
||||
"AUDJPY": 119,
|
||||
"TRYJPY": 119,
|
||||
"CNHJPY": 133,
|
||||
"SGDJPY": 119,
|
||||
"GBPJPY": 119,
|
||||
"CNYZARC": 120,
|
||||
"ZARJPY": 119,
|
||||
"USDRUB": 119,
|
||||
"CNYDKKC": 120,
|
||||
"CNYNOKC": 120,
|
||||
"CNYHUFC": 120,
|
||||
"CNYPLNC": 120,
|
||||
"CNYSEKC": 120,
|
||||
}
|
||||
@@ -0,0 +1,149 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Date: 2025/6/23 15:00
|
||||
Desc: 东方财富网-行情中心-外汇市场-所有汇率
|
||||
https://quote.eastmoney.com/center/gridlist.html#forex_all
|
||||
"""
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
|
||||
from akshare.forex.cons import symbol_market_map
|
||||
from akshare.utils.func import fetch_paginated_data
|
||||
|
||||
|
||||
def forex_spot_em() -> pd.DataFrame:
|
||||
"""
|
||||
东方财富网-行情中心-外汇市场-所有汇率-实时行情数据
|
||||
https://quote.eastmoney.com/center/gridlist.html#forex_all
|
||||
:return: 实时行情数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://push2.eastmoney.com/api/qt/clist/get"
|
||||
params = {
|
||||
"np": "1",
|
||||
"fltt": "2",
|
||||
"invt": "2",
|
||||
"fs": "m:119,m:120,m:133",
|
||||
"fields": "f12,f13,f14,f1,f2,f4,f3,f152,f17,f18,f15,f16",
|
||||
"fid": "f3",
|
||||
"pn": "1",
|
||||
"pz": "100",
|
||||
"po": "1",
|
||||
"dect": "1",
|
||||
"wbp2u": "|0|0|0|web",
|
||||
}
|
||||
temp_df = fetch_paginated_data(url, params)
|
||||
temp_df.rename(
|
||||
columns={
|
||||
"index": "序号",
|
||||
"f12": "代码",
|
||||
"f14": "名称",
|
||||
"f17": "今开",
|
||||
"f4": "涨跌额",
|
||||
"f3": "涨跌幅",
|
||||
"f2": "最新价",
|
||||
"f15": "最高",
|
||||
"f16": "最低",
|
||||
"f18": "昨收",
|
||||
},
|
||||
inplace=True,
|
||||
)
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"序号",
|
||||
"代码",
|
||||
"名称",
|
||||
"最新价",
|
||||
"涨跌额",
|
||||
"涨跌幅",
|
||||
"今开",
|
||||
"最高",
|
||||
"最低",
|
||||
"昨收",
|
||||
]
|
||||
]
|
||||
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
||||
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
|
||||
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
||||
temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
|
||||
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
|
||||
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
|
||||
temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
def forex_hist_em(symbol: str = "USDCNH") -> pd.DataFrame:
|
||||
"""
|
||||
东方财富网-行情中心-外汇市场-所有汇率-历史行情数据
|
||||
https://quote.eastmoney.com/cnyrate/EURCNYC.html
|
||||
:param symbol: 品种代码;可以通过 ak.forex_spot_em() 来获取所有可获取历史行情数据的品种代码
|
||||
:type symbol: str
|
||||
:return: 历史行情数据
|
||||
:rtype: pandas.DataFrame
|
||||
"""
|
||||
url = "https://push2his.eastmoney.com/api/qt/stock/kline/get"
|
||||
market_code = symbol_market_map[symbol]
|
||||
params = {
|
||||
"secid": f"{market_code}.{symbol}",
|
||||
"klt": "101",
|
||||
"fqt": "1",
|
||||
"lmt": "50000",
|
||||
"end": "20500000",
|
||||
"iscca": "1",
|
||||
"fields1": "f1,f2,f3,f4,f5,f6,f7,f8",
|
||||
"fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64",
|
||||
"ut": "f057cbcbce2a86e2866ab8877db1d059",
|
||||
"forcect": 1,
|
||||
}
|
||||
r = requests.get(url, params=params)
|
||||
data_json = r.json()
|
||||
temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
|
||||
temp_df["code"] = data_json["data"]["code"]
|
||||
temp_df["name"] = data_json["data"]["name"]
|
||||
temp_df.columns = [
|
||||
"日期",
|
||||
"今开",
|
||||
"最新价",
|
||||
"最高",
|
||||
"最低",
|
||||
"-",
|
||||
"-",
|
||||
"振幅",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"-",
|
||||
"代码",
|
||||
"名称",
|
||||
]
|
||||
temp_df = temp_df[
|
||||
[
|
||||
"日期",
|
||||
"代码",
|
||||
"名称",
|
||||
"今开",
|
||||
"最新价",
|
||||
"最高",
|
||||
"最低",
|
||||
"振幅",
|
||||
]
|
||||
]
|
||||
temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
|
||||
temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
|
||||
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
||||
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
|
||||
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
|
||||
temp_df["振幅"] = pd.to_numeric(temp_df["振幅"], errors="coerce")
|
||||
return temp_df
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
forex_spot_em_df = forex_spot_em()
|
||||
print(forex_spot_em_df)
|
||||
|
||||
forex_hist_em_df = forex_hist_em(symbol="USDCNH")
|
||||
print(forex_hist_em_df)
|
||||
Reference in New Issue
Block a user