Metadata-Version: 2.1
Name: QuantDataCollector
Version: 0.1.2
Summary: 为量化项目提供稳定且统一的数据接口
Home-page: https://github.com/QuantitativeInvestment/QuantDataCollector
Author: TX
Author-email: hanerzamora@gmail.com
License: MIT
Description-Content-Type: text/markdown
License-File: LICENSE

# 数据收集

## 简介

> QuantDataCollector的目的是提供统一、稳定的数据接口，用户可以不用考虑数据获取问题，专注策略开发。

QuantDataCollector从各种数据源收集相关数据，并且可以选择缓存在本地，目前的覆盖的数据及数据源包括：

- baostock: Python库，提供股市、债券、货币、存款等数据。



## 使用

通过DataCollector类向外提供统一接口，以获取所有股票sz.399995的基本信息为例：

```python
import QuantDataCollector as qdc

data_collector = qdc()
error_code, data = data_collector.get_stock_data(["sz.399990", "sh.600000"],"2024-8-6",frequency='d')
print(data)
```

也可以对`data_collector`进行配置：

```python
from QuantDataCollector import cache_config, log_config
import QuantDataCollector as qdc

data_collector = qdc({"cache" : cache_config.NO_CACHE, "log": log_config.DEBUG_LOG})
error_code, data = data_collector.get_stock_data(["sz.399990", "sh.600000"],"2024-8-6",frequency='5')
print(data)
```
结果：
> {**'sz.399990'**: [{'date': '2024-08-06', 'time': '20240806093500000', 'code': 'sz.399990', 'open': '2525.4800', 'high': '2540.7400', 'low': '2525.4800', 'close': '2530.7500', 'volume': '36261300', 'amount': '271692864.0000', 'adjustflag': '3'},**...**, {'date': '2024-08-06', 'time': '20240806150000000', 'code': 'sz.399990', 'open': '2554.5200', 'high': '2556.4000', 'low': '2554.2300', 'close': '2555.8800', 'volume': '7076000', 'amount': '58778624.0000', 'adjustflag': '3'}], **'sh.600000'**: [{'date': '2024-08-06', 'time': '20240806093500000', 'code': 'sh.600000', 'open': '8.4300000000', 'high': '8.4500000000', 'low': '8.3900000000', 'close': '8.4000000000', 'volume': '1598400', 'amount': '13463248.0000', 'adjustflag': '2'}, ..., {'date': '2024-08-06', 'time': '20240806150000000', 'code': 'sh.600000', 'open': '8.2400000000', 'high': '8.2600000000', 'low': '8.2400000000', 'close': '8.2400000000', 'volume': '1320700', 'amount': '10887264.0000', 'adjustflag': '2'}]}



### 日志查看

通过`get_data_collector_info`接口查看日志路径，进而查看日志

```python
import QuantDataCollector as qdc

data_collector = qdc()
print(data_collector.get_data_collector_info())
```



### API接口

下面是自动生成的接口介绍

```
 
 |  get_all_share_code(self, day=None)
 |      获取所有股票代码
 |      
 |      获取交易日day时，股市上所有股票代码，不包括指数和其他。
 |      
 |      Args:
 |        day: String，交易日，如果不是交易日，会导致失败。可省略，默认为离今天最近的交易日。
 |      
 |      Returns:
 |        Number: 错误码，0表示成功，否则表示失败，1表示非交易日
 |        list: 内容为表示股票代码的字符串
 |      
 |      Raises:
 |        DataCollectorError:
 |  
 |  get_all_stock_code(self, day=None)
 |      获取所有证券代码(包括股票、指数和其他)
 |      
 |      获取交易日day时，股市上所有证券代码，包括股票、指数和其他。
 |      
 |      Args:
 |        day: String，交易日，如果不是交易日，会导致失败。可省略，默认为离今天最近的交易日。
 |      
 |      Returns:
 |        Number: 错误码，0表示成功，否则表示失败，1表示非交易日
 |        list: 内容为表示证券代码的字符串
 |      
 |      Raises:
 |        DataCollectorError:
 |  
 |  get_data_collector_info(self)
 |      获取关于数据收集器的一些信息，包括日志位置、数据来源等
 |  
 |  get_recent_trade_day(self, day=None)
 |      获取day之前最接近day的交易日
 |      
 |      获取当前日期之前，最近的交易日期
 |      
 |      Args:
 |        day: String，日期，格式为："2022-1-20"。如果省略，则day为运行时日期
 |      
 |      Returns:
 |        String: 离day最近的交易日
 |      Raises:
 |  
 |  get_stock_basic_data(self, stock_code)
 |      获取某证券的基本信息
 |      
 |      通过stock_code指定某证券，获取该股票的基本信息。主要包括：名称、上市日期、退市日期、证券类型、上市状态
 |      
 |      Args:
 |        stock_code: String，证券代码，比如"sh.600000"
 |      
 |      Returns:
 |        Number: 错误码，0表示获取成功
 |        dict: 字典
 |      
 |      Raises:
 |        DataCollectorError
 |  
 |  get_stock_data(self, stock_code_list, day=None, frequency='d')
 |      获取一组股票在某个交易日的数据
 |      
 |      获取股票代码在stock_code_list中的股票，在交易日day的数据，主要OHLC、成交量、成交额、换手率、市盈、市净、市销等
 |      
 |      Args:
 |        stock_code_list: list<String>，一组证券代码，比如["sh.600000"]
 |        day: 以字符串形式表示的日期，比如'2008-1-1'。默认为最新交易日
 |        frequency: String，数据类型：
 |            * 'm' = 月K
 |            * 'w' = 周K
 |            * 'd' = 日K
 |            * '5' = 5分钟K
 |            * '15' = 15分钟K
 |            * '30' = 30分钟K
 |            * '60' = 60分钟K
 |        
 |      Returns:
 |        Number: 错误码，0表示获取成功
 |        dict: key为股票代码，value为list，list中的每一项是一个dict，其中包含的key/value根据frequency有所不同：
 |                * 周/月k: ["date", "code", "open", "high", "low", "close", "volume", "amount", "adjustflag", "turn", "pctChg"],
 |                * 日k: ["date", "code", "open", "high", "low", "close", "preclose", "volume", "amount", "adjustflag", "turn", "tradestatus", "pctChg", "peTTM", "psTTM", "pcfNcfTTM", "pbMRQ","isST"]
 |                * 分钟k: ["date", "time", "code", "open", "high", "low", "close", "volume", "amount", "adjustflag"]
 |              其中date -> 日期，code -> 证券码， open -> 开盘价
 |                - date -> 表示数据对应日期，格式为YYYY-MM-DD
 |                - time -> 表示数据对应的具体时间，格式为YYYYMMDDHHMMSSsss
 |                - code -> 表示数据对应证券代码
 |                - open -> 表示开盘价
 |                - close -> 表示收盘价
 |                - preclose -> 表示前收盘价
 |                - high -> 表示最高价
 |                - low -> 表示最低价
 |                - volumn -> 表示成交量（累计 单位：股）
 |                - amount -> 表示成交额（单位：人民币元）
 |                - adjustflag -> 表示复权状态(1：后复权， 2：前复权，3：不复权
 |                - turn -> 表示换手率
 |                - tradestatus -> 表示交易状态(1：正常交易 0：停牌）
 |                - pctChg -> 表示涨跌幅（百分比）：日涨跌幅=[(指定交易日的收盘价-指定交易日前收盘价)/指定交易日前收盘价]*100%
 |                - peTTM -> 表示滚动市盈率：(指定交易日的股票收盘价/指定交易日的每股盈余TTM)=(指定交易日的股票收盘价*截至当日公司总股本)/归属母公司股东净利润TTM
 |                - pbMRQ -> 表示市净率：(指定交易日的股票收盘价/指定交易日的每股净资产)=总市值/(最近披露的归属母公司股东的权益-其他权益工具)
 |                - psTTM -> 表示市销率：(指定交易日的股票收盘价/指定交易日的每股销售额)=(指定交易日的股票收盘价*截至当日公司总股本)/营业总收入TTM
 |                - pcfNcfTTM -> 表示市现率：(指定交易日的股票收盘价/指定交易日的每股现金流TTM)=(指定交易日的股票收盘价*截至当日公司总股本)/现金以及现金等价物净增加额TTM
 |                - isST -> 表示是否ST股
 |      
 |      Raises:
 |        DataCollectorError:
 |      
 |      --------------------------------------------------------
 |      Override Notes:
 |        不限实现方式，为了性能，最好存储在数据库或者本地缓存
 |  
 |  get_stock_data_period(self, stock_code_list, start=None, end=None, frequency='d')
 |      获取一组股票在某个交易日的数据
 |      功能、参数、返回值与Raise都与get_stock_data相同
 |  
 |  get_stock_type(self, stock_code)
 |      获取证券类型
 |      
 |      获取code对应证券的类型
 |      
 |      Args:
 |        stock_code: String，证券代码，比如"sh.600000"
 |      
 |      Returns:
 |        Number: 错误码，0表示成功，否则表示失败
 |        String:
 |          '1'表示股票
 |          '2'表示指数
 |          '3'表示其他
 |      
 |      Raises:
 |        DataCollectorError:
 |  
 |  is_trade_day(self, day)
 |      判断day是否为交易日
 |      
 |      Args:
 |        day: String，需要查询的日期，格式为:"2021-3-23"
 |      
 |      Returns:
 |        bool: 是否为交易日
 |      
 |      Raise:
 |        DataCollectorError

```

## 架构

为了提供统一的接口，QuantDataCollector包采用了**工厂方法**。

对于不同的数据源，实现时都要继承`abstract_data_collector.py`中的`AbstractDataCollector`类，最终由`data_collector.py`提供统一接口。

详见：[架构](../../documentations/DataCollectorDocs/DataCollectorStructure.md)

## 数据源及其特点


### baostock

已经包装好的**股票数据拉取**Python库，数据覆盖

- 股票
- 公司业绩
- 货币
- 存款利率

优点：

- 使用简单

缺点：

- 服务由他人提供，已有收费趋势，可用性不高
