Você está na página 1de 90

Aprenda a desenvolver seu próprio robô no

MetaTrader 5 (MQL5)

Junho de 2015
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Conteúdo
SEÇÃO 1 Introdução à Plataforma Metatrader 5 3
SEÇÃO 2 Ambiente 12
SEÇÃO 3 Noção Gráfica 19
SEÇÃO 3 MetaEditor: o IDE do MQL5 32
SEÇÃO 4 Apresentando a linguagem MQL5 40
SEÇÃO 5 Sintaxe 50
SEÇÃO 6 Tipos de Dados 56
SEÇÃO 7 Operações e expressões 63
SEÇÃO 8 Operadores 69
SEÇÃO 9 Variáveis 77
SEÇÃO 10 Arrays e matrizes 84
SEÇÃO 11 Funções 87
SEÇÃO 12 Referências 94

2
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Equipe

A equipe DeltaTrader Rodrigo Malacarne


 Mestre em Finanças pela Humboldt-
Nós somos especialistas em negociação Universität zu Berlin, Alemanha.
automatizada e profissionais apaixonados Trabalhou na área de Fusões e
Aquisições do Deutsche Bank,
por criar soluções inovadoras. Alemanha, e durante 8 anos como
operador de mesa de renda variável
nas corretoras Uniletra e XP.
Atualmente é consultor associado da
Valor Investimentos e sócio fundador
da DeltaTrader.

3
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Introdução à plataforma
MetaTrader 5

4
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Introdução

■ O MetaTrader 5 (MT5) foi lançado oficialmente pela


empresa MetaQuotes Software Corp em 2010.
■ Foi projetado como uma plataforma de multimercado que
se aplica a Forex, CFD, Mercado Futuro e Bolsa de Valor.
■ Desde sua concepção, a plataforma cresceu forte na
comunidade financeira e atualmente fornece oportunidades
ilimitadas aos traders.
■ Fornece as ferramentas necessárias a análise dinâmica de
preços e a automatização de negociação.

5
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Introdução

6
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Adquirindo a plataforma

■ O MetaTrader 5 pode ser baixado direto no site da MetaQuotes:


www.metatrader5.com/en/download
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Primeiro acesso

■ Após instalar a plataforma, a primeira coisa a se fazer é criar uma conta

■ Usaremos o servidor MetaBrazil-Demo para fins didáticos

■ Contas reais só podem ser criadas através de corretoras


[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Criando uma conta

■ Digite “meta” no campo de busca e clique em “Localizar”


■ Selecione o servidor MetaBrazil-Demo e clique em “Avançar”

4
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Criando uma conta

■ Selecione “Nova conta demo”


■ Preencha os campos

6
8

9
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Criando uma conta

■ Por último, anote o “Nome de usuário” e a “Senha” caso precise


acessar esta conta em outro terminal e clique em “Concluir”

10
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Criando uma conta

■ Caso necessite criar outra


conta, basta clicar na aba
“Arquivo” > “Abrir uma
Conta...”
■ Ou clicar com o botão
direito do mouse em
“Contas”, na janela
“Navegador”, e clicar em
“Abrir uma Conta”
■ E seguir todo o
procedimento de novo
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Ambiente

13
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Janelas do Terminal

■ O MetaTrader 5 possui as seguintes janelas:


– Observação do Mercado
– Navegador
– Caixa de Ferramentas
– Gráficos
– Janela de Dados
– Testador de Estratégias

■ Elas podem ser exibidas/ocultadas na aba “Exibir”


■ Cada uma possui um comando de rápido acesso
■ Exemplo: CTRL + N abre o “Navegador”
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Janelas do Terminal

15
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Observação de Mercado

■ Nesta janela são mostrados os ativos, seus detalhes, sua


negociação por cliques e um gráfico “tick-a-tick”
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Como acrescentar um ativo na lista

■ Na janela Observação de Mercado, dê um duplo clique


abaixo do último ativo e escreva o nome do ativo que deseja
adicionar
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Como acrescentar um gráfico

■ Para adicionar um gráfico ao terminal basta arrastar o nome


do ativo para a janela de gráficos
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Testador de Estratégia

■ O Testador de Estratégia serve para realizar backtests e


otimizações de Expert Advisors
■ Realizar teste prático no terminal
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Noção gráfica

20
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Personalização

■ Uma das vantagens do MetaTrader 5 é sua parte gráfico-


analítica
■ Os gráficos possuem uma vasta personalização, facilitando
assim a adequação às necessidades de cada trader
■ Três tipos de gráficos são suportados: linha quebrada,
sequência de barras e velas japonesas
■ A personalização abrange toda a manipulação de cores no
gráfico, a utilização de 21 períodos de tempo, o uso de
indicadores, entre outros.

21
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Personalização

22
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Ferramentas analíticas

■ Os objetos são:
– Linhas (tendência, horizontal, etc)

– Canais (equidistantes, regressão, etc)

– Ferramentas de Gann

– Ferramentas de Elliot

– Ferramentas de Fibonacci

– Formas (retângulos, triângulos, etc)

– Elementos gráficos (textos, botões, etc)

26
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Ferramentas analíticas

■ Linhas

Fonte: http://www.mql5.com/en/charts/1630032/eurusd-h4-x-trade-brokers

27
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Ferramentas analíticas

■ Botões

Fonte: http://www.mql5.com/en/articles/749

28
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Publicação de gráficos online

■ Recurso que permite publicar um gráfico de forma simples e


instantânea no site do MQL5

30
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Publicação de gráficos online

■ Gráfico publicado no site

31
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

MetaEditor: o IDE do
MQL5

33
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

O MetaEditor

■ A linguagem de programação incorporada sempre foi


uma das partes mais importantes do MetaTrader

34
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Criando um programa

■ Para criar um programa deve-se clicar em “Novo” na


aba “Arquivo”
■ A seguinte tela será mostrada:

35
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Criando um programa

■ Selecione “Indicador personalizado” e avance


■ Nesta tela, indique o nome, o autor, o vínculo e os
parâmetros do indicador

36
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Criando um programa

■ Avance a tela de manipuladores

37
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Criando um programa

■ Por último, clique em “Concluir”

38
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Criando um programa

■ Você deverá ver a base de código para escrever um


indicador personalizado como a figura a seguir

39
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Outras funcionalidades

■ Além de ser a plataforma para criar códigos-fonte, o


MetaEditor também:
– Armazena códigos-fonte em nuvem
– Permite o compartilhamento de pastas com outros usuários
– Copila e executa os códigos-fonte
– Controla a versão dos arquivos
– Destaca o código em cores diferentes
– Possibilita a inserção de recursos
– Possuir ligação direta com a comunidade MQL5

40
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Apresentando a linguagem
MQL5

41
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

O que é MQL5?

■ Do Guia de Referência MQL5:


– “A linguagem MetaQuotes Language 5 (MQL5) é uma
linguagem proprietária para programação de estratégias de
negociação, criada e mantida pela MetaQuotes Software
Corp”
– Suporta programação estruturada clássica

– Procedimentos e funções, tipos primitivos, encapsulamento e


modularização, fortemente tipada

– Suporta programação orientada a objetos

– Classes, atributos, métodos, objetos, classes, herança,


polimorfismo

– Baseada em C/C++
42
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

E antes do MQL5?

■ Diferenças entre MQL5 e MQL4:


MQL5 MQL4
C++ C
Estruturas e classes Nenhuma delas
Muitas bibliotecas auxiliares Poucas bibliotecas auxiliares
Suporta diferentes tipos de Apenas OnTick
eventos
Depuração em tempo real Sem depurador
Separa claramente ordem de Em alguns casos os conceitos se
posição confundem
Suporta multi-symbol Não suporta multi-symbol

43
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Quais são os tipos de programa no MQL5?

■ Expert Advisor (EA):


– É um sistema de negociação automático associado a um
gráfico
– É orientado a eventos, que são disparados pelo terminal

– Eventos:

– Inicialização,desinicialização, novo preço (tick), timer,


mudança de Profundidade de Mercado, ação gráfica

– Um EA pode tanto informar sobre uma possibilidade de


negociação quanto negociar automaticamente sob uma conta
enviando ordens diretamente ao servidor de negociação

44
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Quais são os tipos de programa no MQL5?

■ Indicador:
– Programa que permite apresentar dados em forma gráfica,
que é conveniente para a análise

■ Indicador Customizado:
– É um indicador técnico escrito de forma independente, em
acréscimo aos já embutidos no terminal cliente
– Assim como os indicadores embutidos, os indicadores
customizados não podem negociar automaticamente,
estando limitados à implementação de funções analíticas
– Exemplos de indicadores (embutidos): média móvel, desvio
padrão, MACD, índice de força relativa e etc

45
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Quais são os tipos de programa no MQL5?

■ Script:
– É um código avulso destinado à execução de uma única
ação, disparada pelo evento de “start” de um EA ou
indicador
– Isso requer que a função de manipulação OnStart() esteja
presente no script
– Um exemplo de ações próprias de script:

– Abertura de arquivo, abertura de conexão de banco de dados,


verificações de segurança, account information, carga inicial de
gráficos

46
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Quais são os tipos de programa no MQL5?

■ Library (biblioteca):
– Conjunto de funções customizadas destinado a armazenar e
distribuir blocos de programas customizados usados
frequentemente
– Bibliotecas (libraries) não podem começar uma execução
por si mesmas

47
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Quais são os tipos de programa no MQL5?

■ Include file (.h):


– Código fonte com blocos de programas (procedimentos e
funções) customizados utilizados com mais frequência.
– Tais arquivos podem ser incluídos (via diretiva #include)
nos códigos fonte de EAs, scripts, indicadores customizados
e bibliotecas na etapa de compilação.
– O uso de arquivos incluídos é mais preferível ao o uso de
bibliotecas devido ao custo computacional adicional que
ocorre na chamada de funções de biblioteca.

48
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Ambiente (*IDE) x Linguagem de programação

■ Precisamos separar as coisas!


Ambiente (IDE) Linguagem
Visual Studio (Microsoft) C#
Eclipse (eclipse.org) Java, C++, Python, HTML
Delphi (Embarcadero) Object Pascal
JBuilder (Embarcadero) Java
CBuilder (Embarcadero) C/C++
XCode (Apple) Objective C
Meta Editor (MetaQuotes) MQL5

*IDE = Integrated Development Enviroment =


Ambiente de Desenvolvimento Integrado

49
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Meta Editor: o IDE do MQL5

50
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Sintaxe

51
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Sintaxe

■ Características básicas do MQL5:


– Não manipula endereços diretamente (só linguagens de
baixo nível fazem isso)
– Não usa o operador “goto”

– Todo valor primitivo deve estar associado a uma variável

– Não suporta herança múltipla (ao contrário de C++)

52
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Comentários

■ São usados para documentar e explicar o código e lógica do


programa. Comentários são ignorados pelo compilador, mas
são MUITO IMPORTANTES para que outros possam
entender seu programa (ou mesmo para você depois de algum
tempo).
■ Existem dois tipos de comentários em C/C++
– Comentário de linha única: (//)
– Comentário de múltiplas linhas (/* e */)

// Comentário de linha única

/*
Comentário
de múltiplas // Comentário interno
linhas
*/

53
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Identificadores

■ São usados como nomes de variáveis e funções. O


comprimento de um identificador não pode exceder 63
caracteres. São Case Sensitives e não podem coincidir com
uma palavra reservada.
■ Exemplo
– myFunction
– MyFunction
– Myfunction

■ Convenção de nomenclatura de variáveis


– Uma variável é um nome ou frase composta de várias palavras. A
primeira palavra começa com letra minúscula, enquanto todas as demais
são escritas com letra maiúscula, sem espaço entre as palavras.
– Exemplo: xMax, yMin, theVariable, thisIsAnExample

54
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Identificadores

■ Recomendações
– Escolher um nome auto-explicativo e que explique o significado da
variável
– Não usar nomes sem sentido, como por exemplo a, b, c, i1, j99
– Evitar usar nomes comuns, como x e y para coordenadas, ou i para
índice.

■ Declaração de variáveis

// Declarar uma variável de tipo específico


tipo identificador;
// Declarar múltiplas variáveis, separadas por vírgula
tipo identificador1, identificador2, identificador3;
// Declarar uma variável e assinalar um valor inicial
tipo identificador = valor;
// Declarar múltiplas variáveis com valores iniciais
tipo identificador1 = valor1, identificador2 = valor2;

55
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Identificadores

■ Palavras reservadas
bool const extern break false
enum private input do #define
struct protected static operator #property
char public case this
float virtual else #import
uchar return template
class continue true
int for #include
uint sizeof typename
color default
long if
ulong switch
datetime delete
short new
ushort while
double
string
void 56
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Tipos de dados

57
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Tipos de dados

■ Os tipos básicos de dado são:


– Inteiros: char, short, int, long, uchar, ushort,
uint, ulong
– Lógico: bool

– Texto: string

– Números com ponto flutuante: double, float

– Cor: color

– Data e hora: datetime

– Enumeradores: enum

58
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Declarando variáveis de tipos básicos

char   c  = 't';  // 8 bits com sinal


short  s  = -5;   // 16 bits com sinal
int    i  = -100; // 32 bits com sinal
long   l  = -1000;// 64 bits com sinal
uchar  uc = '2';  // 8 bits sem sinal
ushort us = 5;    // 16 bits sem sinal
uint   ui = 100;  // 32 bits sem sinal
ulong  ul = 1000; // 64 bits sem sinal
bool b = true;
float f = 1000; // 32 bits ponto flutuante
double d = 10000; // 64 bits ponto flutuante
datetime dt = D'1980.07.19 12:30:27';

59
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Conversão entre tipos (typecasting)

■ Conversões possíveis:

Linha sólida ( ) : conversão sem perda


Linha traçada (- - - - -): conversão com risco

int it = 10000;
long lo = it; // cast implicito (ok, int cabe em long)
int it2 = lo; // gera "warning" do compilador
int it3 = (int)lo; // cast explício (risco do programador)

60
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Tipos de dados complexos

■ Estrutura:
– Palavra reservada: struct

■ Definição:
– Tipo de dados customizado composto por outros tipos
de dados (primitivos ou outras estruturas)
– É um tipo de dados heterogêneo

– O seu RG, por exemplo, pode ser representado como


uma estrutura struct

61
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Declarando e utilizando estruturas

struct trade_conf
{
   double take;      // meta de lucro
   double stop;      // stop de proteção
   uchar slippage;   // slippage admissível
};
// cria e inicializa uma variável
// do tipo trade_conf
trade_conf tc = {0.0, 0.0, 5};
// mudando o valor de atributos
void teste(){// explicaremos funções em breve
   tc.stop = 1.0;
   tc.take = 2.0;
}

62
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Tipos de dados complexos

A utilização de classes será


■ Classe: abordada na segunda fase do
– Palavra reservada: class curso de MQL5

■ Definição:
– A classe é uma estrutura de dados heterogênea que
suporta o conceito de orientação a objeto
– Orientação a objetos é uma forma de pensar (analisar e
projetar) e escrever (programar) sistemas de software
baseado na composição e interação entre diversas
unidades de software denominadas objetos
–A OO permite que os objetos (abstrações de
programação) se aproximem muito dos objetos do
mundo real
63
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operações e expressões

64
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operações e expressões

+ - * / %     Operadores aritméticos
&& ||         Operadores lógicos
= += *=       Operadores de atribuição

a++; b = 10;  // várias expressões na mesma linha


//---  uma expressão dividida em várias linhas
x = (y * z) /
    (w + 2) + 127;

65
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operações aritméticas

i = j + 2;      // Soma de variáveis                 


i = j - 3;      // Diferença de variáveis            
x = - x;        // Mudança de sinal
z = 3 * x;      // Produto de variáveis              
i = j / 5;      // Quociente de divisão           
minutes = time % 60; // Resto de divisão
i++;    // Adicionando 1 ao valor da variável      
++i;    // Adicionando 1 ao valor da variável      
k--;    // Subtraindo 1 do valor da variável      
--k;    // Subtraindo 1 do valor da variável

66
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operações de atribuição

y = x;  // y recebe o valor de x;


y += x;  // y = y + x;
y -= x;  // y = y - x;
y *= x;  // y = y * x;
y /= x;  // y = y / x;
y %= x;  // y = y % x; (resto de y dividido por x)
y >>= x; // Desloc. binário de x bits de y para a direita
y <<= x; // Desloc. binário de x bits de y para a esquerda
y &= x;  // AND bit a bit de y com x
y |= x;  // OR bit a bit de y com x
y ^= x;  // XOR bit a bit de y com x

67
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operações de relação

True se a é igual a b a == b;
True se a não é igual a b a != b;
True se a é menor que b a < b;
True se a é maior que b a > b;
True se a é menor ou igual a b a <= b;
True se a é maior ou igual a b a >= b;

68
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operações booleanas

AND &&
OR ||
NOT !

69
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operadores

70
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operador “return”

■ Finaliza a função corrente e retorna o controle para o


programa chamador.

int myFunction(int a, int b) // Descrição da função


  {
   int c = a + b; // Corpo da função
   return(c); // Operador de saída da função
  }

71
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operador “if-else”

■ É usado quando é necessário fazer uma escolha.

if (condition) // Operador e condição


  {
   Bloco 1 de operadores // Se a condição for verdadeira
  }
else
{
   Bloco 2 de operadores // Se a condição for falsa
  }

72
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operador “switch”

■ Passa o controle para o operador que corresponde ao valor


da expressão.

switch (Delta) // Operador


  {
   case 1 : Print(“Um”); break;
   case 2 : Print(“Dois”); break;
   case 3 : Print(“Três”); break;
   case 4 : Print(“Quatro”); break;
   case 5 : Print(“Cinco”); break;
default: Print(“Seis ou mais”);
 }

73
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operador “while”

■ Realiza uma operação até que a expressão verificada se


torne falsa. A expressão é verificada antes de cada iteração.

while (condition) // Operador e condição


  {
   Bloco de operadores
 }

74
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operador “for”

■ Realiza uma operação até que a expressão verificada se


torne falsa. A expressão é verificada antes de cada iteração.

for (expression1; condition; expression2;) // Operador


  {
   Bloco de operadores
 }

75
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operador “break”

■ Finaliza a execução do operador externo adjunto mais


próximo: switch, while, do-while ou for. O controle
é passado para o operador posterior àquele terminado. Um
dos propósitos desse operador é terminar a execução de um
loop quanto um certo valor é assinalado para uma variável.

for(i=0; i<5; i++;)


  {
   if(array[i]==0)
break; // Operador
 }

76
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Operador “continue”

■ Passa controle para o começo do loop do operador externo


mais próximo: while, do-while ou for. O propósito
desse operador é o oposto do operador break.

for(i=0; i<5; i++;)


  {
int sum=0;
   if(array[i]==0) continue; // Operador
sum+=array[i];
 }

77
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Variáveis

78
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Variáveis locais

■ Uma variável declarada dentro de uma função é local.


Toda a chamada da função inicializa uma variável local.

int myFunction();
{
int retValue = 0;
return(retValue);
}

79
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Variáveis estáticas

■ O identificador static define uma variável estática. O


identificador é indicado antes do tipo de dado.

int myFunction();
{
static int flag = 0;
return(flag);
}

80
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Variáveis globais

■ Variáveis globais são criadas colocando suas declarações


fora da descrição de funções. Variáveis globais são definidas
no mesmo nível que funções, ou seja, elas não são locais em
nenhum bloco.

int flag = 0; // Variável global


int OnInit();
{
...
}

81
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Variáveis de entrada

■ O identificador input define uma variável externa. O


identificador deve ser colocado antes do tipo de dado. Uma
variável do tipo input não pode ser modificada pelo
código, mas apenas pelo usuário a partir de uma janela de
propriedades.
// Parâmetros de entrada
input int MA_Period = 13;
input int MA_Shift = 0;
input ENUM_MA_METHOD MA_Method = MODE_SMMA;

82
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Variáveis de entrada

■ É possível definir uma outra maneira de demonstrar os


nomes de variáveis de entrada na janela de propriedades.
Para fazer isso, basta usar um comentário após a descrição
da variável de entrada na mesma linha.

// Parâmetros de entrada
input int MA_Period = 13; // Smoothing period
input int MA_Shift = 0; // Line horizontal shift
input ENUM_MA_METHOD MA_Method = MODE_SMMA; // Smoothing method

83
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Inicialização de variáveis

■ Qualquer variável pode ser inicializada durante sua


definição. Se a variável não for inicializada explicitamente,
o valor gravado na variável pode ser qualquer um.
Inicialização implícita não pode ser usada.

int n = 1;
string s = “Hello !”;
double f[] = {0.0, 0.236, 0.382, 0.5, 0.618, 1.0};
int a[3][3] = {{1,1,1},{2,2,2},{3,3,3}};
int array[4] = {VAR1+VAR2,VAR2+VAR3,VAR3+VAR4,VAR4+VAR5};
// Inicialização de todos os campos da struct com valor 0
MqlTradeRequest request={0};

84
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Arrays e matrizes

85
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Arrays

■ Arrays são listas de elementos do mesmo tipo,


identificadas por um par de colchetes [ ]. Para usar arrays é
necessário declarar 3 coisas: nome, tipo e tamanho.

// Declara um array com 3 elementos


double array[3];

// Declara e inicializa um array com 6 elementos


double array[6] = {0.0, 0.236, 0.382, 0.5, 0.618, 1.0};

// Se o tamanho for omitido, o compilador conta os elementos


double array[] = {0.0, 0.236, 0.382, 0.5, 0.618, 1.0};

86
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Matrizes (multi-dimensional arrays)

■ São listas de elementos com duas ou mais dimensões.

// Declara uma matriz 3x3


int a[3][3];

// Declara e inicializa uma matriz 3x3


int a[3][3] = {{1,1,1},{2,2,2},{3,3,3}};

87
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Funções

88
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Funções com retorno

■ São aquelas funções que usam o operador return para


retornar o valor de uma expressão localizada neste operador.

int myFunction();
{
static int flag = 0;
return(flag);
}

89
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Funções sem retorno

■ São aquelas funções que não retornam valor algum e são


descritas como do tipo void.

void errMsg(string s);


{
Print(“Erro = ”+s);
}

90
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

“Chamando” uma função

■ Ao chamar uma função deve-se observar a quantidade de


parâmetros e se eles foram inicializados.
void someFunc(int hour, int min=10, int sec=30);
{
...
}

■ Exemplos
someFunc(); // Chamada incorreta
someFunc(9); // Chamada correta
someFunc(9,15); // Chamada correta
someFunc(9,15,45); // Chamada correta
someFunc(9, ,45); // Chamada incorreta

91
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Funções especiais

■ São funções predefinidas da linguagem MQL5.

Ask()
Bid()
Bars()
Point()
Digits()
Time[]
Open[]
High[]
Low[]
Volume[]
OrderSend()
etc.

92
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Referências

93
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Contatos

 contato@deltatrader.com.br

 (27) 3026-3068

 www.deltatrader.com.br

94
[yuanni] [printed: 03/14/05 17:59] [saved: 03/14/05 18:01] S:\intc\M&A\Projects\2005\Seth Conference\Merrill Corp Presentation_ppt.ppt

Referências

■ Referência http://www.mql5.com/pt/docs?source=terminal5_help_link.

95

Você também pode gostar