任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 784

 
Leonid123456:

为本EA最后))。事实上,它起作用了,是最后一个))。专家顾问是为了测试...因此,为几种货币和手动交易(一起)工作还没有设想到......

你能不能给我一些提示,让我知道如何正确地做这件事,那就太好了......

再次感谢。

如果你需要,你应该区分市场订单和挂单。 你遇到的第一个订单,从所有标准(符号、魔术师、类型)来看,通常是最新鲜的。 但最好也看看开盘时间,这样它肯定不会更年轻。

在测试器中,你可以立即选择

OrderSelect(OrdersTotal()-1,SELECT_BY_POS))

如果系统中没有挂单,一切都会正常工作。但如果既有挂单又有市价订单,这就行不通了,更不用说真正的工作了。

 
Leonid123456:

为本EA最后))。事实上,它起作用了,是最后一个))。这个EA是用来测试的...因此,为几种货币和手动交易(一起)工作还没有设想到......

你能不能给我一些提示,让我知道如何做得正确,那就太好了......

再次感谢。

不写不必要的东西是比较正确的。你为什么要加入嵌套循环?毕竟,你需要的一切都可以在一个循环中完成,只需选择一个订单。

if(New_Bar)
{
OrderSend(Symbol(),OP_BUYSTOP,Lotpers,Ask+step,100,0,0,NULL,MagicNumber,0,DarkTurquoise);
OrderSend(Symbol(),OP_SELLSTOP,Lotpers,Bid-step,100,0,0,NULL,MagicNumber,0,Yellow);
}

 for(int b=0; b<OrdersTotal(); b++)
  {
   if(OrderSelect(b, SELECT_BY_POS) && OrderSymbol() == _Symbol && OrderMagicNumber() == MagicNumber)
    {
     lastlot = OrderLots();
   // Здесь надо в переменную засунуть тикет выбранного ордера
     if(OrderType() == OP_BUYSTOP||OrderType() == OP_BUY)
      orderprisebuy = OrderOpenPrice();
   
      if(OrderType() == OP_SELLSTOP||OrderType() == OP_SELL)
       orderprisecell = OrderOpenPrice(); 
         
        SL_VirtualCell = orderprisecell+step1*Point;
        SL_VirtualBuy = orderprisebuy-step1*Point;

                          /*  if(Mas_Tip[0] >0|| Mas_Tip[1] >0)
                                               {
if (New_Bar&&/*valsar1<Ask &&  osma0>0&&osma1<0    /*&& Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_BUY,NormalizeDouble( lastlot*Marti,2),Ask,100,0,0,NULL,MagicNumber,0,DarkTurquoise);

if (New_Bar&& /*valsar1>Bid && osma0<0&&osma1>0    /* && Volume[1]>VolumeFiltr)

OrderSend(Symbol(),OP_SELL,NormalizeDouble( lastlot*Marti,2),Bid,100,0,0,NULL,MagicNumber,0,Yellow);       
         
}*/

CheckEvents(MagicNumber); // Вот здесь теряется выбранный ордер при переборе ордеров в вызванной функции

/*if ( eventSellClosed_SL >0|| eventBuyClosed_SL >0)
{        as();
                

 }
  /* ///   if ( eventBuyClosed_TP > 0 )
   //     Alert( Symbol(), ": Buy-позиция закрыта по ТейкПрофиту!" );

   */
    if(eventBuyStopOpened > 0)
     {
      OrderSend(Symbol(),OP_SELLSTOP,NormalizeDouble( Lotpers,5),orderprisecell,0,0,0,NULL,MagicNumber,0,clrKhaki); 
 
      if (OrderType() == OP_SELL)
       OrderClose(OrderTicket(),OrderLots(), Ask, 3,clrIvory );  // Здесь может быть чужой OrderTicket() Возможны и другие аналогичные потери
     }//завершение блока if(eventBuyStopOpened > 0)
 ///

  if(eventSellStopOpened > 0)
  {
  OrderSend(Symbol(),OP_BUYSTOP,NormalizeDouble( Lotpers,5),orderprisebuy,0,0,0,NULL,MagicNumber,0,clrPlum);
 
   if (OrderType() == OP_BUY)
    OrderClose(OrderTicket(),OrderLots(), Bid, 3,clrIvory );  
  }//завершение блока if(eventSellStopOpened > 0)
 }//завершение блока if(OrderSelect(b
}//завершение блока for(int b=0


我没有设法进入你有多行评论 的那个地方。在我看来,那里可能有一个编译错误......。请注意我在代码中的评论。

 
Zhunko:
这有什么意义?
谢谢你的帮助!
 
AlexeyVik:

不要写不必要的东西。你为什么要加入嵌套循环?因为你需要的一切都可以在一个循环中完成,只需选择一个订单。


我没能理解你有多行注释的那个地方。我有一种感觉,那里可能有一个编译错误......请注意我在代码中的评论。

没有错误,但建议检查OrderSend.OrderClose.和OrderDelete 函数。

应该检查'OrderSend'的返回值

谢谢你的评论。

 

使用"ArrayMinimum"寻找阵列中 "ZigZag "指标的最小值。

我是否可以将搜索设置为忽略空值,或者我必须使用一个循环来寻找空值?

 
我搞不清楚如何编码。如果最后一个姿势无利可图,我需要EA等待一定的时间。你有什么想法吗?
 
Forexman77:

使用"ArrayMinimum " 寻找阵列中 "ZigZag "指标的最小值。

我能否将搜索设置为忽略空值,或者我必须使用循环来寻找空值?

最有可能的是,你将不得不使用一个循环
 
Vinin:
可能要用一个循环
谢谢你!
 

我们如何找到最大和最小之间最深的修正?最大和最小值是我们已知的,用iHighest和iMessage找到它们并不是问题。

如果我们使用iHighest和iLowest,我们有时会发现接近极值的情况,因为它并不总是如此,如图所示。一般来说,我们需要ABC形成的识别。

我试着用ZigZag来解决这个问题,但它并没有带来准确的点击率。

е.

 

Forexman77:

我们如何找到最大和最小之间最深的修正?最大和最小值是我们已知的,用iHighest和iMessage找到它们并不是问题。

如果我们使用iHighest和iLowest,我们有时会发现接近极值的情况,因为它并不总是如此,如图所示。 一般来说,我们需要ABC形成的识别。

我试着用ZigZag来解决这个问题,但它并没有带来准确的点击率。

如果确定在什么深度上应该寻求,一切都会变得容易。你可以使用 CopyLowArrayMinimum()来代替iLowest