Você está na página 1de 121

EAFXTRADE

MQL4

Desenvolvendo seu Robô

Flávio Moraes

17
17

Sumário

Introdução

5

Introdução à programação MQL4

6

Noções básicas de MQL4

9

Alguns conceitos básicos

10

A noção de um tick

10

A noção de controle

10

A noção de comentário

11

Constantes e variáveis

12

Constantes

12

Variável

12

Tipos de dados

13

Tipo int
Tipo int

13

Tipo double

14

Tipo boll

14

Tipo string

14

Tipo color

15

Tipo datetime

17

Operações e Expressões

17

As noções de operando, operação, símbolo de operação e expressão

17

Tipos de operações

18

Operadores

21

Tipos de operadores

21

Funções

22

Tipos de programas

24

Meta Editor

26

Sistema de arquivo

26

Criando e usando programas

27

Programa em MQL4

34

Estrutura do programa em MQL4

34

Ambiente de Desenvolvimento do MT4

36

Estrutura do programa

36

Parte do cabeçalho

37

Funções especiais Funções definidas pelo usuário Funções padrão Seqüência de execução do código Execução do programa Operadores Operador de Atribuição Operador condicional 'if - else'

37

40

41

43

46

55

55

57

 
Exemplo 1
Exemplo 1

58

Exemplo 2
Exemplo 2

59

Exemplo 3
Exemplo 3

61

Exemplo 4
Exemplo 4

62

Exemplo 5 Operador while e for

 

64

65

Operador while Operador for
Operador while
Operador for
 

65

69

Operador break Operador Continue

 

72

75

Operador switch

 

77

Chamada de função

 

81

Variáveis
Variáveis
 

84

 

Variáveis predefinidas e função RefreshRates() Lista de Nomes Predefinidos Simples de Variáveis Lista de nomes predefinidos de matrizes-Timeseries Propriedades de variáveis pré-definidas Função RefreshRates ()

84

84

84

84

87

Tipos de Variáveis

 

89

Variáveis locais e globais Variáveis estáticas Variáveis externas GlobalVariables

89

90

91

93

Matrizes
Matrizes

100

Programação prática em MQL4 Programação de Operações Comerciais

112

112

Maneira comum de começar

112

Características e Regras de Ordem para Fazer Negócios

118

Introdução

Hoje em dia, um computador pessoal tornou-se indispensável para todos. O rápido desenvolvimento da Internet e do desempenho dos computadores modernos abriu novas perspectivas em muitos campos das atividades humanas. Já há dez anos, o mercado financeiro estava disponível apenas para bancos e para uma comunidade limitada de especialistas. Hoje, qualquer um pode se juntar ao mundo dos comerciantes profissionais e iniciar a negociação independente a qualquer momento.

Milhares de pessoas em todo o mundo já aprovou o uso do MetaTrader 4 pelo seu desempenho. O uso de sua linguagem de programação embutida, MQL4, eleva os comerciantes para um novo nível de negociação - para negociação automatizada.

Agora, um comerciante pode implementar suas idéias como um programa de aplicação - escrever um indicador personalizado, um script para executar operações únicas, ou criar um Expert Advisor - um sistema de negociação automatizado (robô comercial).

Um Expert Advisor (EA) pode trabalhar 24 horas por dia, 7 dias por semana, sem qualquer intervenção - acompanhar os preços com segurança, e enviar mensagens eletrônicas, para o seu celular, bem como fazer muitas outras coisas úteis.

A principal vantagem das aplicações é a possibilidade de fazer negócios de acordo com o

algoritmo definido por você. Qualquer idéia que possa ser descrita em uma linguagem algorítmica (interseção de duas médias móveis ou processamento digital de sinais, três telas por análise fractal de Elder ou Peters, uma rede neural ou construções geométricas) pode ser

codificada em uma aplicação.

O desenvolvimento de aplicações para MetaTrader 4 requer o conhecimento do MQL4. Este

livro de texto irá ajudá-lo a criar seus próprios Expert Advisors, scripts e indicadores. Este E- book didático destina-se a um grande número de leitores sem experiência em programação que desejam aprender a desenvolver aplicativos de negociação automatizados para MetaTrader 4 Client Terminal. O livro projetado de tal forma que qualquer pessoa vai dar conta de implementar seus próprios Robôs automatizados.

Introdução à programação MQL4

Antes de começar a estudar a programação MQL4, vamos definir o escopo do nosso estudo. Em primeiro lugar, deve-se notar que os programas discutidos neste livro podem ser usados apenas

como aplicativos para trabalhar no MetaTrader 4 Client Terminal. A ilustração a seguir

 

mostra o papel desses programas na gestão das negociações. Vejamos a ilustração.

 
gestão das negociações. Vejamos a ilustração.   Figura 1 Um programa desenvolvido na linguagem MQL4 como

Figura 1 Um programa desenvolvido na linguagem MQL4 como parte do MetaTrader 4 Terminal Cliente.

Se você estiver interessado em programação MQL4, você já deve ter se familiarizado com o

terminal MetraTrader 4. O terminal do cliente (Metatrader 4) é uma parte do sistema de comércio on-line. Este sistema de comércio on-line também inclui um servidor instalado em um

centro de negociação. O centro de negociação está conectado com outros participantes do mercado, como bancos e instituições financeiras.

O terminal cliente inclui um ambiente informacional, um conjunto de parâmetros com

informações sobre o estado de mercado e sobre as relações entre um comerciante e um centro de negociação. Esses parâmetros incluem informações sobre preços atuais, limitações no tamanho máximo e mínimo da ordem, distância mínima de ordens de parada, tolerância e proibição da negociação automatizada e muitos outros parâmetros úteis que caracterizam o estado atual. O ambiente informacional é atualizado quando novos sinais são recebidos pelo terminal (linha verde na Figura 1 anterior).

Controles do MetaTrader 4

O terminal cliente contém ferramentas internas que lhe permitem realizar análises técnicas do

mercado e executar a gestão comercial manual. Para análise de mercado, você pode usar indicadores técnicos e vários estudos de linha de suporte / linhas de resistência, canais de tendência, níveis de Fibonacci e assim por diante.

Para a gestão comercial manual, a barra de ferramentas de gestão de pedidos é utilizada. Usando esta barra de ferramentas, um comerciante pode abrir, fechar e modificar ordens. Além disso, o terminal tem a opção de gerenciamento automatizado da posição de ordem de parada. As ações de um trader com ferramentas de gerenciamento de negociação incorporadas resultam na formação de ordens comerciais, que são enviadas para um servidor.

Ferramentas de programação MQL4

Análise de mercado e gestão comercial no MetaTrader 4 é implementado com a ajuda de ferramentas de programação.

A linguagem MQL4 permite a criação de tais programas.

Existem três tipos de aplicativos criados em MQL4 e destinados a trabalhar no terminal

cliente:

1. Um indicador personalizado é um programa que exibe graficamente as regularidades do mercado de acordo com o algoritmo de um autor escrito no programa.

2. Um Expert Advisor é um programa que permite a automação parcial de operações de negociação, ou permite negociação totalmente automatizada.

3. Um script é um programa para executar ações únicas, incluindo a execução de operações comerciais.

únicas, incluindo a execução de operações comerciais. A Figura 1 mostra que os programas em MQL4

A Figura 1 mostra que os programas em MQL4 tem os mesmos meios de acesso ao ambiente

informacional do terminal do cliente utilizado nas negociações manuais (setas azuis).

Programas em MQL4 pode influenciar diretamente na gestão da sua conta de negociação (setas vermelhas).

Programas de diferentes tipos podem ser usados simultaneamente e podem trocar dados entre eles. Usando essas aplicações, um programador pode automatizar uma grande parte das operações de negociação, ou criar um robô que irá negociar sem a interferência humana.

Aplicativos e ferramentas de gerenciamento manual podem ser usados no terminal cliente simultaneamente, complementando um ao outro.

 

OBS: A característica técnica fundamental de negociação usando o sistema de comércio on-line

MetaTrader é que todas as ações de gerenciamento são produzidos no terminal do cliente e,

 

em seguida, enviado para um servidor. Os programas de aplicação (Expert Advisor, script e

 

indicador) podem funcionar apenas como parte do terminal cliente, desde que estejam

 

conectados a um servidor (centro de negociação). Nenhum dos programas de aplicação fica

 

instalado no servidor.

 

O servidor só processará sinais provenientes de um terminal cliente. Se um terminal cliente estiver desconectado da Internet ou se um programa aplicativo (Expert Advisor ou script) executado nele não gerar nenhuma ação de gerenciamento, nada acontecerá no servidor.

O escopo do nosso estudo inclui programas (Expert Advisors, scripts e indicadores

personalizados) que realizam negociações parcialmente ou totalmente automatizadas e que ampliam significativamente a manutenção informacional da negociação (ver Figura 1). Neste livro, você encontrará a descrição dos componentes do programa, e você encontrará as principais regras de criação e uso de programas. Também vamos considerar em pormenor exemplos de programas e exemplos de parâmetros de ambiente informacional do terminal cliente, que estão disponíveis para um programa durante a sua execução.

OBS:

Os programas para negociação automatizada têm muito mais usos potenciais do que as

ferramentas manuais de gerenciamento comercial.

Na

maioria dos casos, um programa em MQL4 torna o trabalho de um profissional negociador

 

mais fácil, eliminando a necessidade de um acompanhamento constante de situações de

 

mercado, sentado diante de um computador por um longo período de tempo.

 

Também pode ajudar a aliviar a tensão nervosa e a diminuir o número de erros que aparecem

 

em

períodos de extrema tensão emocional. Mas, o principal é que o uso do método do

 

programa de gestão do comércio permite que os comerciantes desenvolvam suas próprias

 

idéias e testá-los em dados históricos, selecionar parâmetros ótimos para aplicar essas idéias e,

finalmente, implementar uma estratégia de negociação pensada.

Noções básicas de MQL4

Esta seção representa os termos básicos para entender o MQL4:

Termos básicos são descritos, tais como tick (a mudança de preço), controle de algoritmos, e comentário em programas.

O principal evento quando a negociação em mercados financeiros é a mudança

de preço. É por isso que tick é um evento importante que faz com que os

mecanismos básicos dos programas MQL4 sejam executados.

O que acontece quando um novo tick entra?

Que ações o terminal deve tomar? Veremos mais sobre o assunto, neste E-book.

deve tomar? Veremos mais sobre o assunto, neste E-book. 2. Constantes e variáveis Os termos constantes

Os termos constantes e variáveis são comuns quando falamos de programação a diferença entre esses termos é explicado.

Como o termo sugere, uma constante é algo que permanece o mesmo, definido uma vez e nunca mais muda. Ao contrário da constante, uma variável é um objeto de código de programação que pode ter seu conteúdo alterado a qualquer momento.

É impossível escrever um programa sem usar objetos (constantes) imutáveis e / ou objetos que podem ser modificados durante a execução do programa (variáveis).

Certos tipos de dados são usados em qualquer linguagem de programação, seja

O tipo de dados de uma variável é escolhido de

acordo com sua finalidade. Como podemos declarar uma variável? Como podemos inicializá-lo (predefinir seu valor inicial)? Uma escolha errada do tipo para uma variável pode atrasar o programa ou mesmo resultar em ações erradas. Mostraremos como utilizar mais a frente.

ela em C, Delphi, Java e etc

Como qualquer outra linguagem de programação, O MQL4 processa toda forma de operações e executa qualquer tipo de expressões criadas pelo desenvolvedor. Sem saber sobre os recursos de algumas operações, você pode fazer erros sutis.

Existem operadores simples e operadores compostos. Uma ação necessária não deve sempre ser executada por um operador simples. Se for necessário que um grupo de operadores seja executado como um grande operador, esse grupo deve ser incluído em um operador composto. Requisitos e exemplos específicos de utilização de operadores são dados mais a frente.

A necessidade de criar funções nos leva ao termo função . Para usar a função de diferentes localizações no programa, é necessário fornecer-lhe parâmetros de função . Vamos considerar o processo para criar uma função personalizada. Exemplos de utilização de funções padrão são fornecidos.

Programas Scripts, indicadores e Expert Advisors são os tipos de programas MQL4 que permitem cobrir praticamente toda a classe de problemas relativos à negociação em mercados financeiros. É necessário compreender as finalidades de cada tipo de programas para usar MetaTrader 4 Client Terminal da melhor maneira.

Alguns conceitos básicos

O assunto de nosso interesse aqui é criar um programa escrito em MQL4. Antes de iniciar uma

apresentação detalhada das regras da escrita de programas, é necessário descrever os conceitos básicos que caracterizam um programa e suas inter-relações com o ambiente de informação. O MetaTrader 4 Client Terminal funciona com uma conexão on-line. A situação nos mercados financeiros muda continuamente, o que afeta gráficos de símbolos no terminal do cliente. Os Ticks fornecem ao terminal cliente informações sobre as mudanças de preços no

mercado.
mercado.

A noção de um tick

Um tick é um evento que é caracterizado por um novo preço do símbolo em algum instante.

Os Ticks são entregues a cada terminal do cliente por um servidor que está instalado em um centro de negociação. Conforme a situação atual do mercado, os Ticks são atualizados sempre

que houver mudança nos preços, e podem ser recebidos mais ou menos freqüentemente, mas

cada um deles traz uma nova cotação de preço.

Por exemplo, um Expert Advisor (EA) não fica funcionando o tempo todo. Um EA é ativado no

momento que cada tick é recebido pelo terminal cliente. Por esta razão, não caracterizamos tick

como apenas uma nova cotação, mas como um evento a ser processado pelo terminal cliente.

A duração da operação de uma EA depende do que foi programado para ele fazer. Normal EAs

completar um ciclo de processamento de informações durante alguns décimos ou centésimos de segundo. Dentro deste período, o EA pode ter processado alguns parâmetros, feito uma

decisão de negociação, desde o comerciante com algumas informações úteis e assim por diante. Tendo terminado esta parte do seu trabalho, a EA vai para o modo de espera até um

novo Tick ser recebido pelo Terminal Cliente. Este novo tick lança o EA novamente, o programa

faz as operações apropriadas novamente e retorna ao modo de espera. A descrição detalhada

de como o aparecimento de um novo tick influencia a operação do programa segue a seguir.

A noção de controle

Controle é o termo usado para falar sobre o fluxo de execução de código dentro de um

programa, bem como o fluxo entre o programa e o terminal do cliente.

Controle é o processo de execução de ações predefinidas pelo algoritmo do programa e os

recursos do terminal do cliente. O controle pode ser transferido dentro do programa de uma

linha de código para outra, bem como do programa para o terminal do cliente.

Antes de iniciar o EA, o controle está sob a supervisão do terminal cliente. Uma vez que o EA é

iniciado e um novo Tick é recebido, o terminal cliente transfere o controle para o EA. O código

do programa começa a ser executado neste momento.

O terminal cliente, depois de ter transferido o controle para o programa, não interrompe sua operação. Ele continua trabalhando com o desempenho máximo durante todo o período de

tempo em que é iniciado no PC. O programa só pode começar a operar no momento em que o

terminal cliente transferiu o controle para ele.

A noção de comentário

Um comentário é uma parte opcional e não executável de um programa que explica o código. Portanto, o comentário é uma parte opcional de um programa. Isso significa que um programa pronto funcionará de acordo com seu código, independentemente de haver comentários ou não.

No entanto, os comentários facilitam a compreensão do código do programa. Meu conselho é

que sempre comente o seu código, veja o exemplo:

facilitam a compreensão do código do programa. Meu conselho é que sempre comente o seu código,

Constantes e variáveis

Constantes

Constante nada mais é do que parte de um programa.

Constante nada mais é do que parte de um programa.

Constante nada mais é do que parte de um programa.
Constante nada mais é do que parte de um programa.
Uma constante em um programa é semelhante a uma constante usada em equações

Uma constante em um programa é semelhante a uma constante usada em equações

matemáticas. É um valor invariável. NUNCA MUDA.

em um programa é semelhante a uma constante usada em equações matemáticas. É um valor invariável
Exemplos:
Exemplos:

A raça humana descobriu constantes naturais, universais, cujos valores não dependem de nós de modo algum. Por exemplo, em física, a aceleração de queda livre é sempre igual a

9,8 m / s / s ;

Em matemática, Pi = 3,14.

Constante é também um termo usado em equações matemáticas. Por exemplo, na equação

de Y = 3 * X + 7, os números 3 e 7 são constantes. Os valores de tais constantes são

totalmente dependentes da vontade da pessoa que fez a equação. Esta é a analogia mais

próxima das constantes usadas em programas MQL4.

Veja a imagem um exemplo de constante no Código MQL4.

Veja a imagem um exemplo de constante no Código MQL4.

Variável

Ao Contrário da constante, as variáveis podem ser alteradas a qualquer momento dentro do programa, o valor recebido por uma determinada variável fica armazenada somente na

memoria do computador, e essa variável pode receber outro valor sempre que for necessário.

Veja o Exemplo de uma Variável.

Veja o Exemplo de uma Variável. Tipos de dados Acima falamos de constantes e variáveis, agora

Tipos de dados

Acima falamos de constantes e variáveis, agora vou mostrar para vocês os tipos de dados

utilizados na hora de declarar uma variável em MQL4.

As variáveis podem ser:

int (números inteiros)

double (números com casas decimais)

bool (valores booleanos, que são valores lógicos (true ou false))

string (valores do tipo texto)

color (valores do tipo de cor)

datetime (valores de data e hora)

Tipo int
Tipo int

Os valores de tipo Int são inteiros, também conhecidos como números inteiros. Esse tipo inclui

valores que são inteiros por sua natureza.

Int Art

= 10 ;

// Exemplo de variável inteira

int B_27 = - 1 ;

// Exemplo integer variável

int Num

= 21 ;

// Exemplo inteiro variável

int Max

= 2147483647 ;

// Exemplo inteiro variável

int Min

= - 2147483648 ;

// Exemplo de variável inteira

Tipo double

As variáveis do tipo double são números reais que contêm uma parte fracionária.

Os valores de exemplo deste tipo podem ser quaisquer valores que tenham uma parte

Os valores de exemplo deste tipo podem ser quaisquer valores que tenham uma parte

fracionária.

Os valores de exemplo deste tipo podem ser quaisquer valores que tenham uma parte fracionária.

double Art

= 10,123 ;

// Exemplo de variável real

double B_27

= - 1,0 ;

// Exemplo de variável real

double Num

= 0,5 ;

// Exemplo variável real

double MMM

= - 12,07 ;

// Exemplo de variável real

double Price_1 = 1,2756 ;

// Exemplo de variável real

Tipo boll

Os valores de um tipo bool são valores de tipo booleano (lógico) que contêm falsidade ou verdade. Essas variáveis podem receber valores como True e False ou 1 e 0 veja o

exemplo:
exemplo:

bool aa

= True;

//

Variável booleana аа tem o valor de true

 

bool B17

= TRUE;

//

A

variável booleana B17 tem o valor de true

bool Hamma = 1;

//

Variável booleana Hamma tem o valor de true

bool Asd

= False;

// Variável booleana Asd tem o valor de false

 

bool Nol

= FALSE;

//

A variável booleana Nol tem o valor de false

bool Prim

= 0;

//

A variável booleana Prim tem o valor de false

Tipo string

string Prefix = "MetaTrader 4" ;

string Postfix = "_of_my_progr. OK" ;

string Name_Mass = "Histórico" ; // Exemplo variável string

string text = "Linha Superior \nLinha Baixa" ; // o texto contém caracteres de alimentação de linha

// Exemplo variável string

// Exemplo variável string

Tipo color

As

cores são armazenados como

cor tipos de dados.
cor
tipos de dados.

O

significado de "cor" (azul, vermelho, branco, amarelo, verde e assim por diante) é de

conhecimento comum. É fácil imaginar o que uma variável ou uma constante do tipo de color

pode significar. É uma constante ou uma variável, cujo valor é uma cor. Pode parecer um pouco

incomum, mas é muito simples, geralmente falando. Como o valor de uma constante de

número inteiro é um número, o valor de uma constante de cor é uma cor.

Os valores de constantes e variáveis de cores podem ser representados como um dos três tipos:

literais, representações inteiras e nomes de cores.

Literais
Literais

O valor do tipo de cor representado como um literal consiste em três partes que representam os

valores numéricos da intensidade de três cores básicas: vermelho, verde e azul (RGB). O valor

deste tipo começa com 'C' e é citado por aspas simples.

Os

valores numéricos da intensidade RGB variam de 0 a 255, e podem ser gravados decimal e

hexadecimal.

 

Exemplos: C'128,128,128 '(cinzento), C'0x00,0x00,0xFF' (azul), C'0xFF, 0x33,0x00 '(vermelho).

Representação de inteiro

A representação de inteiro é registrada como um número hexadecimal ou decimal. Um número

hexadecimal é exibido como 0xRRGGBB, onde RR é o valor de intensidade vermelha, GG de verde e BB de azul. As constantes decimais não são refletidas diretamente no RGB. Eles

representam o valor decimal de uma representação hexadecimal inteiro.

Representação dos valores de tipo de cor como inteiros e como hexadecimais literais é muito amigável. A maioria dos editores modernos de texto e gráficos fornece informações sobre a

intensidade dos componentes vermelho, verde e azul no valor selecionado de cor. Basta

selecionar uma cor em seu editor e copiar os valores encontrados em sua descrição para a

representação do valor de cor correspondente em seu código.

Exemplos: 0xFFFFFF (branco), 0x008000 (verde), 16777215 (branco), 32768 (verde).

Em MQL4 A maneira mais fácil de definir uma cor é especificar seu nome de

Em MQL4 A maneira mais fácil de definir uma cor é especificar seu nome de acordo com a tabela de cores. Neste caso, o valor de uma cor é representado como uma palavra

correspondente à cor, por exemplo, Vermelho representa a cor vermelha. Veja a tabela:

é representado como uma palavra correspondente à cor, por exemplo, Vermelho representa a cor vermelha. Veja
16
16

Tipo datetime

O tipo de dados datetime é usado para data e hora.

Valores desse tipo podem ser usados em programas para analisar o momento de início ou término de alguns eventos, por exemplo, a liberação de notícias importantes, início / fim do dia de trabalho e assim por diante. As constantes de data e hora podem ser representadas como

uma linha literal composta de seis partes que representam os valores numéricos de ano, mês,

dia (ou dia, mês, ano), hora, minuto e segundo.

A constante começa com "D" e é enquadrada em aspas simples. Você também pode usar

valores truncados sem data, ou sem tempo, ou apenas como um valor vazio. O intervalo de

valores é de 1 de janeiro de 1970 até 31 de dezembro de 2037. Os valores de constantes e

variáveis de tipo de data e hora tomam 4 bytes na memória do computador. Um valor

representa a quantidade de segundos decorridos desde 00:00 de 1 de janeiro de 1970.

Aqui estão alguns exemplos de como usar uma variável do tipo datetime em um programa.

datetime Alfa

= D'2004.01.01 00:00';

// Novo Ano

datetime Tim = D'01.01.2004';

// Novo Ano

datetime Tims

= D'2005.05.12 16:30:45';

// May 12, 2005 4:30:45 p.m.

datetime N_3

= D'12.05.2005 16:30:45';

// May 12, 2005 4:30:45 p.m.

datetime Compile = D''; date] 00:00:00'

// equivalent of D'[compilation

Operações e Expressões

Para entender o significado de operações e expressões em MQL4, não são necessárias analogias especiais. Praticamente, é o mesmo que operações e expressões na aritmética simples. Todo mundo entende que no registro f = n + m , membros f , n , e m são variáveis, sinais = e + são sinais operacionais e n + m é uma expressão.

Na seção anterior do livro, você aprendeu sobre a necessidade de apresentar dados de diferentes tipos. Aqui vamos entrar em possíveis relações entre esses dados. Em MQL4, existem

algumas limitações naturais para as regras de utilização de operações em expressões.

As noções de operando, operação, símbolo de operação e expressão

Operando é uma constante, uma variável, um componente de matriz ou um valor retornado por

uma função. (As funções são consideradas na seção sobre as funções , as matrizes são

consideradas na seção sobre arrays , neste estágio atual de aprendizagem, é suficiente para

entender os operandos como constantes e variáveis que já estudamos).

Uma operação é uma ação feita sobre operandos .

Um símbolo de operação é um caractere predefinido ou grupo de caracteres que ordenam

executar uma operação.

Uma expressão é uma seqüência de operandos e símbolos de operação;

Tipos de operações

Estes são os seguintes tipos de operações em MQL4:

Estes são os seguintes tipos de operações em MQL4:  Aritmética  Atribuição  Relacional 

Aritmética

Atribuição

Relacional

Boolean

Bit a bit

Comma

Chamada de função

 Bit a bit  Comma  Chamada de função Operações são usadas em operadores (ver

Operações são usadas em operadores (ver Operadores ). Somente em operadores faz seu uso

faz sentido e é realizado em um programa. A possibilidade de utilizar uma operação é

determinada pelas propriedades dos operadores; Se as propriedades do operador permitem que

você utilize esta operação específica, você pode usá-la; Caso contrário, você não deve usar esta

operação. É proibido o uso de operações fora dos operadores.

Operações aritméticas

Os seguintes símbolos são exemplos de operação aritmética.

seguintes símbolos são exemplos de operação aritmética. Operações de atribuição Os seguintes símbolos são

Operações de atribuição

Os seguintes símbolos são exemplos de operação de atribuição.

Operações relacionais Os símbolos a seguir são exemplos de operação relacional. Operações booleanas (lógicas) Os

Operações relacionais

Os símbolos a seguir são exemplos de operação relacional.

símbolos a seguir são exemplos de operação relacional. Operações booleanas (lógicas) Os símbolos a seguir são

Operações booleanas (lógicas)

Os símbolos a seguir são exemplos de operação booleanos.

Os símbolos a seguir são exemplos de operação booleanos. Operações bit a bit Operações bit a

Operações bit a bit

Operações bit a bit só podem ser executadas com inteiros. As operações a seguir são operações

bit a bit.

Isso retorna o complemento do valor da variável. O valor da expressão contém um 1 em todos

os locais em que os valores da variável contêm um 0 e contém um 0 em todos os locais nos quais os valores da variável contêm um 1.

A representação binária de x é deslocada por y lugares para a direita. Esse deslocamento para

a direita é lógico; Isso significa que todos os lugares esvaziados à esquerda serão preenchidos

com zeros.
com zeros.

X = x >> y;

A representação binária de x é deslocada por y lugares para a esquerda; Os lugares

A representação binária de x é deslocada por y lugares para a esquerda; Os lugares vazios à

esquerda serão preenchidos com zeros.

binária de x é deslocada por y lugares para a esquerda; Os lugares vazios à esquerda

X

= x << y;

O

exemplo seguinte demonstra a operação bit a bit E das representações binárias de x e y . O

valor da expressão contém 1 (TRUE) em todos os lugares, em que x e y contêm não-zero, e o

valor da expressão contém 0 (FALSE) em todos os outros locais.

B

= ((x & y)!= 0);

O

exemplo seguinte demonstra a operação bit a bit OU das representações binárias de x e y . O

valor da expressão contém 1 em todos os lugares, em que x ou y não contém 0. Ele contém 0

em todos os outros lugares.

B = x

| Y;

O exemplo seguinte demonstra a operação bit a bit OU EXCLUSIVO das representações binárias de

O exemplo seguinte demonstra a operação bit a bit OU EXCLUSIVO das representações binárias de x e y . O valor da expressão contém 1 nos lugares, nos quais x e y possuem valores

binários diferentes. Ele contém 0 em todos os outros lugares.

contém 1 nos lugares, nos quais x e y possuem valores binários diferentes. Ele contém 0

B = x ^ y;

Operação por vírgula

As expressões separadas por vírgulas são calculadas da esquerda para a direita. Todos os efeitos dos cálculos na expressão esquerda ocorrem antes da expressão direita ser calculada. O tipo e o valor do resultado coincidem com o tipo e valor da expressão direita.

for(i=0,j=99; i<100; i++,j--) Print(array[i][j]); // Loop statement

A seguinte lista de parâmetros transferidos pode ser considerada como um exemplo.

My_function (Alf, Bet, Gam, Del) // Calling for a function with arguments

Chamada de função

Uma chamada de função pode ser usada como um operador separado e ser encontrada em qualquer lugar em um programa onde implique um determinado valor (com exceção de casos predefinidos). O formato e as regras de execução de uma chamada de função abrangem

funções padrão (built-in) e definidas pelo usuário.

Uma chamada de função consiste no nome da função e na lista dos parâmetros passados entre

parênteses:

Function_name(Parameters_list)

// Chamada de função como tal

Operadores

Tipos de operadores

Existem dois tipos de operadores: operadores simples e compostos.

Operadores simples

Operadores simples em MQL4 terminam com o caractere ";" (ponto e vírgula). Usando este

separador, o PC pode detectar onde um operador termina e outro começa. Um ponto e vírgula

é tão necessário em um programa como um espaço vazio é necessário em um texto normal para separar frases. Um operador pode tomar várias linhas. Vários operadores podem ser

colocados numa linha.

Aqui estão exemplos de operadores simples.

Day_Next= TimeDayOfWeek(Mas_Big[n][0]+60); Go_My_Function_ind();

// Operador simples // Operador simples

a=3;

b

=

a

* x

+ n;

i++;

// vários operadores na linha

Print("

Day= ",TimeDay(Mas_Big[s][0]),

// um operador

 

"

Hour=",TimeHour(Mas_Big[s][0]),

// Outro Operador

"

Minute=",TimeMinute(Mas_Big[s][0]),// mais um Operador

"

Mas_Big[s][0]= ",Mas_Big[s][0],

// todos dentro da Print

"

Mas_Big[s][1]= ",Mas_Big[s][1]);

Operadores compostos (compostos)

Um operador composto consiste em vários simples separados pelo caractere ";" E é fechado em

chaves. Para poder usar vários operadores onde apenas se espera encontrar um deles, os

programadores usam um operador composto (também o chamam de "bloco" ou "bloco de código"). A lista de operadores em um composto é separada por chaves. A presença de uma

chave de fecho marca o fim de um operador composto.

Aqui está uma utilização exemplar de um operador composto. Ele começa com o operador

exemplar de um operador composto. Ele começa com o operador condicional if (expressão) seguido por um
condicional if (expressão) seguido por um composto. O operador composto contém uma lista de

condicional if (expressão) seguido por um composto. O operador composto contém uma lista de

operadores executáveis.

Funções O avanço tecnológico mais importante na engenharia de computadores é a possibilidade de criação

Funções

O avanço tecnológico mais importante na engenharia de computadores é a possibilidade de criação e armazenamento de fragmentos de código separados que descrevem as regras de processamento de dados para resolver um problema ou completar uma pequena tarefa. Tal

possibilidade também existe em MQL4.

Uma função é uma parte específica nomeada de um programa que descreve um método a ser executado.

Vamos considerar dois aspectos das funções: descrições de função e chamadas de função.

A descrição de uma função é único, chamado parte de um programa destinado à execução.

Uma chamada de função (ou, referência de função) é um registro, cuja execução resulta na execução da função a que se refere.

Em nossa vida cotidiana, podemos encontrar muitas funções analógicas. Tomemos, por exemplo, o sistema de frenagem de um carro. O mecanismo de atuação que realiza corretamente a frenagem, bem como a idéia implementada pelo engenheiro, é como uma função, enquanto que o pedal do freio é como uma chamada da função. O motorista pressiona o pedal para baixo, e os mecanismos de atuação executa algumas ações até parar o carro.

Da mesma forma, se uma chamada de função ocorre em um programa, então a função do mesmo nome será chamado e executado. Ou seja, uma certa seqüência de cálculos ou outras ações serão realizadas, como exibir uma mensagem ou abrir uma ordem. O uso geral de uma função é fazer com que uma parte logicamente concluída do código fora do texto básico do programa e substituí-lo apenas com a chamada para esta parte do código. Tal construção de programa tem algumas vantagens incontestáveis.

Primeiro, o nome da função é composto de tal maneira a ser lido facilmente.

Em segundo lugar, é fácil ver e modificar o nome de uma função sem fazer nenhuma alteração no código básico do programa.

Em terceiro lugar, uma função pode ser composta como um único arquivo e usada em outros programas. Isso libera o programador da necessidade de inserir os mesmos fragmentos do código em cada programa recém-criado.

A maioria do código em MQL4 é escrito na forma de funções. Esta abordagem tornou-se generalizada e é um padrão agora.

Exemplo de um função escrita em MQL4:

Veja que ela recebe um único parâmetro de entrada do tipo int.

que ela recebe um único parâmetro de entrada do tipo int. Outro exemplo de função, onde

Outro exemplo de função, onde

parte dos cálculos é composto como uma função. O código

 

básico contém uma chamada de função definida pelo usuário. A descrição da função definida

pelo usuário está localizada depois do código básico.

 
Veja como é a escrita de uma função: Isso resume no que é uma função,

Veja como é a escrita de uma função:

Veja como é a escrita de uma função: Isso resume no que é uma função, o

Isso resume no que é uma função, o que vai diferenciar uma função de outra é a parte da funcionalidade, a parte de estrutura é igual.

Tipos de programas

Ao começar a escrever um programa em MQL4, você deve, em primeiro lugar, responder à pergunta sobre o tipo de programas que será. O conteúdo e a funcionalidade do programa

dependem totalmente disso. Em MQL4, existem três tipos de programas de aplicação: EAs,

scripts e indicadores personalizados. Qualquer programa que você desenvolver irá

pertencer a um destes tipos. Todos eles têm seus propósitos e características especiais.

Um Expert Advisor (EA) é um programa codificado em MQL4 e chamado pelo terminal cliente

para ser executado em cada tick. O objetivo principal dos EAs é o controle programado sobre

os comércios. Os EAs são codificados pelos usuários. Não existem EAs incorporados no

terminal do cliente.

O script é um programa codificado em MQL4 e executado pelo terminal cliente apenas uma

vez. Scripts são destinados a executar operações que devem ser executadas apenas uma

vez. Os scripts são codificados pelos usuários. Eles não são entregues com o terminal do

cliente como programas internos.

Um indicador personalizado é um programa codificado em MQL4 e chamado pelo terminal

cliente para ser executado em cada tick. Ele é basicamente destinado a exibição gráfica de

dados preliminarmente calculados, como linhas. Indicadores não podem negociar. Existem dois

tipos de indicadores: indicadores técnicos (incorporados) e indicadores personalizados.

Você escolhe o tipo de programa a ser criado, isso vai depender da finalidade do programa específico e das propriedades e limitações dos diferentes tipos de programas.

É importante ressaltar que se tratando de EAs, você pode anexar apenas 1 EA por janela Gráfica.

Meta Editor

Nesta seção, vamos nos debruçar sobre a ordem geral de criação de programas em MQL4 usando o MetaEditor.

MetaEditor é um editor especializado multifuncional destinado a criar, editar e compilar programas de aplicação escritos em MQL4. O editor tem uma interface amigável que lhe

permite navegar facilmente ao escrever e verificar um programa.

Veja na imagem como acessar o MetaEditor:

um programa. Veja na imagem como acessar o MetaEditor: Sistema de arquivo O terminal cliente reconhece

Sistema de arquivo

O terminal cliente reconhece os tipos de programas pela sua localização em diretórios separados. Todos os programas de aplicação estão concentrados no diretório ClientTerminal_folder\ experts.

EAs, scripts e indicadores personalizados que você vai usar diariamente devem estar localizados em diretórios correspondentes, como mostrado na Figura abaixo a seguir.

Os EAs estão localizados diretamente no diretório:

ClientTerminal_folder\experts .

scripts e indicadores estão em subdiretórios:

ClientTerminal_folder\experts\scripts

ClientTerminal_folder\experts\indicadores.

Criando e usando programas 27
Criando e usando programas 27

Criando e usando programas

Os programas escritos em MQL4, EAs, scripts e indicadores, são criados usando o MetaEditor.

O arquivo executável do MetaEditor ( MetaEditor.exe ) é fornecido como parte do terminal do cliente e está localizado no diretório raiz do terminal. O guia do usuário do MetaEditor é aberto pressionando F1. Contém informações gerais necessárias para a criação de novos programas. O editor pode ser aberto clicando no nome do arquivo MetaEditor.exe ou em um atalho no seu desktop.

Estrutura do terminal cliente

Para a conveniência da operação, o MetaEditor possui barras de ferramentas internas:

"Navigator" ( Ctrl + D ) e "Toolbox" ( Ctrl + T ).

MetaEditor possui barras de ferramentas internas: "Navigator" ( Ctrl + D ) e "Toolbox" ( Ctrl

Criando um novo programa

Geralmente, durante a criação de um novo programa, a caixa de ferramentas e as janelas do navegador são ocultas. Assim, a atenção de um usuário fica concentrada na criação do

programa. Para criar um novo

em Novo . Ou, use o botão para a criação de novos arquivos:

clique

programa,

para

o menu Arquivo do editor e

clique programa, vá para o menu Arquivo do editor e Após todas essas ações, o "Assistente

Após todas essas ações, o "Assistente de EA" oferece uma lista de tipos de programas a serem criados.

Se você precisa criar um EA, marque EA e clique em Avançar . Na próxima

Se você precisa criar um EA, marque EA e clique em Avançar . Na próxima janela é necessário indicar o nome do EA a ser criado. Suponha que ele é chamado de EAFXTRADE_V01.mq4.

criado. Suponha que ele é chamado de EAFXTRADE_V01.mq4 . Depois de clicar em Avançar, você será

Depois de clicar em Avançar, você será direcionado para próxima tela, manipuladores de eventos do Expert Advisor.

Você não precisa marcar nada nesta tela, pois as configurações faremos diretamente no código. Agora

Você não precisa marcar nada nesta tela, pois as configurações faremos diretamente no código. Agora você será levado para próxima tela Testador de Manipuladores de Eventos.

para próxima tela Testador de Manipuladores de Eventos. Não precisa marcar nada, basta clicar em Concluir.

Não precisa marcar nada, basta clicar em Concluir.

Veja que o arquivo EAFXTRADE_V01.mq4 esta aberto no MetaEditor veja a figura abaixo:

Você vê, o código contém principalmente comentários. Já sabemos que os comentários constituem uma parte

Você vê, o código contém principalmente comentários. Já sabemos que os comentários constituem uma parte não obrigatória de um programa e o texto dos comentários não é processado pelo programa.

Existem três funções especiais no programa: OnInit(), OnTick() e Ondeinit().

Cada função contém apenas um Return(0).

O código de programa gerado pelo EA Wizard é apenas um padrão, usando o qual você pode criar um novo programa. O código final do programa não contém obrigatoriamente todas as funções especiais indicadas. Eles estão presentes apenas no padrão, porque, como regra geral, um programa médio contém todas essas funções. Se alguma das funções não for usada, sua descrição pode ser apagada.

OnInit(), responsável em inicializar o EA, usamos essa função para carregar variáveis, obter todas informações necessárias para o EA começar a trabalhar.

OnTick(), essa função ela é chamada sempre que o MetaTrader, recebe uma nova cotação de preço(Tick) de um determinado comercio. Aqui é onde o robô vai executar tudo que você programou nele.

OnDenit(), responsável em liberar todas as variáveis e funções utilizadas durante o processamento do EA. Essa função é chamada sempre que o EA é desligado.

Mais a frente iremos dar inicio nas implementações e criações de funções.

Compilação do programa

Para tornar um programa utilizável na prática, ele deve ser compilado.

Para isso, o botão

na prática, ele deve ser compilado. Para isso, o botão (F5) no MetaEditor deve ser usado.

(F5) no MetaEditor deve ser usado. Se um programa não

contiver quaisquer erros, ele é compilado e a seguinte mensagem ocorre na caixa de

ferramentas.

e a seguinte mensagem ocorre na caixa de ferramentas. Além disso, quando um programa é compilado

Além disso, quando um programa é compilado , um novo arquivo (EAFXTRADE_V01.ex4)

aparece no diretório correspondente (neste caso, em Terminal_directory\experts). O programa

está pronto para operação no terminal cliente MetaTrader4. Durante a compilação, a última

versão do texto de origem do programa com o mesmo nome (no nosso caso, é o arquivo

create.mq4) será salvo no mesmo diretório.

Outra coisa que acontece quando um programa é compilado é que uma linha com o nome do

EA criado aparecerá na pasta EAs da janela do navegador do terminal do cliente.

na pasta EAs da janela do navegador do terminal do cliente. Se forem detectados erros no

corrigir os erros e tentar compilar o programa novamente. Uma compilação de programas bem-

sucedida é possível somente se não houver erros no programa.

Usando um programa na prática

Se um programa aplicativo (EA, script ou indicador) tiver sido compilado com êxito e seu nome

tiver aparecido na janela do navegador do terminal do cliente, ele poderá ser usado na prática.

Para utilizar o EA, basta usar o (método "arrastar e soltar"). Isso significa que o programa será

anexado a um gráfico que você desejar. E estará pronto para execução.

Um EA e um indicador funcionarão até que um usuário termine a execução do programa

Um EA e um indicador funcionarão até que um usuário termine a execução do programa

manualmente. Um script normal irá parar de operar-se após a execução de seu algoritmo.

a execução do programa manualmente. Um script normal irá parar de operar-se após a execução de

Mostrarei detalhes mais a frente, quando estivermos concluído o desenvolvimento do nosso EA.

Programa em MQL4

Deve ser observado desde o início que qualquer pessoa pode programar em MQL4, embora ele

requer atenção e certo conhecimento.

Talvez alguns comerciantes esperam dificuldades em estudar programação.

É difícil para eles imaginar processos complicados em execução no interior de seus computadores. Felizmente, os desenvolvedores de linguagem MQL4 tentou torná-lo amplamente disponível para os usuários. Uma forma agradável de criar programas em MQL4 é que um programador não precisa necessariamente ter um conhecimento especial sobre a interação do terminal cliente com um sistema operacional, de características de protocolo de

rede ou de uma estrutura de compilador.

O processo de criação de programas em MQL4 é um trabalho simples e fácil. Por exemplo, um

motorista não tem que saber uma estrutura de motor para dirigir um carro. Ele só precisa

aprender a dirigir.

No entanto, antes de dirigir um carro em ruas movimentadas, cada motorista tem que passar por treinamento. Algo como isso deve ser feito por um programador de partida, aprender alguns princípios simples é a base para criar programas, e depois disso, lentamente começando

a aprofundar no seu desenvolvimento.

Estrutura do programa em MQL4

Nas primeiras seções, abordamos algumas noções básicas da linguagem de programação MQL4. Agora vamos estudar como um programa é organizado em geral. Para resolver esse

problema, estudaremos seu esquema estrutural.

Como mencionado acima, o código do programa principal escrito por um programador é colocado dentro de funções definidas pelo usuário. Em Funções, discutimos a noção e as

propriedades das funções internas e definidas pelo usuário. Resumidamente, uma função

definida pelo usuário tem uma descrição e uma chamada de função é usada para iniciar sua execução em um programa. Uma função interna ou definida pelo usuário pode ser executada

somente depois que ela é chamada. Nesse caso, a função é chamada em alguma parte deste

programa.
programa.

As propriedades das funções especiais são descritas em detalhe em Funções especiais. Aqui,

estudamos apenas as principais informações sobre eles. Uma função especial é uma função

chamada e executada pelo terminal cliente. Distintas de funções comuns, funções especiais só

têm uma descrição, e funções especiais não são chamadas de dentro de um programa. Funções

especiais são chamadas para serem executadas pelo terminal cliente. (Há uma possibilidade

técnica de chamar funções especiais de dentro de um programa, mas vamos considerar este método

técnica de chamar funções especiais de dentro de um programa, mas vamos considerar este método incorreto e não discuti-lo aqui.) Quando um programa é iniciado para execução em uma janela de segurança, o terminal cliente passa controle para uma das funções

especiais. Como resultado, esta função é executada.

o terminal cliente passa controle para uma das funções especiais. Como resultado, esta função é executada.

A regra de programação em MQL4 é a seguinte.

erro correspondente e o arquivo executável * .exe não aparecerá como resultado da

compilação.

Consideremos o esquema funcional de um programa comum, um EA.

resultado da compilação. Consideremos o esquema funcional de um programa comum, um EA. Veja diretamente no

Veja diretamente no código:

Ambiente de Desenvolvimento do MT4 O ambiente de desenvolvimento (informação do MT4) não é um

Ambiente de Desenvolvimento do MT4

O ambiente de desenvolvimento (informação do MT4) não é um componente do programa. O ambiente

O ambiente de desenvolvimento (informação do MT4) não é um componente do programa. O ambiente de informação é um conjunto de parâmetros disponíveis para serem processados por um programa. Por exemplo, é o preço de segurança que vem com um novo tick, o volume acumulado em cada novo tick, a informação sobre os preços máximos e mínimos das barras de histórico, os parâmetros que caracterizam as condições de negociação oferecidas por um centro de negociação e assim por diante. O ambiente de informação é sempre guardado e, a cada

nova marca, que é atualizado pelo terminal do cliente ligado ao servidor.

de informação é sempre guardado e, a cada nova marca, que é atualizado pelo terminal do

Estrutura do programa

Parte do cabeçalho

A

parte do cabeçalho consiste das primeiras linhas no início de um programa, que contêm

informações gerais sobre o programa.

Por exemplo, esta parte inclui linhas de declaração e

inicialização de variáveis globais.

(A necessidade de incluir essa ou aquela informação na parte

do cabeçalho será discutido mais adiante).

Veja a imagem:

do cabeçalho será discutido mais adiante). Veja a imagem: Funções especiais A característica distintiva dos

Funções especiais

A

característica distintiva dos programas destinados à operação no terminal cliente MetaTrader

4 é o seu trabalho com informações constantemente atualizadas em tempo real.

Na linguagem

MQL4, essa peculiaridade se reflete na forma das três funções especiais: OnInit(), OnTick() e

OnDeinit().

Normalmente, após a parte do cabeçalho, são descritas funções especiais.

A descrição da

função especial parece a descrição de uma função definida pelo usuário, mas as funções

especiais têm nomes predefinidos: init(), start() ou OnTick() e deinit().

As funções

especiais são um bloco de cálculos e estão relacionadas ao ambiente de informação do terminal

cliente e às funções definidas pelo usuário.

As funções especiais são descritas em detalhe

em

   

A

propriedade principal de todas as funções especiais é sua execução em um programa sob

certas condições sem usar uma chamada de função especial dentro do programa.

Funções

especiais são chamadas para execução pelo terminal cliente.

Se um programa contém a

descrição de uma função especial, ela será chamada (e executada) de acordo com as condições

de chamada (e suas próprias propriedades).

Função especial OnInit()

A propriedade distinta da função OnInit() é a sua execução na inicialização do programa. Se um programa contém a descrição da função especial OnInit(), será chamado e executado no momento em que o programa for iniciado. Se não houver nenhuma função OnInit() em um programa, nenhuma ação será executada no início do programa.

Em EAs, OnInit() é chamado e executado após o terminal do cliente iniciar e carregar os dados históricos, depois de alterar o período do gráfico, após a compilação do programa no MetaEditor, depois de alterar quaisquer parâmetros de entrada da janela de configuração do EA, e depois de alterar as contas.

Nos scripts , OnInit() também é chamado e executado imediatamente após ele ser anexado a um gráfico.

Em indicadores personalizados , OnInit() é chamado e executado imediatamente após o início do terminal do cliente, após alterar o período do gráfico, após a compilação do programa

no

MetaEditor e depois de alterar quaisquer parâmetros de entrada da janela de configuração

do

indicador personalizado.

Função especial OnTick()

As propriedades distintas da função especial OnTick() diferem dependendo do tipo de programa executável.

Em EAs , OnTick() é chamado (e executado) imediatamente após um novo tick. Se um novo tick surgiu durante a execução de OnTick(), este tick será ignorado, e OnTick() não será chamado para execução até que um novo Tick seja recebido.

OBS: Tick é a mudança de preço que é mostrada no Gráfico. Cada novo preço, você deve considerar que seja um novo Tick.

A possibilidade de chamar e executar OnTick() é influenciada pelo estado do botão

"Negociação Automatizada" estiver ativo. Botão disponível na plataforma MetaTrader 4

conforme imagem:

disponível na plataforma MetaTrader 4 conforme imagem: Se este botão estiver desabilitado , o terminal de

Se este botão estiver desabilitado, o terminal de cliente não chamará para execução OnTick() independentemente de novas cotações vir ou não. No entanto, alterar o estado do botão de habilitado para desabilitado não encerra a sessão de operação atual de OnTick().

O processamento da função OnTick() é concluído assim que todos os comandos que estão

dentro desta função for executada. É bom lembrar que ela é executada uma única vez na

inicialização do EA, script ou Indicador Personalizado.

Função especial OnDeinit()

A função especial OnDeinit() tem sua execução na terminação do programa. Se um programa

contém a função OnDeinit(), ele será chamado e executado no encerramento do programa. Se

um programa não contém a função OnDeinit(), nenhuma ação será executada no

encerramento do programa.

O terminal do cliente chama a OnDeinit() no encerramento do terminal, quando uma janela

Gráfica é fechada, antes de alterar um período de gráfico, e em uma nova compilação de programa bem-sucedida no MetaEditor, ao alterar parâmetros de entrada e quando uma conta

é Alterada.
é
Alterada.
Em EAs e scripts , o encerramento do programa com a chamada necessária de OnDeinit

Em EAs e scripts , o encerramento do programa com a chamada necessária de OnDeinit() pode acontecer ao anexar a um gráfico um novo programa do mesmo tipo que substitui o

anterior.

de OnDeinit () pode acontecer ao anexar a um gráfico um novo programa do mesmo tipo

Em indicadores personalizados, OnDeinit() não é executado quando um novo indicador é

anexado a um gráfico. Vários indicadores podem operar em uma janela de segurança, por isso

a

conexão de um novo indicador a um gráfico não resulta no desligamento de outros

indicadores com chamada OnDeinit().

 

O tempo de execução da função OnDeinit() é limitado a 2,5 segundos. Se o código da função

especial OnDeinit() for executado por mais tempo, o terminal do cliente terminará com força a

execução da função OnDeinit(), e a operação do programa.

Em resumo as funções são executadas sempre nesta sequencia:

1-OnInit()

2-OnTick()

3-OnDeinit()

Funções definidas pelo usuário As funções definidas pelo usuário geralmente são dadas após a descrição

Funções definidas pelo usuário

As funções definidas pelo usuário geralmente são dadas após a descrição de funções

especiais.

O número de funções definidas pelo usuário em um programa é ilimitado.

Na Figura

anterior, nosso exemplo contém apenas uma função definida pelo usuário, mas um programa

pode conter 10 ou 500, ou nenhum.

Se nenhuma função definida pelo usuário for usada em um

programa, o programa terá uma estrutura simples: a parte do cabeçalho e a as funções

especiais.
especiais.

Veja a imagem do Código com Funções definidas pelo Usuário:

Funções padrão Como mencionado anteriormente, as funções padrão podem ser apresentadas apenas como   uma

Funções padrão

Como mencionado anteriormente, as funções padrão podem ser apresentadas apenas como

 

uma chamada de função.

 

A descrição de uma função padrão está oculta do programador e,

portanto, não pode ser alterada.

No entanto, ele está disponível para o MetaEditor.

Durante

a compilação do programa, o MetaEditor formará um arquivo executável, no qual todas as

funções padrão chamadas serão executadas corretamente até o máximo.

Veja imagem de uma função padrão

Com base no que foi mostrado, você entende que para um programa ser compilado e

Com base no que foi mostrado, você entende que para um programa ser compilado e começar a ter funcionalidades, ele vai precisar do cabeçalho, funções especiais, e funções

padrões. Funções definidas pelo usuário, vai depender da sua criatividade.

Veja o escopo geral.

Nenhuma das funções pode ser criada dentro de outra função. É proibido.

Veja arranjos Corretos, note que a posição das funções não interfere. A única coisa que é

importante permanecer é o cabeçalho sempre no topo do código.

Seguem-se exemplos de arranjos incorretos para escrever funções. Seqüência de execução do código Cabeça e

Seguem-se exemplos de arranjos incorretos para escrever funções.

exemplos de arranjos incorretos para escrever funções. Seqüência de execução do código Cabeça e funções

Seqüência de execução do código

Cabeça e funções especiais

No momento em que um programa é iniciado em uma janela Gráfica, linhas contidas no

cabeçalho do programa são executadas.

Depois que as preparações descritas na parte do cabeçalho são feitas, o terminal do cliente passa a controlar a função OnInit() especial, e essa função é executada (a passagem de controle é mostrada no esquema estrutural em grandes setas amarelas mostrado anteriormente). A função especial OnInit() é chamada e executada somente uma vez no início

da operação do programa. Esta função normalmente contém um código que deve ser

executado apenas uma vez antes da operação principal do programa ser iniciado.

 

Por exemplo, quando OnInit() é executado, algumas variáveis globais são inicializadas, objetos gráficos são exibidos em uma janela de gráfico ou mensagens podem ser mostradas. Depois

que todas as linhas de programa em OnInit() são executadas, a função termina sua execução

e

o controle é retornado ao terminal do cliente.

 

O

tempo de operação do programa principal é o período de funcionamento da função OnInit()

especial.

 

Terminado todo o trabalho na OnInit(), assim que é feita a recepção de um novo tick pelo terminal cliente a partir de um servidor, o terminal cliente chama a execução de OnTick(). Esta

função (como outras funções) pode se referir ao ambiente de informações do terminal do cliente, realizar cálculos necessários, abrir e fechar ordens e em breve. Ou seja, ele pode

executar quaisquer ações permitidas pelo MQL4.

Quando OnTick() é executado, geralmente é produzida uma solução que é implementada como uma ação de controle (veja as setas vermelhas na Figura anterior). Este controle pode ser

implementado como uma solicitação de negociação para abrir, fechar ou modificar uma ordem

implementado como uma solicitação de negociação para abrir, fechar ou modificar uma ordem

formada pelo programa.

implementado como uma solicitação de negociação para abrir, fechar ou modificar uma ordem formada pelo programa.

Depois que todo o código da função OnTick() especial do EA é executado, OnTick() termina sua operação e retorna o controle para o terminal do cliente. O terminal segura o controle por

algum tempo, não começando nenhuma função especial. Aparece uma pausa durante a qual o

programa não funciona. Mais tarde, quando um novo sinal vem, o terminal cliente passa o

controle para OnTick() novamente, e como resultado, a função é executada novamente.

O processo é repetido enquanto o programa é anexado a um gráfico e pode continuar por semanas e meses. Durante este período, um EA pode realizar negociação automatizada, ou

seja, pode implementar a sua atribuição principal. Na Figura anterior, a chamada repetida de

OnTick() é mostrada por várias setas amarelas envolvendo a função OnTick() especial.

Quando um comerciante remove um EA de um gráfico, o terminal cliente executa a função OnDeinit() uma única vez. A execução dessa função é necessária para o encerramento correto

da operação de um EA. Durante a operação, um programa pode, por exemplo, criar objetos

gráficos e variáveis globais do terminal cliente. A função OnDeinit() pode conter código para

excluir objetos desnecessários e variáveis. Após a conclusão do OnDeinit(), o controle é

retornado ao terminal do cliente.

As funções especiais executadas podem se referir ao ambiente de informação (veja as finas setas azuis na Figura abaixo) e chamar a execução de funções definidas pelo usuário (veja as finas setas amarelas na Figura abaixo). Observe que as funções especiais são executadas após

serem chamadas pelo terminal cliente na ordem predefinida: inicia na OnInit(), depois qualquer número de chamadas de OnTick() e depois OnDeinit(). As condições sob as quais o

terminal cliente chama funções especiais são descritas em Funções especiais .

Veja a imagem novamente:

Veja a imagem novamente: Funções definidas pelo usuário As funções definidas pelo usuário são executadas quando

Funções definidas pelo usuário

As funções definidas pelo usuário são executadas quando uma chamada para essa função está

contida em alguma outra função. Neste caso, o controle é passado oportunamente para a

 

função definida pelo usuário e, após a execução da função, o controle é retornado ao local da

 

chamada (veja as flechas finas de laranja na Figura acima). A chamada de funções definidas

 

pelo usuário pode ser contida não somente na descrição de uma função especial, mas também

na descrição de outras funções definidas pelo usuário. Uma função definida pelo usuário pode

 

chamar outras funções definidas pelo usuário. Isso é amplamente utilizado na programação.

 

As funções definidas pelo usuário não são chamadas para execução pelo terminal

 

cliente. Quaisquer funções definidas pelo usuário são executadas dentro da execução de uma

função especial que retorna o controle para o terminal do cliente. As funções definidas pelo

 

usuário também podem solicitar para usar os valores das variáveis do ambiente de informação

do terminal do cliente (veja as finas setas azuis na Figura acima).

Se um programa contém uma função definida pelo usuário, mas não há chamada dessa função,

Se um programa contém uma função definida pelo usuário, mas não há chamada dessa função,

essa função definida pelo usuário será excluída do programa pronto na fase de compilação e

chamada dessa função, essa função definida pelo usuário será excluída do programa pronto na fase de

não será usada no funcionamento do programa.

Execução do programa

As habilidades de programação são mais desenvolvidas se o programador tiver um programa de

funcionamento pequeno para fazer testes iniciais.

Para entender todo o programa, é necessário

examinar minuciosamente todos os seus componentes e rastrear sua operação passo a

passo.

Observe, propriedades de função especial de diferentes programas de aplicativo (EAs,

scripts, indicadores) são diferentes.

Exemplo de um EA simples:

Aqui vamos analisar como um EA opera.

de um EA simples: Aqui vamos analisar como um EA opera. Este EA é composto de

Este EA é composto de Cabeçalho, com algumas declarações veja a imagem:

Temos as declarações padrões como as #property e a variável Global int Count=0 ; Nesta

Temos as declarações padrões como as #property e a variável Global int Count=0;

Nesta linha, a variável global Count é declarada e inicializada com um valor de zero.

Inclusive, essa variável pode ser utilizada em qualquer função do programa.

Logo a baixo temos a OnInit()

função do programa. Logo a baixo temos a OnInit () O corpo da função contém apenas

O corpo da função contém apenas dois operadores.

2.1 Function Alert() mostra uma janela de alerta: Acionada no inicio que o EA é ligado a um

Gráfico.
Gráfico.

2.2 O retorno do operador finaliza o funcionamento do OnInit().

Como resultado da execução OnInit(), um alerta será gravado. A finalidade aqui é mostrar um

EA simple, em EAs mais complexos, vai ser raro encontrar um Alert() na função OnInit().

Na sequencia o Terminal detecta a presença de conteúdo na OnTick (), então essa função

Na sequencia o Terminal detecta a presença de conteúdo na OnTick(), então essa função é

acionada.

Na sequencia o Terminal detecta a presença de conteúdo na OnTick (), então essa função é
na OnTick (), então essa função é acionada. Note que na função OnTick (), temos uma
Note que na função OnTick (), temos uma variável Price do tipo double , inicializada

Note que na função OnTick(), temos uma variável Price do tipo double, inicializada com o

preço de compra.

Note que na função OnTick (), temos uma variável Price do tipo double , inicializada com

Bid é o preço de cotação de compra.

Em seguida temos a função padrão Alert() mostrando a variável Count e o novo Preço de

cotação.
cotação.

Lembrando que a função OnTick() será acionada somente quando um novo Tick ocorrer.

Para finalizar temos a função OnDeinit()

Tick ocorrer. Para finalizar temos a função OnDeinit () Ela é chamada pelo terminal, quando removemos

Ela é chamada pelo terminal, quando removemos o EA do gráfico.

Neste exemplo foi feito somente uma chamada na função Alert();

Veja o resultado do EA quando ligado a um Gráfico, e na sequencia fazemos a exclusão do EA

do Gráfico.

e na sequencia fazemos a exclusão do EA do Gráfico. A partir deste exemplo, você pode
A partir deste exemplo, você pode facilmente ver que um programa é executado de acordo

A partir deste exemplo, você pode facilmente ver que um programa é executado de acordo com

as funções especiais e funções descritas dentro das funções especiais.

que um programa é executado de acordo com as funções especiais e funções descritas dentro das

Terminar o programa, e iniciá-lo novamente. Tendo feito isso várias vezes, você terá experiência usando seu primeiro programa. Vai funcionar tanto agora como da próxima vez. Outros programas que você escreverá também serão construídos de acordo com a

estrutura descrita e, para iniciar sua execução, você também precisará anexá-la a um gráfico.

Se você entender todos os conceitos e regras, então o processo de criação de programas em

MQL4 será fácil e agradável.

Exemplo EA Envio de E-mail

Como regra são as mesmas, não vou descrever todos os passos novamente, os programas a

Como regra são as mesmas, não vou descrever todos os passos novamente, os programas a seguir segue o mesmo padrão nas sequência em que são chamadas para execução pelo

terminal cliente.

os programas a seguir segue o mesmo padrão nas sequência em que são chamadas para execução

Ou seja, primeiro vai a descrição de OnInit(), então OnTick(), e a última é OnDeinit().

No
No

entanto, funções especiais são chamadas para execução pelo terminal cliente de acordo com

suas próprias propriedades.

É por isso que a localização de uma descrição em um programa não

importa.
importa.

Vamos mudar a ordem das descrições e ver o resultado.

Nosso próximo EA vai enviar 3 e-mail, sendo:

1.

2.

3.

Primeiro e-mail na função OnInit()

 

Segundo e-mail na abertura de um novo Candle na função OnTick()

 

Terceiro e-mail quando o EA for Retirado do Gráfico na função OnDeinit()

Veja a imagem do código do EA:

EA for Retirado do Gráfico na função OnDeinit() Veja a imagem do código do EA: Veja

Veja o resultado na caixa de E-mail:

Como disse anteriormente, não vou explicar novamente cada função, pois utilizamos as mesmas funções do
Como disse anteriormente, não vou explicar novamente cada função, pois utilizamos as

Como disse anteriormente, não vou explicar novamente cada função, pois utilizamos as

mesmas funções do EA anterior.

Como disse anteriormente, não vou explicar novamente cada função, pois utilizamos as mesmas funções do EA

Veja que recebemos os 3 e-mails conforme era planejado no código.

Para que seja possível o envio de e-mail pela plataforma ou pelo programa em

MQL4, você precisa fazer os seguintes passos a seguir:

1.

Acesse o MataTrader4

 

2.

Clique no Menu Ferramentas e na sequencia clique em Opções.

3.

Clique na aba E-mail

 

4.

Preencha os dados na tela a seguir:

 
  4. Preencha os dados na tela a seguir:   Feita a configuração, clique em Testar

Feita a configuração, clique em Testar, será mostrado a seguinte mensagem:

Clique em OK e depois feche a tela de opções clicando em OK. Você consultara

Clique em OK e depois feche a tela de opções clicando em OK.

Você consultara se o teste de envio de e-mail deu certo, consultado em Terminal na aba diário.

Veja a imagem:

certo, consultado em Terminal na aba diário. Veja a imagem: É importante ressaltar que a base

É importante ressaltar que a base de um EA é as 3 funções Especiais.

Exemplo EA Envio de Notificação para Seu Celular Android ou iPhone

Aqui não iremos explicar novamente o uso das funções OnInit(), OnTick() e OnDeinit()

Vamos mostrar como é feito todo processo para envio das notificações.

Veja que o código abaixo esta fazendo exatamente o proposto nesse título, Enviamos 3

notificações utilizando a função SendNotification().

1.Primeira notificação é feita na função OnInit().

2.Segunda notificação é feita na função OnTick().

3.Terceira notificação é feita na função OnDeinit().

3.Terceira notificação é feita na função OnDeinit(). Veja a imagem abaixo as notificações no Celular :

Veja a imagem abaixo as notificações no Celular:

Veja que recebemos os 3 notificações no Celular conforme era planejado no código. Para que

Veja que recebemos os 3 notificações no Celular conforme era planejado no código.

Para que seja possível o envio de Notificações pela plataforma ou pelo programa em

MQL4, você precisa fazer os seguintes passos a seguir:

1.

Acesse o MataTrader4

 

2.

Clique no Menu Ferramentas e na sequencia clique em Opções.

3.

Clique na aba Notificações

 

4.

Preencha os dados na tela a seguir:

 
em Opções. 3. Clique na aba Notificações   4. Preencha os dados na tela a seguir:

Preencha os dados Habilitar notificações via Push e Notificar Operações de negociação. Informe o campo MetaQuotes ID: e clique em testar, depois novamente clique

em OK.
em OK.

Para obter o MetaQuotes ID, você deve ter instalado o MetaTrader 4 no seu Celular Android ou iPhone. Após instalado o Metatrader 4 você deve clicar no link MQID no topo da aplicação

no celular.
no celular.

Veja a imagem a seguir:

no topo da aplicação no celular. Veja a imagem a seguir: Após te o MetaQuotes ID

Após te o MetaQuotes ID, digite esse numero no seu MetaTrader 4 e clique em OK.

Pronto, é bem simples, esse tipo de notificação serve tanto para EAs simples ou EAs complexos.

Operadores

Esta seção trata das regras de formatação e execução dos operadores usados no MQL4. Cada

seção inclui exemplos simples que demonstram a execução dos operadores. Para digerir o

 

material na íntegra, recomenda-se a criação real de um código e a compilação para que seja

 

visto na pratica a execução de todos exemplos. Isso também irá ajudá-lo a consolidar

 

habilidades em trabalhar com o MetaEditor.

Operador de Atribuição

O operador de atribuição é o operador mais simples e mais utilizado.

Operador de atribuição representa um registro que contém o caractere "=" (sinal de igualdade). À esquerda deste sinal de igualdade especificamos o nome de uma variável, à direita dela damos uma expressão. O operador de atribuição é terminado com ";" (ponto e vírgula).

Variável = Expressão ;

Você pode distinguir o operador de atribuição de outras linhas no texto do programa pela presença do sinal de igualdade. Você pode especificar como uma expressão: uma constante,

uma variável, uma chamada de função ou uma expressão como tal.

O

operador de atribuição, como qualquer outro operador, é executável.

Isso significa que o

registro que compõe o operador de atribuição é executado de acordo com a regra.

Ao executar

o

operador, o valor da parte direita é calculado e então atribuído à variável à esquerda do sinal

de igualdade.

Como resultado da execução do operador de atribuição, a variável na parte

esquerda sempre toma um novo valor;

Esse valor pode ser diferente ou igual ao valor anterior

da variável.

A expressão na parte direita do operador de atribuição é calculada de acordo com a

ordem das operações.

Outros Exemplos de Operador de Atribuição

Em um operador de atribuição, é permitido declarar o tipo de uma variável à esquerda do sinal

de igualdade:

Int

In = 3;

// O valor constante é atribuído à variável Do

double

Do = 2,0;

// O valor constante é atribuído à variável Do

bool

Bo = true;

// O valor constante é atribuído à variável Bo

color

Co = 0x008000;

// O valor constante é atribuído à variável Co

string

St = "sss";

// O valor da constante é atribuído à variável St

datetime Da = D ' 01.01.2004 ';// O valor constante é atribuído à variável Da

As variáveis declaradas anteriormente são usadas em um operador de atribuição sem

especificar seus tipos.

In = 7; Do = 23,5; Bo = 0;

// O valor constante é atribuído à variável In // O valor constante é atribuído à variável Do // O valor constante é atribuído à variável Bo

Em um operador de atribuição, o tipo de uma variável não é permitido ser declarado na

parte direita do sinal de igualdade:

ser declarado na parte direita do sinal de igualdade : Em um operador de atribuição, o
Em um operador de atribuição, o tipo de uma variável não pode ser repetidamente

Em um operador de atribuição, o tipo de uma variável não pode ser repetidamente

declarado.

Em um operador de atribuição, o tipo de uma variável não pode ser repetidamente declarado .
uma variável não pode ser repetidamente declarado . Exemplos de utilização das funções definidas pelo

Exemplos de utilização das funções definidas pelo usuário e padrão na parte direita:

In = minha_funcao();// O valor da função definida pelo usuário é atribuído à variável In Do = funcao_2();// O valor da função definida pelo usuário é atribuído à variável Do Bo = IsConnected();// O valor da função padrão é atribuído à variável Bo St = ObjectName(0);//O valor da função padrão é atribuído à variável St Da = TimeCurrent();//O valor da função padrão é atribuído à variável Da

O exemplo de usar expressões na parte direita:

In=((( minha_funcao() + 100)/2)*3);// A variável In é atribuída com o valor da expressão

Do = ((funcao_2()*3)/2);// A variável Do é atribuída com o valor de expressão

Exemplo de Operadores de Atribuição de Forma abreviada.

In = In / 33; // Forma padrão

In /= 33 ;

// Forma abreviada do operador de atribuição

In = In * 33; // Forma Padrão

In *= 33 ;

// Forma abreviada do operador de atribuição

In = In + 33; // Forma Padrão

In += 33 ;

// Forma abreviada do operador de atribuição

In = In - 33; // Forma Padrão

In -= 33 ;

// Forma abreviada do operador de atribuição

Verifique o programa EAFXTRADE_V04, toda implementação esta disponível nele. Conforme

imagem a seguir:

Operador condicional 'if - else' Como regra, se você escrever um programa aplicativo, você precisa

Operador condicional 'if - else'

Como regra, se você escrever um programa aplicativo, você precisa codificar várias soluções em

um programa.

Para resolver essas tarefas, você pode usar o operador condicional 'if-else' em

seu código.

 

O operador de formato completo «if-else» contém um cabeçalho que inclui uma condição, e o corpo 1, a palavra-chave «else» e o corpo 2. Os corpos do operador podem consistir em um ou

vários operadores;

Os corpos são fechados em chaves.

 

If(Condição) // Cabeçalho do operador e condição

{

corpo 1 dos operadores // Se a condição for verdadeira, então os operadores que compõem o corpo 1 são executados

}

else // Se a primeira condição não for atendida

{

Corpo 2 dos operadores são executados;

}

Exemplo 1

Este é um exemplo simples, vou mostrar em código alguns exemplo do Operador if-else

vou mostrar em código alguns exemplo do Operador if-else Verifique o código no programa EAFXTRADE_V05 Ao

Verifique o código no programa EAFXTRADE_V05

Exemplo 2 Vou mostrar outro exemplo de if-else A diferença neste outro exemplo, é que

Exemplo 2

Vou mostrar outro exemplo de if-else

A diferença neste outro exemplo, é que utilizamos um if-else um pouco diferente.

exemplo, é que utilizamos um if-else um pouco diferente. OBS: Lembre que && é operador Booleano.

OBS: Lembre que && é operador Booleano.

Exemplo: if ((

Open[1] > Media_periodo_20

)&&(

Close[1] < Media_periodo_20

))

Para que a condição a cima seja verdadeira então a parte em verde da expressão tem que ser verdadeira e a parte cinza também tem que ser verdadeira. Em resumo, dentro desta condição esta sendo feito 2 testes e os dois tem que ser verdadeiros para que o programa passe pelo

BLOCO 1. E esse mesmo processo se repete na condição 2.

Primeiro temos um if para resolver o BLOCO 1 e no else temos outro if

Primeiro temos um if para resolver o BLOCO 1 e no else temos outro if para resolver o

BLOCO 2.

Primeiro temos um if para resolver o BLOCO 1 e no else temos outro if para

Significa que para executar o BLOCO 1, a condição 1 deve ser atendida. Caso a condição 1

não seja atendida, o programa passara pela condição 2.

Se a condição 2 for atendida, ai sim o BLOCO 2 será executado.

Neste exemplo o BLOCO 1 ou o BLOCO 2 só serão executados se uma das condições forem

atendida.
atendida.

Veja o código do programa a seguir:

forem atendida. Veja o código do programa a seguir: Veja o programa EAFXTRADE_V06 . Execute o

Veja o programa EAFXTRADE_V06. Execute o no seu computador e veja o resultado.

Exemplo 3 A diferença deste exemplo, com o exemplo 2, é que utilizamos um if-else

Exemplo 3

A diferença deste exemplo, com o exemplo 2, é que utilizamos um if-else de forma um pouco

diferente.
diferente.

Primeiro temos um if para resolver o BLOCO 1 e no else BLOCO 2 temos outro if para ser

executado.

Significa que para executar o BLOCO 1, a condição 1 deve ser atendida. Caso a condição 1

não seja atendida, o programa passara para o BLOCO 2.

Se a condição 2 dentro do BLOCO 2 for atendida, ai sim o Alerta será executado.

Neste exemplo o BLOCO 1 só será executado se a condição 1 for atendida, caso

Neste exemplo o BLOCO 1 só será executado se a condição 1 for atendida, caso contrario o

programa passara pelo BLOCO 2.

exemplo o BLOCO 1 só será executado se a condição 1 for atendida, caso contrario o

É importante mostrar esse tipo de exemplo, para que você veja a variedade de formas que será

possível de ser criada com o operador if-else

Veja o código do programa a seguir:

Veja o programa EAFXTRADE_V07 . Execute o no seu computador e veja o resultado. Exemplo

Veja o programa EAFXTRADE_V07. Execute o no seu computador e veja o resultado.

Exemplo 4

Vamos um exemplo um pouco mais complexo, onde usaremos if-else dentro de outro if-else

Foi criado uma função com o nome analise_tendencia_MEDIA_200_72(int BUY_SELL), essa função recebe um parâmetro de

Foi criado uma função com o nome analise_tendencia_MEDIA_200_72(int BUY_SELL), essa função recebe um parâmetro de entrada qe é do tipo (OP_BUY ou OP_SELL) , esses

sinais representam Compra e Venda no Metatrader 4.

um parâmetro de entrada qe é do tipo ( OP_BUY ou OP_SELL ) , esses sinais

Dentro desta função criamos o primeiro if-else, onde é testado se eu quero comprar ou

vender.
vender.

Exemplo: if(BUY_SELL == OP_SELL) else if(BUY_SELL == OP_BUY)

Significa que nesse caso a condição 1 não seria atendida, então a execução do programa

passaria para testar a condição 2 sendo que ela é justamente a condição que eu solicitei.

Nesse caso a execução do programa continua, porem entrando no BLOCO 2

Assim que a execução entra no BLOCO 2, um novo if esta para testar uma nova condição.

Exemplo: if((Open[1] < Media200) &&(Close[1] > Media200))

Essa condição significa o seguinte:

Se o candle anterior abriu com o preço menor que o preço da media 200 e se o candle anterior teve o preço de fechamento maior que o preço da media 200, então a função retorna verdadeiro. Isso significa que o alerta Alert("Sinal de Compra", "Veja Possibilidade de Compra");” vai ser acionado. Devido o retorno da função analise_tendencia_MEDIA_200_72 ter

retornado verdadeiro para um sinal de compra

da função analise_tendencia_MEDIA_200_72 ter retornado verdadeiro para um sinal de compra Veja imagem do programa: 63

Veja imagem do programa:

Veja o programa EAFXTRADE_V08 . Execute o no seu computador e veja o resultado. Exemplo

Veja o programa EAFXTRADE_V08. Execute o no seu computador e veja o resultado.

Exemplo 5

Aqui vou simplesmente mostrar uma imagem de uma função utilizada por um de meus robôs,

ela é responsável em abrir ordens de compra e de venda.

Estou mostrando ela, para que você veja o nível de desenvolvimento que irei ensinar a vocês

mais a frente.

Veja imagem:

Note que fazemos analise de medias, analise de suporte e resistência e outras analises. Mais

Note que fazemos analise de medias, analise de suporte e resistência e outras analises.

Mais a frente vou ensinar a vocês a programação mais complexas.

Operador while e for

A funcionalidade mais poderosa do MQL4 é a possibilidade de organizar ciclos (loops).

Ao criar programas de aplicação, você pode frequentemente usar os cálculos repetidos, que são na maior parte as linhas repetidas do programa. Para tornar a programação confortável e o programa em si fácil de usar, usamos operadores de ciclo. Existem dois operadores de ciclo em

MQL4: While e for. Consideraremos o primeiro nesta seção.

Operador while

O operador while consiste no cabeçalho que contém uma condição e o corpo do ciclo

executável encerrado entre chaves.

Código disponível no programa EAFXTRADE_V09 Esse programa faz algo bem simples, ele simplesmente mostra um

Código disponível no programa EAFXTRADE_V09

Esse programa faz algo bem simples, ele simplesmente mostra um alerta 10 vezes, pois foi

Esse programa faz algo bem simples, ele simplesmente mostra um alerta 10 vezes, pois foi o

tanto de vezes que eu estipulei para o while ficar no ciclo.

ele simplesmente mostra um alerta 10 vezes, pois foi o tanto de vezes que eu estipulei

Significa que enquanto a variável contador for menor ou igual a 10, ele vai repetir o processo

novamente.

A estrutura básica do while é essa, o que pode mudar é a condição que pode ser ou não mais

complexa e a codificação dentro do loop.

While ele vai ser muito utilizado em nossos EAs, pois podemos percorrer períodos no gráfico

atrás de topos e fundos, cálculo de preços, e outras analises. Portanto é bom treinar bastante

essa parte.

Primeiro teste, vamos descrever brevemente o coeficiente de Fibonacci. O matemático italiano,

Leonardo Fibonacci, descobriu uma seqüência única de números:

A

função dos Loops na programação é facilitar o acesso a dados e cálculos, note que com

pouco mais de 6 linhas o while resolveu uma conta complexa.

 

Veja o código do programa abaixo:

Veja o código no programa EAFXTRADE_V10 Abaixo tem explicações sobre a função Fibonacci. 67

Veja o código no programa EAFXTRADE_V10

Abaixo tem explicações sobre a função Fibonacci.

Deve ser particularmente observado o seguinte: Looping é uma execução continuamente repetida de operadores

Deve ser particularmente observado o seguinte:

Looping é

uma

execução

continuamente

repetida

de

operadores

que

compõem

o corpo do ciclo. É uma situação crítica que resulta da realização de um algoritmo errado.

Uma vez que ocorre um loop, o programa executa indefinidamente o bloco de operadores que

Uma vez que ocorre um loop, o programa executa indefinidamente o bloco de operadores que

compõem o corpo do ciclo.

Uma vez que ocorre um loop, o programa executa indefinidamente o bloco de operadores que compõem

Abaixo está um exemplo simples de um operador de ciclo em loop 'while' que você nunca

deve fazer:

ciclo em loop 'while' que você nunca deve fazer: No exemplo acima, os valores da variável

No exemplo acima, os valores da variável i são acumulados (incrementados) em cada iteração.

Como resultado, a condição nunca se tornará falsa.

Uma situação semelhante ocorre, se nada é

calculado no corpo do ciclo em tudo.

Por exemplo, no seguinte código:

Uma situação semelhante ocorre, se nada é calculado no corpo do ciclo em tudo. Por exemplo,

Em ambos os casos acima, e

ste processo se repetirá sem parar. Depois de ter entrado na

armadilha de um código em loop, o controle não pode deixá-lo mais. Esta situação é particularmente perigosa na negociação Expert Advisors e scripts. Em tais casos, as variáveis de ambiente geralmente não são atualizadas, uma vez que a função especial não completa sua operação, enquanto o comerciante pode não ter conhecimento do loop existente. Como resultado, o controlo no programa de execução não pode ser passado para as linhas de programas correspondentes onde é tomada a decisão de abrir ou fechar ordens.

O programador deve evitar tais condições, nas quais um loop não controlado torna-se possível. Não há nenhuma técnica que ajudaria a descobrir esta situação, nem na compilação do programa nem na sua execução. O único método possível para detectar tais erros algorítmicos é exame atento de seu código - raciocínio lógico e senso comum.

Operador for

O operador de ciclo de formato completo 'for' consiste no cabeçalho que contém Expressão 1,

Condição e Expressão 2 e do corpo do ciclo executável incluído entre chaves.

for (Expressão 1; Condição; Expressão 2)

{

bloco de operadores compondo o ciclo

}

// cabeçalho do operador // Abertura do Loop // corpo do ciclo

//fechando o ciclo

O programa a seguir faz a somatória de números inteiros de 1 a 10, a solução será 1+2+3+4+5+6+7+8+9+10 = 55.

Note que as variáveis Nom_1 = 1 e Nom_2 =10, neste caso ele fara a somatória de 1 a 10.

Depois quero que você teste mudando Nom_1 = 20 e Nom_2 = 38 e veja o resultado.

Veja que o for possibilita percorrer 2,10,100,1000 números com o mesmo código. Para testar outros

Veja que o for possibilita percorrer 2,10,100,1000

números com o mesmo código.

Para testar outros valores, basta você acessar o programa EAFXTRADE_V11 e mudar os valores das variáveis Nom_1 e Nom_2.

Vou mostrar um outro exemplo, onde é feito o mesmo calculo, porem de traz para frente.

Veja a imagem a seguir:

Veja o código no programa EAFXTRADE_V12 Próximo exemplo eu mostro a você como ler o

Veja o código no programa EAFXTRADE_V12

Próximo exemplo eu mostro a você como ler o histórico de ordens que você já negociou.

Veja:

Acesse o programa EAFXTRADE_13 , faça o teste no seu computador para você ver o

Acesse o programa EAFXTRADE_13, faça o teste no seu computador para você ver o resultado.

Os exemplos mostrados acima é para mostrar varias formas de utilizar o operador for.

É muito importante que você treine escreva códigos pequenos, com as funções já ensinadas até agora.

Caso tenha duvida, não deixe de acessar os códigos disponíveis neste curso, garanto que vai te ajudar muito.

Operador break

Em alguns casos, por exemplo, ao programar algumas operações de Loop, pode ser necessário quebrar a execução de um Loop antes que sua condição se torne falsa. Para resolver tais

problemas, você deve usar o operador break.

O operador "break" consiste em apenas uma palavra e termina em caráter ";”.

em apenas uma palavra e termina em caráter ";”. Peguei uma parte do código do ultimo

Peguei uma parte do código do ultimo exemplo, e nesse caso o break é acionado caso não tenha localizado nenhum registro.

O "break" interrompe a execução do operador externo mais próximo do tipo 'while', 'for' ou 'switch'. A execução do "break" do operador consiste em passar o controle para fora do

operador composto do tipo "while", "for" ou "switch" para o operador seguinte mais próximo. A interrupção do operador só pode ser utilizada para interrupção da execução dos

operadores listados acima.

Vamos criar um programa onde a função dele é simplesmente contar de 1 a 100, porem quando a execução do programa chegar em 49 ele vai parar através do break

é simplesmente contar de 1 a 100, porem quando a execução do programa chegar em 49

Veja o programa inteiro no