Пример #1
0
def test_close_position_error():
    """
    测试关闭头寸出错的情况
    """
    flag = []

    def onClosePositionError(order, errorId, errorMsg, position=None):
        flag.append([order, errorId, errorMsg, position])

    trader = Trader()
    trader.bind('onClosePositionError', onClosePositionError)
    # 创建一个头寸并关闭它
    openOrder = trader.openPosition(getDefaultInstrumentId(), 'buy', 1)
    position = openOrder.position
    trader.onPositionOpened(openOrder, position)
    assert position.state == 'open'
    closeOrder = trader.closePosition(position.id)
    position = ModelPosition.objects.get(id=position.id)
    # 模拟头寸创建失败事件
    errorId = -1
    errorMsg = u'测试'
    trader.onClosePositionError(closeOrder, errorId, errorMsg, position)
    assert closeOrder.state == 'error'
    assert closeOrder.finishTime is not None
    assert closeOrder.errorId == errorId
    assert closeOrder.errorMsg == errorMsg
    assert position.state == 'open'
    assert position.closeTime is None

    # 检查事件正常传递
    assert len(flag) == 1
    assert flag[0][0] == closeOrder
    assert flag[0][1] == errorId
    assert flag[0][2] == errorMsg
    assert flag[0][3] == position