QIFIAccount icon indicating copy to clipboard operation
QIFIAccount copied to clipboard

卖出委托只有部分成交会报错

Open zhongjyyy opened this issue 4 years ago • 0 comments

  1. 卖出委托,部分成交执行make_deal 报找不到字段coeff错
  2. 卖出委托 部分成交后(未结算)持仓的状态量值问题
    assert pos.volume_long == amount - part_deal  # 1000 - 300 股
    assert pos.volume_long_his == amount - part_deal  # 1000 - 300股
    assert pos.volume_long_today == -amount  # 当日委托卖出1000股
    assert pos.volume_long_frozen_today == amount  # 冻结 1000 股
  1. 卖出委托部分成交结算的状态量问题 根据 qa_position 中 settle 函数,执行settle后,被直接按卖出委托全部成功处理持仓量变量(实际只成交了部分)
    assert pos.volume_long == amount - part_deal  # 1000 - 300 股
    assert pos.volume_long_his == amount - part_deal  # 1000 - 300股
    assert pos.volume_long_today == 0 # 重置
    assert pos.volume_long_frozen_today == 0  # 重置
  1. 测试代码
def test_part_sell():
    code, price, amount = '000001', 10, 1000
    part_deal = 300
    acc: QIFI_Account = QIFI_Account("x4", "x4")
    acc.initial()
    r = acc.send_order(code, amount=amount, price=price, towards=ORDER_DIRECTION.BUY).copy()
    acc.make_deal(r)
    pos: QA_Position = acc.positions.get(code)
    volume_his = pos.volume_long_his
    print("建仓买入", pos.hold_detail)
    assert pos.volume_long_his == 0
    assert pos.volume_long == amount
    assert pos.volume_long_today == amount
    assert pos.volume_long_frozen_today == 0
    acc.settle()
    print("买入结算后", pos.hold_detail)
    assert pos.volume_long_his == amount
    assert pos.volume_long == amount
    assert pos.volume_long_today == 0
    assert pos.volume_long_frozen_today == 0
    r = acc.send_order(code, amount=amount, price=price, towards=ORDER_DIRECTION.SELL).copy()
    r['volume_left'] = part_deal
    acc.make_deal(r)
    print("卖出委托部分成交后", pos.hold_detail)
    assert pos.volume_long == amount - part_deal  # 1000 - 300 股
    assert pos.volume_long_his == amount - part_deal  # 1000 - 300股
    assert pos.volume_long_today == -amount  # 当日委托卖出1000股
    assert pos.volume_long_frozen_today == amount  # 冻结 1000 股
    acc.settle()
    print("结算后", pos.hold_detail)
    assert pos.volume_long == amount - part_deal
    assert pos.volume_long_his == amount - part_deal
    assert pos.volume_long_today == 0
    assert pos.volume_long_frozen_today == 0

zhongjyyy avatar Jul 05 '20 15:07 zhongjyyy