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

 
Artyom Trishkin:
A seção de ajuda lhe diz para que serve. E, sim, é correto que um parâmetro inserido pelo usuário não pode ser alterado programmaticamente. Ao menos algo pode pertencer ao usuário :)

Se você realmente quiser, você pode)

 
Vitaly Muzichenko:

Se você realmente quiser, você pode)

Você pode, é claro, se você o reatribuir. Mas o valor inserido pelo usuário permanecerá inalterado.
 

Frequentemente encontro um problema. O compilador jura com um erro "variável já definida" sobre o código:

if (n<10)
 {
  int a=10;
 }
else
 {
  int a=5;
 }

O guia de referência em https://docs.mql4.com/ru/basis/variables/local diz:

As variáveis declaradas dentro de um bloco (em nível interno) têm o escopo dobloco.

Se os blocos forem aninhados eo identificador no bloco externo tiver o mesmo nome que o identificador no bloco interno, o identificador do bloco externo é "invisível" (oculto) até que o bloco interno seja completado.

Mas mesmo o exemplo do mesmo livro de referência não se compila com o mesmo erro "variável já definida":

int i=5;      // локальная переменная функции
     {
      int i=10;  // переменная функции 
      Print("В блоке i = ",i); // результат  i = 10;
     }
   Print("Вне блока i = ",i);  // результат  i = 5;

O mesmo problema com os ciclos:

int i=10;
for (int i=1;i<10;i++) ...

Como podemos contornar este problema e fazer o exemplo do diretório compilar sem o erro "variável já definida"?

 
The_Sheikh:

Frequentemente encontro um problema. O compilador jura com um erro "variável já definida" sobre o código:

O guia de referência em https://docs.mql4.com/ru/basis/variables/local diz:

As variáveis declaradas dentro de um bloco (em nível interno) têm o escopo dobloco.

Se os blocos forem aninhados eo identificador no bloco externo tiver o mesmo nome que o identificador no bloco interno, o identificador do bloco externo é "invisível" (oculto) até que o bloco interno seja completado.

Mas mesmo o exemplo do mesmo livro de referência não se compila com o mesmo erro "variável já definida":

O mesmo problema com os ciclos:

Como podemos contornar este problema e fazer o exemplo do diretório compilar sem o erro "variável já definida"?

#propriedade rigorosa
 
The_Sheikh:

Como posso contornar este problema e obter o exemplo do diretório para compilar sem o erro "variável já definida"?

nem todos os exemplos do livro de referência funcionam corretamente por muito tempo

por escopo em seus exemplos - a visibilidade dentro de um único operador é local, definitivamente deveria funcionar assim:

void OnStart()
  {
   for(int i=0;i<10;i++)
     {
      double x=i;
     }

   for(int i=0;i<10;i++)
     {
      double x=i;
     }
  }

isto é, a visibilidade dentro de uma declaração é local, as variáveis i e x serão perdidas quando você sair dela

 

Tentou procurar o último pico do indicador de Repainter de Pico a ser processado pela EA:

   GV_trendD1 = StringConcatenate(GVn," дневной тренд");
   if (!GlobalVariableCheck(GV_trendD1))
      {
      double   fUP,fDN;

      for (int f=0; f<=400 && !IsStopped(); f++)
         {
         fUP = iCustom(NULL,PERIOD_D1,"Used\\# Peak Repainter",0,f);
         if (fUP>=15) {GlobalVariableSet(GV_trendD1,1);break;}
         else {fDN = iCustom(NULL,PERIOD_D1,"Used\\# Peak Repainter",1,f); if (fDN>=15) {GlobalVariableSet(GV_trendD1,-1);break;}}
         }
      }

O resultado é que 1 é escrito para a variável global, apesar de que na verdade deveria ser -1.

O que está errado? Com o código? Com o indicador?

O indicador é usado com a configuração padrão.

Arquivos anexados:
 
Alexey G. Smolyakov:

Tentou procurar o último pico do indicador de Repainter de Pico a ser processado pela EA:

O resultado é que 1 é escrito para a variável global, apesar de que na verdade deveria ser -1.

O que está errado? Com o código? Com o indicador?

O indicador é usado com uma configuração padrão.

Por que este é o nome do indicador?

iCustom(NULL,PERIOD_D1,"Used\\# Peak Repainter",0,f);
 
Artyom Trishkin:

Por que o nome do indicador?

Eu apenas mantenho indicadores para diferentes EAs em diferentes diretórios. E eu os renomeei ligeiramente para que sejam agrupados.

O nome afeta alguma coisa?

 
Alexey G. Smolyakov:

Eu apenas mantenho os indicadores para diferentes EAs em diferentes diretórios. E eu os renomeei ligeiramente para que sejam agrupados.

O nome afeta alguma coisa?

Isso acontece, todo acesso aos arquivos no MT4 ocorre dentro da pasta MQL4, a saída de Expert Advisors/Scripts/Indicators fora desta pasta é excluída por razões de segurança

 
Igor Makanu:

afeta, todo acesso aos arquivos no MT4 ocorre dentro da pasta MQL4, a saída de EAs/scripts/indicadores fora desta pasta é excluída por razões de segurança

Caminho completo da pasta MQL4\Indicadores\Utilizados. Parece que não há saída fora da pasta. Mas isto é uma anomalia - outros Conselheiros Especialistas trabalham com seus indicadores em pastas semelhantes sem problemas. Mas qual é o problema com este indicador - não o entendo. Eu olhei através de seu código, mas não tinha conhecimento e experiência suficientes para compreendê-lo. Tenho a suspeita de que só conta a última barra ou algo parecido.
Razão: