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

 
void OnTick()
{
  //---
    
    for(int a=1; a<10; a++)
     {
       comment="";
       for(int i=0; i<OrdersTotal(); i++)
         {
          if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
            {
             if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
               {    
                  if (OrderComment()==IntegerToString(a)) continue; 
                  else
                  {
                   comment=IntegerToString(a);
                   break;                  
                  } 
               }
            } 
         } 
        if(comment!="") break; 
     }
    if (CountOfBuy(magic)<1 && CountOfSell(magic)<1) comment="1";
  //---
}
Да, так более информативно. Т.е. этот незамысловатый модуль должен давать коммент для 
последующего присвоения ордеру. Когда открыта группа с комментом 1, он дает коммент 2 (это правильно). 
Когда открыта 2-я группа, опять дает 1. Не могу понять.
 

Boa noite a todos!

Eu escrevi uma função que determina se uma ordem pendente já está definida, mas a função não funciona por algum motivo. Você pode nos dizer onde está o erro? Atenciosamente, Vladimir.

//+------------------------------------------------------------------+
//| Функция 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 false; // поэтому возвращаем ложь
     }
   /* если отложенный ордер уже есть и его мэджик совпадает с мэджиком нашего советника */
   if(OrderGetInteger(ORDER_MAGIC)==Magic_Number)
      return true;  // то возвращаем истину
   /* в противном случае, если отложенный ордер уже есть, но его мэджик не совпадает с мэджиком нашего советника */
   else
      return false; // значит это чья-то чужая позиция, поэтому возвращаем ложь
  }
 
MrBrooklin uma ordem pendente já está definida, mas a função não funciona por algum motivo. Você pode nos dizer onde está o erro? Atenciosamente, Vladimir.

EU MESMO ENCONTREI O ERRO!!!

Aqui está um código de trabalho normal. Pode ser útil para alguém. Cumprimentos, Vladimir.

//+------------------------------------------------------------------+
//| Функция 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; // значит это чужой ордер, поэтому возвращаем значение ложь
 

Favor aconselhar como se organizar ou qual a forma de olhar:

Aqui, a fim de não realizar o cálculo das barras, foram inventados buffers. A cada novo tique, apenas a última barra é verificada (como eu entendo). Quando uma nova barra aparece, o cálculo começará apenas com esta barra.

Graças ao buffer, as linhas não são redesenhadas em todo o histórico, mas um segmento adicional é adicionado à última borda. Há 8 amortecedores no total.

E se eu precisar fazer um cálculo cem vezes (digamos 100 vezes para traçar uma linha, mudando apenas uma variável), e depois desenhar o melhor resultado. E com um novo tick ou timer fazer a mesma coisa, mas com o "histórico" existente de resultados (desenhos). Onde e como guardo estas informações, para não ter que recalcular toda a história?

Ou, mais simplesmente, como aumentar o número de tampões no indicador? Talvez escrevê-los separadamente em um arquivo? O que é melhor
 
Ivan Butko #:

Favor aconselhar como se organizar ou qual a forma de olhar:

Aqui, a fim de não realizar o cálculo das barras, foram inventados buffers. A cada novo tique, apenas a última barra é verificada (como eu entendo). Quando uma nova barra aparece, o cálculo começará apenas com esta barra.

Graças ao buffer, as linhas não são redesenhadas em todo o histórico, mas um segmento adicional é adicionado à última borda. Há 8 amortecedores no total.

E se eu precisar fazer um cálculo cem vezes (digamos 100 vezes para traçar uma linha, mudando apenas uma variável), e depois desenhar o melhor resultado. E com um novo tick ou timer fazer a mesma coisa, mas com o "histórico" existente de resultados (desenhos). Onde e como eu guardo essas informações, para não ter que fazer esses cálculos ao longo de toda a história?

Ou, para ser mais simples, como aumentar o número de amortecedores em um indicador? Talvez escrever separadamente em um arquivo? Qual é a melhor maneira de

Há 512 amortecedores nos indicadores.

 
Artyom Trishkin #:

Há 512 amortecedores nos indicadores.

Uau. Obrigado. Eu devia estar procurando no lugar errado. Vou continuar tentando.

 
MrBrooklin #:

ERRO ENCONTRADO POR MIM MESMO!!!

Aqui está um código de trabalho normal. Pode ser útil para alguém. Cumprimentos, Vladimir.

Não será útil para ninguém. Há erros grosseiros em seu código. E não faz sentido corrigi-los.

Você nem se preocupa em aprender o básico do idioma e tentar escrever algo.

Ou leva a sério ou desiste.

 
Koldun Zloy #:

Ninguém pode usá-lo. Há erros grosseiros em seu código. E não vale a pena corrigi-los.

Você nem se preocupa em aprender o básico do idioma, e está tentando escrever algo.

Ou se fala sério ou desiste.

Bom dia! Sim, você está absolutamente certo. Precisamos desistir deste negócio inútil de ir para o

Qualquer pergunta de novatos sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos

e esperar por ajuda aqui.

Cumprimentos, Vladimir.

 
MrBrooklin #:
Bom dia! Sim, você está absolutamente certo. Você precisa desistir deste negócio inútil, que é aplicar ao

Qualquer pergunta de novatos sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos

e esperar aqui por ajuda.

Cumprimentos, Vladimir.

Você está certo, desista.

Você nem mesmo entendeu o que eu escrevi em russo.

Por que você quer entrar na programação?

 
Koldun Zloy #:

Ninguém pode usá-lo. Há erros grosseiros em seu código. E não vale a pena corrigi-los.

Você nem se preocupa em aprender o básico do idioma, e está tentando escrever algo.

Ou leva a sério ou desiste.

Por favor, explique quais são seus erros. Em resumo, em resumo, ao que você deve prestar atenção. E se o código funcionar, quais são seus "bugs"?