Erros, bugs, perguntas - página 1782
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Quais funcionam?
A regra da perda de dígitos significativos e do seu preenchimento com trabalhos aleatórios
O resultado é longo, mas nos cálculos intermédios do dobro e é aí que se perdem dígitos significativos
(Dígitos+1)*3-1=17
A regra da perda de dígitos significativos e do seu preenchimento com trabalhos aleatórios
O resultado é longo, mas nos cálculos intermédios do dobro e é aí que se perdem dígitos significativos
(Dígitos+1)*3-1=17
Obrigado pela informação.
Contudo, a informação é difícil de apreender - ou seja, o número pode ser assim, mas não se pode fazer cálculos com ela?
Aqui está um exemplo de código onde é convertido de string para número
Print ("CalcY=",CalcY);
Imprime o número 11111111111111111104.
Isto é, não há aqui cálculos ou estou errado?
É possível lidar com estes números ou estas são limitações linguísticas?
Então não há cálculos aqui, ou estou errado?
Um cálculo é qualquer operação (nestecaso, uma conversão). Para o número especificado StringToDouble devolve o dobro com perda de precisão
StringToInteger retorna longo, mas outras funções que funcionam com o dobro não podem ser utilizadas nos cálculos sem perda de precisão, tais como NormalizeDouble, MathPow
Computação - qualquer operação (neste caso, uma conversão). StringToDouble devolve o dobro - há uma perda de precisão
StringToInteger retorna longo, mas outras funções que funcionam com o dobro não podem ser utilizadas nos cálculos sem perda de precisão, tais como NormalizeDouble, MathPow,
StringToInteger trabalhou para expressar o número, mas depois fica pior, acho que o número deve ser decomposto nos seus componentes para operações matemáticas...
Print ("CalcZ=",CalcZ);
double Test=CalcZ;
Print ("Test=",Test);
Test=1.111111111111111e+17
Mais uma vez, está escrito no helpdesk
INT_MAX
Valor máximo que pode ser representado por tipo int
2147483647
Então como é que o StringToInteger realizou a conversão e armazenou-a por muito tempo se o número é maior do que o permitido?
Então como é que o StringToInteger converteu e armazenou para longo se o número é maior do que o permitido?
StringToInteger retorna originalmente longo dentro deLONG_MINLONG_MAX(também pode ser chamado StringToColobok)
StringToInteger retorna originalmente longo (poderia muito bem ter sido chamado StringToBoob)
Isto é certamente verdade, mas o ficheiro da Ajuda é tão inteligente.
"
Converte uma cadeia contendo uma representação de caracteres de um número para um número int(inteiro).
"
Foi isso que me enganou.
Obrigado pela informação.
Presumo que a representação numérica acima não caberá no buffer gráfico?
Presumo que o número acima não caberá no buffer gráfico?
Estão escritos como B'111111111111111111111111111111111111'.
Afirmo (e proponho-me verificar) que quando o cronograma é alterado de M5 para M15 nenhum comando M5 Deinit é enviado para o primeiro indicador (e apenas para ele - neste caso M5) e não será descarregado do gráfico até que o utilizador apague a EA
Note que em MT5, o núcleo de cálculo do indicador é um recurso partilhado com um contador de utilização no seu próprio gestor. Se diferentes programas ou janelas utilizarem o indicador com os mesmos parâmetros, uma cópia de cálculo com o contador de utilização funciona de facto. Isto poupa muito dinheiro quando um comerciante utiliza os mesmos indicadores nos gráficos e num Expert Advisor.
O gestor de indicadores é concebido de modo a remover fisicamente os indicadores de forma assíncrona e com um atraso. E entretanto, é criada uma nova cópia de trabalho com novos parâmetros, que é muitas vezes inicializada antes da antiga cópia ser fisicamente apagada.
O gestor de indicadores é concebido de modo a remover fisicamente os indicadores de forma assíncrona e com um atraso. E entretanto é criada uma nova cópia de trabalho com novos parâmetros, que é muitas vezes rubricada antes de a antiga cópia ser fisicamente apagada.
Vamos simplificar o indicador
void Prn( string f, int i = -1 ) { Print( f, "->", StringSubstr( EnumToString( Period()), 7 ), (i == -1 ? "" : ":" + i )); }
void OnInit() { Prn( __FUNCTION__ ); }
void OnDeinit( const int reason ) { Prn( __FUNCTION__, reason ); }
int OnCalculate( const int, const int, const int, const double& [] ) { return 0; }
Vamos anexar o Test.mq5 ao gráfico M5 e depois alterar o período do gráfico de M5->M15
Resultado:
2017.02.06 00:54:20.897 OnInit->M5
2017.02.06 00:54:25.553 OnInit->M15
Pergunta: Quando é que o OnDeinit->M5 será chamado ?
A minha resposta: Nunca!
A sua resposta acima: de forma assíncrona e com um atraso