Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 784

 
Leonid123456:

para este último EA)). Na verdade, funcionou. Foi o último)). O consultor especializado é para testes... Portanto, o trabalho para várias moedas e o comércio manual (juntos) ainda não está previsto...

Pode me dar algumas dicas para o futuro, seria bom saber como fazê-lo corretamente...

Mais uma vez, obrigado.

Se você precisar, você deve distinguir uma ordem de mercado de uma pendente. A primeira que você encontrar, por todos os critérios (símbolo, mágico, tipo) é geralmente a mais recente. Mas seria melhor olhar também para o momento da abertura, para que certamente não fosse mais jovem.

No testador você pode escolher imediatamente

OrderSelect(OrdersTotal()-1,SELECT_BY_POS))

Se o sistema não tiver nenhuma ordem pendente, tudo funcionará bem. Mas se houver ordens pendentes e de mercado, isto não vai funcionar, sem mencionar o trabalho real.

 
Leonid123456:

para este último EA)). Na verdade, funcionou. Foi o último)). Este EA é para testes... Portanto, o trabalho para várias moedas e o comércio manual (juntos) ainda não está previsto...

Pode me dar algumas dicas para o futuro, seria bom saber como fazê-lo corretamente...

Mais uma vez, obrigado.

É mais correto não escrever coisas desnecessárias. Por que você colocou laços aninhados? Afinal de contas, tudo o que você precisa pode ser feito em um loop com uma seleção de pedidos.

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


Eu não consegui entrar naquele lugar onde você tem comentários de várias linhas. Algo me pareceu que poderia haver ali um erro de compilação. Preste atenção aos meus comentários no código.

 
Zhunko:
Qual é o objetivo?
obrigado por sua ajuda!
 
AlexeyVik:

Não escreva coisas desnecessárias. Por que você colocou laços aninhados? Porque tudo o que você precisa pode ser feito em um loop com uma seleção de pedidos.


Eu não consegui entender aquele lugar onde você tem comentários de várias linhas. Algo me pareceu que poderia haver ali um erro de compilação. Preste atenção aos meus comentários no código.

Não há erros, mas há uma sugestão para verificar as funçõesOrderSend.OrderClose. eOrderDelete

valor de retorno de 'OrderSend' deve ser verificado .

Obrigado por seus comentários.

 

Procurando o mínimo do indicador "ZigZag" na matriz usando o"ArrayMinimum".

Posso configurar a busca para ignorar valores nulos ou terei que usar um laço para encontrá-los?

 
Não consigo descobrir como codificar. Eu preciso que a EA espere um certo tempo se a última pose não foi lucrativa. Você tem alguma idéia?
 
Forexman77:

Procurando o mínimo do indicador "ZigZag" na matriz usando o"ArrayMinimum".

Posso configurar a busca para ignorar valores nulos ou terei que usar um laço para encontrá-los?

Muito provavelmente você terá que usar um laço
 
Vinin:
Provavelmente terá que usar um laço
Obrigado!
 

Como encontramos a correção mais profunda entre o máximo e o mínimo? O máximo e o mínimo são conhecidos, não é um problema encontrá-los usando iHighest e

Se usarmos iHighest e iLowest, às vezes encontraremos perto do extremo, pois nem sempre é o caso, como mostrado na figura. De modo geral, precisamos da identificação da formação ABC.

Tentei aplicar o ZigZag para isso, mas ele não traz êxitos exatos.

е.

 

Forexman77:

Como encontramos a correção mais profunda entre o máximo e o mínimo? O máximo e o mínimo são conhecidos, não é um problema encontrá-los usando iHighest e

Se usarmos iHighest e iLowest, às vezes encontraremos perto do extremo, pois nem sempre é o caso, como mostrado na figura. De modo geral, precisamos da identificação da formação ABC.

Tentei aplicar o ZigZag para isso, mas ele não traz êxitos exatos.

Tudo será fácil se determinar a profundidade que deve ser procurada. Ao invés de iLowest você pode usar CopyLow e ArrayMinimum()