赞
踩
现在,小瓦已经对算法交易的基本概念、简单的交易策略、最基 本的回测方法有了一定的了解,也尝试了使用机器学习技术来进行股 票涨跌的预测。虽然作为简单的实验,KNN算法的预测准确率还不是 很理想,但小瓦猜想,如果我们扩展样本的数据维度,模型的准确率 不就可以提高了吗?此外,我们只是随机挑选了一只股票来进行实 验,假如能够选出更多涨幅明显的股票来组成投资组合,收益率不也 可以大幅提高吗? 为了验证小瓦的猜想,我们就来寻找一些方法来展开实验。本章 的主要内容如下。
既然要进行进一步的实验,我们就需要找到更多的数据(仅仅使用 tushare获取的数据不够),而让小瓦自己开发一个爬虫程 序去各大网站“爬”数据,学习成本又太高,还要花费大量的时间,那小 瓦还不如直接用别人已经整理好的数据呢。也就是说,小瓦可以借助现 有的量化交易平台来进行研究。
现在有很多现成的量化交易平台,不但有大量已经整理好的数据, 并且可以让小瓦在平台上直接编写策略并进行回测。例如,Quantopian 的开源回测工具zipline可以说在业内是无人不知,无人不晓,但zipline 在本地的配置有点麻烦,而Quantopian平台上面的中国股市数据包还需 要单独付费。这样一来,小瓦就需要找一找国内的量化交易平台了。 国内的量化平台也有几个比较有名的,如聚宽(JoinQuant)、米筐 (RiceQuan)、BigQuant等。这几个平台对于小瓦目前的水平来说,都 是够用的。小瓦要做的无非是挑一个用着比较顺手、文档比较完善、有 成熟社区的平台即可。 结合上述几个方面的考虑,我们就让小瓦先从“聚宽”开始,等熟悉 之后,要转向其他平台,也是比较容易操作。
要使用“聚宽”平台,只需要浏览器打开网址 JoinQuant聚宽量化投研平台 即可。
注册一个新用户:过程十分简单,我们这里就不详细讲解了
注册完成之后,我们就和小瓦一起来熟悉平台的使用方法。“聚 宽”平台的功能还是比较多的,包括策略的编写、回测、研究等。我们 先从研究环境开始
“聚宽”平台研究环境的用法与小瓦在本地安装的Jupyter Notebook一 样,而且一些常用的第三方库也已经安装好,还是非常方便的。下面我 们就和小瓦一起在研究环境中做一点练习,熟悉相关的函数的使用方 法。 例如,要获取某只股票在2023年1月1日至2023年3月13日之间的行情 数据,只要使用get_price函数即可,输入代码如下
- #导入需要的库
- import pandas as pd
-
- #获取股票002624.XSHE 2023年1月1日至2023年3月13日之间的的日级交易数据
- df = get_price('002624.XSHE', start_date='2023-01-01', end_date='2023-03-13', frequency='daily')
- df
【结果分析】从输出中可以看到,我们在“聚宽”平台的研究环境 中运行代码的结果与在本地Jupyter Notebook中一模一样。使用get_price 函数,系统返回的结果同样是一个DataFrame格式的数据表,同样包括 open、close、high、low及volume这几个字段。 注意:与tushare不同,在“聚宽”的get_price函数中,传入的 股票代码是用.XSHG扩展名代表上海证券交易所股票,用.XSHE扩展 名代表深圳证券交易所股票。
现在,小瓦对平台研究的使用方法已经有了初步的了解。当然,平 台对于我们来说,最大的价值之一就是可以提供更多的数据——如果仅 仅是查询某只股票的开盘价、收盘价、成交量、成交额这些,那平台也 没有比tushare提供的数据多。不过“聚宽”量化交易平台能够提供的 看起来远远不止这些。该平台有一个数据字典,可以看到,“聚宽”平台提供的数据,除了股票的行情、财 务、基本面信息之外,还有宏观经济数据、各种因子数据、新闻事件数 据等,看起来还是非常全面的。接下来,我们就和小瓦一起看看如何来 使用这些数据。
设想一下,假如某天某人给我们推荐了一只证券的代码,我们首先 想到的自然是要了解一下这只证券的概况。例如,它是什么时候上市 的,是否已经退市;它是股票还是基金,如果是基金,是哪一种类型的 基金;等等。 利用平台获得这些数据十分容易,使用get_security_info函数就可以 做到。例如,我们想要了解002624这只股票的概况,只需要以下这几行 代码就可以了。
- df = get_security_info('002624.XSHE')
- print('股票名称:', df.display_name)
- print('股票简称:', df.name)
- print('股票上市时间:', df.start_date)
- print('产品类型:', df.type)
除了可以获取单个证券的基本信息之外,我们还可以使用 get_all_securities函数批量获得证券信息。实例代码如下:
- df = get_all_securities()
- print(df.head())
- df.tail()
4.2.2 获取股票的财务数据
在了解了股票的基本概况之后,可能很多读者朋友就会有和小瓦一 样的问题——我们该如何知道这只股票是否是优质股呢?这是一个非常 好的问题。如果我们要做价值型投资者,那么我们最重要的还是要看某 只股票的长期发展趋势;而能够保持良好表现的股票,其对应的企业必 然是财务状况良好、盈利能力不错、净资产和现金流状况都比较突出的 企业。获取这些数据也十分简单,使用平台的get_fundamentals函数就可 以了。
与get_security_info不同的是,使用get_fundamantals函数并不是直接 把股票的代码传递到参数中,而是要传入一个query object。query的原 理也比较容易理解:在数据库中有一个表格,其中包含若干字段,使用 query可以查询表格中的某个字段,并且可以设置筛选条件。例如,下 面我们对代码为002624的股票进行查询,输入代码如下:
- # 获取单只股票在某一日期的市值数据
- q = query(
- valuation
- ).filter(
- valuation.code == '002624.XSHE'
- )
- df = get_fundamentals(q, date='2023-03-13')
-
- df
【结果分析】从输出中可以看到,系统返回了代码为002624的股 票财务数据。除了股票代码、上市日期等基础信息之外,股票财务数据 还包括一系列的财务指标,如pe_ratio、turnover_ratio、pb_ratio、 ps_ratio、pcf_ratio、pe_ration_lyr等。
鉴于小瓦没有学习过财务方面的相关知识,我们在这里对各项财务 指标做一个简单的解释。如果读者朋友们对这些指标已经有了充分的了 解,则可以跳过这部分内容。
相信看到这里,读者朋友们会产生一个新的想法——既然财务指标 有助于解一家企业,那么我们是不是可以通过设定这些财务指标的条 件,把市场上比较优质的股票找出来呢?答案是肯定的。例如,我们要 找出市盈率小于20且大于0、市现率小于20且大于0(有时候现金流比利 润还重要)且在市场上成交比较活跃(换手率大于4%)的股票,就可 以使用query object进行筛选,并使用平台的get_fundamentals函数来找到 满足条件的股票。示例代码如下:
- q = query(
- valuation.code,
- #动态市盈率
- valuation.pe_ratio,
- #市现率
- valuation.pcf_ratio,
- #换手率
- valuation.turnover_ratio
-
- ).filter(
- valuation.pe_ratio > 0,
- valuation.pe_ratio < 20,
- valuation.pcf_ratio > 0,
- valuation.pcf_ratio < 20,
- valuation.turnover_ratio > 4
-
- ).order_by(
- #按换手率降序排序
- valuation.turnover_ratio.desc()
- )
- df = get_fundamentals(q, date='2022-10-25')
-
- df
我们既然找到了市盈率和市现率都比较低,而且成交也比较活跃的 股票,是不是直接全仓杀入就可以了呢?一向谨慎的小瓦这时有了一个 新的问题——是不是所有上市公司的财务报表都能够反映其真实财务状 况呢?要知道,某些企业也有被曝出财务造假丑闻的呀!更何况,有的 公司会“合理地”调整财务报表,使其更加“好看”。那这样一来,这些指 标不就靠不住了吗?
此外,虽然换手率确实是体现交易活跃程度的指标,但是成交活跃 也不代表股价一定会涨呀!万一是大股东在减持套利,或者是主力在出 货,那么股价不是反而会跌嘛!
小瓦的担心确实很有道理。在真金白银买入之前,我们还是有必要 了解一下更多信息的,如大股东是谁、大股东近期增减持的状况,以及 主力的资金流向等。
在4.2节中,我们选出了8只财务指标看起来不错的股票。尤其是 002432.XSHE这一支,索性我 们就以这一只股票为例来查询一下它的十大股东都有谁。 在平台上,十大股东的数据是存储在名为 STK_SHAREHOLDER_TOP10这张表中,使用query object就可以进行查 询。示例代码如下:
- from jqdata import finance
- q = query(finance.STK_SHAREHOLDER_TOP10.code,
- finance.STK_SHAREHOLDER_TOP10.shareholder_rank,
- finance.STK_SHAREHOLDER_TOP10.shareholder_name,
- finance.STK_SHAREHOLDER_TOP10.shareholder_class,
- finance.STK_SHAREHOLDER_TOP10.share_ratio
- ).filter(
- finance.STK_SHAREHOLDER_TOP10.code=='002432.XSHE',
- finance.STK_SHAREHOLDER_TOP10.pub_date >'2022-10-01'
- )
- shareholders = finance.run_query(q)
- shareholders
4.3.2 大股东们增持了还是减持了
现在我们“揪”出了该股票的大股东们,接下来就要研究一下他们的 行为了。如果大股东对公司未来发展有信心,一般会增持公司的股票, 以便在未来获得更高的收益;相反,如果大股东认为短期股价已经见 顶,则可能会减持一些股票,将已经获利的部分进行套现。也就是说, 如果大股东增持了股票,则股价有可能上涨,反之股份有可能下降。当 然,这也不是绝对的——有时候大股东的判断也可能出现失误。 不管怎样,我们还是需要了解一下大股东们的动作,以供参考。为 了达到这个目的,可以使用query object来查询 STK_SHAREHOLDERS_SHARE_CHANGE这张表。示例代码如下:
- q = query(finance.STK_SHAREHOLDERS_SHARE_CHANGE.code,
- finance.STK_SHAREHOLDERS_SHARE_CHANGE.pub_date,
- finance.STK_SHAREHOLDERS_SHARE_CHANGE.shareholder_name,
- finance.STK_SHAREHOLDERS_SHARE_CHANGE.type,
- finance.STK_SHAREHOLDERS_SHARE_CHANGE.change_number,
- finance.STK_SHAREHOLDERS_SHARE_CHANGE.change_ratio,
- finance.STK_SHAREHOLDERS_SHARE_CHANGE.after_change_ratio,
- ).filter(
- finance.STK_SHAREHOLDERS_SHARE_CHANGE.code=='002624.XSHE',
- finance.STK_SHAREHOLDERS_SHARE_CHANGE.pub_date >'2020-01-01'
- )
- shrchg = finance.run_query(q)
- shrchg
4.3.3 资金净流入还是净流出
现在我们知道了大股东的增减持情况,但小瓦也发现,其实大股东 增减持数据的公布,最后一次也是在2020年的2月22日,那这个数据的 时效性是不是就有点低了呢?不要紧,我们还可以获得实效性更高的数 据——资金流向数据,以便看到主力的实时动向。 要做到这一点,我们只需要调用平台的get_money_flow函数即可, 并指定查询的股票代码、日期和要查看的字段。示例代码如下:
- from jqdata import *
- df = get_money_flow('002624.XSHE',
- fields=[
- 'date',
- # 股票代码
- 'sec_code',
- # 涨跌幅(%)
- 'change_pct',
- # 主力净额(万)
- 'net_amount_main',
- # 主力净占比(%)
- 'net_pct_main'],
- start_date='2023-01-01',
- end_date='2023-03-13')
- print(df.head(6))
- print(df.tail(12))
注意:在本章中,我们演示了如何使用一些函数来查询平台上的 相关数据。在查询某些表时,笔者只选择了其中一些字段。读者朋友 如果希望查询不同字段,则可以参考平台的数据字典,了解查询的具 体方法。
在本章,我们主要帮助小瓦解决一个问题——获得更多的数据。为 了降低她的学习成本,本章使用了现有的量化交易平台的数据,并且帮 助小瓦简单熟悉了一下平台相关函数的使用方法。在这个过程中,小瓦 学会了如何获取股票的概况和财务指标数据,也初步了解了如何利用基 本的财务指标进行简单的选股,而且能够查询股东信息和股东的增减持 情况,以及某个时期内股票的资金流入/流出情况。借着对上述数据的 研究,本章也引出了因子分析的基本思路。在后面的章节,我们会和小 瓦一起研究因子分析的方法,也欢迎各位读者朋友来一起继续量化交易 的探索。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。