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;
}
}
当用 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;
}
}