Skip to content

DataStruct _base 模块

行情数据结构核心基类,提供统一的数据结构和操作接口。

模块结构

_base.py

QuotationDataStructBase

行情数据结构抽象基类,定义统一的行情数据接口。

继承关系

QuotationDataStructBase (ABC)
    ├── QuotationIndicatorsMixin (统计指标)
    ├── QuotationOperationsMixin (数据操作)
    └── QuotationIOSMixin (序列化 IO)

MRO (Method Resolution Order):

  1. 子类 (如 StockDayData)
  2. Mixin 类
  3. 基类 (QuotationDataStructBase)

初始化参数

python
from FQData.DataStruct import QuotationDataStructBase

class MyDataStruct(QuotationDataStructBase):
    def resample(self, level):
        pass
参数类型默认值说明
datapd.DataFrame-DataFrame 格式的行情数据
dtypestr-数据类型标识 (如 'stock_day', 'index_min')
if_fqstr'bfq'复权类型 ('bfq'-不复权, 'qfq'-前复权, 'hfq'-后复权)
market_typestrNone市场类型
frequencestrNone数据频率

属性

基本属性

属性类型说明
datapd.DataFrame原始 DataFrame
dtypestr数据类型
if_fqstr复权类型
market_typestr市场类型
frequencestr数据频率

价格属性

属性类型说明
openpd.Series开盘价
highpd.Series最高价
lowpd.Series最低价
closepd.Series收盘价
volume / volpd.Series成交量
amountpd.Series成交额
pricepd.Series均价 (OHLC 平均)

索引属性

属性类型说明
indexpd.MultiIndex数据索引 (date, code)
codepd.Index证券代码列表
datepd.DatetimeIndex交易日期
datetimepd.DatetimeIndex交易时间
dictsdict字典格式数据

便捷属性

属性类型说明
lenint数据长度
splitsList按证券代码拆分列表
split_dictsdict拆分为 code:datastruct 字典

方法

创建与转换

方法返回值说明
new(data, dtype, if_fq)QuotationDataStructBase创建新实例
reverse()QuotationDataStructBase反转数据
to_df()pd.DataFrame转换为 DataFrame
to_list()list转换为列表
to_numpy()np.ndarray转换为 numpy 数组
to_dict(orient)dict转换为字典

数据操作

方法说明
__add__(other)合并数据,去重
__sub__(other)移除 other 中的数据
__getitem__(key)支持切片访问
__iter__()行迭代器
__len__()数据长度
validate()验证数据有效性

分组与聚合

方法说明
groupby(by, level)分组操作
apply(func, *args)应用函数
add_func(func, *args)按证券分组应用函数
agg(func)聚合函数
aggregate(func)聚合函数 (别名)

查询

方法说明
query(context)查询数据表达式
find_bar(code, time)查找指定时间和代码的 bar
get_dict(time, code)获取指定时间和代码的字典数据

迭代器

方法返回值说明
iterrows()Iterator行迭代器
items()Iterator列迭代器
itertuples()Iterator元组迭代器

生成器属性

属性类型说明
panel_genGenerator面板数据迭代器
bar_genGeneratorK 线迭代器
security_genGenerator证券代码迭代器

抽象方法

方法返回值说明
resample(level)QuotationDataStructBase重采样 (子类必须实现)

使用示例

创建数据结构

python
import pandas as pd
from FQData.DataStruct import QuotationDataStructBase

df = pd.DataFrame({
    'open': [10.0, 10.5, 10.3],
    'high': [10.8, 10.9, 10.7],
    'low': [9.8, 10.2, 10.1],
    'close': [10.5, 10.6, 10.4],
    'volume': [1000000, 1200000, 1100000]
}, index=pd.MultiIndex.from_tuples([
    ('2024-01-01', '600000'),
    ('2024-01-02', '600000'),
    ('2024-01-03', '600000'),
], names=['date', 'code']))

class StockDayData(QuotationDataStructBase):
    def resample(self, level):
        pass

stock = StockDayData(df, dtype='stock_day', if_fq='qfq')
print(stock)
# < StockDayData with 1 securities >

数据操作

python
# 切片
subset = stock[:2]

# 合并
combined = stock1 + stock2

# 移除
result = stock_all - stock_subset

# 反转
reversed_data = stock.reverse()

属性访问

python
print(stock.open)
print(stock.high)
print(stock.low)
print(stock.close)
print(stock.volume)
print(stock.code)
print(stock.date)

查询

python
# 表达式查询
result = stock.query('close > 10.5')

# 查找 bar
bar = stock.find_bar('600000', '2024-01-01')

# 获取字典
data = stock.get_dict('2024-01-01', '600000')

Mixin 类

QuotationIndicatorsMixin

统计指标混入类,提供指标计算功能。

QuotationOperationsMixin

数据操作混入类,提供数据操作功能。

QuotationIOSMixin

序列化 IO 混入类,提供序列化功能。


序列化

Pickle 支持

python
import pickle

# 序列化
with open('stock.pkl', 'wb') as f:
    pickle.dump(stock, f)

# 反序列化
with open('stock.pkl', 'rb') as f:
    stock = pickle.load(f)

注意: @lru_cache 装饰的属性在序列化后缓存会失效,反序列化后需要调用 _init_subclass() 重新初始化。


相关文档