QAData 模块文档
概述
QAData 是 QUANTAXIS 的核心数据结构模块,提供了标准化的金融数据容器和处理方法。该模块定义了多种数据结构来处理不同类型的金融数据,包括股票、期货、指数、加密货币等,同时提供数据重采样、复权处理、技术指标计算等功能。
模块架构
核心数据结构
基础数据结构
base_datastruct.py: 数据结构基类
QADataStruct.py: 主要数据结构实现
paneldatastruct.py: 面板数据结构
专业数据结构
QABlockStruct.py: 板块数据结构
QAFinancialStruct.py: 财务数据结构
QAIndicatorStruct.py: 指标数据结构
QASeriesStruct.py: 时间序列数据结构
数据处理功能
data_resample.py: 数据重采样
data_fq.py: 复权处理
data_marketvalue.py: 市值计算
dsmethods.py: 数据结构方法
主要数据结构类
1. 股票数据结构
QA_DataStruct_Stock_day (股票日线)
from QUANTAXIS.QAData import QA_DataStruct_Stock_day
# 创建股票日线数据结构
stock_day = QA_DataStruct_Stock_day(data)
# 主要方法
stock_day.select_time('2020-01-01', '2020-12-31') # 时间筛选
stock_day.select_code(['000001', '000002']) # 代码筛选
stock_day.add_func(lambda x: x['close'] > 10) # 条件筛选
stock_day.pivot('close') # 数据透视
stock_day.to_qfq() # 前复权
stock_day.to_hfq() # 后复权
QA_DataStruct_Stock_min (股票分钟线)
from QUANTAXIS.QAData import QA_DataStruct_Stock_min
# 创建股票分钟数据结构
stock_min = QA_DataStruct_Stock_min(data)
# 数据重采样
stock_5min = stock_min.resample('5min') # 重采样为5分钟
stock_hour = stock_min.resample('60min') # 重采样为小时线
stock_day = stock_min.resample('D') # 重采样为日线
2. 期货数据结构
QA_DataStruct_Future_day (期货日线)
from QUANTAXIS.QAData import QA_DataStruct_Future_day
# 期货日线数据
future_day = QA_DataStruct_Future_day(data)
# 期货特有方法
future_day.get_contract_info() # 获取合约信息
future_day.calculate_margin() # 计算保证金
future_day.get_main_contract() # 获取主力合约
QA_DataStruct_Future_min (期货分钟线)
from QUANTAXIS.QAData import QA_DataStruct_Future_min
# 期货分钟数据
future_min = QA_DataStruct_Future_min(data)
# 期货分钟线特殊处理
future_min.resample_with_volume() # 考虑成交量的重采样
future_min.handle_night_session() # 夜盘时间处理
3. 指数数据结构
QA_DataStruct_Index_day/min (指数数据)
from QUANTAXIS.QAData import QA_DataStruct_Index_day, QA_DataStruct_Index_min
# 指数日线和分钟线
index_day = QA_DataStruct_Index_day(data)
index_min = QA_DataStruct_Index_min(data)
# 指数特有功能
index_day.calculate_index_return() # 计算指数收益率
index_day.get_constituents() # 获取成分股
4. 加密货币数据结构
from QUANTAXIS.QAData import (
QA_DataStruct_CryptoCurrency_day,
QA_DataStruct_CryptoCurrency_min
)
# 加密货币数据
crypto_day = QA_DataStruct_CryptoCurrency_day(data)
crypto_min = QA_DataStruct_CryptoCurrency_min(data)
# 24小时交易特殊处理
crypto_min.handle_24h_trading() # 处理24小时交易
5. 实时数据结构
from QUANTAXIS.QAData import QA_DataStruct_Stock_realtime
# 实时数据
realtime_data = QA_DataStruct_Stock_realtime(data)
# 实时数据特有方法
realtime_data.get_latest_price() # 获取最新价格
realtime_data.get_bid_ask() # 获取买卖盘
realtime_data.calculate_change() # 计算涨跌幅
数据处理功能
1. 数据重采样 (data_resample.py)
from QUANTAXIS.QAData.data_resample import (
QA_data_min_resample,
QA_data_day_resample,
QA_data_tick_resample
)
# 分钟线重采样
def resample_minute_data():
# 1分钟 -> 5分钟
data_5min = QA_data_min_resample(data_1min, '5min')
# 1分钟 -> 15分钟
data_15min = QA_data_min_resample(data_1min, '15min')
# 1分钟 -> 日线
data_day = QA_data_min_to_day(data_1min)
return data_5min, data_15min, data_day
# Tick数据重采样
def resample_tick_data():
# Tick -> 1分钟
data_1min = QA_data_tick_resample(tick_data, '1min')
# Tick -> 5分钟
data_5min = QA_data_tick_resample(tick_data, '5min')
return data_1min, data_5min
2. 复权处理 (data_fq.py)
from QUANTAXIS.QAData.data_fq import QA_data_stock_to_fq
# 前复权处理
def apply_forward_adjust():
# 原始数据
raw_data = get_stock_data('000001')
# 前复权
qfq_data = QA_data_stock_to_fq(raw_data, '000001', 'qfq')
# 后复权
hfq_data = QA_data_stock_to_fq(raw_data, '000001', 'hfq')
return qfq_data, hfq_data
3. 市值计算 (data_marketvalue.py)
from QUANTAXIS.QAData.data_marketvalue import QA_data_calc_marketvalue
# 计算市值
def calculate_market_value():
# 计算个股市值
market_value = QA_data_calc_marketvalue(
price_data=stock_data,
shares_data=shares_data
)
# 总市值和流通市值
total_mv = market_value['total_market_value']
float_mv = market_value['float_market_value']
return total_mv, float_mv
面板数据结构 (QAPanelDataStruct)
多维数据处理
from QUANTAXIS.QAData.paneldatastruct import QAPanelDataStruct
# 创建面板数据结构
panel_data = QAPanelDataStruct(data)
# 面板数据操作
panel_data.add_dimension('sector') # 添加维度
panel_data.group_by('industry') # 按行业分组
panel_data.apply_func(lambda x: x.mean()) # 应用函数
panel_data.cross_section('2020-01-01') # 横截面数据
财务数据结构 (QAFinancialStruct)
from QUANTAXIS.QAData.QAFinancialStruct import QA_DataStruct_Financial
# 财务数据结构
financial_data = QA_DataStruct_Financial(data)
# 财务指标计算
financial_data.calculate_roe() # 计算ROE
financial_data.calculate_debt_ratio() # 计算负债率
financial_data.get_financial_indicator() # 获取财务指标
financial_data.quarter_growth() # 季度增长率
指标数据结构 (QAIndicatorStruct)
from QUANTAXIS.QAData.QAIndicatorStruct import QA_DataStruct_Indicators
# 技术指标数据结构
indicator_data = QA_DataStruct_Indicators(data)
# 指标计算和管理
indicator_data.add_indicator('MA', period=20) # 添加移动平均
indicator_data.add_indicator('RSI', period=14) # 添加RSI
indicator_data.calculate_all() # 计算所有指标
indicator_data.get_signals() # 获取交易信号
数据结构方法 (dsmethods.py)
包装器函数
from QUANTAXIS.QAData.dsmethods import (
QDS_StockDayWarpper,
QDS_StockMinWarpper,
QDS_IndexDayWarpper,
concat,
from_tushare
)
# 使用包装器快速创建数据结构
stock_day = QDS_StockDayWarpper(raw_data)
stock_min = QDS_StockMinWarpper(raw_data)
index_day = QDS_IndexDayWarpper(raw_data)
# 数据连接
combined_data = concat([data1, data2, data3])
# 从Tushare数据转换
qa_data = from_tushare(tushare_data)
使用示例
完整的数据处理流程
import QUANTAXIS as QA
# 1. 获取原始数据
raw_data = QA.QA_fetch_stock_day_adv('000001', '2020-01-01', '2020-12-31')
# 2. 创建数据结构
stock_data = QA.QA_DataStruct_Stock_day(raw_data)
# 3. 数据处理
# 前复权
qfq_data = stock_data.to_qfq()
# 选择时间范围
filtered_data = qfq_data.select_time('2020-06-01', '2020-12-31')
# 添加技术指标
ma_data = filtered_data.add_func(lambda x: QA.MA(x['close'], 20))
# 4. 数据重采样
weekly_data = stock_data.resample('W')
# 5. 数据分析
returns = stock_data.add_func(lambda x: x['close'].pct_change())
volatility = returns.add_func(lambda x: x.rolling(20).std())
# 6. 数据导出
stock_data.to_csv('stock_data.csv')
stock_data.to_json('stock_data.json')
多标的数据处理
# 获取多只股票数据
codes = ['000001', '000002', '000858']
multi_data = QA.QA_fetch_stock_day_adv(codes, '2020-01-01', '2020-12-31')
# 创建数据结构
stock_panel = QA.QA_DataStruct_Stock_day(multi_data)
# 按代码分组处理
for code in codes:
single_stock = stock_panel.select_code(code)
# 进行单只股票的分析
ma20 = single_stock.add_func(lambda x: QA.MA(x['close'], 20))
# 横截面分析
latest_data = stock_panel.tail(1) # 最新数据
cross_section = latest_data.pivot('close') # 创建横截面
性能优化
1. 内存优化
# 使用生成器减少内存占用
def process_large_dataset(data):
for chunk in data.chunk(10000): # 分块处理
yield process_chunk(chunk)
# 及时释放不需要的数据
del unused_data
2. 计算优化
# 使用向量化操作
data['returns'] = data['close'].pct_change() # 向量化计算收益率
# 使用缓存
@lru_cache(maxsize=128)
def cached_calculation(data_hash):
return expensive_calculation(data)
最佳实践
数据一致性: 确保所有数据结构使用相同的时间索引格式
内存管理: 处理大数据集时注意内存使用,及时释放不需要的对象
类型检查: 在数据处理前进行数据类型和格式检查
异常处理: 对数据缺失和异常值进行适当处理
相关模块
QAFetch: 提供原始数据给QAData处理
QAIndicator: 技术指标计算,与QAData数据结构集成
QAUtil: 提供时间处理和数据转换工具
QAStrategy: 使用QAData结构进行策略回测
Last updated
Was this helpful?