【PTrade】PTrade如何查询持仓成本、可卖数量和浮动收益?get_position()示例

本方案由 EasyQuant AI量化助手 提供。

问题背景

策略实盘中,下单前必须了解当前是否持仓、持仓成本是多少、可卖数量是否充足。PTrade 可使用 get_position() 查询单只股票持仓,使用 get_positions() 批量查询账户持仓。PTrade API 文档

查询单只股票持仓

def initialize(context):
    g.security = "510300.SS"
    set_universe([g.security])


def handle_data(context, data):
    security = g.security
    position = get_position(security)

    if position is None or position.amount <= 0:
        log.info("%s 当前没有持仓" % security)
        return

    current_price = data[security].price
    cost_price = position.cost_basis
    profit_rate = current_price / cost_price - 1

    log.info(
        "代码=%s,持仓=%s,可卖=%s,成本=%.3f,现价=%.3f,浮动收益=%.2f%%"
        % (
            security,
            position.amount,
            position.enable_amount,
            cost_price,
            current_price,
            profit_rate * 100
        )
    )

查询全部持仓

def print_all_positions():
    positions = get_positions()

    if not positions:
        log.info("当前账户没有持仓")
        return

    for stock, position in positions.items():
        log.info(
            "代码=%s,持仓=%s,可卖=%s,成本=%.3f"
            % (
                stock,
                position.amount,
                position.enable_amount,
                position.cost_basis
            )
        )

用可卖数量控制卖出

def sell_position(security):
    position = get_position(security)

    if position is None:
        log.info("%s 无持仓,无法卖出" % security)
        return

    if position.enable_amount <= 0:
        log.info("%s 无可卖数量,可能受T+1限制" % security)
        return

    order_id = order_target(security, 0)

    if order_id:
        log.info("%s 卖出委托已提交:%s" % (security, order_id))
    else:
        log.info("%s 卖出委托提交失败" % security)

注意事项

  • amount 是总持仓数量,enable_amount 是当前可卖数量。

  • A 股当天买入的股票通常不能当天卖出,因此不能只用总持仓判断。

  • cost_basis 是持仓成本价,可用于计算持仓收益率。

  • 查询到持仓不代表订单已经全部成交,实盘还应结合订单和成交信息判断。

总结

PTrade 查询持仓的核心是 get_position()get_positions()。在买卖前使用持仓成本、可卖数量和当前价格做校验,可降低重复下单和卖出失败的概率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值