[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 82

 
wolf05632:

Obrigado, mas isso não vai funcionar para mim. Eu não preciso de uma compensação. Acima escrevi. Suponha para o primeiro tampão de vela[1]=Alto[1], para o terceiro tampão[3]=Alto[3] e para o segundo precisamos calcular: tampão[2]=MathAbs(Higth[1]-Hight[3])/2 e obter o que eu quero na imagem.
E o que você não gosta da minha variante? :)) É muito mais simples e menos complicado. Ou você precisa, que em um buffer permaneçam valores em cada barra?
 

wolf05632:

SZY: Como posso fazer um indicador funcionar, ou seja, fazer cálculos (funciona, não visível) apenas em um determinado período de tempo (H1)?

Você deve vincular o cálculo não ao cronograma atual, mas ao H1! :)) Isto é, não usar arrays Open[], Close[], High[], Low[], Time[], mas funções iOpen(), iClose(), iHigh(), iLow(), iLow(), iTime() com parâmetros relevantes...
 
MaxZ:
Por que você não gostou da minha versão? :)) Muito mais simples e menos cálculos. Ou você quer manter os valores em buffer em cada barra?

Eu tentei, obrigado, mas não funcionou. Não consegui que aparecesse na tabela. Talvez eu tenha entendido mal alguma coisa. A única coisa que entendi é o principal: os elementos no buffer devem ir sequencialmente (1,2,3...), ou seja, sem lacunas (1,3,5...) e TUDO! elemento no buffer deve ter um valor atribuído! :-)
 

Roman, obrigado pela resposta..... Infelizmente, eu ainda não entendo uma coisa. No livro didático, https://book.mql4.com/ru/basics/expressions, em "Type Approach". Opção 4.1. Cálculo do resultado de um tipo inteiro

e Variante 4.2 . Uma situação semelhante ocorre se buscarmos um resultado como um valor de um tipo real", a mesma fórmula é dada, mas em um caso, o tipo de variável F é designado como int

   double A = 2.0;                      // Количество карандашей у Васи
   int    Y = 3;                        // Количество ответов Пети
   int    F = A + Y;                    // Общее количество

e no segundo exemplo, a variável é o dobro

   double A = 2.0;                   // Количество карандашей у Васи
   int    Y = 3;                     // Количество ответов Пети
   double F = A + Y;                 // Общее количество

Infelizmente, eu ainda não entendo a lógica da conversão. Se na primeira variante é claro por que int é atribuído à variável F (isto é, de acordo com a regra de conversão do tipo implícito), então por que double.... é atribuído na segunda variante me confunde totalmente.

Por favor, esclareça o que eu possa ter perdido em minhas explicações aqui?

Agradecemos antecipadamente.

 
wolf05632:

Eu tentei, obrigado, mas não funcionou. Não mostrava nada na tabela. Talvez eu tenha entendido mal alguma coisa?

Você copiou o código inteiro ou apenas o que estava na função de início()? É importante!

wolf05632:

A única coisa que entendi mais importante: os elementos no buffer devem ir um após o outro (1,2,3...), ou seja, sem lacunas (1,3,5...) e TUDO! elemento no buffer deve ter um valor atribuído a ele! :-)
Você entendeu errado! :)) Por exemplo, o zig-zag não tem todos os elementos do buffer preenchidos. Além disso, não é necessário preencher todos os elementos tampão para os ícones.
 
Geowind64:

Roman, obrigado pela resposta..... Infelizmente, eu ainda não entendo uma coisa. No livro didático, https://book.mql4.com/ru/basics/expressions, em "Type Approach". Opção 4.1. Cálculo do resultado de um tipo inteiro

e Variante 4.2 . Uma situação semelhante ocorre quando se procura um resultado como um valor de um tipo real", a mesma fórmula é dada, mas em um caso, o tipo da variável F é denotado como int

e no segundo exemplo, a variável já é uma dupla

Infelizmente, eu ainda não entendo a lógica da conversão. Se na primeira variante é claro por que int é atribuído à variável F (isto é, de acordo com a regra de conversão de tipo implícito), então por que na segunda variante eles atribuíram a dupla.... está me confundindo completamente.

Por favor, explique o que eu poderia ter perdido em minha explicação.

Obrigado de antemão.



n


O tipo interanger é um tipo duble, o tipo variável duble tem um alcance maior, portanto não é possível que as variáveis em uma expressão "tenham a possibilidade" de serem de diferentes tipos, e o resultado é uma variável que tem um alcance mais restrito de valores aceitos, neste caso o tipo interanger. Isto é, se pelo menos uma variável em uma expressão for do tipo duble, o resultado deve e também pode estar na faixa do duble, caso contrário, haverá um erro de tempo de compilação - tipo mismatch.

Consulte aqui para maiores detalhes.

 
Roman.:


O inteiro é um tipo de duble, e as variáveis duble têm um escopo mais amplo, portanto não é possível que variáveis em uma expressão "tenham a possibilidade" de serem de diferentes tipos, e o resultado é uma variável que tem uma faixa mais estreita de valores aceitos, neste caso, o tipo inteiro. Isto é, se pelo menos uma variável em uma expressão for do tipo duble, o resultado deve e também pode estar na faixa do duble, caso contrário, haverá um erro de tempo de compilação - tipo mismatch.

Para mais detalhes, veja aqui.


Muitas vezes uso conversão do tipo implícito. Mas eu tenho que usar parênteses desnecessários.
 

Pessoal, o que significa #INF - está fora do intervalo permitido de duplo? ver a segunda linha do topo (conta o produto do duplo TWR, ou seja, seu valor anterior é multiplicado pelo seguinte). Qual é a maneira correta de contar esses valores tomados pela variável TWR?

 
Geowind64:

Se você ler cuidadosamente esta seção do livro didático, você verá que primeiro deve olhar para a expressão à esquerda da tarefa "=":

   A + Y

De acordo com a regra:

  • se o tipo da expressão à direita do sinal de atribuição não for o mesmo que o tipo da variável à esquerda do sinal de atribuição, então o valor da expressão é lançado para o tipo da variável à esquerda do sinal de atribuição; isto é chamado de conversão do tipo alvo;

A é uma variável do tipo duplo à esquerda, e assim o valor de A+Y é um número do tipo duplo.

Em seguida, preste atenção ao tipo de variável à qual a expressão é atribuída.

No primeiro caso: "primeiro o tipo de expressão A+Y será convertido em tipo int (de acordo com a regra de cálculo de inteiros), e então este resultado se tornará o valor da variável inteira F".

No segundo caso: "o tipo alvo da variável F (à esquerda do sinal de operação de atribuição), neste caso o tipo duplo, é o mesmo que o tipo duplo de expressão A+Y, de modo que não ocorre nenhuma conversão do tipo alvo".

Verstehen? :)))

 
Roman.:

Pessoal, o que significa #INF - está fora da faixa permitida de duplo? ver a segunda linha do topo (conta o produto do duplo TWR, ou seja, seu valor anterior é multiplicado pelo seguinte). Como contar corretamente esses valores tomados pela variável TWR?

Geralmente INFINITY (INF para abreviar ) é infinito! :)) Sim, acontece que o dobro falta de energia (memória) para armazenar um número tão grande.

E como calcular corretamente, só posso adivinhar... Criar tipo próprio, condicionalmente: armazenar em capacidade adicional de dígitos variáveis, e duplicar multiplicar por 10^n, onde n é a capacidade de dígitos. Mas neste caso, a precisão se perde, e vejo que sua precisão está ficando cada vez pior...

Mas talvez seja mais simples mudar a lógica dos cálculos? :))) Ou talvez haja um erro em algum lugar.

Razão: