qnloft-stock/utils/stock_web_api.py

68 lines
2.1 KiB
Python
Raw Normal View History

2023-11-24 06:42:22 +00:00
from utils.comm import *
def stock_web_api_method_decorator(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
@stock_web_api_method_decorator
def stock_web_api_money_flow(start_date=None, end_date=None):
# 沪深港通资金流向
df = xcsc_pro.moneyflow_hsgt(start_date=start_date, end_date=end_date)[::-1]
if df[df["trade_date"] == end_date].empty:
# df 如果里面不包含当天日期的数据,则使用备用接口
ak_df = ak.stock_hsgt_fund_flow_summary_em()
northward = ak_df[ak_df['资金方向'] == '北向']
hgt = round(northward[northward['板块'] == '沪股通']['成交净买额'].sum(), 2) * 100
sgt = round(northward[northward['板块'] == '深股通']['成交净买额'].sum(), 2) * 100
north_money = round(hgt + sgt, 2)
substitute_df = pd.DataFrame(
[{
"trade_date": northward["交易日"].iloc[0].strftime('%Y%m%d'),
"hgt": hgt,
"sgt": sgt,
"north_money": north_money,
}],
index=[0],
)
result = pd.concat([df, substitute_df], ignore_index=True)
return result
if df is not None and not df.empty:
return df
raise Exception("沪深港通资金流向数据拉取失败!")
@stock_web_api_method_decorator
def stock_web_api_industry_summary(): # 同花顺 - 行业板块数据
df = ak.stock_board_industry_summary_ths()
if df is not None and not df.empty:
return df
raise Exception("同花顺 - 行业板块数据 数据拉取失败!")
@stock_web_api_method_decorator
def stock_web_api_concept_name(): # 同花顺 - 概念板块数据
df = ak.stock_board_concept_name_em()
if df is not None and not df.empty:
return df
raise Exception("同花顺 - 概念板块数据 数据拉取失败!")
def execute_stock_web_api_method(func, *args, **kwargs):
for _ in range(5):
try:
return func(*args, **kwargs)
except Exception as e:
print(f"{func}】 -- 拉取出现问题 【{e}】, 开始进行重试!")
time.sleep(1)
else:
print(f"{func}】 5次出现错误请关注")
return None
if __name__ == '__main__':
print(execute_stock_web_api_method(func=stock_web_api_money_flow, start_date='20231123', end_date='20231123'))