微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OrderClosePrice返回不同​​于历史记录池的价格

如何解决OrderClosePrice返回不同​​于历史记录池的价格

当使用api关闭一个(选定的)现有订单时,在那一刻我尝试获取收盘价,有时(也许十分之一)返回的价格与我在历史记录池中看到的价格不同

代码是这样的:

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(),"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,"closing");
        }
        else
        {
            this.reportClosePrice (myOrderId,OrderClosePrice(),"closing");
        }
        return true;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。