[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 323

 
Vinin писал(а) >>

É por isso que você comete erros de propósito.

E de propósito, é engraçado... Eu adoraria ver esse erro, mas não consigo encontrá-lo.

 
Daiver2 >> :

Executo algumas funções como um roteiro de teste para ver se há erros de compilação e quais para verificar se funcionam ou não no terminal. Hoje assumi a função de pré-cálculo de barras na janela:

Naturalmente, a mensagem *Não sai barras suficientes*, mas em um novo tique, entendo que esta mensagem aparecerá novamente indefinidamente.

Agora eu adiciono uma variável e escrevo em uma declaração de if, e também no futuro bloco de erros que manipula o Bloc_Error, eu coloco um interruptor do operador e faço o resultado:

A questão é o que eu fiz de errado na declaração de mudança, por que a mensagem *Expert não está funcionando* e por que a EA realmente pára de funcionar?????
//+------------------------------------------------------------------+      
    switch()//?????????????? почему в switch не передаёте параметр 
      {
      case 3:          // Неверные параметры:
      Work=false;
      return(0);
      }


 

Olá a todos!

Não consigo entender a causa do erro quando a EA está em funcionamento. Estou testando um EA em 11 pares em um terminal ao mesmo tempo (conta demo). Eu verifico as condições de entrada no início de cada hora, ou seja, 11 EAs começam a funcionar simultaneamente. A função IsTradeBusy() (daqui https://www.mql5.com/ru/articles/1412) tem sido usada para não se perturbar mutuamente. Recentemente, o Expert Advisor tem relatado um erro quando tenta alterar o valor da variável global TradeIsBusy em vez de abrir uma posição. Aqui está uma parte do código:

     // пытаемся менять значение TradeIsBusy с 0 на 1
     // если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"
     if(GlobalVariableSetOnCondition( "TradeIsBusy", 1.0, 0.0 )) 
         return(1);
     else
     // если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо 
     // возникла ошибка (это мы и проверим)
     {
        _GetLastError = GetLastError();
        // если это всё таки ошибка, выводим информацию и пробуем ещё раз
        if(_GetLastError != 0)
        {
           Print("TradeIsBusy()-GlobalVariableSetOnCondition(\" TradeIsBusy\",1.0,0.0 )-Error #",
           _GetLastError );
           continue;
        }
     }

Códigos de erro:

#4002 - "array index - fora de alcance"

#4105 - "Nenhuma ordem é selecionada".

Não entendo que condições podem causar esses erros usando o comando GlobalVariableSetOnCondition?

Terminal Broco Trader 4.0 constrói 225.

A falha no terminal pode ser assim ?

 
Urain писал(а) >>

>> Obrigado, eu o farei.

 
OAndrey писал(а) >>

Olá a todos!

Não consigo entender a causa do erro quando a EA está em funcionamento. Estou testando uma EA em 11 pares em um terminal ao mesmo tempo (conta demo). Eu verifico as condições de entrada no início de cada hora, ou seja, 11 EAs começam a funcionar simultaneamente. A função IsTradeBusy() (daqui https://www.mql5.com/ru/articles/1412) tem sido usada para evitar que eles se perturbem mutuamente. Recentemente, o Expert Advisor tem relatado um erro quando tenta alterar o valor da variável global TradeIsBusy em vez de abrir uma posição. Aqui está uma parte do código:

Códigos de erro:

#4002 - "array index - fora da faixa"

#4105 - "Nenhuma ordem é selecionada".

Não entendo que condições podem causar esses erros usando o comando GlobalVariableSetOnCondition?

Terminal Broco Trader 4.0 constrói 225.

Pode uma falha terminal como esta?

Não posso dizer nada sobre este pedaço de código. E como uma dica. Redefinir o estado do último erro no início da função. Pode ocorrer em algum outro lugar.

   GetLastError();  //Сбрасываем состояние 

   // пытаемся менять значение TradeIsBusy с 0 на 1
   // если нам это удаётся, выходим из ф-ции, возвращая 1 - "успешное завершение"
   if(GlobalVariableSetOnCondition( "TradeIsBusy", 1.0, 0.0 )) 
      return(1);
   else
   // если нет, возможны 2 причины: TradeIsBusy = 1 (тогда надо ждать), либо 
   // возникла ошибка (это мы и проверим)
   {
      _GetLastError = GetLastError();
      // если это всё таки ошибка, выводим информацию и пробуем ещё раз
      if(_GetLastError != 0)
      {
         Print("TradeIsBusy()-GlobalVariableSetOnCondition(\" TradeIsBusy\",1.0,0.0 )-Error #",
         _GetLastError );
         continue;
      }
   }
 

Como fazer uma quebra de linha no texto? Por exemplo, eu mostro algo em um gráfico, em OBJ_LABEL, e quero que o texto seja escrito em várias linhas.

 
Mathers >> :

Como fazer uma quebra de linha no texto? Por exemplo, eu mostro algo em um gráfico, em OBJ_LABEL, e quero que o texto seja escrito em várias linhas.

Exibição em múltiplas etiquetas.

 

E se o número de linhas mudar de forma dinâmica? E pode ser bastante grande. Talvez algo mais possa ser usado em vez de um rótulo?


E eis outra pergunta: digamos que eu tenho um roteiro que faz algo em um loop infinito com um atraso de, por exemplo, um segundo. Quando tento removê-lo - escolho "apagar script", mas não é removido do gráfico, ele começa a bater sem nenhum atraso. Quando pressiono "apagar" mais uma vez, o script é removido. O que está acontecendo? Talvez algo que eu deva acrescentar ao código para completá-lo corretamente?

 
Mathers >> :

E se o número de linhas mudar de forma dinâmica? E pode ser bastante grande. Talvez algo mais possa ser usado em vez de um rótulo?

Alerta, alternativamente. Comente -- isso é bom.

E eis outra pergunta: digamos que eu tenho um roteiro que faz algo em um loop infinito com um atraso de, por exemplo, um segundo. Quando tento removê-lo - escolho "apagar script", mas não é removido do gráfico, ele começa a bater sem nenhum atraso. Quando pressiono "apagar" mais uma vez, o script é removido. O que está acontecendo? Talvez eu devesse acrescentar algumas palavras extras ao meu código.

Substituir while(true) por while(!IsStopped())

 
Mathers >> :

E se o número de linhas mudar de forma dinâmica? E pode ser bastante grande. Talvez algo mais possa ser usado em vez de um rótulo?

Não. A menos que o comentário não se encaixe. Escreva uma f-função onde a saída será gerada e escreva o que você precisa através dela.

E eis outra pergunta: digamos que eu tenho um roteiro que faz algo em um loop infinito com um atraso de, por exemplo, um segundo. Quando tento removê-lo - escolho "apagar script", mas não é removido do gráfico, ele começa a bater sem nenhum atraso. Quando pressiono "apagar" mais uma vez, o script é removido. O que está acontecendo? Talvez eu devesse acrescentar algumas palavras extras ao meu código.

É assim que deve ser.

Razão: