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

 
Ivan Butko #:

Por favor, explique quais são seus erros. Você pode resumir brevemente o que deve ser considerado? E, se o código funcionar, quais seriam seus "bugs"?

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если в советнике не установлен отложенный     |
//| ордер, в противном случае возвращает ложь.                       |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong  order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(OrderSelect(i)==false)
         return true; // поэтому возвращаем значение истина
      else // в противном случае
         return false; // возвращаем значение ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь

Da documentação... a caixa de entrada deve ter um bilhete, não um índice

bool  OrderSelect( 
   ulong   ticket      // тикет ордера 
   );

Se tivermos vários pedidos de símbolos diferentes e o que estamos procurando for o segundo na lista, não o encontraremos. Ou existe apenas um magik, mas precisamos encontrá-lo por outro símbolo, obteremos uma resposta incorreta da função...

 
Alexey Viktorov #:

da documentação... a caixa de entrada deve ter um bilhete, não um índice

Obrigado Alexey pela dica! Muito má influência sobre mim por estar sentado ao computador à noite. Pensei ter começado ontem com o bilhete de pedido e já tinha escrito uma linha no código:

ulong  order_ticket=OrderGetTicket(i); // тикет ордера

e depois "mudou-se".

Alexey, esta variante de código pode ser aceitável?

//+------------------------------------------------------------------+
//| Функция IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если установлен отложенный ордер,             |
//| в противном случае возвращает ложь.                              |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенного ордера нет, значит и у нашего советника отложенного ордера нет */
      if(order_ticket==0)
         return false; // поэтому возвращаем значение ложь
      else // в противном случае
         return true; // возвращаем значение истина
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чужой ордер, поэтому возвращаем значение ложь
  }

Ainda não toquei em Magic porque o código é destinado a um EA de um caractere.

Cumprimentos, Vladimir.

 
MrBrooklin #:

Obrigado, Alexei, pela dica! Muito má influência sobre mim por estar sentado em frente ao computador à noite. Pensei ter começado ontem com o bilhete de pedido e já tinha escrito uma linha no código:

e depois "mudou-se".

Alexey, esta variante de código pode ser aceitável?

Ainda não toquei em Magic porque o código é destinado a um EA de um caractere.

Atenciosamente, Vladimir.

Esta abordagem não é aceitável para mim. Adicione um cheque para Magik e um símbolo, duas linhas de código e você terá uma abordagem normal para resolver uma tarefa em troca. E se você ignorar meus princípios, o código não é bem assim.

Isto é mais lógico.

//+------------------------------------------------------------------+
//| Функция  IsMainPendingOrder (установлен отложенный ордер):        |
//| возвращает истину, если установлен отложенный ордер,             |
//| в противном случае возвращает ложь.                              |
//| Применим для функции тип данных bool, чтобы хранить              |
//| логические значения true (истина) или false (ложь).              |
//+------------------------------------------------------------------+
bool IsMainPendingOrder()
  {
   int orders_total=OrdersTotal(); // количество установленных отложенных ордеров
//--- перебираем все установленные отложенные ордера
   for(int i=orders_total-1; i>=0; i--)
     {
      ulong order_ticket=OrderGetTicket(i); // тикет ордера
      /* если отложенный ордер есть */
      if(order_ticket > 0)
         return true; // поэтому возвращаем истину
     }
      return false; // если нет открытого отложенного ордера…
  }

E neste código, tudo o que você tem que fazer é substituir o cheque em branco

      if(order_ticket > 0)

para verificar se há um mágico e um personagem

      if(OrderGetString(ORDER_SYMBOL) == _Symbol && OrderGetInteger(ORDER_MAGIC) == Magic_Number)

e já é uma função mais universal...

 
Alexey Viktorov #:

da documentação... a caixa de entrada deve ter um bilhete, não um índice

Se tivermos vários pedidos de símbolos diferentes e o que estamos procurando for o segundo na lista, não o encontraremos. Ou existe apenas um magik, mas precisamos encontrá-lo por outro símbolo, a resposta estará errada novamente...

Obrigado

 
Alexey Viktorov #:

Esta abordagem é inaceitável para mim. Adicione um mágico e uma verificação de símbolos, duas linhas de código e, em troca, uma abordagem normal para resolver o problema. E se você ignorar meus princípios, o código não é bem assim.

Isto é mais lógico.

E neste código, tudo o que você tem que fazer é substituir o cheque em branco

para verificar se há um mágico e um personagem

e já é uma função mais versátil...

Bom dia a todos e bom humor!

MUITO OBRIGADO, Alexey, pela sua abordagem paciente e explicação clara dos meus erros.

Cumprimentos, Vladimir.

 
Ivan Butko #:

Por favor, explique quais são seus erros. Você pode resumir brevemente o que deve ser considerado? E, se o código funcionar, quais são seus "erros"?

Os erros estão em erros de compreensão de coisas elementares.

Se você mesmo não os vê, você também: Aprenda, aprenda e aprenda!

 
Koldun Zloy #:

Erros em não entender as coisas elementares.

Se você mesmo não os vê, você também: Aprenda, aprenda e aprenda!

Pare. Este é um tópico com perguntas de novatos. Assim, ou você responde às perguntas colocadas no fio ou passa sem sua moralização.

Para que você se mostrou? As pessoas querem ver respostas às perguntas, não um rosto bonito em uma foto.

 
Artyom Trishkin #:

Pare. Este é um tópico com perguntas dos recém-chegados. Assim, ou você responde às perguntas colocadas no fio ou passa sem sua moralização.

Para que você se mostrou? As pessoas querem ver respostas às perguntas, não o homem bonito da foto.

Eu só queria saber se a pessoa queria aprender alguma coisa, então eu poderia ajudar.

 
Koldun Zloy #:

Eu só queria saber se a pessoa queria aprender alguma coisa, então eu poderia ajudar.

Bom. A própria maneira de descobrir o que você quer parecia estranha: "você não pode fazer nada, você precisa aprender e aprender".

Mas, assim seja...

 
Koldun Zloy #:

Eu só queria saber se a pessoa queria aprender alguma coisa, então eu poderia ajudar.

Às vezes faço a mesma coisa, porque às vezes acontece que você faz um discurso, você perde tempo, mas não ouve do TC, ou ele não está interessado nele.

Se ele responder, significa que ele está pronto para uma discussão, e então você inicia uma discussão.