- Elementos Básicos da Linguagem
- Constantes, Enumeradores e Estruturas
- Programas MQL5
- Variáveis Predefinidas
- Funções Comuns
- Funções para Array
- Métodos matriciais e vetoriais
- Funções de Conversão
- Funções Matemáticas
- Funções de String
- Data e Hora
- Informações de Conta
- Verificando Estado
- Manipulação de eventos
- Informações de Mercado
- Calendário econômico
- Séries Temporais e Acesso a Indicadores
- Símbolos personalizados
- Operações de Gráficos
- Funções de Negociação
- Gerenciamento de sinais
- Funções de rede
- Variáveis Globais do Terminal
- Funções de Arquivo
- Indicadores Customizados
- Funções de Objeto
- Indicadores Técnicos
- Trabalhando com Resultados de Otimização
- Trabalhando com Eventos
- Trabalhando com OpenCL
- Trabalhar com bancos de dados
- Trabalho com DirectX
- MetaTrader para Python
- Modelos ONNX
- Biblioteca Padrão
- Migrando do MQL4
- Lista de Funções MQL5
- Lista de Constantes MQL5
Migrando da linguagem de programação MQL4 para MQL5
MQL5 é a evolução do seu antecessor - a linguagem de programação MQL4, onde inúmeros indicadores, scripts e Expert Advisors foram escritos. Apesar do fato de que a nova linguagem de programação é grandemente compatível com a linguagem da geração anterior, ainda existem algumas diferenças entre as linguagens. E quando migrar de programas, essas diferenças devem ser observadas.
Esta seção contém informações destinadas a facilitar a adaptação dos códigos para a nova linguagem MQL5 ao programadores que conhecem MQL4.
Em primeiro lugar, deve-se observar:
- A nova linguagem não contém funções start(), init() e deinit().
- Não há limite para o número de buffers de indicador.
- DLLs são carregadas imediatamente após o carregamento de um Expert Advisor (ou qualquer outro programa MQL5).
- Verificação das condições lógicas é reduzida.
- Quando os limites de um matriz forem ultrapassados, o desempenho em curso é finalizado (criticamente - com a saída de um erro).
- Originários de operadores em C++.
- A linguagem oferece o tipo de conversão implícita (mesmo de string para um número).
- As variáveis locais não são inicializados automaticamente (exceto para strings).
- Matrizes de local comum são excluídas automaticamente.
Funções Especiais init, start e deinit
A linguagem MQL4 contém apenas estas três funções pré-definidas que são usadas no indicador, script ou Expert Advisor (não contando a inclusão dos arquivos *.mqh e dos arquivos de biblioteca). Em MQL5 não existem estas funções, mas foram criadas funções análogas. A tabela mostra a correspondência aproximada das funções.
MQL4 |
MQL5 |
---|---|
init |
OnInit |
start |
OnStart |
deinit |
OnDeinit |
Funções OnInit e OnDeinit desempenham o mesmo papel que as funções init e deinit em MQL4 - elas são projetadas para encontrar o código, que será realizado durante a inicialização e finalização dos programas MQL5. Você pode simplesmente renomear estas funções em conformidade, ou deixá-las como estão, mas deve adicionar chamadas dessas funções em lugares correspondentes.
Exemplo:
void OnInit()
|
A função start é substituída por OnStart apenas em scripts. Em Expert Advisors e indicadores será renomeado para OnTick e OnCalculate, respectivamente. O código que está para ser executado durante a operação do programa MQL5 será centrado nestas três funções:
programa mql5 |
principal função |
---|---|
OnStart |
|
OnCalculate |
|
OnTick |
Se o código do indicador ou script não contém a função principal, ou o nome da função é diferente, esta função não será executada. Isso significa que se o código fonte de um script não contém OnStart, esse código será compilado como um Expert Advisor.
Se um código de indicador não contém a função OnCalculate, a compilação deste indicador será impossível.
Variáveis Predefinidas
Em MQL5 não existem as variáveis pré-definidas como Ask, Bid, Bars. As variáveis de Point e Digits têm uma grafia ligeiramente diferente:
MQL4 |
MQL5 |
---|---|
Digits |
_Digits |
Point |
_Point |
|
_LastError |
|
_Period |
|
_Symbol |
|
_StopFlag |
|
_UninitReason |
Acesso as Timeseries
Em MQL5 não existem as timeseries predefinidas como Open[], High[], Low[], Close[], Volume[] e Time[]. A profundidade necessária de uma timeseries agora pode ser definida através das funções correspondentes para acessar as timeseries.
Expert Advisors
Expert Advisors em MQL5 não requerem a presença obrigatória de funções que manipulam os eventos de recebimento de um novo tick - OnTick, com é realizado em MQL4 (a função de arranque em MQL4 é executado quando um novo tick é recebido). Em MQL5, os Expert Advisors podem conter funções pré-definidas do manipulador de vários tipos de eventos:
- OnTrade - evento de trade;
- OnChartEvent eventos de entrada do teclado e mouse, eventos de um objeto gráfico em movimento, evento de edição de texto completo na entrada da etiqueta do objeto LabelEdit;
- OnBookEvent evento do status de mudança da Profundidade do Mercado.
Indicadores Customizados
Em MQL4, o número de buffers de indicador é limitado e não pode ultrapassar a 8. Em MQL5 não existem estas limitações, mas deve ser lembrado que cada buffer de indicador requer a alocação de uma certa parte da memória para a sua localização no terminal, por isto esta nova possibilidade não deve ser utilizada abusivamente.
MQL4 oferece apenas 6 tipos de plotagem de indicadores personalizados, enquanto MQL5 agora oferece 18 estilos de desenho. Os nomes dos tipos de desenho não mudaram, mas a ideologia da representação gráfica dos indicadores mudou significativamente.
A direção da indexação nos buffers de indicador também é diferente. Por padrão, em MQL5 todos os buffers de indicador tem o comportamento de matrizes comuns, ou seja, o elemento 0 (zero) indexado é o mais antigo no histórico e, como os índices aumentam, passamos dos dados mais antigos para os mais recentes.
A única função para trabalhar com indicadores personalizados que foi preservado da linguagem MQL4 é a função SetIndexBuffer, mas para ser utilizada; agora deve ser especificado o tipo de dado a ser armazenado em um matriz, ligada ao buffer do indicador.
As propriedades de indicadores personalizados também foram modificadas e ampliadas. Novas funções para acesso a timeseries foram adicionadas, de modo que o algoritmo de cálculo total deve ser reexaminado.
Graphical Objects
O número de objetos gráficos em MQL5 foi aumentado significativamente. Além disso, objetos gráficos agora são posicionados no gráfico com a precisão de um segundo em qualquer período de tempo - agora objetos de pontos de ancoragem não são arredondados para o tempo de abertura da barra de preço no gráfico em curso.
Agora para Setas, Textos e Objetos de Etiqueta você pode especificar métodos de vinculação, e para a Etiqueta, Botão, Gráfico, Etiqueta Bitmap e Editar, os objetos podem ser configurados no canto do gráfico onde um objeto está ligado.