Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问如何获取ETF的行情数据? #2

Open
vensentzhou opened this issue Jul 22, 2021 · 7 comments
Open

请问如何获取ETF的行情数据? #2

vensentzhou opened this issue Jul 22, 2021 · 7 comments

Comments

@vensentzhou
Copy link

No description provided.

@Micro-sheep
Copy link
Owner

目前我没有把 etf 当成股票,而是归为基金。获取它的净值示例如下
image

@vensentzhou
Copy link
Author

能否增加一下etf 分钟数据的获取方式,感谢

@Micro-sheep
Copy link
Owner

可以,等后续更新。如果你现在就需要用的话,参考下面的代码获取 1 分钟 k 线数据

from urllib.parse import urlencode
import pandas as pd
import requests


def gen_secid(rawcode: str) -> str:
    '''
    生成东方财富专用的 secid

    Parameters
    ----------
    rawcode : 6 位代码

    Return
    ------
    str: 指定格式的字符串

    '''
    # 沪市指数
    if rawcode[:3] == '000':
        return f'1.{rawcode}'
    # 深证指数
    if rawcode[:3] == '399':
        return f'0.{rawcode}'
    # 沪市股票
    if rawcode[0] != '6':
        return f'0.{rawcode}'
    # 深市股票
    return f'1.{rawcode}'


def get_k_history(code: str, beg: str = '16000101', end: str = '20500101', klt: int = 1, fqt: int = 1) -> pd.DataFrame:
    '''
    功能获取k线数据

    Parameters
    ----------
    code : 6 位代码
    beg: 开始日期 例如 20200101
    end: 结束日期 例如 20200201
    klt: k线间距 默认为 101 即日k
        klt:1 1 分钟
        klt:5 5 分钟
        klt:101 日
        klt:102 周
    fqt: 复权方式
        不复权 : 0
        前复权 : 1
        后复权 : 2 
    Return
    ------
    DateFrame : 包含股票k线数据
    '''
    EastmoneyKlines = {
        'f51': '日期',
        'f52': '开盘',
        'f53': '收盘',
        'f54': '最高',
        'f55': '最低',
        'f56': '成交量',
        'f57': '成交额',
        'f58': '振幅',
        'f59': '涨跌幅',
        'f60': '涨跌额',
        'f61': '换手率',


    }
    EastmoneyHeaders = {
        'Host': '19.push2.eastmoney.com',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko',
        'Accept': '*/*',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
        'Referer': 'http://quote.eastmoney.com/center/gridlist.html',
    }
    fields = list(EastmoneyKlines.keys())
    columns = list(EastmoneyKlines.values())
    fields2 = ",".join(fields)
    secid = gen_secid(code)
    params = (
        ('fields1', 'f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13'),
        ('fields2', fields2),
        ('beg', beg),
        ('end', end),
        ('rtntype', '6'),
        ('secid', secid),
        ('klt', f'{klt}'),
        ('fqt', f'{fqt}'),
    )
    params = dict(params)
    base_url = 'https://push2his.eastmoney.com/api/qt/stock/kline/get'
    url = base_url+'?'+urlencode(params)
    json_response: dict = requests.get(
        url, headers=EastmoneyHeaders).json()

    data = json_response.get('data')
    if data is None:
        if secid[0] == '0':
            secid = f'1.{code}'
        else:
            secid = f'0.{code}'
        params['secid'] = secid
        url = base_url+'?'+urlencode(params)
        json_response: dict = requests.get(
            url, headers=EastmoneyHeaders).json()
        data = json_response.get('data')
    if data is None:
        print('代码:', code, '可能有误')
        return pd.DataFrame(columns=columns)

    klines = data['klines']

    rows = []
    for _kline in klines:

        kline = _kline.split(',')
        rows.append(kline)

    df = pd.DataFrame(rows, columns=columns)

    return df


if __name__ == "__main__":
    # 代码
    code = '513050'
    # 1 分钟 k 线
    minute_step = 1
    df = get_k_history(code,klt = minute_step)
    # 保存k线数据到表格里面
    df.to_csv(f'{code}.csv', encoding='utf-8-sig', index=None)
    print(f'{code} 的 k线数据已保存到代码目录下的 {code}.csv 文件中')

@vensentzhou
Copy link
Author

感谢大神!

@Micro-sheep
Copy link
Owner

嗯 不客气,这个库更新会比较快,建议及时更新以获得更好的体验。

@Micro-sheep
Copy link
Owner

能否增加一下etf 分钟数据的获取方式,感谢

刚更新版本,目前最新版本为:0.2.5。从该版本开始,etf以及债券的数据获取受到支持,其使用方法跟股票部分一致,只需要提供6位代码即可。

@Micro-sheep
Copy link
Owner

能否增加一下etf 分钟数据的获取方式,感谢

刚更新版本,目前最新版本为:0.2.5。从该版本开始,etf以及债券的数据获取受到支持,其使用方法跟股票部分一致,只需要提供6位代码即可。

现在已更新到 v0.2.8 功能更加强大。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants