OrderClosePrice returns 与历史池不同的价格

OrderClosePrice returns a price different from the history pool

当用 api 关闭一个(选定的)现有订单时,在那一刻我试图获得收盘价,有时(可能是十分之一)returns 价格不同来自我在历史记录池中看到的那个。

代码是这样的:

RefreshRates();

if(type == OP_BUY)
{
    currentPrice = NormalizeDouble(MarketInfo(symbol, MODE_ASK), vdigits);
}
else if(type == OP_SELL)
{
    currentPrice = NormalizeDouble(MarketInfo(symbol, MODE_BID), vdigits);
}

if (meetsRequirementsToClose(currentPrice))
{
    desiredPrice = currentPrice;


    // And then....

    bool retVal = OrderClose(OrderTicket(), numLots, desiredPrice, currSlippage);
    if (retVal)
    {
        this.reportClosePrice (myOrderId, OrderClosePrice(), desiredPrice, numLots, "closing");
        return true;
    }
}

之前使用池 MODE_TRADES 中的 SELECT_BY_POS 选择了订单。

有人知道怎么解决吗?

已编辑:

我们的经纪人有时会尊重要求的价格......有时不会。

尽管我们必须更换更可靠的经纪人,但我们不能依赖所要求的价格。

我们看到的偏差大于一百个点,无论价格比真实价格好还是差。

正如@TheLastStark 所建议的那样,问题已解决,在收盘前通过订单号选择订单。

最终代码如下:

RefreshRates();
if(type == OP_BUY)
{
    currentPrice = NormalizeDouble(MarketInfo(symbol, MODE_ASK), vdigits);
}
else if(type == OP_SELL)
{
    currentPrice = NormalizeDouble(MarketInfo(symbol, MODE_BID), vdigits);
}

if (meetsRequirementsToClose(currentPrice))
{
    desiredPrice = currentPrice;


    // And then....
    int tickNum = OrderTicket();
    bool retVal = OrderClose(OrderTicket(), numLots, desiredPrice, currSlippage);
    if (retVal)
    {
        if (OrderSelect(tickNum,SELECT_BY_TICKET,MODE_HISTORY)== false)
        {
            //this.logger.error ("Error selecting the order");
             this.reportClosePrice (myOrderId, -1, desiredPrice, numLots, "closing");
        }
        else
        {
            this.reportClosePrice (myOrderId, OrderClosePrice(), desiredPrice, numLots, "closing");
        }
        return true;
    }
}