{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
我最近提出了重开订单的问题。我以为我已经解决了问题,因为一个星期以来,一切工作都非常顺利。但今天我遇到了一个类似的问题,只是在打开时。
在Finam上有非常多的订单,在Otkritie上有9个订单......尽管在所有情况下都应该只有一个订单开盘。
下面是EA的一个代码片断
{
Coment="Open Sell "+string(OpenOrders+1);
ret=OpenSellPosition(_Symbol,volume,Coment,Sleeppage,Filling);
}
if(ret)
{
OpenOrders++;
PriceLastOpen=price;
}
bool OpenSellPosition(string symbol, double volume, string comment="", ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK)
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
即我们可以从代码中看到,如果操作成功,变量OpenOrders 增加,最初等于0
如果它高于0,就不应该再开立订单,而是用注释Order1开立整堆的订单。
我 在打开订单 的函数中检查 是否有积极的回应,以及是否已经收到了订单票据,但由于某些原因,这个函数返回错误,尽管订单实际上已经设定。
你能解释一下问题出在哪里,如何解决这个问题吗?
坏的外汇遗产。
你应该检查结果。秩序。
如果下了订单,这并不意味着交易已经完成。
坏的外汇遗产。
我们必须去看看。秩序。
如果下了订单,这并不意味着交易已经被执行。
我想,关于交易的信息还没有到来。这里(用红色 标出)你是在依靠运气。她是一位任性的女士 :-))
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
我想,关于交易的信息还没有到来。这里(用红色 标出)你是在依靠运气。她是一位任性的女士 :-))
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
你需要记录所有的交易。例如,像这样。
首先,在 "头 "中,我们连接CTrade交易类。
CTrade m_trade; // trading object
而这里是一个购买操作的例子。
{
if(m_trade.ResultDeal()==0)
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
所以你可以得到两个错误:第一层--操作没有通过基本检查,第二层--交易票据的检查。
然后,如果有问题,你可以用日志来找出问题。
补充:以上是对SYNC操作模式的真实情况。
现在,这里的大师们也会教你))。
Объясните что не так, как решить данную проблему?
以你的经验,在这里问这种问题是不体面的。
你需要记录所有的交易。例如,像这样。
首先,在 "头 "中,我们连接CTrade交易类。
CTrade m_trade; // trading object
而这里是一个购买操作的例子。
{
if(m_trade.ResultDeal()==0)
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
所以你可以得到两个错误:第一层--操作没有通过基本检查,第二层--交易票据的检查。
然后,如果有问题,你可以用日志来找出问题。
补充:以上是对SYNC操作模式的真实情况。
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
你需要记录所有的交易。例如,像这样。
首先,在 "头 "中,我们连接CTrade交易类。
CTrade m_trade; // trading object
而这里是一个购买操作的例子。
{
if(m_trade.ResultDeal()==0)
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
else
Print("Buy -> true. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
}
else
Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
", description of result: ",m_trade.ResultRetcodeDescription());
所以你可以得到两个错误:第一层--操作没有通过基本检查,第二层--交易票据的检查。
然后,如果有问题,你可以用日志来找出问题。
补充:以上是对SYNC操作模式的真实情况。
我最近提出了一个关于重开订单的话题。我以为我已经解决了这个问题,因为一个星期以来一切工作都非常顺利。但今天我遇到了一个类似的问题,只是在打开时。
在Finam上有很多订单,在Otkritie上有9个订单......尽管在所有情况下都应该只有一个订单开盘。
下面是EA的一个代码片断
{
Coment="Open Sell "+string(OpenOrders+1);
ret=OpenSellPosition(_Symbol,volume,Coment,Sleeppage,Filling);
}
if(ret)
{
OpenOrders++;
PriceLastOpen=price;
}
bool OpenSellPosition(string symbol, double volume, string comment="", ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK)
{
MqlTradeRequest Request;
MqlTradeResult Results;
ZeroMemory(Request);
ZeroMemory(Results);
Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
Request.action=TRADE_ACTION_DEAL;
Request.type=ORDER_TYPE_SELL;
Request.symbol=symbol;
Request.volume=volume;
Request.deviation=deviation;
Request.comment=comment;
Request.type_filling=filling;
bool res=false;
res=OrderSend(Request,Results);
if(res)
{
if(Results.deal>0) return(true);
else return(false);
}
return(false);
}
即我们可以从代码中看到,如果操作成功,变量OpenOrders 增加,最初等于0
如果它高于0,就不应该再开立订单,而是用注释Order1开立整堆的订单。
我 在打开订单 的函数中检查 是否有积极的回应,以及是否已经收到了订单票据,但由于某些原因,这个函数返回错误,尽管订单实际上已经设定。
解释一下问题出在哪里,如何解决这个问题?