目前复权因子似乎是通过获取后复权数据和不复权数据,通过两者的比值计算出来的。mootdx实际上在mootdx/utils/adjust.py里提供了一个从新浪财经获取复权因子的方法。可以直接保存后复权因子到数据库里,避免把每日复权因子都写入数据库,导致数据臃肿。
`def fq_factor(method: str, symbol: str) -> pd.DataFrame:
zh_sina_a_stock_hfq_url = 'https://finance.sina.com.cn/realstock/company/{}/hfq.js'
zh_sina_a_stock_qfq_url = 'https://finance.sina.com.cn/realstock/company/{}/qfq.js'
client = httpx.Client(verify=False)
if method == 'hfq':
res = client.get(zh_sina_a_stock_hfq_url.format(symbol))
hfq_factor_df = pd.DataFrame(json.loads(res.text.split('=')[1].split('\n')[0])['data'])
if hfq_factor_df.shape[0] == 0:
raise ValueError('sina hfq factor not available')
hfq_factor_df.columns = ['date', 'hfq_factor']
hfq_factor_df.index = pd.to_datetime(hfq_factor_df.date)
del hfq_factor_df['date']
hfq_factor_df.reset_index(inplace=True)
# hfq_factor_df = hfq_factor_df.set_index('date')
return hfq_factor_df
else:
res = client.get(zh_sina_a_stock_qfq_url.format(symbol))
qfq_factor_df = pd.DataFrame(json.loads(res.text.split('=')[1].split('\n')[0])['data'])
if qfq_factor_df.shape[0] == 0:
raise ValueError('sina hfq factor not available')
qfq_factor_df.columns = ['date', 'qfq_factor']
qfq_factor_df.index = pd.to_datetime(qfq_factor_df.date)
del qfq_factor_df['date']
qfq_factor_df.reset_index(inplace=True)
# qfq_factor_df = qfq_factor_df.set_index('date')
return qfq_factor_df`
例子:https://finance.sina.com.cn/realstock/company/sh601398/qfq.js
目前复权因子似乎是通过获取后复权数据和不复权数据,通过两者的比值计算出来的。mootdx实际上在mootdx/utils/adjust.py里提供了一个从新浪财经获取复权因子的方法。可以直接保存后复权因子到数据库里,避免把每日复权因子都写入数据库,导致数据臃肿。
`def fq_factor(method: str, symbol: str) -> pd.DataFrame:
zh_sina_a_stock_hfq_url = 'https://finance.sina.com.cn/realstock/company/{}/hfq.js'
zh_sina_a_stock_qfq_url = 'https://finance.sina.com.cn/realstock/company/{}/qfq.js'
例子:https://finance.sina.com.cn/realstock/company/sh601398/qfq.js