-
Notifications
You must be signed in to change notification settings - Fork 498
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
Comments
都准备做量化算法了,大佬能否增加下回测功能 |
正在做,耗时会比较久,成熟之后再发布。 |
建议参考下backtraer |
好。 |
能否增加指数成分股和板块成分股获取 |
好 |
获取指数成分股示例代码如下(目前还没有集成到 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 |
中正800指数成份股有重复,是数据源问题,还是程序问题: 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)) {'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} |
以沪深 300 为例,我测试了一下,数据源本身是有重复的,比如股票代码 |
那是不靠谱,000300,取了300条记录,去重后剩下273条,数据不完整 |
确实如此。 |
有没有 龙虎榜 数据? |
目前没有 下过版本考虑加上。 |
刚更新到 v0.3.7 现在支持获取龙虎榜详情数据。具体示例详见 README.md 里面的 Examples 的 Stock 部分,或者 API 文档。 |
大神你好,有没有考虑做一个基金收益计算功能,例如买入一只或几只基金后,持有一段时间的本息及收益率。(并非定投,当然如果还有定投的回测就更好了。) |
在做中,完善后再放出。 |
这么及时的回复,非常感谢。这个功能之后可以再考虑增加基金组合方面的需求,例如组合回测、穿透持仓等。(当然这是后话了)。 |
好。 |
有没有实时行情的 分时 数据 (非分钟级K线),看分时图的。 |
目前没有。 |
请问作者: |
import efinance as ef
quotes = ef.stock.get_realtime_quotes()
print(quotes.columns)
quotes 以上演示如何获取多只股票的最新流通市值,如需取指定股票的流通市值,详情可查阅 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 运行结果 如需取某只股票的板块信息,同样需要参考 |
目前大多都是沪深的数据,建议加入港股和美股数据。 |
例子中大部分展示的是沪深例子,不过的大部分也是支持港股美股的,例如行情信息等。 |
大佬新年好,请问有实现获取每天的筹码分布的功能吗? |
筹码分布可以直接获取吗?我印象中好像是通过一些成交数据算筹码分布。 |
能否加入获取美股盘前功能 |
能否获取A股的业绩预披露时间? |
这个可以自己做个计算,先将数据按时间排序,然后对比前后相邻的两个数据对应的价格大小,如果时间晚的数据对应的价格大与时间早的,那么时间晚的为买盘,以此类推。示例如下 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 |
指数历史数据, 分钟线 数据会增加吗?谢谢 |
指数历史数据和分钟线数据一直是有的。不过分钟线数据只有最近很短一段时间的。 |
大佬的理解跟我的理解可能不太一样,我以为红色箭头向上,表示以买方价格成交(主买),绿色箭头向下,表示以卖方价格成交(主卖),没有箭头表示对手盘成交(平盘) |
ef.stock.get_history_bill() 函数能指定获取的时间范围嘛,类似ef.stock.get_quote_history(stock_codes, begin, end),现在的输入只有股票代码,辛苦啦 |
有没有办法加入复权因子和前收盘价?因为只用前复权会导致可以在过去买入超量的股票,不复权会导致除权除息后股价无理由暴跌。如果有这两个数据, 至少可以在除权除息后对持仓进行修正。 |
能不能加入获取某支股票某一交易日的总股数和流通股数? |
指数成分股只有当前的,没有历史成分股,这样历史回测大概率会出错 |
希望获取的股票的基本信息可以增加滚动市盈率(TTM),因为市盈率里公认滚动市盈率是一个更有效的指标 |
get_history_bill 增加历史1分钟级别的数据,现在只有每天的 |
请教一下,有没有api判断指定日期是否是开市日 |
没有直接提供。需要的话,可以获取一下 上证指数 的日k行情,然后取日期这一列,后续即可基于它来判断是不是开市日。 |
好的,感谢! |
大佬,在使用过程中发现了个小问题,用列表去做这个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) |
感恩! 我研究一下 |
能否增加财务数据获取的功能,利润表,资产负债表,现金流量表 的数据 及历史 |
大佬,期货能否加一个open_interest, 当前未平单 |
建议获取行业、概念资金流的数据。。。 |
get_history_bill,股票历史单子流入数据(日级),希望能指定日期范围,目前只能获取到最近几个月的数据 |
你好,能否增加一个东财股吧热度排行榜,谢谢 |
是否支持历史数据的获取,结果类似get_realtime_quotes的返回结果。 |
现在有回测功能了吗 |
这是
efinance
的新特性收集区,欢迎需要添加新特性的人来提建议,我会认真地看大家的反馈和建议,并且会考虑把它添加到efinance
中。其中,新特性包括下面几个方面
还有其他方面的新特性我可能没有考虑到,也欢迎大家来探讨。
The text was updated successfully, but these errors were encountered: