Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1725

 
EVGENII SHELIPOV #:

Alexei, por favor, amplie a imagem.

Ampliado. Eu vi exatamente o que a seta mostra no segundo preço de pedido mais baixo e no bilhete do pedido que não corresponde ao penúltimo critério de pedido. Execute meu código e você verá o bilhete da ordem mais baixa. Você pode terminar esta função se quiser obter não o pedido de COMPRA do fundo, mas o segundo.

 
Alexey Viktorov #:

Ampliado. O que eu vi foi a seta apontando para o segundo preço de pedido mais baixo e para o bilhete do pedido que não atendia ao penúltimo critério de pedido. Se você executar meu código, você verá o bilhete da ordem mais baixa. Você pode desenvolver esta função para obter não a ordem de compra abaixo, mas a segunda.

Só posso perguntar onde há um erro no código para a determinação do ticket do próximo ao último pedido.

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }
 
EVGENII SHELIPOV #:

Só como minha pergunta, onde está o erro no código para determinar o bilhete da penúltima ordem???

O erro é que o preço do pedido não é levado em conta de forma alguma.

Em algum lugar em seu diálogo, há conselhos para colocar tudo em uma matriz e classificá-la para obter qualquer bilhete. Mas, em resposta, não entendo como fazer isso.

Assim

//+------------------------------------------------------------------+
//| Расчет тикета второго снизу ордера BUY в сетке                   |
//+------------------------------------------------------------------+
int GetTicketMaxOrder()
 {
  int total = OrdersTotal(),
      arrSize = 0;
  double arr[][2];
  for(int cnt = 0; cnt < total; cnt++)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol())// && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        arrSize = ArrayRange(arr, 0);
        ArrayResize(arr, arrSize+1);
        arr[arrSize][0] = OrderOpenPrice();
        arr[arrSize][1] = OrderTicket();
       }
     }
   }
  ArraySort(arr);
  return((int)arr[1][1]);
 }
/*****************************End program****************************/
 
EVGENII SHELIPOV #:

Eu só posso responder como minha pergunta onde está o erro no código para determinar o bilhete da penúltima ordem????

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }

E outro erro grosseiro é que enquanto você está procurando por ordens no loop, você chama uma função que por sua vez também procura por ordens... E quando a execução do código retorna à função, outra ordem já está selecionada... E OrderTicket() retorna bem diferente do que você esperava.

 
Alexey Viktorov #:

O erro é que o preço do pedido não é levado em conta de forma alguma.

Em algum lugar em seu diálogo há um conselho para colocar tudo em uma matriz e classificá-la para obter qualquer bilhete por contagem. Mas, em resposta, não entendo como fazer isso.

Assim

Alexey, você poderia comentar os erros no registro

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: posição inicial 0 incorreta para a função ArraySort

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: matriz fora do alcance em 'eGriD2.mq4' (664,18)

2021.11.07 12:17:40.792 2020.01.02 06:00:00 Teste de aprovação parado devido a um erro crítico na EA


 
EVGENII SHELIPOV # :

Alexey, você poderia comentar os erros no log

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: posição inicial 0 incorreta para a função ArraySort

2021.11.07 12:17:40.791 2020.01.02 06:00:00 eGriD2 EURUSD,M5: matriz fora do alcance em 'eGriD2.mq4' (664,18)

2021.11.07 12:17:40.792 2020.01.02 06:00:00 Teste de aprovação parado devido a um erro crítico na EA


Estes erros não são o meu código. Não sou fluente na linguagem aglits, estou usando um tradutor interno deste site. É assim que se traduz.

posição inicial incorreta 0 para a função ArraySort - posição inicial incorreta 0 para a função ArraySort

matriz fora do alcance em 'eGriD2.mq4' (664,18) - matriz fora do alcance em 'eGriD2.mq4' (664,18)

Os testes foram interrompidos devido a um erro crítico na EA

Portanto, o código no estúdio.

ps; embora, se você chamar esta função quando houver menos de duas ordens, haverá estes erros. Eu não o protegi do ........., mas acho que deveria tê-lo feito.

Esta é exatamente a razão pela qual eu não tenho absolutamente nenhum desejo de ajudar ninguém... Você está contando com uma aplicação cuidadosa das minhas dicas, mas .........

 
Boa tarde. Você pode me dizer como implementar uma busca mínima/máxima por n barras?
 
Snajper007 #:
Boa tarde. Você pode me dizer como implementar uma busca mínima/máxima por n barras?
iHighest

iLowest

 
MakarFX

Aqui está outra pergunta. Há um indicador que desenha um fractal. Como posso verificar se há um sinal em n barras?

 
Snajper007 #:

Aqui está outra pergunta. Há um indicador que desenha um fractal. Como posso verificar se há um sinal em n barras?

Antes de tudo, depende do indicador que desenha os fractais