Discussão do artigo "Receitas MQL5 - Criamos um buffer circular para calcular rapidamente indicadores numa janela deslizante" - página 4
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
Um ótimo artigo, o homem sabe programar!
Se ao menos a tradução alemã não fosse tão horrível!!!!!
Olá,
Muito obrigado pela dica. A tradução foi corrigida.
Com os melhores cumprimentos
Bom dia, Vasiliy Sokolov!
Seus indicadores criados com a ajuda do buffer de anel mostram algo pouco claro, acho que o método ChangeValue não funciona ou talvez eu tenha entendido algo errado?
Eu já vi isso. Como verifiquei os exemplos que você forneceu. Eles mostram o mesmo problema que eu tive ao lidar com a atualização dos valores enquanto o mercado está funcionando. Verifique o Stochastic que você forneceu. Adicionar um novo valor não é um problema, mas quando tentamos usar Stoch.ChangeLast() ou OnChangeValue() na classe CRiMaxMin, isso não funciona. Ele não altera o valor adequadamente. Se você puder verificar ou enviar um exemplo de um código funcional, seria muito bom.
Muito obrigado.
Excelente trabalho aqui, muito obrigado ao autor. Talvez o erro que você está vendo, Savio, esteja aqui:
int RingBuffer::iToRealInd(int iIndex)
{
if(iIndex >= iNumElements() || iIndex < 0)
return iBufferSize-1; //previous bug was caused by no -1 here
...
Eu adicionei o -1 na última linha citada; ele não estava lá antes e causaria o retorno de um índice inadequado. Observe que mudei os nomes das variáveis/métodos de acordo com meu estilo de programação, mas a ideia é a mesma.
Excelente trabalho aqui, muito obrigado ao autor. Talvez o bug que você está vendo, Savio, esteja aqui:
int RingBuffer::iToRealInd(int iIndex)
{
if(iIndex >= iNumElements() || iIndex < 0)
return iBufferSize-1; //previous bug was caused by no -1 here
...
Eu adicionei o -1 na última linha citada; ele não estava lá antes e causaria o retorno de um índice inadequado. Observe que mudei os nomes das variáveis/métodos de acordo com meu estilo de programação, mas a ideia é a mesma
Tentei sua correção, mas a atualização ainda não está correta. Parece que está faltando alguma coisa e não consigo encontrar o problema ao tentar executar o buffer de anel na formação de uma nova barra. Quando o mercado está funcionando, as linhas Alto/Baixo ficam completamente misturadas. O código funciona muito bem e muito rápido ao processar dados antigos, mas com novos dados chegando durante a formação de uma nova barra, ele simplesmente não funciona para mim.
Se eu puder fazer alguns comentários:
1. Na classe void CRiMaxMin::OnChangeValue(int index, double del_value, double new_value), no método " OnChangeValue" na linha
.
Figura:
typo - sinal "less than or equal to".

2.Ao pesquisar os elementos Min e Max de uma matriz, se usados exatamente como um buffer em anel (quando novos elementos começam a ser gravados no início da matriz), min e mah são definidos incorretamente. O mínimo é maior que o máximo. Em uma matriz. Tudo funciona usando os métodos padrão (ArrayMinimum e ArrayMaximum).
Picture:
Em algum lugar, a indexação está se desviando. Não consigo consertar isso sozinho. Se alguém puder corrigi-lo, seria ótimo. Anexei um orientador de teste.
Você cometeu um erro em ToRealInd(int index).
Deveria ser: