EA混合买入和卖出订单 - 页 2

 

在不知道整个EA和你如何使用它的情况下,我们只能猜测出问题所在。假设它正在选择一个正确的订单来通过这个语句。

while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}

它不可能获得通过。

if ((orderType == OP_BUY || orderType == OP_BUYSTOP)) {

如果它的Op_Sell。除非你在同一个符号的多个图表上有这个东西。

看到你在使用一个有争议的while循环。这可能是某种形式的快速制单器。

我最后的猜测。选定的订单 在订单类型检查后发生变化 :)

其他的,我建议你像Raptor一样,利用大量的打印语句。

 
  1. 选定的订单 在orderSelect之后不能改变。
  2.  for(cnt = total-1; cnt >= 0; cnt--)  {
          while (!OrderSelect(cnt, SELECT_BY_POS)) {Sleep(500);}
    如果orderSelect失败,它将持续失败,你将有一个无限循环。如果在你更新你的订单时,另一个图表上有几个订单关闭,那么下一次迭代的选择将失败。非常危险。
 

我已经打印了Ticket号码,但它与OrderType()不匹配。


如果选择的订单 类型是OP_BUY,那么正确的if将被处理,但在我的OrderModify(...)调用中,我把OrderTicket()作为第一个参数传递,但它是其他订单的票据。


有什么想法吗?

 
dvarrin:

有什么想法吗?

也许你试图修改一个已经关闭的订单?你没有指定你的交易池。

OrderSelect( int index, int select, int pool=MODE_TRADES) 
MODE_TRADES (默认)- 从交易池中选择订单(已建和待建订单),

MODE_HISTORY - 从历史库中选择订单(已关闭和已取消的订单)。


	          
 
RaptorUK:

也许你正试图修改一个已经关闭的订单? 你没有指定一个你正在选择交易的池。

MODE_TRADES (默认)- 从交易池中选择订单(已开仓和挂单)。

MODE_HISTORY - 从历史库中选择订单(已关闭和已取消的订单)。


我也试过了,但它没有改变任何东西。似乎我必须存储我想使用的所选订单 的所有数据。


int ticket=0;

双倍SL=0.0。

OrderSelect(cnt, ...)。

ticket = OrderTicket()。

SL = OrderStoploss()。

如果(OrderType() == OP_BUY){


}


...


为什么会这样呢?我不明白我的代码有什么问题,以至于OrderTicket()没有对应OrderType()所指的同一订单。

 
dvarrin:

我已经打印了Ticket号码,但它与OrderType()不匹配。


如果选择的订单是OP_BUY类型,正确的if将被处理,但在我的OrderModify(...)调用中,我把OrderTicket()作为第一个参数传递,但它是一个其他订单的票据。

它是顺序中的下一个订单,还是顺序中的上一个订单?
[删除]  

orderType = OrderType()

改为

int orderType = OrderType(); 并删除原声明。

 
forexCoder:

orderType = OrderType()

改为

int orderType = OrderType(); 并删除原声明。


OrderType是可以的。只是OrderTicket()不是正确订单的票据。
 

我鼓励你找出导致你的问题的原因,而不是围绕它进行编码 ......

软件工程是关于解决问题的,这是我们学习和提高的方式。 从周六开始,我已经第三次尝试为一个与Fibs有关的特殊问题编码了,我快成功了。仔细使用Print()函数 有很大的帮助 ......

 
dvarrin:

OrderType是可以的。是OrderTicket()不是正确订单的票。

int OrderType = OrderType() 是不确定的,一个可能隐藏了另一个(局部声明隐藏了全局,没有错误。

int orderType = OrderType()