Discussão do artigo "Troca de dados entre indicadores: é fácil" - página 2

 
<br/ translate="no">

...A única questão é como converter um ponteiro em um número inteiro. É nesse ponto que a Dynamic Link Library nos ajudará, ou seja, os recursos de conversão de tipos de dados do C++. Como os ponteiros em C++ são um tipo de dados de quatro bytes, é conveniente usar o tipo int de quatro bytes para nossos propósitos...

Se não me engano, o autor está falando sobre conversão implícita de tipos. Artigo muito informativo - muito obrigado ao autor.

Eu também gostaria de acrescentar que, se você precisar criar um método SetPtr, não poderá fazer isso sem a conversão explícita de tipos.

Ele terá a seguinte aparência

double* SetPtr(int a)
{
  double* a1 = reinterpret_cast <double* > (a);
  return(a1);
}

Em geral, a MQL5 se beneficiaria muito se os ponteiros fossem amplamente reconhecidos e usados.

 

Em geral, a MQL5 se beneficiaria muito se os ponteiros fossem amplamente reconhecidos e usados.

Eu acrescentaria a essa lista o tratamento de exceções, os construtores com parâmetros e a herança múltipla.

Mas, por algum motivo, os desenvolvedores acham que não somos inteligentes o suficiente para tirar proveito de todos esses recursos e que só nos prejudicaremos.

Embora todos os itens acima sejam ferramentas padrão de OOP e nunca tenham prejudicado ninguém.

Tenho a impressão (da minha parte) de que eles simplesmente não conseguem implementar esses mecanismos de forma confiável.

É triste que alguém tenha decidido que não teremos isso aqui

 

Notei que, com as novas compilações do MT4, a função SetIndicatorValue() não funciona, mas GetIndicatorValue() funciona. Isso é só comigo ou há algo nas novas compilações (acho que a mudança ocorreu em algum lugar depois da compilação 225) que quebrou essa função? Em caso afirmativo, há alguma sugestão sobre como fazer com que as metodologias deste artigo funcionem nas novas compilações do MT4? O fato de que as compilações antigas não são mais suportadas está me causando um problema nesse sentido, pois eu realmente gostaria que os cálculos do indicador ocorressem apenas uma vez, em um EA, mas ainda assim fossem exibidos nos gráficos, empurrando os valores calculados para os ponteiros dos buffers do indicador. (A propósito, fiquei muito grato por encontrar este artigo e poder aplicar suas técnicas - obrigado por escrevê-lo).

Uma pergunta relacionada é que notei que nas notas de lançamento da versão 392 do MT4 em 17/03/2011, está escrito: "3. Removidos os recálculos desnecessários de indicadores ao exibi-los em um gráfico". Essa melhoria efetivamente anula a necessidade das técnicas deste artigo, já que o uso de indicadores personalizados da forma como foram planejados não será mais lento do que o uso das técnicas baseadas em ponteiros ensinadas neste artigo? Muito obrigado.

 
brisully:

Notei que, com as novas compilações do MT4, a função SetIndicatorValue() não funciona, mas GetIndicatorValue() funciona. Isso é só comigo ou há algo nas novas compilações (acho que a mudança ocorreu em algum lugar depois da compilação 225) que quebrou essa função? Em caso afirmativo, há alguma sugestão sobre como fazer com que as metodologias deste artigo funcionem nas novas compilações do MT4? O fato de que as compilações antigas não são mais suportadas está me causando um problema nesse sentido, pois eu realmente gostaria que os cálculos do indicador ocorressem apenas uma vez, em um EA, mas ainda assim fossem exibidos nos gráficos, empurrando os valores calculados para os ponteiros dos buffers do indicador. (Aliás, fiquei muito grato por encontrar este artigo e poder aplicar suas técnicas - obrigado por escrevê-lo).

Uma pergunta relacionada é que notei que nas notas de lançamento da versão 392 do MT4 em 17/03/2011, está escrito: "3. Removidos os recálculos desnecessários de indicadores ao exibi-los em um gráfico". Essa melhoria efetivamente anula a necessidade das técnicas deste artigo, já que o uso de indicadores personalizados da forma como foram planejados não será mais lento do que o uso das técnicas baseadas em ponteiros ensinadas neste artigo? Muito obrigado.

Parece que eu estava enganado e que os arquivos de indicadores anexados ao artigo funcionam nas novas versões do MT4. Desculpe-me pelo alarme falso e obrigado novamente por esse trabalho.
 
Zhunko:

Como isso é complicado!...

Com a ajuda de Ilnur, há um ano, escrevi uma biblioteca em MQL4 para trabalhar com a memória. Você pode alocar memória, mover ponteiros, escrever e ler, transferir o nome da área de memória para qualquer outro programa.

Tudo é baseado no mapeamento. Ela é muito mais simples do que a proposta.

Como posso obter essa biblioteca? Eu ficaria muito grato. Preciso transferir dados entre dois MTs.
 
Obrigado
 

É possível adicionar funções à DLL não apenas para trabalhar com double, mas também para datetime, long e int?

Acontece que agora os dados das matrizes de preço podem ser facilmente transferidos entre estruturas aninhadas sem cópia, mas os dados sobre tempo, spread e volumes ainda precisam ser copiados.

Tentei adaptar GetPtr para trabalhar com datetime e long (e por meio de perversões com bits int móveis) - não funciona, a função aceita uma referência a uma matriz e ela não pode ser convertida.

Alguém já resolveu esse problema?

 

Silêncio.

Eh... Terei que me lembrar do C++ e instalar o MSVC eu mesmo...

 
Laryx:

Silêncio.

Eh... Vou ter que me lembrar do C++ e instalar o MSVC eu mesmo...

E agora ninguém vai lhe responder nada, todos foram para a frente.

Você ouviu alguma coisa sobre a atualização do MT4?

 

Na borda da minha orelha, na borda da minha orelha... :)

A atualização do MT4 é muito boa para mim - tenho grandes bibliotecas, mas todas elas estão no MT5 (não consigo imaginar minha vida sem o OOP). E DCs, pessoas ruins, nem todos eles têm MT5 na vida real.... Portanto, essa notícia é muito boa para mim.

Mas - até que haja um MT4++ normal, não vejo sentido em adaptar o código para a plataforma atualizada. Quando algo como um beta oficial for lançado (sim, com a Biblioteca Padrão, também não quero escrever Expert Advisors sem ela), então começaremos a converter o código....

E agora eu - terrivelmente - quero obter endereços não apenas de matrizes duplas, mas também de outras matrizes... Ah, que pena... Eu queria contornar o problema por meio da conversão de tipos (time e longs também são de oito bytes), mas isso ainda não funciona....