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

新特性收集区 #7

Open
Micro-sheep opened this issue Jul 31, 2021 · 64 comments
Open

新特性收集区 #7

Micro-sheep opened this issue Jul 31, 2021 · 64 comments
Labels
enhancement New feature or request

Comments

@Micro-sheep
Copy link
Owner

这是 efinance 的新特性收集区,欢迎需要添加新特性的人来提建议,我会认真地看大家的反馈和建议,并且会考虑把它添加到 efinance 中。

其中,新特性包括下面几个方面

  • 优化数据获取速度
  • 增加更多可获取的数据
  • 集成量化算法

还有其他方面的新特性我可能没有考虑到,也欢迎大家来探讨。

@Micro-sheep Micro-sheep added the enhancement New feature or request label Jul 31, 2021
@cz9874308
Copy link

都准备做量化算法了,大佬能否增加下回测功能

@Micro-sheep
Copy link
Owner Author

都准备做量化算法了,大佬能否增加下回测功能

正在做,耗时会比较久,成熟之后再发布。

@cz9874308
Copy link

都准备做量化算法了,大佬能否增加下回测功能

正在做,耗时会比较久,成熟之后再发布。

建议参考下backtraer

@Micro-sheep
Copy link
Owner Author

都准备做量化算法了,大佬能否增加下回测功能

正在做,耗时会比较久,成熟之后再发布。

建议参考下backtraer

好。

@vensentzhou
Copy link

能否增加指数成分股和板块成分股获取

@Micro-sheep
Copy link
Owner Author

能否增加指数成分股和板块成分股获取

@Micro-sheep
Copy link
Owner Author

能否增加指数成分股和板块成分股获取

获取指数成分股示例代码如下(目前还没有集成到 efinance 里面)

from typing import List
import pandas as pd
from urllib.parse import urlencode


def get_children(indexid: str) -> pd.DataFrame:
    """
    获取指数成分股信息

    Parameters
    ----------
    indexid : str
        指数代码
        例如
        - `"000001"` : 上证指数
        - `"000300"` : 沪深 300

    Returns
    -------
    DataFrame
        指数成分股
    """
    page = 1
    dfs: List[pd.DataFrame] = []
    while 1:
        print(f'current page: {page}', end='\r')
        params = (
            ('page', f'{page}'),
            ('indexid', indexid),
        )
        base_url = 'http://vip.stock.finance.sina.com.cn/corp/view/vII_NewestComponent.php'
        url = base_url+'?'+urlencode(params)
        tables = pd.read_html(url,header=1)
        if len(tables) < 4:
            break
        df = tables[3]
        dfs.append(df)
        page += 1
    df = pd.concat(dfs)[df.columns[:3]]
    df['品种代码'] = df['品种代码'].apply(lambda x:str(x).rjust(6,'0'))
    return df
indexid = '000300'
df = get_children(indexid)
df

image

@vensentzhou
Copy link

中正800指数成份股有重复,是数据源问题,还是程序问题:
indexid = '000906'
df = get_children(indexid)
index_code=df['品种代码'].to_list()

from collections import Counter #引入Counter

a = [29,36,57,12,79,43,23,56,28,11,14,15,16,37,24,35,17,24,33,15,39,46,52,13]

b = dict(Counter(index_code))
print ([key for key,value in b.items()if value > 1]) #只展示重复元素
print ({key:value for key,value in b.items()if value > 1}) #展现重复元素和重复次数

{'603517': 2, '003035': 2, '300037': 2, '688036': 2, '300699': 2, '002985': 2, '603290': 2, '603195': 2, '002966': 2, '688321': 2, '600872': 2, '600556': 2, '002049': 2, '002458': 2, '000708': 2, '002157': 2, '000046': 2, '300628': 2, '300271': 2, '002156': 2, '300618': 2, '002429': 2, '001914': 2, '002396': 2, '300630': 2, '002013': 2, '001872': 2, '600989': 2, '000825': 2, '601236': 2, '601233': 2, '601799': 2, '002203': 2, '603338': 2, '601698': 2, '603379': 2, '603019': 2, '603501': 2, '601699': 2, '000869': 2, '600733': 2, '600903': 2, '600845': 2, '600745': 2, '600299': 2, '600985': 2, '600707': 2, '002372': 2, '002311': 2, '300316': 2, '000932': 2, '002032': 2, '600782': 2, '600027': 2, '601231': 2, '601869': 2, '603156': 2, '300296': 2, '601106': 2, '002110': 2, '300408': 2, '601360': 2, '000553': 2, '600350': 2, '600809': 2, '002916': 2, '600258': 2, '600867': 2, '601801': 2, '002085': 2, '002302': 2, '002925': 2, '601179': 2, '601969': 2, '601228': 2, '000807': 2, '601878': 2, '000887': 2, '600875': 2, '000990': 2, '601128': 2, '600598': 2, '600155': 2, '000898': 2, '601992': 2, '603888': 2, '603160': 2, '002424': 2, '002572': 2, '002602': 2, '300001': 2, '300010': 2, '300113': 2, '300166': 2, '600958': 2, '601021': 2, '601788': 2, '600967': 2, '601012': 2, '600886': 2, '601608': 2, '601800': 2, '603000': 2, '600436': 2, '600859': 2, '601377': 2, '601717': 2, '600881': 2, '600884': 2, '600895': 2, '600900': 2, '000778': 3, '000786': 3, '000858': 3, '000937': 3, '000983': 3, '000031': 2, '000039': 2, '000060': 2, '000061': 2, '000063': 2, '000066': 2, '000069': 2, '000157': 2, '000401': 2, '000402': 2, '000425': 2, '000488': 2, '000528': 2, '000568': 2, '000581': 2, '000625': 2, '000630': 2, '000651': 2, '000709': 2, '000758': 2, '000768': 2}

@Micro-sheep
Copy link
Owner Author

沪深 300 为例,我测试了一下,数据源本身是有重复的,比如股票代码 688012 在第 1 和第 2 页均有出现。

@vensentzhou
Copy link

那是不靠谱,000300,取了300条记录,去重后剩下273条,数据不完整

@Micro-sheep
Copy link
Owner Author

那是不靠谱,000300,取了300条记录,去重后剩下273条,数据不完整

确实如此。

@huntergd
Copy link

有没有 龙虎榜 数据?

@Micro-sheep
Copy link
Owner Author

有没有 龙虎榜 数据?

目前没有 下过版本考虑加上。

@Micro-sheep
Copy link
Owner Author

有没有 龙虎榜 数据?

刚更新到 v0.3.7 现在支持获取龙虎榜详情数据。具体示例详见 README.md 里面的 Examples 的 Stock 部分,或者 API 文档。

@Micro-sheep Micro-sheep pinned this issue Aug 31, 2021
@mars-ko
Copy link

mars-ko commented Sep 7, 2021

大神你好,有没有考虑做一个基金收益计算功能,例如买入一只或几只基金后,持有一段时间的本息及收益率。(并非定投,当然如果还有定投的回测就更好了。)

@Micro-sheep
Copy link
Owner Author

大神你好,有没有考虑做一个基金收益计算功能,例如买入一只或几只基金后,持有一段时间的本息及收益率。(并非定投,当然如果还有定投的回测就更好了。)

在做中,完善后再放出。

@mars-ko
Copy link

mars-ko commented Sep 7, 2021

大神你好,有没有考虑做一个基金收益计算功能,例如买入一只或几只基金后,持有一段时间的本息及收益率。(并非定投,当然如果还有定投的回测就更好了。)

在做中,完善后再放出。

这么及时的回复,非常感谢。这个功能之后可以再考虑增加基金组合方面的需求,例如组合回测、穿透持仓等。(当然这是后话了)。
希望越来越好~

@Micro-sheep
Copy link
Owner Author

大神你好,有没有考虑做一个基金收益计算功能,例如买入一只或几只基金后,持有一段时间的本息及收益率。(并非定投,当然如果还有定投的回测就更好了。)

在做中,完善后再放出。

这么及时的回复,非常感谢。这个功能之后可以再考虑增加基金组合方面的需求,例如组合回测、穿透持仓等。(当然这是后话了)。

希望越来越好~

好。

@huntergd
Copy link

有没有实时行情的 分时 数据 (非分钟级K线),看分时图的。

@Micro-sheep
Copy link
Owner Author

有没有实时行情的 分时 数据 (非分钟级K线),看分时图的。

目前没有。

@Tinyrat
Copy link

Tinyrat commented Nov 18, 2021

请问作者:
1.如何获取某股票每日收盘自由流通市值?
2.如何获取某股票所属行业板块和概念板块?

@Micro-sheep
Copy link
Owner Author

请问作者: 1.如何获取某股票每日收盘自由流通市值? 2.如何获取某股票所属行业板块和概念板块?

  1. 如果你说的是某只股票在每一个历史交易日的收盘时的流通市值,那么现在暂时无法获取,如果你只是想获取股票的最新流通市值,则可以这么做
import efinance as ef
quotes = ef.stock.get_realtime_quotes()
print(quotes.columns)
quotes

image

以上演示如何获取多只股票的最新流通市值,如需取指定股票的流通市值,详情可查阅 pandas 的文档,了解如何定位指定单元格即可。
2. 获取行业板块和概念板块示例如下

import efinance as ef
import pandas as pd
from efinance.common import get_realtime_quotes_by_fs
# 如果是概念板块 就把下面的 行业板块 改为 概念板块
key = '行业板块'
# 获取行业板块成员信息
industries = ef.stock.get_realtime_quotes(key)
dfs = []
# 获取每一个行业板块的成员的成分股信息
for industry in industries.iloc:
    bk_id = industry['股票代码']
    members = get_realtime_quotes_by_fs(f'b:{bk_id}')
    members.insert(2, key, industry['股票名称'])
    dfs.append(members)
df = pd.concat(dfs, axis=0, ignore_index=True).rename(
    columns={'代码': '股票代码', '名称': '股票名称'})
df

运行结果

image

如需取某只股票的板块信息,同样需要参考 pandas 里面的定位单元格的方法。

@mikezh
Copy link

mikezh commented Dec 21, 2021

目前大多都是沪深的数据,建议加入港股和美股数据。

@Micro-sheep
Copy link
Owner Author

目前大多都是沪深的数据,建议加入港股和美股数据。

例子中大部分展示的是沪深例子,不过的大部分也是支持港股美股的,例如行情信息等。

@dhKwang
Copy link

dhKwang commented Feb 5, 2022

大佬新年好,请问有实现获取每天的筹码分布的功能吗?

@Micro-sheep
Copy link
Owner Author

大佬新年好,请问有实现获取每天的筹码分布的功能吗?

筹码分布可以直接获取吗?我印象中好像是通过一些成交数据算筹码分布。

@Calanosay
Copy link

能否加入获取美股盘前功能

@todaygood
Copy link

能否获取A股的业绩预披露时间?

@JoffreyN
Copy link

如何获取st股和退市股,或者如何排除它们

st 股可以通过名称来筛选,先获取沪深市场最新行情榜单,然后取出 股票名称 里面含有 ST 的股票即选出 st 股。关于退市股,可以类比筛选 st 股,把关键词 ST 改为 退市。

谢谢 已解决
allcode[~allcode['股票名称'].str.contains('ST|退市')]

@vensentzhou
Copy link

大佬,get_deal_detail 股票分笔数据是否能增加字段区分:买盘成交、买盘成交或平盘成交对手盘成交
截屏2022-05-29 16 16 46

@Micro-sheep
Copy link
Owner Author

大佬,get_deal_detail 股票分笔数据是否能增加字段区分:买盘成交、买盘成交或平盘成交对手盘成交 截屏2022-05-29 16 16 46

这个可以自己做个计算,先将数据按时间排序,然后对比前后相邻的两个数据对应的价格大小,如果时间晚的数据对应的价格大与时间早的,那么时间晚的为买盘,以此类推。示例如下

import efinance as ef
df = ef.stock.get_deal_detail('000001')
df['买卖方向'] = (df['成交价'] - df['成交价'].shift(1)).apply(
    lambda x: '买盘' if x > 0 else '卖盘' if x < 0 else '平盘')
df

@Micro-sheep
Copy link
Owner Author

image

期货合约中的 分时成交 可以获取下来吗

期货的分时成交目前可以和股票混用,把期货名称或者期货代码作为股票代码即可(不过也有可能不准,后续提供适配)

@Micro-sheep
Copy link
Owner Author

image

期货合约中的 分时成交 可以获取下来吗

已在 v0.4.5 版本中进行添加。

@zhaocai-ally
Copy link

这个性质这一栏 要怎么操作才能让它也显示出来
image

@Micro-sheep
Copy link
Owner Author

这个性质这一栏 要怎么操作才能让它也显示出来 image

这个我目前没有加,后续加上。

@lightcax
Copy link

指数历史数据, 分钟线 数据会增加吗?谢谢

@Micro-sheep
Copy link
Owner Author

指数历史数据, 分钟线 数据会增加吗?谢谢

指数历史数据和分钟线数据一直是有的。不过分钟线数据只有最近很短一段时间的。

@vensentzhou
Copy link

vensentzhou commented Jun 13, 2022

大佬,get_deal_detail 股票分笔数据是否能增加字段区分:买盘成交、买盘成交或平盘成交对手盘成交 截屏2022-05-29 16 16 46

这个可以自己做个计算,先将数据按时间排序,然后对比前后相邻的两个数据对应的价格大小,如果时间晚的数据对应的价格大与时间早的,那么时间晚的为买盘,以此类推。示例如下

import efinance as ef
df = ef.stock.get_deal_detail('000001')
df['买卖方向'] = (df['成交价'] - df['成交价'].shift(1)).apply(
    lambda x: '买盘' if x > 0 else '卖盘' if x < 0 else '平盘')
df

大佬的理解跟我的理解可能不太一样,我以为红色箭头向上,表示以买方价格成交(主买),绿色箭头向下,表示以卖方价格成交(主卖),没有箭头表示对手盘成交(平盘)

@penghe2021
Copy link

ef.stock.get_history_bill() 函数能指定获取的时间范围嘛,类似ef.stock.get_quote_history(stock_codes, begin, end),现在的输入只有股票代码,辛苦啦

@kaykouo
Copy link

kaykouo commented Jun 21, 2022

有没有办法加入复权因子和前收盘价?因为只用前复权会导致可以在过去买入超量的股票,不复权会导致除权除息后股价无理由暴跌。如果有这两个数据, 至少可以在除权除息后对持仓进行修正。

@kaykouo
Copy link

kaykouo commented Jun 21, 2022

能不能加入获取某支股票某一交易日的总股数和流通股数?

@kaykouo
Copy link

kaykouo commented Jun 21, 2022

获取指数成分股示例代码如下(目前还没有集成到 efinance 里面)

指数成分股只有当前的,没有历史成分股,这样历史回测大概率会出错

@wabbaf
Copy link

wabbaf commented Jun 24, 2022

希望获取的股票的基本信息可以增加滚动市盈率(TTM),因为市盈率里公认滚动市盈率是一个更有效的指标

@xiaoxiaodetian
Copy link

get_history_bill 增加历史1分钟级别的数据,现在只有每天的
get_deal_detail 增加历史交易明细,现在只有罪行的

@money4marry
Copy link

请教一下,有没有api判断指定日期是否是开市日

@Micro-sheep
Copy link
Owner Author

请教一下,有没有api判断指定日期是否是开市日

没有直接提供。需要的话,可以获取一下 上证指数 的日k行情,然后取日期这一列,后续即可基于它来判断是不是开市日。

@LeoStark
Copy link

LeoStark commented Aug 5, 2022

大佬,请教一下,有办法增加实时挂单信息、大中小单实时流入流出信息吗?
image
image

@Micro-sheep
Copy link
Owner Author

大佬,请教一下,有办法增加实时挂单信息、大中小单实时流入流出信息吗? image image

你说的这两个功能是已经有的,例子如下

import efinance as ef
# 五档行情
s1 = ef.stock.get_quote_snapshot('600016')
# 资金流
s2 = ef.stock.get_history_bill('600016').iloc[-1]
print(s1)
print(s2)

不过资金流那里暂不提供具体流入流出信息,只提供了一个净流入信息。

@LeoStark
Copy link

LeoStark commented Aug 5, 2022

好的,感谢!

@LeoStark
Copy link

LeoStark commented Aug 7, 2022

大佬,在使用过程中发现了个小问题,用列表去做这个ef.stock.get_quote_snapshot()功能的循环的时候,取数的时间就会很长,大概100只票需要个四十五秒,不知道是功能如此还是我使用得有问题?有办法处理这种情况吗

@Micro-sheep
Copy link
Owner Author

大佬,在使用过程中发现了个小问题,用列表去做这个ef.stock.get_quote_snapshot()功能的循环的时候,取数的时间就会很长,大概100只票需要个四十五秒,不知道是功能如此还是我使用得有问题?有办法处理这种情况吗

批量调用的话,可以参考下面的例子

from typing import Dict, List

import efinance as ef
import multitasking
import pandas as pd


def get_snapshot_fast(stock_codes: List[str]) -> Dict[str, pd.DataFrame]:
    """
    获取多只股票的最新行情快照

    Parameters
    ----------
    stock_codes : List[str]
        股票代码列表

    Returns
    -------
    Dict[str, DataFrame]
        股票代码为键,行情快照为值的字典
    """
    sns: Dict[str, pd.DataFrame] = {}

    @multitasking.task
    def start(stock_code: str) -> None:
        sns[stock_code] = ef.stock.get_quote_snapshot(stock_code)
    for stock_code in stock_codes:
        start(stock_code)
    multitasking.wait_for_tasks()
    return sns
sns = get_snapshot_fast(['600519'])
print(sns)

@LeoStark
Copy link

LeoStark commented Aug 7, 2022

感恩! 我研究一下

@cantfindone
Copy link

能否增加财务数据获取的功能,利润表,资产负债表,现金流量表 的数据 及历史

@Hollywood3
Copy link

大佬,期货能否加一个open_interest, 当前未平单

@tianyongliu
Copy link

建议获取行业、概念资金流的数据。。。

@magicso
Copy link

magicso commented Oct 20, 2023

get_history_bill,股票历史单子流入数据(日级),希望能指定日期范围,目前只能获取到最近几个月的数据

@interqhq
Copy link

你好,能否增加一个东财股吧热度排行榜,谢谢

@wsw87201326
Copy link

是否支持历史数据的获取,结果类似get_realtime_quotes的返回结果。

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

No branches or pull requests