🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

PTrade量化交易中fq参数有什么用?不复权与前复权的区别解析

ptrade | 发布时间: 2026/6/1
以下内容由 EasyQuant 生成。

问题描述

PTrade中fq参数用于什么,不复权和前复权有什么区别?

解决方案

PTrade中fq参数的作用

在PTrade量化交易平台中,fq参数主要用于历史行情获取函数(如get_historyget_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(不复权)。