Conversão de scripts do MetaTrader 4 em NetTradeX Advisors

Introdução

Um grande número de advisors e scripts foram criados para MetaTrader 4 plataforma de comercio. Antes , os comerciantes que queriam usar esses scripts na plataforma NetTradeX , precisavam processar totalmente o código-fonte , o que levava muito tempo. Para facilitar esta tarefa uma biblioteca foi criada para compatibilidade de MQL4 e NTL + idiomas. Essa biblioteca permite simplificar o processo de conversão de scripts em linguagem NTL + para seu lançamento posterior em terminal de NetTradeX Advisors. Por causa das diferenças entre MetaTrader e NetTradeX plataformas (e entre as línguas de MQL4 e NTL +) , via de regra, você precisa fazer algumas pequenas mudanças em scripts convertidos. A parte principal da adaptação é realizada pela biblioteca MQL4.ntl , incluído no terminal de NetTradeX Advisors, no entanto, o desenvolvedor pode precisar modificar seu roteiro para o lançamento. Neste artigo será mostrado como utilizar as funções daquela biblioteca e, adicionalmente, que mudanças devem ser feitas.

Os princípios básicos para trabalhar com biblioteca MQL4.ntl

Assim , antes de iniciar o trabalho principal, você deve ter um roteiro totalmente depurada em linguagem MQL4 . Que medidas devem ser tomadas a fim de transformar esse código em um roteiro de trabalho NTL + ?

Passo 1 - em primeiro lugar, você deve criar um novo arquivo de script no Script em campo navigador no terminal de NetTradeX Advisors. O arquivo em si deve estar nas Advisors arquivo ou utilitários, dependendo do seu destino. Depois, você deve copiar todo o texto do script para o arquivo em linguagem MQL4 .

Passo 2 - Ligação de biblioteca MQL4.ntl . Para isso, adicione a linha # include " Bibliotecas \ MQL4.ntl " no início do seu arquivo . Refira-se ao mesmo tempo que não há necessidade para compilar biblioteca MQL4.ntl si e não ficheiro separado é necessário para as funções da biblioteca de trabalhar. Essa biblioteca não se destina para o lançamento independente e é utilizada para fins de auxiliares .

Passo 3 - uma tentativa de compilar o script gerado . Por que no editor de código, clique no botão Compile ou pressione F7. Muito provavelmente, o compilador irá exibir uma lista de erros e avisos que vamos eliminar passo a passo. Agora dois momentos-chave nos interessa: se o compilador detectou a biblioteca e se todas as funções especiais estão em nosso script.

Se o compilador não será capaz de detectar o arquivo da biblioteca, a mensagem " Falha ao abrir o arquivo de script " será exibida. Neste caso, certifique-se de que MQL4.ntl está a caminho , mencionado nas directivas #incluido , seu nome correto deve ser mencionado.

Em linguagem MQL4 três funções são os especiais com nomes predefinidos init () , iniciar () , deinit (). Para o lançamento no terminal de NetTradeX Advisors todas estas funções devem ser determinados. No entanto, em vários scripts uma das funções ou de ambos , o inicial () e deinicial () , pode estar faltando. Nesse caso, o compilador irá informá-lo "Nenhumas assinaturas correspondentes a" init () " " ou "não assinaturas correspondentes a ' deinit ()' " . Nesse caso, você deve adicionar () funções init () e deinit com o único operador return 0;

int init ()
{
return 0;
}
int deinit ()
{
return 0;
}

O primeiro período pode ser considerado como realizado com sucesso , se as mensagens " Falha ao abrir o arquivo de script " e "não assinaturas correspondentes a" init () " " / " Não assinaturas correspondentes aos ' deinit ()' " estão faltando. Agora , podemos passar para a eliminação de problemas locais.

Mensagens comuns de compilador, causas e formas de sua eliminação

Nesta seção, descreveria as mensagens comuns de compilador , gerados no processo de adaptação script, e decisões práticas serão dadas para a eliminação de incompatibilidade no código.

Não assinaturas correspondentes aos Imprimir

Este tipo de erro foi causado pelo fato de que na NTL + a implementação de funções com número variável de propriedades não é permitido. Neste caso, será necessário alterar a função de uma forma de modo que o número de propriedades na chamada corresponde exactamente com o número de propriedades na sua definição . A função Print () deve ter apenas uma propriedade de entrada . Desta forma, em vez de Imprimir ( property1 , propriedade 2 , propriedade 3) а concatenação deve ser produzido - Imprimir ( propriedade 1 + 2 + propriedade propriedade 3) .

Token inesperado 'unrecognized token'

Uma das razões para essa mensagem é a tentativa de ligar os arquivos de bibliotecas da linguagem MQL4 através das directivas # include . NTL + linguagem não funciona com essas bibliotecas , por isso a implementação desses arquivos é impossível e as linhas devem ser excluídos do programa.

'True' / 'False ' não está declarado

Nomes de variáveis lógicas na NTL + começar com letras minúsculas, por isso vai ser suficiente substituir verdadeira com verdadeiro e falso com falso .

Nenhuma conversão de ' _bars e ' para ' int' disponível

As barras de variáveis em MQL4 destina-se a determinar a quantidade de barras no quadro actual . Em NTL + língua existe uma homónimas Barras objeto , é por isso que no MQL4.ntl biblioteca barras variáveis ​​( com letra minúscula b ) é adicionado , retornando a quantidade de barras para o gráfico atual. É o que deve ser usado em seu script em vez de barras.

Deve retornar um valor

Esta mensagem é exibida quando você chama ao operador "retorno" a chamada vai ser retornada gratis. Com isso, a função, em que este operador é usado, é declarado como diferente de vazio valor de retorno. Ao visualizar esta mensagem , você vai precisar de um ou outro para corrigir a si própria ou especificar o valor para retorno .

Uso de número magico

Utilização de números mágicos não é apoiado na versão atual da linguagem NTL + . Para todas as posições em aberto o valor zero de números mágicos é retornado. No script em linguagem MQL4 recomenda-se prestar especial atenção ao uso de números mágicos em operadores condicionais . Muitas vezes , é suficiente apenas para excluir ou comentar a função OrderMagicNumber () , se você não precisa identificar posições , produzidos por esse advisor.

Usе de variáveis estáticas

Em NTL + a palavra-chave "estatico" não é usado. Se for necessário para salvar o valor de variáveis ​​entre lançamento de funções, tais variáveis devem ser feitas global ( sem palavra-chave static), colocando-os para fora da função . Se desejar, você pode adicionar um modificator externo , no caso de essas propriedades devem ser alteradas pelo usuário durante o lançamento ou de trabalho do script.

Especificando tamanho do lote

No tamanho atual de qualquer instrumento muito versão é de 100 000 unidades , é por isso se você usar o instrumento com tamanho diferente muito, especificar separadamente variável correspondente e atribuir valor necessário do tamanho do lote para ele, se ele é diferente de 100 000 .

Vários tipo de trabalho com arquivos DLL

Trabalhando com arquivos DLL é realizado de forma diferente em NetTradeX Advisors e terminais MetaTrader4 . Em MQL4 é necessário a descrição completa da função do módulo de DLL, e em NTL + tal descrição não é necessária. Em vez de indicar

# import " nome do arquivo ou o módulo "
    Descrição do function1 ;
    Descrição do function2 ;
    Descrição do functionN ;
# import

Você deve simplesmente criar dll objeto random_identifier ("nome of_file _or_module "); e chamar a função que você precisa por
identifier.Cal ("nome of_function " , os parâmetros de _functions_ by_commas separados ) , ou
identificador. CallProc ("nome of_function " , os parâmetros de _function _separated por _commas );

Verificar palavras-chave da linguagem

Em MQL4 e NTL + existem diferenças em palavras-chave. Advisors em linguagem MQL4 pode usar nomes de variáveis ​​ou funções , não disponível em NTL + linguagem e vice- versa. O compilador pode, por exemplo , exibir uma mensagem esperada ' ( ' para uma linha na qual a utilização de suportes não é sugerido. Uma das possíveis razões é coincidência de nome da variável com uma das palavras-chave. No caso de coincidência, é necessário substituir o nome da variável com outra em todos os locais no código do programa. a combinação de teclas CTRL + H no editor serve para chamada rápida de substituir janela

Valor Float truncado na conversão implícita para inteiro

Este aviso é exibido ao tentar atribuir valores como float e double da variável como int . Correção desta incompatibilidade não é necessária para o lançamento do roteiro, mas é desejável fazê-lo. Conversão de double para int e de flutuar em int deve ser realizada de forma explícita. Por exemplo, para a variável d do tipo duplo-lo terá a seguinte forma int (d).

Sem a conversão automática de bool para int e vice-versa

A conversão automática de int i; bool b = true; i = b; é impossível na NTL + . Nesse caso, a mensagem "Não é possível converter implicitamente de ' bool ' para 'int' " é exibida . Por isso, se você precisa esse tipo de conversão que você pode usar a seguinte construção:

int Run ()
{
/ / Conversão de bool para int ;
bool a = false;
int b = a 1:00 ? ;

/ / Conversão de int para bool
int c = 1 ;
bool d = c == 0 false : true;
}
Não é possível converter implicitamente de ' datetime ' para ' int'

Em NTL + que é necessário para realizar a conversão de objetos de data e hora para int. variável. Ela pode ser realizada da seguinte maneira int i ; datetime d : i = int ( d ) ;

constantes Cor

Em MQL4 um número de constantes podem ser utilizados para trabalhar com cores objeto de primitivas gráficas . Tal tipo de constantes podem ser alteradas em qualquer um dos 16 cores de base , por exemplo , através da indicação de cor branca ou preta . A única exceção é o uso da cor em indicadores gráficos . Se a cor é usada , que não é reconhecido pelo NTL + , é necessário que para especificar a cor por componente RGB . Por exemplo, para a cor de tomate a especificação vai ser assim: cor Tomate = 0xFF6347

Trabalhando com matriz de dados

Em MQL4 e NTL + trabalhando com matriz de dados é realizada de forma diferente. Em NTL + a declaração como nome do tipo [] é usado somente para matrizes de indicadores. Para salvar outros dados todas as matrizes são declarados no formato array "type" nome; ou disposição "type" nome ( tamanho ) . Assim, em vez de symb string [ 3] ={"EURUSD", "GBPUSD ", "AUDCAD "}; deve ser usado disposição "string" symb = {"EURUSD", "GBPUSD","AUDCAD"};

funções não suportadas

Severel funções não são suportadas no NTL + . Essas funções devem ser suprimidos ou a lógica do trabalho script deve ser alterado de modo a usar NTL + construções . No caso de utilizar tais funções na revista , a seguinte mensagem será exibida " A função não é suportada " ou "não assinaturas correspondentes a FUNCTION_NAME ' .

Lista de algumas funções não suportados :

  • SendMail ()
  • grupo de funções onArray
  • funções FileOpenHistory , FileIsLineEnding
  • grupo de funções objetos e características do objeto
  • pelo seguinte modo a função MarketInfo retorna valor zero:
    • MODE_SWAPLONG
    • MODE_SWAPSHORT
    • MODE_STARTING
    • MODE_EXPIRATION
    • MODE_MINLOT
    • MODE_LOTSTEP
    • MODE_SWAPTYPE
    • MODE_PROFITCALCMODE
    • MODE_MARGINCALCMODE
    • MODE_MARGININIT
    • MODE_MARGINHEDGED
    • MODE_FREEZELEVEL
  • empreendedores operador
  • funcionar para calcular o indicador personalizado iCustom
  • grupo de funções para trabalhar com janelas (funções de janela ) , MessageBox
  • TerminalCompany () , TerminalName () , TerminalPath ()
  • Propriedades # propriedade

resumo

Neste artigo , introduzimos dificuldades típicas , encontradas na conversão de scripts a partir de MetaTrader em NetTradeX . Este processo é consideravelmente simplificado pela biblioteca MQL4.ntl , fornecido juntamente com o terminal . A vantagem dessa biblioteca é um código totalmente aberto que o desenvolvedor pode alterar ou adicionar a seu critério . Por nossa vez , não estamos descansando sobre os louros e irá adicionar novas funções e atualizar os já existentes na biblioteca para facilitar o processo de conversão.