Erros, bugs, perguntas - página 1701

 
pako:
Há peixe nos diques?
É isso que eu quero descobrir.
 
fxsaber:
É isso que eu quero descobrir.

Só faz sentido experimentá-lo em alguma lmax. E mesmo isso é questionável.

Já experimentou volumes, sentimentos, vidro? Para mim sabe melhor. Os meus negócios favoritos estão na fita e no vidro, mas não consigo encontrar nada parecido em forex.

 
Комбинатор:

Só faz sentido experimentá-lo em alguma lmax. E isso é duvidoso.

Já experimentou volumes, sentimentos, vidro? Para mim sabe melhor. A minha negociação favorita é com a Ribbon and Gauge, mas não há nada parecido em forex.

Quero experimentar a Bolsa. De alguma forma é tudo claro para mim, até agora, o que fazer ali. E não é claro porque é que não é feito mesmo sob a forma de indicadores.

Só os insectos me estão a atrasar.

 
void OnStart()
  {
//---
   Print("-----------------------------   ");
   Print("DBL_MAX= ", DBL_MAX);
   Print("IntegerToString(int(DBL_MAX) )= ", IntegerToString(int(DBL_MAX) ) );
   Print("IntegerToString(uint(MathAbs(DBL_MAX) ) )= ", IntegerToString(uint(MathAbs(DBL_MAX) ) ) );
  }

Eu dirijo um guião como este

e obter

DBL_MAX= 1.797693134862316e+308

IntegerToString(int(DBL_MAX) )= -2147483648

IntegerToString(uint(MathAbs(DBL_MAX) ) )= 0

------

Pergunta: porque é que na realidade obtemos um número negativo ao converter um número duplo positivo em int?

 
Print("-----------------------------   ");
   Print("DBL_MAX= ", DBL_MAX);
   Print("IntegerToString(int(DBL_MAX) )= ", IntegerToString(int(DBL_MAX) ) );
   Print("IntegerToString(uint(MathAbs(DBL_MAX) ) )= ", IntegerToString(uint(MathAbs(DBL_MAX) ) ) );
   Print("---");
   Print("int(DBL_MAX)= ", int(DBL_MAX) );
   Print("uint(DBL_MAX)= ", uint(DBL_MAX) );
Ou então continua a ser o mesmo.
 
fxsaber:
Preenchi uma candidatura, apesar de estar farto de o fazer com tanta frequência.
Respondido e imediatamente fechado

O autor do indicador codificou deliberadamente a ligação para si próprio.

Pode proibir este "hack" ou deixá-lo à consciência daquele que o utiliza.

Até agora, é a primeira pessoa que foi impedida de utilizar o terminal por esta funcionalidade durante vários anos.

Quantos indicadores podem ser executados em modo inactivo e não temos ideia sobre eles? Não há qualquer controlo.

Não compreendo realmente os patéticos regulares nos vossos postos. Claramente, não estamos a falar de um problema maciço ou grave.

1) Só deliberadamente, conscientemente, se pode escrever um indicador com o comportamento especificado. Quem o obriga a escrever tal código e a executar tal indicador? Ou executa outros programas sem conhecer o seu código?

2) Tal indicador não é mais malicioso do que muitos outros com erros lógicos menos óbvios.

3) Quando reiniciar o terminal, o indicador será descarregado e não recomeçará. Se iniciar acidentalmente tal indicador - reinicie o terminal. E não volte a geri-la.

Devo ter a possibilidade de me apagar (o indicador) no caso de pelo menos uma cópia ser lançada, mesmo que tenha parâmetros de entrada diferentes. Para o fazer, precisava de descobrir o cabo em si. Infelizmente, nesse momento ainda não sabia que era impossível na MQL em 100% dos casos. Decidi portanto tentar um truque não muito inteligente.

Passei por todas as pegas. Se coincidir com o aleatório que escrevi no meu indicador antes de verificar, significa automaticamente que o cabo me pertence e posso apagar-me a mim próprio, se necessário.

Foi a partir destas considerações que um código tão inofensivo foi escrito, o que causou uma reacção tão ambígua, mas obviamente negativa por parte dos criadores. É que não se pode fazer isso. O que é que fez? Bem, li o valor do meu buffer através do CopyBuffer. É ilegal?!

Deixe a comunidade saber que pode criar de tal forma um fundo de execução incontrolável de qualquer código, mesmo no terminal, sem gráficos. Aqui está uma pequena ponta dos pés. Considerá-lo ou não um insecto é provavelmente uma questão de terminologia. O meu entendimento é que os criadores não são capazes de mudar nada arquitectonicamente aqui. É por isso que existe tanta raiva. Não posso explicar esta reacção de qualquer outra forma.

Ninguém dirá nada de qualquer maneira. Um tal ancinho estaria bem reflectido na Ajuda.

 
Если вы случайно запустили такой индикатор - reiniciar o terminal. E não volte a geri-la.
Não há forma de saber. Não há hipótese!
 
Dmytro Zelenskyy:
Ou ainda é a mesma coisa.

O tipo int tem um tamanho de 4 bytes. O tipo duplo tem o tamanho de 8 bytes. Não o deve fazer - tente obter 4 bytes a partir de 8 bytes - pode acabar com disparates - especialmente neste caso, quando o valor DBL_MAX está fora dos valores int.

Se pegar no número duplo d=123456.1258 e tentar obter int a partir dele - então o número funcionará, mas mesmo assim, não o pode fazer dessa forma.

 
Karputov Vladimir:

O tipo int tem um tamanho de 4 bytes. O tipo duplo tem o tamanho de 8 bytes. Não o deve fazer - tente obter 4 bytes a partir de 8 bytes - pode acabar com disparates - especialmente neste caso, quando o valor DBL_MAX está fora dos valores int.

Se pegar no número duplo d=123456.1258 e tentar obter int a partir dele, o número funcionará, mas mesmo assim não o pode fazer.

Ok, como converter correctamente o dobro para int com preservação do sinal (o número não importa, se sair do limite então limite-o para int)

 
Dmytro Zelenskyy:

OK, como converter correctamente o dobro para int com o sinal intacto (o número não importa, se está fora do limite então limite-o para int)

int

O tipo int inteiro tem o tamanho de 4 bytes (32 bits). O valor mínimo é de -2 147 483 648, o valor máximo é de 2 147 483 647. Com base nisto,

   int A=(int)2147483647.0;
   int B=(int)2147483646.2;
   int C=(int)2147483647.2;
   int D=(int)2147483648.0;
   Print("A: ",IntegerToString(A),", B: ",IntegerToString(B),", C: ",IntegerToString(C),", D: ",IntegerToString(D));

ver o que é devolvido:

A: 2147483647, B: 2147483646, C: 2147483647, D: -2147483648

Penso que o princípio é claro.


Razão: