Discussão do artigo "Cálculo de expressões matemáticas (Parte 1). Analisadores descendentes recursivos"
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
Novo artigo Cálculo de expressões matemáticas (Parte 1). Analisadores descendentes recursivos foi publicado:
Neste artigo são abordados os princípios básicos de análise e cálculo de expressões matemáticas, são implementados analisadores descendentes recursivos que funcionam nos modos interpretador e cálculo rápido com base numa árvore de sintaxe pré-construída.
Ao automatizar tarefas de negociação, às vezes é necessário adicionar flexibilidade à execução de algoritmos computacionais. Assim, por exemplo, para configurar programas vindos numa forma fechada (compilada), podemos selecionar o tipo de função objetivo a partir de uma ampla gama de possíveis combinações. Em particular, isso ocorre ao otimizar um EA ou avaliar rapidamente um protótipo de indicador. Quando é assim, na caixa de diálogo de propriedades, o usuário pode alterar não apenas os parâmetros, mas também a fórmula de cálculo. Nesses casos, é necessário calcular a expressão aritmética com base na sua representação textual sem alterar o código MQL do programa.
Para resolver este problema, são utilizados distintos tipos de analisadores que permitem interpretar fórmulas em tempo real, compilando-as numa árvore sintática, gerando o chamado bytecode (sequências de instruções computacionais) e executando-o para calcular o resultado. Neste artigo, veremos alguns tipos de analisadores e como avaliar expressões.
Formulação do problema
Por expressão aritmética entenderemos uma sequência unilinear de itens de dados e de operadores que descrevem ações. Nossos itens de dados serão números e variáveis nomeadas. Os valores das variáveis poderão ser atribuídos e alterados externamente, ou seja, não dentro de uma expressão, mas, sim, usando atributos especiais do analisador. Em outras palavras, não há operador de atribuição ('=') para armazenar resultados intermediários. Eis a lista de operadores suportados com ordem de precedência de cálculos:
Além disso, permitimos que nas expressões sejam usadas funções matemáticas MQL padrão, que no total são 25. Dentre eles, em particular, existe uma função pow para exponenciação. Por esse motivo, na lista de operadores não existe um operador de exponenciação ('^'). Ademais, o operador '^' permite elevar apenas a uma potência inteira, já a função não está sujeita a essa restrição. Existe mais uma nuance que distingue o operador '^' dos outros considerados.
Autor: Stanislav Korotky