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

PTrade量化交易中 handle_data 函数的参数有哪些?

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

问题描述

PTrade中handle_data函数的参数有哪些?

解决方案

在PTrade量化交易引擎中,handle_data 是处理盘中交易逻辑的核心必选函数。它在交易时间内按指定的周期频率(日线或分钟线)运行。该函数接收两个重要参数:contextdata

1. context 参数

context 是一个 Context对象,用于存放当前的账户及持仓等全局上下文信息。通过它,你可以获取策略运行时的各种状态。

主要包含的内容:

  • context.portfolio: 账户信息对象(Portfolio),包含当前可用资金(cash)、持仓总价值(positions_value)、总权益(portfolio_value)等。
  • context.portfolio.positions: 当前持仓字典,key为标的代码,value为Position对象(包含持仓量、成本价等)。
  • context.blotter.current_dt: 当前单位时间的开始时间(datetime对象),可用于获取当前回测或交易的精确时间。
  • context.previous_date: 前一个交易日。

2. data 参数

data 是一个 字典(dict),用于存放当前周期(日线策略为当天,分钟策略为这一分钟)的行情数据。

主要特点与结构:

  • Key: 标的代码(如 '600570.SS')。
  • Value: SecurityUnitData 对象,包含该标的在当前周期的基础行情数据。
  • 包含的属性: dt (时间)、open (开盘价)、close (收盘价)、price (最新价)、high (最高价)、low (最低价)、volume (成交量)、money (成交额)。
  • 注意: 为了加速,data 中的数据只包含通过 set_universe 设置的股票池中所订阅标的的信息。你可以通过 data[security]['close'] 的方式快速获取某个标的的当前收盘价。

代码示例

以下是一个简单的示例,展示如何在 handle_data 中使用这两个参数:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 1. 使用 data 参数获取当前价格
    current_price = data[g.security]['close']
    log.info('当前时间: %s, 最新价格: %s' % (context.blotter.current_dt, current_price))
    
    # 2. 使用 context 参数获取当前可用资金
    available_cash = context.portfolio.cash
    
    # 3. 使用 context 参数获取当前持仓
    current_position = context.portfolio.positions.get(g.security, None)
    amount = current_position.amount if current_position else 0
    
    # 简单的交易逻辑:如果有资金且未持仓,则买入
    if available_cash > current_price * 100 and amount == 0:
        order(g.security, 100)
        log.info('买入100股 %s' % g.security)

掌握 contextdata 的使用,是编写PTrade量化策略的基础。