Discussão do artigo "Preparação de indicadores com vários símbolos/períodos" - página 3

 
Denis Kirichenko #:

Para testar algo, você precisa estar no paradigma do que está acontecendo ))

Percebi que é mais fácil para mim esboçar minha própria versão, já que não estou próximo da abordagem atual. Em particular, parece-me que a classe CIndMSTF é um tipo de superclasse. Em seguida, várias classes de indicadores são criadas com base nela. Assustador - o arquivo IndMSTF.mqh tem 4 mil linhas de código)) Optei por usar uma instância da classe CIndicators como uma coleção de indicadores. É muito conveniente. Você não precisa reinventar a roda...

Então, por que a classe CIndMSTF deveria armazenar dados em buffers (SBuffer m_buffers[])? Nós os calculamos uma vez em OnCalculate() e isso é suficiente. Ou seja, nós o tomamos como parâmetro por referência, o calculamos e o fornecemos a você...

Escreverei mais tarde sobre o que não concordo quando terminar minha versão...

Sim, gostei de saber que existe esse mecanismo:

Por causa da extensibilidade, de modo que os dados calculados estejam em uma matriz separada da parte do cálculo. O CopyBuffer copia um determinado número de barras em uma matriz e redimensiona a matriz receptora para se ajustar à quantidade de dados copiados. Ou seja, se você precisar de dados o tempo todo, precisará copiá-los do buffer da parte de cálculo o tempo todo.

Aqui, fizemos com que houvesse uma matriz constantemente preenchida com todos os dados, e os dados são obtidos dela por índice. Sem cópia. A cópia é feita uma vez na inicialização e, em seguida, apenas adicionamos dados de duas barras por vez ao final da lista. Acho que a mesma lógica é usada no SB na classe que você mencionou. Talvez eu tenha me esquecido e esteja errado.

 
Artyom Trishkin #:

Devido à extensibilidade - para manter os dados calculados em uma matriz separada da parte do cálculo. CopyBuffer copia um número especificado de barras para a matriz e altera o tamanho da matriz receptora para se ajustar à quantidade de dados copiados. Ou seja, se você precisar de dados o tempo todo, deverá copiá-los do buffer da parte de cálculo o tempo todo.

Aqui, fizemos com que houvesse uma matriz constantemente preenchida com todos os dados, e os dados são obtidos dela por índice. Sem cópia. A cópia é feita uma vez na inicialização e, em seguida, apenas adicionamos dados de duas barras por vez ao final da lista. Acho que a mesma lógica é usada no SB na classe que você mencionou. Talvez eu tenha me esquecido e esteja errado.

Sim, preenchimento de matriz. Mas há também uma tentativa de acesso direto - o método de API CIndicator::GetData(), que chama a função nativa CopyBuffer() de frente.

 
100 erros, 6 avisos 100 7. Por que 100 erros durante a compilação. O que estou fazendo de errado?

 
StohanoV #:
100 erros, 6 avisos 100 7. Por que 100 erros durante a compilação. O que estou fazendo de errado?

O primeiro erro no registro do editor é o quê?

 
Artyom Trishkin #:

Uma mensagem dos desenvolvedores no fórum.

Lembro-me de algo parecido com o 4, mas devo ter perdido o 5....

É estranho que essas coisas não possam ser configuradas no terminal. E não estão descritas na documentação.

Por favor, diga-me, sua abordagem permite que você obtenha dados do buffer zero do TF superior no primeiro tick?

 
Aleksey Vyazmikin #:

Eu me lembro de algo assim sobre o quatro, mas sobre o cinco, aparentemente eu não percebi....

É estranho que essas coisas não sejam configuradas no terminal. E não estejam descritas na documentação.

Diga-me, por favor, se sua abordagem permite obter dados do buffer zero do TF superior no primeiro tick?

Você deveria tentar. Provavelmente não