问题描述
解决方案
PTrade中fq参数的作用
在PTrade量化交易平台中,fq参数主要用于历史行情获取函数(如get_history和get_price)中,用来指定数据复权选项。复权(Price Adjustment)是为了消除由于股票分红、送股、配股等除权除息事件导致的价格跳空缺口,从而保持价格走势的连续性。
根据PTrade API文档,fq参数支持以下几种选项:
'pre':前复权'post':后复权'dypre':动态前复权None:不复权(默认值)
不复权(None)与前复权(pre)的区别
1. 不复权(fq=None)
- 定义:获取的是股票在历史交易日当天的真实成交价格,不进行任何数学调整。
- 特点:当股票发生分红或送转时,K线图上会出现明显的“向下跳空缺口”。
- 应用场景:
- 真实成本计算:需要知道历史某一天买入股票时实际支付的金额。
- 撮合回测:在精细的tick级或日内回测中,模拟真实的挂单和成交价格。
- 财务指标计算:某些基于真实市值的财务指标计算。
2. 前复权(fq='pre')
- 定义:以当前最新价格为基准,将历史价格向下进行折算。即“保持现有价格不变,降低历史价格”。
- 特点:消除了除权除息带来的价格缺口,K线走势平滑连续。但历史价格可能会出现负数(如果分红非常多)。
- 应用场景:
- 技术指标计算:如计算均线(MA)、MACD、KDJ等。如果不复权,除权日的缺口会导致均线等指标出现严重失真,触发错误的买卖信号。
- 收益率计算:计算一段时间内的真实持有收益率。
- 机器学习模型训练:提供连续平滑的时间序列数据作为特征。
PTrade代码示例
在编写策略时,可以根据需求灵活选择复权方式:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 1. 获取不复权数据(默认)
# 适用于查看历史真实成交价
history_none = get_history(5, '1d', 'close', security_list=g.security, fq=None)
log.info('不复权收盘价:\n%s' % history_none)
# 2. 获取前复权数据
# 适用于计算均线等技术指标
history_pre = get_history(5, '1d', 'close', security_list=g.security, fq='pre')
log.info('前复权收盘价:\n%s' % history_pre)
# 计算5日均线(必须使用复权数据)
ma5 = history_pre['close'].mean()
log.info('5日均线价格:%s' % ma5)
总结建议
在绝大多数基于量价关系的技术分析策略(如双均线策略、突破策略)中,强烈建议将fq参数设置为'pre'(前复权)或'dypre'(动态前复权),以保证信号的准确性。而在需要核对历史真实账单或进行特定财务分析时,才使用None(不复权)。