Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
com/pt/articles/100
Download MetaTrader 5
0 7 621
SAMUEL OLOWOYO
Introdução
Este artigo é destinado a iniciantes que desejam aprender como escrever
Consultores Especialistas simples na nova linguagem MQL5. Nós começaremos
primeiro definindo o que queremos que o nosso CE (Consultor Especialista)
faça, e descrição então passaremos para como nós queremos que o CE o faça.
1. Estratégia de negociação
O que o nosso CE fará:
1 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
maior que 22. Se o ADX for maior do que 22 porém diminuindo, ou o ADX
for menor do que 22, não negociaremos, mesmo que a condição B tenha
sido atendida.
Também queremos nos proteger definindo uma ordem para parar perda
(ou stop loss) de 30 pontos, e para o nosso alvo de lucro; definiremos
como objetivo um lucro de 100 pontos.
Também queremos que nosso CE procure por oportunidades de
compra/venda somente quando uma nova barra tenha sido formada e
também queremos nos certificar que abrimos uma posição de compra, se
as condições de compra forem atendidas e já não tivermos uma em
aberto, e abrir uma posição de venda quando as condições de venda
forem atendidas e já não tivermos uma em aberto.
2 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Na próxima janela, digite o nome que você quer dar ao seu CE na caixa Nome.
Neste caso, eu digitei My_First_EA. Você pode então digitar o seu nome na
caixa Autor e também o endereço da sua página da internet ou endereço de
e-mail na caixa Link (se você tiver um).
Já que queremos ser capazes de mudar alguns dos parâmetros para o nosso CE
de forma a ver quais dos valores podem nos fornecer melhor resultado, nós
iremos adicioná-los clicando no botão "Adicionar".
3 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Clique duas vezes sob a seção Nome e digite o nome do parâmetro, então
clique duas vezes sobre o Tipo para selecionar o tipo de dados para o
parâmetro e clique duas vezes sob a seção Valor inicial e digite o valor inicial
para o parâmetro.
4 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Como pode ser visto acima, foi selecionado o tipo de dado inteiro (int) para
todos os parâmetros. Vamos falar um pouco sobre tipos de dados.
Pela descrição acima dos vários tipos de dados, os tipos inteiros não assinados
não são projetados para armazenar valores negativos, qualquer tentativa de
configurar um valor negativo pode levar a consequências inesperadas. Por
exemplo, se você quer armazenar valores negativos, você não pode
armazená-los dentro dos tipos não assinados (isto é, uchar, uint, ushort, ulong).
Voltando ao ao nosso CE. Olhando os tipos de dados, você irá concordar que
devemos utilizar os tipos de dados char ou uchar já que os dados que
pretendemos armazenar nestes parâmetros sejam menores do que 127 ou 255
respectivamente. Para bom gerenciamento da memória, essa é a melhor coisa
a se fazer. Entretanto, pelo propósito desta discussão, iremos nos ater ao tipo
int.
Uma vez que tenha acabado de configurar todos os parâmetros necessários,
clique no botão Finished e o editor do MetaQuotes criará um esqueleto do
código para você como mostrado na próxima figura.
5 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Nesta seção do código, você pode definir parâmetros adicionais como descrição
(breve descrição do texto do CE), declarar constantes, incluir arquivos adicionais
ou funções mais importantes.
#define :
O que isso faz é substituir cada ocorrência de identificador no seu código com o
valor token_string.
6 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Exemplo:
Variáveis declaradas nesse nível são chamadas de Variáveis globais porque elas
são acessíveis por todas as funções em nosso CE que possam precisar delas. Os
parâmetros de entrada são parâmetros que podem apenas ser modificados fora
do nosso CE. Também podemos declarar outras variáveis que iremos manipular
no curso do nosso CE mas não estarão disponíveis fora do nosso CE nesta
seção.
Para o nosso CE, nós iremos liberar as cotações criadas para os nossos
indicadores durante a inicialização nesta seção.
7 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Essa função processa o evento NewTick, que é gerado quando uma nova
cotação é recebida para um símbolo.
A maior parte dos nossos códigos que irão implementar a nossa estratégia de
de negócios, desenvolvidos anteriormente, serão escritos nessa seção.
Agora que já observamos as várias seções do código para o nosso CE, vamos
começar a adicionar mais conteúdo a este esqueleto.
Como você pode ver, nós adicionamos mais parâmetros. Antes de continuarmos
a discutir os novos parâmetros, vamos discutir algo que você pode ver agora. As
duas barras normais ‘//’ nos permitem inserir comentários em nossos códigos.
Com comentários, somos capazes de saber o que as nossas variáveis significam,
ou o que nós estamos fazendo naquele momento de tempo em nosso código.
Também fornece um melhor entendimento do nosso código. Há duas formas
básicas de escrever comentários:
8 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
/*
*/
Exemplo:
double b7 = 0.09876;
Exemplo:
9 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
STP e TKP serão utilizados para armazenar os valores de stop loss e take profit
em nosso CE.
int OnInit()
{
//--- Get handle for ADX indicator
adxHandle=iADX(NULL,0,ADX_Period);
//--- Get the handle for Moving Average indicator
maHandle=iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE
//--- What if handle returns Invalid Handle
if(adxHandle<0 || maHandle<0)
{
Alert("Error Creating Handles for indicators - error: ",GetLastEr
}
int iADX(
string symbol, // symbol name
ENUM_TIMEFRAMES period, // period
int adx_period // averaging period
);
int iMA(
string symbol, // symbol name
ENUM_TIMEFRAMES period, // period
int ma_period, // averaging period
int ma_shift, // horizontal shift
ENUM_MA_METHOD ma_method, // smoothing type
ENUM_APPLIED_PRICE applied_price // type of price or handle
);
10 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Por favor, leia o manual do MQL5 para obter mais detalhes sobre essas funções
do indicador. Ele lhe dará um melhor entendimento de como utilizar cada
indicador.
bool IndicatorRelease(
int indicator_handle, // indicator handle
);
Se o total disponível de barras é menos do que 60, nós queremos que o nosso
11 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// Do we have enough bars to work with
if(Bars(_Symbol,_Period)<60) // if total bars is less than 60 bars
{
Alert("We have less than 60 bars, EA will now exit!!");
return;
}
// We will use the static Old_Time variable to serve the bar time.
// At each OnTick execution we will check the current bar time with the
// If the bar time isn't equal to the saved time, it indicates that we
static datetime Old_Time;
datetime New_Time[1];
bool IsNewBar=false;
//--- EA should only check for new trade if we have a new bar
if(IsNewBar==false)
{
return;
}
//--- Define some MQL5 Structures we will use for our trade
MqlTick latest_price; // To be used for getting recent/latest pr
MqlTradeRequest mrequest; // To be used for sending our trade reque
MqlTradeResult mresult; // To be used to get our trade results
MqlRates mrate[]; // To be used to store the prices, volumes
ZeroMemory(mrequest); // Initialization of mrequest structure
12 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
função OnTick. Então seremos capazes de comparar o seu valor com a variável
New_Time (também do tipo de dados datetime), que é um arranjo de um
elemento para manter o novo (atual) tempo da barra. Também declaramos
uma variável de tipo de dados bool IsNewBar e configuramos seu valor para
false. Isto é porque queremos que esse valor seja VERDADEIRO apenas quando
nós possuirmos uma nova barra.
Utilizamos a função CopyTime para conseguir o tempo da barra atual. Ela copia
o tempo da barra para o arranjo New_Time com um elemento, se ele for bem
sucedido, nós comparamos o tempo de uma nova barra com o tempo da barra
anterior. Se os tempos não forem iguais, isso significa que temos uma nova
barra, e configuramos a variável IsNewBar para VERDADEIRO e salvamos o
valor do tempo da barra atual para a variável Old_Time.
A variável IsNewBar indica que temos uma barra nova. Se for falso,
terminamos a execução da função OnTick.
Ele verifica a execução do modo de depuração, ele irá imprimir uma mensagem
sobre os tempos da barra quando em modo de depuração, nós iremos
considerá-lo mais a frente.
A próxima coisa que queremos fazer aqui é verificar se nós temos barras
suficientes para trabalhar. Por que repetir isso? Só queremos nos certificar de
que o nosso CE funciona corretamente. Deve-se notar que enquanto a função
OnInit é chamada apenas uma vez quando o CE está anexado a um gráfico, a
função OnTick é chamada toda vez que há um novo ponto (cotação de preço).
Você pode notar que fizemos de forma diferente novamente aqui. Decidimos
armazenar as barras totais no histórico que obtivemos da expressão:
int Mybars=Bars(_Symbol,_Period);
em uma nova variável, Mybars, declarada dentro da função OnTick. Esse tipo
de variável é uma variável local, ao contrário da variável que nós declaramos na
seção de PARÂMETROS DE ENTRADA do nosso código. Enquanto as variáveis,
declaradas na seção de parâmetros de entrada do nosso código, estão
disponíveis para todas as funções dentro do nosso código que possam precisar
delas, variáveis declaradas dentro de uma única função são limitadas e
disponíveis para aquela função somente. Ela não pode ser utilizada fora daquela
função.
MqlTick
struct MqlTick
{
datetime time; // Hora da última atualização dos preços
double bid; // preço de compra (Bid) atual
double ask; // Preço de venda (Ask) atual
double last; // Preço da última negociação (Last)
ulong volume; // Volume para o último preço atual
};
Qualquer variável declarada como sendo do tipo MqlTick pode ser facilmente
utilizada para obter os valores atuais de Venda (Ask), Compra (Bid), Última
13 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
MqlTradeRequest
struct MqlTradeRequest
{
ENUM_TRADE_REQUEST_ACTIONS action; // Trade operation type
ulong magic; // Expert Advisor ID (magic number)
ulong order; // Order ticket
string symbol; // Trade symbol
double volume; // Requested volume for a deal in lots
double price; // Price
double stoplimit; // StopLimit level of the order
double sl; // Stop Loss level of the order
double tp; // Take Profit level of the order
ulong deviation; // Maximal possible deviation from the
requested price
ENUM_ORDER_TYPE type; // Order type
ENUM_ORDER_TYPE_FILLING type_filling; // Order execution type
ENUM_ORDER_TYPE_TIME type_time; // Order execution time
datetime expiration; // Order expiration time (for the orders
of ORDER_TIME_SPECIFIED type)
string comment; // Order comment
};
MqlTradeResult
struct MqlTradeResult
{
uint retcode; // Operation return code
ulong deal; // Deal ticket, if it is performed
ulong order; // Order ticket, if it is placed
double volume; // Deal volume, confirmed by broker
double price; // Deal price, confirmed by broker
double bid; // Current Bid price
double ask; // Current Ask price
string comment; // Broker comment to operation (by default it
is filled by the operation description)
};
MqlRates
struct MqlRates
{
datetime time; // Period start time
double open; // Open price
14 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Aqui nós declaramos um arranjo mrate[] que irá ser utilizado para armazenar
essas informações.
/*
Let's make sure our arrays values for the Rates, ADX Values and MA
is store serially similar to the timeseries array
*/
// the rates arrays
ArraySetAsSeries(mrate,true);
// the ADX DI+values array
ArraySetAsSeries(plsDI,true);
// the ADX DI-values array
ArraySetAsSeries(minDI,true);
// the ADX values arrays
ArraySetAsSeries(adxVal,true);
// the MA-8 values arrays
ArraySetAsSeries(maVal,true);
bool ArraySetAsSeries(
void array[], // array by reference
bool set // true denotes reverse order of indexing
);
Deve-se notar que isso também pode ser feito uma vez na seção de
inicialização do nosso código. No entanto, eu decidi mostrar isso nesse
momento para o bem da nossa explicação.
//--- Get the last price quote using the MQL5 MqlTick Structure
if(!SymbolInfoTick(_Symbol,latest_price))
{
Alert("Error getting the latest price quote - error:",GetLastErro
return;
}
int CopyRates(
15 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
mrate[bar_number].bar_property
int CopyBuffer(
int indicator_handle, // indicator handle
int buffer_num, // indicator buffer number
int start_pos, // start position
int count, // amount to copy
double buffer[] // target array to copy
);
0 - MAIN_LINE,
1 - PLUSDI_LINE,
2 - MINUSDI_LINE.
0 – MAIN_LINE.
Nós copiamos da barra atual (0) nas duas últimas barras. Então a quantidade
de registros para copiar é 3 (barras 0, 1, e 2). O buffer[] são os arranjos
dinâmicos alvo que nós declaramos anteriormente – adxVal, plsDI, minDI e
maVal.
Como você pode ver aqui novamente, nós tentamos capturar qualquer erro que
possa ocorrer em nosso processo de cópia. Se houver um erro, não há
necessidade de prosseguir.
//--- Copy the new values of our indicators to buffers (arrays) using t
if(CopyBuffer(adxHandle,0,0,3,adxVal)<0 || CopyBuffer(adxHandle,
|| CopyBuffer(adxHandle,2,0,3,minDI)<0)
16 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
{
Alert("Error copying ADX indicator Buffers - error:",GetLastError
return;
}
if(CopyBuffer(maHandle,0,0,3,maVal)<0)
{
Alert("Error copying Moving Average indicator buffer - error:"
return;
}
Para alcançar isso primeiramente declaramos dois tipos de dados bool variáveis
(Buy_opened e Sell_opened) que manterão um valor REAL se já
possuirmos uma posição aberta tanto para compra ou venda.
bool PositionSelect(
string symbol // Symbol name
);
long PositionGetInteger(
ENUM_POSITION_PROPERTY property_id // Property identifier
);
17 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
// Copy the bar close price for the previous bar prior to the current b
/*
1. Check for a long/Buy Setup : MA-8 increasing upwards,
previous price close above it, ADX > 22, +DI > -DI
*/
//--- Declare bool type variables to hold our Buy Conditions
bool Buy_Condition_1 = (maVal[0]>maVal[1]) && (maVal[1]>maVal[
bool Buy_Condition_2 = (p_close > maVal[1]); // previuos pri
bool Buy_Condition_3 = (adxVal[0]>Adx_Min); // Current ADX
bool Buy_Condition_4 = (plsDI[0]>minDI[0]); // +DI greater
18 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
bool OrderSend(
MqlTradeRequest& request // query structure
19 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Como você pode ver, nós utilizamos o nosso tipo variável MqlTradeRequest e a
variável tipo MqlTradeResult ao colocar a nossa ordem utilizando OrderSend.
O código de retorno 10009 mostra que a ordem OrderSend foi completada com
sucesso, enquanto que 10008 mostra que a nossa ordem foi colocada. É por
isso que verificamos para qualquer um desses dois códigos de retorno. Se
possuímos qualquer um deles, temos certeza de que a nossa ordem foi
completa ou foi feita.
/*
2. Check for a Short/Sell Setup : MA-8 decreasing downwards,
previous price close below it, ADX > 22, -DI > +DI
*/
//--- Declare bool type variables to hold our Sell Conditions
bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[
bool Sell_Condition_2 = (p_close <maVal[1]);
bool Sell_Condition_3 = (adxVal[0]>Adx_Min);
bool Sell_Condition_4 = (plsDI[0]<minDI[0]);
20 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
tipo bool para cada uma de nossas condições que devem ser atendidas antes
que uma ordem possa ser colocada. Uma variável do tipo boll pode apenas
conter VERDADEIRO ou FALSO. Então a nossa estratégia de venda foi
quebrada em quatro condições. Se qualquer uma das condições for atendida ou
satisfeita, então um valor de VERDADEIRO é armazenado em nossa variável
do tipo bool, de modo contrário, um valor de FALSO será armazenado. Vamos
olhar para elas uma a uma como nós fizemos para a seção de compra.
Se Sell_opened for verdadeira, nós não queremos abrir outra posição de venda,
então, exibimos um alerta para nos informar e aí retornar de forma que o nosso
CE irá agora esperar pela próxima variação. No entanto, se Sell_opened for
FALSO, então configuramos a nossa ordem de negociação de venda como
fizemos para a ordem de compra.
A maior diferença aqui é a forma como calculamos o nosso preço stop loss e o
preço take profit. Também já que estamos vendendo, nós vendemos no preço
de cotação; é por isso que utilizamos o nosso tipo MqlTick variável
latest_price para conseguir o preço de cotação mais recente. O outro tipo
aqui, conforme explicado anteriormente, é ORDER_TYPE_SELL.
21 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
3.1 Depurando
Depurar o nosso código nos ajuda a ver como o nosso código se desempenha
linha por linha (se nós configurarmos pontos de parada (breakpoints)) e lá
podemos notar quaisquer erros ou bugs no nosso código e rapidamente fazer as
correções necessárias antes de utilizar nosso código em uma negociação real.
Aqui vamos passar pelo processo passo a passo de depurar o nosso consultor
especialista, primeiramente, configurando breakpoints e em segundo lugar, sem
breakpoints. Para fazer isso, certifique-se de que você não fechou o editor.
Primeiramente, vamos selecionar o gráfico que queremos utilizar para testar o
nosso CE. Na barra do menu do editor, clique em ferramentas e clique em
Opções como mostrado abaixo:
22 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Para inserir um breakpoint, vá na linha em seu código na qual você quer inserir
o breakpoint. No lado da mão esquerda, no campo cinza perto da borda da linha
do código, clique duas vezes e você verá um pequeno botão azul redondo com
um quadrado branco dentro dele. Ou alternativamente, posicione o cursor do
seu mouse em qualquer lugar na linha do código onde você quer que o
breakpoint apareça e aperte F9. Para remover o breakpoint, pressione F9
novamente ou clique nele duas vezes.
23 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Para continuar, configure o breakpoint nas sete linhas de código como mostrado
na figura abaixo. O breakpoint 1 é o que nós criamos acima.
A primeira coisa que o editor faz é compilar o código, se houver qualquer erro
no ponto, ele irá exibi-lo e se não houver erro, ele irá lhe avisar que o código foi
compilado com sucesso.
Por favor observe que o fato de que o código compilou com sucesso não
significa que não existem erros no seu código. Dependendo de como o código é
escrito, podem haver erros de execução. Por exemplo, se qualquer uma das
nossas expressões não avalia corretamente devido a qualquer pequeno
descuido, o código irá compilar corretamente porém pode não executar
corretamente. Muita conversa, vamos ver em ação...
24 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Uma vez que o depurador terminou de compilar o código, ele leva você para o
terminal de comercialização, e anexa o CE ao gráfico que você especificou nas
configurações das opções do MetaEditor. Ao mesmo tempo, ele mostra para
você a seção de parâmetros de entrada do EA. Já que não ainda não estamos
ajustando nada, apenas clique no botão OK.
Uma vez que ele inicia o OnTick(), ele irá parar assim que ele chegar no nosso
breakpoint 1.
Você notará uma seta verde na linha do código. Isso lhe diz que a linha de
código anterior foi executada; estamos agora prontos para executar a linha
atual.
25 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
O passar por cima, por outro lado não entra na chamada função dentro
daquela linha de código. clique no botão ou pressione F10 para invocar o
comando
Par executar o passo do programa que é um nível acima, você clica nesse botão
ou pressiona Shift+F11.
Você pode adicionar outras como os valores ADX, os valores MA-8, etc.
26 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
27 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
28 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Uma vez que há uma nova variação, ela retornará para a primeira linha do
código na função OnTick(). E todos os valores das nossas variáveis/expressões
agora serão reiniciados porque essa é uma nova variável se qualquer um deles
for declarado como uma variável estática. Em nosso caso possuímos uma
variável estática Old_Time.
29 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Acho que você pode deixar o CE (EA) trabalhando por mais alguns minutos
enquanto você toma um café. Quando você estiver de volta e tiver ganhado
algum dinheiro (brincadeira), então clique no botão PARAR (vermelho) no
MetaEditor para parar a depuração.
30 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
O que nós fizemos de fato aqui é ver que o nosso CE apenas procura uma
operação de comercialização na abertura de uma nova barra e que o nosso CE
funciona de fato. Há muito espaço para ajustes ao código do nosso CE.
Preciso deixar claro, nesse ponto, que o terminal de comercialização deve ser
conectado à internet, caso contrário, a depuração não funcionará porque o
terminal não é capaz de comercializar.
O ponteiro do mouse muda para uma seta com ponta dupla, segure o mouse e
arraste a linha para cima. Pare quando você descobrir que você pode ver tudo
na aba de configurações.
31 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Aba agentes
Aba jornal
32 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Aba de entradas
No entanto, em nosso caso, não estamos otimizando o nosso CE, então não
precisaremos tocar nisso por enquanto.
Uma vez que tudo estiver pronto, podemos agora voltar a aba de
Configurações e clicar no botão iniciar. Então o verificador começa o seu
trabalho. Tudo que você precisa fazer agora é ir e tomar outra xícara de café,
se quiser, ou, se você for como eu, pode querer monitorar cada evento e,
então, ir para a aba jornal.
Aba gráfico
Uma vez que você começar a ver mensagens sobre ordens sendo enviadas para
a aba jornal, você pode querer voltar-se para uma nova aba chamada gráfico
que acabou de ser criada. Uma vez que você mude para a aba gráfico, verá o
gráfico aumentando ou diminuindo cada vez mais conforme o caso dependendo
do resultado das suas comercializações.
Aba resultados
33 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Uma vez que o teste estiver completo, você verá outra aba chamada
resultados. Mude para a aba resultados e você verá o resumo do teste que
nós acabamos de fazer.
Figura 34. A aba dos resultados do verificador de estratégia mostrando o resumo dos resultados do teste
Você pode ver o lucro bruto total, lucro líquido, comercializações totais,
comercializações de perda total e muito mais. É muito interessante ver que
temos cerca de out USD 1,450.0 dentro do período que foi selecionado para o
nosso teste. Ao menos temos um poco de lucro.
Deixe-me tornar uma coisa muito clara para você aqui. Você descobrirá que as
configurações para os parâmetros CE que você vê no verificador de estratégia é
diferente das configurações iniciais nos parâmetros de entrada do CE. Eu acabei
de demonstrar para você que é possível mudar qualquer um desses parâmetros
de entrada para conseguir o melhor do seu CE. Ao invés de utilizar um período
de 8 cada para a média móvel e ADX, eu mudei para 10 para a média móvel e
14 para o ADX. Eu também mudei a stop loss de 30 para 35. Por último, mas
não menos importante, decidi utilizar um cronograma de 2 horas. Lembre-se,
esse é o verificador de estratégia.
A janela de diálogo salvo aparecerá, digite um nome para o seu relatório (se
quiser, caso contrário deixe o nome padrão) e clique no botão salvar. Todo o
relatório será salvo no formato HTML para você.
Para visualizar o gráfico para o teste que foi realizado, clique em abrir gráfico
e você verá o gráfico exibido.
34 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Tarefa
Conclusão
Nesse guia passo a passo nós conseguimos visualizar as etapas básicas
necessárias para escrever um consultor especialista simples baseado em uma
estratégia de comercialização desenvolvida. Nós também vimos como verificar o
nosso CE para erros utilizando o depurador. Também discutimos como testar o
desempenho do nosso CE utilizando o verificador de estratégia. Com isso,
conseguimos ver o poder e robustez da nova linguagem MQL5. O nosso CE
ainda não é perfeito ou completo já que muitos outros ajustes precisam ainda
ser feitos de forma a utilizar ele para comercializações reais.
Ainda há mais a aprender e eu quero que você leia o artigo várias vezes
juntamente com o manual do MQL5, e tente tudo que você aprendeu nesse
artigo, eu posso lhe assegurar que você será um ótimo desenvolvedor de CE em
um futuro próximo.
Feliz programação.
Aviso: Todos os direitos a estes materiais são reservados a MQL5 Ltd. A cópia ou reimpressão destes materiais, no todo
35 de 36 08/12/2015 01:19
'Guia passo a passo para iniciantes para escrever um Expert Advisor n... https://www.mql5.com/pt/articles/100
Estratégia para Linguagem MQL5 | Biblioteca de Código Fonte | Como escrever um Expert Advisor ou um
indicador | Encomendar o Desenvolvimento de um Expert Advisor
Download MetaTrader 5 | Plataforma de Negociação MetaTrader 5 | Loja de Aplicativos | MQL5 Cloud Network
Sobre | História do Site | Termos e Condições | Política de Privacidade | Contatos
Copyright 2000-2015, MQL5 Ltd.
36 de 36 08/12/2015 01:19