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

作者您好,关于这个项目的几个问题 #14

Open
lookis opened this issue Jan 8, 2021 · 4 comments
Open

作者您好,关于这个项目的几个问题 #14

lookis opened this issue Jan 8, 2021 · 4 comments

Comments

@lookis
Copy link

lookis commented Jan 8, 2021

前阵子发现了这个项目,感觉做的很专业值得长期关注,我现在有几个入门问题:

  1. 似乎现在只支持 MySQL 和 postgres,可很多做量化的人的手上有大量的数据都存储在时序数据库或者 mongodb 这类能够容纳大规模数据的数据库里,不知是否计划支持?
  2. 依旧是在数据方面,我看项目里有对数据库模型的一个假设,但我的感觉是这个模型相对复杂,这就导致了使用上的困难,要么把现有数据库中的数据导入到这个模型上,但很多时候是缺失的,比方说如果做的是商品研究或者数字货币研究,就会很难fit进去,要么可以提供数据的抓取生成方案,不然入手的难度很大
  3. 不知您在开这个项目的时候和 alphalens 的定位有什么差异?专注多因子研究?那如果这样的话是否考虑在单因子方面用 alphalens 来补充和对接?比方说直接适配 alphalens 的数据模型?

最后一个建议也是疑问,项目不知道会向哪个方向发展,是提供多因子研究的一个整体框架?还是类似 alphalens 一样做为一个工具提供出来?

  1. 如果是整体框架的话可能数据生成、维护部分要完善一些,这样可以让更多人上手更快
  2. 如果是提供成工具的话可以把接口输入输出的数据格式确定一下,或者提供出一个facade,这样每个功能都可以被用户单独拎出来使用
@lookis
Copy link
Author

lookis commented Jan 8, 2021

举个例子,就拿 notebooks 里 example 1 来说,比方说行业数据相关的代码:

from alphamind.api import *
from PyFin.api import *

industry_name = 'sw'
industry_level = 1

industry_names = industry_list(industry_name, industry_level)

我理解这里应该是申万行业一级分类,假设我自己已经在数据库中抓取了自己的申万数据,无论是 csv 格式还是 mysql 还是 mongodb,那么我要如何把我自己的数据用进来?然后我会翻到数据相关的地方:

class _SwIndustryDaily(Base):
__tablename__ = 'sw_industry_daily'
__table_args__ = (
Index('sw_industry_daily_uindex', 'trade_date', 'industry_code1', 'symbol', 'flag', unique=True),
)
id = Column(INT, primary_key=True)
trade_date = Column(Date, nullable=False)
symbol = Column(Text, nullable=False)
company_id = Column(Text, nullable=False)
code = Column("security_code", Text, nullable=False)
sname = Column(Text, nullable=False)
industry_code1 = Column(Text, nullable=False)
industry_name1 = Column(Text)
industry_code2 = Column(Text)
industry_name2 = Column(Text)
industry_code3 = Column(Text)
industry_name3 = Column(Text)
Industry_code4 = Column(Text)
Industry_name4 = Column(Text)
flag = Column(INT)
is_verify = Column(INT)

然后就会发现,有很多字段可能我原来的数据里根本就没有或者不理解,比方说 什么是 company_id,和 symbol 是什么关系?code 和 sname 又是啥?

遇到这样的问题的话基本上我就连第一个 example 就无法跑起来了。

@wegamekinglc
Copy link
Member

@lookis 非常感谢您对这个项目的兴趣,您问的问题也感觉思考了很多,我来一一回答:

似乎现在只支持 MySQL 和 postgres,可很多做量化的人的手上有大量的数据都存储在时序数据库或者 mongodb 这类能够容纳大规模数据的数据库里,不知是否计划支持?

由于个人的精力限制,我会持续专注于SQL兼容的数据库类型。您提的刚才这些数据库类型,未来是否支持,很大程度上取决于是否有SQL like查询的driver提供。我未来的工作,主要是将当前SQL兼容的数据模型做的更通用精简,而不是开辟新战场。

PS:未来两周左右,我会提供基于CSV文件的数据backend,应该会更容易上手使用。这个是受微软的qlib启发。

依旧是在数据方面,我看项目里有对数据库模型的一个假设,但我的感觉是这个模型相对复杂,这就导致了使用上的困难,要么把现有数据库中的数据导入到这个模型上,但很多时候是缺失的,比方说如果做的是商品研究或者数字货币研究,就会很难fit进去,要么可以提供数据的抓取生成方案,不然入手的难度很大

是的这个数据模型相对复杂,这个有一部分历史原因,也是本身alpha建模的复杂性(行业分类,风险模型等)。这里面的数据实际上分层次的,比如:行情信息是必须的,但是行业,风险模型不是必须的,实际可以留空。我下面的工作,主要是精简这个数据模型,同时简化api,使得用户能更清楚哪些数据必须有,哪些取决于你想做的alpha模型有多复杂。

同时后面提供的CSV文件形式,应该会更方便用户探查。

不知您在开这个项目的时候和 alphalens 的定位有什么差异?专注多因子研究?那如果这样的话是否考虑在单因子方面用 alphalens 来补充和对接?比方说直接适配 alphalens 的数据模型?

我不是很熟悉alphalens项目,从github介绍上来看,主要是关注因子本身的性能测试。alpha-mind的定位与它不太一样。alpha-mind的定位是多因子研究的全流程管理,需要包括:因子变换(时序计算、截面计算)、因子组合(机器学习)、组合优化、交易执行、性能评估。我的理解alphalens主要关注最后一步,这部分alpha-mind的功能还比较少。

关于数据模型这块,我没仔细看过alphalens的内容,很难评价。

如果是整体框架的话可能数据生成、维护部分要完善一些,这样可以让更多人上手更快

这个是的,我下面的top priority的工作就是做一个CSV的backend,并且提供一份样例数据。CSV所见即所得,更新数据也比较容易(复制黏贴都可以),用户也比较容易第一时间感受到数据模型具体怎么样。所有的例子也会重构,去适配这个CSV的backend。

如果是提供成工具的话可以把接口输入输出的数据格式确定一下,或者提供出一个facade,这样每个功能都可以被用户单独拎出来使用

这个我理解位一个数据更新的标准接口,这个是一个很好的功能,我会考虑进中期计划(未来1~2个季度)。

@wegamekinglc
Copy link
Member

举个例子,就拿 notebooks 里 example 1 来说,比方说行业数据相关的代码:

from alphamind.api import *
from PyFin.api import *

industry_name = 'sw'
industry_level = 1

industry_names = industry_list(industry_name, industry_level)

我理解这里应该是申万行业一级分类,假设我自己已经在数据库中抓取了自己的申万数据,无论是 csv 格式还是 mysql 还是 mongodb,那么我要如何把我自己的数据用进来?然后我会翻到数据相关的地方:

class _SwIndustryDaily(Base):
__tablename__ = 'sw_industry_daily'
__table_args__ = (
Index('sw_industry_daily_uindex', 'trade_date', 'industry_code1', 'symbol', 'flag', unique=True),
)
id = Column(INT, primary_key=True)
trade_date = Column(Date, nullable=False)
symbol = Column(Text, nullable=False)
company_id = Column(Text, nullable=False)
code = Column("security_code", Text, nullable=False)
sname = Column(Text, nullable=False)
industry_code1 = Column(Text, nullable=False)
industry_name1 = Column(Text)
industry_code2 = Column(Text)
industry_name2 = Column(Text)
industry_code3 = Column(Text)
industry_name3 = Column(Text)
Industry_code4 = Column(Text)
Industry_name4 = Column(Text)
flag = Column(INT)
is_verify = Column(INT)

然后就会发现,有很多字段可能我原来的数据里根本就没有或者不理解,比方说 什么是 company_id,和 symbol 是什么关系?code 和 sname 又是啥?

遇到这样的问题的话基本上我就连第一个 example 就无法跑起来了。

这个是个问题,没有一份可以使用的样例数据,这个是重大硬伤。我会尽快推出一个样例数据集,保证notebook都可以使用。

@lookis
Copy link
Author

lookis commented Jan 9, 2021

十分感谢,期待看到更多进展。

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