自行车运营商 "为 "问题 - 页 13

 

西蒙。

"你的while循环没有找到任何票据.. ."

它没有 "可能 "找到历史库中的票据索引,它确实找到了,否则下面的函数就不会被执行。)


"一个池子的索引!=一个票据号码,我们以前不是经历过这个吗?"

现在让我澄清一下。

一个订单的票号是分配给一个订单的唯一票号,一旦请求被发送

一个订单位置号是一个订单在订单池 索引中的位置(必须理解),类似于一个数组


"为什么你期望已关闭的USDJPY订单在一个完全不同的池,即历史池中的相同位置结束?"

我不应该,因为它是一个独立的池子。

在我提出的代码中--

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }

显然是在从历史池中选择订单,对吗?至少这是我从文档中了解到的。另外,我最近试着在不同的货币对 上开了大约5个订单,关闭了一个,然后打开了EA,它仍然执行所有的功能,包括Print(OrderCloseTime());。


谢谢你。

 
WhooDoo22:

西蒙。

"你的while循环没有找到任何票据.. ."

它没有 "可能 "找到历史库中的票据索引,它确实找到了,否则下面的函数就不会被执行。)

你使用的哪些函数 使用了票号? 你的OrderSelects都是SELECT_BY_POS . . . POS的意思是POSition,所以我重复,你的while循环没有找到票,而是找到了订单池中 的索引


你从历史库中选择的是索引位置为i 的订单,你怎么知道 你刚刚关闭的订单是在i 的位置?你的i 值是USDJPY订单在订单池中的位置 ......这两个池子是完全独立的,没有任何形式的联系。
 

西蒙。

"你的while循环没有找到一张票,而是找到了订单池中 的一个索引。"

是的,我相信我理解这一点。这不应该是一个问题。


"这些池子是完全独立的,没有任何形式的联系。"

这一点可以理解,但OrderClose()函数的代码块似乎是按照它的意图工作。我将调整代码块以保存订单票号 的值,以便继续进行你想解决的问题。同意吗?

首先,我想问这个问题。为什么一个订单的历史库位号不会与它现在的库位号相同?我 相信这个 数字是一样的。


谢谢你。

 
WhooDoo22:

西蒙。

"你的while循环没有找到一张票,而是找到了订单池中 的一个索引。"

是的,我相信我理解这一点。这不应该是一个问题。


"这些池子是完全独立的,没有任何形式的联系。"

这一点是可以理解的,但OrderClose()函数代码块似乎是按照它的意图工作的。

对OrderClose()的调用没有改变,所以它应该仍然工作。


然而,这并不像预期的那样工作,因为这个概念有致命的缺陷......直到你明白为什么没有必要继续下去。

 if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))


   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }
 
WhooDoo22:


首先,我想问这个问题。为什么一个订单的历史仓位号与现在的仓位号不一样?我 相信这个数字是一样的。


你有多少未结订单?你在账户历史标签中的历史上有多少订单?
 

西蒙。

'账户历史'包含五十六个。

'交易'(未结订单)包含三个。


我在等着你写,"我想它确实有效WhooDoo。:)"

Hooold on, I checked the returnedPrint() function ticket number and it returned a different ticket number than the USDJPY order.

不起作用。证实了这一点。不过我很高兴我尝试了,这个教训值得讨论。

谢谢你。

 
WhooDoo22:

西蒙。

'账户历史'包含五十六个。

'交易'(未结订单)包含三个。

如果你创建一个新的USDJPY订单并运行你的代码,它发现这个新的订单,我 将有一个3的值,当你关闭它时,你的USDJPY订单将在历史库中占据什么位置? 已经有56个,所以位置3已经被占用,位置4,5,6,7也是如此。. 55
 

西蒙。

57.

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      int usdjpy_ticket_number=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(usdjpy_ticket_number,SELECT_BY_TICKET,MODE_TRADES)==true)
      
      Print("Ticket number for USDJPY = ",usdjpy_ticket_number);
      Print("Order close time = ",OrderCloseTime());
     }

谢谢你。

附加的文件:
 
WhooDoo22:

西蒙。

57.

谢谢你。

是3,那么如何在历史库中选择位置3的订单来获得位置57的订单??
 

西蒙。

它不会的。我最近重新发现了这一点。

谢谢你。