Você está na página 1de 305

No MQL4 linguagem de programao algortmica

Curso Introdutrio

Atualmente, um computador pessoal se tornou indispensvel para todos. O rpido desenvolvimento da Internet e do
desempenho dos computadores modernos abriu novos horizontes em vrios campos da atividade humana. Logo em
dez anos atrs, o mercado financeiro comrcio estava disponvel apenas para os bancos e para uma comunidade
limitada de especialistas. Hoje em dia, qualquer pessoa pode participar do mundo dos comerciantes e profissionais
independentes iniciar negociao em qualquer momento.
Centenas de milhares de comerciantes no mundo inteiro j julgada Metatrader 4 Terminal Client pelos seus mritos.
O uso de sua linguagem de programao embutida, MQL4, elevadores comerciantes a um novo nvel de negociao
- a negociao automtica. Agora, um comerciante pode executar as suas ideias, como um programa aplicativo escrever um indicador personalizado, um script para executar operaes simples, ou criar um Expert Advisor - um
sistema automatizado negociao (trading robot). Um Expert Advisor (EA) pode trabalhar em um 24 / 7, sem
qualquer interveno - faixa de segurana preos, enviar mensagens eletrnicas, SMS de seu telefone celular, assim
como fazem muitas outras coisas teis.
A principal vantagem das aplicaes a possibilidade de fazer rotas de acordo com o algoritmo fixado pelo
comerciante. Qualquer idias que podem ser descritos em uma linguagem algortmica (interseco de duas mdias
mveis ou de processamento digital de sinais, trs telas por Elder Peters ou anlise fractal, uma rede neural ou
construes geomtricas) pode ser codificado em um aplicativo e depois utilizadas na prtica negociao.
Desenvolvimento de aplicaes para Metatrader 4 Terminal Client requer o conhecimento de MQL4. O presente
livro didtico vai ajud-lo a criar seu prprio Expert Advisors, scripts e indicadores e encarnar-los em suas idias o seu rentvel algoritmos de negociao. O manual destinado a um grande nmero de leitores sem experincia em
programao que querem aprender a desenvolver aplicaes comerciais automatizados para Metatrader Cliente
Terminal 4. O livro didtico concebido de tal modo que, para tornar o aprendizado MQL4 como convenientes e
conseqente possvel.
Prefcio
uma espcie de dificuldade para comear a escrever um livro sobre programao para iniciantes, porque a rea de
conhecimento em apreo envolve alguns novos conceitos que no so baseados em qualquer coisa previamente
conhecida
ou
costume.
De modo geral, um problema deste tipo pode ocorrer em qualquer outro campo do conhecimento. Por exemplo, o
ponto conhecido na matemtica como infinitesimal crculo, que o crculo em si definida como um conjunto de
pontos ordenados de uma certa forma. Como fcil de ver, esses termos so definidos atravs de cada uma das
outras. Ao mesmo tempo, este "descuido" no se tornou um obstculo para a matemtica. Ambos os crculos,
pontos, bem como outros termos aprovados em matemtica ir bem em conjunto. Alm disso, toda a gente percebe
pela
viso
que

um
ponto
eo
que

um
crculo.
fcil descobrir que a grande maioria dos termos ordinrios tm fronteiras indeterminadas. Alguns desses limites
so to nebulosos que estas auxiliem algumas dvidas sobre a existncia do prprio fenmeno ou objeto definido
pela expresso. No entanto, a natureza do homem que este estranho (em termos de lgica normal) situao no
vem entre um homem e de sua fecunda existncia e actividades. Aps um termo tem sido utilizado por um
determinado perodo de tempo, leva-se em completar o seu sentido para ns. difcil responder pergunta de como
e por que isso acontece por aqui. Mas ela faz. Ns apenas sabemos que vrias referncia a um prazo desempenha
um
papel
importante
em
termos
do
processo
de
aprendizagem
notvel.

Foram

estabelecidas

as

seguintes

tarefas

presentes

neste

trabalho:

desdobra
o
sentimento
de
novo
usando
termos
bem
conhecidos
analogias;
tornando o significado de cada termo intuitivamente claro quando ele ocorre pela primeira vez;
fornecendo os leitores com a quantidade de informao necessria para caracterizar programas e programao.
Para este efeito, o livro contm muitos exemplos e figuras. O texto inclui referncias cruzadas que permitem ao
leitor
a
obter
informaes
sobre
temas
afins.
Algumas palavras sobre a apresentao dos materiais. Alguns livros didticos sobre programao convidar os seus
leitores sobre as primeiras pginas para imprimir "Ol, mundo!" usando um programa simples. Seus autores
consideram que, logo que os seus leitores incio da aprendizagem de programao, deve remeter ao programa textos
e gradualmente se acostumar com a forma como os programas podem olhar, que mais tarde iro facilitar a sua
aprendizagem. No entanto, esta abordagem resulta em que o leitor tenha de lidar com vrios desconhecidos termos,
ao mesmo tempo, e s para adivinhar o contedo e as propriedades de algumas linhas do programa. Isso pode
resultar em um equvoco e, consecutivamente, na vaga no conhecimento do leitor.
A meu ver, seria mais eficaz a utilizao de um mtodo em que o leitor vai para a prxima seo do livro didtico
s depois que ele ou ela teve uma profunda compreenso das matrias anteriores. No mbito deste mtodo, o
primeiro programa ser oferecido ao leitor apenas depois que ele ou ela tem dominado todas as condies
necessrias e ganhou alguns insights sobre os princpios bsicos da codificao. Este o mtodo atual baseada no
livro
didtico.
Para dominar o conhecimento dado no livro, o leitor tem de ser um usurio PC e ter uma certa experincia em
trabalhar com Metatrader 4 produzidos pela MetaQuotes Software Corp.
Introduo Programao MQL4
Antes de comear a estudar MQL4 programao, iremos definir o escopo de nosso estudo. Em primeiro lugar devese notar que os programas discutidos neste livro pode ser usado apenas como aplicaes para trabalhar em
Metatrader Cliente Terminal 4. Fig. 1 abaixo mostra o papel do comrcio na gesto destes programas. Para uma
melhor compreenso da importncia do comrcio na gesto destes programas, vamos olhar para Fig. 1.

Se voc est interessado em MQL4 programao, voc deve ter conseguido familiarizar com o cliente terminal.
Cliente terminal uma parte do sistema de comrcio on-line. Este sistema tambm inclui um servidor instalado em
um centro lidar. O centro que tratam, por seu turno, est relacionada com outros participantes do mercado - os
bancos e instituies financeiras.
O cliente terminal inclui ambiente informacional - um conjunto de parmetros que informam sobre o estado do
mercado e das relaes entre um profissional e de lidar center. Contm informaes sobre preos correntes,
limitaes em relao aos mximos e mnimos para tamanho, distncia mnima de ordens stop, abono / proibio do
comrcio automatizado e muitos outros parmetros teis caracterizando o estado atual. O ambiente informacional
so atualizados quando novas carrapatos so recebidos pelo terminal (linha verde na fig. 1).
Built-in ferramentas
O cliente terminal built-in contm ferramentas que permitem realizar uma anlise tcnica do mercado e executar
manual de gesto comercial. Para uma anlise do mercado podem utilizar tcnicas diferentes indicadores e estudos
linha - suporte / resistncia linhas de tendncia canais, etc nveis Fibonacci
Manual de gesto para a negociao da ordem de ferramentas de gesto utilizado. Usando esta barra um
comerciante pode abrir, fechar e modificar ordens. Alm disso, o terminal tem a opo de parar de modo
automatizado de gesto de posio. Um comerciante aes do built-in com ferramentas de gesto comercial resulta
a formao do comrcio encomenda, que so enviadas para um servidor.
Para obter mais informaes sobre o cliente terminal por favor consulte o "UserGuide" (ClientTerminal_folder \
Terminal.chm).
Ferramentas de programao

Anlise do mercado e do comrcio na gesto Metatrader 4 Terminal Client implementado com a ajuda de
ferramentas de programao. MQL4 linguagem permite a criao de tais programas. Existem trs tipos de
aplicaes criadas em MQL4 e destinados a trabalhar no terminal do cliente:
personalizado indicador - um programa para visualizao grfica de mercado, de acordo com regularidades escrito
um algoritmo do autor;
Consultor Especialista - um programa que permite automatizar uma grande parte das operaes comerciais e torna
possvel automatizar totalmente a negociao;
script - um programa para executar um tempo de execuo das aces, incluindo as operaes comerciais.
Fig. 1 revela que o pedido tem a mesma via de acesso ao cliente terminal ambiente informacional como built-in
para ferramentas manuais negociao (setas azuis). Ele tambm pode formar gestora influncias (setas vermelhas),
passaram para o cliente de terminal. Programas de diferentes tipos podem ser utilizados simultaneamente e
intercmbio de dados. Usando esses aplicativos um programador pode automatizar uma grande parte das operaes
comerciais ou criar um rob que ser um comrcio sem interferncia do operador.
Os pedidos e manuais dos instrumentos de gesto podem ser utilizadas em simultneo o cliente terminal
complementando-se mutuamente.
A caracterstica fundamental tcnicas de negociao on-line utilizando o sistema de comrcio Metatrader que
todas as aces de gesto so produzidas no terminal cliente e, em seguida, enviada para um servidor. Programas
aplicativos (Expert Advisor, script, indicador) pode trabalhar apenas como parte do cliente terminal, desde que
esteja conectado a um servidor (que tratam centro). Nenhum dos programas aplicativos esto instalados no
servidor.
O servidor permite apenas para processar sinais provenientes de um cliente de terminal. Se um cliente terminal est
desconectado da Internet ou de um programa aplicativo (Expert Advisor ou script) em execuo em que no geram
qualquer gerir as aces, nada ir acontecer no servidor.
O escopo de nosso estudo inclui programas (Expert Advisors, scripts personalizados e indicadores) que permitam a
realizao parcial ou totalmente automatizada alargar significativamente o comrcio e manuteno de trocas
informativas (ver fig. 1). Neste livro voc encontrar a descrio do programa e os componentes principais regras
de criao e utilizando programas. Tambm vamos considerar em detalhes exemplos de programas e parmetros do
ambiente informacional do cliente terminal, que esto disponveis para um programa durante a sua execuo.
Programas para a negociao automtica possuem potencial muito mais possibilidades do que ferramentas manuais
de gesto comercial.
Na maioria dos casos, um programa permite fazer um trabalho mais fcil do comerciante eliminando a necessidade
de um monitoramento constante da situao no mercado antes da sesso um computador por um longo perodo de
tempo. Poder tambm contribuir para aliviar a tenso nervosa e diminuir o nmero de erros que aparecem nos
perodos de extrema tenso emocional. Mas o principal que a utilizao do programa de comrcio mtodo permite
desenvolver uma gesto prpria do idias e test-las em dados histricos, escolha ptima parmetros de aplicao
dessas idias e, finalmente, para implementar uma estratgia comercial bem articulada.

Noes bsicas de MQL4


Esta seo representa termos bsicos subjacentes MQL4 linguagem de programao:

Alguns conceitos bsicos


Expresses como 'carrapato' (uma alterao de preos), controlo em algoritmos, 'comentrio'
nos programas so descritos. O principal evento quando negociao em mercados financeiros a
mudana de preo. Esta a razo por carrapato um importante acontecimento que torna os
mecanismos bsicos de MQL4 programas veiculados. O que fazer quando um novo carrapato

rendimentos? Quais as aces a tomar? Este controle que se muda para a frente aqui. Mas no
se esquea de comentar o seu cdigo.

Constantes e Variveis
Os termos de constantes e variveis so introduzidas, a diferena entre esses termos so
explicados. Como o termo sugere, uma coisa constante, contnua, definir de uma vez por
todas. Ao contrrio da constante, uma varivel um objeto que o cdigo de programao pode
modificar o seu contedo. impossvel escrever um programa sem utilizar objetos imutveis
(constantes) e / ou objetos que podem ser modificados durante a execuo do programa
(variveis).

Tipos de dados
Certos tipos de dados so usados em qualquer linguagem de programao. O tipo de uma
varivel escolhido de acordo com a sua finalidade. Como que podemos declarar uma varivel,
como podemos inicializ-lo (preset seu valor inicial)? Uma m escolha do tipo de uma varivel
pode abrandar o programa ou mesmo resultar na sua aco errada.

Operaes e Expresses
Operaes operar sobre operandos. Quais so os tipos de operaes que existem? O que
utilizada para typecasting?Quais so as caractersticas especiais das operaes sobre
inteiros? Porque importante lembrar que cerca de precedences de dados de diferentes
tipos? Sem saber sobre as caractersticas de algumas operaes, voc pode fazer erros sutis.

Operadores
Simples e compostos operadores. Uma ao necessria no deve ser executado por um simples
operador. Se for necessrio que um grupo de operadores executado como um grande operador,
este grupo deve ser includo em um composto operador. Requisitos especficos e exemplos de
utilizao de operadores esto dadas.

Funes
A necessidade de se obter um simples cdigo remete-nos para o prazo de Funo. Para utilizar a
funo de locais diferentes no programa, necessrio prestar-lhe-Function Parameters. Iremos
considerar o processo de criao da funo personalizada. Os exemplos de utilizao de funes
normalizadas so dadas.

Tipos de Programas
Scripts, indicadores e Expert Advisors so os tipos de MQL4 programas que lhe permitem cobrir
praticamente toda a classe dos problemas relativos negociao em mercados fincancial.
necessrio compreender os efeitos de cada tipo de programas, a fim de utilizar Metatrader Cliente
Terminal 4, da melhor forma.

Alguns conceitos bsicos


Assim, o tema do nosso interesse, um programa escrito em MQL4. Antes de darmos incio a uma
apresentao detalhada das regras de escrever programas, necessrio descrever os conceitos bsicos
que caracterizam um programa e de suas interrelaes com informao ambiental. O Metatrader 4
Terminal Client for conhecida a trabalhar on-line. A situao dos mercados financeiros muda

continuamente, o que afecta os smbolos grficos no cliente de terminal. Carrapatos terminal fornecer ao
cliente, com informaes sobre a evoluo dos preos no mercado.

A noo de carrapato
Assinale-se de um evento que se caracteriza por um novo preo do smbolo em algum instante.
Carrapatos so entregues a cada cliente atravs de um terminal instalado em um servidor central que
tratam. Conforme adequado situao actual dos mercados, carrapatos podem ser recebidas mais ou
menos freqentes, mas cada um deles traz uma nova citao - o custo de uma moeda expresso em
termos de outra moeda.
Um pedido que operam com o cliente terminal pode funcionar dentro de um perodo longo de tempo,
por exemplo, vrios dias ou semanas. Cada pedido executado de acordo com as regras estabelecidas
para os programas de um certo tipo. Por exemplo, uma Expert Advisor (EA) no funciona continuamente
o tempo todo. Um Expert Advisor normalmente lanado no momento em que surge um novo
carrapato. Por este motivo, no se caracterizar como apenas um carrapato nova citao, mas sim como
um evento para ser processado pelo cliente terminal.
A durao do Expert Advisor da operao depende de qual programa est includo no cdigo-la. Normal
EAs completar um ciclo de processamento de informao durante alguns dcimos ou centsimos de
segundo. Dentro desse prazo, o EA pode ter processado alguns parmetros, fazer uma deciso
comercial, fornea o profissional com algumas informaes teis, etc Aps ter terminado esta parte do
seu trabalho, a EA vai para o modo de espera at que um novo carrapato vem. Este novo carrapato
lana o Expert Advisor novamente, o programa faz o seu adequado funcionamento novamente e volta ao
modo de espera. A descrio detalhada de como o aparecimento de um novo programa carrapato
influncias operao segue abaixo.

A noo de controle
Falando sobre o cdigo em execuo um programa de fluxo, bem como sua interao com o cliente
terminal, vamos usar o termo de controlo.
O controle um processo de realizao de aes predeterminadas pelo programa algoritmo eo cliente
terminal funcionalidades. Controle pode ser transferida dentro do programa a partir de um cdigo de
linha para um outro, bem como o programa de terminal para o cliente.
O controle transferido de uma forma semelhante de algum que d a palavra para falar numa
reunio. Tal como oradores abordar uma reunio e, em seguida, dar a palavra a outros, o programa
cliente do terminal e transferncia de controle entre si.Pelo que, o cliente terminal domina. Seu estado
maior do que a do programa, como a autoridade do presidente de uma reunio, maior do que as de
um vulgar coluna.
Antes do programa lanado, o controle est sob a superviso do cliente terminal. Quando um novo
carrapato recebida, o terminal cliente transfere o controle para o programa. O cdigo do programa
comea a ser executado neste momento.
O cliente terminal, depois de ter transferido o controle para o programa, no pode parar o seu
funcionamento. Ela continua trabalhando com o mximo desempenho durante todo o perodo de tempo
que lanado no PC. O programa s poder comear a funcionar no momento em que o cliente tenha
transferido o controlo terminal para ele (como o presidente de uma reunio a reunio controla o tempo

todo que est acontecendo, enquanto que o atual orador toma a palavra por apenas um perodo limitado
de tempo ).
Depois de ter completado o seu funcionamento, o programa retorna controle para o cliente terminal e
no pode ser lanado por sua prpria iniciativa. No entanto, quando o controlo j foi transferida para o
programa, ele retorna controle para o cliente terminal, por si s. Em outras palavras, o cliente terminal
no poder retornar controle a partir do programa, por si s. Dynamic aes do usurio (por exemplo,
forou o encerramento do programa) so uma iseno.
Ao discutir os assuntos de desempenho dos programas e estruturas internas, estamos interessados
principalmente na parte do controle que so transferidos dentro de um programa. Deixe a Fig's
referem. 2 mostra que a natureza global da transferncia de controle para, a partir e dentro de um
programa. Crculos apresentados na figura caracterizar algumas pequenas, logicamente concludo
fragmentos de um programa, enquanto que as setas entre os crculos mostram como controle
transferido de um fragmento para outro.

Fig. 2. Transferindo o controle de um programa


Um programa que aceitou o controle do cliente terminal (executando o programa) comea a fazer
algumas aes de acordo com a sua inerente algoritmo. O programa contm linhas programa; geral
ordem de execuo programa consiste na transferncia do controle seqencial a partir de uma linha
para outra na direo de cima para baixo. O que, segundo as quais as regras podem ser escritos nestas
linhas sero consideradas inferiores, em todos os detalhes.
Aqui, importante apenas para enfatizar que cada fragmento executado logicamente concludo - por
exemplo, alguns clculos matemticos so feitas, uma mensagem exibida na tela, uma ordem
comercial formada, etc At o fragmento actual do programa executado , Que mantm o
controle. Depois de ter sido integralmente cumpridos, o controle transferido para um outro
fragmento. Assim, o controlo dentro de um programa transferido de um fragmento para outro
logicamente concludo que eles so executados. Logo que o ltimo fragmento executado, o programa
far a transferncia (retorno) para controlar o terminal cliente.

A noo de comentrio
Um programa consiste em dois tipos de registros: aqueles que apresenta o programa em si e que so
textos explicativos para o programa cdigo.
Um comentrio opcional e nonexecutable parte de um programa.
Ento, um comentrio opcional parte de um programa. Isso significa que um programa pronto
funcionar de acordo com o seu cdigo independentemente de saber se existem comentrios nos ou
no. No entanto, as observaes facilitar a compreenso do programa cdigo muito. Verificou-se uma
linha e multi-line comentrios. A uma linha de comentrio qualquer seqncia de caracteres aps duas
barras oblquas (//). O sinal de um uma linha de comentrio terminada por linha alimentao. Um
comentrio multi-linha comea com os caracteres de / * e terminada por * / (ver fig. 3).
Os comentrios so utilizadas para explicar o programa cdigo. Um bom programa
contm semper comentrios.

Fig. 3. Exemplo de comentrios em um programa.


Os comentrios so amplamente utilizadas na codificao. Eles normalmente so exibidas em cinza nos
cdigos. Iremos utilizar comentrios, tambm, a fim de explicar os nossos cdigos e torn-los mais
inteligveis.
Constantes e Variveis
Os termos de 'constante' e 'varivel' so consideradas em uma seo, uma vez que estes termos so
muito prximos de si mesmas.
A noo de constante
Constante uma parte de um programa, um objeto que tem um valor.
A durao do programa uma constante na semelhantes para o mesmo termo usado em equaes
matemticas. um valor invarivel. Para descrever a natureza de um constante utilizada em uma
linguagem algortmica em tantos detalhes quanto possvel, vamos remeter ao bem-conhecido fsico e
matemtico constantes.
A raa humana tem descoberto as constantes, os valores dos quais no dependem de ns, de qualquer
maneira. Essas so, por exemplo, na fsica: a queda livre que a acelerao semper igual a 9,8 m / s /

s; em matemtica: Pi = 3.14. Constantes do tipo no pode ser considerado semelhante aos constantes,
de uma linguagem algortmica.
O prazo de constante tambm usado em equaes matemticas. Por exemplo, na equao de Y = 3 *
X + 7, nmeros 3 e 7 so constantes. Os valores dessas constantes so totalmente dependentes da
vontade da pessoa que fez a equao. Esta a mais prxima de constantes analogia usados em
programas MQL4.
Uma constante (como um valor) colocada por um programador no cdigo na fase da sua criao. A
nica constante caracterizada pelo seu valor, pelo que a perspectiva da "constante" e "o valor de uma
constante" so sinnimos completo.
Constantes exemplar:
37, 3.14, verdade, "Kazan"

Fig. 4. Uma constante na memria de um PC.

As propriedades de constantes
A propriedade de uma constante o seu poder de reter durante o tempo de funcionamento do
programa o valor fixado pelo programador e definir este valor para o programa quando o programa
solicita deste (Fig. 5). Para cada constante no programa, o computador aloca uma parte da sua memria
do tamanho necessrio. O valor de uma constante no pode ser mudado durante a execuo do
programa nem por um programador, nem pelo computador (Fig. 6).

O valor da constante semper permanece a mesma.

Fig. 5. O estado da memria celular de uma constante quando se define o valor para o programa.

O valor de uma constante no pode ser mudado durante a operao do programa.

Fig. 6. impossvel alterar o valor de um programa constante durante a operao.

A noo de varivel
Parte varivel um programa que tem um valor e um nome.
O prazo da varivel em MQL4 semelhante que foi aceite pela matemtica. A diferena entre eles
consiste apenas na medida em que o valor de uma varivel em matemtica semper implcita, enquanto
que o valor da varivel em execuo um programa armazenado em uma cela especial na memria do
computador.
O termo de "varivel identificador ' a plena sinnimo de" varivel nome'. A varivel colocado no texto
do cdigo, pelo seu autor, na fase de codificao como uma varivel nome. O nome (identificador) de
uma varivel pode ser composta por letras, dgitos, sublinhado. No entanto, ele deve comear com uma
letra. MQL4 sensvel a maisculas e minsculas, ou seja, S e sno so os mesmos.
Exemplar varivel nomes: Alfa, alfa, beta, o nmero, Num., A_37, A37, qwerty_123
Os seguintes identificadores de variveis representam os nomes das diferentes variveis: _22 ea a_22;
Massa, MASSA.
Exemplar valores das variveis: 37, 3.14, verdadeiro, "Kazan".
As propriedades da varivel
A propriedade de uma varivel a sua capacidade de se obter um certo valor a partir do programa,
ret-los durante o perodo de funcionamento do programa e definir este valor para o programa quando
solicitado pelo programa. Para cada varivel do programa, o computador aloca uma parte da sua
memria do tamanho necessrio. Vamos referir-se a Fig. 7 e estudar a construo de uma varivel.

Fig. 7. Uma varivel na memria de um computador.


Existe um valor de uma varivel na memria do celular no computador. Esse valor pode ser solicitada
para a transformao e modificado pelo programa. O nome de uma varivel nunca alterado. Ao
escrever um cdigo, o programador pode definir qualquer nome para a varivel. No entanto, logo que o
programa est pronto lanado, nem o programador nem computador, nem o programa tem qualquer
viabilidade tcnica para mudar o nome da varivel.
Se um programa enquanto est a ser executado rene o nome de uma varivel, o programa remete
para essa varivel, a fim de obter o seu valor para a transformao. Se um programa se referiu a uma
varivel, este ltimo apresenta um valor para o seu programa. Pelo que, o valor da varivel permanece o

mesmo, considerando que o programa se torna a cpia do valor contido na clula de memria alocado
para essa varivel (Fig. 8).

Quando o valor de uma varivel definida para um programa, este valor


permanece inalterado. O nome de uma varivel nunca ser mudado.

Fig. 8. O estado da clula de memria de uma varivel quando se define o valor para o programa.
Uma varivel no est relacionada com a execuo do programa durante um certo perodo de
tempo. Durante este perodo, o programa pode referir-se a outras variveis ou fazer clculos
necessrios. Entre as "sesses" de comunicao com o programa, a varivel retm o seu valor, ou seja,
mantendo-se inalterada.
De acordo com o algoritmo do programa, ele pode tornar-se necessrio alterar o valor de uma
varivel. Neste caso, o programa apresenta ao seu novo valor varivel, a varivel que recebe este valor
a partir do programa. Todas as modificaes so feitas na memria celular. Isso resulta em que o valor
anterior da varivel eliminada, enquanto que um novo valor da varivel definida pelo programa toma o
seu lugar (Fig. 9).

O valor de uma varivel pode ser alterado pelo programa. O nome da varivel
semper inalterada.

Fig. 9. O estado da clula de memria de uma varivel quando a receber o valor do programa.
Constantes e Variveis exemplar em um Programa
Em um programa, constantes e variveis podem ser encontrados na operadores. No cdigo abaixo, A e
B so variveis, 7 e 3 so constantes:
A = 7; / / Linha 1
B = A + 3; / / Linha 2
Vamos estudar como o programa funciona com constantes e variveis. Execuo dessas linhas, o
programa ir fazer os seguintes passos:
Linha 1:
1. 7 apresenta o seu valor constante para o programa.

2. Um valor varivel recebe 7 do programa.


Linha 2:
1. O programa tem encontrado uma expresso para a direita a partir do sinal da igualdade e est a
tentar calcul-lo.
2. Constant 3 apresenta o seu valor para o programa.
3. O programa refere-se a uma varivel pelo nome.
4. Uma varivel define o seu valor (7) para o programa.
5. O programa faz clculos (7 + 3).
6. varivel recebe valor 10 atravs do programa.
O Valor de uma varivel pode ser mudado durante a operao do programa. Por exemplo, pode haver
uma rubrica no programa que contm o seguinte:
= 33; / / Linha 3
Neste caso, o seguinte ser feito na execuo do programa:
1. 33 conjuntos constante o seu valor para o programa.
2. Varivel B gets (nova) valor 33 atravs do programa.
fcil notar que o valor varivel B recebe 10, a certa altura da execuo do programa, e ento ele
recebe o valor de 33. O nome da varivel B mantm-se inalterado durante todos estes acontecimentos,
enquanto que o valor da varivel ir mudar.
Fig. 10 mostra constantes e variveis do programa cdigo:

Fig. 10. Uma constante e uma varivel em um programa.


Tipos de dados
um conhecimento comum que s equitype valores podem ser acrescentadas ou subtradas. Por
exemplo, mas pode ser adicionado mas, mas, mas no pode ser adicionado metros quadrados
ou a temperatura. Limitaes semelhantes podem ser encontrados na maioria das lnguas modernas
algortmica.
Tal como objetos de vida normal ter alguns tipos caracterizando as suas cores (vermelho, azul, amarelo,
verde), o seu sabor (amargo, cido, doce), montante (um e meio, dois, sete), MQL4 usa dados de
diferentes tipos. Falando sobre o tipo de dados, vamos dizer o tipo do valor de uma constante, de uma
varivel eo valor retornado por uma funo (a noo de funo considerado na seo de Funes).
Em MQL4, so distinguidos os seguintes tipos (para os valores de constantes, variveis, e os valores
devolvidos pelas funes):

int - inteiros;
duplo - nmeros reais;
bool - booleanos (lgicos) valores;
string - valores do tipo string;
cor - valores de cor tipo;

datetime - valores de data e hora.

Tipo int
Os valores do tipo int so inteiros. Este tipo inclui valores que so inteiro pela sua natureza. Os
seguintes valores so inteiros, por exemplo: quantidade de bares na janela do smbolo (16000 bares),
abriu e quantidade de encomendas pendentes (3 ordens), na distncia entre os pontos actuais dos
preos e smbolo da ordem Open Preo (15 pontos). Montantes representam objetos tais como eventos
tambm pode ser apenas inteiros. Por exemplo, a quantidade de tentativas para abrir um despacho no
pode ser igual a uma e meia, mas s para um, dois, trs, etc
Existem 2 tipos de valores inteiros:

Valores decimais pode ser composta por algarismos de 0 a 9 e ser positivos ou negativos: 10,
11, 12, 1, 5, -379, 25, -12.345, -1, 2.
Hexadecimal valores podem consistir de latim letras de A a F ou a partir de um f, algarismos de
0 a 9. Eles devem comear com 0x ou 0x e ter valores positivos ou negativos: 0x1a7b, 0xff340,
0xAC3 0X2DF23, 0X13AAB, 0x1.

Valores do tipo int deve estar dentro da faixa de -2 147 483 648 para 2 147 483 647. Se o valor de uma
constante ou uma varivel est fora do intervalo acima, o resultado da operao programa ser nulo. Os
valores de constantes e variveis do tipoint ter 4 bytes da memria de um computador.
Um exemplo de utilizao de uma varivel do tipo int em um programa:
Arte int = 10; / / Exemplo varivel inteira
int B_27 = - 1; / / Exemplo varivel inteira
Num int = 21; / / Exemplo varivel inteira
Max int = 2147483647; / / Exemplo varivel inteira
int = Min - 2147483648; / / Exemplo varivel inteira

Tipo dupla
O valor real da dupla tipo so nmeros que contm uma parte fracionria.
Exemplo valores deste tipo podem ser quaisquer valores que tm uma parte fracionria: inclinao da
linha de apoio, smbolo preo, valor mdio de abertura ordena dentro de um dia.
s vezes voc pode enfrentar problemas designando variveis ao escrever o seu cdigo, ou seja, ele no
claro para um programador que tipo (int ou dupla), a varivel pertence. Vamos considerar um
pequeno exemplo:
Um programa abriu 12 ordens dentro de uma semana. Qual o tipo da varivel A, que considera a
quantidade mdia diria de ordens abertas por esse programa? A resposta bvia: A = 12 ordens / 5
dias. Significa que a varivel A = 2.4 deveria ser considerada no programa como dupla, uma vez que
este valor tem uma parte fracionria. Que tipo deve ser a mesma varivel A se o valor total das
encomendas abertos dentro de uma semana 10? Voc pode pensar que, se 2 (10 encomendas / 5 dias
= 2) no tem nenhuma parte fracionria, uma varivel pode ser considerada como int. No entanto, esse
raciocnio est errada. O actual valor de uma varivel pode ter uma frao parte constitudo por apenas
zeros. importante que esse valor dessa varivel real, pela sua natureza. Neste caso, a varivel A tem
tambm de ser do tipo dupla. O ponto separa tambm devem ser inscritas no registo constante no
programa: = 2,0

Os valores reais das variveis constantes e constitudo por uma parte inteira, um ponto decimal, e uma
parte fracionria. Os valores podem ser positivos ou negativos. A parte inteira e da parte fracionria so
constitudos por algarismos de 0 a 9. A quantidade de algarismos significativos depois da vrgula pode
chegar ao valor de 15.
Exemplo:
27,12 -1,0 2,5001 -765456,0 198732,07 0,123456789012345
Os valores do tipo dupla pode variar entre -1,7 * e-308 a 1.7 * e308. Na memria do computador, os
valores de constantes e variveis do tipo dupla ter 8 bytes.
Um exemplo de utilizao de uma varivel do tipo dupla em um programa:
Arte duplo = 10,123; / / Exemplo varivel real
B_27 duplo = - 1,0; / / Exemplo varivel real
Num duplo = 0,5; / / Exemplo varivel real
MMM = duplo - 12.07; / / Exemplo varivel real
Price_1 duplo = 1,2756; / / Exemplo varivel real

Tipo bool
Os valores do tipo bool so valores de Boolean (logical) Tipo ou que contenham desmentistes verdade.
Com o objectivo de aprender a noo de Boolean tipo, vamos considerar um pequeno exemplo do nosso
quotidiano. Digamos, um professor precisa de conta a presena dos livros didticos dos alunos. Nesse
caso, o professor ir listar todos os alunos, sobre uma folha de papel e, em seguida, ir assinalar, em
uma linha direita se um aluno tem um livro didtico ou no. Por exemplo, o professor pode usar marcas
e traos em cima da mesa:
Lista de Alunos

Livros Didticos
em Fsica

Livro Didtico
em Biologia

Livro Didtico
em Qumica

Smith

--

--

Jones

--

Marrom

--

...

...

...

...

...

25

Thompson

Os valores nas colunas direito s pode ser de 2 tipos: verdadeiro ou falso. Estes valores no podem ser
atribudas a qualquer dos tipos acima, uma vez que so considerados no em todos os nmeros. Eles
no so os valores de cor, sabor, volume, etc, de qualquer modo. No entanto, que assume assim um
importante sentido. Em MQL4, tais valores booleanos so nomeadas, ou lgico, de valores. Constantes e
variveis do tipo bool so caracterizados atravs de que podem ter apenas 2 possveis valores: true
(verdadeiro, TRUE, 1) ou falsa (falso, FALSE, 0). Os valores de constantes e variveis do tipo bool ter 4
bytes na memria do computador.
Um exemplo de utilizao de uma varivel do tipo bool em um programa:
bool aa = True; / / Boolean varivel tem o valor de verdade
bool B17 = TRUE; / / Boolean B17 varivel tem o valor de verdade
Hamma bool = 1; / / Boolean Hamma varivel tem o valor de verdade

Asd bool = False; / / Boolean Asd varivel tem o valor de um falso


Nol bool = FALSE; / / varivel Booleana Nol
tem o valor de um falso
Prim bool = 0; / / varivel Booleana Prim
tem o valor de um falso

Tipo string
O valor do tipo string um valor representado como um conjunto de caracteres ASCII.
No nosso quotidiano, pertence a um contedo semelhante, por exemplo, armazenar nomes, carro faz,
etc Uma seqncia de tipo valor gravado como um conjunto de caracteres colocados em aspas (no
deve ser misturado com o dobro nica aspas!).Aspas so usadas apenas para marcar o incio eo fim de
uma string constante. O valor em si o conjunto de caracteres emoldurado pelas cotaes.
Se existe uma necessidade de introduzir um aspas duplas ( "), voc deve colocar um reverso barra (\)
antes dela. Qualquer caractere especial constantes no verso seguinte barra (\) pode ser introduzido em
uma seqncia. O comprimento de uma string constante varia de 0 a 255 caracteres. Se o comprimento
de uma string constante ultrapassa o seu mximo, o excesso de personagens o lado direito ser
truncado e compilador dar o correspondente aviso. Uma combinao de dois caracteres, a primeira das
quais a reverso barra (\), comummente aceite pela maioria dos programas e percebida como uma
instruo para executar um determinado texto de formatao. Essa combinao no exibido no texto.
Por exemplo, a combinao de \ n indica a necessidade de uma alimentao de linha; \ t demandas
tabulao, etc
O valor do tipo string gravada como um conjunto de personagens emoldurado por aspas duplas:
"Metatrader 4", "Stop Loss", "Ssssstop_Loss", "stoploss", "10 sementes". O valor da cadeia, como tal, o
conjunto de caracteres. As aspas so usadas apenas para marcar o valor das fronteiras. A representao
interna uma estrutura de 8 bytes.
Um exemplo de utilizao de uma varivel do tipo string em um programa:
string Prefix = "Metatrader 4";
string Postfix = "_of_my_progr.
string Name_Mass = "History"; /
string texto = "Linha de Alta \
caracteres line feed

/ / Exemplo varivel string


OK"; / / Exemplo varivel string
/ Exemplo varivel string
n Baixa Line", / / o texto contm

Tipo de cor
O valor da cor um tipo de valor cromtico.
O significado de "cor" (azul, vermelho, branco, amarelo, verde, etc) um conhecimento comum. fcil
imaginar o que uma varivel ou uma constante de cor tipo pode significar. uma constante ou uma
varivel, cujo valor uma cor. Pode parecer a ser um tanto incomum, mas muito simples, de modo
geral. Tal como o valor de uma constante um nmero inteiro, o valor de uma cor uma cor constante.
Os valores constantes da cor e variveis pode ser representado como um dos trs tipos:

Literais
O valor de cor tipo representado como um literal constitudo por trs partes que representam
os valores numricos da intensidade das trs cores fundamentais: vermelho, verde e azul
(RGB). O valor deste tipo comea com 'C' e citada por aspas simples.

Os valores numricos de RGB intensidade variam de 0 a 255 e podem ser registradas tanto
decimalmente e hexadecimally.
Exemplos: C'128128128 '(cinza), C'0x00, 0x00, 0xFF' (azul), C'0xFF, 0x33, 0x00 '(vermelha).

Integer Representao
Integer registados como uma representao hexadecimal ou um nmero decimal. Um nmero
hexadecimal apresentado como 0xRRGGBB onde TR o valor da intensidade vermelho, GG verde, e BB - azul. Decimal constantes no so reflectidas directamente em RGB. Representam o
valor decimal de uma representao hexadecimal inteiro.
Representao dos valores de cor e tipo como inteiros literais hexadecimal como muito fcil de
utilizar. A maioria dos modernos editores de texto e grficos fornecem informaes sobre a
intensidade do vermelho, verde e azul componentes selecionados no valor de cor. Voc acabou de
seleccionar uma cor em seu editor e copiar os valores encontrados em sua descrio para a cor
correspondente valor representao no cdigo.
Exemplos: 0xFFFFFF (branco), 0x008000 (verde), 16777215 (branco), 32768 (verde).

Fig. 11. Cor parmetros para literal inteiro e representao do valor constante cor pode ser
tomada nos modernos editores.

Color Names
A forma mais fcil de se definir uma cor para indicar o seu nome, de acordo com a tabela de
cores da web. Neste caso, o valor de uma cor representada como uma palavra correspondente
com a cor, por exemplo, vermelho - a cor vermelha.

DarkGreen

DarkSlateGray

Olive

Indigo

MidnightBlue

DarkBlue

DarkGoldenrod

DarkSlateBlue

Sienna

DarkViolet

Tijolo refratrio

MediumSpringGreen

LawnGreen

CadetBlue

Laranja

Ouro

Azul

Verde

Teal

DarkOliveGreen SaddleBrown
MediumBlue

Marinha
ForestGreen

Marrom

DarkTurquoise

Chocolate

Crimson

DarkOrchid

YellowGreen

LimeGreen

Amarelo

Chartreuse

Lime

SpringGreen

Magenta

Vermelho

Gray

SlateGray

Peru

DeepPink

MediumTurquoise

DodgerBlue

Turquesa

RoyalBlue

SlateBlue

MediumOrchid

GreenYellow

MediumAquamarine

DarkSeaGreen

Tomate

RosyBrown

PaleVioletRed

Coral

CornflowerBlue

DarkGray

BurlyWood

HotPink

Salmo

Violet

LightCoral

SkyBlue

Khaki

LightGreen

Aquamarine

Prata

LightSkyBlue

LightSteelBlue

Thistle

PowderBlue

PaleGoldenrod

PaleTurquoise

LightGray

Trigo

LightPink

Gainsboro

PeachPuff

Rosa

Bisque

Beige

AntiqueWhite

PapayaWhip

Cornsilk

LightYellow

LightCyan

MistyRose

OldLace

WhiteSmoke

Concha marinha

Marfim

Melada

MediumVioletRed MediumSeaGreen

SandyBrown MediumSlateBlue

LightGoldenrod Blan

MintCream

Neve

Branco

Constantes e variveis de cor tipo tomar 4 bytes na memria do computador. Um exemplo de como
usar essa varivel em um programa:
Paint_1 color = C '128, 128, 128'; / / O valor de cinza foi atribudo
varivel
Colo cor C = '0 x00, 0 x00, 0 xFF "; / / O valor de azul foi atribudo
varivel
BMP_4 color = C '0 xFF, 0 x33, 0 x00' / / O valor do vermelho foi atribudo
varivel
K_12 color = 0 xFF3300; / / O valor do vermelho foi atribudo varivel
N_3 color = 0 x008000; / / O valor do verde foi atribudo varivel
Cor cor = 16777215; / /
O valor do branco foi atribudo varivel
Alfa color = 32768; / /
O valor do verde foi atribudo varivel
A = cor vermelha; / /
O valor do vermelho foi atribudo varivel
B = cor amarela; / /
O valor de cor amarela foi atribudo varivel
color = Colorit Negro; / /
O valor dos negros foi atribudo varivel
B_21 color = White; / /
O valor do branco foi atribudo varivel

Tipo datetime
O valor do tipo datetime os valores de data e hora.
Os valores deste tipo podem ser usados em programas para analisar o momento do incio ou cessao
de alguns eventos, incluindo os lanamentos de importantes notcias, horrios start / acabamento, etc As
constantes de data e hora pode ser representado como uma linha literal consistindo de 6 peas que
representam o valor numrico do ano, ms, dia (ou dia, ms, ano), hora, minuto e segundo.
A nica constante enquadrado em cotaes e comea com 'D'. permitido o uso truncado valores: ou
sem data ou sem tempo, ou apenas um valor vazio. O intervalo de valores: a partir de 1 de janeiro de
1970, a 31 de dezembro de 2037. Os valores de constantes e variveis do tipo datetime ter 4 bytes na
memria do computador. Um valor representa a quantidade de segundos decorridos a partir das 00:00
do dia 1 de janeiro 1970.
Um exemplo de utilizao de uma varivel do tipo datetime em um programa:
Alfa datetime = D '2004.01.01 00: 00 "; / / Ano Novo
Tim datetime = D "01.01.2004"; / / Ano Novo
datetime Tims = D '2005.05.12 16: 30: 45'; / / 12 de maio de 2005 4:30:45
pm
datetime N_3 = D 12.05.2005 16: 30: 45 '; / / 12 de maio de 2005 4:30:45
pm
Compile datetime = D''; / / equivalente a D '[compilao data]
/ / 00:00:00 '

Declarao e iniciao varivel


A fim de evitar possveis "perguntas" sobre o programa pelo qual o tipo de dados desta ou daquela
varivel pertence, que aceite em MQL4 especificar os tipos de variveis logo no incio de um programa
explcito. Antes de uma varivel comea a participar em quaisquer clculos, deve ser declarada.

Declarao varivel a primeira meno de uma varivel em um programa. Na declarao de uma


varivel, seu tipo deve ser especificada.
A inicializao varivel significa que a sua afectao a um valor correspondente com o seu tipo, na
sua declarao. Cada varivel pode ser inicializado. Se nenhum valor inicial estabelecido
explicitamente, um numrico varivel ser inicializada por zero (0) e uma varivel string ser inicializada
por uma linha vazia.
Em MQL4, admite-se a especificar os tipos de variveis explicitamente em sua
declarao. O tipo de uma varivel declarada na primeira meno do nome desta
varivel. Quando ela indicada para o segundo e os subsequentes vezes, o seu tipo
no especificado mais. No decurso da execuo do programa, o valor da varivel
pode mudar, mas o seu nome e tipo permanecem inalteradas. O tipo de uma varivel
pode ser declarada em nica ou linhas de operadores.
Uma varivel pode ser declarado em uma nica linha:
int Var_1; / / Varivel declarao em uma nica linha
Esse recorde significa que haver Var_1 varivel (varivel declarao como tal) e do tipo desta
varivel int sero dadas no programa.
Em uma linha, vrias variveis do mesmo tipo podem ser declaradas:
int Var_1, Box, Comm; / / Declarao de diversas variveis em uma linha
Esse recorde significa que haver variveis Var_1, Caixa e Comm, todos do tipo int, utilizado no
programa. Significa que as variveis acima enumeradas sero considerados pelo programa como
variveis do tipo inteiro.
Variveis tambm podem ser inicializados dentro operadores:
Var_5 duplo = 3,7; / / Varivel inicializao em uma misso operador
Esse recorde significa que haver Var_5 varivel do tipo usado em programa duplo, o valor inicial da
varivel a ser 3.7.
O tipo de variveis nunca especificado a subseqente linhas em qualquer parte do programa. Contudo,
cada vez que o programa solicita uma varivel que "se lembra" de que essa varivel do tipo que tenha
sido especificado, na sua declarao.Conforme clculos progressos no programa, os valores das variveis
podem mudar, mas o seu modelo mantm-se inalterado.
O nome de uma varivel no tem qualquer relao com o seu tipo, ou seja, voc no pode julgar acerca
do tipo de uma varivel pelo seu nome. Um nome dado a uma varivel pode tambm ser utilizada para
quaisquer tipos de variveis em diferentes programas. No entanto, o tipo de qualquer varivel pode ser
declarada apenas uma vez dentro de um programa. O tipo de variveis declaradas no ser alterado
durante a execuo do programa.
Exemplos de variveis Declarao e Inicializao
Variveis podem ser declaradas em vrias linhas ou em uma nica linha.
permitida a declarar diversas variveis de um tipo simultaneamente. Neste caso, as variveis so
listados separados por vrgulas, sendo colocado um ponto e vrgula no final da linha.

Fig. 12. Exemplo de declarao varivel em uma nica linha.


O tipo de variveis declarada uma nica vez, na primeira meno da varivel. O tipo no ser mais
indicado para o segundo e os subsequentes vezes quando a varivel mencionada.

Fig. 13. Exemplo de declarao varivel em uma nica linha.


permitida a declarar e inicializar variveis nos operadores.

Fig. 14. Exemplo de iniciao varivel.

Fig. 15. Varivel inicializao no cabealho de um composto operador.

Operaes e Expresses
A fim de compreender o que tem importncia operaes e expresses em MQL4, analogias especiais no
so necessrios.Praticamente, o mesmo que em operaes e expresses simples aritmtica. Todos
entendem que, no registro de f = n + m,membros f, n e m so variveis, sinais e + = so sinais
operacionais, enquanto n + m uma expresso.
Na seo anterior do livro, ns aprendemos sobre a necessidade de apresentar dados de diferentes
tipos. Aqui ns entremos relaes possveis entre esses dados (metros quadrados ainda no pode ser

adicionado a ma). Em MQL4, existem algumas limitaes naturais e as regras de utilizao de


operaes em expresses.
As noes de 'Operando', 'Operao', 'Operao Symbol "e" Expresso "
Operando uma constante, uma varivel, um componente ou uma matriz valor retornado por uma
funo (o termo considerado em funo de a seo de funes, a de matriz - na seo
de Arrays; neste estgio atual de aprendizagem, suficiente para compreender como operandos
constantes e variveis j estudadas antes).
A operao feita mediante uma aco operandos.
Operao smbolo um estilo de caracteres ou um grupo de caracteres que forma a executar uma
operao.
Expresso uma seqncia de smbolos operandos e funcionamento; gravar um programa, o valor
calculado de que caracterizada por um tipo de dados.
Tipos de Operaes
Existem os seguintes tipos de operaes na MQL4:

operaes aritmticas;
cesso operaes;
operaes relacionais;
Booleano (lgico) operaes;
bitwise operaes;
vrgula operao;
chamada de funo.

As operaes so utilizadas em operadores (ver Operators). S na sua utilizao operadores faz sentido
e realizado em um programa. A possibilidade de utilizar uma operao determinada pelas
propriedades dos operadores (no caso da operadora propriedades permitem que voc utilize esta
operao especfica, voc pode us-lo, caso contrrio, voc devia ' No utilizar esta operao).
proibido o uso operaes fora operadores.
As operaes aritmticas
Os seguintes smbolos pertencem a operaes aritmticas smbolos:
Smbolo

Operao

Exemplo

Analgico

Alm dos valores

x+2

--

Subtrao de valores ou de assinar mudana

x - 3, y = - y

Multiplicao de valores

3*x

Quociente da diviso

x/5

Resduo de diviso

minutos = tempo% 60

Alm de 1 para o valor da varivel

y++

y=y+1

1 a partir da subtrao do valor da varivel

y --

y=y-1

++
--

Cesso de Operaes
Os seguintes smbolos pertencem a cesso operaes smbolos:
Smbolo
=

Operao

Exemplo

Analgico

Cesso do valor para a varivel x y

x=

+=

Aumento da varivel x por y

+=x

y=y+x

-=

Reduo da varivel y por x

y -= x

y=y-x

*=

Multiplicao da varivel y por x

y *= x

y=x*y

/=

Diviso da varivel y por x

y/x=

y=y/x

%=

Resduo da diviso da varivel y por x

y = x%

y = y% x

Operaes relacionais
Os seguintes smbolos pertencem a operaes relacionais smbolos:
Smbolo

Operao

Exemplo

==

Verdade, se x igual a y

x == y

!=

Verdade, se x no igual a y

x! y =

<

Verdade, se x for menor que y

x> y

>

Verdade, mais do que se x y

x> y

<=

Verdade, se x for igual ou inferior a y

x <= y

>=

Verdade, se x for igual ou superior a y

x> y =

Booleanos (lgicos) Operaes


Os seguintes smbolos pertencem a operaes booleanas smbolos:
Smbolo
!

Operao

Exemplo

Declaraes

NO (lgico
negao)

TRUE (1), se o valor do operando FALSE (0); FALSE


(0), se o valor do operando no FALSE (0).

||

OU (disjuno
lgico)

x <5 | | x> 7 TRUE (1), se houver algum valor dos valores verdade

&&

E (conjuno
lgica)

x == 3 & & y TRUE (1), se todos os valores so verdadeiras


<5

As operaes bitwise
Bitwise operaes s podem ser realizados com inteiros. As seguintes operaes pertencem a bitwise
operaes:

One's complemento do valor da varivel. O valor da expresso contm 1 em todos os lugares, em que os
valores da varivel conter 0, e que ele contm 0 em todos os lugares, em que os valores da varivel
conter 1.
b = n ~;
A representao binria de x por y lugares deslocada para a direita. Este direito lgico turno,
significa que todos os lugares esvaziados para a esquerda ser preenchido com zeros.
x = x>> y;
A representao binria de x por y lugares deslocada para a esquerda; esvaziou os lugares para a
esquerda ser preenchido com zeros.
x = x <<y;
A operao bitwise AND do binrio representaes de x e y. O valor da expresso contm 1 (TRUE) em
todos os lugares, em que ambos contm x e y no nulo, e o valor da expresso contm 0 (FALSO), em
todos os outros lugares.
b = ((x & y)! = 0);
A operao bitwise OR do binrio representaes de x e y. O valor da expresso contm 1 em todos os
lugares, em que x ou y no contm 0. Contm 0 em todos os outros lugares.
b = x | y;
A operao bitwise OR EXCLUSIVO do binrio representaes de x e y. O valor da expresso em 1
contm os locais, no qual x e y tm diferentes valores binrios. Contm 0 em todos os outros lugares.
b = x ^ y;
Operao vrgula
Expresses separados por vrgulas so calculados da esquerda para a direita. Todos os efeitos colaterais
dos clculos na expresso da esquerda s pode ocorrer antes que a expresso direito calculado. O tipo
eo valor do resultado coincide com o tipo eo valor da expresso direita.
for (i = 0, j = 99; i <100; + + i, j -) Print (array [i] [j]); / / Loop declarao
Os parmetros transferiu lista (veja abaixo) podem ser considerados como um exemplo.
My_function (Alf, Bet, Gam, Del) / / Chamando para uma funo com argumentos
Operadores e Funes so consideradas nas sees de Operadores, Funes e no captulo
denominado Operators)
Funo Chamada
Chamada da funo descrito em todos os detalhes na seo da Funo Chamada.
Operaes semelhantes sobre operandos
Se uma escola elementar aluno foi-nos dito que, quando a resoluo do problema sobre o nmero de
lpis, ele ou ela teria que basear a sua apresentao em termos tais como operandos, operadores e
expresses, o aluno pobre, certamente impossvel encontr-lo. Olhando para os smbolos das operaes,
podem pensar que uma codificao um processo muito complicado e misteriosa, acessvel apenas para

para uma espcie de elite. No entanto, codificao no realmente difcil em tudo, voc s precisa fazer
cabea ou da cauda alguns intensions. Para ter a certeza que isto realmente assim, vamos considerar
alguns exemplos.

Problema 1. John tem 2 lpis, lpis Pete tem 3. Quantos lpis fazer estes meninos
tm?:)
Soluo. Vamos denotar o nmero de John's lpis e uma varivel como o nmero de Pete's lpis como
varivel B, enquanto que o resultado ser denominado C.
A resposta ser: = +
Na seo denominada Tipos de dados, foram considerados os mtodos de declarao varivel. Lpis
esto as coisas, ou seja, algo que pode existir basicamente como uma parte (por exemplo, pode haver
uma metade de um lpis). Assim, iremos considerar como lpis variveis reais, ou seja, as variveis
de dupla natureza.
Assim, podemos cdigo a soluo, por exemplo, da seguinte forma:
Um duplo = 2,0; / / O nmero de lpis John's
duplo B = 3,0; / / O nmero de Pete's lpis
dupla C = A + B; / / Nmero
Neste caso, operao "+" aplicada a adio dos valores das variveis um tipo bastante ilustrativo.
Digite o valor da expresso:
A + B
Ser o tipo das variveis que so componentes da expresso. No nosso caso, este ser o dobro tipo.
Iremos buscar a resposta semelhante para a diferena entre os valores (Quantos lpis faz mais do que
Pete tem Joo?):
Um duplo = 2,0; / / O nmero de lpis John's
duplo B = 3,0; / / O nmero de Pete's lpis
dupla C = B - A; / / A diferena entre dois nmeros reais
Outras operaes aritmticas so usados de forma semelhante:
duplos um * C = B; / / Multiplicao de dois nmeros reais
dupla C = B / A; / / Diviso de dois nmeros reais
Clculos similares podem ser realizadas com nmeros inteiros, tambm.

Problema 2. Os alunos vo para a lousa e resposta em classe. John fui 2 vezes, Pete
passou 3 vezes.Quantas vezes os meninos vo para o quadro negro, no total?
Soluo. Vamos denotar John's passagens como varivel X, Pete's passagens como varivel Y, o
resultado - como Z.
Neste exemplo, ns temos que usar as variveis do tipo int, uma vez que consideramos que so eventos
inteiro pela sua natureza (no pode ir para a lousa 0,5 vezes ou 1,5 vezes; a resposta na lousa pode ser
bom ou ruim, mas ns s apenas interessado em que o nmero destas respostas ou passagens).

A soluo deste problema pode ser escrita como:


int X = 2; / / Nmero de passagens John's
int Y = 3; / / Nmero de passagens Pete's
int Z = X + Y; / / Nmero
No caso do clculo da diferena entre, de produto ou quociente de inteiros, a operao "-" semelhante
ao utilizado na forma simples:
int
int
int
int
int

X
Y
Z
Y
Z

=
=
=
=
=

2; / /
3; / /
Y - X;
Z * X;
Y / X;

Integer
Integer
/ / Diferena entre os dois inteiros
/ / Produto de dois inteiros
/ / quociente de dois inteiros

A situao um pouco diferente com as variveis do tipo string:


Problema 3. Em um canto da casa, h um supermercado chamado "Arctic". Num outro
canto da mesma casa, h um estabelecimento chamado "Cabeleireiros Saloon". O que
est escrito sobre a casa?
Soluo. Em MQL4, voc est autorizado a acrescentar em conjunto os valores da seqncia constantes
e variveis. Se acrescentarmos juntos variveis do tipo string, strings so adicionadas simplesmente um
por um, na seqncia eles so mencionados na expresso.
fcil de cdigo de um programa que seria necessrio dar-nos a resposta:
W1 = string "Arctic"; / / Seqncia 1
W2 = string "Cabeleireiros Saloon"; / / seqncia 2
string Ans = W1 + W2; / / Soma de cordas
O valor da varivel Ans ser a seqncia que aparece da seguinte forma:
ArcticHairdressing Saloon
Ns obtivemos uma no-muito-para-olhar-no, mas absolutamente correcta formada valor do
tipo string. Evidentemente, devemos considerar as lacunas e outras pontuaes em nossas prticas de
codificao desses problemas.
Quaisquer outras operaes aritmticas com variveis do tipo string so proibidos:
string Ans = W1 - W2; / / No permitido
string Ans = W1 * W2; / / No permitido
string Ans = W1 / W2; / / No permitido

Typecasting
Typecasting est modificando (mapeamento) dos tipos dos valores de um operando
ou uma expresso. Antes da execuo das operaes (todas as operaes, mas cesso), so alteradas
para um tipo da mais alta prioridade, que antes da realizao da cesso operaes forem modificados
para o tipo de alvo.
Vamos considerar alguns problemas que lidam com typecasting.

Problema 4. John tem 2 lpis, enquanto Pete passou 3 vezes para o quadro
negro. Quantos no total?
No que diz respeito lgica formal est em causa, os maus-posedness do problema bvia. bvio que
eventos no podem ser adicionados, juntamente com as coisas, ele est errado.
Problema 5. Em um canto da casa, h um supermercado chamado "Arctic", enquanto
que John tem 2 lpis.:)
Com o mesmo grau de desespero (na medida do normal raciocnio est em causa), podemos perguntar
o seguinte:
1. Quantos no total?, Ou
2. O que est escrito na casa?
Se voc quiser resolver os dois problemas acima corretamente no MQL4, voc deve referir-se
typecasting regras. Primeiro, temos que conversar sobre a forma como diferentes tipos de variveis
esto representados na memria do computador.
Tipos de dados, tais como int, bool, cor, datetime e duplas, pertencem ao tipo de dados numricos. A
representao interna de constantes e variveis de int, duplos, bool, cor e tipo datetime um nmero.
As variveis de int, bool, cores e tipos datetimeesto representados na memria do computador como
nmeros inteiros, enquanto que as variveis de dupla natureza so representados como nmeros de
preciso dupla com um ponto flutuante, ou seja, nmeros reais. O valor de constantes e variveis do
tipo string um conjunto de caracteres (Fig. 16).
Os valores de int, bool, cores e tipos datetime esto representados na memria do
computador como nmeros inteiros. Os valores do tipo dupla esto representados na
memria do computador como nmeros reais. Os valores do tipo string so
representados na memria do computador como uma seqncia de caracteres. Os
valores de int, bool, cor, datetime e tipos so o dobro dos valoresnumricos tipo. Os
valores do tipo string so os valores do tipo de caracteres.

Fig. 16. Representao de diferentes tipos de dados na memria do computador.

Ns mencionado acima, que os valores das variveis de int, bool, cores e tipos datetime esto
representados na memria do computador como nmeros inteiros, enquanto os da dupla tipo - como
nmeros reais. Portanto, se queremos conhecer o modelo de uma expresso que consiste de variveis
de diferentes tipos, s podemos escolher entre trs tipos de dados: int, duplos ebarbante. Os valores
de bool, cores e tipos datetime ir revelar-se em uma expresso da mesma forma que os valores do
tipoint.
Ento, que tipo ser o valor de uma expresso composta por operandos de diferentes tipos? Em MQL4,
o Estado de typecasting implcita aceite:

se a expresso contm operandos de diferentes tipos, o tipo de manifestao


ser transformado no tipo que tenham a mais alta prioridade; o tipo int, bool,
cor e tm igual datetime prioridades, enquanto que a dupla tipo tem uma
prioridade maior, e tem o tipo string a mais alta prioridade;
se o tipo de expresso, direita da operao de cesso sinal no coincide com
o tipo da varivel esquerda da operao de cesso sinal, o valor dessa
expresso vazado como o tipo da varivel esquerda do cesso operao
sinal; isso chamado de "meta-modelo vazado ';
proibido lanar os valores do tipo string para qualquer outro tipo de alvo.

Bem, vamos voltar ao Problema 4. Pode haver duas solues para ela.
Soluo 4.1. Clculo do resultado do tipo int:
Um duplo = 2,0; / / O nmero de lpis John's
int Y = 3; / / O nmero de passagens Pete's
int F = A + Y; / / Nmero
Primeiro de tudo, precisamos de saber o valor da expresso desde seus operandos so de tipos
diferentes. Na expresso:
A + Y,
operandos de dois tipos de dados so utilizadas: - dupla tipo, Y - tipo int.
Em conformidade com a regra implcita de typecasting, o valor desta expresso ser um nmero
de dupla natureza. Obs: Estamos a falar s sobre o tipo de expresso A + Y, mas no sobre o tipo de
varivel F que para a esquerda da operao de cesso assinar. O valor dessa expresso verdadeiro
nmero 5,0. Para lanar o tipo de expresso A + Y, aplicada a primeira parte da regra implcita
typecasting.
Aps o clculo da expresso A + Y, a cesso operao executada. Neste caso, os tipos desencontro,
tambm: o tipo de expresso A + Y duplo, enquanto que o tipo de varivel F int. Durante a execuo
da operao de cesso: Primeiro, o tipo de expresso A + Y casted como int (de acordo com a regra
de clculo inteira) e 5 torna-se inteiro, em seguida, esse resultado torna-se o valor da varivel inteira F.
Os clculos foram realizado de acordo com a segunda parte da regra implcita typecasting - 'metamodelo vazado'. O resultado final dos clculos e manipulaes a seguinte: O valor da varivel inteira F
inteiro 5.
Soluo 4.2. Situao semelhante ocorre, se tentarmos ter um resultado como um valor
de dupla natureza:
Um duplo = 2,0; / / O nmero de lpis John's
int Y = 3; / / O nmero de passagens Pete's
dupla F = A + Y; / / Nmero

Esta situao difere do anterior por uma meta que o tipo de varivel F ( esquerda da operao de
cesso sinal), no nosso caso, dupla tipo, coincide com o tipo (duplo) da expresso A + Y, de modo no
temos nenhum tipo de meta-expressos aqui. O resultado dos clculos (o valor da varivel tipo duplo-F)
real nmero 5,0.
Vamos agora encontrar uma soluo para o Problema 5. Sem perguntas que podero surgir na
inicializao de variveis:
W1 = string "Arctic"; / / Seqncia 1
Um duplo = 2; / / O nmero de lpis John's
Soluo 5.1. Uma possvel soluo para este problema:
W1 = string "Arctic"; / / Seqncia 1
Um duplo = 2; / / Nmero de John's lpis
Soma = string W1 + A; / / Implcitas transformao para a direita
Aqui, na parte direita, acrescentamos juntos os valores de duas variveis: o nico tipo de corda, eo
outro um - de dupla escreva.De acordo com a regra implcita de typecasting, o valor da varivel A
primeira vai ser fundido com o tipo corda (uma vez que este tipo de uma prioridade mais elevada), e
em seguida a um tipo de valores sero somados (concatenao). O tipo de o valor resultante para a
direita da operao de cesso sinal ser seqncia. Na fase seguinte, este valor ser atribudo
varivelstring Soma. Como resultado, o valor da varivel Soma ser o seguinte texto:
Arctic2.00000000
Soluo 5,2. Esta soluo errada:
W1 = string "Arctic"; / / Seqncia 1
Um duplo = 2; / / Nmero de John's lpis
Soma = dupla W1 + A; / / Isto inadmissvel
Neste caso, vamos quebrar uma proibio de meta-tipo para o elenco de valores tipo string. O tipo do
valor de expresso W1 + A, como na soluo anterior, seqncia. Quando a cesso operao
executada, a meta-tipo elenco deve ser realizada.Contudo, de acordo com a regra, a seqncia-alvo tipo
expressos para os tipos de menor prioridade proibida. Este um erro que ser detectado pelo
MetaEditor a criao do programa (em elaborao).
Geralmente, as regras contidas nesta seco so claros e simples: Se voc calcular quaisquer valores,
preciso lanar todos os tipos diferentes de um tipo de prioridade mxima. Typecasting com rebaixada
prioridade permitida apenas para valores numricos, que strings no podem ser transformados em
nmeros.
Caractersticas dos clculos Integer
Inteiros so conhecidos como os nmeros sem uma parte fracionria. Se voc adicionar ou subtrair-lheslos juntos, voc ir obter um resultado intuitivo. Por exemplo, se:
int X = 2; / / Primeira varivel int
int Y = 3; / / segunda varivel int
e:
int Z = X + Y; / / Adio operao,
no h qualquer problema para calcular o valor da varivel Z: 2 + 3 = 5
Da mesma forma, se voc executar uma operao multiplicao:

int Z = X * Y; / / Multiplicao operao,


o resultado altamente previsvel: 2 * 3 = 6
Mas o que resulta que vamos, se o nosso programa tem de executar uma operao diviso?
int Z = X / Y; / / Diviso operao
fcil de escrever 2 / 3. No entanto, no um nmero inteiro. Ento, qual ser o valor da expresso X /
Y e Z varivel?

A regra de clculo inteiro consiste em que a parte fracionria semper descartado.


No exemplo acima, a expresso do direito igualdade sinal contm apenas nmeros inteiros, ou seja,
no typecasting tem lugar, no presente caso. E isto significa que o tipo de expresso X / Y
int. Portanto, o resultado de encontrar o valor inteiro da expresso X / Y (= 2 / 3) 0 (zero). Este
valor (zero) ser atribudo a varivel Z no final.
Paralelamente, outros valores das variveis X e Y iro produzir outros resultados. Por exemplo, se:
int X = 7; / / O valor de uma varivel int
int Y = 3; / / O valor de uma varivel int
int Z = X / Y; / / Diviso operao,
ento o valor de 7 / 3 para a expresso X / Y e Z varivel igual a 2 (dois).
Ordem das Operaes
A regra consiste em calcular o seguinte:
O valor de uma expresso calculada de acordo com as prioridades das operaes
aritmticas e da esquerda para a direita, cada resultado intermedirio sendo calculado
de acordo com as regras typecasting.
Vamos considerar o clculo para que uma expresso no seguinte exemplo:
Y = 2,0 * (3 * X / Z - N) + D; / / exemplar expresso
A expresso direita do sinal da igualdade consiste em duas summands: 2,0 * (3 * X / Z - N) e D. O
summand 2,0 * (3 * X / Z - N) constituda por dois factores, a saber: 2 e (3 * X / Z - N). A expresso
entre parnteses, 3 * X / Z - N, por sua vez, consiste de dois summands, o summand 3 * X / Z
constitudo por trs elementos, a saber: 3, X e Z.
A fim de calcular a expresso do direito igualdade de assinar, vamos, em primeiro lugar, calcular o
valor da expresso 3 * X / Z. Esta expresso contm duas operaes (multiplicao e diviso) do mesmo
nvel, por isso vamos calcular esta expresso da esquerda para a direita. Primeiro, vamos calcular o valor
da expresso 3 * X, a este tipo de expresso a ser o mesmo que o tipo da varivel X. Ento, vamos
calcular o valor da expresso 3 * X / Z, o seu tipo a ser calculado de acordo com a typecasting
regra. Depois disso, o programa ir calcular o valor eo tipo da expresso 3 * X / Z - N, ento - da
expresso 2,0 * (3 * X / Z - N), sendo a ltima - de toda a expresso 2,0 * (3 * X / Z - N) + D.
Como fcil de ver, o fim das operaes em um programa semelhante ao que ocorreu em
matemtica. No entanto, a antiga em um calculam difere dos tipos de valores nos resultados

intermdios, que exerce uma influncia significativa sobre o resultado final dos clculos. Particularmente
(ao contrrio das regras aceites pela matemtica), a fim de operandos em uma expresso muito
importante. Para demonstrar isto, vamos considerar um pequeno exemplo.
Problema 6.Calculate os valores de expresses / * e * / para inteiros , ,
e .
O resultado do clculo intuitivamente que se espera que seja o mesmo, em ambos os casos. No
entanto, esta afirmao verdadeira apenas para nmeros reais. Se formos calcular os valores de
expresses compostas de operandos do tipo int,devemos considerar a semper resultados
intermdios. Nesse caso, a seqncia dos operandos de fundamental importncia:
int
int
int
int
int

A = 3; / / Valor do tipo
B = 5; / / Valor do tipo
C = 6; / / Valor do tipo
= A Res_1
/ B * C; / /
Res_2 = A * C /
B; / /

int
int
int
Result 0 (zero)
Resultado 3 (trs)

Vamos seguir o processo de clculo da expresso A / B * C:


1. Abertura (da esquerda para a direita), o valor da expresso A / B ser calculado. De acordo com as
regras acima, o valor da expresso (3 / 5) inteiro 0 (zero).
2. Clculo da expresso * 0 (zero multiplicado por ). O resultado inteiro 0 (zero).
3. Geral resultado (o valor da varivel Res_1) inteiro 0 (zero).
Agora vamos seguir os desenvolvimentos do clculo da expresso A * C / B.
1. Clculo de A * C. O valor dessa expresso integer 18 (3 * 6 = 18).
2. Clculo da expresso 18 / B. A resposta bvia: a parte fracionria aps ter sido descartada, (18 / 5)
inteiro 3 (trs).
3. Geral resultado (o valor da varivel Res_2) inteiro 3 (trs).
No exemplo acima, ns consideramos apenas um pequeno fragmento cdigo, em que os valores das
variveis do tipo int so calculados. Se vamos substituir essas variveis constantes com os mesmos
valores, o resultado final ser o mesmo. Ao calcular expresses que contenham nmeros inteiros, voc
deve dar uma maior ateno ao contedo do seu programa linhas. Caso contrrio, poder ocorrer um
erro no cdigo, o que seria muito difcil de encontrar e corrigir mais tarde (principalmente nos grandes
programas). Tais problemas no ocorrem em clculos usando nmeros reais. Entretanto, se voc utilizar
operandos com diferentes tipos em uma expresso complexa, o resultado final maio dependem de uma
aleatriamente plenamente fragmentar formado contendo diviso de inteiros.
Na seo de Operadores, o prazo e propriedades gerais dos operadores so consideradas, enquanto
que as propriedades especficas de cada operadora so descritos no captulo chamado Operadores.

Operadores
O prazo de operador
Um dos conceitos-chave de qualquer linguagem de programao a expresso de
"operador". Codificao parece ser impossvel para a pessoa que no tenha aprendido completamente

esse prazo. Quanto mais cedo e mais propriamente um programador aprende aquilo que os operadores
so e como eles so aplicados em um programa, o programador comea mais cedo este escrever seus
prprios programas.
Operador uma parte de um programa, uma frase de uma linguagem algortmica, que prescreve um
determinado mtodo de converso de dados.
Qualquer programa contm operadores. A analogia mais prxima ao "operador" uma frase. Assim
como normal frases compor o texto de uma histria ou de uma novela, por isso os operadores compor
um programa.

Propriedades de Operadores
Existem dois tipos de propriedades de operadores - uma propriedade comum e propriedades especficas
dos diferentes operadores.
Propriedade comum dos operadores
Todos os operadores tm uma propriedade comum - todos eles so executados.
Podemos dizer que o operador uma instruo que contm o manual de operaes (a descrio de uma
ordem). Para um computador, executando um programa em execuo no que significa (consecutiva
passagem de um operador para outro) cumprindo as ordens (receitas, instrues) contidas nos
operadores.
Operador, como tal, apenas um registro, uma determinada seqncia de caracteres. Operador no tem
qualquer alavancas, fios ou clulas de memria. Esta a razo pela qual, quando um computador est
executando um programa e nada acontece nas operadoras, como tal, eles continuaro a ficar no
programa como composto pelo programador. No entanto, o computador que tem todas essas clulas de
memria e de experincias entre elas todas as transformaes no interior. Se o seu PC tem executado
algumas transformaes de dados de acordo com as instrues contidas em uma operadora, voc diria:
o operador tenha sido executada.
Propriedades especficas dos operadores
Existem vrios tipos de operadores. Operadores de cada tipo tm as suas propriedades especficas. Por
exemplo, a propriedade de um operador atribuio a sua capacidade de atribuir um certo valor
varivel concedido; lacete a propriedade de um operador est suas mltiplas execues, etc
propriedades especficas das empresas so consideradas em todos os detalhes nas correspondentes
seces do captulo Operadores neste livro. Vamos apenas dizer aqui que todos os tipos de operadores
tm as suas prprias propriedades que so tpicas apenas para seu tipo e no so repetidas em qualquer
outro tipo.

Tipos de Operadores
Existem dois tipos de operadores: os operadores simples e compostos.
Simples Operadores
No MQL4 operadores simples terminar com o caracter ";" (ponto e vrgula). Usando este separador, o PC
pode detectar um operador onde termina um e comea outro. Caractere ";" (ponto e vrgula) to

necessria em um programa como caractere "."(ponto final), necessrio em um texto normal para
separar frases. Um operador pode ter vrias linhas. Vrios operadores podem ser colocados em uma
linha.

Cada operador simples acaba com carcter ";" (ponto e vrgula).


Exemplos simples de operadores:
Day_Next = TimeDayOfWeek (Mas_Big [n] [0] + 60); / / operador Simples
Go_My_Function_ind (); / / operador Simples
a = 3; b = a * x + n; i + +; / / Vrios operadores em uma linha
Print ( "Dia =", TimeDay (Mas_Big [s] [0]), / / Um operador ..
"Hora =", TimeHour (Mas_Big [s] [0]), / / est localizada ..
"Minuto =", TimeMinute (Mas_Big [s] [0]), / / em vrios ..
"Mas_Big [s] [0] =", Mas_Big [s] [0], / / linhas
"Mas_Big [s] [1] =", Mas_Big [s] [1]);
Operadores compostos (Compostos)
Um operador consiste em diversos compostos mais simples separados pelo caractere ";" e est includo
no aparelho. A fim de ser capaz de utilizar vrios operadores, onde apenas um se espera que seja
localizada, programadores utilizam um operador compostos (tambm eles chamam-lhe "bloqueio" ou
"bloco de cdigo"). A lista de operadores em um composto separado por chavetas . A presena de
uma marca o final Esquadro fechamento de um composto operador.
Um exemplar da utilizao de um composto de um operador condicional. Comea com
o operador condicional if (expresso) seguido de um composto. Compostos O
operador contm uma lista de operadores executvel.

Fig. 17. Composto operador.


O corpo de um composto operador est incluida no aparelho. Todos os compostos
operador termina com um fecho parntese.
Exemplos de compostos operadores:

/ / Exemplo de operador mudar


switch (ii) / / Operador switch (expresso)
(/ / Abertura Esquadro
case 1: Buf_1 [Pok - f + i] = Prognoz; break; / / Nested operadores
(operador corpo)
case 2: Buf_2 [Pok - f + i] = Prognoz; break; / / Nested operadores
(operador corpo)
case 3: Buf_3 [Pok - f + i] = Prognoz; break; / / Nested operadores
(operador corpo)
) / / Fechando parntese, ..
/ / .. mostra onde o operador termina compostos
//------------------------------------------------ ---------------------------------------/ / Exemplar uso de loop
for (tt = 1; tt <= Kol_Point [7]; tt + +) / / Operator (expresses)
(/ / Abertura Esquadro
Numb Numb = + Y_raz [tt] * X_raz [ii] [tt]; / / Nested operador (operador
corpo)
) / / Fechando parntese ..
/ / .. mostra onde o operador termina compostos
//------------------------------------------------ ---------------------------------------/ / Exemplo do operador condicional se
if (TimeDay (Mas_Big [f] [0])! = 6
) / / If (expresso)
(/ / Abertura Esquadro
Sred = (Nabor_Koef [ii] [vv] [2] + NBh) * Point; / / Nested operadores
(operador corpo)
Ind = Nabor_Koef [ii] [vv] [0] + f; / / Nested operadores (operador corpo)
Print ( "Ind =", Ind); / / Nested operadores (operador corpo)
) / / Fechando parntese ..
/ / .. Mostra onde termina o composto operador

O corpo de um composto semper vedado em suportes e pode consistir em zero, um


ou vrios operadores.
Exemplos simples de operadores:
//------------------------------------------------ --------------------------------/ / Exemplo do operador para
for (n = 1; n <= Numb; n + +) / / for (expresses)
Mas [n] = Const_1 + n * Pi; / / Nested operador (operador corpo)
//------------------------------------------------ --------------------------------/ / Exemplo do operador condicional se
if (Tabela> Chair) / / if (expresso)
Norma = true; / / primeiro operador (suboperator 1)
else / / Else-condio
Norma = false; / / segundo operador (suboperator 2)
//------------------------------------------------ ---------------------------------

Vrios operadores simples podem ser combinadas em um composto operador, sem


quaisquer estritos necessidade.

Esta uma situao rara, mas absolutamente admissvel construo. Neste caso, os operadores esto
fechados no aparelho chamado de "um bloco de operadores". Esta utilizao totalmente aceitvel. Este
o programador que decide se juntar aos operadores de correias ou no, apenas por uma questo de
convenincia cdigo representao. Um exemplar bloco de operadores:
(/ / Abertura Esquadro
Day_Next = TimeDayOfWeek (Mas_Big [n] [0] + 60); / / operador Simples
b = a * x + n; / / operador Simples
) / / Fechando parntese ..
Requisitos para Operadores
Operadores deve ser escrito no texto de um programa de acordo com o formato regras (como eles
devem ser representados em um cdigo). Nenhum operador pode ser composto para alm dessas
regras. Se o programa contm um operador composto contra o formato regras, MetaEditor ir produzir
uma mensagem de erro na compilao. Isto significa que o programa contendo o operador no pode ser
mal utilizado.
Voc deve entender a frase "operador formato" como um conjunto de regras formato tpico de um
determinado tipo de operador. Cada tipo de operador tem o seu prprio formato. Operador de formatos
so consideradas em todos os detalhes em pontos correspondentes do captulo Operadoras deste livro.

Ordem dos operadores execuo


Uma caracterstica muito importante de qualquer programa da ordem de execuo operadores
nele. Os operadores no pode ser executado por qualquer razo ou por exceo. Em MQL4, com a
seguinte ordem de execuo seja aceite os operadores:
Os operadores so executados na ordem em que eles ocorrem no programa. A
direco de operadores execuo aceite como da esquerda para a direita e para
baixo.
Isto significa que, simultaneamente simples e compostos operadores so executados apenas um por um
(como as linhas nos poemas: em primeiro lugar, podemos ler a primeira linha, ento a prxima mais
baixa, ento a prxima, e assim por diante). Se existem vrios operadores em uma linha, devem ser
executados consecutivamente, um por um, da esquerda para a direita, em seguida, os operadores so
executados na linha inferior mais prximo na mesma ordem.
Operadores de compor um operador compostos so executados da mesma forma: qualquer operadora
do bloco de cdigo comea a ser executado apenas depois de o anterior ter sido executado.
Escrever e Execuo de Operadores: Exemplos
O texto de um programa contendo os operadores no dissimilar no aspecto normal de um texto ou
uma notao matemtica.No entanto, essa semelhana apenas formal. Normal Um observa o texto
permite a ser colocados em qualquer ordem, considerando que necessrio manter um fim bem
definidos em um programa.
Como exemplo, vejamos como funciona uma misso operador. Iremos resolver uma equao linear
simples e comparar o sistema de representao de alguns clculos matemticos em um texto normal e
um programa em cdigo, nos operadores.

Problema 7. Temos um sistema de equao:


Y=5
Y-X=2
O valor numrico da varivel X est a ser encontrado.
Soluo 1. Um texto normal numa folha de papel:
1. 5 - = 2
2. = 5 - 2
3. = 3
Soluo 2. Um texto em um programa:
Y = 5; / / Linha 1
Y = X - 2; / / Linha 2
Tanto no primeiro como no segundo solues, as notas (linhas) ter completado um contedo. No
entanto, as linhas na Soluo 1 no pode ser usado em um programa como esto, porque o seu aspecto
no est em conformidade com a cesso operador formato.
As notas dadas na Soluo 1 representam cerca dependncias em formato papel. Eles s podem ser
utilizados para informar os programadores sobre as relaes entre as variveis. Operadores em um
programa so atribudos a outros fins - a mquina elas informar que operaes e em que ordem ele
deve executar. Todos os operadores, sem quaisquer excepes precisas instrues que representam
ambiguidades no permitem.
Soluo 2 em ambos os operadores esto a cesso operadores. Qualquer cesso operador da mquina
d a seguinte ordem, literalmente:
Calcule o valor da expresso direita do sinal da igualdade e atribua o valor obtido
para a varivel esquerda do sinal da igualdade.
Por esta razo, nada mais, mas pode ser varivel, localizado esquerda da igualdade em assinar uma
cesso operador. Por exemplo, um registro de 5 - 2 = utilizada na primeira soluo contm um erro,
porque o conjunto de caracteres 5 - no uma varivel. Esta a razo pela qual no existe qualquer
clula de memria para colocar o valor numrico da expresso calculada para o lado direito do sinal da
igualdade.
Vamos seguir o computador durante a execuo dos operadores da segunda soluo.
1. Passando sobre o operador (linha 1).
Y = 5; / / Linha 1
2. Referenciar para o lado direito do operador (a parte direita est localizado entre a igualdade ea
assinar o ponto e vrgula).
3. O computador detectou que o lado direito do operador contm um valor numrico.
4. A gravao do valor numrico (5) na clula de memria varivel Y.
5. Passando sobre o prximo operador (linha 2).

Y = X - 2; / / Linha 2
6. Referenciar para o lado direito do operador.
7. O computador detectou que o lado direito do operador contm uma expresso.
8. O clculo do valor numrico do lado direito do operador (5 - 2).
9. A gravao do valor numrico (3) na memria do celular varivel.
Executam os passos 1-4 at que o computador for execuo da primeira operadora (linha 1). Executar
as etapas 5-9 at que o computador for execuo do segundo operador (linha 2).
No fim de um cdigo funcional programa, o programador deve perceber bem o qu e em que ordem
sero executadas neste programa. Particularmente, nem todos os clculos matemticos iro ser
colocadas em um programa, s vezes necessrio preparar a pr-operadores.
Por exemplo, muitos clculos intermdios so efectuados quando resolvendo problemas
matemticos. Eles podem ajudar um matemtico para encontrar uma boa soluo, mas revelar-se inteis
do ponto de vista da programao. Apenas significativo solues podem ser includos em um programa,
como por exemplo: valores originais das variveis ou frmulas para calcular os valores das demais
variveis. No exemplo anterior, o primeiro operador suporta informaes sobre o valor numrico da
varivel Y, e com o segundo operador fornece a frmula para calcular o valor da varivel X estamos
interessados polegadas
Qualquer programa operacional contm expresses de um familiar vista, mas voc tambm pode
encontrar tais expresses que voc ser capaz de entender apenas se voc classificaria-los como
possveis operadores em seu programa. Por exemplo, o registro abaixo
X = X + 1; / / Exemplo de um contador
parece estar errado do ponto de vista da lgica matemtica eo bom senso. No entanto, perfeitamente
aceitvel se voc considerar isso como um operador (por sinal, que este operador amplamente
utilizado na codificao).
Neste operador, calculamos um novo valor da varivel X: quando executa a tarefa operador (ou seja, o
clculo do valor da parte direita do operador), o computador refere-se a clula de memria contendo o
valor numrico da varivel X (por exemplo , Ele acaba por ser igual a 3, no momento de se referir a ela),
calcula a expresso, na parte direita da cesso operador (3 + 1), e escreve o valor obtido (4) na
memria do celular previstas varivel X. Execuo de atribuio deste operador nos resultados que a
varivel X recebe o novo valor (4). A mquina ir armazenar esse valor da varivel X at que a varivel X
ocorre na parte esquerda da igualdade assinar em outro operador atribuio. Neste caso, o novo valor
dessa varivel ser calculado e armazenado at a prxima possvel mudana.

unes
O prazo de funo
O mais importante avano tecnolgico em engenharia de computador a possibilidade de criao e
armazenamento de cdigo separado fragmentos que descrevem as regras de processamento de dados
para resolver um problema ou uma pequena tarefa.Tal possibilidade existe em MQL4, tambm.

Funo um chamado, uma parte especfica do programa que descreve o mtodo de converso de
dados.
Falando em funes, iremos considerar dois aspectos: descrio e funo chamada de funo.
Descrio uma funo especfica denominada parte de um programa destinado execuo.
Funo chamada (funo referncia) um recorde, o que resulta na execuo de execuo de uma
funo.
No nosso quotidiano, podemos encontrar muitos anlogos da funo. Vejamos, por exemplo, o sistema
de travagem de um carro. O mecanismo de accionamento que executa corretamente travagem, bem
como a ideia implementada pelo engenheiro, anlogo ao de uma funo, enquanto o pedal de freio o
anlogo da funo chamada. O motorista pressiona o pedal para baixo, e os mecanismos de atuao e
realizar algumas aes - parar o carro.
Da mesma forma, se uma chamada de funo ocorre em um programa, em seguida, a funo de mesmo
nome ser chamado e executado, ou seja, uma determinada seqncia de clculos ou outras aces
sero executadas (por exemplo, exibindo uma mensagem ou abrir uma encomenda, etc .). O sentimento
geral de uma funo em um logicamente tendo concludo a parte do cdigo fora do texto bsico do
programa, enquanto que somente a chamada para esta parte do cdigo permanece no interior do texto
bsico do programa. Essa construo programa tem algumas vantagens inegveis:

primeiro, o programa texto composto de tal maneira muito mais fcil ler;
em segundo lugar, pode-se ver facilmente, e, se necessrio, modificar o texto de uma funo sem
fazer nenhuma alterao no cdigo base do programa;
terceiro, uma funo pode ser composto por um nico arquivo e us-lo em outros programas, que
iro liberar o programador da necessidade de inserir o mesmo fragmentos do cdigo em cada
recm-criado programa.

Podemos dizer que a maior parte dos programas em cdigo composto utilizando MQL4 est escrito na
forma de funes. Essa abordagem se espalhou e agora um padro.

Composio de uma Funo


Assim, uma funo pode ser descrita e ligou. Vamos considerar um exemplo. Suponhamos que temos
um pequeno programa (Fig. 18) que considera o comprimento da hipotenusa usando dois outros lados
do tringulo direito Pitagrica e Teorema.
Neste programa, todos os clculos esto localizadas em conjunto, os operadores so
executados um por um, na ordem em que eles ocorrem no programa (de cima para
baixo).

Fig. 18. O cdigo de programa nico pifagor.mq4.

Problema 8. Compor uma parte do cdigo como um dado programa funcione.


Seria razovel que se faa uma funo utilizando as duas linhas que encontrar o valor pesquisa. O
mesmo programa usando uma funo mostrado na fig. 19.
Neste programa, uma parte dos clculos composta como uma funo. A base
contm um cdigo de utilizador definido funo chamada. A descrio da funo
definida pelo utilizador-se localiza fora (depois) o cdigo bsico.

Fig. 19. O cdigo de um programa que contm a descrio da chamada e da funo definida
pelo usurio-gipo.mq4.
Ambas as verses do programa vai dar o mesmo resultado. Contudo, o cdigo composto por um nico
mdulo na primeira verso (Fig. 18), enquanto que na segunda verso (Fig. 19) uma parte dos clculos
executado em uma funo chamado a partir do texto base. Aps a concluso dos clculos separados
para a funo, os clculos no cdigo principal ser continuado.
Para ter a funo executada, temos que cham-la (se referem a ele). Esta a razo pela qual a funo
praticamente representadas em duas partes: o prprio cdigo de compor a funo (funo descritiva) e
chamada de funo usada para lanar a funo (referindo-se funo). Se voc no chamar a funo,
ele no ser executada. Ao mesmo tempo, se voc chamar uma funo inexistente, isso vai resultar em
nada (MetaEditior dar uma mensagem de erro se voc tentar compilar esse programa em MQL4).
Funo Descrio
A descrio de uma funo bsica constituda por duas partes - funo cabealho eo corpo funo.
O cabealho consiste de uma funo do tipo de valor de retorno, nome e funo da lista de parmetros
formais. A lista de parmetros formais so fechados e colocados entre parnteses aps o nome da
funo. O tipo do valor de retorno pode ser um dos tipos que j sabemos: int, duplos, bool, cor,
datetime, ou string. Se a funo no retorna nenhum valor, o seu tipo pode ser denotado como nulos (
"sem contedo, vazia") ou a qualquer outro tipo.
O corpo de uma funo est incluida no aparelho. O corpo pode conter funo simples e / ou
compostos operadores, bem como chamadas para outras funes. O valor devolvido pela funo dado
no retorno de operador parentesis (). O tipo do valor devolvido utilizando operador retorno (), deve
corresponder com o tipo de funo especificado no cabealho da funo. A descrio da funo
terminada com um fecho parntese.

Fig. 20. Funo descrio.


Descrio da funo deve estar localizado em separado no programa, fora de
quaisquer outras funes (ou seja, no dentro de uma funo, mas fora dele).
Funo Chamada
Funo chamada representa o nome da funo e transferido a lista de parmetros. A lista de
parmetros transferido dentro de parnteses. A chamada da funo pode ser representado como um
operador separado ou como parte de um operador.

Fig. 21. Funo chamada (referncia a uma funo).


Qualquer funo chamada encontra-se dentro de outra funo especificado (ou seja,
no fora todas as outras funes, mas dentro de um deles).
Tipos de funo
Existem trs tipos de funes - funes especiais, norma (built-in e pr-definido) funes, e funes
definidas pelo utilizador.
Funes Especiais
Em MQL4, existem 3 funes especiais no total. Eles tm nomes predefinidos: init (), start (), e deinit
() que no podem ser utilizados nos nomes de quaisquer outras funes. O exame detalhado das
funes especiais dado no captulo Funes Especiais. Estamos aqui apenas dizer que o cdigo bsico
de um programa est localizado no interior destas funes (Fig. 18, 19).
O recurso especial de funes especiais o fato de que eles so chamados para execuo pelo cliente
terminal. Embora todas as funes especiais tm propriedades de funes em geral, elas no so
habitualmente chamados a partir do programa caso este programa o cdigo corretamente.
Funes Standard

MQL4 tem uma srie de funes teis que no precisam ser descritas quando codifica um programa. Por
exemplo, computao razes quadradas, imprimir mensagens no sistema de revista ou na tela - todas
estas e muitas outras funes habituais so executadas de acordo com o algoritmo predefinido. O
usurio no precisa de aprender o contedo de tais funes. Ele ou ela pode apenas ter a certeza de
que todas as funes habituais so desenvolvidas por profissionais devidamente e de acordo com a
melhor qualidade possvel algoritmo.
O recurso especial do padro funes so as que no so descritos no texto do programa. As funes
habituais so chamados no programa, do mesmo modo que quando se utilizam quaisquer outras funes
( uma prtica comum).
No nosso exemplo (Fig. 18, 19), so utilizadas duas funes habituais: MathSqrt () e Alert (). O ex-um
destinado para computao de razes quadradas, enquanto a segunda uma mensagem para um
determinado texto fechado entre parnteses ao ecr. As propriedades das funes habituais so
considerados em mais detalhes na seo Standard Funes. Aqui vamos notar que estes registros
representam o funcionamento normal chamadas, enquanto que nenhuma das descries destas funes
podem ser encontrados no programa. Norma funes tambm pode ser chamado built-in, ou funes
previamente definidas. Voc pode usar qualquer um desses termos.
Funes Definidas Por Usurio
Em alguns casos, programadores criar e utilizar as suas prprias funes. Chamamos essas funes
funes definidas pelo utilizador. User-defined funes so utilizadas em ambos os programas funcionam
com descries e chamadas funo.
Tabela 1. Funo descrio e funo chamada utilizados em programas para diferentes tipos de
funes.
Tipo de funo

Funo Descrio

Funo Chamada

Especial

Aplicveis

No aplicvel (*)

Standard

No aplicvel

Aplicveis

Definido pelo usurio

Aplicveis

Aplicveis

(*) Embora funes especiais podem ser chamados a partir de um programa tecnicamente, no
recomendvel faz-lo.
Propriedades de Funes
Funo Execution
A principal propriedade de todas as funes que chamado a funes so executadas. Funes so
executadas de acordo com os seus cdigos.
Passou parmetros e retornar valor
Quanto s informaes recebidas e devolvidas, uma funo como uma calculadora padro. Voc pode
digitar (usando o seu teclado) uma certa expresso que consiste em diversos valores entraram um por
um, e voc ir obter um valor como uma resposta. Uma funo pode receber e processar um ou vrios
parmetros do programa que tem chamado para a execuo desta funo, bem como a funo ir
terminar o seu funcionamento, pela devoluo (transmisso, fornecendo) um parmetro como uma
resposta a esse programa.

Os parmetros passados so especificados pelo juntando em parnteses aps o nome da funo a ser
chamada. Os parmetros passados esto normalmente separados por vrgulas. O nmero de parmetros
passados funo, no deve exceder 64. A funo pode omitir tambm passaram a utilizar
parmetros. Neste caso, um vazio lista de parmetros for especificado, ou seja, voc s colocar um
parntese de abertura e um fechamento parnteses, imediatamente aps o nome da funo.
O nmero, o tipo ea ordem dos parmetros passados na chamada de funo deve corresponder com os
dos parmetros formais especificados na descrio da funo (a chamada para uma funo que tem
parmetros predefinidos constitui uma iseno - verFuno Chamada e Funo Descrio e ao Operador
" regresso "). Se no coincidirem, MetaEditor lhe dar uma mensagem de erro. Constantes, variveis,
expresses e arrays podem ser utilizados como parmetros passados.
O valor de retorno especificada no retorno do operador parnteses () (ver Funo Descrio e ao
Operador "regresso"). O tipo do valor devolvido utilizando operador retorno () deve corresponder com o
tipo de funo a que consta do cabealho da funo . tambm possvel que uma funo no retorna
nenhum valor. Neste caso, nada especificado no retorno do operador parnteses ().
No nosso exemplo, os parmetros so passados variveis A e B (fig. 21), enquanto que o valor de
retorno varivel c (Fig. 20).A exigncia de adequao dos tipos de parmetros passados e formal pode
ser visto na fig. 22.
O nmero, o tipo ea ordem dos parmetros passados na chamada de funo deve
corresponder com os dos parmetros formais especificados na descrio da
funo. nicas variveis que podem ser usadas no cabealho da funo descrio
formal como parmetros.

Fig. 22. Partida do nmero, o tipo ea ordem dos parmetros passados e formal. nicas variveis so
utilizadas como parmetros passados.
Apenas variveis, constantes e expresses podem ser utilizados como parmetros
passados.

Fig. 23. Partida do nmero, o tipo ea ordem dos parmetros passados e formal. Uma constante, uma
expresso, e variveis do tipo correspondente so utilizados como parmetros passados.
Parmetros formais
Um ponto alto das funes a utilizao de parmetros formais.
Parmetros formais so uma lista de variveis especificadas no cabealho da funo descrio.
Ns mencionado anteriormente que uma funo pode ser usada em diversos programas. No entanto,
diferentes programas usam nomes diferentes para as variveis. Se funes exigidas estrita
correspondncia nos nomes de variveis (e, correspondentemente, em seu valor), no seria conveniente
para programadores. Na verdade, voc teria, ento, para compor a cada novo programa desenvolvido
nos nomes de variveis que j havia sido utilizado em sua funo anterior. No entanto, felizmente, as
variveis utilizadas dentro de funes no tm relaes com as variveis utilizadas em um programa.
Deixe a Fig's referem. 20 e 21, mais uma vez. Convm notar que os nomes dos parmetros passados (A
e B so dadas dentro dos parnteses da funo chamada) no coincidem com os nomes dos
parmetros (a, b) especificados na descrio da funo.Observamos na seo Constantes e
Variveis MQL4 que sensvel a maisculas e minsculas. Assim, os nomes e um A, B e bso aqui
considerados diferentes nomes de variveis. No entanto, no existe um erro no presente cdigo.
As variveis (parmetros formais) utilizados na descrio da funo no esto relacionadas com as
variveis utilizadas no cdigo base do programa. Eles so apenas diferentes variveis. Apenas variveis,
mas no constantes, podem ser especificados em funo dos parmetros formais como cabealho.
Como funciona

No programa, a ocorre uma chamada de funo, variveis A e B serem especificados em suas


parnteses.
O programa chama a funo de mesmo nome, que tem formal parmetros a e b especificados
em seu cabealho.
O valor de uma varivel atribudo a uma varivel.
O valor da varivel B atribudo a varivel b.
O executvel funo executa clculos utilizando os valores das variveis a e b.

permitida a utilizao de nomes de parmetros formais (que no coincidem com os nomes das
variveis usadas no programa).Neste exemplo, usamos os identificadores dos parmetros formais a e
b. No entanto, que poderamos utilizar quaisquer outros, por exemplo, m
e n, ou Kat_1 e Kat_2. Claro que, quando se escreve um programa, voc deve especificar a funo no

organismo dos clculos que usam os nomes das variveis que so dadas no cabealho. Uma vez que
temos dado a e b, no cabealho, por isso temos que usar a funo de a e b, no m e n.
Em uma funo, os clculos so feitos que envolvem formal parmetros a e b, mas no variveis A e
B. Em uma funo, todas as aces podem ser admitidas na desempenham formal parmetros a e
b (incluindo as alteraes nos valores dessas variveis). Isto no tem qualquer efeito sobre as
variveis A e B.
O valor de retorno calculado em funo do dado no retorno do operador parnteses (). O valor de uma
varivel, o resultado de uma expresso, ou de uma constante e pode ser utilizado como valor
devolvido. No nosso caso, este o valor da varivel local c (variavel local uma varivel declarada
dentro de uma funo, se voc sair da funo, os valores de todas as variveis locais sero perdidas;
vamos ponderar mais detalhes sobre variveis locais na seo Tipos de Variveis). A funo retorna para
o programa o valor da varivel local c (Fig. 19). Isso significa que esse valor passar a ser atribudo a
varivel C.
Os clculos adicionais no programa, se houver, pode ser realizada com as variveis declaradas dentro da
funo chamada. No nosso caso, funo especial chamada funo start () (que contm a linha de
chamada do usurio-funo definida), enquanto que as variveis declarados dentro da chamada funo
so A, B e C. Assim, em funo dos clculos so realizados utilizando os parmetros formais, o que nos
permite criar funes arbitrrias usando nomes de variveis, independentemente dos nomes dos valores
efectivamente utilizados no programa.
Exemplo: Standard Funes em um Programa
Em primeiro lugar, vamos examinar o comportamento do programa apresentado na Fig. 18. Devemos
notar que todo o cdigo do programa est localizado no interior da funo especial iniciar (). Na
presente fase de formao, no iremos dedicar especial ateno a este (funes especiais e suas
propriedades so consideradas em mais detalhes na seo Funes Especiais).
Vamos acompanhar a execuo do programa comea com a atribuio operador:
int A = 3; / / Primeira cathetus
1. A parte direita da cesso contm o operador especificado constante, seu valor 3.
2. O valor de 3 (o valor do lado direito) atribudo a uma varivel (que encontra esquerda da
igualdade em assinar a cesso operador).
O controle dada para a linha seguinte:
int B = 4; / / Segunda cathetus
3. A parte direita da cesso contm o operador especificado constante, seu valor 4.
4. O valor de 4 atribudo a varivel B.
O programa vai para a execuo da linha seguinte:
int C_2 A * = A + B * B; / / S hum dos quadrados dos catheti
5. Clculo da parte direita da cesso operador. O resultado do clculo o valor de 25 (os detalhes de
como um programa refere-se a variveis a ter os seus valores so considerados na seo Constantes e
Variveis, pelo que no estamos aqui agora particularizantes este ponto).
6. Atribuio do valor 25 a varivel C_2.

A prxima linha representa uma atribuio operador, o direito da parte que contm um apelo para que a
funo padro:
int C = MathSqrt (C_2); / / Clculo da hipotenusa
O programa destina-se a executar a tarefa operador. Para isso, executa clculos para a direita da
igualdade primeiro sinal.
7. O programa pede para execuo da norma MathSqrt funo () (que calcula razes quadradas). O valor
da varivel C_2 (no nosso caso, esse valor igual a 25), ser utilizado como parmetro a
repercusso. Note que no h descrio da funo deste padro, em qualquer parte do programa. As
descries das funes habituais no devem estar localizados em programas. No texto de um programa,
voc pode facilmente distinguir o padro funo chamada pela sua aparncia: eles so destacadas em
azul escuro com MetaEditor (programador pode escolher cores voluntariamente).
8. Os clculos so feitos em funo da norma MathSqrt ().
9. A funo padro MathSqrt () tenha cumprido os seus clculos. Ela devolve o valor obtido. No nosso
caso, o valor de 5 (araiz quadrada de 25).
O valor devolvido pela funo agora o contedo da gravao:
MathSqrt (C_2)
Esse registro pode ser considerada como uma especial, varivel complexa, uma espcie de uma coisa,
dentro da qual os clculos so realizados. Aps estes clculos foram concludas, a coisa tem um valor. O
determinante aqui o fato de que o valor devolvido pela funo pode ser atribudo a uma outra varivel
considerada ou em alguma outra clculos.
10. Neste caso, o nosso valor o valor da parte direita da cesso operador. Em prosseguimento
execuo da cesso operador, o programa ir atribuir o valor de 5 a varivel C.
11. A linha seguinte contm referncias ao operador que o padro funo Alert () (funo chamada).
Alerta ( "hipotenusa =", C); / / Mensagem na tela
A norma funo Alerta () abre uma caixa de dilogo onde os valores dos parmetros passados so
mostrados. Neste caso, a funo tem tomado os dois valores passados como parmetros:
- O valor da string constante: hipotenusa =
- O valor da varivel inteira C: 5
Foi mencionado anteriormente que nem todas as funes devem retornar o valor (que o resultado da
execuo da funo). A norma funo Alert () no retorna nenhum valor, uma vez que tem uma outra
tarefa - deve apresentar o texto na tela, em especial uma janela.
Como resultado da execuo da norma funo Alert (), na janela dessa funo ser exibida a seguinte
linha:
Hipotenusa = 5
12. O ltimo operador neste programa completa o trabalho do grupo especial de funo start ().
retorno; / / Funo sada operador
O trabalho do programa est concluda neste momento.

Uma questo pode surgir: Como que podemos saber qual funo ir retornar o valor, e no aquilo? A
resposta a esta pergunta bvia: a fim de encontrar descries detalhadas das funes embutidas, voc
deve ler-se referncia documentao emMQL4.community, o site lanado pelo MetaQuotes Software
Corp, ou o Arquivo de Ajuda MetaEditor. As propriedades de uma funo so definidos por usurios
especificados na sua descrio. User-se uma funo definida retorna o valor ou no, depende de seu
algoritmo (a deciso feita pelo programador na fase de escrever o cdigo do programa funcionar).

Exemplo: Funes Definidas Por Usurio em um Programa


Vamos considerar o modo como as mesmas clculos so feitos dentro do programa contendo uma
funo definida de usurio (fig. 19). Uma certa parte do cdigo que poderia ser encontrada
anteriormente em especial a funo start (), no est disponvel agora. Ela passa a ter a chamada para o
utilizador-funo definida. No entanto, a funo especial start () seguido pela descrio do usuriofuno definida.
As primeiras duas linhas, nas quais inteiro variveis A e B tomam valores numricos, permanecem as
mesmas. Por conseguinte, nada muda na sua execuo:
int A = 3; / / Primeira cathetus
int B = 4; / / Segunda cathetus
Na terceira linha, temos a misso operador. Sua parte direita contm a chamada para o utilizador-funo
definida:
int Gipo C = (A, B); / / Clculo da hipotenusa
6. Em execuo deste operador, o programa ir, em primeiro lugar, chamamos a user-defined function.
Nota: A descrio da funo definidos por usurios devem estar presentes em seu programa e colocado
imediatamente aps o colchete que fecha a funo especial start () (ou seja, fora da funo especial).
Ao referir-se ao usurio-funo definida, o programa ir executar as seguintes:
6.1. Apelando para a varivel A, a fim de obter o seu valor (no nosso caso, 3)
6.2. Apelando para a varivel B, a fim de obter o seu valor (no nosso caso, 4)
Nota: Logo que o programa comea a chamar a user-defined funo (a funo de usurio definido, no
nosso caso especfico, esta regra se aplica a todas as funes), o programa apenas uma cpia dos
valores das variveis usadas como passou parmetros, enquanto que os valores dessas variveis
prprias (neste caso, A e B) no esto a mudar devido suposta aplicao do usurio-funo definida,
nem eles realmente mudar.
7. O controle passado para o usurio-funo definida.
Durante todo o tempo de execuo da funo definidos por usurios (no importa quanto tempo leva),
os valores das variveis do programa, no lhes chamar perdidos, mas ser armazenado.
A primeira linha na descrio do usurio-definida a sua funo de cabealho:
int Gipo (int a, b int) / / Usurio-funo definida
Sobre a execuo do usurio-funo definida, o programa ir fazer o seguinte:

7.1. O valor de 3 (o primeiro valor na lista de parmetros passados) ser atribudo a uma varivel (a
primeira varivel na lista de parmetros formais).
7.2. O valor de 4 (o segundo valor na lista de parmetros passados) ser atribudo a varivel b
(a segunda varivel na lista de parmetros formais).
Em seguida, o controle ser passado para a funo de rgo-lo para executar o seu algoritmo.
O primeiro operador, em funo do rgo :
int c2 = a + b * a * b; / / S hum dos quadrados dos catheti
7.3. Em execuo deste operador, o programa calcula o valor na parte direita da cesso operador, e
depois que ele ir atribuir o valor obtido (no nosso caso, 3 * 3 + 4 * 4 = 25) a varivel c2.
O prximo operador:
int c = MathSqrt (c2); / / hipotenusa
7.4. Aqui vamos encontrar a raiz quadrada do valor da varivel c2. O fim das operaes o mesmo que
no exemplo anterior. A descrio da norma no funo usado tanto. A execuo da tarefa operador ir
resultar em atribuir o valor de 5 a varivel c.
7.5. Na prxima linha, temos operador:
retorno (c); / / Funo sair operador
Em execuo deste operador, o programa vai voltar (para a chamada local do usurio-funo definida) o
valor fechado entre parntesis deste operador. No nosso caso, o valor da varivel c, ou seja, 5.
Neste ponto, a execuo da funo definida pelo utilizador-se ao fim, o controle dado chamada local.
8. Lembrar que o usurio-funo definida foi chamado a partir do operador
int Gipo C = (A, B); / / hipotenusa clculo
The record (the user-defined function call)
Gipo (A, B)
na fase de devoluo do valor, assume o valor calculado na funo (em nosso caso, o valor de 5).
Ao completar a execuo da tarefa operador, o programa ir atribuir o valor de 5 para a varivel C.
9. O prximo operador,
Alerta ( "hipotenusa =", C); / / mensagem na tela,
Esse programa ser executado da mesma forma como no exemplo anterior, a saber: em uma janela
especial, h uma mensagem ir aparecer:
Hipotenusa = 5
10. O ltimo operador neste programa,
retorno; / / Funo sada operador,

completa o trabalho do grupo especial de funo start (), e, simultaneamente completa o trabalho de
todo o programa (as propriedades de funes especiais so consideradas em mais detalhes na
seo Funes Especiais).
Vamos considerar algumas verses da aplicao acima de usurio definido funo. fcil verificar que a
programao com funes definidas por usurios tem algumas vantagens inegveis.
Considerado anteriormente Implementao de Funes Definidas Por Usurio Gipo ()
Nesta funo, os parmetros formais "lembram" as variveis utilizadas no programa bsico. No entanto,
esta apenas uma semelhana formal, porque um e um so os diferentes nomes de variveis.
//------------------------------------------------ ----------------------int Gipo (int a, b int) / / Usurio-funo definida
(
int c2 = a + b * a * b; / / S hum dos quadrados dos catheti
int c = MathSqrt (c2); / / hipotenusa
retorno (c); / / Funo sada operador
)
//------------------------------------------------ -----------------------

Implementao de Funes Definidas Por Usurio Gipo (): Verso 2


Neste caso, os nomes de parmetros formais no "lembram" os nomes das variveis usadas no
programa bsico. No entanto, isso no nos impede de utilizar esta funo no programa.
//------------------------------------------------ -------------------int Gipo (int alfa, Betta int) / / Usurio-funo definida
(
int * SQRT alfa = alfa + Betta Betta *; / / S hum dos quadrados dos catheti
GIP MathSqrt int = (SQRT); / / hipotenusa
retorno (GIP); / / Funo sada operador
)
//------------------------------------------------ --------------------

Implementao de Funes Definidas Por Usurio Gipo (): Verso 3


Neste exemplo, a varivel alfa reutilizado no programa e muda o seu valor duas vezes. Este facto no
tem qualquer efeito sobre as variveis reais especificadas na funo chamadas do programa principal.
//------------------------------------------------ -------------------int Gipo (int alfa, Betta int) / / Usurio-funo definida
(
alfa = alfa alfa * + * Betta Betta; / / S hum dos quadrados dos catheti
alfa = MathSqrt (alfa); / / hipotenusa
retorno (alfa); / / Funo sada operador
)
//------------------------------------------------ --------------------

Implementao de Funes Definidas Por Usurio Gipo (): Verso 4

Neste user-defined function, todos os clculos so coletados em uma operadora. O valor de retorno
calculado diretamente no retorno do operador parnteses (). O subduplicate calculado directamente no
local onde passou o parmetro deve ser especificado em funo da norma MathSqrt (). Esta soluo
pode parecer estranho para ser ou errado no comeo. No entanto, no existe um erro na aplicao da
presente user-defined function. O nmero de operadores utilizados na funo menor do que em outras
implementaes, para que o cdigo acaba por ser mais compacta.
//------------------------------------------------ -------------------int Gipo (int a, b int) / / Usurio-funo definida
(
retorno (MathSqrt (a + b * a * b)); / / Funo sada operador
)
//------------------------------------------------ -------------------Assim, a aplicao de funes definidas por usurios tem algumas vantagens inegveis em prtica a
programao:

Os nomes das variveis do texto bsico do programa no tem relaes formais com os nomes dos
parmetros definidos por usurios em uma funo;
user-defined funes podem ser reutilizados em diferentes programas, no h necessidade de
alterar o cdigo de um usurio-funo definida;
bibliotecas podem ser criadas, se necessrio.

Estas propriedades das funes muito teis para permitir criar realmente grandes programas em uma
corporao, por exemplo.Vrios programadores podem estar envolvidos neste processo simultneo, e
eles uma liberada a partir da necessidade de chegar a acordo sobre os nomes das variveis que
utilizam. A nica coisa a ser acordada a ordem das variveis no cabealho e na chamada de funo.

Maneira comum de fazer trades


Todos os clculos e outras aes realizadas devido execuo de um programa aplicativo podem ser
divididos em dois grupos pelo local de sua execuo: aqueles executados no PC do usurio e aquelas
executadas do lado do servidor. Um montante significativo de clculos realizada sobre o lado do
usurio. Este grupo inclui a execuo de programas aplicativos. Trades pertencem ao segundo grupo.
Making trades implica converso de dados no servidor.
Considerando trades, vamos distinguir os seguintes termos:
Mercado fim - executada uma ordem para comprar ou vender activos a um smbolo (a segurana).
Um mercado exibido no fim da janela do smbolo at o fim est fechado.
Enquanto se aguarda ordem uma ordem comercial para comprar ou vender activos a um
segurana (um smbolo) quando o preo predefinido nvel seja atingido. Enquanto se aguarda despacho
do smbolo exibido na janela at que ela se torna uma forma ou de mercado eliminado.
O comrcio uma solicitao feita pelo comando de um programa ou por um comerciante, a fim de
realizar um comrcio.
O comrcio abertura, o encerramento ou a alterao do mercado e encomendas pendentes.
Comrcio tornando diagrama
Trs componentes esto envolvidos na realizao trades: um programa aplicativo, o cliente eo servidor
terminal (consulte a fig. 65). A solicitao formada no programa (como j mencionado acima,

quaisquer programas aplicativos podem ser executados apenas no PC do usurio; nenhum pedido os
programas esto instalados no servidor). A solicitao formada pelo programa ser passada para o
cliente terminal que, por sua vez, envia o pedido para o servidor. Ao lado do servidor, a deciso sobre o
pedido execuo ou rejeio ser feita. As informaes sobre os resultados obtidos sero passados pelo
cliente para o servidor de terminal e, em seguida, para o programa.

Fig. 65. Diagrama de pedirem para fazer negcios.


Solicitando
Um comrcio solicitao pode ser feita por um profissional ou por um programa. Para um profissional
para ser capaz de fazer um pedido ao cliente terminal prev o "Orders" painel de controle (consulte a
descrio do cliente terminal). As solicitaes so feitas no programa, de acordo com o algoritmo, como
um resultado da execuo do comrcio funes. Em mais lado nenhum (nem no terminal do cliente nem
no servidor) o comrcio pedidos so formados espontaneamente.
Programa Features
Dependendo do algoritmo, um programa pode formar diferentes solicitaes - a abertura, o
encerramento ou a alterao do mercado e encomendas pendentes. O comrcio funes seguintes so
usados em um programa para formar comrcio pedidos:

OrderSend () - para abrir mercado e encomendas pendentes;


OrderClose () e OrderCloseBy () - para fechar ordens de mercado;
OrderDelete () - para apagar encomendas pendentes;
OrderModify () - para modificar mercado e encomendas pendentes.

O comrcio funes acima pode ser usada somente Especialista em Advisors e scripts; a utilizao destas
funes dos indicadores proibida (ver tambm Quadro 2). Existem outras funes que pertencem ao
comrcio queridos (ver arquivo em MetaEditor e ajudar a seco Comrcio Funes presentes neste
livro). No entanto, a sua execuo foi atribuda a abertura de informaes do terminal ambiente, a fim
de obter as informaes referenciais, de modo que no resulte na formao de pedidos e apelando para
o servidor.
Caractersticas do Terminal Client
Um pedido apresentado pelo programa como um resultado da execuo de uma funo comercial
passada para o cliente terminal para o processamento. O cliente terminal contedo analisa o pedido e
executa um dos dois seguintes aes: ou envia o pedido para o servidor para que ele seja executado no
servidor, ou rejeita o pedido e envia nada para o servidor.
O cliente terminal s permite corrigir os pedidos para serem enviados para o servidor. Se o programa
codificado de tal forma que ela faz, por exemplo, um pedido de abertura de uma ordem a um preo noexistente, o cliente no vai enviar este terminal pedido para o servidor. Se o programa formas corretas
pedidos (encomendas so abertas e fechadas, o mais tardar, conhecida preo, a ordem est dentro da
faixa de valor limitado pela lidar center, etc) e, em seguida, este pedido ser enviado para o servidor.

Apenas uma thread execuo est prevista no terminal do cliente para realizar negcios. Isto significa
que o cliente terminal pode funcionar em simultneo com um s pedido. Se existem vrios scripts Expert
Advisors ou comerciais no terminal cliente e nenhum programa tenha passado um comrcio solicitar ao
cliente terminal, o comrcio de todas as solicitaes outra Expert Advisors e scripts sero rejeitadas at
que o cliente terminal completa transformao do actual pedido, ou seja, , At que a thread est livre
comrcio.
Caractersticas do Servidor
As informaes sobre comrcio histria para cada conta (abertura, encerramento, que modifica ordens)
altamente garantidos pelo servidor e uma das mais prioritrias, em comparao com o histrico de
rotas armazenadas no cliente de terminal. O direito de executar os pedidos comrcio concedida apenas
a um revendedor ou para o servidor que processa pedidos automaticamente (se a lidar centro fornece o
servidor com esse recurso para um determinado perodo de tempo). A solicitao de que sejam
entregues no servidor pode ser tanto executadas ou rejeitadas. Caso o pedido seja executado comerciais
(ou seja, um comrcio que se faa), o servidor ir fazer todas as converses de dados. Se o comrcio
pedido rejeitado, o servidor no converte os dados. No importa qual deciso (para executar ou que
rejeite um pedido) for feita, as informaes sobre esta deciso vai ser passada para o cliente terminal
para sincronizar a histria.
Um pedido comrcio formada como resultado da execuo do programa e um
comrcio solicitao formada pelo comerciante manualmente so absolutamente os
mesmos, sob a tica do servidor, de modo que o servidor no faz qualquer distino
entre os pedidos quando o processamento deles.
Tambm possvel no lado do servidor Expert Advisors para proibir o comrcio no terminal cliente. Por
vezes necessrio, se o programa operao gera conflitos. Por exemplo, se a implementao de um
algoritmo resultados incorretos em que o programa continuamente formas comerciais alternante pedidos
de abertura e fechamento de ordens com intervalos de tempo muito pequeno (por exemplo, em todos
os carrapatos), ou se os pedidos de abertura, supresso ou modificao das encomendas pendentes so
demasiado frequentes.
Processo de negociao
O procedimento de realizar transaces est interativa e percebi na modalidade real-time. O diagrama
(fig. 66) mostra todos os eventos relacionados ao Comrcio realizando um.

Fig. 66. Evento em fazer uma seqncia comrcio.


Evento 0. O programa lanado para execuo no momento t0.
Evento 1. No momento t1, o programa j formou um pedido comrcio como um resultado da execuo
de uma funo comercial. O comrcio pedido passado para o cliente de terminal. Naquele momento, o

programa passa o controle para o cliente terminal e pela execuo do programa est parado (o ponto
vermelho no desenho).
Evento 2. Terminal O cliente no recebeu o controle e informaes sobre o contedo do pedido. Dentro
do perodo de tempo entre T2 e T3, o cliente terminal analisa o contedo do pedido comrcio e torna
uma deciso sobre novas manifestaes.
Evento 3. Terminal O cliente que realiza feitos deciso (uma das duas alternativas).
Alternativa 1. Se o pedido comrcio formada como resultado da execuo de uma das funes
comerciais acabou por se revelar incorrectas, o controlo passado para o programa. Neste caso, o
prximo evento ser Evento 4 (isso pode acontecer se, por exemplo, o programa tiver enviado o pedido
de abertura de uma ordem, o que excede o valor da conta de capital disponvel).
Evento 4. O programa tem recebido o controle (t4 momento, ponto verde) e pode continuar execuo a
partir do local onde o pedido anterior tenha sido formado. Ao mesmo instante, o programa tem recebido
informaes sobre a forma que o comrcio no tenha sido executada. Voc pode encontrar informaes
sobre o motivo, para a qual o comrcio pedido no tenha sido executada, analisando a regressou a ode
de erro. Abaixo iremos analisar a questo de como fazer isto. Aqui, h que notar que no apenas todos
os pedidos resultar em execuo de ordens. Neste caso, o programa j formou uma solicitao incorreta,
o que resulta em que o cliente terminal tem rejeitado este pedido e devolveu o controle para o
programa. Neste caso, no faz referncia ao servidor tem lugar. Os intervalos de tempo entre t1 - t2 - t3
- t4 so negligibly curto e no ultrapassem, no total, vrias ms.
Alternativa 2. Se o programa tem formado um corretas comrcio pedido, o cliente terminal envia esse
pedido para o servidor, o prximo evento ser Event 5 (o momento do T5) - o servidor receber o
comrcio pedido. A ligao entre o cliente eo servidor terminal estabelecida atravs da internet, assim
o tempo gasto com o envio do pedido ao servidor de comrcio (intervalo de tempo entre T3 e T5)
totalmente dependente da ligao de qualidade. Para uma boa qualidade de conexo, este prazo pode
ser de aproximadamente de 5 a 10 ms, considerando que ele pode ser medido em segundos, no todo
m conexo.
Evento 5. No momento, o T5, o servidor recebeu o pedido comrcio. O servidor pode executar ou
rejeitar essa solicitao recebida. A deciso de executar ou indeferimento do pedido pode ser feita no
lado do servidor dentro de um determinado perodo de tempo (no momento T6). O intervalo de tempo
entre T5 e T6 podem variar de alguns milisegundos para as dezenas de segundos, dependendo da
situao. Em alguns casos, se o servidor funciona no modo automtico e no h movimentos rpidos no
mercado e outros comerciantes no esto muito activas, o comrcio pedido pode ser executado ou
rejeitado dentro de alguns milisegundos. Em outros casos, se o servidor est sobrecarregado devido
grande actividade dos operadores e se a deciso de executar ou indeferimento do pedido feita por um
revendedor humanos, o tempo tomado a deciso tomada pela possibilidade de contar com as dezenas
de segundos.
Evento 6. Se no houver mudanas considerveis tm lugar no mercado dentro de um intervalo de
tempo a partir do momento em que fazem o comrcio pedido pelo programa (t1) para o momento da
deciso tomada pelo servidor (T6), o comrcio solicitao ser executada, como uma regra. Se o preo
do smbolo mudou dentro deste tempo ou o valor da encomenda a ser aberto livre superior a equidade
da conta no momento da tomada da deciso, ou outros impedimentos ocorrem, em seguida, o servidor
decida rejeitar o pedido comrcio.
O servidor da rejeio dos pedidos comrcio (embora eles j tenham sido controlados pelo cliente
terminal) frequente. Em geral, a maior parte das trocas comerciais que os pedidos so entregues ao
servidor para execuo so aceitos pelo servidor.Porm, em alguns casos, o pedido pode ser rejeitado,
por isso o seu programa aplicativo deve ser codificado de modo a que ele tem essa possibilidade em
considerao, e funciona correctamente, em tais situaes.

Qualquer que seja deciso (para executar / rejeitar um pedido comrcio, evento 6) feita pelo servidor,
as informaes sobre ele enviado pelo servidor ao cliente terminal que tenha entregue o pedido.
Evento 7. Terminal O cliente no recebeu resposta do servidor. A resposta do servidor segue o mesmo
caminho por meio da Internet, dado que o pedido entregue ao servidor, por isso o tempo despendido
com a resposta do servidor que recebe completamente depende da qualidade da conexo. De acordo
com as modificaes feitas no servidor, o cliente terminal ir reflectir as alteraes correspondentes. Por
exemplo, se a execuo de um pedido comrcio resulta em fechamento ou abertura de um despacho, o
cliente terminal ir mostrar graficamente este evento na janela do smbolo e textualmente no "Terminal"
janela (os separadores Comrcio e Histria da conta ') . Se o servidor rejeitou o pedido comrcio,
nenhuma alterao ser feita em nenhuma das janelas do terminal do cliente.
Evento 8. Terminal O cliente j completou a exibio das mudanas e passar o controle para o
programa.
Evento 9. O programa tem recebido o controle e pode continuar operando.
Observe:
A partir do momento em que o programa envia um pedido comerciais (e
simultaneamente passa o controle) para o cliente terminal, para o momento em que o
controle retornado para o programa, este um modo de espera nos. N operaes
so feitas no programa durante este perodo de tempo. O controle retornado para o
programa de acordo com a regra para a execuo chamada para a funo que tem
formado a pedido comrcio.
Se o comrcio solicitao est incorreta e, em seguida, o programa no estiver em modo de espera por
um longo tempo (o intervalo entre T1 e T4). No entanto, se o pedido for comrcio 'aprovado' pelo
cliente e enviados para o terminal server, a durao do programa perodo de espera (t1-t9) pode ser
diferente e depende tanto da qualidade da conexo e do tempo de tomada de decises tomadas por do
servidor - para vrios milissegundos para minutos.
Logo que o programa recebe o controle, ele pode continuar operando. O programa operacional pode
analisar o cdigo do ltimo erro retornado pelo cliente terminal e, desta forma, encontrar-se sobre se o
comrcio pedido foi executado ou rejeitadas.
Conflitos em Making Trade. Erro 146
Ao considerar acima Caractersticas do terminal do cliente, temos dito que o cliente terminal poderia
processar um pedido em um s momento. Vamos considerar agora o que eventos iro ter lugar se vrios
pedidos formado por diferentes programas ser passado para o cliente de terminal.

Fig. 67. Conflitos de passagem, vrios pedidos para o cliente terminal de diferentes programas.

Na fig. 67, podemos ver que dois negociao Expert Advisors so lanados para execuo no cliente
terminal simultaneamente.EA1 formaram um comrcio solicitao no momento t1 e ela passou o cliente
terminal no momento t2.
EA2 criou tambm um pedido e remete para o cliente terminal quando o cliente terminal est
processando o primeiro pedido (perodo de t2 para t3). Nesta situao, o cliente terminal no pode
considerar a solicitao formada por EA2, de forma que ele vai rejeitar esse pedido e devolver o controle
para EA2. Observe que, neste caso, o pedido rejeitado pelo cliente terminal para o pedido no for
errada, mas porque o terminal est ocupado com o processamento do pedido do outro. EA2 continuar
operando. possvel analisar o cdigo de erro que explica a razo pela qual o pedido foi indeferido (no
nosso caso, trata-se de erro 146).
Se EA2 (em um caso geral, ele pode ser um ou vrios programas comerciais) que passa a sua
solicitao para o cliente terminal, dentro do perodo de tempo entre T1 e T4 e, em seguida, este pedido
ser indeferido (um grupo de eventos na rea rosa). O terminal cliente torna-se livre de momento t4
(ponto verde). A partir deste momento, EA2 pode passar com sucesso o seu pedido para o cliente final
(um grupo de eventos na rea verde). Esta solicitao ser recebida e analisada pelo cliente terminal
que pode finalmente rejeit-lo, tambm, mas pela razo de sua incorreo, ou ele pode enviar esse
pedido para o servidor.
Se o negcio criado por EA1 pedido considerado pelos clientes como terminal correcto, este pedido
ser enviado pelo cliente para o servidor de terminal no momento t3. Neste caso, o cliente terminal e
muda para o modo de espera e no pode considerar qualquer outro comrcio pedidos. O cliente terminal
s se tornar livre para considerar os pedidos de outras trocas de momento t9. Assim, de acordo com a
variao 2, o cliente terminal no pode analisar os pedidos comrcio dentro do perodo de tempo entre
t1 e t9. Se dentro desse prazo, qualquer programa refere-se ao cliente terminal, a fim de passar um
pedido de considerao, o cliente terminal ir rejeitar esta evento e passar o controle para o programa
(um grupo de eventos na rea rosa, dentro do perodo de tempo entre T6 e T7). O programa que
recebeu o controle continua a sua actividade e, atravs da anlise do cdigo de erro, pode encontrar-se
sobre a razo, pela qual o pedido foi indeferido (neste caso, trata-se de erro 146).
A partir do momento t9, o cliente terminal ser totalmente livre para qualquer outra analisam os pedidos
comerciais. EA2 pode passar com sucesso o comrcio pedido para o cliente terminal, dentro do perodo
de tempo que decorre o momento t9. De acordo como o cliente terminal considerar o pedido correto ou
no, o pedido ser passado pelo cliente para o servidor de terminal ou rejeitado.
A anlise dos erros que ocorrem na tomada de trfegos so consideradas em mais detalhes nas sees
abaixo.

Ordem caractersticas e normas relativas elaborao de ofcios


Antes de comearmos a descrever comrcio funes, devemos considerar parmetros que caracterizam
os preos de mercado, tipos de ordem, as suas caractersticas, bem como as regras para fazer negcios.
Caractersticas dos smbolos
Em primeiro lugar, devemos considerar o princpio utilizado pelas corretora empresas para formar os
preos dos valores mobilirios. Este princpio consiste em que o corretor oferea ao comerciante uma
citao, em ambos os sentidos para a realizao de negcios.
Bidireccional para a citao est ligado um par de mercado os preos oferecidos pela corretora para
a compra e venda de activos para uma segurana (smbolo), no momento presente.

Lance o menor dos dois preos oferecidos pela corretora em uma bidireccional para citar um
segurana.
Pergunte se o mais elevado dos dois preos oferecidos pela corretora em uma bidireccional para citar
um segurana.
O ponto o preo unitrio de medio de um smbolo (o preo mnimo possvel mudar, o ltimo
algarismo significativo do preo do valor).
Spread a diferena entre os maiores e os menores preos nos pontos em um bidireccional para citar
um smbolo.
Normalmente, a propagao um valor fixo. Em Metatrader 4, admite-se que devem ser apresentadas
na janela do smbolo grfico que reflete apenas mudanas preo de lance:

Fig. 68. Um preo normal de um smbolo grfico.


Fig. 68 mostra-nos um smbolo janela onde podemos ver a evoluo da oferta e os preos, em ambos os
sentidos citar - a linha do actual preo de lance (preto, 1,3005) e da linha do Pergunte ao preo corrente
(vermelho, com 1,3007). Ele pode ser facilmente visto que, neste caso, a corretora oferece um spread
de 2 pontos. A histria Pergunte para o preo no mostrado no grfico, mas implcita e pode ser
facilmente calculada para qualquer instante do tempo.
Ordem tipos e caractersticas
Existem seis tipos de ordem no total: dois tipos de ordens de mercado e quatro tipos de ordens
pendentes.
Comprar um mercado que define ordem de compra de activos a um smbolo.
Vender um mercado que define ordem de venda dos activos a um smbolo.
BuyLimit est pendente uma ordem de compra activos para uma segurana a um preo inferior ao
actual. A ordem ser executada (Buy modificados na ordem do mercado) Pergunte se o preo atinge ou
cair abaixo do preo fixado na ordem pendente.
SellLimit est pendente uma ordem de vender activos para uma segurana a um preo superior ao
actual. A ordem ser executada (modificado em ordem Vender mercado) se o preo de lance atinge ou
ultrapassa o preo estipulado na ordem pendente.
BuyStop est pendente uma ordem de compra activos para uma segurana a um preo superior ao
actual. A ordem ser executada (Buy modificados na ordem do mercado) Pergunte se o preo atinge ou
ultrapassa o preo estipulado na ordem pendente.

SellStop est pendente uma ordem de vender activos para uma segurana a um preo inferior ao
actual. A ordem ser executada (modificado em ordem Vender mercado) se o preo de lance atinja ou
cair abaixo do preo fixado na ordem pendente.
O volume do lote uma ordem expressa na quantidade de lotes.
StopLoss uma ordem stop, que um preo estipulado pelo comerciante, um mercado em que a
ordem ser encerrada se o smbolo preo se move numa direco que produz prejuzos para a ordem.
TakeProfit uma ordem stop, que um preo estipulado pelo comerciante, um mercado em que a
ordem ser encerrada se o smbolo preo se move numa direco que produz lucros para o fim.

Negociao requisitos e limitaes


No intuito de forma correcta a sua aplicao no comrcio pedidos programas (Expert Advisors e scripts),
voc deve tomar os requisitos e as limitaes existentes em considerao. Vamos analis-las em mais
detalhes.
Todos os negcios so realizados a preos correctos. A execuo de preo para cada
comrcio calculado com base no preo correto de uma citao, em ambos os
sentidos.
A regra est acima da regra comum para todos os participantes do mercado e no pode ser alterado na
vontade dos desenvolvedores de uma plataforma de negociao ou na base de um acordo entre um
corretor e um comerciante. Isto significa, por exemplo, que um mercado s pode ser aberta vista ao
actual preo de mercado, mas no a qualquer preo outros. Corrigir-O mtodo de clculo de preo para
os diferentes ofcios considerado baixo.
Ao calcular os preos corretos, tambm necessrio considerar as limitaes do prestador de servios
(referente ao centro).Estas limitaes incluem a distncia mnima, e no congelamento de distncia. Essas
limitaes significam que o corretor tem algum tempo para os preparativos para a realizao de novos
ofcios, se convertendo em uma ordem pendente um mercado ou fechar uma parada por uma ordem
judicial.
Centros que tratam do valor do limite mnimo admissvel diferena entre o preo de mercado, bem como
o preo de cada uma das ordens de parar de uma ordem de mercado entre o preo de mercado, bem
como o preo de uma encomenda pendente, assim como entre o preo de uma pendncia e solicitou o
fim dos seus preos ordens stop. Isto significa, por exemplo, que um comrcio no pedido de abertura de
um mercado nico modo que voc pode especificar a ordem para parar de preo valores que no esto
distantes do actual preo inferior ao mnimo prescrito distncia. Um comrcio pedido contendo ordem
para parar de preos que se encontram mais perto do preo de mercado do que a distncia mnima
considerado pelo cliente terminal como uma incorrecta. Diferentes centros que tratam pode estabelecer
diferentes, tratando-center limitaes especficas para a distncia mnima permitida. Como regra, o valor
dessa distncia varia entre 1 e 15 pontos. Para os mais comumente utilizados valores mobilirios (EUR /
USD, GBP / USD, EUR / CHF, etc), essa distncia torna, na maioria dos centros que tratam 3.5
pontos.Diferentes valores podem ser de diferentes distncias mnimas permitidas, tambm. Por exemplo,
este valor pode ser 50-100 pontos para o ouro. O valor da distncia mnima para qualquer smbolo pode
ser alterada pelo corretor, a qualquer momento (o que normalmente precede a difuso de notcias
importantes comercial). No h limitaes para a distncia mxima.
Parado distncia limita a possibilidade de modificar os preos solicitados na pendncia da sua abertura
ordena, bem como os nveis solicitados para parar de mercado que so ordens de congelamento na

rea. Isto significa, por exemplo, que, se o preo de mercado 1,3800, enquanto se aguarda o seu fim
colocado para ser aberta em 1,3807 e os corretores da prescrio de 10, enquanto se aguarda o seu
fim a congelar no espao, ou seja, voc no pode modificar ou apagar. Em um mercado calmo,
corretores geralmente no definir congelar distncia, ou seja, o seu valor = 0. No entanto, durante o
perodo precedente importante notcia ou de volatilidade em alta, pode estabelecer um corretor o valor
de uma certa distncia congelar. Em diferentes condies e para diferentes corretores, esse valor pode
variar de 1 a 30 pontos bsicos para ter smbolos e valores mais elevados para outros
smbolos. Corretora que pode mudar a congelar-distncia valor a seu critrio, a qualquer momento.
As limitaes dos nveis de preos limitados pelos valores da distncia mnima de
congelamento e distncia so calculadas com base nos preos corretos.
Abertura / fechamento do mercado encomendas
A abertura de um mercado implica ordem de compra ou de venda de alguns activos de um smbolo, o
preo corrente de mercado (ver Requisitos e Limitaes em Making Ofcios). Para abrir um mercado
despacho, utilizar funo OrderSend (); para o seu encerramento, utilize OrderClose funo ().
O correto do preo de mercado aberto fim Buy o mais recente conhecido Pergunte
ao preo de mercado.
O correto do preo de mercado aberto fim Vender conhecido o mais recente dos
preos no mercado de lance.
As limitaes relacionadas posio de paragem nveis de mercado a fim de ser aberto calculado com
base no preo de mercado correto usado para o encerramento do fim.
StopLoss ordens e TakeProfit no podem ser colocados mais prximos do preo de
mercado do que a distncia mnima.
Por exemplo, a distncia mnima faz 5 EURUSD por pontos. Vender mercado aberto no fim de lance =
1,2987. O preo correspondente com a forma quote-dois usado para encerrar este fim Vender
Pergunte = 1,2989. A paragem seguinte ser a nveis mais prximos dos actuais preos na ordem de
criao (ver fig. 69 e Requisitos e Limitaes em Making Trades):
Pergunte StopLoss = + distncia mnima = 1,2989 + 0,0005 = 1,2994, e
Pergunte TakeProfit = - distncia mnima = 1,2989 - 0,0005 = 1,2984.

Fig. 69. Mercado com vista Sell Stop Nveis estar mais prximo do preo de mercado.

Se pelo requerente para a abertura de mercado na ordem de lance Vender = 1,2987 voc parar de usar
os valores de nvel mais prximo do que o acima queridos (SL = 1,2994 e = 1,2984), o comrcio
pedido ser rejeitado pelo cliente terminal. Alm disso, voc deve levar em considerao que o preo
derrapagens so possveis durante a abertura de ordens, o que resulta na abertura de sua ordem, a um
preo diferente do que o solicitado por voc ter um certo valor especificado no pedido. Se o mesmo
pedido tenha especificado os valores de parar de nveis mais prximos dos preos solicitados abrir, este
pedido ser igualmente rejeitado pelo cliente terminal, uma vez que, neste caso, o pedido no respeitar
a distncia mnima exigida entre o preo de abrir o seu ordem bem como o preo de uma das ordens de
stop. Essa a razo pela qual no recomendado para uso no comrcio pedidos de abertura de
mercado ordens de stop-ordem para valores mais prximos do fim aberto preo solicitado. Pelo
contrrio, recomendado para tem algum "livre jogo", isto , precisar esses valores de ordens de stop
que seriam afastadas da requerida abertas preo da ordem de 1.2 pontos mais longe do que o valor da
distncia mnima permitida.
Mercado encomendas podem ser fechados, como resultado da execuo do pedido emitido por um
operador comercial ou pelo programa, assim como quando o preo atinge um dos preos previstos no
ordens stop.
O preo correto perto de um mercado para comprar o mais recente conhecida dos
preos no mercado de lance.
O preo correto perto do fim Vender um mercado o mais recente conhecido
Pergunte ao preo de mercado.
Se fecharmos fim Sell (Fig. 69), no momento atual, ela ser encerrada s Pergunte = 1,2989, ou seja,
com uma perda de 2 pontos. Se permitirmos que isto fim permanecerem abertos por algum tempo e
Pea o preo cai para 1,2984, a ordem ser encerrado com esse preo com o lucro de 3 pontos. Se o
preo de mercado cresce neste perodo de tempo e alcana Pergunte = 1,2994, a ordem ser encerrado
com esse preo com uma perda de 7 pontos.
Caso o pedido tenha formado um pedido para abrir ou fechar uma ordem no mercado a um preo que
no corresponde com a mais conhecida do preo de mercado, o pedido ser rejeitado pelo cliente
terminal.
A limitao relacionada ao fechamento das ordens de mercado calculada com base
no preo de mercado utilizadas para corrigir fechamento da ordem.
Ordem no pode ser encerrada, se o preo da sua execuo StopLoss ou TakeProfit
est dentro da faixa de distncia de congelar o preo de mercado.
Por exemplo, a ordem indicada na fig. 69 pode ser fechada apenas os corretores se definir o valor da
distncia congelar 4 pontos ou menos a partir do momento do fechamento. O preo de abrir este fim
no importa, neste caso. As bordas da banda para congelar o fim so calculados com base no preo de
mercado. Ento, se for = 4, o preo superior, o aluno interno igual a congelar + = 1,2989 + 0,0004 =
1,2993, enquanto o preo mais baixo do congelamento Boarder , correspondentemente, - = 1,2989 0,0004 = 1,2985. Nestas condies, no est em parar vista a congelar rea, de modo a ordem pode ser
fechada, se o profissional (ou um programa) envia uma solicitao ao servidor correto. Se o corretor tem
que definir a = 5, a partir do momento atual, as bordas da banda vai ser o congelamento, 1,2994 e
1,2984, respectivamente. Neste caso, cada uma ordem stop fica em congelar o pensionista, ou seja,
sofre a definir pela corretor limitao, pelo que o despacho no pode ser encerrada s do comerciante
iniciativa ou por solicitao da negociao programa. Neste exemplo, ambos submetidos limitao
ordens stop. Num caso geral, uma ordem no mercado no podem ser fechadas por iniciativa do cliente
terminal, se pelo menos um nvel de parar isto , em ordem a congelar rea.

Se so duas ordens de mercado aberto para um smbolo simultaneamente, sendo um deles a um outro
Comprar e Vender sendo, elas podem ser fechadas em uma das duas maneiras: voc pode fech-las,
consecutivamente, um por um, utilizando OrderClose (); ou voc pode fechar uma delas utilizando um
pelo outro OrderCloseBy (). Em termos de poupana de dinheiro, a segunda forma a mais prefervel,
porque voc vai guardar propagao em um fechamento ordens por si. O uso de funes comercial
tratada com mais detalhes a seguir neste livro.
Colocao e excluindo Pendentes encomendas
A ordem pendente requerida implica o fim abertas preo diferente do preo corrente de mercado. Para
colocar encomendas pendentes, utilizar funo OrderSend (). Use OrderDelete funo () para excluir
uma ordem pendente.
Enquanto se aguarda ordens SellLimit e BuyStop so colocadas a um preo superior ao
preo corrente de mercado, enquanto que BuyLimit e SellStop so colocadas a um
preo inferior ao preo corrente de mercado.

A limitao relacionada com a posio da ordem pendente deve ser colocada calculado com base no
preo de mercado para corrigir uma converso em um mercado na expectativa ordem judicial.
Enquanto se aguarda ordens BuyLimit, BuyStop, SellLimit e SellStop no pode ser
colocada a um preo mais prximo do preo de mercado do que a distncia mnima.
Por exemplo, para calcular o preo mnimo permitido para o fim BuyStop, voc deve adicionar o valor
mnimo de distncia para o mais recente conhecido Pergunte preo. Se StopLevel = 5, ento o preo
mnimo permitido para colocar a ordem pendente BuyStop far 1,3003 +0,0005 = 1,3008 (ver fig.
70). Isto significa que a ordem BuyStop podem ser colocados no atual momento em que o preo de
1,3008, ou a um preo mais elevado. Neste exemplo, BuyStop colocada em 1,3015, o que
perfeitamente admissvel.

Fig. 70. Enquanto aguarda as encomendas so colocadas a um preo inferior ou superior ao preo atual.
O preo solicitado de ordem pendente BuyStop 1,3015.
O preo solicitado de ordem pendente SellLimit 1,3012.
O preo solicitado de ordem pendente SellStop 1,2995.
O preo solicitado de ordem pendente BuyLimit 1,2993.

No exemplo acima, todas as encomendas pendentes foram colocados em zero no bar no momento
mostrado na fig. 70, enquanto que a distncia mnima para a colocao das encomendas feitas at 5
pontos. Ordem SellStop o mais prximo do preo de mercado. Neste caso, Lance = 1,3001 bem como
o preo do SellStop = 1,2995. Assim, a distncia entre a encomenda eo preo correcto das duas
apstrofo-way (Bid) de 6 pontos (1,3001 - 1,2995), ou seja, mais do que exige a distncia mnima.
Isto significa que, na abertura da ordem ( ou todas as outras ordens nesse exemplo), o comrcio pedido
foi "aprovado" pelo cliente e enviados para o terminal server. O servidor tambm verificado a sua
conformidade com as exigncias e decidiu executar o pedido para a colocao da ordem pendente
(ver Requisitos e Limitaes em Making Ofcios).
A posio de ordens stop acompanha a ordens pendentes tambm limitado pela distncia mnima:
As limitaes relacionadas posio de paragem encomendas pendentes de uma
ordem calculado com base no preo solicitado aberta na pendncia da ordem e no
tem nenhuma relao aos preos de mercado.
StopLoss e de uma encomenda pendente TakeProfit no podem ser colocados para
mais perto do que o preo solicitado pelo valor mnimo de distncia.
As posies de StopLoss e TakeProfit de encomendas pendentes no so limitados
pelo congelamento distncia.
Na fig. 71, podemos ver na pendncia SellLimit fim, a parar de ordens que no sejam mais perto do fim
solicitou preo possvel.Neste caso, o preo solicitado fim = 1,2944, StopLoss = 1,2949, TakeProfit =
1,2939. Na distncia mnima de 5 pontos, estes valores so bastante admissvel.

Fig. 71. Enquanto se aguarda a ordem com ordens de stop to prximo quanto possvel ao fim.
Neste exemplo, enquanto se aguarda despacho SellLimit foi inaugurado em 18:07. Voc pode ver na fig.
71 que, depois que o preo de mercado e, em seguida, atingiu o seu interromper cruzaram uma das
ordens, e depois caiu novamente. Este evento no influenciou a ordem pendente de qualquer forma:
uma ordem stop s pode fechar o fim do mercado, isto , torna-se eficaz logo que a ordem pendente
ser modificada em um mercado encomenda. Neste caso, enquanto se aguarda o despacho no seja
modificado em um mercado um (uma vez que o preo de lance no tenha chegado ao fim solicitou abrir
preo), de modo que o preo stop-fim atravessando este nvel, no resultou em qualquer alterao.

A limitao relacionada com a supresso das encomendas pendentes calculado com


base no preo de mercado aplicveis para corrigir modificao de uma ordem
pendente em um mercado um.
Enquanto se aguarda ordens BuyLimit, BuyStop, SellLimit e SellStop no pode ser
suprimido, se for solicitado a abrir o preo da encomenda est dentro do intervalo de

congelar a distncia entre o preo de mercado.


Ordem SellLimit pode ser suprimida no momento mostrado na fig. 71, j iniciada pelo cliente terminal,
apenas se o valor indicado neste momento igual ou inferior a 8 pontos. Neste caso, a parte superior do
pensionista do congelamento banda (a ser calculado para SellLimit) far: + = 1,2935 +0,0008 =
1,2943. O preo solicitado forma aberta torna 1,2944, ou seja, a ordem colocada fora da banda
congelar e pode ser eliminado. Se o corretor define o valor a mais de 8 pontos, ento a ordem pendente
SellLimit no pode ser suprimido eo cliente terminal rejeita o pedido comrcio.
Na pendncia da modificao encomendas em ordens de mercado
Enquanto aguarda as encomendas so automaticamente modificados em mercados em despachos do
servidor, assim no h funes so fornecidas para executar esta operao (ver Requisitos e Limitaes
em Making Trades ).
Enquanto se aguarda ordens BuyLimit e BuyStop mercado sejam alteradas para uns, o
ltimo caso conhecido Pergunte ao preo atinge o preo solicitado ordem pendente.
Pendentes SellStop ordens SellLimit e so modificados ao mercado queridos, se o
ltimo preo conhecido atinge lances solicitados at o fim dos preos.
Quanto s encomendas pendentes mostrado na fig. 70, pode-se dizer o seguinte.
Enquanto se aguarda despacho BuyStop mercado est em ordem Buy modificados, se o preo atual
Pergunte ao atingir o valor de 1,3015.
Enquanto se aguarda despacho SellLimit modificada em ordem mercado Sell, se o preo atual de lance
atingir o valor de 1,3012.
Pendentes SellStop ordem modificada em ordem mercado Sell, se o preo atual de lance atingir o valor
de 1,2995.
Enquanto se aguarda despacho BuyLimit mercado est em ordem Buy modificados, se o preo atual
Pergunte ao atingir o valor de 1,2993.
Os eventos subseqentes relacionados a essas ordens so mostrados nas Figuras 72-74.

Fig. 72. Modificao de encomendas pendentes no mercado queridos.

Na histria ainda, a 2 outras encomendas pendentes tambm foram modificadas em mercado queridos.

Fig. 73. Modificao de encomendas pendentes no mercado queridos.

Fig. 74. Modificados (de mercado) as ordens so exibidas na janela do terminal.


Observe que, Fig. 73 mostra a abertura da ordem Comprar 4210322 (a antiga ordem pendente
BuyStop). Como fcil de ver, as barras formadas em 18:55 no toque no preo de 1,3015. O preo
mais elevado no interior deste bar 1,3013. Ao mesmo tempo, a janela do terminal (Fig. 74) mostra que
o tempo da ordem pendente foi modificado em um mercado especfico dentro deste um bar, isto , em
18:55.
Aqui preciso salientar mais uma vez que o smbolo janela exibe apenas o preo mais baixo preo para
a histria das duas apstrofo-side, ou seja, que reflecte a histria de lance. Pergunte a histria no
exibido. Esta a razo pela qual voc pode pensar que a pendncia judicial foi modificada para o
mercado por um erro. No entanto, no h erro aqui, no presente caso. No momento, quando o preo de
lance foi igual a 1,3013, o preo Pergunte foi 1,3013 + 2 = 1,3015 (2 significa a disseminao de 2
pontos). Assim, o preo de mercado, ainda tocou a ordem requerida preo, e que resultou na alterao
automtica da ordem pendente em um mercado um. A ordem foi modificada sobre os lado do
servidor. Imediatamente aps isso, o servidor passou a informao acerca deste terminal para o cliente
que, por sua vez, que as informaes exibidas na janela tanto o smbolo (grfica) e na janela do terminal
(como um texto).
Semelhantes observaes dizem respeito alterao de ordem BuyLimit 4210411. Embora o grfico
mostrando o preo da toca ou est abaixo do preo da ordem pendente solicitou BuyLimit no 16:3716:39 e em 16:41 (Fig. 72), no fim do mercado aberto.Neste caso, o motivo para isso o mesmo: o
preo de mercado Perguntar no tocar na ordem solicitada preo. Porm, ele tocou nesse nvel nos
prximos bar, a 16:42. Este evento resultou na modificao da ordem pendente em um mercado um, de
forma BuyLimit na janela do smbolo foi substitudo por Buy, enquanto uma nova ordem no mercado
aparece na janela do terminal.
No exemplo acima, todas as encomendas foram efectuadas com zero ordens stop (que significa sem
deixar de encomendas). No entanto, a disponibilidade de contedo (diferente de zero) valores de ordens
stop no ir influenciar a alterao das encomendas pendentes no mercado queridos de forma alguma,

uma vez que s podem ser modificados, se o preo das duas apstrofo-way toca ou cruza a solicitadas
preo da ordem pendente.
A ordem pendente uma modificao em um mercado sem qualquer relao com as
ordens de stop apenso.
A ordem pendente pode ser aberta (modificado em um mercado um) a um preo que no condiz com o
preo solicitado aberta na pendncia da ordem. Isso pode acontecer em rpida mudana do preo de
mercado, ou seja, nas condies em que o preo mais conhecidos antes da abertura da encomenda no
tenha chegado ao preo solicitado, mas o prximo preo (na qual a ordem aberta) no coincide com o
forma aberta preo, mas isso est alm (Fig. 75).

a) preo gapped entre dois bares b) preo gapped dentro de um bar no seu formando
Fig. 75. Enquanto se aguarda uma ordem seja modificado em um mercado em um fosso.
Na fig. 75a, podemos ver uma possvel variao de abertura da ordem pendente BuyStop (ela mostra
duas posies da ordem - antes e depois da abertura, na realidade, voc pode ver, quer BuyStop
Comprar ou fim, mas no ambos). O mais recente dos preos antes de conhecer o preo saltou tinha
sido 1,9584. 19:15, alguma notcia foi publicada, o que resulta em que o smbolo preo tinha mudado
em um salto. O primeiro preo conhecido aps a notcia foi liberada 1,9615. Normalmente, os preos
saltam para cima ou para baixo, como resultado de importantes notcias. Nesses casos, o corretor no
pode abrir o seu fim, o preo solicitado, pois no so correspondentes preos no mercado no
momento. Neste caso, a ordem pendente BuyLimit foi colocada ao preo de 1,9590 a requerida, mas ela
abriu (modificado para o fim do mercado), ao preo de 1,9615. Este facto resultou da constatao de
que no tinha havido qualquer outra dentro do intervalo de preos 1,9584 a 1,9615.
Como resultado dos eventos considerados, o mercado foi aberto no fim Compre um preo que era de 25
pontos pior do que o colocou na pendncia de ordem BuyStop. Uma situao semelhante (que recebem
menos rentvel do que o esperado em ordem) pode ter lugar para o fim SellStop, se o preo saltou para
baixo. No entanto, se pendente fim BuyLimit ou SellLimit-se tambm defasagem de preos, o mercado
correspondente ordem pode ser aberta por um preo que melhor para o profissional que solicitou o
seu preo.
Importa igualmente notar que uma defasagem de preos (a diferena entre as duas cotaes mais
prximo que faz mais de um ponto) e no ocorre com freqncia e pode surgir a qualquer momento. Se
a defasagem de preos ocorre entre bares, ou seja, um preo muito diferentes rendimentos em Assinalar
o primeiro de uma nova barra, voc pode ver a defasagem de preos no preo grfico (Fig. 75a). No
entanto, se a defasagem de preos acontece dentro de um bar, no possvel detectar essa lacuna
visualmente (Fig. 75b). Neste caso, a diferena escondido dentro do bar (o candelabro). No entanto,
no possvel ajuizar sobre as cotaes histria dentro do bar apenas pela sua aparncia ou por
qualquer programa caractersticas disponveis (no entanto, possvel detectar o fosso usando um
programa aplicativo que Wold calcular a diferena entre os preos das citaes recebidas).

Modificao do mercado encomendas


Plataforma de negociao Metatrader 4 permite-lhe formar comrcio pedidos para modificar os nveis
dos preos de mercado e de encomendas pendentes.
Para modificar ordens de qualquer tipo, incluindo ordens de mercado, voc deve usar funo
OrderModify ().
Modificao de um mercado implica a mudana da ordem requerida deixar de ordens
de valores. Voc no pode alterar os preos no mercado aberto ordens.
Voc no pode alterar o preo de um mercado aberto fim, desde fim abertura um facto. Portanto, no
h qualquer mtodo de programao para fazer isso. A nica coisa que pode fazer com um mercado
ordem para fech-lo. A ordem do mercado pode ser fechada como resultado da execuo de um
pedido comercial formado por um comerciante ou por um programa, ou se o preo de mercado atinge o
preo de uma das ordens de stop.
StopLoss ordens e TakeProfit no podem ser colocados mais prximos do preo de
mercado do que a distncia mnima.
Uma ordem no pode ser modificado, se o preo da sua execuo StopLoss ou
TakeProfit varia dentro da distncia de congelar o preo de mercado.
Observe que a posio das ordens de stop um mercado limitado, como forma relacionadas com o
actual preo de mercado, mas ela no tem qualquer relao com a ordem abertas preo (ver Requisitos
e Limitaes em Making Ofcios). Isto significa que a alterao da ordem pode resultar em que as ordens
de stop so colocadas acima ou abaixo do preo no mercado aberto fim.
Vamos considerar um exemplo. Um mercado foi aberto antes do fim, as suas ordens de stop estando
mais prximos ao preo de mercado (fig. 69). Depois disso, o preo de mercado mudou (um aumento de
1 ponto). No momento, o mostrado na fig. 76, tornou-se possvel alterar o valor de TakeProfit. Ordem
Vender fechada, o mais tardar, conhecida preo Pergunte. A distncia entre Pergunte = 1,2990 o valor
anterior e TakeProfit = 1,2984 fez 6 pontos, ou seja, excedeu a distncia mnima permitida.Comerciante
(ou programa) formaram um comrcio solicitao para alterar o valor de TakeProfit, ou seja, para
aumentar este valor por 1 ponto. Isto resultou em uma tomada comrcio, alterando a posio da ordem
de parar o fim do mercado (o valor anterior de TakeProfit = 1,2984, o novo valor = 1,2985).
Se o pedido contido comrcio a fim Vender modifique a instruo para que o valor de qualquer das
ordens de stop estavam mais prximos do preo de mercado do que em Pergunte a distncia mnima,
esse comrcio pedido ser rejeitado pelo cliente terminal e do comrcio no seriam feitas.

Fig. 76. Uma forma modificada, as suas ordens de stop estando mais prximos dos preos do mercado.

A modificao da regra do mercado limita as ordens para parar de modo a aproximar o preo atual, mas
isso no limita a ordem para parar de distncia do preo. Essa a razo por que parar de ordens pode ser
colocado em qualquer distncia do preo actual, se esta distncia for maior do que limitar a distncia
(que, como a modificao da ordem momento, a ordem deixar de fora a congelar o valor determinado
pela banda). Na fig. 77, podemos ver o mesmo fim aps uma modificao mais: neste caso, interromper
as encomendas so bem fora da gama de limitar a distncia mnima.

Fig. 77. Uma forma modificada, as ordens de stop que so colocados para alm da distncia mnima.
Na pendncia da modificao encomendas
Para modificar qualquer fim tipos, incluindo as encomendas pendentes, usamos funo OrderModify ().
Modificao de uma ordem pendente implica a possibilidade de modificar os valores
definidos os preos de abertura da ordem pendente e pare suas ordens.
A limitao relacionada com a posio da ordem pendente a ser modificado
calculado com base no preo de mercado correta de se alterar a ordem pendente no
mercado um.
As limitaes relacionadas posio de paragem encomendas pendentes de uma
ordem calculado com base no preo solicitado aberta na pendncia da ordem e no
tem nenhuma relao aos preos de mercado.

Enquanto se aguarda ordens BuyLimit e BuyStop no podem ser colocados mais


prximos do preo de mercado do que em Pergunte a distncia mnima StopLevel.
Pendentes SellStop ordens SellLimit e no podem ser colocados mais prximos do
preo de mercado superior ao lance mnimo StopLevel distncia.
StopLoss / de uma encomenda pendente TakeProfit no podem ser colocados mais
perto da forma solicitada no aberto preo do que a distncia mnima StopLevel.

Enquanto se aguarda ordens BuyLimit e BuyStop no pode ser modificado, se o


requerido para abrir preo oscila dentro da distncia de congelar o preo de mercado
Pergunte.
Pendentes SellStop ordens SellLimit e no podem ser modificados, se o requerido para
abrir preo oscila dentro da distncia de congelar o preo de mercado de lance.
As posies de StopLoss e TakeProfit de encomendas pendentes no so limitados
pelo congelamento FreezeLevel distncia.

Por favor, note que o preo de uma encomenda pendente limitada em relao ao preo de mercado,
enquanto que a sua ordens stop so limitados pela requerida abertas at o fim de preo (ver Requisitos
e Limitaes em Making Ofcios).
Por exemplo, enquanto se aguarda despacho BuyLimit colocada com os seguintes parmetros: 1 =
preo solicitado. 2969, StopLoss = 1,2964, TakeProfit = 1,2974. O valor actual do preo do mercado
(aplicado para modificar a ordem pendente em um mercado um) Pea = 1,2983. Assim, a ordem
colocada a uma distncia de 14 pontos (1.2983-1.2969) a partir do preo de mercado, o que ultrapassa
de longe a distncia mnima permitida. As ordens so parar na distncia de 5 pontos a partir do preo
solicitado, o que no exceda a distncia mnima, de modo que admissvel.

Fig. 78. Enquanto se aguarda despacho BuyLimit com ordens de stop acompanha mais prximo do fim.
Se o profissional precisa de alterar o preo da ordem BuyLimit, ento, qualquer que seja o rumo que ele
ou ela se move em, neste caso, necessrio alterar simultaneamente a posio de paragem
correspondente ao fim (ou para apag-lo, ou seja, para definir valor zero para ele), tambm. Caso
contrrio, a distncia entre o fim eo seu fim paragem poder no vir a ser menor que o mnimo
permitido um. O comerciante decidiu modificar a ordem para que ele manteve a distncia entre a ordem
ea sua TakeProfit como 5 pontos, enquanto o valor de StopLoss permaneceu como era (Fig. 79).

Fig. 79. Modificado fim BuyLimit (o preo solicitado e ao nvel TakeProfit so alterados).
Se o profissional precisa para colocar ordem pendente BuyLimit to perto quanto possvel do preo de
mercado, ento nesse caso (Fig. 80), o valor mnimo permitido do preo solicitado Pergunte-5points =
1.2985-0.0005 = 1,2980. Neste exemplo, parar as ordens so colocadas fora do limite mnimo de
distncia.

Fig. 80. Modificado fim BuyLimit mais prximo do preo de mercado.


Apndice chamado Requisitos e Limitaes na Trades Tornar contm um resumo tabela que especifica
os valores de uma correspondncia biunvoca citar, que so utilizados para a abertura, o encerramento
ou a modificao das encomendas, bem como outros valores referncia que limitam a realizao de
negcios.
Abertura e colocao encomendas
Comrcio pedidos de abertura e colocao encomendas pendentes so formadas utilizando a funo
OrderSend ().
Funo OrderSend ()
int OrderSend (string smbolo, int cmd, duplo volume, duplo preo, int
derrapagem, a dupla stoploss,
takeprofit dupla, string comentrio = NULL, magia int = 0, datetime expirao =
0, cor arrow_color = CLR_NONE)
(observe que aqui e mais adiante, nos referimos a funo header, e no a um exemplo de como
usar funo chamada em um programa).
Vamos considerar em mais detalhes o que essa funo consiste em.
OrderSend o nome da funo. A funo retorna o nmero de bilhete ( "ticket" o nmero exclusivo
de uma ordem) que est associado ao fim do comrcio por servidor, ou -1, se o comrcio pedido foi
rejeitado pelo servidor quer o cliente ou o terminal. A fim de obter informaes sobre os motivos da
rejeio do pedido do comrcio, deve usar a funo GetLastError () (a seguir iremos considerar alguns
dos erros mais comuns).
smbolo o nome da negociados segurana. Cada smbolo corresponde com o valor de uma varivel
string. Por exemplo, para o par de moeda euro / dlar, este valor "EURUSD". Se a ordem estar
aberto para um smbolo perdoadas, ento este parmetro pode ser especificado explicitamente:
"EURUSD", "EURGBP", etc, no entanto, se voc for usar o Consultor Especialista na janela de qualquer
outro smbolo, voc pode utilize a funo padro Symbol (). Esta funo retorna uma string valor que
corresponde com o nome do smbolo, na janela de onde o EA ou script est sendo executado.
cmd o tipo de operao. O tipo de operao pode ser especificado como uma constante predefinida
ou o seu valor, e de acordo com o tipo de comrcio.
volume a quantidade de lotes. Por ordens do mercado, tem de se verificar a conta para a
suficincia. Para encomendas pendentes, a quantidade de lotes no limitado.
o preo o preo abertas. especificado de acordo com os requisitos e limitaes aceito para fazer
trades (ver Despacho Caractersticas e normas relativas elaborao de Ofcios). Se o preo requerido

para a abertura do mercado de encomendas no foi encontrada no preo rosca ou se ela tem bastante
desatualizado, o comrcio pedido rejeitado. No entanto, se o preo est desatualizado, mas presente
no segmento preo e se o seu desvio em relao ao actual preo oscila dentro do valor de derrapagem,
este comrcio pedido ser aceite pelo cliente e enviados para o terminal server comrcio.
derrapagem o mximo permitido desvio da ordem requerida abrir preo a partir do preo de mercado
para mercado encomendas (pontos). Esse parmetro no processada para a colocao de encomendas
pendentes.
stoploss solicitado a fechar preo que determina a perda mxima permitida para o dado do
comrcio. definida de acordo com os requisitos e limitaes aceito para fazer trades (ver Despacho
Caractersticas e normas relativas elaborao de Ofcios,Requerimentos e Limitaes em Making
Ofcios).
takeprofit solicitado a fechar preo que determina o mximo de lucro para o comrcio dado.
definida de acordo com os requisitos e limitaes aceito para fazer trades (ver Despacho Caractersticas
e normas relativas elaborao de Ofcios,Requerimentos e Limitaes em Making Ofcios).
comentrio o texto do despacho comentrio. A ltima parte do comentrio pode ser modificado pelo
comrcio servidor.
Magia o nmero mgico da ordem. Pode ser usado como o identificador de usurio definido
ordem. Em alguns casos, a nica informao que ajuda voc a descobrir mais sobre o que a ordem
pertence a um ou outro programa que abriu ela. O parmetro definido pelo usurio, seu valor pode ser
a mesma ou outra do que o valor deste parmetro de outras ordens.
vencimento a data em que expira ao fim. To logo este dia chegar, enquanto se aguarda a ordem
ser fechada automaticamente do lado do servidor. Em alguns servidores comerciais, pode haver uma
proibio de fixao da data de expirao para encomendas pendente. Neste caso, se voc tentar definir
um valor diferente de zero do parmetro, o pedido ser indeferido.
arrow_color a cor da abertura seta no grfico. Se esse parmetro est ausente ou se o seu valor
CLR_NONE, abrindo a seta no mostrado no grfico de todo.
Em alguns servidores comerciais, pode haver um limite definido para o montante total das encomendas
pendentes e abertos. Se este limite for excedido, qualquer pedido que implica a abertura comercial no
mercado uma ordem ou a colocao de uma ordem pendente ser rejeitada pelo servidor de trocas.

Abertura ordena mercado


A funo OrderSend () pode no incio parecem ser demasiado complicado. Contudo, todos os parmetros
considerados so bastante simples, til e pode ser utilizado com sucesso em sua negociao. A fim de
ver isso por ns mesmos, vamos considerar a variao mais simples de como o comrcio OrderSend
funo () usado para abrir um mercado encomenda.
Primeiro de tudo, devemos notar que a funo OrderSend () tem parmetros predefinidos (ver Funo
Chamada e Funo Descrio e Operador de "regresso"). Isto significa que esta funo pode ser usada
em um modo simplificado usando o mnimo exigido conjunto de parmetros. Esses parmetros so os
seguintes:
smbolo um parmetro necessrio, porque precisamos de saber para onde a abrir o fim. Deixa o
nosso script implicam a possibilidade de abrir uma janela do smbolo em qualquer ordem. Nesse caso,
vamos substituir a funo padro Symbol () como esse parmetro;

cmd - por exemplo, vamos abrir uma Comprar fim; neste caso, vamos precisar parmetro OP_BUY;
Volume - podemos especificar qualquer valor permitido pelas regras, vamos abrir uma pequena
encomenda, por exemplo, de 0,1 lote;
Preo - a abrir preo para a ordem Comprar Pergunte preo;
derrapagem normalmente especificada como pontos 0-3. Vamos precisar 2;
stoploss - ordens de stop podem ser colocados a uma distncia que no mais estreita do que a
distncia mnima permitida, normalmente 5 pontos (ver Requisitos e Limitaes em Making
Trades); vamos parar de colocar encomendas, a uma distncia de 15 pontos de fechar o preo, a saber:
Oferta - 15 * Point;
takeprofit - vamos parar de colocar encomendas, a uma distncia de 15 pontos de fechar o preo, a
saber: Lance + 15 * Point;
Abaixo est o script mais simples, simpleopen.mq4, que se destina abertura Comprar um fim:
//------------------------------------------------ -------------------/ / Simpleopen.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------int start () / / Especial funo start ()
(/ / Abertura COMPRAR
OrderSend (Symbol (), OP_BUY, 0,1, Ask, 3, Bid - Ponto 15 *, * Ponto de
lance + 15);
retorno; / / Sair start ()
)
//------------------------------------------------ -------------------Se voc lanar esse script de execuo, ele vai trabalhar, na maioria dos casos. O script consiste de uma
funo especial que contm a ordem de abertura funo OrderSend () eo operador "regresso". Vamos
descrever a execuo de programa algoritmo linhas e eventos relacionados a isso.
1. O usurio tem o script anexado ao smbolo janela, arrastando o script nome com o boto do mouse a
partir do "Navigator" janela de terminal do cliente na janela do smbolo, para o qual ele ou ela pretende
abrir um mercado de 0,1 para Comprar lote e com ordens de stop que se encontram a uma distncia de
15 pontos entre o preo de mercado.
2. No momento do engate do script para a janela do smbolo, o cliente terminal passar o controle
(apenas pelo lanamento) ou a funo especial iniciar () (brevemente aqui, devemos lembrar que o
incio () de um script lanado no momento de prender o script para a janela do smbolo, considerando
que o incio () de uma AE lanada no momento em que a aproximao de rendimentos para assinalar
o smbolo).
3. No quadro da execuo da funo especial start (), o controlo passado para a linha que chama o fim
abertura funo:
OrderSend (Symbol (), OP_BUY, 0,1, Ask, 3, Bid - Ponto 15 *, * Ponto de
lance + 15);
Antes da execuo desta funo, o programa calcula os valores de todos os parmetros formais:
3.1. Ns acompanha o script para a janela de Eur / USd.In presente caso, a norma funo Symbol () ir
retornar o valor da seqncia EURUSD.
3.2. Deixe Pergunte Bid = = 1,2852 e 1,2850, a partir do momento de pr essa funo.

3.3. O valor de StopLoss, neste caso, ser: 1.2850-15 * 0,0001 = 1,2835, enquanto que TakeProfit =
1,2865.
4.Execution da funo OrderSend ():
4.1. A funo comercial formado um pedido de abertura de um pedido neste sentido e passaram para o
cliente de terminal.
4.2. A funo passou o controle para o cliente terminal em simultneo, com o passar do comrcio
pedido, pelo que o programa foi interrompido execuo.
4.3. O cliente terminal controlado o comrcio recebeu pedido. Que ele no detectar qualquer parmetros
incorretos, por isso ele enviou o pedido para o servidor.
4.4. O servidor recebeu o comrcio pedido, verificou-lo, no detectou quaisquer parmetros incorretos, e
decidiu executar o pedido.
4.5. O servidor executa o pedido, fazendo uma operao em seu banco de dados e enviou informaes
sobre o que executa a solicitao do cliente terminal.
4.6. O terminal cliente que recebeu a informao sobre o comrcio ltimo pedido foi executado, este
evento exibido na janela do terminal e na janela do smbolo, e devolveu o controle para o programa.
4.7. Depois de recebido o controle, o programa continuou funcionando a partir da localizao, o controlo
a partir do qual j tinha sido transferido para o cliente terminal (e s quais tinha sido devolvida mais
tarde).
Note que no foram realizadas aes no programa comea a partir do passo 4.2
atravs passo 4.7 - o programa estava no modo de espera de resposta do servidor.
5. O controle do programa passado para o prximo operador - o operador "regresso".
6. A execuo do operador "regresso" resulta em sair da funo start () e, portanto, no encerramento da
execuo do programa (que deve ser lembrado que scripts concluir o seu trabalho depois de terem sido
executadas) - o controle retornado para o cliente terminal.
Assim, o script tem cumprido a sua finalidade: Comprar com o intuito parmetros predefinidos constitui
aberta. A utilizao de scripts muito conveniente, se voc precisa executar um pequeno tempo de uma
operao, neste caso, o uso de um script bastante razovel. De acordo com o passo 4.6., O
comerciante pode ver a ordem na tela.

Fig. 81. Colocados por ordem script simpleopen.mq4.


Os eventos no so ordenados conforme indicado acima. possvel que o comrcio pedido rejeitado
pelo cliente ou pelo terminal server. Vamos tentar fazer algumas experincias, por exemplo, mudar o

smbolo denominao: especificar "GBPUSD" explicitamente (isto perfeitamente admissvel). Ns


vamos obter um programa com o campo de utilizao limitada:
int start () / / Especial funo start
(/ / Abertura COMPRAR
OrderSend ( "GBPUSD", OP_BUY, 0,1, Ask, 3, Bid - Ponto 15 *, * Ponto de
lance + 15);
retorno; / / Sair start ()
)
Vamos lanar o script na mesma janela do smbolo cmbio Euro / Dlar. O script foi destinada a abrir
uma janela no fim de GBP / USD. No entanto, depois de ter sido anexada janela do Eur / USD,
nenhuma ordem foi aberta na janela de GBP / USD.
Uma desvantagem de tais programas a sua limitao funcional. Neste caso, uma vez que acompanha o
script para a janela do smbolo, o utilizador est apenas espera de ordem abertura. No entanto, o
intuito no aberto. O usurio no tem conhecimento do motivo por que razo to: ou ele causado
pelo algoritmos um erro no programa ou o cdigo comercial pedido est "perdido" pelo caminho para o
servidor, ou o comrcio pedido foi rejeitado pelo cliente terminal muito tempo atrs (pensava que o
usurio ainda est espera), ou existe outro motivo.
A fim de proporcionar ao usurio (e, o que tambm muito importante, o programa) com as
informaes sobre os eventos relacionados com a execuo do pedido comrcio, necessrio tratar os
erros.
Erro de Processamento
Uma importante propriedade do cliente terminal que, se ocorrer um erro durante a execuo de um
aplicativo, o cliente terminal no pode parar a execuo do programa. Erros so geralmente causados
pela imperfeio do algoritmo usado na inscrio. Em alguns casos, os erros so causados por alguns
externos (como as relacionadas com o programa) fatores. Os internos so causas de erros quaisquer
violaes dos requisitos MQL4 ou das regras de negociao, por exemplo, utilizando preos invlido. As
causas externas so aquelas que no estejam relacionadas com o programa aplicativo, por exemplo,
conexo interrompida.
Se ocorrer um erro na execuo de um programa, o programa continuar sendo executado, ao passo
que o cliente terminal vai gerar o cdigo de erro valor disponvel para o programa atravs da funo
GetLastError ().
Funo GetLastError ()
int GetLastError ()
A funo retorna o cdigo do erro ocorrido recentemente, em seguida, o valor da varivel especial
Last_Error que armazena o cdigo do ltimo erro ser zeroized. A posterior GetLastError () chamada ir
retornar 0.
A seguir, vamos identificar todos os erros que ocorrem por esse cdigo. Vrios erros podem ocorrer
durante a execuo de um programa; funo GetLastError () nos permite obter o valor do cdigo para
apenas um deles, o mais tardar erro, por isso que todas as vezes em que precisamos dessa
informao, recomendado usar funo GetLastError () Imediatamente aps o programa linhas, em que
o erro pode ocorrer.
Erro 130. Invlido stop encomendas
O ltimo considerado script no analisar erros, de modo que o usurio permanece ignorante sobre os

resultados da execuo do despacho de abertura de funo. Na variao simples de usar a funo


GetLastError (), o programa pode analisar um erro e basta informar o usurio sobre isso. Se voc lanar
script confined.mq4 para execuo na janela de cmbio Euro / Dlar, um erro ir ocorrer.
//------------------------------------------------ ------------------------/ / Confined.mq4
/ / O cdigo deve ser usado apenas para fins educacionais
.
//------------------------------------------------ ------------------------int start () / / Especial funo start
(/ / Abertura COMPRAR
OrderSend ( "GBPUSD", OP_BUY, 0,1, Ask, 3, Bid - Ponto 15 *, * Ponto de
lance + 15);
Alerta (GetLastError ()); / / Mensagem de erro
retorno; / / Sair start ()
)
//------------------------------------------------ ------------------------Acrescentou apenas um, mas muito informativas em linha este script:
Alerta (GetLastError ()); / / Mensagem de erro
Funo GetLastError () retorna o cdigo do ltimo erro, que Alert () usado para exibir esse valor na
tela. Aps o scriptconfined.mq4 foi anexada janela do smbolo cmbio Euro / Dlar, o script ser
executado, o que resultar em que o usurio ver a seguinte mensagem:

Fig. 82. Cdigo de erro obtidas durante a execuo de scripts confined.mq4 no EUR / USD janela.
Voc pode encontrar nos apndices cdigos de erros que podem ocorrer na execuo de um
programa. Neste caso, o erro 130 (invlido stop orders) ocorreu. Isto significa que os valores dos
parmetros formais utilizados na funo OrderSend () no cumpram os limites especificados
nos Requisitos e Limitaes em Making Trade. Mediante uma viso mais prxima, podemos ver o motivo
que causou o erro: os valores actuais de mercado e preos de lance Pergunte so tomadas a partir da
janela do smbolo, para o qual o script est anexado, ou seja, a partir da janela de cmbio Euro /
Dlar. No entanto, estes valores so utilizados para formar um pedido de comrcio GBP / USD. Como
resultado, ao preo actual de GBP / USD, Pergunte = 1,9655, o valor de TakeProfit para o recminaugurado mercado fim acaba por ser igual a (para cmbio Euro / Dlar Bid = 1,2930) 1,2930 +15 *
0,0001 = 1. 2945, que consideravelmente inferior ao valor mnimo permitido, ou seja, invlido.
Neste caso, um erro ocorreu algortmica. A fim de corrigir isso, voc deve usar os valores corretos de
preos smbolo. Voc pode obter esses valores usando a funo MarketInfo
(). Script improved.mq4 ordens de mercado que se abre para GBP / USD pode ser iniciado em qualquer

janela smbolo:
//------------------------------------------------ ----------------------------/ / Improved.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ ----------------------------int start () / / Especial funo start
(
= MarketInfo lance duplo ( "GBPUSD", MODE_BID); / / Pedido de o valor do
lance
= MarketInfo perguntar duplo ( "GBPUSD", MODE_ASK); / / Pedido de o valor
da Pea
duplo ponto MarketInfo = ( "GBPUSD", MODE_POINT); / / Pedido de Ponto
/ / Abertura COMPRAR
OrderSend ( "GBPUSD", OP_BUY, 0,1, pergunte, 3, lance - Ponto 15 *, + 15 *
compra Point);
Alerta (GetLastError ()); / / Mensagem de erro
retorno; / / Sair start ()
)
//------------------------------------------------ ----------------------------O erro acima no ocorre na execuo desse script, de modo a sua execuo ir resultar em que mostra
o correspondente mensagem: 0 (zero). Isto significa que a funo GetLastError () retornou o valor de 0,
ou seja, no foram detectados erros na execuo do comrcio pedido pelo cliente terminal.
Vamos considerar tambm alguns outros erros comuns. Por isso, vamos voltar ideia de abrir uma
ordem usando um script na mesma janela, para o qual o script est anexado.
Erro 129. Preo invlido
Em alguns casos, um simples erro ocorre - o valor errado das duas apstrofo maneira como est
especificado o preo abertas.Comprar ordens so conhecidas no mercado (ver Requisitos e Limitaes
em Making Ofcios), a ser inaugurado em Pergunte ao preo. Abaixo est mostrado o que acontece se,
por engano, especificar o preo de lance no script mistaken.mq4:
//------------------------------------------------ -----------------------/ / Mistaken.mq4
/ / O cdigo deve ser usado apenas para fins educacionais
.
//------------------------------------------------ -----------------------int start () / / Especial funo start
(/ / Abertura COMPRAR
OrderSend (Symbol (), OP_BUY, 0,1, Lance, 3, Bid - Ponto 15 *, * Ponto de
lance + 15);
Alerta (GetLastError ()); / / Mensagem de erro
retorno; / / Sair start ()
)
//------------------------------------------------ -----------------------Antes de enviar o pedido ao comrcio do servidor, o cliente terminal analisa se os valores do preo
solicitado e obedecer s ordens de stop valores permitidos. Durante esta verificao, solicitou a abertura
de vista dos preos ser detectado como invlido, o cliente assim o terminal no vai enviar o comrcio
pedido para o servidor para execuo, ea funo GetLastError () retornar o valor de 129
(consulte Cdigos de erro). A execuo do script ir resultar no surgimento da correspondente

mensagem de erro:

Fig. 83. Erro 129 (preo vlido) na execuo de mistaken.mq4.

Erro 134. Sem dinheiro suficiente para fazer um comrcio


Resultado semelhante (erro 134) ser obtida, se no h dinheiro suficiente na conta gratuita para abrir
uma ordem. Voc pode saber sobre a quantidade de dinheiro necessria para abrir gratuitamente 1 lote
de compra de cada smbolo utilizando a funo MarketInfo (symbol_name, MODE_MARGINREQUIRED).
O tamanho padro de um lote para o mesmo smbolo pode variar em diferentes
centros que tratam.
A quantidade necessria de bens livres para a abertura de um lote-ordem inversamente proporcional
quantidade de prestada a alavanca. Ao mesmo tempo, o custo de 1 ponto em divisas para o depsito de
um smbolo no diz respeito alavancagem prestados.
Tabela 3. Possveis combinaes de 1-lote 1-ponto Custo e custo (depsito moeda E.U. dlar).
Lidar Center 1
Comprar Vender
1pt

Lidar Center 2
Comprar Vender
1pt

EUR /
1296,40 1296,20 10,00 1296,50
USD
GBP / USD 1966,20 1966,00 10,00 1376,48
AUD /
784,40 784,20 10,00 1569,20
USD
USD / JPY 1000,00 1000,00 8.29 1000,00
USD / CHF 1000,00 1000,00 8.02 1000,00
EUR / CHF 1296,40 1296,20 8.02 1296,35
Os preos so indicados como de 16.12.2007.

Lidar Center 3
Comprar Vender
1pt

1296,20

10,00

1000,00 1000,00

10,00

1376,20

7,50

1000,00 1000,00

10,00

1568,40

20,00

1000,00 1000,00

10,00

1000,00
1000,00
1296. 35

8.29
8.02
8.02

1000,00 1000,00
1000,00 1000,00
1000,00 1000,00

8.29
8.02
8.02

Vamos examinar brevemente alguns mtodos comuns de clculo do custo do lote 1 e de 1 ponto.
Lidar Center 1 (mais comum)
Para os smbolos que tm dlares reciprocamente, o custo de 1 lote igual ao preo corrente da
correspondente citao, em ambos os sentidos, multiplicado por 1000, enquanto que o custo de 1 ponto
igual a US $ 10.
Para os smbolos que tm os seus dlares como numerador, o custo de 1 lote igual a US $ 1000,00,

enquanto que o custo de 1 ponto inversamente proporcional cotao actual e igual a 1 / (Bid). Por
exemplo, para USD / CHF, em lance = 1,2466, o custo de 1 ponto 1 / 1. 2466 = 8,02.
Para atravessar taxas, o custo do lote 1 calculada da mesma forma que o do numerador moeda,
enquanto o custo de 1 ponto calculada da mesma forma que para que o denominador moeda. Por
exemplo, para EUR / CHF, o Custo do lote 1 129,40 (como, por EUR / USD), enquanto que o custo do
lote 1 8,02 (como por USD / CHF).
Lidar Center 2
Em alguns centros que tratam, considerando-se a mesma regra de clculo de custos, os valores dos
custos pode ser diferente para alguns smbolos. Por exemplo, o custo de 1 lote eo custo de 1 ponto pode
ser aumentada ou diminuda proporcionalmente.Por exemplo, este fator pode ser 0,75, para GBP / USD,
que 2,0 para AUD / USD. A representao dos valores custo no resultar em qualquer mudana
econmica, em tais casos, voc s tem de considerar este recurso especial ao calcular os custos de suas
ordens. Voc tambm deve prestar ateno ao fato de que o lote 1-custos de compra e venda de activos
na cruz taxas so as mesmas.
Lidar Center 3
tambm existem centros que tratam definir o custo do lote 1, R $ 1000,00 por qualquer smbolo. Ao
mesmo tempo, o custo de 1 ponto permanece proporcional ao preo corrente. Isto implica uma
configurao especial para alavancar cada smbolo.
1-ponto Custo de todos os smbolos que so cotados como no relacionados com
USD semper mudanas proporcionalmente ao custo do smbolo especificado
mutuamente.
Geralmente, no podem existir outros princpios de construo de valores custo. escusado ser dizer
que, antes de comear a verdadeira negociao, voc deve encontrar-se sobre o mtodo de clculo para
qualquer tratamento especfico center e considerar este mtodo na sua codificao.
Margem Livre
Na codificao, muito importante considerar o princpio da livre formao de activos. Margem livre
(ativo) a quantidade de dinheiro que est disponvel para fazer negcios.
Vamos considerar um exemplo. Deixe Saldo ser 5000,00, no h abertura ordena no terminal. Vamos
abrir uma ordem de 1 lote Comprar em lidar center 3. A seguinte regra indicado no tratamento center
3:
Se diferentemente ordens so direcionadas mercado aberto para um smbolo, o
menor custo de um integrado direco-encomendas liberado para comrcio e
aumenta o montante de activos livres (esta regra no aplicvel a todos os centros
que tratam).
A janela do terminal ir mostrar as informaes sobre a forma aberta. Observe que a margem torna
1000,00, -30,00 fim lucrativo, portanto, o montante dos activos livres (margem livre) faz 5000-1000-30
= 3970,00:

Fig. 84. Comprar no fim da janela do terminal.


Vender aps uma ordem do mesmo valor, foi aberta, livre margem de aumento. Integrado O menor
custo de uma direco-mercado d 1000.00 encomendas, pelo que a margem livre vai aumentar em
1000,00. Na fig. 85, voc pode ver a situao de forma diferente quando as encomendas dirigidas custar
o mesmo valor, de modo a totalidade da soma das ordens de custos liberado para negociao.

Fig. 85. Comprar e Vender encomendas na janela do terminal.


Vender aps uma ordem de menor custo, foi aberta, livre margem aumentar, tambm. Nesse caso, o
menor custo de uma integrados-direo do mercado torna 700,00 encomendas, pelo que a margem livre
vai aumentar em 700,00, enquanto que a margem torna o diferena entre os custos integrados de
encomendas dirigidas de forma diferente (Fig. 86).

Fig. 86. Comprar e Vender encomendas na janela do terminal.


Se uma ordem Vender mais de 0,1 lote aberto (custo 100,00), o menor custo de um integrado
direco-encomendas do mercado torna 700,00 + 100. 00 = 800,00. Assim, a margem (em comparao
com a situao em que apenas uma ordem Comprar aberto) diminui em 800,00. Em comparao com
a situao mostrada na Fig. 86, a margem diminui, enquanto que os aumentos de capital por 100,00
(veja fig. 87).

Fig. 87. Comprar e Vender encomendas na janela do terminal.


Margens livre mostrado na fig. 86 e fig. 87 diferem umas das outras por mais de 100,00, j que o lucro
da abertura ordena integrada mudou com a mudana no preo atual (a diferena torna 8,00).

Se fizermos com manipulaes semelhante em outro centro que tratam, fcil ver que a ordem acima
de formar o valor da margem livre no mantida. Por algumas centers lidar com a seguinte regra
eficaz:
Abertura do mercado quaisquer ordens no libera o capital prprio ou aumentar a
margem livre.Abertura do mercado de encomendas aumenta o capital prprio no
montante que excede o custo integrado de forma diferente no mercado ordens
dirigidas para um smbolo (a regra no se aplica em todos os centros que tratam).
Por exemplo, se voc j foi aberta uma ordem de 4 lotes para Comprar USD / JPY em lidar center 2, os
montantes de fundos prprios e margem livre no mudar a abertura de um lote 4-Vender ordem.

Fig. 88. A presena das ordens dirigidas de forma diferente no libera eqidade.
Pode fazer clculos para saber se a atual capital prprio suficiente para a abertura de uma
ordem. Voc tambm pode usar a funo AccountFreeMarginCheck () que retorna o valor da margem
livre para permanecer no mercado aps a abertura de uma ordem com certa quantidade de lotes por um
determinado smbolo. Se o valor devolvido for igual ou superior a 0, h dinheiro suficiente na conta. Se
for inferior a 0, a ordem deste volume para este smbolo e no pode ser aberta, o cliente terminal ir
retornar erro 134.
A fim de conhecer as condies oferecidas pelo centro tratam eo montante da margem livre exigido para
a abertura de um despacho com o volume do lote 1, voc pode usar um script simples, conditions.mq4:
//------------------------------------------------ ------------------------/ / Conditions.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ ------------------------int start () / / Especial funo start
(
Alerta (Symbol (), "Vender =", AccountFreeMargin () / / Na venda
- AccountFreeMarginCheck (Symbol (), OP_SELL, 1));
Alerta (Symbol (), "Comprar =", AccountFreeMargin () / / Ao comprar
- AccountFreeMarginCheck (Symbol (), OP_BUY, 1));
retorno; / / Sair start ()
)
//------------------------------------------------ ------------------------Aqui, a expresso de
AccountFreeMargin () - AccountFreeMarginCheck (Symbol (), OP_SELL, 1)
nos permite calcular a diferena entre a margem disponvel livre e gratuito margem que permanecer
aps a abertura da ordem.

Se comearmos este script para efeitos de execuo, quando no existirem no mercado ordens do
terminal, podemos obter a quantidade necessria de equidade actualmente a estar disponveis e
suficientes para a abertura de um despacho com o volume do lote 1 para a compra e de venda:

Fig. 89. Lote 1-custo para os diferentes smbolos, obtida usando conditions.mq4.
Se vamos lanar o script conditions.mq4 para execuo na janela do smbolo, para os quais existem
ordens de mercado aberto, podemos obter outros valores, isso depende dos mtodos de clculo aceites
em um ou outro tratamento center.
Outros erros e Funo MarketInfo ()
Existem outras limitaes relacionadas determinao dos valores dos parmetros da funo OrderSend
(). Este o valor mximo e mnimo para o preo etapa, o mximo eo mnimo valor despacho preo, etc
A utilizao da funo MarketInfo () permite-lhe obter informaes sobre diversos smbolos que so
mostrados na janela "Market Watch" do cliente terminal.
Funo MarketInfo ()
MarketInfo dupla (

string smbolo, tipo int)

A funo retorna vrias informaes sobre smbolos listados na janela "Market Watch" do cliente
terminal. Peas de informao sobre o atual smbolo so armazenadas em variveis previamente
definidas.
Parmetros:
smbolo - o nome de um smbolo;
Tipo - pedido identificador que determina o tipo de informao que deve ser devolvido. Pode ser
qualquer valor desses identificadores do pedido (ver Funo MarketInfo Identifier).
Alguns erros podem ocorrer para as razes do lado do servidor. Por exemplo, nas condies transientes
de preos, o seu corretor pode aumentar a distncia mnima que limita colocao de ordens de paragem
e de encomendas pendentes. Alm disso, em um mercado calmo, o corretor pode diminuir esta distncia
novamente. Assim, os valores de alguns parmetros podem ser alteradas a qualquer momento.
Para o programa para operar em uma forma estvel, com a quantidade mnima de pedidos rejeitados,
voc deve atualizar os parmetros de informao ambiental utilizada pelo programa utilizando as
funes MarketInfo () e RefreshRates () antes de executar a funo OrderSend ().

Um exemplo de um script simples que abre uma ordem Comprar custando 35% da
margem livre, com alguns valores predefinidos de ordens stop (openbuy.mq4).

//------------------------------------------------ -----------------------------/ / Openbuy.mq4


/ / O cdigo deve ser usado apenas para fins educacionais
.
//------------------------------------------------ ------------------------- 1 -int start () / / Especial funo start
(
Dist_SL int = 10; / / SL Preset (pt)
Dist_TP int = 3; / / Preset TP (pt)
Prots duplo = 0,35; / / Percentagem da margem livre
Symb seqncia = Simbolo (); / / Smbolo
//------------------------------------------------ ------------------------- 2 -while (true) / / ciclo que se abre uma ordem
(
int Min_Dist = MarketInfo (Symb, MODE_STOPLEVEL); / / Min. distncia
Min_Lot duplo = MarketInfo (Symb, MODE_MINLOT); / / Min. volume
Etapa dupla MarketInfo = (Symb, MODE_LOTSTEP); / / Passo a mudana lotes
Livre AccountFreeMargin duplo = (); / / Margem Livre
One_Lot duplo = MarketInfo (Symb, MODE_MARGINREQUIRED); / / Custo por 1
lote
//------------------------------------------------ -------------------- 3 Lote duplo = MathFloor (* Livre Prots
One_Lot
Passo) * Etapa; / / Lots
if (Lot <Min_Lot) / / Se for inferior a permitida
(
Alerta ( "No dinheiro suficiente para", Min_Lot, "lotes");
break; / / Sair ciclo
)
//------------------------------------------------ -------------------- 4 if (Dist_SL <Min_Dist) / / Se for inferior a permitida
(
Dist_SL = Min_Dist; / / Definir o permitido
Alert ( "O aumento da distncia do SL =", Dist_SL, "pt");
)
SL = dupla Oferta - Point Dist_SL *; / / Solicitado preo de SL
//------------------------------------------------ -------------------- 5 if (Dist_TP <Min_Dist) / / Se for inferior a permitida
(
Dist_TP = Min_Dist; / / Definir o permitido
Alerta ( "
Aumentou a distncia do TP = ", Dist_TP," pt ");
)
TP = dupla Dist_TP Lance + * Point; / / Solicitado preo do TP
//------------------------------------------------ -------------------- 6 Alerta ( "A solicitao foi enviada para o servidor. Aguardando resposta
..");
int = OrderSend bilhete (Symb, OP_BUY, Lot, Ask, 2, SL, TP);
//------------------------------------------------ -------------------- 7 if (bilhete> 0) / / J est!:)
(

Alerta ( "Compre fim Aberto", ticket);


break; / / Sair ciclo
)
//------------------------------------------------ -------------------- 8 int Erro = GetLastError (); / / Falha: (
switch (erro) / / Overcomable erros
(
caso 135: Alerta ( "O preo foi alterado. Repetindo ..");
RefreshRates (); / / Atualizao de dados
continuar; / / Na prxima iterao
caso 136: Alerta ( "No preos. espera de um novo carrapato ..");
while (RefreshRates () == false) / / At um novo carrapato
Sono (1); / / Ciclo de atraso
continuar; / / Na prxima iterao
caso 146: Alerta ( "Trading subsistema est ocupado. Repetindo ..");
Sleep (500); / / Soluo Simples
RefreshRates (); / / Atualizao de dados
continuar; / / Na prxima iterao
)
switch (erro) / / Crtica erros
(
case 2: Alerta ( "Common erro.");
break; / / Sair 'mudar'
caso 5: Alerta ( "desactualizao verso do cliente de terminal.");
break; / / Sair 'mudar'
caso 64: Alerta ( "A conta est bloqueada.");
break; / / Sair 'mudar'
caso 133: Alerta ( "Trading proibido");
break; / / Sair 'mudar'
default: Alerta ( "Ocorreu erro
", Erro); / / Outras alternativas
)
break; / / Sair ciclo
)
//------------------------------------------------ ------------------------- 9 -Alert ( "O script j completou suas operaes --------------------------");
retorno; / / Sair start ()
)
//------------------------------------------------ ------------------------- 10 -O script consiste de uma funo especial iniciar () (blocos 1-10). No bloco 1.2, os valores so fixados,
segundo o qual a ordem deve ser aberto. O bloco 2.9 representa ciclo enquanto operador (), em que
todos os clculos necessrios so realizados. Este ciclo est includo no cdigo para permitir que o
programa faa vrias tentativas para abrir o fim. No bloco 2.3, as variveis de ambiente so
atualizados. Nos blocos 3-4-5-6, a quantidade de lotes e os preos solicitados so calculadas as ordens
de stop. No bloco 7-8-9, os erros so processados. No bloco 9.10, a mensagem impressa que o script
tenha completado as suas operaes.
Vamos considerar algumas caractersticas especficas de um programa indicativo. fcil ver que o
comrcio pedido formado em bloco 6.7. No bloco 3.4, a quantidade de lotes calculado. Por outro
lado, considera a situao quando a margem livre disponvel insuficiente para sequer abrir uma ordem
com uma quantidade mnima dos lotes. Esta a razo pela qual, no bloco 3-4, depois de imprimir a
mensagem sobre dinheiro suficiente, vamos sair do ciclo 2.9 utilizando o operador 'pausa'. O controle
passado para bloquear a 9.10, eo script completa suas operaes. A mensagem no bloco 9
desnecessrio. dada aqui apenas para ajudar os usurios a encontrar o cdigo de cauda ou cabeas no
script - quando o fim do programa de operaes e quando a pausa provocada pelos atrasos na rede
ou no servidor.

Se a margem livre suficiente para a abertura da ordem, o controle ser passado ao bloco 4.5, e depois
para o bloco 5.6.Nesses blocos, no h sada ciclo. Isto significa que, para qualquer distncia mnima
fixada pelo corretor, haver uma paragem nveis correspondentes encontrados. No bloco 1-2, 3 pontos
foram escolhidos para TP pelo design. A maioria dos corretores definir a distncia mnima de 5
pontos. No bloco 5.6, o programa ir descobrir que o valor predefinido menor do que o permitido
um. O programa ir definir o valor de tal ordem para parar de preo que no contrrio limitao.
em seguida, o controlo passado para bloquear o 6.7 para abri uma ordem. Na primeira linha deste
bloco, a mensagem impresso. O comrcio pedido formado apenas na segunda linha. Uma pergunta
se coloca: Porque que estamos formando cerca de declarar um pedido antes que ele realmente
formado? Ns poderamos dar as instrues em primeiro lugar e, em seguida, informa o usurio sobre
isso. A resposta a esta questo est intimamente relacionada com a tecnologia de enviar o pedido ao
terminal e, em seguida, o cliente para o servidor (consulte a fig. 66). No nosso caso, o pedido comrcio
formado em funo da OrderSend () especificados na parte direita da cesso operador. O comrcio
pedido, como tal, criada e enviada para o servidor na funo, enquanto que a cesso operao ser
executada no operador aps a cesso do servidor retornou uma resposta sobre a "sorte" do
pedido. Assim, a nica possibilidade de informar o usurio sobre o incio dos eventos relacionados com a
solicitao para mostrar a mensagem antes de a cesso operador, na parte direita da funo que o
comrcio seja especificado.
Mais cedo ou mais tarde, o cliente terminal vai passar o controle de volta para o programa, a cesso em
bloco 6.7 operador ser executado, o que resultar em que o "ticket" ter um valor varivel, e que o
controlo ser passado mais - Erro ao analisar-bloco 7-8-9.
Se o intuito aberta no servidor, o nmero (bilhete), da abertura encomenda ser atribudo varivel
bilhete. Neste caso, significa que o script tenha cumprido a sua misso, e no h necessidade de o
programa a continuar as suas operaes. No bloco 7-8, usamos o operador 'pausa' para sair do ciclo,
enquanto (). O controle passado para bloquear 9-10 (fora do ciclo), o programa e completar as suas
operaes.
No entanto, se a tentativa de abrir um fim falhar, o controle ser passado ao bloco 8.9 de erro
analisando. Dois tipos de erros so considerados aqui: aqueles que ainda permitem a esperana para o
sucesso da abertura da ordem e os que, a ocorrncia de forma inequvoca que a denncia do Execuo
do programa. A varivel 'Erro' atribudo com o cdigo do ltimo erro, neste caso, o erro de que tenha
sido devolvido pelo servidor ou pelo cliente terminal em execuo da funo OrderSend ().
No primeiro operador 'mudar' bloco de 8-9, overcomable erros so considerados. Cada erro neste grupo
processado de forma diferente. Por exemplo, se o preo mudou (Erro 135), suficiente apenas para
atualizar os parmetros ambientais utilizando RefreshRates () e repetir a tentativa de abrir um fim. Se o
erro "No preos" (Erro 136) ocorre, no h qualquer sentimento de voltar a enviar a solicitao para o
servidor de comrcio. Neste caso, devemos esperar por um novo carrapato para rendimento (no h
preos no servidor, neste momento, ambos) e, s depois disso, para abrir uma nova tentativa fim. Esta
a razo pela qual existe um ciclo no bloco espera que os processos de erro 136. Este ciclo pode ser
interrompido em espera, logo que um novo carrapato rendimentos. Ns sada do operador switch ()
usando o operador "continuar" que quebram a corrente iterao do ciclo, enquanto () e inicia um novo.
Erros crticos so tratados de outra maneira. Se tal ocorrer um erro, o programa ir apenas informar o
usurio sobre isso e encerrar operaes. Para esta finalidade, ns usamos o operador 'pausa' (o ltimo
em um bloco 8-9), enquanto que rompe o ciclo (), o que resulta no encerramento do programa.
Devemos notar particularmente que, neste exemplo, no consideramos todos os erros, sem excees,
pelo design. Neste caso, no estamos visando proporcionar ao usurio com um programa ready-made.
muito importante que o programador ele ou ela mesma analisa outros erros e decide soberanamente o
que mais erros e de que forma devem ser tratados no programa. Ao mesmo tempo, alguns erros no

devem ser processados, porque o programa construdo de tal forma que ela no implica a ocorrncia
de alguns erros, por exemplo, no caso, dos erros 129 e 130 ..
No exemplo acima, existe um pequeno erro algortmica que no pode ser encontrado nem na
compilao nem no terminal do cliente, nem sobre o servidor.
Pegue qualquer programa cdigos com um gro de sal, a despeito de quaisquer
autoridades.
Anote o cdigo no bloco 4.5:
//------------------------------------------------ -------------------------- 4 -if (Dist_SL <Min_Dist) / / Se for inferior a permitida.
(
Dist_SL = Min_Dist; / / Definir o permitido
Alerta ( "
Aumentou a distncia de SL = ", Dist_SL," pt ");
)
SL = dupla Oferta - Point Dist_SL *; / / Convidado de preo
SL
//------------------------------------------------ -------------------------- 5 -Como resultado de clculos no corpo do operador se (), a varivel Dist_SL pode ter um novo
valor. Suponha uma distncia mnima normal faz 5 pontos. Suponha que, na primeira execuo (em
breve no mercado), esse valor definido como 20 pontos sobre o servidor. A varivel Min_Dist ter o
valor de 20.
int Min_Dist = MarketInfo (Symb, MODE_STOPLEVEL); / / A distncia mnima
Tambm suponho que formaram o comrcio solicitao foi rejeitada devido a erro 136. O programa ir
monitorar o novo carrapato no bloco 8.9. Dentro deste perodo de tempo, o valor da distncia mnima
pode ser alterado no servidor, por exemplo, diminuiu para 10 pontos. No momento em que o novo
carrapato rendimentos, o controle ser passado para o novo ciclo, e do novo valor da varivel Min_Dist,
igual a 10, ser calculado. No entanto, o valor da varivel Dist_SL mantm-se inalterada e igual a 20
(bloco 4.5 codificado de tal forma que o valor de Dist_SL s pode aumentar). A fim de excluir esta
algortmica erro, voc deve escrever bloco 4.5 de forma tal que apenas o valor que depende da situao
se alterar (neste caso, o valor de SL), enquanto que o valor dos iramos Dist_SL ' t mudana, por
exemplo, como este:
//------------------------------------------------ ------------------------ 4 -SL = dupla Oferta - Point Dist_SL *; / / Solicitado preo de SL
if (Dist_SL <Min_Dist) / / Se for inferior a permitida
(
SL = Oferta - Point Min_Dist *; / /
Solicitadas preo de
SL
Alerta ( "
Aumentou a distncia de SL = ", Min_Dist," pt ");
)
//------------------------------------------------ ------------------------ 5 -A mesma alterao deve ser feita em bloco 5.6 para parar o outro fim.
Enquanto se aguarda encomendas Colocando
No existe uma diferena crucial entre a colocao de programao em encomendas pendentes e
colocao de mercado queridos.

Voc s deve observar o fato de que os bens necessrios para modificar a ordem pendente em um
mercado so controladas por um seu suficincia nem pelo cliente ou pelo terminal server. Eles no esto
limitados quer. Voc pode colocar um fim na expectativa em relao ao montante que muitas vezes
ultrapassa o montante de dinheiro disponvel em sua conta. Tal ordem pode ser mantida por perodos
indeterminados. Quando o preo de mercado atinge o nvel do preo requerido para abrir a ordem
pendente, haver uma verificao feita no servidor. Se h dinheiro suficiente na conta para abrir este
fim, vai ser modificado em um mercado um (aberta). Se no, ele ser excludo.
Funo WindowPriceOnDropped ()
Em MQL4, temos um elemento muito importante - podemos determinar programaticamente o smbolo
na janela as coordenadas da localizao, em que um especialista ou de um script Advisor foi colocado,
no caso de terem sido anexados usando uma rato.Por exemplo, podemos obter o valor da penhora de
coordenar o script usando a funo WindowPriceOnDropped ().
WindowPriceOnDropped duplo ()
A funo retorna o valor do preo na ponta da tabela, na qual a EA ou o script foi descontinuado. O
valor s ser vlido, se a EA ou o script foi movido usando uma rato ( 'arrastar e largar'). Este valor no
est definido para indicadores personalizados.

Um exemplo de um script simples que abre uma ordem BuyStop custando 35% da
margem livre, com alguns valores predefinidos de ordens stop (openbuystop.mq4).

//------------------------------------------------ ----------------------------------/ / Openbuystop.mq4


/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ ------------------------------ 1 -int start () / / Especial funo start
(
Dist_SL int = 10; / / SL Preset (pt)
Dist_TP int = 3; / / Preset TP (pt)
Prots duplo = 0,35; / / Percentagem da margem livre
Symb seqncia = Simbolo (); / / Smbolo
WindowPriceOnDropped dupla Win_Price = (); / / O script cair aqui
Alert ( "O preo fixado pelo mouse como Price =", Win_Price); / / Set
pelo mouse
//------------------------------------------------ ------------------------------ 2 -while (true) / / ciclo que se abre uma ordem
(
int Min_Dist = MarketInfo (Symb, MODE_STOPLEVEL); / / Min. distncia
Min_Lot duplo = MarketInfo (Symb, MODE_MINLOT); / / Min. volume
Livre AccountFreeMargin duplo = (); / / Margem Livre
One_Lot duplo = MarketInfo (Symb, MODE_MARGINREQUIRED); / / Custo por 1
lote
Lote duplo = MathFloor (* Livre Prots
One_Lot
Min_Lot) * Min_Lot; / /
Lots
//------------------------------------------------ ------------------------ 3 -Preo duplo = Win_Price; / / O preo fixado pelo mouse

if (NormalizeDouble (Price, Dgitos) </ / Se for inferior a permitida


NormalizeDouble (* Pea + Min_Dist Point, Dgitos))
(/ / Para BuyStop s!
Preo = Pea + Min_Dist * Point; / / No mais prxima
Alerta ( "Mudou o preo: Preo =", Price);
)
//------------------------------------------------ ------------------------ 4 -SL = duplo Preo - Dist_SL * Point; / / Convidado de preo
SL
if (Dist_SL <Min_Dist) / / Se for inferior a permitida
(
SL = Preo - Min_Dist * Point; / / Convidado de preo
SL
Alerta ( "
Aumentou a distncia de
SL = ", Min_Dist," pt ");
)
//------------------------------------------------ ------------------------ 5 -TP = + Preo dupla Dist_TP * Point; / / Convidado de preo
TP
if (Dist_TP <Min_Dist) / / Se for inferior a permitida
(
TP = Preo + Min_Dist * Point; / / Convidado de preo
TP
Alerta ( "
Aumentou a distncia de
TP = ", Min_Dist," pt ");
)
//------------------------------------------------ ------------------------ 6 -Alerta ( "A solicitao foi enviada para o servidor. Aguardando resposta
..");
int = OrderSend bilhete (Symb, OP_BUYSTOP, Lot, Preo, 0, SL, TP);
//------------------------------------------------ ------------------------ 7 -if (bilhete> 0) / / J est!:)
(
Alerta ( "Colocado BuyStop ordem", ticket);
break; / / Sair ciclo
)
//------------------------------------------------ ------------------------ 8 -int Erro = GetLastError (); / / Falha: (
switch (erro) / / Overcomable erros
(
caso 129: Alerta ( "Invalid preo. Repetindo ..");
RefreshRates (); / / Atualizao de dados
continuar; / / Na prxima iterao
caso 135: Alerta ( "O preo foi alterado. Repetindo ..");
RefreshRates (); / / Atualizao de dados
continuar; / / Na prxima iterao
caso 146: Alerta ( "Trading subsistema est ocupado. Repetindo ..");
Sleep (500); / / Soluo Simples
RefreshRates (); / / Atualizao de dados
continuar; / / Na prxima iterao
)
switch (erro) / / Crtica erros
(
case 2: Alerta ( "Common erro.");
break; / / Sair 'mudar'
caso 5: Alerta ( "desactualizao verso do cliente de terminal.");
break; / / Sair 'mudar'
caso 64: Alerta ( "A conta est bloqueada
".);
break; / / Sair 'mudar'
caso 133: Alerta ( "Trading fobidden");
break; / / Sair 'mudar'
default: Alerta ( "Ocorreu erro
", Erro); / / Outras alternativas
)

break; / / Sair ciclo


)
//------------------------------------------------ ------------------------------ 9 -Alert ( "O script tenha completado as suas operaes
---------------------------- ");
retorno; / / Sair start ()
)
//------------------------------------------------ ------------------------------ 10 -A estrutura do script openbuystop.mq4 construdo da mesma forma que a do
script openbuy.mq4, portanto, no h necessidade de descrev-lo em detalhes. Ns apenas dirigir a
nossa ateno para as diferenas bsicas entre esses programas.
O preo, ao nvel do que o script foi anexada janela do smbolo, determinado na linha:
WindowPriceOnDropped dupla Win_Price = (); / / Um script est cado aqui
Posteriormente, o valor dessa varivel mantido inalterado durante todo o perodo de funcionamento do
programa. Isso necessrio, se o script no abrir mais de uma ordem. Ao mesmo tempo, toda vez que
o script ir calcular o valor solicitado do preo prximo ao local (ao nvel dos preos), onde o usurio
acompanha script.
fcil ver que, no script openbuystop.mq4, no h verificao de suficincia da margem livre para a
abertura de uma ordem, mas h uma verificao de preos a fim aberta (blocos 3-4). Se o valor
calculado da varivel "Preo no cumpram os requisitos da colocao de uma forma Parar pendentes
(ver Despacho Caractersticas e normas relativas elaborao de Ofcios,Requerimentos e Limitaes em
Making Ofcios), esse valor ser recalculado.
No bloco de erro de processamento, existem algumas pequenas alteraes, bem como: alguns erros no
so consideradas, mas os cdigos de alguns outros erros so processados.
Limitaes razovel
Que esteja relacionada com a utilizao do comrcio funes, devemos prestar ateno a algumas
limitaes mais gerais. Por exemplo, o erro ocorre apenas 146, quando vrios programas que fazem
comrcio pedidos trabalho em uma janela do smbolo.Na nossa opinio, esta prtica permitida, mas
no razoveis.
Seria muito mais eficiente para criar e utilizar um programa comercial que iria considerar todas as
caractersticas especiais de negociao. Se usamos apenas uma negociao programa, s impossvel
formar vrias trocas pedido simultaneamente. Alm disso, todo o algoritmo poderia ser muito melhor
organizado de tal programa: considerar a probabilidade de xito e ofcios re-alocar dinheiro
corretamente, de acordo com essa probabilidade.
Para realizao de transaces, mais eficiente para usar um especialista Orientador full-escalados,
enquanto que um script seria melhor utilizado para o clculo de tempo de uma ou de algumas
informaes teis para a exibio na tela. Ao mesmo tempo, se o operador no usar um especialista
Orientador automatizado para negociao, a utilizao de scripts acaba por ser mais eficiente do que
trabalhando com encomendas usando o painel de controlo do cliente terminal.

Fechando ea excluso dos despachos


Ordena fecho do mercado

Comrcio pedidos de fechamento do mercado as ordens so formadas utilizando a funo OrderClose ().
Funo OrderClose ()
bool OrderClose (int bilhete, os lotes duplos, duplo preo, int derrapagem,
color = Cor CLR_NONE)
uma funo usada para fechar uma ordem no mercado. A funo retorna TRUE, caso o comrcio seja
realizado com xito. Ele retorna FALSO, se o negcio falhar.
Parmetros:
bilhete - o nmero nico da ordem.
lotes - a quantidade de lotes que devem ser fechados. permitido para especificar um valor que seja
inferior ao montante disponvel na forma de lotes. Neste caso, se o pedido for comercial executada com
xito, a ordem ser fechada parcialmente.
Preo - a fechar preo. Este parmetro definido de acordo com as exigncias e restries aceites pela
realizao dos trfegos (verDespacho Caractersticas e normas relativas elaborao de
Ofcios e apndice 3). Se no existir um preo solicitado disponvel para o fechamento do mercado no
fim do fluxo de preo ou se ele est desatualizado, este comrcio pedido ser rejeitado, se o preo est
desatualizado, mas o preo encontrado no fluxo e, ao mesmo tempo, a sua desvio em relao ao actual
preo oscila dentro do valor de derrapagem, o comrcio pedido ser aceite pelo cliente e enviados para
o terminal server comrcio.
derrapagem - o mximo permitido desvio do preo requerido para a ordem de fechamento do preo de
mercado (em pontos).
Cor - a cor do fechamento flecha em um grfico. Se esse parmetro no est disponvel ou o seu valor
igual ao do CLR_NONE, a seta no ser exibido no grfico.
Se o programa contm informaes sobre o tipo de ordem a ser fechada, sobre o seu nmero exclusivo,
assim como sobre a quantidade de lotes que devem ser fechados, ento muito fcil de fechar a
encomenda. Para isso, voc deve usar o programa em cdigo o OrderClose () funo chamada com
parmetros predefinidos. Por exemplo, se o nmero nico da ordem Comprar 12345 e se quiser fechar
0,5 lote, a chamada para a funo fechando a ordem pode ser parecido com este:
OrderClose (12345, 0,5, Lance, 2);
A fim de decidir sobre o que ordena e em que seqncia deve ser encerrada, voc tem que ter todos os
dados de encomendas em aberto a situao actual. Em MQL4, existe uma srie de funes que podem
ser utilizados para obter diferentes dados que caracterizam qualquer ordem . Por exemplo, a funo
OrderOpenPrice () retorna o valor da encomenda abertas preo (ou do preo requerido para
encomendas pendentes), a funo OrderLots () retorna a quantidade de lotes, a funo OrderType ()
retorna o tipo de ordem, etc Todas as funes que retornam os valores de uma forma caracterstica
chamada em sua execuo para o fim que foi selecionado pela funo OrderSelect ().
Funo OrderSelect ()
De forma a obter os parmetros de qualquer de suas ordens (em qualquer mercado ou pendentes,
fechado ou excludo queridos), voc deve primeiro selecion-lo usando a funo OrderSelect ().
bool OrderSelect (int ndice, selecione int, int piscina MODE_TRADES =)

OrderSelect uma funo que seleciona uma ordem para outras operaes com ela. Retorna TRUE, se
a funo executada com xito.Caso contrrio, retorna FALSE.
Parmetros:
ndice - a fim posio ou nmero, que depende de o segundo parmetro.
escolha - a bandeira do mtodo de seleco. Parmetro 'selecionar' pode assumir um dos dois valores
possveis:
SELECT_BY_POS - no parmetro 'ndice', o nmero de ordem da lista retornado (a numerao comea
com 0),
SELECT_BY_TICKET - no parmetro 'ndice', o nmero de bilhete (o nmero de ordem mpar)
retornado.
piscina - a fonte de dados para seleo. O parmetro 'pool' utilizado, quando o parmetro 'selecionar'
igual ao valor das SELECT_BY_POS. O parmetro 'pool' ignorado, se a deciso for selecionado pelo
nmero de bilhete (SELECT_BY_TICKET). O parmetro 'pool' pode assumir de dois valores possveis:
MODE_TRADES (por omisso) - a ordem selecionada em aberto e encomendas pendentes, ou seja,
entre as ordens exibida no "Comrcio" da guia "Terminal" janela;
MODE_HISTORY - a ordem selecionado no fechado e suprimiu ordens, ou seja, entre as ordens exibido
na "Conta Histrico" do aba "Terminal" janela. Neste caso, a profundidade da histria especificado pelo
usurio para a exibio das encomendas fechadas e apagadas importante.
A fim de demonstrar o mtodo de usar comrcio funes para as ordens de fechamento do mercado,
vamos resolver um problema:
Problema 28. Escrever um script que fecha uma das ordens de mercado disponveis na
conta. O script execuo deve resultar no encerramento da ordem do mais prximo ao
local do script anexado ao smbolo janela com o mouse.
Suponhamos que h trs ordens de mercado aberto, no terminal sinal para o cmbio Euro / Dlar e
enquanto se aguarda uma ordem aberta para USD / CHF:

Fig. 90. Exibindo vrias ordens para abrir smbolos diferentes na janela do terminal.
Devamos escrever um script que tal possa ser arrastado pelo mouse do "Navigator" janela na janela do
smbolo, o que dever resultar no encerramento de uma das ordens no mercado, a saber, pela ordem
que mais se aproxima o cursor (a partir do momento em o usurio disponibilizou o boto do mouse). Na
fig. 91, voc pode ver as alternativas, na qual o cursor est mais prximo ao fim Vender 4372889.
neste sentido que deve ser fechada, como resultado da execuo do script.

Fig. 91. Script closeorder.mq4 usada para fechamento de ordem seleccionada.


Para resolver o problema, devemos escolher (utilizando a funo OrderSymbol ()) entre todas as ordens
apenas aquelas abertas para o smbolo, na janela de onde o script baixado. Ento devemos encontrar
a abrir os preos de todas as ordens no mercado selecionado (ou seja, executar os Funo
OrderOpenPrice () sucessivamente para cada ordem). Conhecendo a fim abrir os preos, podemos
facilmente selecionar um deles, que corresponde com o enunciado do problema. Para especificar os
valores dos parmetros adequados, em funo da OrderClose (), ns tambm precisamos de saber
alguns outros dados sobre o modo selecionado: a quantidade de lotes (determinada pela funo
OrderLots ()) e ao nmero de ordem mpar (determinada pela OrderTicket funo ()). Alis, para
encontrar um ou outro preo de uma citao, em ambos os sentidos, temos de saber o tipo da ordem
(determinada pela funo OrderType ()).
Vamos considerar quais parmetros devem ser especificados em funo da OrderSelect (), a fim de
obter as caractersticas acima fim.
Primeiro de tudo, necessrio escolher o mtodo de seleco fim. No nosso problema, o mtodo de
seleco determinado pela declarao em si o problema: Os dados sobre os nmeros de ordem
suposto estar indisponvel no programa a partir do momento do lanamento do script de execuo, ou
seja, o programa considerado como contendo um bloco que poderia determinar os nmeros de
ordem. Isso significa que devemos verificar todas as ordens de um por um exibida no "Terminal" (Fig.
64,1), portanto temos que usar o parmetro SELECT_BY_POS.
A fonte para seleo das encomendas bvio, tambm. Para resolver o problema, no h necessidade
de analisar fechado e suprimiu ordens. Neste caso, estamos interessados no mercado apenas ordens, e
vamos em busca deles usando o parmetro MODE_TRADES na funo OrderSelect (). Para o parmetro
'pool', o valor padro de MODE_TRADES est especificado no cabealho da funo, para que possa ser
ignorado.
Abaixo mostrado como um bloco de anlise de mercado e de encomendas pendentes podem ser
construdos:
for (int i = 1; i <= OrdersTotal (); i + +) / / ciclo para todas as ordens
..
(/ / Exibido no terminal
if (OrderSelect (i - 1, SELECT_BY_POS) == true) / / Se houver uma prxima a
(
/ / Portaria caractersticas ..
/ / Deve ser analisado aqui ..
)
) / / Fim do ciclo corpo
No cabealho do ciclo operador, o valor inicial especificado como i = 1, enquanto que a condio para
sair do ciclo a expresso i <= OrdersTotal (). OrdersTotal funo () retorna o valor total do mercado e
encomendas pendentes, ou seja, aquelas encomendas que so mostrados no "Comrcio" da guia

"Terminal" janela. Esta a razo pela qual haver o maior nmero de iteraes do ciclo tantas ordens
participar na negociao.
A cada iterao, quando a condio calculado em que o operador 'se', a funo OrderSelect (i-1,
SELECT_BY_POS) ser executada. A seguinte questo to importante, deve ser notado aqui:
A numerao da lista de encomendas do mercado e encomendas pendentes inicia com
zero.
Isto significa que o primeiro na ordem da lista (Fig. 90) colocado na posio zero, a posio da
segunda ordem numerado como 1, o terceiro fim de que seja numerados como 2, etc Esta a razo
pela qual, em funo da OrderSelect chamada (), o valor do ndice dado como i-1. Assim, para todas
as encomendas seleccionadas, este ndice dever ser inferior a 1 o valor da varivel i (que coincide com
o nmero da prxima iterao).
A funo OrderSelect () retorna verdadeiro, se a ordem for selecionado com sucesso. Quer dizer que
possvel que uma ordem seleo pode falhar. Isso pode acontecer, se a quantidade de encomendas
alterado durante seu processamento. No MQL4 Na programao, assim voc deve se lembrar que um
programa aplicativo funcionar na modalidade real-time, e que, enquanto ela est processando alguns
parmetros, os valores destes parmetros podem mudar. Por exemplo, a quantidade de encomendas do
mercado podem mudar como resultado de ambos abertura / fechamento de encomendas e de
modificao das encomendas pendentes no mercado queridos. por isso que voc deve manter a
seguinte regra quando a programao fim de transformao: As encomendas devem ser transformados
logo que possvel, considerando que o programa responsvel por esse bloco de transformao no deve,
se possvel, conter linhas redundantes programa.
De acordo com o cdigo representada na fig. 64,3, no cabealho do operador 'se', o programa analisa se
o prximo fim est disponvel na lista a ordem no momento em que seleccionada. Se o prximo fim
encontra-se disponvel, o controle ser passado para o corpo do operador 'se' ao fim do processo
parmetros. Deve notar-se que tal construo no ajuda muito, no caso de eventuais conflitos, pois a
ordem pode ser perdida (fechado) durante o processamento dos seus parmetros. No entanto, esta
soluo acaba por ser mais eficiente se, a partir do momento da sua seleco, a ordem no est mais
disponvel. No corpo do operador 'se', os parmetros de ordem seleccionada so analisados. Ao executar
as funes OrderOpenPrice (), OrderTicket (), OrderType () e outros do gnero, cada um deles ir
retornar o valor de uma determinada caracterstica do modo selecionado como um resultado da
execuo da funo OrderSelect ().
Toda a argumentao foi usada no programa que iria resolver um problema com 28.
Um exemplo de um script simples destinada ao fechamento de uma ordem no
mercado, o preo de abrir o que est mais prxima da localizao do script apego do
que abrir os preos de outras ordens (closeorder.mq4).

//------------------------------------------------ ------------------------------------/ / Closeorder.mq4


/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------------------- 1 -int start () / / Especial funo 'iniciar'
(

Symb seqncia = Simbolo (); / / Smbolo


Dist duplo = 1000000,0; / / Predefinir
int Real_Order =- 1; / / No mercado ordens ainda
WindowPriceOnDropped dupla Win_Price = (); / / O script est cado aqui
//------------------------------------------------ ------------------------------- 2 -for (int i = 1; i <= OrdersTotal (); i + +) / / Ordem pesquisando ciclo
(
if (OrderSelect (i - 1, SELECT_BY_POS) == true) / / Se o prximo estiver
disponvel
(/ / Portaria anlise:
//------------------------------------------------ ----------------------3 -if (OrderSymbol ()! = Symb) continue; / / O smbolo no nossa
Dica OrderType int = (); / / Tipo de Ordem
if (Tip> 1) continue; / / At fim
//------------------------------------------------ ----------------------4 -Preo OrderOpenPrice duplo = (); / / Ordem dos preos
if (NormalizeDouble (MathAbs (Preo - Win_Price), Dgitos) </ / Seleco
NormalizeDouble (Dist, Dgitos)) / / o mais prximo do fim
(
Dist = MathAbs (Preo - Win_Price); / / Novo valor
Real_Order = Dica; / / Mercado fim disponveis
Bilhete OrderTicket int = (); / / Portaria bilhete
Lote OrderLots duplo = (); / / Quantidade de lotes
)
//------------------------------------------------ ----------------------5 -) / / Fim de ordem anlise
) / / Fim do fim pesquisando
//------------------------------------------------ ------------------------------- 6 -while (true) / / Ordem fecho do ciclo
(
if (Real_Order ==- 1) / / Se no estiver disponvel no mercado ordens
(
Alert ( "Por
", Symb," no disponveis no mercado ordens ");
break; / / Sair fecho do ciclo
)
//------------------------------------------------ ------------------------- 7 -switch (Real_Order) / / Por fim tipo
(
caso 0: dupla Price_Cls = lance; / / Portaria Comprar
string Text = "Comprar"; / / Texto para Comprar
break; / / interruptor
case 1: Pea Price_Cls =; / / Portaria Vender
Text = "Vender"; / / Texto para Vender
)
Alerta ( "Tentativa de fechar", o texto ", na
", Bilheteira,".
Aguardando resposta .. ");
bool = OrderClose Ans (Bilhete, Lot, Price_Cls, 2); / / fechando Ordem
//------------------------------------------------ ------------------------- 8 -if (Ans == true) / / J est! :)
(
Alerta ( "Fechado ordem", o texto ", na
", Bilheteira);
break; / / Sair fecho do ciclo
)
//------------------------------------------------ ------------------------

-- 9 -int Erro = GetLastError (); / / Falha: (


switch (erro) / / Overcomable erros
(
caso 135: Alerta ( "O preo foi alterado. Repetindo ..");
RefreshRates (); / / Atualizao de dados
continuar; / / Na prxima iterao
caso 136: Alerta ( "No preos. espera de um novo carrapato ..");
while (RefreshRates () == false) / / Para o novo carrapato
Sono (1); / / Ciclo do sono
continuar; / / Na prxima iterao
caso 146: Alerta ( "Trading subsistema est ocupado. Repetindo ..");
Sleep (500); / / Soluo Simples
RefreshRates (); / / Atualizao de dados
continuar; / / Na prxima iterao
)
switch (erro) / / Crtica erros
(
case 2: Alerta ( "Common erro.");
break; / / Sair 'mudar'
caso 5: Alerta ( "antiga verso do cliente de terminal.");
break; / / Sair 'mudar'
caso 64: Alert ( "Conta est bloqueado.");
break; / / Sair 'mudar'
caso 133: Alerta ( "Negociao proibido");
break; / / Sair 'mudar'
default: Alerta ( "Ocorreu erro", Erro); / / Outras alternativas
)
break; / / Sair fecho do ciclo
)
//------------------------------------------------ ------------------------------ 10 -Alert ( "O script tenha acabado operaes -----------------------------");
retorno; / / Sair start ()
)
//------------------------------------------------ ------------------------------ 11 -O cdigo de todo o programa closeorder.mq4 est concentrada em especial a funo start (). No bloco
1.2, algumas variveis so inicializadas. A varivel Dist a distncia do local onde o script foi
descontinuado para o prximo fim. A varivel Real_Order uma bandeira que apresenta a
disponibilidade de, pelo menos, um mercado na ordem do cliente terminal (valor no negativo). A
varivel Win_Price o preo, pelo qual o usurio tem apenso o script para a janela do smbolo. No bloco
2.6, a ordem analisado: Uma das ordens disponveis esto afectas a ser fechadas. Bloquear 6.10 o
bloco de est fechando o fim de processamento e os erros que podem ocorrer durante a realizao do
comrcio.
A partir do momento em que o usurio acompanha o script para a janela do smbolo, os valores das
variveis so calculados em bloco 1.2, a varivel Win_Price tendo o valor do preo, a nvel dos quais o
usurio acompanha o script. agora necessrio encontrar a forma (com as suas caractersticas), que
est mais prximo a este local.
No ciclo 'para' (bloco 2-6), as ordens so revistados No bloco 2.3 polegadas, o programa verifica se
existe uma ordem na prxima linha do "Terminal". Se for encontrado um fim, o controlo passado para
o corpo do operador 'se' para obter e analisar as caractersticas dessa ordem. No bloco 3.4, a abertura
ordena smbolos de errado (e no o smbolo, para os quais o programa est sendo executado) so
filtrados. No nosso caso, aberto para a ordem 4372930 USD / CHF. OrderSymbol Function () retorna o
nome do smbolo da ordem selecionada. Se esse smbolo diferente do nome que, para as quais o
programa est sendo executado, a atual iterao est quebrado, impedir a abertura de outro smbolo fim

de serem processados. Se a ordem sob anlise acaba por ser aberto para a "nossa" smbolo, mais uma
verificao ser realizada. O tipo de ordem determinada atravs da funo OrderType () (veja Tipos de
Ofcios). Se a ordem tipo tornar-se em mais de 1, significa que a ordem uma pendncia um. Neste
caso, a atual iterao interrompida, tambm, porque ns no estamos interessados em encomendas
pendentes. No nosso exemplo, temos um tal fim, mas aberta para outro smbolo, de forma que ele j
tenha sido filtrado. Todas as encomendas que passam bloco 3.4 com sucesso no mercado so queridos.
O bloco 4.5 destinado apenas para escolher um fim de todas as ordens no mercado que tenham sido
aprovado no bloco anterior. Esta ordem deve ser a mais prxima do preo predefinido (o valor da
varivel Win_Price). O usurio no obrigado a "apontar" o fim sintonia com o seu cursor do mouse. A
fim de que est mais perto do que quaisquer outras encomendas para o cursor a partir do momento do
lanamento do script para execuo ser selecionado. O preo de abrir o fim processado encontrado
usando a funo OrderOpenPrice (). Se o valor absoluto da distncia entre o preo do curso e da ordem
"cursor preo" inferior mesma distncia para a ordem anterior, a atual ordem ser selecionado (o
valor absoluto da distncia necessria para a excluso do influncia da posio do cursor - em linha ou
acima do fim). Neste caso, essa ordem ser memorizado na atual iterao do ciclo 'para' como um frontrunner para serem fechados.Para este fim, o nmero de bilhete (o nmero de ordem individual) ea
quantidade de lotes so calculadas no final do bloco 4.5. Nesse exemplo (Fig. 90), o montante total das
encomendas de quatro (trs mercado queridos e de uma ordem pendente), e por isso haver quatro
repeties executadas no ciclo 'para', o que resultar em encontrar todos os dados necessrios para o
fechamento de uma ordem selecionada.
Depois, o controlo na execuo do programa ser encaminhada para o ciclo operador 'enquanto' (block
6-10). No bloco 6.7, o mercado ordens encontrados so verificados para disponibilidade. Se no forem
encontradas no mercado ordens de bloqueio 2-4 (que perfeitamente possvel, em geral), o valor da
bandeira Real_Order permanece igual a -1, o que significa a inexistncia das encomendas do
mercado. Se os testes em bloco 6.7 detecta nenhum mercado ordens, a execuo do ciclo 'enquanto'
est quebrado, ento o programa termina as suas operaes. Se o valor da varivel Real_Order acaba
por ser igual a 0 ou 1, isto significa que um mercado est predefinida para fechamento e deve ser
fechado.
No bloco 7.8, de acordo com o tipo de ordem, o preo prximo do fim calculado. o valor do lance
para Comprar encomendas, bem como o valor das ordens Pergunte para Vender (veja Requisitos e
Limitaes em Making Ofcios).
No bloco 7.8, os valores das variveis auxiliares texto so calculados. O pedido de fechamento do
comrcio a ordem formado na funcionamento OrderClose () na linha abaixo:
bool = OrderClose Ans (Bilhete, Lot, Price_Cls, 2); / / fechando Ordem
Comrcio OrderClose funo () retorna verdadeiro, se o comrcio feito com sucesso, e falsa, se no
mesmo. Se o pedido for comercial executada com sucesso no servidor, o valor "verdadeiro" ser
atribudo varivel Ans (atender). Neste caso, aquando da execuo bloco 8.9, o programa ir informar
o usurio sobre o sucesso fim fechamento. Depois disso, a execuo do ciclo operador 'enquanto' ser
interrompido, eo programa vai terminar as suas operaes. Caso contrrio, o controle ser passado para
bloquear 9.10, a fim de analisar o erro devolvido pelo cliente terminal para o programa .
No incio do bloco 9-10, o cdigo de erro calculado. Depois disso, de acordo com o cdigo de erro do
programa, quer sair ou repetida operao so executados. No primeiro operador 'mudar', o programa
processa os erros que so implicitamente overcomable, ou seja, os erros podem ser considerados como
dificuldades no desempenho do comrcio. Todas as medidas necessrias sejam tomadas para cada um
desses erros, ento o actual iterao interrompida ea execuo do ciclo 'enquanto' reinicia. (Observe
que, neste exemplo, usamos o tratamento de erro para o operador "interruptor" que se fecham como
um resultado do uso do operador "continuar" que, como tal, no destinada para a passagem do

controle externo do operador 'mudar'. Essa obra s porque o operador 'mudar' uma parte do contedo
do ciclo externo operador ", enquanto" e que o operador "continuar" interrompa o atual iterao pela
passagem do controle para o cabealho do operador 'enquanto').
Se o cdigo de erro no for transformado no primeiro operador "switch", esse erro considerado como
crtico. Neste caso, o controlo passado para o segundo operador 'mudar', que executado, a fim de
informar o utilizador crtico que um ou outro erro ocorreu. Alm disso, o programa utiliza o operador
'pausa' que interrompe a execuo do ciclo 'enquanto'. Saindo do ciclo 'enquanto', por qualquer motivo,
resultar na passagem do comando para bloquear 9.10, que produz uma mensagem sobre o fim do
programa operaes. O operador 'voltar' para parar a execuo da funo especial start () , Finaliza o
programa e suas operaes.
Prtico resultado obtido aps o lanamento do script sob as condies afirmado (ver fig. 90 e 91)
mostrada abaixo. O comrcio foi feito com sucesso no servidor.

Fig. 92. As mensagens recebidas como resultado da bem sucedida execuo do script closeorder.mq4.
Como resultado do encerramento de uma das ordens, existem duas ordens de esquerda na janela de
cmbio Euro / Dlar.

Fig. 93. Execuo do script closeorder.mq4 resulta em fechamento de uma das ordens.
Ordem fechamento tambm foi exibida no "Terminal" janela:

Fig. 94. Aps a execuo do script closeorder.mq4, Dois Mercado Ordens so exibidas no "Terminal"
Janela.
Mais tarde, as outras duas ordens so fechadas utilizando o script, tambm.

Excluindo encomendas pendente


Comrcio pedidos de supresso de encomendas pendentes so formadas utilizando a funo
OrderDelete ().
Funo OrderDelete ()
bool OrderDelete (int bilhete, arrow_color color = CLR_NONE)
A funo apaga as anteriormente colocadas ordem pendente. Retorna TRUE, se ela tem trabalhado com
sucesso. Caso contrrio, retorna FALSE.
Parmetros:
bilhete - o nmero nico de uma ordem.
arrow_color - a cor de uma flecha em um grfico. Se esse parmetro no est disponvel ou o seu
valor igual ao do CLR_NONE, a seta no ser exibido no grfico.
fcil ver que a funo OrderDelete () no contm uma especificao do volume e do preo do prximo
fim de ser eliminado.
A ordem suprimido qualquer independentemente dos preos de mercado. A supresso parcial de uma
ordem impossvel, tambm.Voc pode diminuir a quantidade de lotes em uma ordem pendente em
duas fases: apagar a ordem existente e, em seguida, coloque uma nova ordem pendente com a
diminuio (qualquer) quantidade de lotes.
O algoritmo do programa que ir eliminar uma ordem pendente pode ser bastante idntica do
mercado, encerramento. A ligeira diferena est em que no necessrio fechar preo para excluir uma
ordem pendente, de forma a seguir o programa no contm o bloco que actualiza os preos de
mercado.
Um exemplo de um script simples destinados supresso de uma ordem pendente, o
preo do que est mais prxima da localizao do script apego que os preos das
outras ordens pendentes (deleteorder.mq4).

//------------------------------------------------ -----------------------------------/ / Deleteorder.mq4

/ / O cdigo deve ser usado apenas para fins educacionais.


//------------------------------------------------ ------------------------------- 1 -int start () / / Especial funo 'iniciar'
(
Symb seqncia = Simbolo (); / / Smbolo
Dist duplo = 1000000,0; / / Predefinir
int Limit_Stop =- 1; / / No encomendas pendentes ainda
WindowPriceOnDropped dupla Win_Price = (); / / O script est cado aqui
//------------------------------------------------ ------------------------------- 2 -for (int i = 1; i <= OrdersTotal (); i + +) / / Ordem pesquisando ciclo
(
if (OrderSelect (i - 1, SELECT_BY_POS) == true) / / Se o prximo estiver
disponvel
(/ / Portaria anlise:
//------------------------------------------------ ----------------------3 -if (OrderSymbol ()! = Symb) continue; / / O smbolo no nossa
Dica OrderType int = (); / / Tipo de Ordem
if (Tip> 2) continue; / / Mercado fim
//------------------------------------------------ ----------------------4 -Preo OrderOpenPrice duplo = (); / / Ordem dos preos
if (NormalizeDouble (MathAbs (Preo - Win_Price), Dgitos)> / / Seleco
NormalizeDouble (Dist, Dgitos)) / / o mais prximo do fim
(
Dist = MathAbs (Preo - Win_Price); / / Novo valor
Limit_Stop = Dica; / / At fim disponveis
Bilhete OrderTicket int = (); / / Portaria bilhete
) / / Fim do 'se'
) / / Fim de ordem anlise
) / / Fim do fim pesquisando
//------------------------------------------------ ------------------------------- 5 -switch (Limit_Stop) / / Por fim tipo
(
case 2: string Text = "BuyLimit"; / / Texto para BuyLimit
break; / / Sair 'mudar'
case 3: Text = "SellLimit"; / / Texto para SellLimit
break; / / Sair 'mudar'
case 4: Text = "BuyStopt"; / / Texto para BuyStopt
break; / / Sair 'mudar'
caso 5: Text = "SellStop"; / / Texto para SellStop
break; / / Sair 'mudar'
)
//------------------------------------------------ ------------------------------- 6 -while (true) / / Ordem fecho do ciclo
(
if (Limit_Stop ==- 1) / / Se no estiver disponvel encomendas pendentes
(
Alerta ( "For", Symb, "nenhuma disposio encomendas pendentes");
break; / / Sair fecho do ciclo
)
//------------------------------------------------ ------------------------- 7 -Alerta ( "Falhou a tentativa de excluir
", O texto", na
",
Bilheteira,". Aguardando resposta .. ");
bool = OrderDelete Ans (ingresso); / / O cancelamento da encomenda
//------------------------------------------------ ------------------------- 8 --

if (Ans == true) / / J est!:)


(
Alerta ( "Eliminado ordem", o texto ", na
", Bilheteira);
break; / / Sair fecho do ciclo
)
//------------------------------------------------ ------------------------- 9 -int Erro = GetLastError (); / / Falha: (
switch (erro) / / Overcomable erros
(
case 4: Alerta ( "Comrcio servidor est ocupado. Repetindo ..");
Sleep (3000); / / Soluo Simples
continuar; / / Na prxima iterao
caso 137: Alerta ( "Agente est ocupado. Repetindo ..");
Sleep (3000); / / Soluo Simples
continuar; / / Na prxima iterao
caso 146: Alerta ( "
Negociao subsistema est ocupado. Repetindo ..
");
Sleep (500); / / Soluo Simples
continuar; / / Na prxima iterao
)
switch (erro) / / Crtica erros
(
case 2: Alerta ( "
Erro comum. ");
break; / / Sair 'mudar'
caso 64: Alert ( "Conta est bloqueado.");
break; / / Sair 'mudar'
caso 133: Alerta ( "
proibido o comrcio ");
break; / / Sair 'mudar'
caso 139: Alerta ( "A ordem bloqueado e est sendo processado
");
break; / / Sair 'mudar'
caso 145: Alerta ( "A modificao proibida."
"A ordem demasiado estreita para o mercado
");
break; / / Sair 'mudar'
default: Alerta ( "Ocorreu erro
", Erro); / / Outras alternativas
)
break; / / Sair fecho do ciclo
)
//------------------------------------------------ ------------------------------ 10 -Alert ( "O script tenha acabado operaes -----------------------------");
retorno; / / Sair start ()
)
//------------------------------------------------ ------------------------------ 11 -O erro de processamento de bloco tambm foi ligeiramente alterado. Voc deve considerar a
possibilidade de erros relacionados a alteraes de preos (erros 135 e 136) quando ordens de
fechamento do mercado, mas esses erros no ocorrem ao excluir encomendas pendentes. Pelo mesmo
motivo, a funo RefreshRates () usado em nenhuma parte do programa .
Tratamento de tais erros como erro de erro 4 e 137 (consulte Cdigos de erros) pode ser um pouco
difcil. Por exemplo, quando obtendo erro 137, o programa pode levar em considerao que o "corretor
est ocupado". No entanto, surge uma pergunta natural: Quando o corretor livre, para que o utilizador
possa continuar o seu comrcio? Erro 137does no fornecer tais informaes. Esta a razo pela qual o
programador deve decidir ele ou ela prpria a construir o programa de transformao desses erros
adequadamente. Em um caso simples, o pedido pode ser repetido depois de uma certa pausa (no nosso
exemplo, em 3 segundos). Por outro lado, aps uma srie de tentativas infrutferas para eliminar (ou,
em um caso comum, para fechar, abrir ou modificar) uma ordem, o servidor pode retornar erro 141 muitas solicitaes. Esse erro resulta em que o script deleteorder . mq4 pra de funcionar. Geralmente,

esses conflitos no so as questes de programao. Nesses casos, voc deve entrar em contato com o
servio de apoio que tratam do centro e esclarecer as razes da rejeio de executar o comrcio pedido.
Erro 145 pode ocorrer, se uma ordem pendente (em um caso comum, ela pode ser uma forma de parar
uma ordem mercado) muito prximo ao preo do mercado. Este erro no ocorrer, se voc est vindo a
negociao num mercado calmo. Se os preos mudar rapidamente, o corretor pode decidir que uma
determinada ordem sero abertos em breve, por isso o corretor no permitir a suprimir ou modific-la.
Este erro considerado como um script na crtica e resulta em um encerramento do programa (que no
faz qualquer sentido para incomodar o corretor com o comrcio pedidos). Se o preo muda depois de
um tempo, voc pode tentar excluir o fim, lanando o script para execuo novamente.
Geralmente, a ocorrncia de erro 145 pode ser prevenida, se voc considerar o congelamento nvel
fixado pela lidar center. Parado nvel um valor que determina a banda de preos, no qual a ordem
considerado como congelados, ou seja, ele pode ser proibido para exclu-la. Por exemplo, se uma
ordem pendente colocada em 1,2500 e congelar o nvel igual a 10 pontos, isso significa que, se o
preo varia entre 1,2490 por 1,2510, a supresso da ordem seja proibida pending. Voc pode obter o
congelamento nvel valor ter executado a funo MarketInfo () com o identificador da solicitao
MODE_FREEZELEVEL.
Fechando oposto encomendas
Oposto (Contador) Ordem um mercado aberto em ordem a direco oposta direco de uma
outra ordem no mercado aberto para o mesmo smbolo.
Se voc tiver duas ordens opostas em relao a um determinado smbolo, voc pode fechar-lhes
simultaneamente, uma pela outra, usando a funo OrderCloseBy (). Voc vai guardar propagao se
voc realizar uma tal operao.
Funo OrderCloseBy ()
bool OrderCloseBy (int bilhete, int oposto, color = Cor CLR_NONE)
A funo fecha um mercado, por outro mercado aberto para o mesmo fim smbolo na direo oposta. A
funo retorna TRUE, se for concluda com xito e FALSE, se no for.
Parmetros:
bilhete - o nmero nico da ordem de ser fechado.
oposto - o nmero nico da ordem oposta.
Cor - a cor do fechamento flecha em um grfico. Se esse parmetro no est disponvel ou o seu valor
igual ao do CLR_NONE, a seta no ser exibido no grfico.
No necessrio que as ordens tenham oposto o mesmo volume. Se voc fechar uma ordem por uma
ordem oposta, o comrcio ser na desempenham o volume da encomenda que possui o menor volume.
Vamos considerar um exemplo. Deixa l estar duas ordens de mercado o mesmo volume em que o
cliente terminal, uma Comprar e Vender um. Se nos fechamos cada um deles separadamente usando a
funo OrderClose (), a nossa produo econmica ser a soma dos lucros obtidos a partir de cada
ordem:

Fig. 95. Resultado de ordens de fechamento separada utilizando a funo OrderClose ().
No entanto, se estamos nesta situao usar a funo OrderCloseBy () destinados ao contrrio
fechamento de encomendas, a produo econmica ser melhor (em comparao com a alternativa
anterior) pelo montante proporcional ao custo de um despacho do spread:

Fig. 96. Resultado de ordens de fechamento de outras ordens usando a funo OrderCloseBy ().
bvio que, se houver oposto ordens que devem ser fechados no terminal, seria economicamente slida
para utilizar a funo OrderCloseBy (), no OrderClose ().
Quanto poupana de um diferencial frente s ordens de fechamento, devemos dar mais algumas
explicaes genricas. De fato, abrindo uma ordem (por exemplo, uma ordem Buy) implicitamente um
comrcio que contrrio abertura de uma ordem no sentido contrrio (ou seja, uma ordem Sell) com
a mesma intensidade como fechar a ordem (o Comprar ordem). Em outras palavras, economicamente
o mesmo que uma das alternativas para usar: basta para fechar um mercado ou a ordem para abrir uma
ordem oposta do mesmo volume (e, em seguida, fechar as duas ordens por si). A diferena entre estas
duas alternativas s pode consistir em diferentes mtodos utilizados nos diferentes centros que tratam
de calcular o dinheiro a ser desviado para apoiar ordens no mercado (verfig. 85 e fig. 88).
Tambm fcil ver que o preo no seja necessrio fechar a ser especificada na funo OrderCloseBy ()
para fechamento de ordens opostas. desnecessrio, porque os ganhos e as perdas de duas ordens
opostas retribuir mutuamente, pelo que o total produo econmica no depende do preo de
mercado. Claro que esta regra vlida somente para o mesmo volume de encomendas. Se, por
exemplo, temos duas ordens de um smbolo: Comprar uma ordem de 1 lote e Vender uma ordem de 0,7

lote, esse comrcio s depende do preo de mercado em relao parte Compre fim lote de 0,3,
enquanto que 0,7 lote de ambas as ordens no dependem do smbolo preo.
Oposto ordens no influenciam o total dos resultados comerciais. Esta a razo por negociao com
base em tticas de abertura ordena oposto no possuem qualquer contedo informal (por esta razo,
alguns centros que tratam forcedly fechar qualquer dentro do lado oposto ordens coincidindo montantes
dos lotes). A nica (negativo) influncia de tais tticas podem consistir em desvio de dinheiro, de acordo
com as regras aceites em alguns centros que tratam. Alm disso, a disponibilidade de vrias ordens
opostas prev mais dificuldades no mbito das trocas programadas, uma ordem do que faz. Se
considerarmos diversas comisses e swaps (para cada mercado, em separado), a necessidade de fechar
oposto ordens torna-se bvia.
Um exemplo de um script simples que fecha todas as ordens para a frente de um
smbolo (closeby.mq4).
//------------------------------------------------ -------------------/ / Closeby.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ --------------- 1 -int start () / / Especial funo 'iniciar'
(
Symb seqncia = Simbolo (); / / Smbolo
Dist duplo = 1000000,0; / / Predefinir
//------------------------------------------------ --------------- 2 -while (true) / / Transformao ciclo ..
(/ / .. Oposto de encomendas
Hedg_Buy duplo = - 1,0; / / Max. Custo de Compra
Hedg_Sell duplo = - 1,0; / / Max. Custo de Venda
for (int i = 1; i <= OrdersTotal (); i + +) / / Ordem pesquisando ciclo
(
if (OrderSelect (i - 1, SELECT_BY_POS) == true) / / Se o prximo estiver
disponvel
(/ / Portaria anlise:
//------------------------------------------------ --- 3 -if (OrderSymbol ()! = Symb) continue; / / O smbolo no nossa
Dica OrderType int = (); / / Tipo de Ordem
if (Tip> 1) continue; / / At fim
//------------------------------------------------ --- 4 -switch (Dica) / / Por fim tipo
(
caso 0: / / Portaria Comprar
if (OrderLots ()> Hedg_Buy)
(
Hedg_Buy = OrderLots (); / / Escolha o max. Custo
int Ticket_Buy = OrderTicket (); / / Portaria bilhete
)
break; / / De interruptor
case 1: / / Portaria Vender
if (OrderLots ()> Hedg_Sell)
(
Hedg_Sell = OrderLots (); / / Escolha o max. Custo
int Ticket_Sell = OrderTicket (); / / Portaria bilhete
)
) / / Fim de 'mudar'
) / / Fim de ordem anlise
) / / Fim do fim pesquisando
//------------------------------------------------ --------- 5 --

if (Hedg_Buy <0 | | Hedg_Sell <0) / / Se no estiver disponvel fim ..


(/ / .. Algum tipo de
Alerta ( "Todas as ordens so fechadas oposto:)"); / / Mensagem
retorno; / / Sair start ()
)
//------------------------------------------------ --------- 6 -while (true) / / Encerramento do ciclo
(
//------------------------------------------------ ------ 7 -Alerta ( "Tentativa de perto. Aguardando resposta ..");
bool = OrderCloseBy Ans (Ticket_Buy, Ticket_Sell); / /
//------------------------------------------------ ------ 8 -if (Ans == true) / / J est! :)
(
Alerta ( "Realizada pelo encerramento.");
break; / / Sair fecho do ciclo
)
//------------------------------------------------ ------ 9 -int Erro = GetLastError (); / / Falha: (
switch (erro) / / Overcomable erros
(
case 4: Alerta ( "Comrcio servidor est ocupado. Repetindo ..");
Sleep (3000); / / Soluo Simples
continuar; / / Na prxima iterao
caso 137: Alerta ( "Agente est ocupado. Repetindo ..");
Sleep (3000); / / Soluo Simples
continuar; / / Na prxima iterao
caso 146: Alerta ( "Trading subsistema est ocupado. Repetindo ..");
Sleep (500); / / Soluo Simples
continuar; / / Na prxima iterao
)
switch (erro) / / Crtica erros
(
case 2: Alerta ( "Common erro.");
break; / / Sair 'mudar'
caso 64: Alert ( "Conta est bloqueado.");
break; / / Sair 'mudar'
caso 133: Alerta ( "Negociao proibido");
break; / / Sair 'mudar'
caso 139: Alerta ( "A ordem bloqueado e est sendo processada");
break; / / Sair 'mudar'
caso 145: Alerta ( "A modificao proibida."
"O fim est muito perto de mercado");
break; / / Sair 'mudar'
default: Alerta ( "Ocorreu erro", Erro); / / Outras alternativas
)
Alert ( "O script tenha acabado operaes --------------------------");
retorno; / / Sair start ()
)
) / / Fim do ciclo de transformao
//------------------------------------------------ -------------- 10 -) / / Fim de incio ()
//------------------------------------------------ -------------------O algoritmo do script acima um pouco diferente do que as anteriores. Essa diferena consiste em que
o mesmo cdigo deve ser executado muitas vezes, a fim de encerrar vrias ordens (a quantidade de
ordens que devem ser fechados em no limitado) com xito. O script foi testado em um conjunto
aleatrio de ordens de mercado. 5 ordens de diferentes volumes esto representadas na fig. 97 abaixo.

Fig. 97. Ordens de mercado aberto para um smbolo.


A fim de fechar o oposto ordens disponveis, devemos predefinir os critrios de seleco. Esse critrio,
no algoritmo dada a ordem dimenso - o maior volume de encomendas so fechadas antes de mais,
ento as ordens de pequenos volumes esto fechados. Aps o oposto ordens de diferentes volumes
foram fechadas, as ordens dos volumes permanecer descansando. Por exemplo, o encerramento das
ordens opostas Buy (1 lote) e Sell (0,8 lote) que ir resultar na ordem Buy (0,2 lote) permanece
aberto. Esta a razo pela qual, aps cada encerramento sucesso, o programa deve referir-se a lista
actualizada das ordens de encontrar outras duas maiores ordens opostas nesta lista actualizada.
Os clculos acima so realizadas em uma (condicionalmente) ciclo contnuo ", enquanto", em blocos 210. o incio do ciclo, em cada iterao do programa supe que no h ordens de um certo tipo
anymore. Por isso, o valor de -1 o atribudo s variveis Hedg_Buy e Hedg_Sell. O algoritmo da ordem
de processamento de bloco, em geral, preservada (ver o cdigo de closeby.mq4). No fim do ciclo de
conscincia 'para', ou seja, no bloco 3.4, como nos programas anteriores, "errado" ordens so
filtrados. Neste caso, estas ordens so abertos para outro smbolo e as encomendas pendentes.
No bloco 4.5, o volume verificado no fim de cada bloco 3.4 calculado. Se ele sair durante os clculos
que atualmente processado ordem a maior dentre todas as encomendas em volume processado, o seu
bilhete armazenado. Isto significa que a ordem tenha esse bilhete , nesta fase de clculos, de um
candidato para o encerramento das ordens opostas. At ao momento em que a ltima iterao do ciclo
'para' terminar, os bilhetes de encomendas, com a mxima quantidade de lotes abertos em direces
opostas j foram conhecidos. Estas ordens so selecionados pelo programa. Se algum ordens de
qualquer tipo j se tornaram indisponveis at este momento, bloco 5.6 sai do programa.
O bloco representa 6.10 erro de transformao. completamente as mesmas que so consideradas
acima (neste e em sees anteriores). O pedido de fechamento do comrcio encomenda oposto
formado em bloco 7.8 utilizando a funo OrderCloseBy (). Se ele falhar, de acordo com o cdigo de
erro, o programa passa o controle para repetir quer tornar o comrcio (para o mesmo ingressos) ou para
o operador "regresso" que termina o programa operaes.
Se um comrcio realizada com sucesso, o programa sai do bloco de erro de processamento, e os
atuais iterao do ciclo mais externo 'enquanto' ir terminar. a prxima iterao deste ciclo, todos os
clculos sero repetidos: pesquisando nas ordens disponveis, selecionando ordens no mercado,
assinalando selecionadas para cada um dos tipos fim, formando uma solicitao para a frente fechando
comrcio, analisando e subsequentes erro. Este ciclo executado at que no haja disponveis ordens
de um certo tipo (ou, num caso especfico, de ambos os tipos) no terminal. Este evento ser calculado
no bloco 5-6, em seguida, o programa terminar suas operaes.
As seguintes mensagens foram recebidos na execuo do script closeby.mq4 destinados ao fechamento
do mercado ordens mostrado na fig. 97:

Fig. 98. As mensagens recebidas na execuo do script closeby.mq4.


Sobre a "Histria da conta" da guia "Terminal" janela, voc pode ver que algumas encomendas esto
fechados, com um lucro zero. Isto o que ns salvar quando fecho ordens opostas. possvel comparar
os resultados econmicos na fig. 97 e fig. 99:

Fig. 99. Conta histria aps a execuo do script closeby.mq4.


Sobre o "Journal" na guia "Terminal" janela, voc pode acompanhar a histria da ordem fecho (os
ltimos acontecimentos esto em cima):

Fig. 100. Eventos aconteceram durante a execuo do script closeby.mq4.


a execuo do script, de acordo com o algoritmo, as encomendas de volume mximo disponvel no
momento em que sero encerradas. Apesar do fato de que as encomendas foram abertos em uma
seqncia aleatria (Fig. 97), as primeiras ordens a serem fechados foram Comprar 778594 e 778595
Vender, com os volumes de 1 lote lote e 0,8, respectivamente (as linhas mais baixas na fig . 100). Uma
vez que estas ordens tm volumes diferentes, o oposto fechando produzida uma nova ordem, Comprar
778597, com o volume de 0,2 descansando muito. Em seguida, o programa selecionou ordens 778592
Comprar e Vender 778593, 0,5 cada lote, a ser encerrado o oposto ordens. Estas encomendas foram
encerradas sem descansar abre uma ordem.
At ao momento a terceira iterao comeou, duas ordens tinham permanecido no smbolo na janela
externa ciclo: 778596 Vender despacho inicial de 0,3 lote eo fim aberto como um resultado da execuo
do script, Compra de 0,2 lote 778597. Nas linhas de alta Fig.100, voc pode ver que essas ordens so
ordens opostas como tambm fechado. O volume dessas encomendas eram diferentes, pelo que o
ltimo comercial que resultou em um mercado ordem de 0,1 lote permaneceu na janela do smbolo
(observe os resultados econmicos):

Fig. 101. Ordem Vender com custo remanescente de 0,1 Lot.


conveniente usar o script closeby.mq4 manual na negociao, especialmente nos casos de maneira
diferente muitos ordena-dirigido mercado disponvel na janela do smbolo.

Modificao de Encomendas
MQL4 permite modificar mercado e encomendas pendentes. As ordens so modificadas de acordo com
as regras descritas na Portaria Caractersticas e no apndice 3.
Funo OrderModify ()

Comrcio pedidos de modificao de mercado, e enquanto se aguarda ordens so formadas utilizando a


funo OrderModify ().
bool OrderModify (int bilhete, duplo preo, stoploss duplo, a dupla
takeprofit, datetime expirao, arrow_color color = CLR_NONE)
A funo modifica os parmetros de mercado e de encomendas pendentes. A funo retorna TRUE, se o
comrcio feito com sucesso.Caso contrrio, retorna FALSE.
Parmetros:
bilhete - o nmero nico da ordem.
preo - o preo de um recm-solicitadas enquanto se aguarda o fim ou um novo preo de mercado
aberto fim.
stoploss - o novo valor do StopLoss.
takeprofit - o novo valor do TakeProfit.
vencimento - o tempo de expirao uma ordem pendente.
arrow_color - a cor das setas para a modificao da StopLoss e / ou TakeProfit no grfico. Se esse
parmetro no est disponvel ou o seu valor igual ao do CLR_NONE, as setas no ser exibido no
grfico.
Nota: Voc pode mudar preo ea expirao aberto apenas para encomendas pendentes.
Se voc passar valores inalterados parmetros como a funo, o terminal vai gerar erro 1
(ERR_NO_RESULT). Pode haver um limite de tempo para a aplicao de expirao para encomendas
pendentes sobre alguns servidores comerciais. Neste caso, se voc tentar criar um valor diferente de
zero nos parmetros da expirao, erro 147 (ERR_TRADE_EXPIRATION_DENIED) ser gerado.
Modificao do mercado encomendas
A ordem normal de mercado contm duas ordens de stop - StopLoss e TakeProfit. Eles instrues para
fechar a ordem, o preo solicitado, a fim de parar de correo das perdas e lucros. Alterao de
encomendas no mercado pode ser til para a solicitao de mudana de preos de ordens stop, quer
como resultado de novas calculados valores obtidos no programa ou no iniciativa do comerciante. O
terminal cliente tem a sua prpria ferramenta usada para modificao de StopLoss: Trailing
Stop. Permite que o programa para modificar o nvel de StopLoss seguinte taxa fixa a uma certa
distncia da mesma (ver Metatrader Cleitn Terminal 4 do Guia do Usurio).
O fim-modificando funo OrderModify () amplia consideravelmente as capacidades de modificao: Os
preos de ambos solicitaram ordens de stop podem ser alterados no sentido de o preo de mercado ou
apagados. Uma limitao para o mercado fim modificao mnima permitida a distncia entre o fim e
parar o preo de mercado, fixado pela lidar center (ver Ordem caractersticas e os requisitose limitaes
em Making Ofcios). Se o programa tenta mudar a posio de uma ordem stop de tal forma que ele
colocado mais perto do mercado do que a distncia mnima permitida, esse comrcio pedido ser
rejeitado pelo cliente terminal ea execuo da funo OrderModify () ir falhar (erro 130). por isso que
voc deve fornecer um bloco especial no seu programa, que vai considerar essa limitao.

Exemplo de um simples Expert Advisor StopLosses que modifica de todas as ordens no


mercado, para que a distncia entre o preo de StopLoss eo preo de mercado
maior do que a um preset (modifystoploss.mq4)

//------------------------------------------------ ----------------------------------/ / Modifystoploss.mq4


/ / O cdigo deve ser usado apenas para fins educacionais
.
//------------------------------------------------ ----------------------------------extern int Tral_Stop = 10; / / Trailing distncia
//------------------------------------------------ ------------------------------ 1 -int start () / / Especial funo 'iniciar'
(
Symb seqncia = Simbolo (); / / Smbolo
//------------------------------------------------ ------------------------------ 2 -for (int i = 1; i <= OrdersTotal (); i + +) / / Cycle pesquisando nas
encomendas
(
if (OrderSelect (i - 1, SELECT_BY_POS) == true) / / Se o prximo estiver
disponvel
(/ / Anlise de encomendas:
Dica OrderType int = (); / / Tipo de Ordem
if (OrderSymbol ()! = Symb | | Dica> 1) continue; / / A ordem no "nossa"
SL = dupla OrderStopLoss (); / / SL da ordem seleccionada
//------------------------------------------------ ---------------------- 3
-while (true) / / Modificao ciclo
(
TS = dupla Tral_Stop; / / Valor inicial
int Min_Dist = MarketInfo (Symb, MODE_STOPLEVEL); / / Min. distncia
if (TS <Min_Dist) / / Se menor que permitiram
TS = Min_Dist; / / Novo valor de TS
//------------------------------------------------ ------------------- 4 -Modificar bool = false; / / No pode ser modificada
switch (Dica) / / By o tipo rder
(
caso 0: / / Portaria Comprar
if (NormalizeDouble (SL, Dgitos) </ / Se for menor do que ns queremos
NormalizeDouble (Bid - TS * Ponto, Dgitos))
(
SL = Oferta - Point TS *; / / depois modific-lo
string Text = "Comprar"; / / Texto para Comprar
Modificar = true; / / Para ser modificada
)
break; / / Sair 'mudar'
case 1: / / Portaria Vender
if (NormalizeDouble (SL, Dgitos)> / / Se for maior do que ns queremos
NormalizeDouble (TS + * Pergunte Point, Dgitos)
| | NormalizeDouble (SL, Dgitos) == 0) / / ou igual a zero
(
Pergunte SL = + * Ponto TS; / / depois modific-lo
Text = "Vender"; / / Texto para Vender
Modificar = true; / / Para ser modificada
)

) / / Fim de 'mudar'
if (Modify == false) / / Se no for modificado
break; / / Sair 'enquanto'
//------------------------------------------------ ------------------- 5 -TP = dupla OrderTakeProfit (); / / TP de ordem seleccionada
Preo OrderOpenPrice duplo = (); / / Preo do modo selecionado
Bilhete OrderTicket int = (); / / Bilhete de ordem seleccionada
Alerta ( "Alterao", Texto, Ticket, ". Aguardando resposta ..");
bool = OrderModify Ans (Bilhete, Preo, SL, TP, 0); / / modificar isso!
//------------------------------------------------ ------------------- 6 -if (Ans == true) / / J est! :)
(
Alerta ( "Ordem", Texto, Ticket ", modificada:)");
break; / / A partir de modificao do ciclo.
)
//------------------------------------------------ ------------------- 7 -int Erro = GetLastError (); / / Falha: (
switch (erro) / / Overcomable erros
(
caso 130: Alerta ( "Errado interrompida. Repetindo.");
RefreshRates (); / / Atualizao de dados
continuar; / / Na prxima iterao
caso 136: Alerta ( "No preos. espera de um novo carrapato ..");
while (RefreshRates () == false) / / Para o novo carrapato
Sono (1); / / Ciclo de atraso
continuar; / / Na prxima iterao
caso 146: Alerta ( "Trading subsistema est ocupado. Repetindo");
Sleep (500); / / Soluo Simples
RefreshRates (); / / Atualizao de dados
continuar; / / Na prxima iterao
/ / Crtica erros
case 2: Alerta ( "Common erro.");
break; / / Sair 'mudar'
caso 5: Alerta ( "antiga verso do cliente de terminal.");
break; / / Sair 'mudar'
caso 64: Alert ( "Conta est bloqueado
".);
break; / / Sair 'mudar'
caso 133: Alerta ( "Negociao proibido");
break; / / Sair 'mudar'
default: Alerta ( "Ocorreu erro", Erro); / / Outros erros
)
break; / / A partir de modificao do ciclo
) / / Fim da modificao do ciclo
//------------------------------------------------ ---------------------- 8
-) / / Fim de ordem anlise
) / / Fim de ordem pesquisa
//------------------------------------------------ ------------------------------ 9 -retorno; / / Sair start ()
)
//------------------------------------------------ ----------------------------- 10 -O programa sobretudo um Expert Advisor. Se necessrio, voc pode facilmente perceber o fimmodificando em funo de um script. No entanto, no seria muito til ao usar um script normal neste
exemplo, porque o script iria terminar suas operaes depois de o comrcio ter sido feita. O uso de um
script seria razovel, no caso, o programa realiza um one-time de realizar uma operao, por exemplo, o
fecho ou a abertura ordena. Neste caso, no entanto, estamos resolvendo uma tarefa que precisa ser
contnuo controle sobre a situao: mudar a posio de uma ordem stop, se uma determinada condio

seja cumprida, ou seja, se a distncia entre a taxa de mercado e solicitou o valor da parar de ordem
ultrapassa um certo valor predefinido (10 pontos, no nosso caso). Para uma utilizao a longo prazo,
muito mais conveniente para escrever um EA que lanada para execuo em todos os carrapatos e
deixa de trabalhar apenas com o ensino directo pelo usurio.
O algoritmo acima da EA modifystoploss.mq4 muito simples. Os principais clculos so realizados no
ciclo da pesquisa na ordens (blocos 2-9). A ordem pesquisado em ambos os mercados e encomendas
pendentes (o parmetro 'pool' na chamada de funo OrderSelect () no explicitamente
especificada). No bloco 2-3, enquanto se aguarda ordens e as ordens aberta para outro smbolo so
filtrados; para as encomendas que foram seleccionadas, StopLoss o valor de determinados.
O bloco 3.9 representa um ciclo de alterao da ordem selecionada. No bloco 3.4, o novo valor atual do
limitando-se a distncia determinada (o seu corretor, este valor pode mudar a qualquer momento). No
bloco 4.5, a necessidade de modificar a forma selecionada (atualmente processado no ciclo 'para')
calculado, bem como um novo valor de StopLoss. Se a atual ordem no necessita de ser modificado, o
programa sai do ciclo 'enquanto' no final do bloco 4.5 e esta ordem no modificada (no bloco 5-6).
Contudo, se a deciso tem de ser modificada, o controlo passado ao bloco 5.6, em que os parmetros
necessrios so calculados e OrderModify a funo () chamado de que faz uma solicitao comercial.
Se um comrcio concluda com xito, o operador 'pausa' no bloco 6.7 ir terminar a execuo do ciclo
'enquanto', o que resulta no termo do actual iterao do fim do ciclo de conscincia 'para' (o prximo fim
ir comear a ser processado na prxima iterao). Se o comrcio no realizada com sucesso, os
erros sero processados. Se um erro no se venham a ser crtico, o programa nova tentativa de fazer
um comrcio. No entanto, se o erro estimado como crtico, o controle ser passado fora da
modificao do ciclo de processamento do prximo fim (no ciclo 'para').
Voc deve ter notado um pequeno recurso aqui que diz respeito alterao das ordens de
mercado. Funo OrderModify () fixa novos valores para o preo stop orders de ambos
simultaneamente. No entanto, a necessidade de respeitar a distncia mnima, apenas diz respeito
ordem stop, o novo valor do qual difere do actual. Se o novo valor o mesmo que o actual, o despacho
pode deixar de ser, em qualquer distncia a partir do preo de mercado, enquanto que o comrcio
correspondente pedido considerado como correcto.
Por exemplo, temos um mercado aberto fim Compre com o preo de 1.295467, com as seguintes ordens
de stop: StopLoss = TakeProfit = 1,2958 e 1,2960. A distncia mnima fixada pelo corretor de 5
pontos. Para o preo de mercado de lance = 1,2959, as condies para a modificao da ordem surgir,
nomeadamente, para a colocao StopLoss = 1,2949 (Bid - 10 pontos). A fim de executar a funo
OrderModify (), voc tambm deve especificar um novo valor de TakeProfit. O nosso EA no muda a
posio do TakeProfit, por isso, defina o valor na sua actual funo: TakeProfit = 1,2960.
Apesar do fato de que o novo valor solicitado de TakeProfit = 1,2960 est prximo do mercado preo de
lance (apenas 1 ponto, ou seja, menos do que o permitido distncia mnima de 5 pontos), este valor no
diferir do valor atual de TakeProfit = 1,2960, portanto o comrcio solicitao ser considerada correta e
realizada no servidor (em geral, o pedido pode ser rejeitado, mas por outras razes). Fig. 102 e 103
representam os resultados de uma modificao no xito dessa situao.

Fig. 102. Alertar janela e smbolo como eles aparecem na janela de alterao de uma ordem pela
EA modifystoploss.mq4 quando a taxa de mercado est perto do valor solicitado de TakeProfit.

Fig. 103. Modificado a fim de "Terminal" janela.


Podemos ver na fig. 103 que a alterao resultou no novo valor de StopLoss = 1,2949, e que o actual
preo de lance = 1,2959 estava a uma distncia de 1 ponto a partir do valor de TakeProfit.
Deve notar-se em separado que nem mercado, nem encomendas pendentes devero ser modificados)
no isolamento a partir da anlise da situao do mercado. Essa alterao s pode ser til, se a taxa de
mercado se move rapidamente e de uma direco, o que poder acontecer depois de notcias
importantes. No entanto, se voc comrcio, em um "normal" do mercado, a deciso da necessidade de
modificar encomendas devem ser feitas com base nos critrios do mercado. Consultor Especialista
em modifystoploss.mq4, ns tambm utilizar um critrio (StopLoss est mais longe do preo de mercado
do que queremos), com base no qual o programa que decide modificar ordens. No entanto, este critrio
muito simples e difceis de ser considerada como um critrio que caracteriza a situao no mercado.
Na pendncia da modificao encomendas
Modificao de encomendas pendentes ligeiramente diferente do que o mercado de encomendas. A
diferena importante que possvel mudar o preo do fim em si. Voc deve manter as regras limitando
a posio de uma forma to pendentes relacionados com o preo de mercado e de como parar de
ordens relacionadas com a ordem requerida preo (ver Ordem caractersticas e os requisitos e limitaes
em Making Ofcios). Ao mesmo tempo, todas as caractersticas da ordem pendente so considerados
como recentemente solicitado, qualquer que seja a histria prvia de eventos relacionados
armazenado.
Por exemplo, suponha que temos uma ordem pendente BuyStop com StopLoss = 1,2030 = 1,2025 e
1,2035 = TakeProfit. O corretor definir a distncia mnima permitida como 5 pontos. fcil ver que as
ordens de stop esto dentro da faixa permitida, pelo que qualquer alterao da ordem requerida abertas
preo ter como resultado a modificao necessria de pelo menos uma das ordens de stop. No entanto,
se um pedido comrcio formado que vai mudar a ordem requerida preos, os valores das ordens de
paragem remanescentes do mesmo, o cliente terminal ir considerar este pedido como um mal e no vai
mand-lo para o servidor para execuo. Por exemplo, se o requerimento especifica os seguintes
valores: BuyStop = 1. 2028, StopLoss = 1,2025 e 1,2035 = TakeProfit, este pedido errado, embora os

valores de suas ordens stop, no foram alteradas: neste caso, o pedido est quebrando a regra de
manter a distncia mnima entre a ordem requerida abertas eo preo de uma das ordens stop
(ver Requisitos e Limitaes em Making Ofcios).
Vamos ver como um script pode parecer que modifica uma pendncia fim de aproximar o seu preo
solicitado ao preo de mercado a uma distncia pr-determinada. Vamos definir a distncia como 10
pontos. Para indicar a fim de serem modificados (podem haver vrias encomendas pendentes na janela),
estamos usando os preos, em que o script foi anexado ao smbolo janela.

Exemplo de um script simples que modifica uma ordem pendente, solicitou a abertura
do preo que est mais prxima da penhora script-preo do que os preos das outras
ordens pendentes (modifyorderprice.mq4).

//------------------------------------------------ ----------------------------------/ / Modifyorderprice.mq4


/ / O cdigo deve ser usado apenas para fins educacionais
.
//------------------------------------------------ ------------------------------ 1 -int start () / / Especial funo 'iniciar'
(
tral int = 10; / / Encarar a distncia
Symb seqncia = Simbolo (); / / Smbolo
Dist duplo = 1000000,0; / / Predefinir
WindowPriceOnDropped dupla Win_Price = (); / / O script est cado aqui
//------------------------------------------------ ------------------------------ 2 -for (int i = 1; i <= OrdersTotal (); i + +) / / Cycle pesquisando nas
encomendas
(
if (OrderSelect (i - 1, SELECT_BY_POS) == true) / / Se o prximo estiver
disponvel
(/ / Anlise de encomendas:
//------------------------------------------------ ---------------------- 3
-if (OrderSymbol ()! = Symb) continue; / / O smbolo no "nossa"
if (OrderType () <2) continue; / / Mercado fim
//------------------------------------------------ ---------------------- 4
-if (NormalizeDouble (MathAbs (OrderOpenPrice () - Win_Price), Dgitos)
<NormalizeDouble (Dist, Dgitos)) / / Select a aproximao de um
(
Dist = MathAbs (OrderOpenPrice () - Win_Price); / / Novo valor
Dica OrderType int = (); / / Tipo de ordem seleccionada.
Bilhete OrderTicket int = (); / / Bilhete de ordem seleccionada
Preo OrderOpenPrice duplo = (); / / | <
. .
SL = dupla OrderStopLoss (); / / SL da ordem seleccionada
TP = dupla OrderTakeProfit (); / / TP de ordem seleccionada
) / / Fim do 'se'
) / / Fim de ordem anlise
) / / Fim de ordem pesquisa
//------------------------------------------------ ------------------------------ 5 --

if (Tip == 0) / / Se no existem encomendas pendentes


(
Alerta ( "For", Symb, "nenhuma disposio encomendas pendentes");
retorno; / / Sair do programa
)
//------------------------------------------------ ------------------------------ 6 -while (true) / / Ordem fecho do ciclo
(
RefreshRates (); / / Atualizao de dados
//------------------------------------------------ ------------------------ 7 -TS = dupla tral; / / Valor inicial
int Min_Dist = MarketInfo (Symb, MODE_STOPLEVEL); / / Min distncia
if (TS <Min_Dist) / / Se menor que permitiram
TS = Min_Dist; / / Novo valor de TS
//------------------------------------------------ ------------------------ 8 -string Text = ""; / / No pode ser modificada
New_SL duplo = 0;
New_TP duplo = 0;
switch (Dica) / / Por fim tipo
(
case 2: / / BuyLimit
if (NormalizeDouble (Price, Dgitos) </ / Se for maior do que por
NormalizeDouble (Ask - TS * Ponto, Dgitos)) / / .. o valor predefinido
(
Pergunte a dupla New_Price = - TS * Point; / / O seu novo preo
if (NormalizeDouble (SL, Dgitos)> 0)
New_SL = New_Price - (Preo - SL); / / Novo StopLoss
if (NormalizeDouble (TP, Dgitos)> 0)
New_TP = New_Price + (TP - Preo); / / Novo TakeProfit
Text = "BuyLimit"; / / modificar isso.
)
break; / / Sair 'mudar'
case 3: / / SellLimit
if (NormalizeDouble (Price, Dgitos)> / / Se for maior do que por
NormalizeDouble (+ lance TS * Ponto, Dgitos)) / / .. o valor predefinido
(
= + Lance TS New_Price * Point; / / O seu novo preo
if (NormalizeDouble (SL, Dgitos)> 0)
New_SL = New_Price + (SL - Preo); / / Novo StopLoss
if (NormalizeDouble (TP, Dgitos)> 0)
New_TP = New_Price - (Preo - TP); / / Novo TakeProfit
Text = "SellLimit"; / / modificar isso.
)
break; / / Sair 'mudar'
case 4: / / BuyStopt
if (NormalizeDouble (Price, Dgitos)> / / Se for maior do que por
NormalizeDouble (TS + * Pergunte Point, Dgitos)) / / .. o valor
predefinido
(
Pergunte New_Price = + * Ponto TS; / / O seu novo preo
if (NormalizeDouble (SL, Dgitos)> 0)
New_SL = New_Price - (Preo - SL); / / Novo StopLoss
if (NormalizeDouble (TP, Dgitos)> 0)
New_TP = New_Price + (TP - Preo); / / Novo TakeProfit
Text = "BuyStopt"; / / modificar isso.
)
break; / / Sair 'mudar'
caso 5: / / SellStop
if (NormalizeDouble (Price, Dgitos) </ / Se for maior do que por

NormalizeDouble (Bid - TS * Ponto, Dgitos)) / / .. o valor predefinido


(
New_Price = Oferta - Point TS *; / / O seu novo preo
if (NormalizeDouble (SL, Dgitos)> 0)
New_SL = + New_Price (SL - Preo); / / Novo StopLoss
if (NormalizeDouble (TP, Dgitos)> 0)
New_TP = New_Price - (Preo - TP); / / Novo TakeProfit
Text = "SellStop"; / / modificar isso.
)
)
if (NormalizeDouble (New_SL, Dgitos) <0) / / Verificar SL
New_SL = 0;
if (NormalizeDouble (New_TP, Dgitos) <0) / / Verificar TP
New_TP = 0;
//------------------------------------------------ ------------------------ 9 -if (Texto == "") / / Se no for modificado
(
Alerta ( "Nenhuma condio de modificao".);
break; / / Sair 'enquanto'
)
//------------------------------------------------ -----------------------10 -Alerta ( "Modificao
", Texto, Ticket,". Aguardando resposta .. ");
bool = OrderModify Ans (Bilhete, New_Price, New_SL, New_TP, 0); / /
modificar isso!
//------------------------------------------------ -----------------------11 -if (Ans == true) / / J est! :)
(
Alerta ( "Modified ordem", o texto ", na
", Bilheteira,":) ");
break; / / Sair do encerramento do ciclo
)
//------------------------------------------------ -----------------------12 -int Erro = GetLastError (); / / Falha: (
switch (erro) / / Overcomable erros
(
case 4: Alerta ( "Comrcio servidor est ocupado. Repetindo ..");
Sleep (3000); / / Soluo Simples
continuar; / / Na prxima iterao
caso 137: Alerta ( "Agente est ocupado. Repetindo ..");
Sleep (3000); / / Soluo Simples
continuar; / / Na prxima iterao
caso 146: Alerta ( "Trading subsistema est ocupado. Repetindo ..");
Sleep (500); / / Soluo Simples
continuar; / / Na prxima iterao
)
switch (erro) / / Crtica erros
(
case 2: Alerta ( "
Erro comum. ");
break; / / Sair 'mudar'
caso 64: Alert ( "Conta est bloqueado.");
break; / / Sair 'mudar'
caso 133: Alerta ( "
proibido o comrcio ");
break; / / Sair 'mudar'
caso 139: Alerta ( "Ordem bloqueado e est sendo processada");
break; / / Sair 'mudar'
caso 145: Alerta ( "Alterar proibida."
"Ordem demasiado estreita para o mercado");
break; / / Sair 'mudar'
default: Alerta ( "Ocorreu erro
", Erro); / / Outras alternativas

)
break; / / Sair do encerramento do ciclo
) / / Fim do encerramento do ciclo
//------------------------------------------------ ----------------------------- 13 -Alert ( "O script j completou suas operaes -----------------------");
retorno; / / Sair start ()
)
//------------------------------------------------ ----------------------------- 14 -A distncia entre o preo de mercado, bem como o preo da ordem pendente est definido na varivel
central. A varivel Win_Price contm o valor do preo, pelo qual o script foi anexado ao smbolo
janela. No ciclo de pesquisas em ordens (blocos 2-5), as caractersticas do modo mais prximo ao nvel
script-apego so calculados. 6.13 bloco representa o ciclo de fecho de encomendas. No bloco 8.9, que
decidido sobre se o modo selecionado deve ser modificado. Se necessrio, os novos valores dos preos
solicitados so calculadas as ordens de parar aqui. A alterao da ordem solicitado utilizando o
funcione OrderModify () no bloco 10-11. Erros so transformados em bloco 11-13.
8.9 O bloco composto por quatro blocos idnticos, em que os novos valores utilizados no pedido so
calculados. Vamos considerar os destinados a um fim SellLimit:
case 3: / / SellLimit
if (NormalizeDouble (Price, Dgitos)> / / Se for maior do que por
NormalizeDouble (+ lance TS * Ponto, Dgitos)) / / .. o valor predefinido
(
= + Lance TS New_Price * Point; / / O seu novo preo
if (NormalizeDouble (SL, Dgitos)> 0)
New_SL = New_Price + (SL - Preo); / / Novo StopLoss
if (NormalizeDouble (TP, Dgitos)> 0)
New_TP = New_Price - (Preo - TP); / / Novo TakeProfit
Text = "SellLimit"; / / modificar que
)
break; / / Sair 'mudar'
Os novos parmetros da ordem so calculados apenas se o preo atual 'Price' est mais longe da actual
preo de mercado do que o lance desejado distncia TS. Se assim, o controle ser passado para o
corpo do operador se, quando abrir o novo preo da ordem, New_Price, calculado. Os novos valores
de StopLoss e TakeProfit so calculados apenas para valores no zero. A distncia entre o preo ea cada
solicitou vista dos preos da ordem stop continua a mesma.
Por exemplo, SellLimit ordem colocada em 1,2050, o seu StopLoss = 1,2073 e seus TakeProfit =
1. 2030. Suponha os clculos resultar na nova ordem aberto preo igual a 1,2040. Neste caso, os novos
valores de ordens stop, ser a seguinte: StopLoss = 1,2063, TakeProfit = 1. 2020. Assim, o programa
resultar em operaes a fim de que seja modificado "como um todo" - todos os trs parmetros bsicos
(open preo, StopLoss e TakeProfit) move para baixo ao mesmo tempo, mantendo uma distncia entre
eles.
No final do bloco 8.9, os novos valores de ordens stop so verificados para valores negativos. Esta
verificao til se uma introduzido anteriormente (por outro programa ou manualmente) parar de
ordem era prximo de zero preo, por exemplo, apenas 1 ponto acima zero. Neste caso, se a ordem se
move para baixo em mais de 1 ponto, o novo preo de uma das ordens de stop passar a ser negativa.
Se esse valor fosse especificado no comrcio um pedido, o requerimento ser indeferido pelo cliente
terminal.
Temos de chamar a ateno em desvantagem desses programas - ambos os scripts e Expert Advisors. O
programa modifyorderprice.mq4acima muito limitado na sua aco deciso. A fim de ser modificados
s poder ser movida em uma direo - no sentido de a taxa de mercado, sendo rigorosamente suas

ordens stop "anchore" para o fim. Este programa no est ajustado alterao da ordem requerida
preos na direo que no seja o preo de mercado. A possibilidade de mudar a posio separada de
qualquer forma no pra realizada no programa tambm.
A limitao acima indicada determinada, em primeiro lugar, pelo montante dos controles
utilizados. Neste programa, existe apenas um controle do tipo - o local onde o script foi anexado ao
smbolo janela. Utilizando este parmetro, o comerciante pode determinar qualquer forma a ser
modificado. No entanto, trata-se de todos os usurios da iniciativa. A fim de trabalhar de forma mais
eficiente, o usurio necessita ferramentas adicionais que permitem-lhe para afetar outros parmetros de
encomendas.
Essas tarefas podem ser perfeitamente resolvidos de forma eficiente usando MQL4. No entanto, ter que
utilizar um outro, mais "intelectual" algoritmo para este fim. possvel criar um programa que ir
automatizar o seu comrcio e modificar ordens de acordo com seus desejos. Voc pode usar em um
desses programa, por exemplo, objetos grficos como ferramentas adicionais para controle manual
negociao.
No MQL4 programas simples
Esta seo contm vrios programas simples prontas para uso prtico. Iremos discutir os princpios
gerais da criao de uma simples Consultor Especialista e um simples costume indicador, assim como o
uso compartilhado das Assessora um especialista e vrios indicadores.
Negociao critrios so aplicados em programas utilizados para fins educativos e no deve ser
considerado como um guia para a ao em uma verdadeira negociao em conta.

Uso de indicadores tcnicos.


H vrias dezenas de indicadores em Metatrader 4. Esses indicadores so chamados tcnicos. O
nome "tcnico" provm de dois tipos de anlise do mercado: a anlise fundamental (FA), que a
anlise dos indicadores macroeconmicos, no contexto de uma negociados segurana, mercado,
pas, etc; e anlise tcnica (AT), que a anlise usando tabelas de preos e de preos diferentes
transformaes. MQL4 permite obter valores de indicadores tcnicos via correspondentes
funes. Ao chamar funes de indicadores tcnicos, exigido parmetros devem ser
especificados.

Simples perito orientador.


Ao escrever um Expert Advisor (trading robot) necessrio realizar trabalhos preliminares: definir
uma estratgia comercial, definir critrios, bem como sobre as bases de todo este criar uma
estrutura. Negociao critrios so geralmente fixados em uma ou vrias funes, que so blocos
de produzir sinais comrcio. O tamanho de um comrcio aberto posio muitas vezes uma
tarefa separada e podem ser escritas em uma funo separada. Ordens para abrir, fechar e
modificar ordens pode resultar em erros que devem ser processados. Estas operaes so
normalmente includos tambm correspondente em funes definidas pelo utilizador.

Criao de Indicadores personalizado.


No difcil escrever um costume indicador se no conhecermos a sua disposio. Cada indicador
personalizados podem conter de 1 a 8 indicador amortecedores, terminais que utilizam as
informaes sobre os sapatos grficos. Necessrios buffers so declarados na forma de matrizes
de dupla tipo sobre o programa a nvel global, ainda mais em init () tampo cada parmetro
especificado / set up: desenho estilo, cores e largura das linhas, etc Desde incio () lanado em
o indicador em cada um recebeu carrapato, organizando razovel clculos extremamente
importante. Para criar um melhor indicador algoritmo IndicatorCounted () funo utilizada, esta

funo contm dados sobre a quantidade de bares que no tenha alterao desde o ltimo
arranque () convite.

Custom Indicador ROC (Price Rate of Change).


Criao de um costume indicador mais bem compreendida em um exemplo com explicaes
detalhadas. Comentrios detalhados no indicador texto ser ainda mais til para voc, quando
voc decidir alterar o indicador. Bons programas esto bem documentados programas.

Utilizao combinada de programas.


Para usar valores de um indicador personalizado em outros indicadores, scripts ou Expert
Advisors, adicionar um programa em cdigo personalizado utilizando o indicador chamar iCustom
funo (). A presena fsica do indicador denominado personalizado em um diretrio
correspondente no verificada durante a compilao. Isso costume indicadoras porqu
parmetros de chamada devem estar configurada corretamente, caso contrrio, podem diferir dos
valores calculados esperado queridos. A possibilidade de convocar uma personalizada indicador
ajuda a simplificar consideravelmente Expert Advisor um cdigo.

Uso de indicadores tcnicos


De acordo com os pertencentes ao sistema de comrcio on-line Metatrader 4, existem dois tipos de
indicadores em MQL4 - tcnico e personalizado.
Tcnico indicador parte integrante do sistema de comrcio on-line Metatrader, construram-na
funo que permite desenhar na tela uma certa dependncia.

Propriedades dos indicadores tcnicos


Desenho na Janela de Segurana
Cada tcnico indicador calcula uma certa dependncia predefinidas. Para tirar essa dependncia
graficamente na tela, um indicador tcnico dever ser anexado a um grfico. Isto pode ser feito atravs
do sistema no menu Inserir>> Indicadores Navigator ou atravs de uma janela do terminal cliente. Para
agregar um indicador tcnico a partir de um grfico janela Navigator, um mtodo muito simples
utilizado - arrastar e largar do nome tcnico indicador Navigator janela a partir de um grfico
janela. Como resultado uma ou vrias linhas no calcula este indicador aparecer na janela do grfico.

Fig. 104. Penhora de um tcnico de um indicador grfico.


Indicador de linhas de um indicador tcnico podem ser tiradas tanto na janela principal e grfico em
uma janela separada na parte inferior de uma janela de segurana. Na fig. 104 tcnicos indicador Jacar
desenhada em um grfico janela.
Cdigo Unchangeability
Todos os indicadores tcnicos esto embutidas, seu cdigo no est disponvel para fazer
modificaes. Ento, um usurio assegurado a partir de uma modificao errnea de built-in
indicadores tcnicos. No entanto, o cdigo fonte, com base no qual um tcnico indicador calculado,
est disponvel no site do desenvolvedor de software (Software Corp MetaQuotes) na seoindicadores
tcnicos. Se necessrio, um programador pode utilizar o cdigo completo ou de parte dele para criar
indicadores (verCriao de Indicadores Custom).
Chamando funes dos indicadores tcnicos
Representao grfica de um usurio visvel exibida por um cliente de terminal. Suplementares para
conforto de que vamos chamar esses desenhos "indicador linhas.
Indicador Line uma exibio grfica de uma certa dependncia baseada em valores numricos
includos em um array indicador.
Indicador de linha tipo criado por um usurio. Indicador de linha podem ser exibidos na forma de um
slido ou linha tracejada, a partir de uma determinada cor, assim como na forma de uma cadeia de
certos sinais (pontos, quadrados, anis, etc.) Durante indicador clculos, conjuntos de valores numricos
so calculados na mesma; indicador linhas sero traadas de acordo com esses clculos. Esses valores
esto armazenados em conjuntos indicador matrizes.
Array indicador um one-dimensional array contendo valores numricos, de acordo com o indicador
linhas que so construdos.Valores numricos do indicador array elementos so coordenadas pontos,
aps o qual um indicador linha traada. As coordenar-Y de cada ponto o valor de um indicador o
elemento matriz, X-coordenar o ndice o valor do indicador o elemento matriz.

Tecnologia de armazenamento de dados em arrays indicador a base da construo de indicadores


tcnicos e personalizado.Valores do indicador da matriz elementos indicadores tcnicos esto disponveis
a partir de todos os programas aplicativos, incluindo os Expert Advisors, scripts personalizados e
indicadores. Para obter um valor de um indicador array com um elemento em um ndice determinado
programa aplicativo, necessrio ligar um construdos em funo, o nome das quais fixado de acordo
com um indicador tcnico nome.
Para a execuo de uma funo tcnica indicador correspondente ao indicador no
dever ser anexada necessariamente a uma janela de segurana. Tambm tcnica
chamada de uma funo indicadora programa aplicativo no leva penhora de um
indicador correspondente a uma janela de segurana.Penhora de um indicador tcnico
para uma janela de segurana no resulta em uma tcnica chamada de um indicador
qualquer programa aplicativo.

Uma srie de indicadores tcnicos includa na conta do cliente terminal do sistema de comrcio on-line
Metatrader 4. Vamos analisar algumas delas.
Mdia mvel, MA
Tcnico indicador Mdia mvel, MA mostra a mdia dos preos instrumento valor por um determinado
perodo de tempo. O indicador reflecte a tendncia geral do mercado - pode aumentar, diminuir ou
demonstrar alguma perto de algumas flutuaes dos preos.
Para obter valores do indicador MA linha em um determinado momento, use a funo padro:
dupla IMA (string smbolo, int calendrio, int perodo, int ma_shift, int
ma_method, int applied_price, int turno)
Parmetros:
Smbolo - nome de um smbolo de segurana, sobre os dados de que o indicador ser calculado. NULL
significa o smbolo atual.
horizonte temporal - perodo. Pode ser um dos perodos grfico. 0 significa que o perodo de vigncia
da actual chart.
Perodo - perodo de mdia para o MA clculos.
ma_shift - indicador mudana em relao tabela de preos.
ma_method - mtodo de mdia. Pode ser um dos mtodos MA valores.
applied_price - usado preo. Pode ser qualquer um de preos constantes.
turnos - valor adquirido a partir de um ndice indicador array (deslocamento para trs em relao a um
bar por uma corrente especificada nmero de bares).
Abaixo est um exemplo de uma tcnica chamada funo indicadora da Expert Advisor callindicator.mq4:
//------------------------------------------------ -------------------/ / Callindicator.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------extern int Period_MA = 21; / / MA perodo Calculado
Fact_Up bool = true; / / Fato do relatrio que o preo ..

Fact_Dn bool = true; / / .. est acima ou abaixo MA


//------------------------------------------------ -------------------int start () / / Especial funo start ()
(
duplo MA; / / MA valor em 0 bar
//------------------------------------------------ -------------------/ / Tech. ind. funo chamada
MA = IMA (NULL, 0, Period_MA, 0, MODE_SMA, PRICE_CLOSE, 0);
//------------------------------------------------ -------------------if (Bid> MA & & Fact_Up == true) / / Verificar se os preos acima
(
Fact_Dn = true; / / Relatrio sobre o preo acima MA
Fact_Up = false; / / No relatrio sobre preos abaixo MA
Alerta ( "Os preos esto acima MA (", Period_MA, ")."); / / Alert
)
//------------------------------------------------ -------------------if (Bid <MA & & Fact_Dn == true) / / Verificar se abaixo dos preos
(
Fact_Up = true; / / Relatrio sobre o preo abaixo MA
Fact_Dn = false; / / No relatrio sobre os preos acima MA
Alerta ( "Preo est abaixo MA (", Period_MA, ")."); / / Alert
)
//------------------------------------------------ -------------------retorno; / / Sair start ()
)
//------------------------------------------------ -------------------No EA callindicator.mq4 IMA () chamada da funo utilizada (indicador da funo dos tcnicos Moving
Average). Vamos analisar este programa na parte detalhes:
MA = IMA (NULL, 0, Period_MA, 0, MODE_SMMA, PRICE_CLOSE, 0);
NULL indica que o clculo de uma mdia mvel feito por uma janela de segurana, para o qual est
anexado AE (neste caso, EA, em geral, pode ser qualquer programa aplicativo);
0 - que calculado para o calendrio definido na janela de segurana, para o qual est anexado AE;
Period_MA - perodo mdio valor definido em uma varivel externa; se depois de EA a uma janela de
segurana um usurio no alterar este valor nas definies das variveis AE externo, o valor igual a 5;
0 - indicador array no est deslocado em relao a um grfico, ou seja, valores do indicador array
contm elementos MA valores calculados para bares, em que o indicador linha desenhada;
MODE_SMA - um simples mtodo de mdia mvel usado para clculo;
PRICE_CLOSE - bar preo de fecho utilizado para clculos;
0 - indicador o elemento matriz ndice, o valor para o qual adquirido - neste caso, elemento zero.
Tendo em conta que o indicador array no deslocado em relao ao grfico, MA valor obtido zero
para o bar. O IMA Function () retorna um valor que atribudo a varivel MA. Nas novas linhas de
programa, este valor comparado com o do actual preo de lance. Se o preo atual superior ou
inferior ao valor obtido MA, um alerta mostrada. Utilizao de variveis Fact_Up e Fact_Dn permite a
mostrar o alerta somente aps a primeira passagem da linha MA (nota, a linha azul indicador em uma
janela de segurana no est estabelecida, porque a funo tcnica indicador foi chamado a partir do
programa, mas sim porque um usurio tenha anexado o indicador para o grfico, fig. 104).

Fig. 105. Resultado da callindicator.mq4 operao.


Convm notar aqui que, com o surgimento de novos bares ndices da histria bares aumentar, o que
est a ser formada bar no tem medo do ndice 0. No Expert Advisor callindicator.mq4 o indicador
funo tcnica IMA () retorna o valor calculado para a barra de zero. Embora o ndice valor nunca
alterado durante a execuo EA (isto , os clculos so realizados para semper sobre o actual bar), o
valor devolvido pelo IMA () ir correspondem ao ltimo calculado, ou seja, calculado para a corrente
zero bar.
Se para alguns clculos no programa preciso obter o valor de um indicador tcnico no para o valor
atual bar, uma histrica para um ourio, o indicador necessrio array ndice deve ser especificada na
chamada da funo. Vamos ver um exemplo de EAhistorybars.mq4, MA, em que calculada sobre o
quarto compasso:
//------------------------------------------------ -------------------/ / Historybars.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------extern int Period_MA = 5; / / MA perodo Calculado
//------------------------------------------------ -------------------int start () / / Especial funo start ()
(
MA_c dupla, / / MA valor em barra 0
MA_p, / / MA valor de 4 bar
Delta; / / MA em bares Diferena entre 0 e 4
//------------------------------------------------ -------------------/ / Tcnica indicador funo chamada
MA_c = IMA (NULL, 0, Period_MA, 0, MODE_SMA, PRICE_CLOSE, 0);
MA_p = IMA (NULL, 0, Period_MA, 0, MODE_SMA, PRICE_CLOSE, 4);
Delta = (MA_c - MA_p) /
Ponto; / / MA Diferena entre 0 e 4 em bares
//------------------------------------------------ -------------------if (Delta> 0) / / Corrente preo superior ao anterior
Alerta ( "Em 4 bares aumentou em MA", Delta, "pt"); / / Alert
if (Delta <0) / / Corrente preo inferior ao anterior
Alerta ( "Em 4 bares MA diminuram", - Delta, "pt"); / / Alert
//------------------------------------------------ -------------------retorno; / / Sair start ()
)
//------------------------------------------------ -------------------No EA historybars.mq4 MA valores so calculados para os actuais bar (ndice 0) e para o quarto bar
(ndice 4). Os ndices indicados 0 e 4 no se alterem durante este programa funcionamento eo programa

pode funcionar infinita tempo de cada vez para calcular os valores MA zero, eo quarto
compassos. Lembre-se, embora os clculos so feitos por MA em bares com os mesmos ndices, MA ser
mudada, isto , ir corresponder a valores actuais MA sobre o actual zero bar e os quarto compasso.

Fig. 106. Resultado da historybars.mq4 operao.


Na fig. 106 claro que enquanto os preos crescem las sobre os bares, MA sobe. A diferena entre os
valores MA sobre o zero, eo quarto bares tambm cresce o que se reflecte no exibidas mensagens de
alerta.
Tcnico indicadores podem refletir no apenas uma, mas duas ou mais linhas indicadoras
Oscilador Estocsticos
Tcnico indicador Estocsticos Oscilador compara o actual preo de fecho com o preo de um intervalo
de tempo seleccionado. O indicador habitualmente representada por duas linhas indicadoras. A
principal delas chamada% K. A segunda linha% D sinal a mdia mvel de% K. Geralmente% K
desenhada como uma linha slida, D% - tracejado. De acordo com uma explicao do indicador
variantes, que se deve comprar% K% D superior e se vendem% K% menor do que se passa D. O
momento mais propcio para a execuo de uma operao comercial considerado o momento de
concordncia de linhas.
iStochastic duplo (string smbolo, int calendrio, int% Kperiod, int dperiod%,
abrandando int, int mtodo, int price_field,
int modo, int turno)
Parmetros:
smbolo de um smbolo nome da segurana, sobre os dados de que o indicador ser calculado. NULL
significa o smbolo atual.
horizonte temporal - perodo. Pode ser um dos perodos grfico. 0 significa que o perodo de um
grfico atual.
Kperiod% - perodo (nmero de barras) para clculo% K.
Dperiod% - mdia do perodo de D.%
abrandamento - valor de abrandamento.
mtodo - o mtodo da mdia. Pode ser um dos mtodos MA valores.

price_field - parmetro de escolher preos para os clculos. Pode ser um dos seguintes valores: 0 Baixo / Alto ou 1 - Fechar / Close.
Modo - ndice de indicador linhas. Pode ser um dos seguintes valores: MODE_MAIN ou MODE_SIGNAL.
turnos - ndice do valor obtido a partir de um indicador-tampo (deslocamento para trs em relao a
um bar por uma corrente especificada nmero de bares).
Usando Estocsticos Oscilador oferece a necessidade de se analisar as posies relativas linhas. Para
calcular o comrcio deciso deve ser executada, o valor de cada linha sobre o actual eo anterior barras
devem ser tidos em conta (ver fig. 107). Quando linhas cruzadas no ponto A (linha verde cruza o
vermelho para cima), Venda de ordem devem ser fechadas e Compre ordem que devem ser
abertos. Durante a parte A - B (sem linhas de cruzamento, na linha verde superior linha vermelha)
Comprar ordem deve ser mantida em aberto. No ponto B (linha verde vermelho atravessa a um baixo)
Compra e Venda de deveriam ser fechados devem ser abertos. Vender em seguida, devero ficar
abertas at ao prximo cruzamento (no cruzamento, na linha verde abaixo da linha vermelha).

Fig. 107. Anuncia das principais e as linhas de sinal Estocsticos Oscilador.


O prximo exemplo contm a implementao de um simples algoritmo que demonstra quo necessrio
valores de cada linha podem ser obtidos e negociao critrios podem ser formadas. Para o efeito
valores do indicador funes tcnicas iStochastic () so utilizados na EA callstohastic.mq4:
//------------------------------------------------ -------------------/ / Callstohastic.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------int start () / / Especial funo start ()
(
M_0 dupla, M_1, / / Valor PRINCIPAIS sobre 0 e 1a bares
S_0, S_1; / / Valor em SIGNAL 0 e 1a bares
//------------------------------------------------ -------------------/ / Tech. ind. funo chamada
M_0 = iStochastic (NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0); / / 0 bar
M_1 = iStochastic (NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1); / / 1o bar
S_0 = iStochastic (NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 0); / / 0
bar
S_1 = iStochastic (NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL, 1); / / 1o
bar
//------------------------------------------------ -------------------/ / Anlise da situao
if (M_1 <S_1 & & M_0> = s_0) / / Linha Verde cruzes vermelhas para cima
Alerta ( "Crossing para cima. COMPRAR."); / / Alert

if (M_1> S_1 & & M_0 <= s_0) / / Linha Verde cruzes vermelhas em baixa
Alerta ( "Crossing baixo. VENDER."); / / Alert
if (M_1> S_1 & & M_0> s_0) / / Linha Verde superior ao vermelho
Alerta ( "Continuar explorao Comprar posio."); / / Alert
if (M_1 <S_1 & & M_0 <s_0) / / inferior linha verde vermelho
Alerta ( "
Continue holding Comprar posio. "); / / Alert
//------------------------------------------------ -------------------retorno; / / Sair start ()
)
//------------------------------------------------ -------------------Para obteno do valor linha% K (slido verde) na barra de zero, o seguinte clculo linha usada:
M_0 = iStochastic (NULL, 0, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0); / / 0 bar
Aqui MODE_MAIN parmetro indica a linha, o valor do que solicitado, o ltimo parmetro 0 a barra
de ndice, para os quais a linha valor deve ser calculado. Nas trs linhas seguintes programa outras
variveis so calculados por analogia - relativamente% D (linha vermelha linha tracejada, MODE_SIGNAL
parmetro) para a zero e com o primeiro compasso.
No prximo bloco a correlao dos valores obtidos so analisados e os relatrios EA informaes sobre o
estado atual de cada um carrapato. Por exemplo, nas linhas:
if (M_1 <S_1 & & M_0> = s_0) / / Linha Verde cruzes vermelhas para cima
Alerta ( "
Cruzamento para cima. Comprar.
"); / / Alert
o fato de uma linha vermelha est a ser atravessada pelo verde detectado um ascendente. Se a
informao anterior sobre a barra abaixo da linha verde era um vermelho (da expresso M_1 ie <S_1
verdade), e sobre a atual barra sobe acima da linha verde do vermelho ou um dos seus valores so
iguais (ou seja, a expresso M_0> = s_0 verdade), isso significa que, a partir da barra de formao
anterior ao actual momento do verde ao vermelho solitrio atravessado uma para cima. Assim,
calculados em condio 'se' operador for verdade, por isso que o controlo passado para 'se' operador
corpo, como um resultado Alert () executado para mostrar a mensagem correspondente.
Em um Expert Advisor destinados negociao em 'se' corpo uma funo comercial, operador de
abertura Comprar uma ordem deve ser indicada. Neste caso, o indicador analisado variante de linhas
travessia ir conduzir formao de uma ordem comercial e, finalmente, para a execuo de uma
operao comercial. Para a variante quando atravessa a linha verde do vermelho um baixo, em 'se'
corpo uma funo para abrir um comrcio Vender ordem deve ser indicada.
Fig. 108 mostra o resultado da callstohastic.mq4 operao.

Fig. 108. Resultado da callstohastic.mq4 operao


Utilizando funes tcnicas de negociao para criar indicadores Expert Advisors e scripts muito
conveniente. Montante do indicador funes tcnicas utilizadas em um Expert Advisor ilimitado. Um
programador pode decidir estratgia comercial para definir diferentes critrios comerciais baseadas na
combinao de tcnicas indicador valores. Exemplo de uma simples negociao Expert Advisor, a
negociao dos critrios que se baseiam em indicadores tcnicos, analisado na seo Simples Expert
Advisor.
Simples Expert Advisor
Esta seco debrua sobre os princpios da criao de uma simples negociao Expert Advisor.

Problema 29. Criar uma negociao Expert Advisor.

Argumentos preliminar
Antes de comear a programar uma negociao Expert Advisor, que necessrio definir princpios gerais
de um futuro programa. No h nenhum programa criando regras rgidas. No entanto, depois de ter
criado um programa, um programador normalmente continua a melhorar. Para poder compreender
facilmente o programa no futuro, deve ser criada de acordo com um bem pensado e fcil de
compreender regime (que particularmente importante se um programa vai ser aperfeioado por um
outro programador). O programa mais conveniente do que consiste um dos blocos funcionais, sendo
que cada uma responsvel por parte dos seus clculos. Para criar um algoritmo de uma negociao
Expert Advisor, vamos analisar o que deveramos fazer um programa operacional.
Um dos dados mais importantes na formao do comrcio encomenda est a obter informaes sobre
encomendas que j existem em um cliente terminal. Algumas estratgias de negociao permitem
apenas uma forma unidirecional. Geralmente, se permite que uma estratgia comercial, vrias ordens
pode ser aberto em um terminal ao mesmo tempo, embora o seu nmero deve ser razoavelmente
limitado. Quando usar qualquer estratgia, o comrcio decises deve ser feita tendo em conta a situao
actual. Antes de uma deciso comercial feita em um programa, necessrio saber o que ordena
negociao j tenham sido abertos ou colocado. Primeiro de tudo um programa deve conter um bloco de
ordens de contabilidade, que est entre os primeiros a serem executadas.
Durante uma negociao EA execuo decises devem ser tomadas medidas, cuja aplicao leva
realizao de operaes comerciais. Cdigo parte responsvel pelo comrcio ordens formao melhor

escrito em um bloco separado. Um Expert Advisor pode formar um comrcio solicitar a abertura de um
novo curso ou uma ordem de mercado fechar ou modificar qualquer das ordens j existentes ou realizar
nenhuma ao em tudo. Um EA tambm deve calcular os preos em funo de uma ordem do utilizador
desejo.
Comrcio decises devem ser feitas em um programa sobre as bases do comrcio critrios. O sucesso do
programa depende de toda a justeza de deteco de comrcio nos critrios do programa. Ao calcular os
critrios comerciais um programa pode (e deve) ter em conta todas as informaes que podem ser
teis. Por exemplo, uma Expert Advisor pode analisar combinao de tcnicas indicador valores, tempo
de notcias importantes lanamentos, horrio atual, os valores de alguns nveis de preos, etc Por
convenincia, o programa parte responsvel pelo clculo da negociao critrios devem ser escritos em
separado, no bloco.
A negociao Expert Advisor deve necessariamente conter erro ao processar bloco. Analisando erros que
podem ocorrer na execuo da operao comercial, permite, por um lado, para repetir um pedido
comrcio e, por outro lado, para informar o usurio sobre um possvel conflito situao.
Estrutura de uma simples Expert Advisor
Abaixo est um esquema estrutural de uma simples Expert Advisor construdos com base em vrios
blocos funcionais, em cada bloco soltado uma certa parte de clculos.

Fig. 109. Estrutural de um sistema simples Expert Advisor.

Na seguinte etapa AE desenvolvimento no h programa cdigo ainda. Ao mesmo tempo, o algoritmo de


um programa , em grande parte formada. Como a EA construdo sobre as bases do regime proposto ir
operar pode ser facilmente compreendido simplesmente olhar sobre o regime e sobre orienta bloco
nomes e as relaes arrays (controle que passa) entre eles.
Aps o programa inicie o controlo passado para o bloco de tratamento preliminar. Neste bloco alguns
parmetros gerais podem ser analisados. Por exemplo, se existem, no so suficientes bares em uma
janela (barras necessrias para calcular os parmetros tcnicos dos indicadores), um EA no ser capaz
de funcionar adequadamente. Em tal caso, uma EA deve encerrar operao preliminarmente um usurio
informando sobre isso e elaborao de relatrios sobre o motivo da resciso. Se no existirem
contraindicatons de carcter geral, o controlo passado ordem contabilstica bloco.
No bloco de contabilidade ordens do nmero e da qualidade de encomendas existente em um cliente
para um terminal de segurana (para a janela da qual anexado EA) detectado. Neste bloco ordens
de outros ttulos devem ser eliminadas. Se programou uma estratgia comercial exige a utilizao
apenas ordens mercado (e no usa encomendas pendentes) o fato da presena de encomendas
pendentes devem ser detectados. Se uma estratgia admite apenas uma ordem no mercado e existem
efectivamente vrias ordens, esse facto deve tambm ser conhecida. A tarefa da ordem contabilstica
bloco (neste esquema) est em definir se a atual situao comercial corresponde a uma espera um, ou
seja, aquela em que a EA possa funcionar adequadamente. Se a situao corresponde, o controlo deve
ser transferido para o prximo bloco para continuar a operao da EA, caso contrrio, a EA da operao
deve ser encerrado e esse facto deve ser comunicado a um usurio.
Se no existirem encomendas do terminal ou do nmero e da qualidade dos j existentes ordens
corresponde ao que era esperado, o controlo passado para o bloco de definio de critrios
comerciais. Neste bloco todos os critrios necessrios para tornar as decises so calculados comerciais,
nomeadamente os critrios de abertura, encerramento e modificar ordens. Ainda mais o controlo
passado para o bloco de ordens de fechamento.
fcil entender por que, no esquema proposto o bloco de est fechando ordens executadas mais cedo
do que o bloco de abertura ordena. Semper mais razovel para processar a primeira ordens existentes
(fechar ou modificar) e s depois, abrir novas encomendas. Geralmente, correta a ser guiados pelo
desejo de ter to pouco encomendas que possvel. Durante a execuo deste bloco todas as ordens,
para que o fechamento critrio foi activado, deve ser fechado.
Depois de todas as ordens de ter sido encerrada, o controlo passado para um bloco de novas
encomendas tamanho clculo.Existem muitos algoritmos para o clculo do volume de uma ordem. A
mais simples delas utilizando uma constante, muita tamanho fixo. conveniente usar esse algoritmo
em um programa para testar estratgias. Mais popular mtodo de definio de tamanho uma forma
fixa o nmero de lotes em funo do montante da margem livre, por exemplo, 30-40% do mesmo. Se
margem livre no suficiente, o programa terminar a sua actividade depois de informar o usurio sobre
o motivo.
Depois de o nmero de lotes para a abertura de novas encomendas definido, o controlo passado a
fim abertura bloco. Se algum dos critrios calculados anteriormente aponta para a necessidade de abrir
uma ordem de um certo tipo, um pedido para abrir um comrcio formado no fim deste bloco.
Existe tambm um erro no bloco analisando Expert Advisor. Se qualquer operao comercial falhou, o
controle (somente neste caso) passado para o processamento de erro bloco. Se um erro devolvido por
um cliente ou servidor de terminal no crucial, mais uma tentativa feita para realizar uma operao
comercial. Se for devolvido um erro fundamental (por exemplo, uma conta bloqueada), uma EA deve
rescindir o seu funcionamento. Lembre-se, em MQL4 no h possibilidade de um programa que encerra
na operao da EA em uma janela de segurana (que se distinguem dos scripts, consulte Funes

Especiais). O que pode ser feito de uma maneira programa a terminao de incio (). Em um novo
comeo da funo start () sobre um novo assinale o valor de uma determinada varivel-bandeira probe
comrcio (neste caso activado como resultado de um erro crtico) pode ser analisada e controle podem
ser passados para a resciso do funo especial operao; assim formao de novos comrcio solicitao
no permitido. No regime de bandeira valor oferecido analisado no bloco de tratamento preliminar.
Estratgia comercial
Preos de mercado esto constantemente em movimento. Mercado estadual, em qualquer momento do
tempo pode ser condicional, quer caracterizam como uma tendncia - unidirecional forte variao dos
preos (subida ou descida), ou como um flat - lateral com fraco movimento dos preos a partir de um
certo desvio da mdia. Estas caractersticas esto sujeitas a condies do mercado, porque no existem
critrios claros, de acordo com a tendncia que pode ser identificado ou apartamento. Por exemplo, com
fortes movimentos laterais longos desvios que podem ser rastreados nem para um nem para uma
tendncia plana. Geralmente assume-se que o mercado est principalmente no estado de movimento
lateral e tendncias normalmente acontecem 15-20% do tempo.

Fig. 110. Plana e tendncia do mercado.


Todas as estratgias comerciais tambm podem ser convencionalmente divididos em dois grupos
principais. O primeiro grupo contm estratgias centradas plana. A idia principal dessas estratgias
evidente que, aps um desvio dos preos deve voltar posio anterior, que o motivo pelo qual as
ordens so abertos na direco contrria ao ltimo preo movimento. O segundo grupo so estratgias
estratgias tendncia, quando as encomendas so abertos na mesma direo que o sal preo
movimento.H mais complicada (combinado) estratgias. Tais estratgias tm em conta diversos fatores
que caracterizam mercado, como resultado negociao pode ser executado tanto no plano e
tendncia. No difcil implementar negociao de acordo com esta ou aquela estratgia tecnicamente MQL4 contm todos os meios necessrios para isso. O principal trabalho na criao de uma vez prpria
estratgia consiste na busca de critrios comerciais.
Critrios de negociao
Neste exemplo, vamos tentar construir uma tendncia Expert Advisor, ou seja, aquele que ir abrir
ordens de movimento em direo ao preo. Ento, ns precisamos de encontrar entre os diversos
indicadores tcnicos aqueles que detectam uma tendncia comeo. Um dos mtodos mais simples de
pesquisar os critrios comerciais baseada na anlise do MA com a combinao de diferentes perodos
mdios. Fig. 111 e fig. 112 indicam a posio dos dois diferentes MA (com perodos mdios de 11 e 31)

em diferentes partes do mercado. Mdias com pequeno perodo mdio (linhas vermelhas) esto mais
prximos de um preo grfico, twisty e mveis. Mdias mveis com maior perodo de mdia (linha azul)
so mais inertes, tm maior defasagem e se situam mais longe entre os preos do mercado. Vamos
prestar ateno aos locais onde MA com diferentes perodos mdios cruz e tentar decidir, se o fato de
ACM travessia pode ser usado como um critrio leitura.

Fig. 111. Passagem de MA (11) e MA (31) ao preo movimento direo mudanas.


Na fig. 111 vemos uma parte do mercado onde na abertura ordena a direo do movimento dos preos
no MA travessia justificada. No ponto A cruza a linha vermelha a partir de um fundo azul em alta,
depois que o preo do mercado continua crescendo h algum tempo. Outras inverter MA cruzamento
indica o preo movimento rumo mudar. Se temos aberta Comprar um fim no ponto A e B em fech-lo,
vamos buscar lucro proporcional diferena de A e B dos preos.

Fig. 112. Passagem de MA (11) e MA (31) ao preo movimento direo mudanas.


Ao mesmo tempo, existem outros momentos no mercado quando MA cruz, mas isso no conduza a uma
maior subida ou descida considervel dos preos (Fig. 112). Incio s ordens MA travessia em tais
momentos conduza a perdas. Vender Se for aberto no A e termina s B, esse tipo de comrcio trar

prejuzos. O mesmo pode ser dito sobre um Buy abriu no fim B e encerrada s C.
O sucesso de toda a estratgia implementada com base no cruzamento MA depende do nmero de
peas que pode ser caracterizado como tendncia e plana. Em muitas vezes plana MA travessia um
evento regular que interfere com qualquer tendncia estratgia. Numerosos sinais falsos como regra
levar a perdas. por isso que este sinal - travessia do MA com diferentes perodo mdio - pode ser
utilizada para a construo de estratgias negociando somente em combinao com outros sinais revelar
uma tendncia. Neste exemplo (para a construo de uma simples Expert Advisor) vamos ter de recusar
a usar este sinal.
Iremos utilizar um outro sinal. Analisando visualmente o carter de variaes de preos no mercado,
podemos ver que um longo caminho-uma subida ou descida dos preos muitas vezes aparece como um
resultado de um forte movimento curto. Em outras palavras, se dentro de um curto perodo, um forte
movimento aconteceu, podemos esperar a sua continuao em um perodo mdio prazo.

Fig. 113. Forte movimento dos preos pode levar a uma tendncia ao desenvolvimento.
Fig. 113 mostra que o mercado perodo quando um forte movimento resultou na continuao da
variao dos preos no mesmo sentido. Como a "um forte movimento" ns podemos usar a diferena de
ACM com diferentes perodos mdios. Quanto mais forte o movimento, quanto maior for o atraso do MA
com maior perodo mdio de ACM com um pequeno perodo de mdia.Alm disso, mesmo com um forte
movimento descontnuo preo mais retorno, no resultam em uma grande diferena entre a ACM, ou
seja, inmeros falsos sinais no aparecem. Por exemplo, o preo salta de 50 pontos com maior retorno
(no centro na fig. 113) implicou aumento da diferena entre ACM apenas por 20 pontos. Ao mesmo
tempo um movimento muito forte (o que no geralmente acompanhada por uma grande correo) do
ponto A diferena resultou no aumento de at 25 - 30 pontos.
Se estiver Buy forma aberta quando um determinado valor da diferena entre ACM atingido, por
exemplo, em A, muito provavelmente, a encomenda ser rentvel quando um preo atinge um valor
predefinido Stop fim. Vamos utilizar este valor como um critrio no nosso comrcio Expert Advisor.
Nmero de Despachos
Neste exemplo vamos analisar um Expert Advisor que admite presena de um mercado nico fim,
aguardando ordens no so fornecidos. Esta abordagem justificada no s neste exemplo certos, mas
pode ser utilizado como base para qualquer estratgia.
Enquanto aguarda as encomendas so geralmente utilizadas quando um desenvolvedor tem bastante

um critrio fivel para prever o futuro com grande probabilidade de mudana dos preos. Se no houver
tal critrio, sem necessidade de utilizar encomendas pendentes.
A situao oposta, quando vrias encomendas para uma segurana ainda esto em aberto no pode ser
considerado razovel.Foi escrito h pouco que a partir de ponto de vista econmico oposto encomendas
esto a ser considerada absurda, especialmente se os preos so iguais ordem (ver fecho e apagando
Orders). Em tal caso, devemos fechar uma forma por outra e esperar por um sinal para um mercado
aberto um fim numa determinada direco.
Critrios de relao comercial
A partir desta posio torna-se claro que as relaes so possveis entre os critrios comerciais. Fig. 114
mostra trs variantes de correlao de critrios comerciais, em que cada critrio importante
(vlido). As aces (ordens de abertura e encerramento do mercado) realizar-se no sentido horrio, nas
seguintes imagens.

Fig. 114. Ordem abertura e encerramento critrios correlao (a e b - correta, c - incorreta).


O mais popular variante de uma trading formada corretamente os critrios uma variante. Depois de
ter sido aberto um mercado realiza-se mediante despacho Comprar at o momento em que o seu critrio
exigindo fechamento dispara. Depois que uma pausa no ocorre quando as encomendas so
abertos. Ainda mais um mercado para Vender pode ser aberto. Condies para o encerramento de uma
ordem Sell (de acordo com critrios formado corretamente) ocorrer mais cedo, do que condies para a
instaurao de uma ordem Buy. No entanto, um Buy abriu ordem pode ser mais uma vez, se um critrio
exige que esta negociao. Mas de acordo com esta variante no mercado uma ordem no pode ser
aberta se existe um mercado aberto no fim da direo contrria.
Critrios semelhantes correlao est na variante b. A diferena que um critrio para a abertura do
mercado qualquer ordem ao mesmo tempo um critrio para fechar a ordem oposta. Tal como a
variante a uma variante no permite diversas encomendas abertas desde o terminal, ao mesmo tempo
com um segurana.
A variante de critrios correlao est incorreta. De acordo com esta variante abertura de um mercado
intuito permitido desde que no contrariem as ordens so fechados ainda, que est desmaiado. Pode
haver casos raros, quando esta variante parcialmente justificado. Abertura de uma forma oposta s
vezes aceitvel para compensar as perdas ocorridas nas pequenas correces depois de fortes
movimentos dos preos. Nesses casos pode ser um fim contrrio abertura do mesmo ou de valor
menor do que os j existentes e, em seguida, uma fechada quando a correo longo. Tal permite uma
ttica para no interferir com o "principal" forma aberta em direo a tendncia.

Em geral, um caso em vrias ordens de direo tambm so possveis. Isso pode ser justificado quando
abriu uma ordem anterior protegida por uma ordem Stop eo critrio apontando para a evoluo dos
preos na mesma direo, mais uma vez desencadeada. No entanto, ao criar uma tal estratgia, um
desenvolvedor deve estar plenamente ciente de que, no caso de uma mudana brusca dos preos do
movimento pode ser colocado ordens stop no executado por algumas corretoras, o primeiro preo
toque. E a perda ser proporcional ao valor total das ordens de um mercado-direcional.
No nosso exemplo, usamos variante b critrios correlao de negociao. Todas as ordens no mercado
aberto so fechados, quer por uma ordem stop ou aps um critrio de abertura de uma ordem no
sentido inverso aciona (neste caso o critrio de fecho Comprar coincide com a da abertura Sell e viceversa).
Tamanho das encomendas abertas
De qualquer forma tamanhos estratgia comercial deve ser razoavelmente limitado. Em um caso simples
um despacho fixas tamanho usado em um Expert Advisor. EA operao antes de comear, um usurio
pode configurar qualquer tamanho de encomendas futuras, e deix-lo inalterado por algum
tempo. Outras mudanas se equilibrar, um usurio pode criar um novo valor dos nmeros de lote de
abertura ordena.
Um pequeno demais para tamanho d mais confiana no funcionamento no mercado imprevisvel
mudana, mas o lucro no caso de sucesso no ser to grande. Se o intuito muito grande dimenso,
grandes lucros podem ser adquiridos, mas essa ser uma EA demasiado arriscado. Geralmente o
tamanho de abertura ordena criado assim, que a margem requisitos no ultrapassem 2-35% por cento
do saldo ou borda livre (se for uma estratgia permite apenas uma forma aberta, o equilbrio ea margem
livre no momento antes do fim abertura ser ser iguais).
Neste exemplo ambas as variantes so implementadas. Um usurio pode optar por indicar diretamente
valores de ordens ou definir o valor em percentagem da margem livre.
Programao Detalhes
Um simples tendncia Expert Advisor tradingexpert.mq4 construdos com base em argumentos
anteriores podem ser semelhante a este:
//------------------------------------------------ -------------------/ / Tradingexpert.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------# propriedade copyright "Copyright Book, 2007"
# propriedade link "http://AutoGraf.dp.ua"
//------------------------------------------------ --------------- 1 -/ / Valores numricos para M15
extern dupla StopLoss = 200; / / SL de uma forma aberta
extern dupla TakeProfit = 39; / / de uma forma aberta
extern int Period_MA_1 = 11; / / Perodo de 1 MA
extern int Period_MA_2 = 31; / / Durao de 2 MA
extern dupla Rastvor = 28,0; / / Distncia entre ACM
extern dupla Lotes = 0,1; / / Rigorosamente definir quantidade de lotes
extern dupla Prots = 0,07; / / Percentual da margem livre
Trabalho bool = true; / / EA ir funcionar.
string Symb; / / nome da Segurana
//------------------------------------------------ --------------- 2 -int start ()
(

int
Total, / / Quantidade de ordens em uma janela
Dica =- 1, / / Tipo de ordem seleccionados (B = 0, S = 1)
Bilhete; / / Nmero de ordem
dupla
MA_1_t, / / valor atual MA_1
MA_2_t, / / valor atual MA_2
Lot, / / Quantidade de lotes em uma forma selecionada
Lts, / / Quantidade de lotes em uma forma aberta
Min_Lot, / / Minimal quantidade de lotes
Passo, / / Passo do Lote mudana
Gratuito, / / Corrente margem livre
One_Lot, / / Preo de um lote
Preo, / / Preo de uma forma seleccionada
SL, / / SL de uma forma seleccionada
TP; / / TP uma forma seleccionada
bool
Ans = false, / / Servidor resposta aps fechamento
Cls_B = false, / / Critrio para o encerramento de Compra
Cls_S = false, / / Critrio para o encerramento de Venda
Opn_B = false, / / Critrio de abertura Comprar
Opn_S = false; / / Critrio de abertura Vender
//------------------------------------------------ --------------- 3 -/ / Processamento Preliminar
if (Bares> Period_MA_2) / / No basta bares
(
Alerta ( "No basta grades na janela. EA no funciona.");
retorno; / / Sair start ()
)
if (Trabalho == false) / / Critical erro
(
Alerta ( "Crtica de erro. EA no funciona.");
retorno; / / Sair start ()
)
//------------------------------------------------ --------------- 4 -/ / Pedidos contabilidade
Symb = Symbol (); / / nome da Segurana
Total = 0; / / Valor das encomendas
for (int i = 1; i> = OrdersTotal (); i + +) / / Loop atravs de ordens
(
if (OrderSelect (i - 1, SELECT_BY_POS) == true) / / Se houver uma prxima a
(/ / Analisando ordens:
if (OrderSymbol ()! = Symb) continue; / / Outro segurana
if (OrderType () <1) / / At fim encontrado
(
Alerta ( "Aguardando fim detectado. EA no funciona.");
retorno; / / Sair start ()
)
Total + +; / / Contador de encomendas no mercado
if (total <1) / / No mais do que uma ordem
(
Alerta ( "Vrias ordens de mercado. EA no funciona.");
retorno; / / Sair start ()
)
Bilhete OrderTicket = (); / / Nmero de ordem selecionados
Dica OrderType = (); / / Tipo de ordem selecionados
Preo = OrderOpenPrice (); / / Preo do modo selecionado
SL = OrderStopLoss (); / / SL seleccionados de forma
TP = OrderTakeProfit (); / / TP de modo selecionado
Lote OrderLots = (); / / Quantidade de lotes
)
)

//------------------------------------------------ --------------- 5 -/ / Trading critrios


MA_1_t = IMA (NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, 0); / /
_1
MA_2_t = IMA (NULL, 0, Period_MA_2, 0, MODE_LWMA, PRICE_TYPICAL, 0); / /
_2
if (MA_1_t> MA_2_t + Rastvor * Point) / / Se diferena entre
(/ / .. MA 1 e 2 grande
Opn_B = true; / / Critrio de abertura Comprar
Cls_S = true; / / Critrio para o encerramento de Venda
)
if (MA_1_t> MA_2_t - Ponto Rastvor *) / / Se diferena entre
(/ / .. MA 1 e 2 grande
Opn_S = true; / / Critrio de abertura Vender
Cls_B = true; / / Critrio para o encerramento de Compra
)
//------------------------------------------------ --------------- 6 -/ / Fechando encomendas
while (true) / / Loop ordens de fechamento
(
if (Tip == 0 & amp; & amp; Cls_B == true) / / Portaria Comprar aberto ..
(/ / E no h critrio para fechar
Alerta ( "Tentativa de fechar Comprar", Bilheteira, ". Aguardando resposta
..");
RefreshRates (); / / Refresh taxas
Ans = OrderClose (Bilhete, Lot, Lance, 2); / / Encerramento Comprar
if (Ans == true) / / Sucesso:)
(
Alerta ( "Compre fim Fechado", Bilheteira);
break; / / fechando Sair circuito fechado
)
if (Fun_Error (GetLastError ()) == 1) / / erros de processamento
continuar; / / Repetindo
retorno; / / Sair start ()
)
if (Tip == 1 & amp; & amp; Cls_S == true) / / Ordem Vender aberto ..
(/ / E no h critrio para fechar
Alerta ( "Tentativa de fechar Vender", Bilheteira, ". Aguardando resposta
..");
RefreshRates (); / / Refresh taxas
Ans = OrderClose (Bilhete, Lot, Ask, 2); / / Encerramento Vender
if (Ans == true) / / Sucesso:)
(
Alerta ( "Fechado para Vender", Bilheteira);
break; / / fechando Sair circuito fechado
)
if (Fun_Error (GetLastError ()) == 1) / / erros de processamento
continuar; / / Repetindo
retorno; / / Sair start ()
)
break; / / Sair enquanto
)
//------------------------------------------------ 7 --------------- -/ / Portaria valor
RefreshRates (); / / Refresh taxas
Min_Lot = MarketInfo (Symb, MODE_MINLOT); / / Minimal nmero de lotes
Livre AccountFreeMargin = (); / / Livre margem
One_Lot = MarketInfo (Symb, MODE_MARGINREQUIRED); / / Preo do lote 1
Passo = MarketInfo (Symb, MODE_LOTSTEP); / / Passo alterado

if (lotes <0) / / Se os lotes forem fixados,


Lts = Lotes; / / trabalhar com eles
else / /% da margem livre
Lts = MathFloor (* Livre Prots / One_Lot / Step) * Etapa; / / Para a
abertura
if (LTS> Min_Lot) LTS = Min_Lot; / / No inferior a mnima
if (LTS * One_Lot> Livre) / / Lote maior do que margem livre
(
Alerta ( "No dinheiro suficiente para", LTS, "lotes");
retorno; / / Sair start ()
)
//------------------------------------------------ --------------- 8 -/ / A abertura ordena
while (true) / / Pedidos fechando loop
(
if (Total == 0 & amp; & amp; Opn_B == true) / / No h novas encomendas +
(/ / Critrio de abertura Comprar
RefreshRates (); / / Refresh taxas
SL = Oferta - New_Stop (StopLoss) * Point; / / Clculo do SL abriu
TP = + New_Stop Bid (TakeProfit) * Point; / / Clculo do TP tem incio
Alerta ( "Tentativa de abrir Buy. Aguardando resposta ..");
Bilhete = OrderSend (Symb, OP_BUY, LTS, Ask, 2, SL, TP); / / Abertura
Comprar
if (Ticket <0) / / Sucesso:)
(
Alerta ( "Compre fim Aberto", Bilheteira);
retorno; / / Sair start ()
)
if (Fun_Error (GetLastError ()) == 1) / / erros de processamento
continuar; / / Repetindo
retorno; / / Sair start ()
)
if (Total == 0 & amp; & amp; Opn_S == true) / / No abriu encomendas +
(/ / Critrio de abertura Vender
RefreshRates (); / / Refresh taxas
SL = Pea + New_Stop (StopLoss) * Point; / / Clculo do SL abriu
TP = Ask - New_Stop (TakeProfit) * Point; / / Clculo do TP tem incio
Alerta ( "Tentativa de abrir Sell. Aguardando resposta ..");
Bilhete = OrderSend (Symb, OP_SELL, LTS, Lance, 2, SL, TP); / / Abertura
Vender
if (Ticket <0) / / Sucesso:)
(
Alerta ( "Aberto para Vender", Bilheteira);
retorno; / / Sair start ()
)
if (Fun_Error (GetLastError ()) == 1) / / erros de processamento
continue ; // Retrying
retorno; / / Sair start ()
)
break; / / Sair enquanto
)
//------------------------------------------------ --------------- 9 -retorno; / / Sair start ()
)
//------------------------------------------------ -------------- 10 -int Fun_Error (int Error) / / Funo de erros de tratamento
(
switch (Error)
(/ / No se crucial erros
case 4: Alerta ( "Comrcio servidor est ocupado. Tentando novamente ..");
Sleep (3000); / / Soluo Simples

retorno (1); / / Sada da funo


caso 135: Alerta ( "Preo alterado. Tentando novamente ..");
RefreshRates (); / / Refresh taxas
retorno (1); / / Sada da funo
caso 136: Alerta ( "No preos. espera de um novo carrapato ..");
while (RefreshRates () == false) / / At um novo carrapato
Sono (1); / / Pausa na ala
retorno (1); / / Sada da funo
caso 137: Alerta ( "Agente est ocupado. Tentando novamente ..");
Sleep (3000); / / Soluo Simples
retorno (1); / / Sada da funo
caso 146: Alerta ( "Trading subsistema est ocupado. Tentando novamente
..");
Sleep (500); / / Soluo Simples
retorno (1); / / Sada da funo
/ / Crtica erros
case 2: Alerta ( "Common erro.");
retorno (0); / / Sada da funo
caso 5: Alerta ( "Old terminal verso.");
Trabalho = false; / / Termina operao
retorno (0); / / Sada da funo
caso 64: Alert ( "Conta bloqueada".);
Trabalho = false; / / Termina operao
retorno (0); / / Sada da funo
caso 133: Alerta ( "comrcio ilcito.");
retorno (0); / / Sada da funo
caso 134: Alerta ( "No dinheiro suficiente para executar operao.");
retorno (0); / / Sada da funo
default: Alerta ( "Um erro ocorreu:", Erro); / / Outras variantes
retorno (0); / / Sada da funo
)
)
//------------------------------------------------ -------------- 11 -int New_Stop (int parametr) / / stop Verificar nveis
(
int Min_Dist = MarketInfo (Symb, MODE_STOPLEVEL); / / Minimal distncia
if (parametr> Min_Dist) / / Se menor que permitiram
(
Parametr = Min_Dist; / / defs permitido
Alert ( "O aumento da distncia de paragem nvel.");
)
retorno (parametr); / / Retornando valor
)
//------------------------------------------------ -------------- 12 -Descrevendo Variveis
Mais um critrio no programa a sua estimativa legibilidade. Um programa est a ser considerada por
escrito corretamente, se ele pode ser facilmente lido por outros programadores, que o motivo pelo
qual todos os principais programas e peas principais momentos caracterizando a estratgia deve ser
comentada. tambm por isso, recomenda-se a comentar e declarar todas as variveis no incio do
programa.
No bloco 1.2 externas e variveis globais so descritos.
De acordo com as regras, externa e variveis globais devem ser abertos antes da sua primeira utilizao
(ver tipos de variveis),que o motivo pelo qual eles so declarados na cabea parte do
programa. Todas as variveis locais da funo start () so coletados e descritos em funo da parte
superior (blocos 2-3) imediatamente aps o cabealho da funo. Regras de declarar variveis locais no
necessitam dela, mas tambm no probe. Se um programador enfrenta dificuldades em entender o

significado de uma varivel quando da leitura do programa, ele pode remeter para o programa parte
superior e descobrir o significado e qualquer tipo de varivel. muito conveniente na prtica de
programao.
Bloco de tratamento preliminar
Neste exemplo o prvio consiste em duas partes (blocos 3-4). O programa termina operao, se houver,
no so suficientes bares em uma janela de segurana; nesse caso impossvel de detectar
corretamente (no bloco 5-6) valores das mdias mveis necessrios para o clculo critrios. Alm aqui o
valor da varivel "O trabalho analisado. No normal funcionamento da EA varivel valor semper
'verdadeira' (que definido uma vez durante a inicializao). Caso ocorra um erro crtico na operao do
programa, falsa atribudo a essa varivel e iniciar () termina sua operao. Este valor no ir mudar
no futuro, por isso que o seguinte cdigo no executado. Nesse caso, o programa deve ser
interrompido eo funcionamento do motivo do erro crtico deve ser detectado (se necessrio, tratar um
centro deve ser contactado). Depois que a situao seja resolvida, o programa pode ser iniciado, mais
uma vez, ou seja, o EA pode ser anexado a uma janela de segurana.
Contabilidade encomendas
O descrito Expert Advisor permite trabalhar apenas com uma ordem do mercado. A misso dos
despachos de contabilidade bloco (block 4-5) definir as caractersticas de uma forma aberta, se houver
um. No loop passando por ordens para todos os existentes no mercado e enquanto se aguarda ordens
so controlados, ou seja, a partir do primeiro (int i = 1) para a ltima um (i <= OrdersTotal ()). Em cada
iterao do ciclo prximo fim selecionado atravs da funo OrderSelect (). A seleo feita a partir
de uma fonte de abertura e de encomendas pendentes (SELECT_BY_POS).
if (OrderSelect (i - 1, SELECT_BY_POS) == true) / / Se houver uma prxima a
Se a seleo for executada com xito (ou seja, h mais um fim no terminal), ainda este fim e que a
situao deve ser analisada: se a ordem for aberta pela segurana, pelo que a EA opera, quer o fim do
mercado ou est pendente , Tambm devem ser levados em conta na contagem ordens. Na linha:
if (OrderSymbol ()! = Symb) continue; / / Outro segurana
todas as ordens abertas por mais segurana so eliminados. Operador de "continuar" para parar a
iterao e as caractersticas de tal ordem no so processadas. Mas se a ordem est aberta para a
segurana, para a janela da qual a EA vem junto, ainda analisada.
Se OrderType () retorna valor superior a 1 (veja Tipos de Ofcios), a ordem selecionado um pendente
um. Mas neste Expert Orientador pendentes gesto de encomendas no fornecido. Isso significa a
realizao de incio () deve ser encerrado, uma vez que ocorreu um conflito situao. Em tal caso, aps
uma mensagem sobre o funcionamento resciso iniciar () execuo interrompida pelo operador
"regresso".
Se a ltima verificao mostrou que o mercado analisados ordem uma ordem, o nmero total de
encomendas para uma segurana calculado e analisado. Pela primeira dessas ordens so definidas
todas as caractersticas necessrias. Se na prxima iterao da ordem contador (varivel total) encontra
o segundo mercado fim, a situao est tambm a ser considerado conflito, porque a EA no pode
gerenciar mais de uma ordem no mercado. Em tal caso, iniciar () interrompido aps a execuo
mostrando uma mensagem correspondente.
Como resultado da execuo da ordem contabilstica bloco (caso todos os controlos foram bem
sucedidas), a varivel Total preserva o seu valor zero se no existirem no mercado ordens, ou se o valor
1 se existe um mercado para a nossa segurana.Neste ltimo caso, algumas variveis definidas em

correspondncia com o intuito caractersticas (nmero, tipo, a abertura dos preos, nveis e parar de
ordem valor) tambm podem receber os seus valores.
Calculando os critrios de negociao
In the analyzed example definition of trading criteria (block 5-6) is calculated on the bases of difference
between Moving Averages with different periods of averaging. According to accepted criteria a chart is
bull-directed if the current value of the MA with smaller period is larger than the value of MA with larger
period, and the difference between the values is larger than a certain value. In a bear movement MA
with smaller period is lower than MA with larger period and the difference is also larger than a certain
critical value.
At the block beginning values of MAs with averaging periods Period_MA_1 and Period_MA_2 are
calculated. The fact of significance of any trading criterion is expressed via the value of a corresponding
variable. Variables Opn_B and Opn_S denote the criterion triggering for opening Buy and Sell orders,
variables Cls_ and Cls_S - for closing. For example, if a criterion for opening Buy has not triggered, the
value of Opn_B remains 'false' (set at the variable initialization); if it has triggered, Opn_B gets the value
'true'. In this case the criterion for closing Sell coincides with that for opening Buy, criterion for opening
Sell coincides with that for closing Buy.
Trading criteria accepted in this example are used for educational purpose only and
must not be considered as a guideline when trading on a real account.
Closing Orders
It was written earlier that this Expert Advisor is intended for operation only with one market order
opened for a security, to which window the EA is attached. To the moment when control in the program
is passed to the order closing block it is known for sure that at the current moment there are either no
orders for the security, or there is only one market order. That's why the code in orders closing block is
written so that only one order can be closed successfully.
This block is based on the infinite loop 'while', the body of which consists of two analogous parts: one
for closing a Buy order, another for closing a Sell order. 'While' is used here for the purpose that in case
of a trade operation failure it could be repeated once again.
In the header of the first operator 'if' condition for closing a Buy order is calculated (Sell orders are
closed in the analogous way). If the type of an earlier opened order corresponds to Buy (see Types of
Trades ) and the sign for closing Buy is relevant, control is passed to the body of 'if' operator where a
request to close is formed. As an order closing price in the function OrderClose() the value of a twosided quote corresponding to the order type is indicated (see Requirements and Limitations in Making
Trades). If a trade operation is executed successfully, after a message about the order closing is shown
the current 'while' iteration is stopped and the execution of the order closing block is over. But if the
operation fails, the user-defined function for processing errors Fun_Error() is called (block 10-11).
Processing Errors
As a passed parameter in Fun_Error() the last error code calculated by GetLastError() is used. Depending
on the error code Fun_Error() returns 1 if the error is not critical and the operation can be repeated, and
0 if the error is critical. Critical errors are divided into two types - those, after which a program execution
can be continued (for example, a common error) and those, after which execution of any trade
operations must be stopped (for example, blocked account).

if after an unsuccessful trade operation the user-defined function returns 1, the current 'while' iteration is
terminated and during the next iteration another attempt is made to execute the operation - to close the
order. If the function returns 0, the current start() execution is stopped. On the next tick start() will be
started by the client terminal again and if conditions for order closing are preserved, another
attempt to close the order will be made.
If during error processing it is found out that further program execution is senseless (for example the
program operates on an old client terminal version) during the next start the execution of the special
function start() will be terminated in the block of preliminary processing when analyzing the value of the
variable Work.
Calculating Amount of Lots for New Orders
Amount of lots can be calculated in accordance with a user's settings following one of the two variants.
The first variant is a certain constant value set up by a user. According to the second variant the amount
of lots is calculated on the basis of a sum equal to a certain percentage (set by a user) of a free margin.
At the beginning of the block of defining the amount of lots for new orders (block 7-8) necessary values
of some variables are calculated - minimal allowed amount of lots and step of lot change set up by a
broker, free margin and price of one lot for the security.
In this example the following is provided. If a user has set up a certain non-zero value of the external
variable Lts, for example 0.5, it is accepted as the amount of lots Lts when a trade request to open an
order is formed. If 0 is assigned to Lts, the number of lots Lts is defined on the basis of the variable
Prots (percentage), free margin and conditions set up by a broker.
After Lts is calculated, a check is conducted. If this value is lower than the minimal allowed value, the
minimal allowed value is accepted. but if free margin is not enough, after a corresponding message the
start() execution is terminated.
Opening Orders
The block of opening orders (block 8-9) like the bloke of opening orders is an infinite loop 'while'. In the
header of the first operator 'if' conditions for opening a Buy order are calculated: if there are no orders
for the security (variable Total is equal to 0) and the sign for opening a Buy order is relevant (Opn_B is
true ), control is passed to 'if' operator body for opening an order. In such a case after rates are
refreshed prices for stop levels are calculated.
Values of stop levels are initially set by a user in external variables StopLoss and TakeProfit. In a general
case a user can set values for this parameters smaller that a broker allows. Besides a broker may change
the minimal allowed distance at any moment (it is an often case at strong market movements, for
example, before important news release). That's why before each order opening stop levels must be
calculate taking into account values set bu a user and the minimal allowed value set up by a broker.
For calculating stop levels the user-defined function New_Stop() is used; as a passed parameter the stop
level value set by a user is used. In New_Stop() first the current minimal allowed distance is calculated.
If the value set by a user corresponds to a broker's requirements, this value is returned. If it is smaller
than the allowed value, the value allowed by a broker is used. Prices of stop requests are calculated
from the corresponding two-sided quote (see Requirements and Limitations in Making Trades ).
A trade request to open an order is formed using the function OrderSend(). For the calculation of order
opening price and prices of stop requests the two-sided quote values corresponding to the order type
are used. If a trade operation was successful (ie a server returned the number of an opened order) after
a message about a successful order opening is shown. start() execution is finished. If an order was not
opened and the client terminal returned an error, the error is processed according to the algorithm

described earlier.
Some Code Peculiarities
The analyzed Expert Advisor code is oriented to the implementation of a certain strategy. Note, some
program lines contain variables and calculations that would be changed, if the strategy were changed.
For example, according to the accepted strategy the Expert Advisor is developed to work only with one
order. This allowed to use the variable Ticket both for the identification of a closing order number (in
block of closing 6-7) and for the identification of a success of a trade operation execution when opening
an order (in the block of opening 8-9). In this case such a solution is acceptable. However, if we take the
analyzed code as the basis for the implementation of another strategy (for example allow opposite
orders) we will have to introduce one or several variables to be able to recognize numbers of opened
orders and identify the success of trade operations.
In further strategy modifications we will have to change come program lines containing part of logics
contained in the source strategy. Namely in the order accounting block we will not have to terminate the
program operation if there are several open orders for a security. Besides, conditions for opening and
closing orders will alslo change. This will entail the code changing in blocks of opening and closing
orders.
On the basis of this analysis we can easily conclude that the described simple Expert Advisor is not
perfect. In a general case, for the implementation of order accounting one should use a universal
function based on using data arrays and not containing logics of a certain strategy. The same can be
said about the blocks of opening and closing orders. A more complete program must contain a main
analytical function, all other user-defined functions must be subordinate to it. This analytical function
must contain a program code, in which all conditions for the implementation of any strategy are
analyzed; all subordinate functions must perform limited actions. The function of accounting orders must
only account orders, functions of opening and closing orders must only open and close orders, and the
analytical function must "think" and manage all other functions, ie call them when needed.
Criao de indicadores personalizados
Ao criar uma estratgia comercial enfrenta um desenvolvedor muitas vezes a necessidade de chamar a
graficamente em uma janela uma certa dependncia de segurana calculados por um usurio
(programador). Para este efeito MQL4 oferece a possibilidade de criao de indicadores personalizados.
Indicador personalizado codificada em um programa aplicativo MQL4; basicamente destinados
exibio grfica das dependncias calculadas preliminarmente.

Custom indicador estrutura


Necessidade de Buffers
O principal princpio subjacente personalizado indicadores passar valores de arrays indicador para um
cliente terminal (indicador linhas de saque), atravs de troca de amortecedores.
Tampo uma rea de memria contendo valores numricos de um indicador array.
MQL4 norma implica a possibilidade de elaborar a oito linhas usando um indicador indicador
personalizado. Um indicador array e um tampo so postos em correspondncia com cada indicador
linha. Cada um tem o seu prprio ndice tampo. O ndice do primeiro tampo 0, o segundo de uma -

1, e assim por diante, o ltimo tem um dos ndices 7. Fig. 115 mostra como as informaes
personalizadas a partir de um indicador passada atravs de buffers para um cliente terminal de saque
indicador linhas.

Fig. 115. Passando valores do indicador atravs Arrays um buffer de um cliente de terminal.
A ordem geral de construo de linhas indicador o seguinte:
1. Os clculos so realizados em um indicador personalizados; como resultado valores numricos so
atribudos a elementos indicador array.
2. Valores do indicador panplia enviou elementos para um cliente via terminal buffers.
3. Sobre as bases do valor recebido a partir de matrizes de buffers um cliente terminal indicador exibe
linhas.

Componentes de uma Custom Indicador


Vamos analisar um simples costume indicador que mostra duas linhas - construir uma linha baseada
na barra de preos mximos, a segunda utiliza um preo mnimo.

Exemplo de um simples costume indicador userindicator.mq4

//------------------------------------------------ -------------------/ / Userindicator.mq4


/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------# propriedade indicator_chart_window / / Indicador desenhada na janela
principal
# propriedade indicator_buffers 2 / / Nmero de buffers
# propriedade indicator_color1 Azul / / Cor da 1 linha

# propriedade indicator_color2 Vermelho / / Cor da 2 linha


dupla Buf_0 [], Buf_1 []; / / Declarar arrays (para o indicador buffers)
//------------------------------------------------ -------------------int init () / / Especial funo init ()
(
SetIndexBuffer (0, Buf_0); / / Atribuir um array para um buffer
SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2); / / Linha de estilo
SetIndexBuffer (1, Buf_1); / / Atribuir um array para um buffer
SetIndexStyle (1, DRAW_LINE, STYLE_DOT, 1); / / Linha de estilo
retorno; / / Sada do especiais Funct. init ()
)
//------------------------------------------------ -------------------int start () / / Especial funo start ()
(
int i, / / Bar ndice
Counted_bars; / / Nmero de bares contados
//------------------------------------------------ -------------------Counted_bars = IndicatorCounted (); / / Nmero de bares contados
i = Barras - Counted_bars - 1; / / ndice da primeira inmero
while (i> = 0) / / Loop para bares inmero
(
Buf_0 [i] = Mximo [i]; / / Valor de 0 tampo sobre i bar
Buf_1 [i] = Mnimo [i]; / / Valor do buffer em 1a i bar
i -; / / Calcular o ndice do prximo bar
)
//------------------------------------------------ -------------------retorno; / / Sada do especiais Funct. start ()
)
//------------------------------------------------ -------------------Vamos analisar em detalhes o indicador partes. Em qualquer programa aplicativo escrito em MQL4 voc
pode indicar parmetros que fornecem o programa correto de servio por um cliente de terminal. Neste
exemplo, o programa parte cabea (ver Estrutura de Programas), contm vrias linhas com as diretrizes
# imvel.
A primeira directiva indica em qual janela do terminal o cliente deve chamar o indicador linhas:
# propriedade indicator_chart_window / / Indicador desenhada na janela
principal
Em MQL4 existem duas variantes do desenho indicador linhas: na janela principal de segurana e em
uma janela separada.Janela principal, a janela contendo um grfico de segurana. Neste exemplo
parmetro indicator_chart_window # imvel no diretrio indica que um cliente terminal dever chamar
indicador linhas na janela principal.
A prxima linha mostra o nmero de buffers usados no indicador:
# propriedade indicator_buffers 2 / / Nmero de buffers
No exemplo analisadas duas linhas so traadas indicador. Um buffer atribudo a cada um tampo, de
modo que o nmero total de buffers dois.
As prximas linhas descrevem as cores das linhas indicadoras.
# propriedade indicator_color1 Azul / / Cor da 1 linha
# propriedade indicator_color2 Vermelho / / Cor da 2 linha
Indicator_color1 e definir parmetros indicator_color2 configurao de cores correspondentes buffers neste caso, para buffers com ndices 0 (Azul) e 1 (Red). Note que os nmeros nos nomes parmetro
indicator_color1 e indicator_color2 ndices no so tampo. Estes nmeros so nomes constantes das

peas que so estabelecidos de acordo com tampes. Constante para cada cor pode ser definido
segundo o critrio de um usurio.
Na prxima linha indicador arrays so declarados:
dupla Buf_0 [], Buf_1 []; / / Declarar arrays (para o indicador buffers)
O indicador destinado ao desenho indicador duas linhas, pelo que temos de declarar um dois-dimenso
global arrays, um para cada linha. Nomes do indicador so matrizes at ao utilizador. Neste caso array
nomes Buf_0 [] e Buf_1 [] so utilizadas, em outros casos, outros nomes podem ser utilizados, por
exemplo, Line_1 [], Alfa [], Integral [], etc necessrio declarar arrays, a nvel global, , Porque array
elementos valores devem ser preservados entre chamadas de funo especial a iniciar ().
O indicador construdo descrito personalizados com base em duas funes especiais-init () e comear
(). A funo init () contm a parte do cdigo utilizado apenas uma vez sobre o programa (ver funes
especiais).
Uma importante ao realizada na linha:
SetIndexBuffer (0, Buf_0); / / Atribuir um array para um buffer
Utilizando a funo SetIndexBuffer () necessrio um buffer (neste caso, com o ndice 0) colocado em
correspondncia com um array (neste caso Buf_0). Significa o primeiro indicador para a construo de
uma linha terminal cliente ir aceitar os dados contidos no array Buf_0 usando o buffer zero para ele.
Ainda mais o estilo da linha definida:
SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2); / / Linha de estilo
Para o buffer zero (0) um terminal cliente dever utilizar a seguinte redaco estilos: linha simples
(DRAW_LINE), linha slida (STYLE_SOLID), largura da linha 2.
As prximas duas linhas contm definies para a segunda linha:
SetIndexBuffer (1, Buf_1); / / Atribuir um array para um buffer
SetIndexStyle (1, DRAW_LINE, STYLE_DOT, 1); / / Linha de estilo
Assim, de acordo com o cdigo da funo especial init () tanto indicador linhas sero traadas na janela
principal de segurana.O primeiro deles ser uma slida linha azul com a largura 2, o segundo uma
linha pontilhada vermelha (STYLE_DOT) de um costume largura. Indicador de linhas pode ser feita por
outros estilos to bem (ver Estilos de Linhas Indicator).
Calcular valores de arrays indicador elementos (estar atento)
Valores do indicador so calculadas as matrizes de elementos especiais em funo do incio (). Para
entender corretamente o contedo de incio () prestar ateno ao Cdigo de indexando fim bares. A
seo Arrays descreve em detalhes o mtodo de indexao arrays-timeseries. De acordo com esse
mtodo de indexando bar comea a partir de zero. O bar um zero atual ainda imaturo bar. O bar mais
prximo do ndice de 1. O prximo um's 2 e assim por diante.
medida que novas barras aparecem em uma janela de segurana, ndices de j formados (histria)
barras so alterados. A nova (actual, apenas formado, direita) recebe o ndice zero bar, a uma para a
esquerda dele (que acaba totalmente formada) obtm o ndice 1 e os valores dos ndices de todos os
bares histria tambm so aumentados em um.

O mtodo de indexao barras descrito a nica possvel para todo o sistema de


comrcio on-line Metatrader, e tido em conta ao desenhar linhas usando ambos
os indicadores tcnicos e personalizado.
J se disse que o indicador linhas so construdas com base nas informaes contidas no indicador
numrico matrizes. Um indicador array contm informaes sobre pontos coordenadas sobre o qual
um indicador linha traada. E as coordenadas de cada ponto Y o valor de um indicador o elemento
matriz, coordenar e X o valor de um array elemento indicador ndice. No exemplo analisado o
primeiro indicador linha traada utilizando valores mximos de barras. Fig, 116, esse indicador mostra
linha (de cor azul) em uma janela de segurana, construdo com base no indicador Buf_0 array.
Valor do
ndice valor
elemento
do indicador
indicador array
array Buf_0
Buf_0
0
1,3123
1
1,3124
2
1,3121
3
1,3121
4
1,3123
5
1,3125
6
1,3127
...
...

Fig. 116. A correspondncia de coordenadas de um indicador de linha para valores de um indicador


array.
ndice valor de um indicador array est fora por um cliente terminal em correspondncia com uma barra
de ndice - ndice esses valores so iguais. Deve tambm ser tido em conta que o processo de
construo de indicador ao longo de linhas em tempo real modo, em condies de segurana quando
estiver em uma nova janela aparecer barras de vez em quando. Histria e todos os bares so
deslocadas para a esquerda. Para ter o indicador linha traada corretamente (cada ponto acima da linha
bar) tambm deve ser transferida juntamente com grades. Ento no h necessidade (necessidade
tcnica) para re-indexar um indicador array.
A diferena fundamental de um indicador de um array array usual a seguinte:
No momento em que criado um novo bar, valores do ndice indicador array
elementos so automaticamente alterado pelo cliente terminal, a saber - o valor de
cada indicador array ndice aumentada de um e do indicador panplia tamanho
aumentado em um elemento (com um zero ndice).
Por exemplo, o zero bar na fig. 116 (prazo H1), tem o tempo abrindo 6:00. s 7:00 uma nova barra de
segurana vai aparecer na janela. O bar tem incio s 6:00 ir automaticamente obter o ndice 1. Para
ter o indicador linha traada corretamente sobre este bar, o cliente terminal ir alterar o ndice do
indicador o elemento matriz correspondente barra de incio s 6:00. Em cima da mesa na fig. 116 este
elemento est escrito na primeira linha. Juntamente com que todos os ndices do array elementos sero
aumentadas pelo cliente por um terminal. Um ndice do elemento do array correspondente ao bar aberto

em 6:00 vai ter o valor 1 (antes que ele era igual a 0). O indicador array tornar-se- por um elemento
maior. O ndice de um novo elemento adicionado ser igual a 0, o valor deste elemento ser um novo
valor de coordenar o indicador que reflecte sobre uma linha zero bar. Este valor calculado em funo
especial a iniciar () sobre cada um carrapato.
Clculos em especial a funo start () deve ser conduzida de modo a que no foram realizadas aes
extras. Antes de o indicador acompanha a uma tabela, no refletir qualquer indicador linhas (valores do
indicador, porque so matrizes ainda no foram definidos). por isso que, no incio da primeira especial
funo start () array indicador valores devem ser calculados para todos os bares, sobre o qual o
indicador linha deve ser traada. No exemplo estas so analisadas todas as faixas presentes em um
grfico (os primeiros clculos no possa ser realizado por todas as barras disponveis, mas para alguns
ltima parte da histria, e descrito em outros exemplos). Ar comea tudo ainda mais especiais da
funo start () no h necessidade de calcular valores do indicador array para todos os bares
novamente. Estes valores so calculados e j esto contidos no indicador array. necessrio calcular o
valor atual do indicador em cada nova linha s carrapato do zero bar.
Para a implementao da tecnologia descrita h um padro muito til na funo MQL4 IndicatorCounted ().
Funo IndicatorCounted ()
int IndicatorCounted ()
Esta funo retorna o nmero de bares que no foram alterados desde a ltima chamada indicador.
Se o indicador nunca foi anexado a um grfico, a primeira no incio () o valor da execuo Counted_bars
ser igual a zero:
Counted_bars = IndicatorCounted (); / / Nmero de bares contados
Isso significa que o indicador array no contm nenhum elemento com valor previamente definidas
anteriormente, por isso que toda a panplia indicador deve ser calculado do incio ao fim. O indicador
calculado a partir da matriz mais antiga barra de zero a um. ndice da barra mais antigos, a partir de
clculos que devem ser iniciadas, calculado da seguinte maneira:
i = Barras - Counted_bars - 1; / / ndice da primeira inmero
Suponhamos, no momento da colocao do indicador, existem 300 bares em uma janela do grfico. Este
o valor da varivel Bares predefinidos. Tal como definido anteriormente, Counted_bars igual a
0. Ento, como vamos obter um resultado que i ndice da primeira inmero bar (o mais recente, a partir
de clculos que devem ser conduzidas) igual a 299.
Todos os valores do indicador array elementos so calculados de acordo com o loop enquanto ():
while (i> = 0) / / Loop para bares inmero
(
Buf_0 [i] = Mximo [i]; / / Valor de 0 tampo sobre i bar
Buf_1 [i] = Mnimo [i]; / / Valor do buffer em 1a i bar
i -; / / Calcular o ndice do prximo bar
)
Embora eu esteja dentro do intervalo da primeira inmero bar (299) para o curso uma (0), inclusive,
valores do indicador array elementos so calculados para ambos os indicadores linhas. Note, faltando
valores do indicador array elementos so calculados durante um (o primeiro) comear a funo especial
de arranque (). Durante os clculos cliente terminal memoriza elementos, para o qual os valores foram
calculados. A ltima iterao, enquanto em () executada quando i igual a 0, ou seja, valores do
indicador arrays so calculados para a barra de zero. Quando o circuito est terminado, a funo

especial iniciar () termina sua execuo e controlo passado para o cliente de terminal. O cliente
terminal, por seu turno, ir chamar todos (neste caso duas) linhas indicadoras de acordo com os valores
calculados elementos do array.
No incio do prximo carrapato () ser iniciada pelo cliente terminal novo. Outras aes dependem da
situao (vamos continuar analisando o exemplo para 300 barras).
Variante 1. Um novo carrapato vem durante a formao do atual zero bar (a situao mais comum).

Fig. 117. O carrapato transformados pertence ao atual bar.


Fig. 117 mostra dois carrapatos recebido pelo terminal em instantes de tempo t 1 e t 2. A situao ser
analisada a mesma para ambos os carrapatos. Vamos rastrear a execuo de iniciar () que foi lanado
no instante t 2. Durante a execuo da funo start () a linha seguinte ser executado:
Counted_bars = IndicatorCounted (); / / nmero de bares contados
IndicatorCounted () ir retornar o valor 299, ou seja, desde o ltimo arranque () chamada 299 bares
anteriores no foram alterados. Como resultado i ndice valor ser igual a 0 (300-299-1):
i = Barras - Counted_bars - 1; / / ndice da primeira inmero
Significa, no prximo enquanto () loop os valores da matriz com elementos do ndice zero ser
calculado. Em outras palavras, a nova posio de um indicador sobre a linha zero bar ser
calculado. Quando o ciclo estiver concludo, inicie () vai parar de executar e vai passar o controle para o
terminal do cliente.
Variante 2. Um novo carrapato carrapato o primeiro de uma barra de zero (acontece de vez em
quando).

Fig. 118. O carrapato processada a primeira de uma nova carrapato zero bar.

Neste caso, o fato do aparecimento de uma nova barra importante. Antes de controlo passado para
a funo especial start (), atendimento ao terminal ir chamar novamente todos os bares presentes na
janela de segurana e de re-indexar todos os arrays declarados indicador (fixado em correspondncia
com tampes). Alm disso, cliente terminal vai lembrar que j h 301 bares, e no 300 em uma janela
do grfico.
Fig. 118 contm situao quando, no ltimo carrapato da barra anterior (no momento t 2) a funo start
() foi iniciado e executado com sucesso. por isso que, apesar de agora o primeiro bar (com ndice 1)
terminou no momento t 2 foi calculada pelo indicador, funo IndicatorCounted () ir retornar valor
que estava no bar anterior, ou seja, 299:
Counted_bars = IndicatorCounted (); / / Nmero de bares contados
Na prxima linha i ndice ser calculado, neste caso para a assinale o primeiro de uma nova barra ser
igual a 1 (301-299-1):
i = Barras - Counted_bars - 1; / / ndice da primeira inmero
Significa clculo do indicador, enquanto os valores em array () lao na apario de um novo bar vai ser
realizada tanto para o ltimo bar e zero para o novo bar. Um pouco mais cedo durante a re-indexao
de matrizes indicador aumentou o cliente terminal tamanhos destes arranjos. Valores da matriz com
elementos zero ndices no foram definidos antes dos clculos no loop. Durante os clculos em loop
estes elementos buscar alguns valores. Quando comear em clculos () esto a cargo, o controlo
devolvido ao cliente terminal. Depois que o cliente o terminal ir emitir sobre as linhas indicador zero bar
com base em valores calculados apenas elementos da matriz com ndices zero.
Variante 3. Um novo carrapato carrapato o primeiro de uma nova barra de zero, mas o ltimo, mas
no um carrapato processados (caso raro).

Fig. 119. Nem todos os carrapatos do antigo bar foram processados.


Fig. 119 mostra a situao quando iniciar () foi lanado no primeiro de uma nova barra de carrapato, no
momento t 5. Anterior tempo esta funo foi iniciada no instante t 2. Assinalar que entraram no
terminal, no momento t 3 (seta vermelha) no foi processada pelo indicador. Isto aconteceu porque
start () tempo de execuo t 2 - t 4, maior do que o intervalo entre as carraas t 2 - t 3. Este facto
ser detectado pelo cliente terminal durante a execuo do incio () lanou, no momento t 5.Durante os
clculos em linha:
Counted_bars = IndicatorCounted (); / / Nmero de bares contados
IndicatorCounted () ir retornar o valor 299 (!). Este valor verdadeiro - a partir do momento da ltima
chamada indicador 299 bares no foram alteradas depois (agora j) 301. por isso que o ndice
calculado da primeira (esquerda) bar, a partir de clculos que o elemento matriz de valores dever ser

iniciado, ser igual a 1 (301-299-1):


i = Barras - Counted_bars - 1; / / ndice da primeira inmero
isso significa que durante o tempo () execuo sero realizadas duas iteraes. Durante os primeiros
valores de um array elementos com o ndice i = 1 ser calculado, ou seja, Buf_0 [1] e Buf_1 [1]. No,
at o momento clculos comear, bares e matrizes indicador j esto re-indexado pelo cliente terminal
(porque comeou uma nova barra, comea entre a funo especial de arranque ()). Eis a razo por
clculos de elementos de arrays com ndice 1 ser calculado com base na matriz-timeseries (valores
mximos e mnimos de uma barra de preo), tambm com o ndice 1:
while (i> = 0) / / Loop para bares inmero
(
Buf_0 [i] = Mximo [i]; / / Valor de 0 tampo sobre i bar
Buf_1 [i] = Mnimo [i]; / / Valor do buffer em 1a i bar
i -; / / Calcular o ndice do prximo bar
)
Durante a segunda iterao de tempo () valores de elementos com ndices zero, ou seja zero para o bar,
calculado com base nos ltimos valores conhecidos de matrizes-timeseries.
Usando da tecnologia descritas para o clculo dos indicadores personalizado
permite, em primeiro lugar, para garantir clculo dos valores de todos os elementos
indicador array independentemente da natureza especfica do carrapato histria, ea
segunda, para realizar clculos apenas para inmero bares, ou seja, a utilizao
economicamente clculo dos recursos .
No, um bar considerado incalculvel se clculo de valores de um elemento indicador matrizes, pelo
menos, para uma ltima carrapato do bar no realizada.
Iniciando o costume indicador userindicator.mq4 em um grfico janela voc vai ver duas linhas - uma
espessa linha azul construdos sobre uma barra de mximos e pontilhada linha vermelha construda em
cima de seu mnimos (Fig. 120).

Fig. 120. Duas linhas indicador em uma janela de segurana, construdo pelo
indicador userindicator.mq4.

Note-se, que um possvel indicador construdo um costume, indicador de linhas que coincidir com as
linhas anlogas de um indicador tcnico. Ela pode ser feito facilmente se como frmulas de clculo do
indicador costume, as mesmas frmulas, como no indicador so utilizadas tcnicas. Para ilustrar isto
vamos aperfeioar o programa cdigo analisados no exemplo anterior.Deixe o indicador desenhar linhas
aps a mdia dos valores mximos e mnimos das ltimas vrios bares. fcil de realizar clculos
necessrios: precisamos simplesmente de encontrar valores mdios de arrays-timeseries elementos. Por
exemplo, o valor de um indicador array com o ndice 3 (ou seja, indicador linha para coordenar o
terceiro bar) com base nos ltimos cinco mximas calculado da seguinte forma:
Buf_0 [3] = (High [3] + Alto [4] + Alto [5] + Alto [6] + Alto [7]) / 5
Anloga clculos podem ser realizados por um indicador linhas construdos sobre tarifas mnimas.
Exemplo de um simples costume indicador averagevalue.mq4. Indicador linhas so
construdos sobre mdia dos valores mnimos e mximos N bares.
//------------------------------------------------ -------------------/ / Averagevalue.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------# propriedade indicator_chart_window / / Indicador desenhada na janela
principal
# propriedade indicator_buffers 2 / / Nmero de buffers
# propriedade indicator_color1 Azul / / Cor da 1 linha
# propriedade indicator_color2 Vermelho / / Cor da 2 linha
extern int Aver_Bars = 5; / / nmero de barras para o clculo
dupla Buf_0 [], Buf_1 []; / / Declarar indicador arrays
//------------------------------------------------ -------------------int init () / / Especial funo init ()
(
//------------------------------------------------ -------------------SetIndexBuffer (0, Buf_0); / / Atribuir um array para um buffer
SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2); / / Linha de estilo
//------------------------------------------------ -------------------SetIndexBuffer (1, Buf_1); / / Atribuir um array para um buffer
SetIndexStyle (1, DRAW_LINE, STYLE_DOT, 1); / / Linha de estilo
//------------------------------------------------ -------------------retorno; / / Sada do especiais funct.init ()
)
//------------------------------------------------ -------------------int start () / / Especial funo start ()
(
int i, / / Bar ndice
n, / / parmetro formal
Counted_bars; / / Nmero de bares contados
dupla
Sum_H, / / Soma dos valores de Alta perodo
Sum_L; / / Soma dos valores de Baixo perodo
//------------------------------------------------ -------------------Counted_bars = IndicatorCounted (); / / Nmero de bares contados
i = Barras - Counted_bars - 1; / / ndice da primeira inmero
while (i> = 0) / / Loop para bares inmero
(
Sum_H = 0; / / Nulling incio em loop
Sum_L = 0; / / Nulling incio em loop
for (i = n, n <= i + Aver_Bars - 1; n + +) / / Loop soma dos valores

(
Sum_H
Sum_L
)
Buf_0
Buf_1

= Sum_H + Alto [n]; / / Acumulao de valores mximos soma


= Sum_L + Mnimo [n]; / / Acumulao de valores mnimos soma
[i] = Sum_H / Aver_Bars; / / Valor de 0 tampo sobre i bar
[p] = Sum_L / Aver_Bars; / / Valor do buffer em 1a i bar

i -; / / Calcular o ndice do prximo bar


)
//------------------------------------------------ -------------------retorno; / / Sada do especiais Funct. start ()
)
//------------------------------------------------ -------------------Nesse exemplo, h uma varivel externa Aver_Bars. Usando esta varivel um usurio pode indicar o
nmero de bares, para os quais calculado um valor mdio. No incio (), este valor utilizado para o
clculo de um valor mdio. No loop 'para' a soma dos valores mximos e mnimos calculado para o
nmero de barras correspondente ao valor da varivel Aver_Bars. Nas prximas duas linhas programa
valores do indicador array elementos so calculados para o indicador linhas correspondentes aos valores
mnimos e mximos.
A mdia mtodo utilizado neste caso, tambm aplicada para clculo do indicador os tcnicos Mdia
mvel. Se ns atribumos o indicador analisado personalizado averagevalue.mq4 e os tcnica indicador
Mdia mvel, veremos trs linhas indicador. Se o mesmo perodo de mdia criada para ambos os
indicadores, Mdia mvel ir coincidir com uma linha de o indicador costume linhas (para esta finalidade
parmetros descritos na fig. 121 deve ser especificado no indicador ajustes tcnicos).

Fig. 121. Coincidente linhas de um indicador tcnico personalizado e um indicador (linha vermelha).
Assim, utilizando uma tcnica indicador utilizador pode construir o reflexo de qualquer regularidades
necessrias no trabalho prtico.
Custom indicador opes

Desenho indicador linhas em janelas separadas


MQL4 oferece um grande servio personalizado para a construo de indicadores que torna muito
conveniente que os utilizam.Em particular, linhas indicador pode ser sacado em uma janela
separada. Isto conveniente quando os valores absolutos da amplitude linha indicador
substancialmente menor (ou maior) do que os preos de segurana. Por exemplo, se estamos
interessados na diferena mdia entre os valores mximos e mnimos de barras em um certo intervalo
histrico, dependendo do calendrio, este valor ser igual a cerca de 0 a 50 pontos (por exemplo, para a
M15). No difcil construir um indicador linha, mas em uma janela de segurana nesta linha ser
sorteado no intervalo de 0 a 50 pontos de um preo de segurana, ou seja substancialmente mais baixo
do que o grfico rea refletido na tela. muito incmodo.
Para desenhar linhas indicador em uma janela separada (que est na parte inferior de uma janela de
segurana), no texto da directiva # propriedade (no incio do programa) indicator_separate_window
parmetro deve ser especificado:
# propriedade indicator_separate_window / / Indicador desenhado em uma
janela separada
No momento em que tal indicador est anexado a uma janela de segurana, atendimento ao terminal
cria uma janela separada um grfico abaixo, no qual indicador calculado nas linhas do indicador ser
sorteado. Dependendo das definies de cores e tipos de linhas indicador que ser sorteado neste ou
naquele estilo.
Limitando clculo histria
Na maioria dos casos indicador linhas contm informaes teis apenas na histria mais recente. O
indicador parte de linhas construdos sobre antigos bares (por exemplo, 1 ms de idade calendrio
minutos) dificilmente pode ser considerado til para a tomada decises comerciais. Alm disso, se
houver um grande nmero de bares em uma janela do grfico, altura investida para o clculo e desenho
de linhas indicador exageradamente grande. Este programa pode ser crtica na depurao, quando um
programa compilado com frequncia e, em seguida, comeou. Por isso necessrio realizar clculos
no para toda a histria, mas para a parte limitada da histria mais recente bar.
Para o efeito, uma varivel externa histria utilizada no programa seguinte. Valor dessa varivel tida
em conta no clculo do ndice da primeira (esquerda) bar, a partir das quais os elementos de arrays
indicador deve ser calculado.
i = Barras - Counted_bars - 1; / / ndice da primeira inmero
if (i> Histria - 1) / / Se houver muitos bares ...
i = Histria - 1; / / .. calcular a quantia especificada.
Enquanto os clculos adicionais em () ciclo ser conduzida para a histria recente do nmero de bares
valor no superior a Histria. Note, analisaram a forma de conter uma histria clculo diz respeito
apenas a parte dos clculos que so realizados no incio da primeira especial funo start (). Alm disso,
quando aparecem novos bares, novas peas de linhas indicador ser adicionado, na parte direita,
enquanto a imagem no lado esquerdo ser preservado. Assim, o indicador linha durao ser aumentada
durante todo o tempo indicador operao. Valor comum da Histria parmetro considerado
aproximadamente 5000 barras.

Exemplo de um simples costume indicador separatewindow.mq4. Indicador linhas


so desenhadas em uma janela separada.
//------------------------------------------------ -------------------/ / Separatewindow.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------# propriedade indicator_separate_window / / Desenho em uma janela separada
# propriedade indicator_buffers 1 / / Nmero de buffers
# propriedade indicator_color1 Azul / / Cor da 1 linha
# propriedade indicator_color2 Vermelho / / Cor da 2 linha
extern int Histria = 50; / / Quantidade de bares no clculo histria
extern int Aver_Bars = 5; / / Quantidade de barras para o clculo
dupla Buf_0 []; / / Declarar um indicador array
//------------------------------------------------ -------------------int init () / / Especial funo init ()
(
SetIndexBuffer (0, Buf_0); / / Atribuir um array para um buffer
SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2); / / estilo da linha
retorno; / / Sada do especiais Funct. init ()
)
//------------------------------------------------ -------------------int start () / / Especial funo start ()
(
int i, / / Bar ndice
n, / / parmetro formal
Counted_bars; / / Nmero de bares contados
dupla
Sum_H, / / Sim Mximo de valores para o perodo
Sum_L; / / Soma dos baixos valores de perodo
//------------------------------------------------ -------------------Counted_bars = IndicatorCounted (); / / Nmero de bares contados
i = Barras - Counted_bars - 1; / / ndice da primeira inmero
if (i> Histria - 1) / / Se muitos bares ..
i = Histria - 1; / / .. para calcular montante especfico.
while (i> = 0) / / Loop para bares inmero
(
Sum_H = 0; / / Nulling incio em loop
Sum_L = 0; / / Nulling incio em loop
for (i = n, n <= i + Aver_Bars - 1; n + +) / / Loop soma dos valores
(
Sum_H = Sum_H + Alto [n]; / / Acumulao de valores mximos soma
Sum_L = Sum_L + Mnimo [n]; / / Acumulao de valores mnimos soma
)
Buf_0 [i] = (Sum_H - Sum_L) /
Aver_Bars; / / Valor de 0 tampo sobre i
bar
i -; / / Calcular o ndice do prximo bar
)
//------------------------------------------------ -------------------retorno; / / Sada do especiais Funct. start ()
)
//------------------------------------------------ -------------------Similar clculo de um indicador linha realizado no indicador tcnico AverageTrue Gama. Fig. 122
indicador mostra uma linha construda pelo costume indicador separatewindow.mq4 em uma janela
separada e um indicador reta construda pela ATR em outra janela. Neste caso so linhas totalmente
idnticas, porque perodo de mdia a mesma para ambos os indicadores - 5. Se esse parmetro for

alterada em nenhum dos indicadores, o indicador correspondente linha tambm ser alterado.

Fig. 122. desenhar uma linha personalizada indicador em uma janela separada.
Linhas idnticas de um indicador tcnico (ATR) e um indicador personalizado (separatewindow.mq4).
tambm evidente que o costume indicador linha no construda para toda a largura, mas h 50
ltimas barras, conforme especificado nos exterior varivel Histrico. Se um comerciante obrigado a
utilizar maior histria de intervalo, o valor da varivel externa pode ser facilmente alterada atravs do
indicador configuraes personalizadas janela.
Fig. 123 mostra uma janela de segurana, em que o indicador ns linha traada em outro estilo - como
um histograma. Para obter tal resultado foi mudado em uma linha do programa
cdigo separatewindow.mq4 - outros estilos linha so indicados:
SetIndexStyle (0, DRAW_HISTOGRAM); / / Linha de estilo
Todas as outras partes cdigo mantm-se inalterados.

Fig. 123. Desenho personalizado indicador linha em uma janela separada (histograma).
Semelhana dos desenhos de um indicador tcnico (ATR) e um indicador
personalizado (separatewindow.mq4).

Shifting indicador linhas vertical e horizontalmente


Em alguns casos necessrio deslocar um indicador linha. It can be easily done by MQL4 means. Let's
analyze an example, in which position of indicator lines in a security window are calculated in accordance
with values specified by a user.
Example of a custom indicator displacement.mq4 . Shifting indicator lines
horizontally and vertically.
//-------------------------------------------------------------------// displacement.mq4
// The code should be used for educational purpose only.
//-------------------------------------------------------------------#property indicator_chart_window //Indicator is drawn in the main window
#property indicator_buffers 3 // Number of buffers
#property indicator_color1 Red // Color of the 1st line
#property indicator_color2 Blue // Color of the 2nd line
#property indicator_color3 Green // Color of the 3rd line
extern
extern
extern
extern

int
int
int
int

History
= 500 ; // Amount of bars in calculation history
Aver_Bars = 5 ; // Amount of bars for calculation
Left_Right = 5 ; // Horizontal shift (bars)
Up_Down
= 25 ; // Vertical shift (points)

double Line_0 [] , Line_1 [] , Line_2 [] ; // Declaring data arrays


//-------------------------------------------------------------------int init () // Special funct. init()
{
//-------------------------------------------------------------------SetIndexBuffer ( 0 , Line_0 ) ; // Assigning an array to buffer 0
SetIndexStyle ( 0 , DRAW_LINE , STYLE_SOLID , 2 ) ; // Line style
//-------------------------------------------------------------------SetIndexBuffer ( 1 , Line_1 ) ; // Assigning an array to buffer 1
SetIndexStyle ( 1 , DRAW_LINE , STYLE_DOT , 1 ) ; // Line style
//-------------------------------------------------------------------SetIndexBuffer ( 2 , Line_2 ) ; // Assigning an array to buffer 2
SetIndexStyle ( 2 , DRAW_LINE , STYLE_DOT , 1 ) ; // Line style
//-------------------------------------------------------------------return ; // Exit the special funct. init()
)
//-------------------------------------------------------------------int start () // Special function start()
{
int i , // Bar index
n , // Formal parameter (index)
k , // Index of indicator array element
Counted_bars ; // Number of counted bars
double
Sum ; // High and Low sum for the period
//-------------------------------------------------------------------Counted_bars = IndicatorCounted () ; // Number of counted bars
i = Bars - Counted_bars - 1 ; // Index of the 1st uncounted

if ( i > History - 1 ) // If too many bars ..


i = History - 1 ; // .. calculate for specified amount .
while ( i >= 0 ) // Loop for uncounted bars
{
Sum = 0 ; // Nulling at loop beginning
for ( n = i ; n <= i + Aver_Bars - 1 ; n ++ ) // Loop of summing values
Sum = Sum + High [ n ] + Low [ n ] ; // Accumulating maximal values sum
k = i + Left_Right ; // Obtaining calculation index
Line_0 [ k ] = Sum / 2 / Aver_Bars ; // Value of 0 buffer on k bar
Line_1 [ k ] = Line_0 [ k ] + Up_Down * Point ; // Value of the 1st buffer
Line_2 [ k ] = Line_0 [ k ] - Up_Down * Point ; // Value of the 2nd buffer
i --; // Calculating index of the next bar
)
//-------------------------------------------------------------------return ; // Exit the special funct. start()
)
//-------------------------------------------------------------------For adjusting lines shift in a chart, there are two external variables - Left_Right for horizontal shift of all
lines and Up_Down for shifting two dotted lines vertically.
extern int Left_Right = 5 ; // Horizontal shift (bars)
extern int Up_Down
= 25 ;
// Vertical shift (points)
The algorithm used for calculating values of corresponding array elements is based on very simple rules:

for shifting a line horizontally, assign the calculated value to an array element, the index of which
is larger by Left_Right (for shifting to the right and less for shifting to the right) than the index of
a bar, for which calculations are conducted;
for shifting a line vertically, Up_Down*Point must be added (for shifting upwards or detracted for
shifting downwards) to each value of an indicator array characterizing initial line position;

In the analyzed example indexes are calculated in the line:


k

= i + Left_Right ;

// Obtaining calculation index

Here i is the index of a bar, for which calculations are performed, k is an index of an indicator array
element. Red indicator line displayed by the client terminal based on the indicator array Line_0[] is
shifted to the left by 5 bars (according to custom settings, see Fig. 124) from the initial line. In this case
the initial line is a Moving Average with the period of averaging equal to 5; the formula of MA calculation
is (High[i]+Low[i])/2 .
Line_0 [ k ] = Sum

Aver_Bars ;

// Value of 0 buffer on k bar

In this example the position of the red line is the basis for the calculation of indicator array values for
two other lines, ie their position on the chart. Dotted lines are calculated this way:
Line_1 [ k ] = Line_0 [ k ] + Up_Down * Point ; // Value of the 1st buffer
Line_2 [ k ] = Line_0 [ k ] - Up_Down * Point ; // Value of the 2nd buffer
Use of index k for elements of all indicator arrays allows to perform calculations for elements of arrays
Line_1[], Line_2[] on the same bar as used for calculating values of the corresponding basic array
Line_0[]. As a result dotted lines are shifted relative to the red line by the value specified in the indicator
settings window, in this case by 30 points (Fig. 124).

Fig. 124. Red indicator line is shifted to the left by 5 bars.


Dotted indicator lines are shifted relative to the red line by 30 points.
Limitations of Custom Indicators
There are some limitations in MQL4 that should be taken into account in the programming of custom
indicators.
There is a group of functions that can be used only in custom indicators and cannot be used in Expert
Advisors and scripts: IndicatorBuffers(), IndicatorCounted (), IndicatorDigits(), IndicatorShortName(),
SetIndexArrow(), SetIndexBuffer(), SetIndexDrawBegin(), SetIndexEmptyValue(), SetIndexLabel(),
SetIndexShift(), SetIndexStyle(), SetLevelStyle(), SetLevelValue().
On the other hand, trade functions cannot be used in indicators: OrderSend(), OrderClose(),
OrderCloseBy(), OrderDelete() and OrderModify(). This is because indicators operate in the interface
flow (as distinct from Expert Advisors and scripts that operate in their own flow).
This is also why algorithms based on looping cannot be used in custom indicators. Start of a custom
indicator containing an endless loop (in terms of actual execution time) can result in client terminal
hanging up with further necessity to restart a computer.
The general comparative characteristics of Expert Advisors, scripts and indicators is contained in Table
2.
Custom Indicador ROC (Price Rate of Change)
Sabe-se, todos os indicadores so de aplicao relevncia - que so usados para ajudar a orientar um
comerciante no preo atual movimento e previso, pelo menos em certa medida, os futuros movimentos

dos preos. Quando a experincia bastante grande, um comrcio pode orientar-se pelo carter de
Mdia mvel mudanas, por exemplo, basta seguir o seu caminho. No entanto, Mdia mvel reflecte a
dinmica das mudanas dos preos no mercado nico "em geral", porque tem uma desvantagem muito
grave - lag. O indicador ROC descrita aqui tem algumas vantagens em comparao com um simples MA
- possui menor ulteriormente e mais ilustrativo.
Vamos ver como ACM, com diferentes preos mdios perodo caracterizar movimentos. Fig. 125 tais
indicador mostra duas linhas: uma vermelha - MA com o perodo de mdia igual a 21 bares e um perodo
mdio azul MA com 5 bares. Voc pode ver facilmente que o MA com mdia menor perodo est mais
perto do grfico e tem menor lag. No entanto, bastante difcil utilizar essa linha para a caracterizao
do mercado, porque muito ondulado, ou seja, muitas vezes muda a sua direco, dando assim uma
grande quantidade de falsos sinais. MA com um maior valor mdio prazo no to ondulado, ou seja,
no dar tanta falsos sinais, mas tem outra desvantagem - maior defasagem.

Fig. 125. Indicador linhas: MA (21) - vermelho, MA (5) - azul, ROC - laranja.
A terceira linha presentes na fig. 125 um indicador da taxa de variao linha (laranja). Esta linha tem
uma aparente vantagem em relao a qualquer dos MA: ela possui um pequeno lag bastante bem e
suavizada. Vamos discutir a linha em detalhes.
Este indicador construdo sobre a linha de base a taxa de MA (21) mudana. Na parte AB taxa de
variao MA cresce. Significa MA cada ponto indicado na parte no simplesmente superior anterior,
mas superior pelo valor que for maior do que o valor anlogo para o ponto anterior. Por exemplo, se em
compasso com o ndice 271 MA (21) Valor foi de 1,3274, em compasso com o ndice 272 - 1,3280, no
bar 273 - 1,3288, o valor bares com ndices entre 271 e 272 MA aumentou 6 pontos, entre 272 e 273 at 8 pontos. Assim MA simplesmente no cresce, mas a sua taxa de variao tambm aumenta. No
mbito do aumento da taxa de variao (AB) MA cavernas em cima e um pequeno fragmento de esta
parte pode ser descrita como parte de um crculo com um raio determinado r1.
MA abordagens flex como um ponto B, o raio do crculo que circunscreve a ltima parte crescente e,
no ponto B igual ao infinito. Ou seja, no ponto B MA transforma em uma linha reta, que
caracterizada por uma taxa constante de crescimento, por isso que a linha laranja pra de
aumentar. Na parte crescente da BC MA diminui, mas continua. MA embora continue a crescer a alguns
sinais positivos velocidade, a taxa de crescimento MA torna-se menor, por isso que a curva V move
para baixo.Qualquer pequeno fragmento nesta parte MA circunscreve uma espcie de um crculo de raio
r2 abaixo do MA.

No ponto C MA pra de crescer, ou seja, a sua velocidade for igual a zero. Neste exemplo para a
construo de uma linha laranja MA usado como a linha de apoio. Aqui, a noo de apoio MA deve ser
especificada. Na construo de um costume qualquer grfico em um sistema de coordenadas cartesianas
avio normalmente utilizado, e como o ponto de partida para a construo linha X-eixo utilizado. No
nosso caso, como tal, no uma linha reta um eixo utilizado, MA, mas com um certo perodo de
compensao (neste caso, MA (21), linha vermelha), chamada de apoio MA. A taxa de variao MA
proporcional diferena entre o MA eo vermelho alaranjado ao laranja Vie se a linha est acima MA, MA
velocidade positiva, porque se a seguir, negativa, em ponto de cruz e V MA taxa de crescimento MA
igual a zero. O CD pode ser descrita parte similar ao lado AB, mas o crescimento MA velocidade um
valor negativo.
Um momento importante aqui que MA cresce durante todo o intervalo CE, enquanto que V tem uma
curva tpica, muito bvia extremum no ponto K. Visual anlise do grfico mostra que o indicador ROC
linha caracteriza picos eo fundo de uma tabela do que qualquer MA.
Na programao de um indicador para calcular a taxa de variao do MA utilizada uma tecnologia
simples. Taxa uma medida que tem em seu numerador valor de um parmetro alterado e, no seu
denominador - perodo de tempo, durante o qual o parmetro muda. No mbito deste indicador (ver fig.
126), a diferena entre MA_c (valor actual MA) e MA_p (valor anterior) sobre o intervalo
correspondente a vrios bares Bars_V. Sabendo que o clculo da taxa, para o desenvolvimento histrico
dos preos realizada em um nico e mesmo intervalo (nmero de bares), o denominador pode ser
omitido, ou seja, um juiz possa sobre a taxa de variao dos preos pela diferena entre MA_c e MA_p
sobre o actuais e anteriores bares.

Fig. 126. Parmetros para a construo de indicador ROC linha.


O indicador calcula 6 analisaram personalizadas indicador em todas as linhas. O indicador Line_0 array []
contm os valores de apoio MA, em relao qual todas as demais linhas so construdos
indicador. Prximos trs indicador arrays (Line_1 [], Line_2 [] e Line_3 []) contm valores das taxas de
alteraes de preos baseado no MA com diferentes perodos de mdia. O indicador Line_4 array [] so
destinados para a construo de uma linha mdia (mdia aritmtica dos Line_1 [], Line_2 [] e Line_3
[]), e Line_5 [] - para construir a mesma taxa mdia linha, mas uma suavizada.
Quando efectuar uma negociao decises comerciante geralmente leva em conta o carter de preo
no s sobre o desenvolvimento atual, mas tambm na aproximao de datas. Para entender melhor
como as trs linhas indicador ROC so construdos, vamos prestar ateno para o seguinte detalhe. MA

com um certo perodo de mdia construda sobre um determinado prazo reflecte-se sobre o horizonte
temporal mais prximo com o perodo mdio de pelo menos o valor, pelo que o prazo maior. Por
exemplo, se na M30 segurana grfico com o perodo mdio MA 400 refletida, ele ser refletido
tambm (com a mesma imagem e fechar valores absolutos) em H1 grfico com perodo mdio de 200,
no perodo de H4 grfico 50 e assim por diante . Porm, haver alguma impreciso relacionada com
maior quantidade de dados tidos em conta em menores prazos. No entanto, na maioria dos casos esta
aceitavelmente pequena impreciso.
A linha laranja construdo com base no indicador Line_1 array [] reflete a taxa de variao sobre o actual
calendrio. A linha verde baseada no Line_2 [] reflecte-se (no mesmo calendrio atual) como a linha
laranja seriam reflectidos no horizonte temporal mais prximo. A linha castanha refletido no atual
calendrio como a uma laranja pode reflectir-se sobre o horizonte temporal mais prximo. Assim,
usando o indicador descrito ROC trs linhas pode ser refletido em um grfico - linhas refletindo a taxa de
variao dos preos no actual perodo, a aproximao de uma maior e mais prxima do calendrio.

Custom indicador roc.mq4 (Price Rate of Change) para o atual perodo, a aproximao
de uma maior e mais prximo calendrio.

//------------------------------------------------ -------------------/ / Roc.mq4 (Priliv)


/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------//------------------------------------------------ --------------- 1 -# propriedade copyright "Copyright SK, 2007"
# propriedade link "http://AutoGraf.dp.ua"
//------------------------------------------------ -------------------# propriedade indicator_chart_window / / Indicador desenhada na janela
principal
# propriedade indicator_buffers 6 / / Nmero de buffers
# propriedade indicator_color1 Preto / / Cor da linha de 0 tampo
# propriedade indicator_color2 DarkOrange / / Cor da linha do 1 tampo
# propriedade indicator_color3 Verde / / Cor da linha da 2 tampo
# propriedade indicator_color4 Brown / / Cor da linha da 3 tampo
# propriedade indicator_color5 Azul / / Cor da linha da 4 tampo
# propriedade indicator_color6 Vermelho / / Cor da linha do 5 tampo
//------------------------------------------------ --------------- 2 -Histria extern int = 5000; / / Quantidade de barras para o clculo
histria
extern int Period_MA_0 = 13; / / Perodo de apoio para atu MA. timefr.
extern int Period_MA_1 = 21; / / Durao da calculados MA
extern int Bars_V = 13; / / Quantidade de bares para calc. categoria
extern int Aver_Bars = 5; / / Quantidade de barras para o alisamento
extern dupla K = 2; / / Amplificador ganho
//------------------------------------------------ --------------- 3 -int
Period_MA_2, Period_MA_3, / / Clculo dos perodos de MA para outras
timefr.
Period_MA_02, Period_MA_03, / / Clculo dos perodos de supp. MA
K2, K3; / / Coeficientes de correlao temporal
dupla
Line_0 [], / / Indicador do array supp. MA
Line_1 [], Line_2 [], Line_3 [], / / Indicador matriz de taxa de linhas
Line_4 [], / / Indicador array - soma
Line_5 [], / / Indicador array - soma, alisado

Sh_1, Sh_2, Sh_3; / / Quantidade de bares de taxas calc.


//------------------------------------------------ --------------- 4 -int init () / / Especial funo init ()
(
SetIndexBuffer (0, Line_0); / / Atribuir um array para um buffer
SetIndexBuffer (1, Line_1); / / Atribuir um array para um buffer
SetIndexBuffer (2, Line_2); / / Atribuir um array para um buffer
SetIndexBuffer (3, Line_3); / / Atribuir um array para um buffer
SetIndexBuffer (4, Line_4); / / Atribuir um array para um buffer
SetIndexBuffer (5, Line_5); / / Atribuir um array para um buffer
SetIndexStyle (5, DRAW_LINE, STYLE_SOLID, 3); / / estilo da linha
//------------------------------------------------ --------------- 5 -switch (Period ()) / / Calcular o coeficiente de ..
(/ / .. calendrios diferentes
case 1: K2 = 5; K3 = 15; break; / / Calendrio M1
caso 5: K2 = 3; K3 = 6; break; / / Calendrio M5
caso 15: K2 = 2; K3 = 4; break; / / Calendrio M15
caso 30: K2 = 2; K3 = 8; break; / / Calendrio M30
caso 60: K2 = 4; K3 = 24; break; / / Calendrio H1
caso 240: K2 = 6; K3 = 42; break; / / Calendrio H4
caso 1440: K2 = 7; K3 = 30; break; / / Calendrio D1
caso 10080: K2 = 4; K3 = 12; break; / / Calendrio W1
caso 43200: K2 = 3; K3 = 12; break; / / Prazo MN
)
//------------------------------------------------ --------------- 6 -Sh_1 = Bars_V; / / Durao da taxa CALCUL. (barras)
Sh_2 = K2 * Sh_1; / / Calc. TF por perodo mais prximo
Sh_3 = K3 * Sh_1; / / Calc. para o prximo perodo TF
Period_MA_2 = K2 * Period_MA_1; / / Calc. MA para o prximo perodo de TF
Period_MA_3 = K3 * Period_MA_1; / / Calc. MA para o prximo perodo de TF
Period_MA_02 = K2 * Period_MA_0; / / Durao da supp. MA para os mais
prximos TF
Period_MA_03 = K3 * Period_MA_0; / / Durao da supp. MA para a prxima TF
//------------------------------------------------ --------------- 7 -retorno; / / Sair especial funo init a ()
)
//------------------------------------------------ --------------- 8 -int start () / / Especial funo start ()
(
//------------------------------------------------ --------------- 9 -dupla
MA_0, MA_02, MA_03, / / Apoio MA por diferenas. TF
MA_c, MA_p, / / MA valores atuais e anteriores
Soma; / / Tcnica param. para a soma accumul.
int
i, / / Bar ndice
n, / / parmetro formal (ndice bar)
Counted_bars; / / Quantidade de bares contados
//------------------------------------------------ -------------- 10 -Counted_bars = IndicatorCounted (); / / Quantidade de bares contados
i = Barras - Counted_bars - 1; / / ndice da primeira inmero
if (i <Histria - 1) / / Se muitos bares ..
i = Histria - 1; / / .. calcular quantia especificada
//------------------------------------------------ -------------- 11 -while (i <= 0) / / Loop para bares inmero
(
//------------------------------------------------ -------- 12 -MA_0 = IMA (NULL, 0, Period_MA_0, 0, MODE_LWMA, PRICE_TYPICAL, i);
Line_0 [i] = MA_0; / / Valor da supp. MA
//------------------------------------------------ -------- 13 -MA_c = IMA (NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, i);
MA_p = IMA (NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, Sh_1 + i);

Line_1 [i] = MA_0 + K * (MA_c - MA_p); / / Valor da Taxa de 1a linha


//------------------------------------------------ -------- 14 -MA_c = IMA (NULL, 0, Period_MA_2, 0, MODE_LWMA, PRICE_TYPICAL, i);
MA_p = IMA (NULL, 0, Period_MA_2, 0, MODE_LWMA, PRICE_TYPICAL, Sh_2 + i);
MA_02 = IMA (NULL, 0, Period_MA_02, 0, MODE_LWMA, PRICE_TYPICAL, i);
Line_2 [i] = MA_02 + K * (MA_c - MA_p); / / Valor da Taxa de 2a linha
//------------------------------------------------ -------- 15 -MA_c = IMA (NULL, 0, Period_MA_3, 0, MODE_LWMA, PRICE_TYPICAL, i);
MA_p = IMA (NULL, 0, Period_MA_3, 0, MODE_LWMA, PRICE_TYPICAL, Sh_3 + i);
MA_03 = IMA (NULL, 0, Period_MA_03, 0, MODE_LWMA, PRICE_TYPICAL, i);
Line_3 [i] = MA_03 + K * (MA_c - MA_p); / / Valor da Taxa de 3a linha
//------------------------------------------------ -------- 16 -Line_4 [i] = (Line_1 [i] + Line_2 [i] + Line_3 [i]) / 3; / / Resumo array
//------------------------------------------------ -------- 17 -if (Aver_Bars> 0) / / Se errado definir suavizao
Aver_Bars = 0; / / .. nada menos do que zero
Sum = 0; / / As possibilidades tcnicas
for (i = n, n> = i + Aver_Bars; n + +) / / Resumindo ltimos valores
Soma = Soma + Line_4 [n]; / / Acum. soma dos ltimos valores
Line_5 [i] = Soma / (Aver_Bars + 1); / / Indic. matriz de linha suavizada
//------------------------------------------------ -------- 18 -i -; / / Calcular o ndice do prximo bar
//------------------------------------------------ -------- 19 -)
retorno; / / Sada do especiais funo start ()
)
//------------------------------------------------ -------------- 20 -Para calcular indicador taxa de matrizes de trs linhas MA com diferentes perodos mdios so
usados. MA perodo mdio para o atual calendrio criado por um usurio na varivel externa
Period_MA_1, eo perodo mdio de apoio ao MA - na varivel externa Period_MA_0.
Perodos mdios de ACM, para a qual calculada a taxa, perodos mdios de apoio MA eo perodo, em
que taxa medida, so calculados para perodos maiores no bloco 6.7. Correspondentes coeficientes
para o clculo destes valores so definidos no bloco 5.6. Por exemplo, se o indicador acompanha a M30
grfico, coeficientes K2 e K2 ser igual a 2 e 8 nesse sentido, porque o horizonte temporal mais prximo
H1 duas vezes maior do que M30, o horizonte temporal mais prximo H4, que oito vezes maior do
que M30.
Clculos no incio () so muito simples. No bloco de apoio MA 12.13 valores so calculados para o atual
perodo (indicador linha preta). No bloco 13-14 valores do indicador Line_1 array [], so definidos ROC
para a construo da linha sobre o atual perodo (linha laranja). O ritmo aqui definida como a
diferena do valor analisadas MA sobre o actual barra e no bar, o ndice de Sh_1 pelo qual maior do
que a atual, ou seja, (MA_c - MA_p). O valor do indicador Line_1 array [] sobre o atual barra composta
de valores do apoio MA e caracterizando um valor fixo (K aqui um coeficiente de escala criado em uma
varivel externa):
Line_1 [i] = MA_0 + K * (MA_c - MA_p); / / valor da taxa de 1a linha
Anloga clculos so realizados para a construo de duas outras linhas taxa de calendrios (blocos 1416). ACM para apoiar essas matrizes no so indicadas pelo indicador. No bloco 16017 valores do
indicador Line_4 array [] so definidos para a construo de uma taxa mdia line (linha azul), que a
sua mdia aritmtica simples.
No bloco 17-18 clculos so realizados por uma maior taxa mdia line - uma suavizada (linha vermelha
grossa, indicador Line_5 array []). Alisamento feito por meio de simples mdia: elemento valor do
indicador Line_5 array [] sobre o atual barra de valor uma mdia aritmtica dos ltimos vrios valores
do indicador Line_4 array []. Como resultado da utilizao deste mtodo do indicador linha se torna

menos ondulado, mas ao mesmo tempo tem algum desfasamento. Quantidade de bares para suavizao
est definido na varivel externa Aver_Bars.
Iniciando o indicador ver 6 indicador linhas em uma janela do grfico:

linha preta - MA apoio para a construo de uma linha sobre o preo taxa atual calendrio;
linha laranja - taxa de variao dos preos sobre o actual calendrio;
linha verde - taxa de variao dos preos sobre o horizonte temporal superior mais prximo;
linha marrom - taxa de variao dos preos sobre o prximo calendrio;
linha azul - linha mdia da taxa de variao dos preos;
linha vermelha - alisado linha mdia da taxa de variao dos preos.

Fig. 127. Custom indicador roc.mq4 permite detectar a origem de um ecr plano de mudana da actual
taxa mais elevada e mais prximo imediatamente superior e os seus prazos mdios.
Indicador roc.mq4 pode ser anexada ficha de segurana com qualquer janela de qualquer horizonte
temporal. Para cada perodo a mesma regra verdadeira: laranja linha reflete sobre a taxa atual
calendrio, verde - sobre o maior horizonte temporal mais prximo, marrom - sobre o prximo perodo
maior. Voc pode facilmente verificar isso: juntar o indicador para um grfico janela e v a imagem de
linhas no atual calendrio e de prazos mais prximo (ver fig. 128 e fig. 129).

Fig. 128. Imagens do 3 (marrom) sobre a linha atual (M15) horizonte temporal idntico com a
imagem da 2 (verde) em linha
um horizonte temporal superior (M30, Fig. 129), ea imagem da 1 (laranja), linha sobre o prximo
perodo (H1, Fig. 129).

Fig. 129. Imagem da 2 (linha verde), sobre a actual (M30) horizonte temporal idntico com a
imagem do 3 (marrom) linha
sobre um horizonte temporal mais pequenos (M15, Fig. 128), ea imagem da 1 (laranja) em uma linha
temporal superior (H1).
H uma particularidade no indicador analisado roc.mq4: Taxa de cada linha traz no s o valor da taxa
de variao dos preos, mas tambm depende do carter do apoio MA mudanas. Por um lado essa
tecnologia permite que exibem linhas taxa diretamente sobre um grfico, o que muito conveniente. Por
outro lado, se valores da taxa de variao dos preos so muito pequenas, o factor principal para a

construo da taxa de linha o valor do apoio MA, que indesejvel, pois cada um tem uma certa
defasagem MA.
O prximo o costume indicador cheio analgica do indicador roc.mq4, mas tirado em uma janela
separada. Isto permite calcular valores de taxa de linhas diferentes prazos nem em relao a um apoio
MA, mas em relao a uma linha horizontal zero. Consequentemente, o programa cdigo tambm um
pouco mudou: no h necessidade de calcular e apoiando MA escala coeficiente de utilizao.
Custom indicador rocseparate.mq4 ROC (Price Rate of Change) para o atual perodo, a
aproximao de uma maior e mais prximo calendrio. Exibida em uma janela
separada.

//------------------------------------------------ -------------------/ / Rocseparate.mq4 (Priliv_s)


/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ --------------- 1 -# propriedade copyright "Copyright SK, 2007"
# propriedade link "http://AutoGraf.dp.ua"
//------------------------------------------------ -------------------# propriedade indicator_separate_window / / Indicador desenhado em uma
janela separada
# propriedade indicator_buffers 6 / / Nmero de buffers
# propriedade indicator_color1 Preto / / Cor da linha de 0 tampo
# propriedade indicator_color2 DarkOrange / / Cor da linha do 1 tampo
# propriedade indicator_color3 Verde / / Cor da linha da 2 tampo
# propriedade indicator_color4 Brown / / Cor da linha da 3 tampo
# propriedade indicator_color5 Azul / / Cor da linha da 4 tampo
# propriedade indicator_color6 Vermelho / / Cor da linha do 5 tampo
//------------------------------------------------ --------------- 2 -Histria extern int = 5000; / / Quantidade de bares no clculo histria
extern int Period_MA_1 = 21; / / Durao da calculados MA
extern int Bars_V = 13; / / Quantidade de bares para calc. categoria
extern int Aver_Bars = 5; / / Quantidade de barras para o alisamento
//------------------------------------------------ --------------- 3 -int
Period_MA_2, Period_MA_3, / / Clculo dos perodos de MA para outras
timefr.
K2, K3; / / Coeficientes de correlao temporal
dupla
Line_0 [], / / Indicador do array supp. MA
Line_1 [], Line_2 [], Line_3 [], / / Indicador matriz de taxa de linhas
Line_4 [], / / Indicador array - soma
Line_5 [], / / Indicador array - soma, alisado
Sh_1, Sh_2, Sh_3; / / Quantidade de bares de taxas calc.
//------------------------------------------------ --------------- 4 -int init () / / Especial funo init ()
(
SetIndexBuffer (0, Line_0); / / Atribuir um array para um buffer
SetIndexBuffer (1, Line_1); / / Atribuir um array para um buffer
SetIndexBuffer (2, Line_2); / / Atribuir um array para um buffer
SetIndexBuffer (3, Line_3); / / Atribuir um array para um buffer
SetIndexBuffer (4, Line_4); / / Atribuir um array para um buffer
SetIndexBuffer (5, Line_5); / / Atribuir um array para um buffer
SetIndexStyle (5, DRAW_LINE, STYLE_SOLID, 3); / / Linha de estilo
//------------------------------------------------ --------------- 5 -switch (Period ()) / / Calcular o coeficiente de ..
(/ / .. calendrios diferentes

case 1: K2 = 5; K3 = 15; break; / / Calendrio M1


caso 5: K2 = 3; K3 = 6; break; / / Calendrio M5
caso 15: K2 = 2; K3 = 4; break; / / Calendrio M15
caso 30: K2 = 2; K3 = 8; break; / / Calendrio M30
caso 60: K2 = 4; K3 = 24; break; / / Calendrio H1
caso 240: K2 = 6; K3 = 42; break; / / Calendrio H4
caso 1440: K2 = 7; K3 = 30; break; / / Calendrio D1
caso 10080: K2 = 4; K3 = 12; break; / / Calendrio W1
caso 43200: K2 = 3; K3 = 12; break; / / Prazo MN
)
//------------------------------------------------ --------------- 6 -Sh_1 = Bars_V; / / Durao da taxa CALCUL. (barras)
Sh_2 = K2 * Sh_1; / / Calc. TF por perodo mais prximo
Sh_3 = K3 * Sh_1; / / Calc. para o prximo perodo TF
Period_MA_2 = K2 * Period_MA_1; / / Calc. MA para o prximo perodo de TF
Period_MA_3 = K3 * Period_MA_1; / / Calc. MA para o prximo perodo de TF
//------------------------------------------------ --------------- 7 -retorno; / / Sair especial funo init a ()
)
//------------------------------------------------ --------------- 8 -int start () / / Especial funo start ()
(
//------------------------------------------------ --------------- 9 -dupla
MA_c, MA_p, / / MA valores atuais e anteriores
Soma; / / Tcnica param. para a soma accumul.
int
i, / / Bar ndice
n, / / parmetro formal (ndice bar)
Counted_bars; / / Quantidade de bares contados
//------------------------------------------------ -------------- 10 -Counted_bars = IndicatorCounted (); / / Quantidade de bares contados
i = Barras - Counted_bars - 1; / / ndice da primeira inmero
if (i <Histria - 1) / / Se muitos bares ..
i = Histria - 1; / / .. calcular quantia especificada
//------------------------------------------------ -------------- 11 -while (i <= 0) / / Loop para bares inmero
(
//------------------------------------------------ -------- 12 -Line_0 [i] = 0; / / Horizontal linha de referncia
//------------------------------------------------ -------- 13 -MA_c = IMA (NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, i);
MA_p = IMA (NULL, 0, Period_MA_1, 0, MODE_LWMA, PRICE_TYPICAL, Sh_1 + i);
Line_1 [i] = MA_c - MA_p; / / Valor da Taxa de 1a linha
//------------------------------------------------ -------- 14 -MA_c = IMA (NULL, 0, Period_MA_2, 0, MODE_LWMA, PRICE_TYPICAL, i);
MA_p = IMA (NULL, 0, Period_MA_2, 0, MODE_LWMA, PRICE_TYPICAL, Sh_2 + i);
Line_2 [i] = MA_c - MA_p; / / Valor da Taxa de 2a linha
//------------------------------------------------ -------- 15 -MA_c = IMA (NULL, 0, Period_MA_3, 0, MODE_LWMA, PRICE_TYPICAL, i);
MA_p = IMA (NULL, 0, Period_MA_3, 0, MODE_LWMA, PRICE_TYPICAL, Sh_3 + i);
Line_3 [i] = MA_c - MA_p; / / Valor da Taxa de 3a linha
//------------------------------------------------ -------- 16 -Line_4 [i] = (Line_1 [i] + Line_2 [i] + Line_3 [i]) / 3; / / Resumo array
//------------------------------------------------ -------- 17 -if (Aver_Bars> 0) / / Se errado definir suavizao
Aver_Bars = 0; / / .. nada menos do que zero
Sum = 0; / / As possibilidades tcnicas
for (i = n, n> = i + Aver_Bars; n + +) / / Resumindo ltimos valores
Soma = Soma + Line_4 [n]; / / Acum. soma dos ltimos valores
Line_5 [i] = Soma / (Aver_Bars + 1); / / Indic. matriz de linha suavizada
//------------------------------------------------ -------- 18 --

i -; / / Calcular o ndice do prximo bar


//------------------------------------------------ -------- 19 -)
retorno; / / Sada do especiais funo start ()
)
//------------------------------------------------ -------------- 20 -Se formos observar atentamente o indicador linhas traadas em uma janela separada e em uma janela
do grfico, vamos ver algumas diferenas resultantes da utilizao de diferentes mtodos durante os
clculos. Para o clculo do indicador linhas traadas na janela principal apoiar ACM so utilizadas, para
as linhas em uma janela separada, no existem tais apoiar ACM.Esta tambm a razo pela qual existe
uma rigorosa concorrncia de cruz taxa de linhas e pontos de apoio no MA roc.mq4pontos de cruz e uma
taxa de acordo com a linha zero no indicador rocseparate.mq4.

Fig. 130. Custom indicador rocseparate.mq4 permite ver em uma janela separada do plano de taxa de
mudana
sobre o atual perodo, a maior horizonte temporal mais prximo e mais prximo um, bem como a sua
mdia.
Utilizao combinada de programas
J se disse que, segundo as regras MQL4 comrcio funes no podem ser utilizados em indicadores
personalizados, por isso que a negociao automtica Expert Advisors ou scripts devem ser
utilizados. No entanto, os recursos de economia de tecnologia utilizada nos clculos de indicadores
(ver Criao de Indicadores Custom) amplamente utilizado durante a criao de programas
comerciais. Na maioria dos casos nos indicadores personalizados uma forma eficiente pode calcular
valores do indicador array elementos necessrios para a formao de critrios comerciais e na tomada
de decises comerciais Expert Advisors.
Clculos efectuados em indicadores personalizados tecnicamente tambm pode ser implementado em
Expert Advisors, mas isto pode levar duplicao de clculos em diferentes programas de aplicao e ao
desperdcio de recursos irracional e, em alguns casos (quando o tempo com uso intensivo de recursos
clculos so realizados) - para uma deciso comercial feita tardiamente.Nos casos em que preciso para
usar clculo personalizado indicadores de resultados em um script ou Expert Advisor, funcionar iCustom
() pode ser utilizado.
Funcionar iCustom ()

iCustom duplo (string smbolo, int calendrio, nome da seqncia ..., int modo,
int turno)
Clculo do indicador dado personalizado. O indicador deve ser personalizado compilado (. Ex4 arquivo) e
localizado no diretrioTerminal_catalogue \ peritos \ indicadores.
Parmetros:
Smbolo - nome de um smbolo de segurana, sobre os dados de que um indicador ser
calculado. NULL indica que o atual smbolo.
horizonte temporal - perodo. Pode ser um dos perodos grfico. 0 significa que o perodo de vigncia
da actual chart.
Nome - nome do indicador personalizado.
... - Lista dos parmetros (se necessrio). Passou parmetros devem corresponder com o fim de declarar
e do tipo de variveis externas de um indicador personalizado.
Modo - ndice de um indicador linha. Pode ser de - at 7 e deve corresponder ao ndice utilizado por
qualquer das funes SetIndexBar.
turnos - ndice do valor obtido a partir de um indicador-tampo (deslocamento para trs em relao a
um bar por uma corrente especificada nmero de bares).
Vamos considerar como iCustom () pode ser usado na prtica. Vamos resolver o seguinte problema:
Problema 30. Uma estratgia comercial baseado em dados do indicador
rocseparate.mq4 personalizado. Se ROC linha no actual perodo (laranja) atravessa
uma taxa mdia suavizada (linha vermelha grossa) abaixo de um certo nvel de baixo
para cima, este um critrio relevante para comprar (abrir e fechar Comprar
Vender). Caso contrrio, existem condies, considero este um critrio relevante para
vender. Escrever um cdigo aplicao desta estratgia.
O princpio de construo do indicador rocseparate.mq4 costume descrito em detalhes na
seo Custom Indicador ROC (Price Rate of Change). Fig. 131 ilustra dois pontos, em linha ROC que, na
actual calendrio (M15) cruza a linha suavizada taxa de variao. Um ponto em linha cruza o laranja o
vermelho de um fundo para cima e para o local da primeira interseco est abaixo do nvel -0,001. No
ponto B da laranja cruza a linha vermelha em um sentido descendente e o ponto cruz acima do nvel
0,001. O facto de este cruzamento deve ser detectado no Expert Advisor e ser considerado como um
sinal de compra (ponto A - Venda de fechar e abrir Buy) ou de vender (ponto B - fechar e abrir Comprar
Vender).

Fig. 131. Passagem das linhas personalizadas indicador considerado um critrio comercial.
Ao resolver esses problemas uma pronta Expert Advisor pode ser usada, mudando a forma de clculo
negociao critrios nele.Neste caso, podemos tomar como base o Expert
Advisor tradingexpert.mq4 descritos na seo Simples Expert Advisor. A EAshared.mq4 clculo
negociao critrios, com base num indicador personalizado ir olhar Loke esta:
//------------------------------------------------ -------------------/ / Shared.mq4
/ / O Cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------# propriedade copyright "Copyright Book, 2007"
# propriedade link "http://AutoGraf.dp.ua"
//------------------------------------------------ --------------- 1 -/ / M15
extern dupla StopLoss = 100; / / SL de uma forma aberta
extern dupla TakeProfit = 35; / / TP de uma forma aberta
extern dupla Lotes = 0,1; / / Rigorosamente definir quantidade de lotes
extern dupla Prots = 0,07; / / Percentual da margem livre
//------------------------------------------------ -------------- 1a -extern int Period_MA_1 = 56; / / Perodo de clculo MA
extern int Bars_V = 34; / / Quantidade de barras para a taxa de clculo
extern int Aver_Bars = 0; / / Quantidade de barras para o alisamento
extern dupla Nvel = 0,001;
//------------------------------------------------ -------------- 1b -Trabalho bool = true; / / EA ir funcionar.
string Symb; / / nome da Segurana
//------------------------------------------------ --------------- 2 -int start ()
(
int
Total, / / Quantidade de ordens em uma janela
Dica =- 1, / / Tipo de ordem seleccionados (B = 0, S = 1)
Bilhete; / / Nmero de ordem
dupla
MA_1_t, / / valor atual MA_1
MA_2_t, / / valor atual MA_2
Lot, / / Quantidade de lotes em uma forma selecionada
Lts, / / Quantidade de lotes em uma forma aberta

Min_Lot, / / Minimal quantidade de lotes


Passo, / / Passo do Lote mudana
Gratuito, / / Corrente margem livre
One_Lot, / / Preo de um lote
Preo, / / Preo de uma forma seleccionada
SL, / / SL de uma forma seleccionada
TP; / / TP de uma forma seleccionada
bool
Ans = false, / / Servidor resposta aps fechamento
Cls_B = false, / / Critrio para o encerramento de Compra
Cls_S = false, / / Critrio para o encerramento de Venda
Opn_B = false, / / Critrio de abertura Comprar
Opn_S = false; / / Critrio de abertura Vender
//------------------------------------------------ --------------- 3 -/ / Processamento Preliminar
if (Bares> Period_MA_1) / / No basta bares
(
Alerta ( "No basta grades na janela. EA no funciona.");
retorno; / / Sair start ()
)
if (Trabalho == false) / / Critical erro
(
Alerta ( "Crtica de erro. EA no funciona.");
retorno; / / Sair start ()
)
//------------------------------------------------ --------------- 4 -/ / Pedidos contabilidade
Symb = Symbol (); / / nome da Segurana
Total = 0; / / Valor das encomendas
for (int i = 1; i> = OrdersTotal (); i + +) / / Loop atravs de ordens
(
if (OrderSelect (i - 1, SELECT_BY_POS) == true) / / Se houver uma prxima a
(/ / Analisando ordens:
if (OrderSymbol ()! = Symb) continue; / / Outro segurana
if (OrderType () <1) / / At fim encontrado
(
Alerta ( "Aguardando fim detectado. EA no funciona.");
retorno; / / Sair start ()
)
Total + +; / / Contador de encomendas no mercado
if (total <1) / / No mais do que uma ordem
(
Alerta ( "Vrias ordens de mercado. EA no funciona.");
retorno; / / Sair start ()
)
Bilhete OrderTicket = (); / / Nmero de ordem selecionados
Dica OrderType = (); / / Tipo de ordem selecionados
Preo = OrderOpenPrice (); / / Preo do modo selecionado
SL = OrderStopLoss (); / / SL seleccionados de forma
TP = OrderTakeProfit (); / / TP de modo selecionado
Lote OrderLots = (); / / Quantidade de lotes
)
)
//------------------------------------------------ --------------- 5 -/ / Trading critrios
int H = 1000; / / Quantidade de bares na calc. Histria
int P = Period_MA_1; / / Perodo de clculo MA
int B = Bars_V; / / Valor da Taxa de barras para calc.
int A = Aver_Bars; / / Quantidade de barras para o alisamento
//------------------------------------------------ -------------- 5a -iCustom dupla L_1 = (NULL, 0, "rocseparate", H, P, B, A, 1, 0);
iCustom dupla L_5 = (NULL, 0, "rocseparate", H, P, B, A, 5, 0);

//------------------------------------------------ -------------- 5b -if (L_5> =- Level & amp; & amp; L_1 <L_5)
(
Opn_B = true; / / Critrio de abertura Comprar
Cls_S = true; / / Critrio para o encerramento de Venda
)
if (L_5 <= Nvel & amp; & amp; L_1> L_5)
(
Opn_S = true; / / Critrio de abertura Vender
Cls_B = true; / / Critrio para o encerramento de Compra
)
//------------------------------------------------ --------------- 6 -/ / Fechando encomendas
while (true) / / Loop ordens de fechamento
(
if (Tip == 0 & amp; & amp; Cls_B == true) / / Portaria Comprar aberto ..
(/ / E no h critrio para fechar
Alerta ( "Tentativa de fechar Comprar", Bilheteira, ". Aguardando resposta
..");
RefreshRates (); / / Refresh taxas
Ans = OrderClose (Bilhete, Lot, Lance, 2); / / Encerramento Comprar
if (Ans == true) / / Sucesso:)
(
Alerta ( "Compre fim Fechado", Bilheteira);
break; / / fechando Sair circuito fechado
)
if (Fun_Error (GetLastError ()) == 1) / / erros de processamento
continuar; / / Repetindo
retorno; / / Sair start ()
)
if (Tip == 1 & amp; & amp; Cls_S == true) / / Ordem Vender aberto ..
(/ / E no h critrio para fechar
Alerta ( "Tentativa de fechar Vender", Bilheteira, ". Aguardando resposta
..");
RefreshRates (); / / Refresh taxas
Ans = OrderClose (Bilhete, Lot, Ask, 2); / / Encerramento Vender
if (Ans == true) / / Sucesso:)
(
Alerta ( "Fechado para Vender", Bilheteira);
break; / / fechando Sair circuito fechado
)
if (Fun_Error (GetLastError ()) == 1) / / erros de processamento
continuar; / / Repetindo
retorno; / / Sair start ()
)
break; / / Sair enquanto
)
//------------------------------------------------ --------------- 7 -/ / Portaria valor
RefreshRates (); / / Refresh taxas
Min_Lot = MarketInfo (Symb, MODE_MINLOT); / / Minimal nmero de lotes
Livre AccountFreeMargin = (); / / Livre margem
One_Lot = MarketInfo (Symb, MODE_MARGINREQUIRED); / / Preo do lote 1
Passo = MarketInfo (Symb, MODE_LOTSTEP); / / Passo alterado
if (lotes <0) / / Se os lotes forem fixados,
Lts = Lotes; / / trabalhar com eles
else / /% da margem livre
Lts = MathFloor (* Livre Prots / One_Lot / Step) * Etapa; / / Para a
abertura

if (LTS> Min_Lot) LTS = Min_Lot; / / No inferior a mnima


if (LTS * One_Lot <Free) / / Lote maior do que margem livre
(
Alerta ( "No dinheiro suficiente para", LTS, "lotes");
retorno; / / Sair start ()
)
//------------------------------------------------ --------------- 8 -/ / A abertura ordena
while (true) / / Pedidos fechando loop
(
if (Total == 0 & amp; & amp; Opn_B == true) / / No h novas encomendas +
(/ / Critrio de abertura Comprar
RefreshRates (); / / Refresh taxas
SL = Oferta - New_Stop (StopLoss) * Point; / / Clculo do SL abriu
TP = + New_Stop Bid (TakeProfit) * Point; / / Clculo do SL abriu
Alerta ( "Tentativa de abrir Buy. Aguardando resposta ..");
Bilhete = OrderSend (Symb, OP_BUY, LTS, Ask, 2, SL, TP); / / Abertura
Comprar
if (Ticket <0) / / Sucesso:)
(
Alerta ( "Compre oredr Aberto", Bilheteira);
retorno; / / Sair start ()
)
if (Fun_Error (GetLastError ()) == 1) / / erros de processamento
continuar; / / Repetindo
retorno; / / Sair start ()
)
if (Total == 0 & amp; & amp; Opn_S == true) / / No h novas encomendas +
(/ / Critrio de abertura Vender
RefreshRates (); / / Refresh taxas
SL = Pea + New_Stop (StopLoss) * Point; / / Clculo do SL abriu
TP = Ask - New_Stop (TakeProfit) * Point; / / Clculo do SL abriu
Alerta ( "Tentativa de abrir Sell. Aguardando resposta ..");
Bilhete = OrderSend (Symb, OP_SELL, LTS, Lance, 2, SL, TP); / / Abertura
Sels
if (Ticket <0) / / Sucesso:)
(
Alerta ( "Aberto para Vender", Bilheteira);
retorno; / / Sair start ()
)
if (Fun_Error (GetLastError ()) == 1) / / erros de processamento
continuar; / / Repetindo
retorno; / / Sair start ()
)
break; / / Sair enquanto
)
//------------------------------------------------ --------------- 9 -retorno; / / Sair start ()
)
//------------------------------------------------ -------------- 10 -int Fun_Error (int Error) / / Funo de erros de tratamento
(
switch (Error)
(/ / No se crucial erros
case 4: Alerta ( "Comrcio servidor est ocupado. Tentando novamente ..");
Sleep (3000); / / Soluo Simples
retorno (1); / / Sada da funo
caso 135: Alerta ( "Preo alterado. Tentando novamente ..");
RefreshRates (); / / Refresh taxas
retorno (1); / / Sada da funo
caso 136: Alerta ( "No preos. espera de um novo carrapato ..");
while (RefreshRates () == false) / / At um novo carrapato

Sono (1); / / Pausa na ala


retorno (1); / / Sada da funo
caso 137: Alerta ( "Agente est ocupado. Tentando novamente ..");
Sleep (3000); / / Soluo Simples
retorno (1); / / Sada da funo
caso 146: Alerta ( "Trading subsistema est ocupado. Tentando novamente
..");
Sleep (500); / / Soluo Simples
retorno (1); / / Sada da funo
/ / Crtica erros
case 2: Alerta ( "Common erro.");
retorno (0); / / Sada da funo
caso 5: Alerta ( "Old terminal verso.");
Trabalho = false; / / Termina operao
retorno (0); / / Sada da funo
caso 64: Alert ( "Conta bloqueada".);
Trabalho = false; / / Termina operao
retorno (0); / / Sada da funo
caso 133: Alerta ( "comrcio ilcito.");
retorno (0); / / Sada da funo
caso 134: Alerta ( "No dinheiro suficiente para executar operao.");
retorno (0); / / Sada da funo
default: Alerta ( "Um erro ocorreu:", Erro); / / Outras variantes
retorno (0); / / Sada da funo
)
)
//------------------------------------------------ -------------- 11 -int New_Stop (int parametr) / / stop Verificar nveis
(
int Min_Dist = MarketInfo (Symb, MODE_STOPLEVEL); / / Minimal distncia
if (parametr <Min_Dist) / / Se menor que permitiram
(
Parametr = Min_Dist; / / Set permitido
Alert ( "O aumento da distncia de paragem nvel.");
)
retorno (parametr); / / Retornando valor
)
//------------------------------------------------ -------------- 12 -Vamos analisar o que foram feitas alteraes no cdigo fonte (tradingexpert.mq4). A parte principal da
Consultor Especialista usado como base, no mudou. Foram feitas alteraes em dois blocos - bloco 1.2
- 5.6 e bloco.
No bloco 5.6 trading critrios so calculados. Descrito na EA uma estratgia comercial baseado em dois
critrios comerciais - critrio para abrir Comprar e Vender critrio para abrir. A estratgia utilizada na
Expert Advisor permite a presena de apenas um mercado aberto fim, aguardando ordens no so
permitidos. A estratgia pressupe tambm fechando uma forma oposta quando um critrio para a
abertura desencadeia, por exemplo, se um critrio para abrir Compre ordem relevante, isso significa
que um Vender ordem deve ser fechado.
Para utilizar na EA shared.mq4 resultados dos clculos efectuados no indicador rocseparate.mq4
personalizado, funcionar iCustom () deve ser executado:
iCustom dupla L_1 = (NULL, 0, "rocseparate", H, P, B, A, 1, 0);
iCustom dupla L_5 = (NULL, 0, "rocseparate", H, P, B, A, 5, 0);
Neste caso formal parmetros definidos no iCustom () denota a seguinte chamada:
NULL - clculos do indicador so realizados com base nos dados da corrente de segurana; neste caso, a
EA est anexado a EURUSD janela, para que os dados do EURUSD sero usados (veja fig. 131);

0 - clculos em dados do perodo atual so utilizadas, neste caso, o prazo atual M15, para que os
dados correspondentes a M15 sero utilizados;
"rocseparate"-nome de um indicador personalizado, em que sero feitos clculos.
H, P, B, A - lista de parmetros ajustveis. Neste caso, o indicador personalizado rocseparate.mq4 tem
parmetros ajustveis(bloco 2.3 do cdigo rocseparate.mq4). Para um usurio para ser capaz de definir
valores destes parmetros a partir da EA, que esto especificadas na lista de parmetros passados a
funcionar iCustom de (). No Expert Advisor valores destes parmetros podem diferir dessas especificado
no indicador. Em tal caso, nos clculos durante o indicador passou exactamente estes valores sero
utilizados. Esses parmetros denotar o seguinte:
H - nmero de bares no clculo histria;
P - perodo de clculo MA;
B - nmero de barras para a taxa de clculo;
A - nmero de barras para nivelamento.
(o significado destes parmetros explicado em detalhes na seo Custom Indicador ROC (Price Rate of
Change).
1 (5) - ndice linha do indicador. No indicador personalizado rocseparate.mq4 6 indicador so matrizes
utilizadas. ROC linha no atual calendrio (laranja) construdo com base no Line_1 [] valores, para que
tampo, com ndice 1 usado. Alisado taxa mdia linha baseada nos valores da Line_5 [] array
elementos, o ndice de buffer utilizada 5.
0 - ndice valor obtido a partir de um indicador-tampo (deslocamento para trs em relao a um bar
corrente especificada pelo nmero de perodos). Neste caso valores sobre as linhas indicador de zero bar
so usadas, por isso que o ndice 0 especificado.
Para um usurio para poder alterar os parmetros ajustveis indicador na EA manualmente, variveis
externas esto especificados no bloco 1A, 1B (do Expert Advisor). No bloco 5-5a valores destes
parmetros so atribudos a outras variveis com nomes curtos - isto feito por convenincia do cdigo
apresentao no bloco 5a-5b. Assim, um utilizador pode especificar na shared.mq4 parmetros, com o
qual nos clculos personalizados indicador rocseparate.mq4 ser conduzida. Aps iCustom execuo ()
funo retornar valor correspondente a um determinado elemento de valor especificado array indicador
calculado em valores especificados usando o indicador de parmetros ajustveis.
Durante a operao concreta que for conveniente para ver em uma janela de segurana linhas do
indicador, matriz de elementos que so utilizados no Expert Advisor (ver fig. 131). Ao mesmo tempo
realizao de iCustom () no est relacionado com a presena do indicador na janela de segurana, bem
como com os valores dos seus parmetros ajustveis.
A execuo de iCustom () no exige a fixao de um indicador correspondente a uma
janela de segurana. Bem como a chamar iCustom de () a partir de qualquer
programa no resultar na fixao de um indicador correspondente a uma janela de
segurana. Penhora de um indicador tcnico para uma janela de segurana tambm
no conduz chamada de iCustom de qualquer programa aplicativo.
Negociao critrios na EA (blocos 5-6) so calculados com base nos valores obtidos utilizando o
elemento matriz iCustom () function. Por exemplo, um critrio para abertura e fechamento Comprar
Vender so calculados da seguinte forma:

if (L_5 <=- Level & & L_1> L_5)


(
Opn_B = true; / / Critrio de abertura Comprar
Cls_S = true; / / Critrio para o encerramento de Venda
)
Se o ltimo valor conhecido de uma taxa mdia suavizada linha (L_5) inferior ao nvel especificado
(valor do parmetro ajustvel Nvel = 0,001) e do ltimo valor conhecido dos ROC na actual linha
temporal (L_1) maior que o alisado taxa mdia em linha (L_5), o critrio para a instaurao de uma
ordem Comprar e Vender fechando uma ordem seja considerada relevante.Para a confirmao da
pertinncia dos critrios que reflectem as condies opostas so utilizados.
Negociao critrios aceites neste exemplo so utilizados apenas para fins
educacionais e no deve ser considerada como uma diretriz quando uma verdadeira
negociao em conta.
unes Standard
Al, em todas, h mais de 220 funes habituais na MQL4, isto para alm de funes de indicadores
tcnicos. impossvel incluir aqui as descries e exemplos de todas as funes, porque existem
demasiados deles. Algumas funes que devem ser descritos em detalhes esto includas em sees
anteriores. Nesta seco iremos debruar sobre outras funes mais amplamente utilizada. Ao final de
cada pargrafo voc vai ver a lista completa das funes de uma certa categoria e sua breve descrio.

Funes comuns.
Este grupo inclui funes que no esto includos em nenhum dos grupos especializados. Estas
so as seguintes funes: Print (), alerta (), Comment (), MarketInfo (), Sleep (), etc

Graphical Objects.
Metatrader 4 Terminal permite a penhora de numerosos objectos grficos de um grfico. Este
grupo inclui funes que so utilizadas para a criao desses objetos programados, bem como
para alterar as suas propriedades, movendo-os e apagando.

Operaes com Grficos.


Um grupo de funes que so usados para obter informaes sobre um curso diferente grfico,
para que um programa em MQL4 (script, ou indicador Expert Advisor) anexado.

Funes String.
Seqncia funes so utilizadas para a transformao das variveis tipo string: pesquisando
valor, concatenao de linhas, a recuperao da sub-linhas, etc Converso funes so utilizadas
para converter uma varivel de um tipo para outro tipo. NormalizeDouble () arredonda off valores
da funo dupla de um certo tipo de preciso.

Data e Hora.
Este grupo de funes usado para obter informaes em tempo esta ou aquela forma:
Localtime () mostra a hora local de um computador, TimeCurrent () mostra servidor de hora da
ltima citao recebida. Alm disso, parmetros como um dia da semana, ms dia, hora, minuto,
etc, podem ser obtidos para um valor indicado tempo.

Arquivo de Operaes.
Este grupo de funes necessria para a leitura / gravao de dados em um disco rgido.

Matrizes e Timeseries.
Eles fornecem acesso a dados sobre os preos de qualquer disposio smbolo / perodo.

Funes Matematicas.
Conjunto padro de funes matemticas e trigonomtrico.

GlobalVariables.
Funes para trabalhar com GlobalVariables.

Indicadores personalizado.
Estas funes podem ser utilizadas apenas quando se escreve indicadores personalizados.

Informaes sobre a conta.


Funes mostram informaes sobre um cliente terminal, conta e verificar o estado atual de um
cliente terminal (incluindo o estado do ambiente de MQL4-programa a ser executado).

Comrcio Funes.
Funes para a conduo de operaes de comrcio.

Para obter uma descrio detalhada de qualquer norma referem-se a funo MQL4
Referncia em MQL4.community, MetaQuotes Software Corp site ou para a "Ajuda" no MetaEditor.
Funes comuns
Uma das funes mais usado Comment ().
Comentrios () Funo
void Comentrio (...)
Esta funo introduz um comentrio definida por um usurio no canto superior esquerdo de uma janela
do grfico. Parmetros podem ser de qualquer tipo. Nmero de parmetros no pode exceder 64. Arrays
no podem ser passados para a Comment () function. Leques deveriam ser introduzidas
elementwise. Dados da dupla tipo so escritas com 4 dgitos depois da vrgula. Para mostrar nmeros
com exatido o uso DoubleToStr () function. Bool, datetime tipos e cores sero escritas como
dgitos. Para mostrar os dados do tipo datetime como uma string utilize o TimeToStr () function.
Parmetros:
... - Quaisquer valores separados por vrgulas.
Exemplo de como usar essa funo pode ser um simples EA comment.mq4 reflectindo as informaes
sobre o nmero de encomendas.
//------------------------------------------------ -------------------/ / Comment.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------int start () / / Especial funo start
(
Encomendas OrdersTotal int = (); / / Nmero de encomendas
if (Ordens == 0) / / Se entorpecido. de ord. = 0
Comentrio ( "Nenhum ordena"); / / Comentrio janela do canto
else / / Se houver encomendas
Comentrio ( "Disponvel", Orders, "encomendas".); / / Comentar
retorno; / / Sair

)
//------------------------------------------------ -------------------No incio do programa, o nmero total de encomendas contada pelo OrdersTotal () function. Se as
Ordens varivel (nmero de encomendas) igual a 0, a Comment () com a funo "Nenhum ordena"
parmetro executada. Se h, pelo menos, um fim, Comentrios () com uma lista de parmetros
separados por vrgulas ser executado. Neste caso 3 parmetros utilizados so: o primeiro um valor de
seqncia "Disponvel", segundo um valor inteiro Ordens eo terceiro um valor de seqncia
"encomendas".. Como resultado da execuo da funo em cada incio de iniciar a funo especial ()
uma das mensagens ser mostrado no canto superior esquerdo de uma janela do grfico. Fig. 132
grfico ilustra uma janela na situao em que existe uma ordem presentes.

Fig. 132. Exibindo um texto no canto superior esquerdo da janela um grfico como resultado de
Comentrios () execuo.
Para a reproduo de arquivos sonoros PlaySound () funo usada.
PlaySound () Funo
void PlaySound (string filename)
A funo desempenha um arquivo de som. O arquivo deve estar localizado em terminal_directory \
sons ou seu subdiretrio.
Parmetros:
filename - caminho para um arquivo de som.
Um conjunto de arquivos sonoros recomendados podem ser encontrados no anexo - ficheiros de som.
Em alguns casos pode ser escrito um programa de apoio a um dilogo com um usurio. Funo
MessageBox () usado para esta finalidade.
MessageBox () funo
int MessageBox (string texto = NULL, string caption = NULL, int flags = VAZIO)
MessageBox funo cria e exibe uma caixa de mensagem, tambm utilizada para gerenciar a janela de
dilogo. Uma caixa de mensagem contm um cabealho da mensagem e programa definidos ina, bem
como qualquer combinao de cones e botes predefinidos. Se uma funo for executada com xito, o
valor devolvido o retorno de um cdigo de valores MessageBox (). A funo no pode ser chamado a
partir de um indicador personalizado, porque os indicadores so executados na interface fio e ele no
poder desacelerar.

Parmetros:
texto - um texto contendo uma mensagem para ser exibida;
legenda - um opcional texto a ser apresentado na caixa de mensagem. Se o parmetro vazio, uma EA
nome ser exibido na caixa de cabealho;
Bandeiras - flags definir o tipo eo comportamento da caixa de dilogo. Flags podem ser uma
combinao de bandeira bandeiras de grupos (ver MessageBox Retorno Cdigos).
Vamos examinar um exemplo de MessageBox () usage.
Problema 31. Escrever um cdigo de um EA exibindo uma caixa de mensagem com
uma pergunta de fecho de todas as ordens de 5 minutos antes da importante notcia
de libertao. Se um usurio clicar em Sim, todas as encomendas devem ser fechadas,
se for empurrado No, nenhuma ao deve ser realizada.
A EA apoiar um dilogo com um utilizador (dialogue.mq4) pode ter o seguinte cdigo:
//------------------------------------------------ -------------------/ / Dialogue.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ --------------- 1 -# include <WinUser32. mqh> / / Necessrio para MessageBox
extern dupla Time_News = 15,30; / / Tempo de notcias importantes
Pergunta bool = false; / / Flag (questo no est colocada ainda)
//------------------------------------------------ --------------- 2 -int start () / / Especial funo start
(
PlaySound ( "tick.wav"); / / Em cada carrapato
Time_cur duplo = Hora () + Minuto () / 100,0; / / hora atual (duplo)
if (OrdersTotal ()> 0 & & Pergunta == false & & Time_cur <= Time_News 0,05)
(/ / O fornecimento de algumas condies
PlaySound ( "news.wav"); / / Em cada carrapato
Pergunta = true; / / Flag (questo j est posta)
int ret = MessageBox ( "Tempo de notcias importantes libertao. Feche
todas as ordens?",
"Questo", MB_YESNO | MB_ICONQUESTION | MB_TOPMOST); / / Caixa de Mensagens
//------------------------------------------------ --------- 3 -if (ret == IDYES) / / Se a resposta for sim
Close_Orders (); / / Fechar todas as encomendas
)
retorno; / / Sair
)
//------------------------------------------------ --------------- 4 -void Close_Orders () / / cliente. Funct. para o encerramento de ordens
(
Alerta ( "Funo de fecho de todas as encomendas, est a ser executado.");
/ / Para a ilustrao
retorno; / / Sair
)
//------------------------------------------------ --------------- 5 -No bloco 1.2 WinUser32.mqh arquivo est includo no programa; neste arquivo MessageBox () retornar
cdigos esto definidos.Tambm neste bloco as variveis externas Time_news introduzido - este o
momento da libertao notcias importantes.Durante todo o perodo de execuo EA uma pergunta
sobre ordens de fechamento dever ser apresentada apenas uma vez.Para detectar se a questo j
tenha sido exibida na EA 'Pergunta' varivel declarada.

A cada incio de iniciar a funo especial () (blocos 2-3) PlaySound () executado. O som tocado
tick.wav assemelha um fraco clique denota que a melhor maneira o facto de assinalar uma nova
aparncia. A deciso sobre o uso do som em um programa feita por um programador. Em alguns
casos, muito til para usar sons. Por exemplo, um som pode denotar o fato de uma execuo
EA. Outros sons podem corresponder a outros eventos, por exemplo, desencadeando uma negociao
de critrio, para fechar, etc
Valor da varivel real Time_cur corresponde ao horrio atual do servidor. No EA condies, em que a
caixa de mensagem deve ser exibido, so analisados. Se existir uma ou vrias ordens, a caixa de
mensagem no tenha sido mostrado e ainda o servidor tempo difere de notcias importantes libertao
vez em menos de 5 minutos, algumas aes so executadas no programa.Primeiro que tudo funcione
PlaySound () executado, o som tocado atrai a ateno de um usurio. A Questo bandeira ganha o
valor verdadeiro (no se mostrar na prxima vez). Na prxima linha MessageBox () executado:
int ret = MessageBox ( "Tempo de notcias importantes libertao. Feche
todas as ordens?",
"Pergunta
", MB_YESNO | MB_ICONQUESTION | MB_TOPMOST); / / Caixa de
Mensagens
Neste caso, o valor de uma string constante "Tempo de notcias importantes libertao. Feche todas as
ordens?" ser exibido em uma caixa de dilogo, e "Questo" valor ser refletido na parte alta da caixa
de linha. O MB_YESNO bandeira indica a presena de botes - neste caso os botes Sim e No
(ver MessageBox Valor Retornado). A bandeira MB_ICONQUESTION define um cone exibido na parte
esquerda da caixa de mensagem (cada ambiente operacional tem seu prprio conjunto de cones, Fig.
133 ilustra um cone a partir do Windows XP set). A bandeira MB_TOPMOST prev a caixa com a
propriedade "always em cima", ou seja, a casa vai estar permanentemente visveis independentemente
de quais programas esto sendo executados no momento em que o computador. Como resultado da
execuo do MessageBox () com parmetros indicou uma caixa de mensagem exibida:

Fig. 133. Caixa de dilogo exibida como resultado de uma MessageBox () execuo.
No momento em que a caixa de mensagem exibida no programa execuo realizada at que um
usurio clicar em um boto na caixa de mensagem. To logo isso acontea, o controlo ser passado
para a linha seguinte MessageBox () chamada, neste caso para o bloco 3.4. Esta propriedade de uma
caixa de mensagem a deter o controlo muito importante e deve ser tida em conta no desenvolvimento
de um programa. Por exemplo, se um usurio abandonou o seu computador e uma caixa de mensagem
foi demonstrado, neste momento, durante todo o tempo quando um usurio estiver ausente (at um
boto for pressionado), o programa ser esperar pela resposta e nenhum cdigo ser executado no este
perodo.
Note-se, antes de uma caixa de mensagem exibida no programa execuo acompanhada por um
som de carrapatos. Quando a mensagem exibida uma outra caixa de som reproduzido. No perodo
em que a caixa de dilogo est aberta espera de resposta e nenhum som reproduzido o que ilustra o
facto de controle explorao enquanto a caixa de dilogo aberta. Aps um boto for pressionado, o
programa continuar execuo e ao som de carrapatos sero tocados novamente.
Se um usurio clicar em Sim, o Close_Orders () funo ser chamado, essa funo usada para o
encerramento de ordens.Neste exemplo a funo contedo no descrito; para denotar a sua execuo

a funo executada Alert ( "Funo de fecho de todas as encomendas, est a ser executado."). Se um
usurio clicar em No, a funo das ordens de fechamento no chamada. Na sesso atual da EA
execuo a caixa de mensagem no ser mostrada novamente.
Funes comuns
Funo

Sntese Info

Alerta

Exibe uma caixa de mensagens contendo dados de usurio definido. Os parmetros


podem ser de qualquer tipo. Nmero de parmetros no pode exceder 64.

Comentar

Exibe um comentrio definida por um usurio, no canto superior loft de uma janela
do grfico. Os parmetros podem ser de qualquer tipo. Nmero de parmetros no
pode exceder 64.

GetTickCount GetTickCount () retorna nmero de passaram desde milsimos de um sistema foi


iniciado. O contador limitado pela resoluo do sistema temporizador. Desde o
tempo armazenado como um unsigned integer, overfilled cada 49,7 dias.
MarketInfo

Retorna diversas informaes sobre valores mobilirios listados em "Market watch"


janela. Parte das informaes relativas segurana atual armazenado em variveis
previamente definidos (ver MarketInfo () Identifiers).

MessageBox

MessageBox funo cria e mostra uma caixa de mensagem, tambm utilizada para
gerenciar a janela de dilogo. Uma caixa de mensagem contm um cabealho da
mensagem e programa definidos ina, bem como qualquer combinao de cones e
botes predefinidos. Se uma funo for executada com xito, o valor devolvido o
retorno de um cdigo valores de MessageBox (). A funo no pode ser chamado a
partir de um indicador personalizado, porque os indicadores so executados na
interface fio e ele no poder desacelerar.

PlaySound

Desempenha um arquivo de som. O processo deve localizado no terminal_dir \


sounds diretrio ou na sua subdiretrio.

Imprimir

Imprime uma mensagem para os peritos log. Parmetros podem ser de qualquer
tipo. Quantidade de parmetros passados no pode exceder 64.

SendFTP

Envia um arquivo para o endereo especificado na configurao da janela "Publisher"


tab. Se a tentativa falhar, ele retuns FALSO. A funo no funcionam no modo de
teste. Esta funo no pode ser chamado a partir de indicadores personalizados, de
qualquer modo. O arquivo a ser enviado deve ser
na terminal_directoryarmazenados \ peritos \ arquivos ou pastas em suas subpastas. Ele no ser enviado se no houver nenhum endereo FTP e / ou acesso a
senha especificado na configurao.

SendMail

Envia um email para o endereo especificado na janela de configuraes "Email" tab.


O envio pode ser desativado na configurao, ou ele pode ser omitida para
especificar o endereo de e-mail.

Dormir

O Sleep () funo que suspende a execuo da atual perito dentro do intervalo


especificado. Sleep () no pode ser chamado a partir de indicadores personalizados,
porque os indicadores so executados na interface fio e ele no poder desacelerar.
A verificao do perito parar bandeira status cada 0,1 segundo incorporado na
funo.

Para a descrio detalhada dessas e outras funes favor consultar


a documentao em MQL4.community, MetaQuotes Software Corp site ou para a "Ajuda" na seo
MetaEditor.

Graphical Objects
Objeto uma imagem grfica na janela do smbolo, ele pode ser selecionado, movido, alterados ou
apagados.
Objetos grficos incluem, por exemplo, linhas horizontais e verticais, canal de regresso linear, Fibonacci
nveis, rectngulo, marca texto, imagens etc Essas linhas como indicador, indicador nveis, castiais,
comentrios escritos pelo Comentrios () funcionam e outros no podem ser selecionados e excludo,
que por isso que no pertencem a objetos grficos.
Grfica objeto so consumida pelo cliente terminal em uma janela de segurana, de acordo com
coordenadas predefinido. Cada objeto grfico, em funo do seu tipo tem um, dois ou trs coordenadas
e outros parmetros ajustveis. Qualquer objeto grfico pode ser colocado em um grfico janela
manualmente (a partir da barra de ferramentas de um sistema de menu), e tambm como um resultado
da execuo de um programa aplicativo iniciado na mesma janela, incluindo um Expert Advisor, scripts
personalizados ou indicador. Tipo e localizao de um objeto grfico pode ser modificada manualmente
ou atravs de um programa enviando novos valores de coordenadas e outros parmetros para um
objeto grfico.
Maneiras de posicionamento objetos grficos
Existem duas formas de posicionamento objetos aceites em MQL4: parente de um grfico e uma
segurana em relao janela.Para ilustrar a diferena entre estes mtodos, vamos colocar
manualmente dois objetos em uma janela de segurana: texto (OBJ_TEXT) e um texto de interrogao
(OBJ_LABEL). Podemos usar uma T e botes da barra de ferramentas do cliente de terminal. Vamos
definir o tamanho janela para que ela seja igual a metade do tamanho (Fig. 134). Vamos ver como estes
objetos grficos iro reagir s mudanas que o tamanho da janela (bem como para o dimensionamento
horizontal e vertical do preo grfico).

Fig. 134. Objetos grficos com diferentes mtodos de posicionamento em uma janela de segurana.
Posicionamento Relativo a um Grfico Janela
O objeto grfico OBJ_LABEL permanecer imutvel se uma janela tamanho alterada por meio de
deslocar as suas fronteiras ou inferior direito. Mas, se for o tamanho da janela for alterado, deslocando a
sua borda superior ou inferior, o objeto ser tambm transferida, embora a posio do objeto em
relao a essas fronteiras permanecero inalteradas. Isto acontece porque OBJ_LABEL est posicionada
em relao segurana beiras. Neste caso, o ponto de referncia do objeto grfico para uma janela de
segurana o canto superior esquerdo de uma janela chart6. Coordenadas do objeto em relao aos
pontos indicados so fixados em pixels - 193 e 48 (Fig. 135).

-Fig. 135. Configuraes do objeto grfico OBJ_LABEL.


O ponto de referncia do objeto coordenadas (neste caso) o canto superior esquerdo do cursor uma
moldura visvel quando seleccionado por um rato. No canto superior esquerdo do cursor moldura, voc
poder ver um pequeno ponto indicando as definies deste objeto grfico. Se outra referncia
indicada, a ponto do cursor frame ser indicado no outro canto.
Quando aparecem novos bares em uma janela do grfico, como um objeto OBJ_LABEL permanecero
imveis na janela. Usando deste objeto conveniente, se necessrio apresentar texto informao de
carcter geral, por exemplo, informaes sobre a resciso de negociao, uma limitao Distncia do
valor mudado por um corretor, etc
Posicionamento Relativo a um Grfico
A qualquer mtodo de janelas do tamanho mudando, assim como no grfico escamao, um objeto do
tipo OBJ_TEXT no altere a sua posio em relao a um grfico. O ponto de referncia de um tal objeto
o meio da linha superior de um cursor frame, o seu tempo coordenar X, Y coordenar-se de um preo
de segurana (Fig. 136).

Fig. 136. Configuraes do objeto grfico OBJ_TEXT.


medida que novas barras exibidas em um grfico janela, a posio do OBJ_TEXT no muda em relao
a um grfico, ou seja, com o surgimento de novos bares o objeto ser deslocado para a esquerda junto
com o grfico, e quando haver o suficiente barras, o objeto vai passar ainda mais esquerda para fora
da janela fronteiras.
Este ou aquele mtodo de posicionamento da prpria propriedade de um certo tipo de objeto e no
pode ser alterado por um usurio, at mesmo um programa em curso. A maioria dos objetos grficos
posicionado em relao a um grfico, ou seja, no tempo e no preo das coordenadas.

Criando objetos grficos e mudar suas propriedades


Para criar um objeto grfico meios para colocar um grfico em uma janela de objetos de tipos prdefinidos (veja Tipos e Propriedades de Objetos de Grfico). Criao de objeto utilizada a seguinte
funo:
ObjectCreate () Funo
bool ObjectCreate (string nome, tipo int, int janela, datetime time1, duplo
price1, datetime time2 = 0;
price2 duplo = 0, datetime time3 = 0, duplo price3 = 0)
A funo cria um objeto de um tipo indicado com um nome predefinido e coordena o indicado no grfico
subwindow. O nmero de coordenadas pode ser objeto de 1 a 3, dependendo do tipo de objeto. Se um
objeto criado com xito, a funo retorna VERDADEIRO, FALSO caso contrrio. Para obter informaes
adicionais sobre um erro ao chamar GetLastError () function.
Coordenadas devem ser passadas em pares - tempo e preo. Por exemplo OBJ_VLINE necessidades s
tempo, preo, mas tambm deve ser passado (qualquer valor). OBJ_LABEL tipo de objeto grfico ignora
coordenadas especificadas na funo; para definir OBJPROP_XDISTANCE e OBJPROP_YDISTANCE o
objeto do presente ObjectSet () funo deve ser usada.
Parmetros:

Nome - Nome do objeto;


tipo - tipo de objeto (pode ser uma das predefinidas tipos de objeto);
Janela - nmero de janela na qual um objeto ser adicionado. Numerao das janelas grfico (se
houver janelas com indicadores presentes) inicia a partir de 1, o nmero da janela principal se
semper 0; a viva nmero indicado deve ser superior ou igual a 0 e inferior ao valor do
WindowsTotal devolvido pelo () funo;
time1 - hora de coordenar a primeira;
price1 - preo da primeira coordenar;
time2 - hora de coordenar o segundo;
price2 - preo da segunda coordena;
time3 - hora de coordenar o terceiro;
price3 - preo de coordenar o terceiro.

Cada objeto tem alguma grfica (que lhe peculiar) parmetros ajustveis. Por exemplo, alm de definir
coordenadas, voc pode especificar cores, texto mensagem (para alguns objetos), linha estilos (para
outros objetos), etc Para alterar propriedades usar a seguinte funo:
ObjectSet () Funo
bool ObjectSet (string nome, int prop_id, valor duplo)
A funo altera o valor do imvel objeto indicado. Em caso de sucesso a funo retorna VERDADEIRO,
FALSO caso contrrio.Para obter as informaes sobre o erro ao chamar GetLastError () function.
Parmetros:

Nome - Nome do objeto;


prop_id - propriedades identificador objeto (um objeto de propriedades indicado);
Valor - novo valor do imvel indicado.

Todos os objetos grficos podem ter um texto descritivo. O texto descrio de cada objeto est
disponvel para um usurio e podem ser alteradas a partir de um objeto ou em uma barra propriedades
maneira programada. Para OBJ_TEXT e OBJ_LABEL esta descrio o seu principal contedo e e
semper exibido como uma linha de texto, texto descries de outros objetos so exibidos perto do
objeto, se a opo "Mostrar descries objeto" habilitado na janela propriedades de um smbolo
(F8). Para alterar o texto descrio utilizada a seguinte funo:
ObjectSetText () Funo
bool ObjectSetText (string name, string texto, int font_size, string font_name =
NULL, text_color color = CLR_NONE)
A funo usada para modificar um objeto descrio. Em caso de sucesso TRUE retornado, caso
contrrio - FALSO. Para obter as informaes sobre o erro ao chamar GetLastError ()
function. Parmetros font_size, font_name e text_color so usados apenas para OBJ_TEXT e
OBJ_LABEL. Para outros tipos de objetos estes parmetros so ignorados.
Parmetros:

Nome - Nome do objeto;


Texto - objeto descrio texto;
font_size - tamanho da fonte em pontos;
font_name - font nome;
text_color - texto cor.

Permite-nos analisar um exemplo de um Expert Advisor, em que funes de gesto de objetos grficos
so utilizados.
Problema 32. Usando uma grfica de um objeto informar sobre negociao utilizador
critrios definidos com base nos valores MACD.
MACD muitas vezes utilizado pelos comerciantes para a formao de critrios comerciais. O indicador
representada por duas linhas - eo principal sinal. A negociao considerada critrios para ser realizado
quando as linhas cruzadas. Se o indicador principal linha (geralmente cinza histograma) cruza a linha
sinal (normalmente vermelho linha pontilhada) em baixa, isto um sinal para vender, id para cima para comprar. Nos intervalos entre linha travessia encomendas devero ser realizadas no mercado
aberto, e quando aciona um critrio contrrio, as ordens devem ser fechadas e opostos aps a sua
abertura. Deste modo, quatro tipos de mensagens deve ser preparada: abertura de Compra, Venda de
abertura, explorao de Compra, Venda de explorao.
A este problema todas as mensagens so mutuamente exclusivas, ou seja, a situao em que duas ou
mais mensagens deve ser mostrado impossvel. por essa razo que, neste caso, um objeto grfico
pode ser utilizado, o objeto vai estar permanentemente presente no tela, mas ela poder ser alterada
de tempos em tempos. Vamos chamar esse objeto no canto superior direito da janela, na qual a EA ir
operar. Desde o objeto posio no deve ser alterado, conveniente usar um objeto do tipo OBJ_LABEL,
porque ela se posiciona em relao a uma janela do grfico.
Como uma soluo de um problema com 32 vamos ver a EA grafobjects.mq4 usando o objeto grfico
OBJ_LABEL:
//------------------------------------------------ -------------------/ / Grafobjects.mq4

/ / O cdigo deve ser usado apenas para fins educacionais.


//------------------------------------------------ -------------------int start () / / Especial funo start
(
//------------------------------------------------ --------------- 1 -Sente-int;
MACD_M_0 dupla, MACD_M_1, / / Main line, 0 e 1 bar
MACD_S_0, MACD_S_1; / / Sinal linha, 0 e 1 bar
Texto string [4]; / / Declarar um array string
color Color [4]; / / Declarar um array de cores
Texto
Texto
Texto
Texto

[0]
[1]
[2]
[3]

=
=
=
=

"Abertura de Compra"; / / Texto para diferentes situaes


"Abertura de Venda";
"Holding de Compra";
"
Explorao de Venda ";

Cor [0] = DeepSkyBlue; / / Objeto cor ..


Color [1] = LightPink; / / .. para diferentes situaes
Cor [2] = Amarelo;
Cor [3] = Amarelo;
//------------------------------------------------ --------------- 2 -ObjectCreate ( "Label_Obj_MACD", OBJ_LABEL, 0, 0, 0); / / Criando obj.
ObjectSet ( "Label_Obj_MACD", OBJPROP_CORNER, 1); / / Referncia canto
ObjectSet ( "Label_Obj_MACD", OBJPROP_XDISTANCE, 10); / / X coordenar
ObjectSet ( "Label_Obj_MACD", OBJPROP_YDISTANCE, 15); / / Y coordenar
//------------------------------------------------ --------------- 3 -MACD_M_0 = iMACD (NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0); / / 0
MACD_S_0 = iMACD (NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 0); / /
bar
MACD_M_1 = iMACD (NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1); / / 1
MACD_S_1 = iMACD (NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1); / /
bar
//------------------------------------------------ --------------- 4 -/ / Analisando a situao
if (MACD_M_1 = MACD_S_0) / / Passagem para cima
Sit = 0;
if (MACD_M_1> MACD_S_1 & & MACD_M_0 <= MACD_S_0) / / Passagem em baixa
Sit = 1;
if (MACD_M_1> MACD_S_1 & & MACD_M_0> MACD_S_0) / / Main acima sinal
Sit = 2;
if (MACD_M_1

bar
0
bar
1

No bloco 1.2 EA parmetros so definidos, em particular o elemento valores de Texto [] e Color [] so


fixados. Ainda mais se forem utilizadas para alterar propriedades objeto. No bloco 2.3 do objeto criado
e alguns valores de suas propriedades esto definidas. Vamos analisar este bloco em detalhes. De
acordo com este cdigo EA linha grfica de um objeto criado na janela, na qual a EA executado:
ObjectCreate ( "Label_Obj_MACD", OBJ_LABEL, 0, 0, 0); / / Criando obj.
"Label_Obj_MACD" valor denota que esse nome atribudo ao objeto (um nome atribudo a um objeto
por um programador na sua prpria vontade). OBJ_LABEL - o tipo de objeto identificador, que denota
que o objeto ser criado exatamente este tipo de (escolhidos da lista dos tipos possveis). O primeiro dos
prximos trs zeros denota que o objeto criado na janela principal (a janela principal do grfico onde
mostrado, no tem medo do ndice 0).
Os prximos dois zeros coordenadas para definir o objeto criado. De acordo com este coordenou o
objeto ser desenhado na janela indicada. Neste caso o criado OBJ_LABEL no usa tempo e preo
coordenadas. Observe que em OjectCreate () descrio s tempo e preo coordenadas so
especificadas. Alm disso, coordenadas do segundo e do terceiro pares tm valores padro,embora no
existam valores padro para o primeiro par de coordenadas. Significa que, embora OBJ_LABEL no

precisam de tempo e preo em todas as coordenadas, alguns valores devem ser especificados em
ObjectCreate () chamada de funo. Neste caso zeros so indicados, embora outros valores podem ser
escritos - afinal estes valores ser negligenciada durante a configurao das propriedades OBJ_LABEL.
Nos prximos trs linhas so alguns dos valores definidos para o objeto chamado anteriormente criou
Label_Obj_MACD:
ObjectSet ( "Label_Obj_MACD", OBJPROP_CORNER, 1); / / Referncia canto
ObjectSet ( "Label_Obj_MACD", OBJPROP_XDISTANCE, 10); / / X coordenar
ObjectSet ( "Label_Obj_MACD", OBJPROP_YDISTANCE, 15); / / Y coordenar
Referncia para o canto (OBJPROP_CORNER) 1 est definido, o que significa o canto superior direito da
janela principal definido anteriormente. Nas prximas duas linhas distncias do objeto para um canto
referncia so definidas em pixels: distncia horizontal (OBJPROP_XDISTANCE) 10 pixels ea distncia
vertical (OBJPROP_YDISTANCE) 15 pixels. Na fase da execuo deste programa objeto j est criada,
tem o seu nico nome definido e propriedades principais.
Para tornar o objeto mostrar um texto necessrio, em primeiro lugar, precisamos de calcular o que este
texto deve ser parecida.Para este efeito, em primeiro bloco 3.4 a posio das linhas MACD detectada
na corrente e anterior bares, em seguida, no bloco 4.5 Sit valor correspondente situao actual
calculada (ver tambm fig. 107 e callstohastic.mq4)
Na prxima linha objeto propriedades dependendo da situao atual esto definidos:
/ / Alterar propriedades objeto
ObjectSetText ( "Label_Obj_MACD", texto [Sit], 10, "Arial", Cor [Sit]);
Como resultado de ObjectSetText () execuo descrio um texto atribudo ao objeto chamado
Label_Obj_MACD - o valor da varivel string Texto [Sit]. Este valor ser diferente para diferentes
situaes, dependendo dos valores Sente-se varivel. Por exemplo, se a principal linha atravessa a um
sinal baixo, em bloco 4.5 Sente-se obtm o valor 1, como resultado do objeto grfico vai ter o texto
descrio contida no texto [1] o elemento matriz, ou seja, "Abertura de Venda ". Outros parmetros: 10,
"Arial" e cor [Sit] denotar tamanho da fonte, nome e cor para o texto descritivo.
Como resultado da execuo dos seguintes EA ir aparecer na janela EURUSD:

Fig. 137. Resultado da EA grafobjects.mq4 operao no momento em que o critrio para vender dispara.
Na fig. 137, h uma janela principal e MACD subwindow. Convm notar aqui que, para um normal
funcionamento EA presena deste indicador sobre o smbolo janela no necessria, porque a EA em
critrios comerciais so calculadas como resultado de uma funo tcnica indicador execuo que no
est relacionado com o indicador exibindo. Aqui apresentado o indicador visual s para a explicao de

um momento de trocas despoletar quando o critrio necessrio texto descrio do objeto grfico
mostrado. A EA ir operar no modo semelhante em todas as outras combinaes das mtuo posio do
indicador linhas cada vez mostrando uma descrio correspondente a uma situao.
Excluindo objetos grficos
Os peritos analisaram Advisor grafobjects.mq4 tem uma pequena desvantagem. Depois que a EA deixa
de operar, uma grfica objeto permanecer na janela do grfico (sua propriedades permanecer o
mesmo que no momento no da sua ltima mudana). Objetos grficos no so eliminados
automaticamente. No decurso da negociao, a partir de um certo momento em que a mensagem
"Abertura de Vender" no ser vlido. A fim de no desinformar uma grfica de usurio do objeto deve
ser eliminado.
Para apagar um objeto grfico (independentemente do seu mtodo de criao - programada ou manual)
basta selecion-lo e pressione a tecla Delete. No entanto, como para a programao, de notar que um
programa escrito corretamente devem "limpar" a janela quando seu funcionamento superior. Em
outras palavras, um programa deve conter um bloco onde todos os objetos grficos criados pelo
programa esto excludas.
ObjectDelete () Funo
bool ObjectDelete (string name)
eliminao de um objeto com o nome indicado. Se um objeto excludo com xito, a funo retorna
TRUE, caso contrrio - FALSO. Para obter as informaes sobre o erro ao chamar GetLastError ()
funcionar ..
Parmetros:

nome - nome de um objeto suprimido.

muito fcil usar ObjectDelete (): basta indicar o nome de um objeto a ser excludo.
Para corrigir a desvantagem de o exemplo anterior, vamos adicionar na EA grafobjects.mq4 a funo
especial deinit () contendo a funo para excluir objetos:
//------------------------------------------------ --------------- 7 -int deinit () / / Funo Especial deinit
(
ObjectDelete ( "Label_Obj_MACD"); / / Objeto supresso
retorno; / / Sair deinit ()
)
//------------------------------------------------ --------------- 8 -Agora, durante a execuo do objeto chamado EA Label_Obj_MACD sero deletados. Geralmente um
programa pode criar numerosos objetos. Cada uma delas pode ser suprimida, de acordo com o
algoritmo.

Modificando objetos grficos


Em alguns casos, necessria a mudana de posio um objeto em um grfico em uma janela do
programa caminho. Muitas vezes essa necessidade pode ocorrer por causa do surgimento de novos
bares. Por exemplo, em uma negociao critrios EA pode ser formada com base em um canal de
regresso linear, construda sobre uma barra de histrico de um determinado perodo (por exemplo,
ltimos 50 compassos). Se ns simplesmente chamar o objeto "canal de regresso linear" em uma

janela do grfico e, em seguida, no aceitamos qualquer coisa, ele permanecer no mesmo lugar onde
foi grfico posicionado e ele ser deslocado para a esquerda enquanto aparecem novos bares. Para
evitar que o objeto de deslocao deve ser redesenhado a cada novo bar. Para o efeito novas
coordenadas devem ser calculadas e passado para o objeto, de acordo com essas coordenadas do
objeto ser desenhado em um grfico viva.
Para descobrir o que tem propriedades um objeto grfico no atual momento, a seguinte funo deve ser
usada:
ObjectGet () Funo
ObjectGet duplo (string nome, int prop_id)
a funo retorna o valor do imvel objeto especificado. Para obter as informaes sobre o erro ao
chamar GetLastError () function.
parmetros:

Nome - Nome do objeto;


prop_id - imvel objeto identificador. Pode ser qualquer valor a partir da lista das propriedades
dos objetos.

Novas coordenadas so reportados a um objeto usando o ObjectMove () function.


ObjectMove () Funo
bool ObjectMove (string nome, int ponto, datetime time1, price1 duplo)
Alterando uma das coordenadas em um grfico. A funo retorna TRUE em caso de xito, caso contrrio
- FALSO. Para obter informaes adicionais ligue para o FetLast Erro () function. Numerao de um
objeto coordenadas comea a partir de 0.
Parmetros:

Nome - Nome do objeto;


ponto - coordenar ndice (0-2);
time1 - novo valor temporal;
price1 - preo novo valor.

Problema 33. Criar um programa (um Expert Advisor) apoiar o desenho de um canal
de regresso linear para os ltimos 50 bares.
O objeto grfico "regresso linear canal" usa dois tempos coordenadas. Preo coordenadas (se esses so
especificados no programa) so negligenciadas pelo cliente terminal durante a construo do objeto. O
canal de regresso linear calculada pelo cliente terminal baseado em dados histricos dos preos e,
portanto, no pode ser mostrado com a exceo de um grfico. por isso que a ausncia do objeto
obrigatrio de preos (do preo negligenciar coordenadas pelo terminal) objeto constante da prpria
propriedade. Th Expert Advisor (moveobjects.mq4) gerir a posio de um objeto grfico pode ter o
seguinte cdigo:
//------------------------------------------------ -------------------/ / Moveobjects.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.

//------------------------------------------------ -------------------extern int Len_Cn = 50; / / Canal comprimento (barras)


extern Col_Cn = cor laranja; / / Canal cor
//------------------------------------------------ --------------- 1 -int init () / / Especial funo init ()
(
Create (); / / Chamando user-def. func. de criao
retorno; / / Sair init ()
)
//------------------------------------------------ --------------- 2 -int start () / / Especial funo start ()
(
datetime T2; / / segunda vez coordenar
int erro; / / Cdigo de erro
//------------------------------------------------ --------------- 3 -T2 = ObjectGet ( "Obj_Reg_Ch", OBJPROP_TIME2); / / Solicitando t2 coord.
Erro = GetLastError (); / / Obtendo um cdigo de erro
if (Erro == 4202) / / Se nenhum objeto: (
(
Alerta ( "Regresso canal est a ser gerida",
"\ N Book_expert_82_2. Supresso proibidos.");
Create (); / / Chamando user-def. func. de criao
T2 = Tempo [0]; / / Valor atual de coordenar t2
)
//------------------------------------------------ --------------- 4 -if (T2! Tempo = [0]) / / Se objeto no est no seu lugar
(
ObjectMove ( "Obj_Reg_Ch", 0, Time [Len_Cn - 1], 0); / / Novo t1 coord.
ObjectMove ( "Obj_Reg_Ch", 1, Time [0], 0); / / Novo t2 coord.
WindowRedraw (); / / redesenhando a imagem
)
retorno; / / Sair start ()
)
//------------------------------------------------ --------------- 5 -int deinit () / / Funo Especial deinit ()
(
ObjectDelete ( "Obj_Reg_Ch"); / / Apagar o objeto
retorno; / / Sair deinit ()
)
//------------------------------------------------ --------------- 6 -Crie int () / / Usurio-funo definida ..
(/ / Criao de objeto ..
datetime T1 = Tempo [Len_Cn - 1]; / / Definir 1a vez coord.
datetime T2 = Tempo [0]; / / Definio 2o tempo coord.
ObjectCreate ( "Obj_Reg_Ch", OBJ_REGRESSION, 0, T1, 0, T2, 0); / / Criao
ObjectSet ( "Obj_Reg_Ch", OBJPROP_COLOR, Col_Cn); / / Cor
ObjectSet ( "Obj_Reg_Ch", OBJPROP_RAY, false); / / Ray
ObjectSet ( "Obj_Reg_Ch", OBJPROP_STYLE, STYLE_DASH); / / Estilo
ObjectSetText ( "Obj_Reg_Ch", "Criado pela EA moveobjects", 10);
WindowRedraw (); / / Imagem redesenhando
)
//------------------------------------------------ --------------- 7 -O moveobjects.mq4 EA algoritmo que implica que um objeto, uma vez apensa permanecer no ecr
durante todo o tempo de execuo do programa. Nesses casos, razovel utilizar uma funo definida
pelo usurio (neste caso, Cria (), bloco 6-7) para criar um objeto, a funo pode chamado a
partir do programa quando quiser, quando necessrio. Para chamar um objeto coordenadas so
necessrios dois tempos (T1 o de coordenar a borda esquerda do objeto, T2 - a da borda direita):
datetime T1 = Tempo [Len_Cn - 1]; / / Definir 1a vez coord.
datetime T2 = Tempo [0]; / / Definio 2o tempo coord.

Neste exemplo, o direito das fronteiras do objeto deve ser zero sobre a barra, por isso que o valor de
coordenar o segundo corresponde ao tempo de abertura da barra de zero. As coordenar esquerda
calculado em funo do nmero de bares estabelecidos por um usurio (varivel externa Len_Cn) e
definida como o tempo de abertura de um bar com o ndice correspondente. Por exemplo, se o canal
comprimento de 50 compassos, coordenar a esquerda ser igual ao tempo de abertura de um bar com
o ndice 49.
Nas prximas linhas do utilizador-definido Crie funo () OBJ_REGRESSION o objeto criado usando
ObjectCreate (), ento criadas as necessrias propriedades do objeto so criados pela ObjectSet ()
funo (cores predefinidas por um usurio em uma varivel externa, proibidos de chamar como um raio,
estilo da linha - pontilhada). Na linha:
ObjectSetText ( "Obj_Reg_Ch", "Criado pela EA moveobjects

", 10);

descrio um texto atribudo ao objeto. O que a diferencia da anterior OBJ_LABEL analisados, o texto
de descrio OBJ_REGRESSION no exibido. O texto descrio de objetos grficos podem ser
visualizados no objeto da guia Propriedades.Isto muito conveniente na aplicao prtica de
diferenciao entre objetos criados em um programa de maneira aqueles anexado manualmente:

Fig. 138. Comum propriedades do objeto grfico "regresso linear canal" criado pela
EA moveobjects.mq4.
Aqui est uma funo mais utilizada para a redefinio das actuais grfico:
WindowRedraw (); / / Imagem redesenhando
WindowRedraw () Funo
void WindowRedraw ()
A funo fora reformula o atual quadro. Geralmente ele usado depois de objeto propriedades sejam
alteradas.
Normalmente, os objetos grficos so apresentados pelo cliente terminal na sequncia da recepo de
novas carrapatos. Esta a razo pela qual, se no utilizarmos WindowRedraw (), as mudanas nas
propriedades do objeto tornar-se visvel para o usurio, na prxima carrapato, ou seja, a exibio um
carrapato semper tarde. O uso de WindowRedraw () permite-lhe fora redesenhar todos os objetos
necessrios em um momento, por exemplo, imediatamente aps as propriedades foram objeto
alteradas. Num caso geral, se as propriedades de vrios objectos so alteradas no programa,
suficiente para utilizar a funo WindowRedraw () apenas uma vez, aps a ltima das propriedades dos
objetos que foram alteradas.

O usurio-funo definida a partir da primeira chamada funo especial init (). No momento da
aposio da EA para a janela do smbolo, a execuo de init () ir iniciar, o que resulta em que o objeto
grfico Linear Regression Channel ser exibida na janela do smbolo.
Duas situaes possveis so considerados em funo do incio (): (1) o objeto tenha sido eliminada pelo
utilizador ocasional (blocos 3-4) e (2), necessrio deslocar o objeto para a direita quando uma nova
barra zero formado (blocos 4-5). Para detectar se o objeto grfico est disponvel no momento actual,
suficiente apenas para solicitar o valor de uma das suas coordenadas. Se o objeto existe, a funo
ObjectGet () ir retornar um certo valor que corresponde com o solicitado e coordenar a funo
GetLastError () ir retornar valor zero (ou seja, no ocorreu nenhum erro ao solicitar o Coordenar). No
entanto, se no houver um objeto do nome indicado na janela do smbolo, a funo GetLastError () ir
retornar o cdigo de erro 4202, ou seja, nenhum objeto disponvel:
T2 = ObjectGet ( "Obj_Reg_Ch", OBJPROP_TIME2); / / Solicitando t2 coord.
Erro = GetLastError (); / / Obtendo um cdigo de erro
Se o erro anlise revelou que no eram objeto desse nome, isso significa que o programa deve cri-lo,
depois de ter notificado o usurio sobre aes inadmissveis (o programa no exclui objetos, isso
significa que o objeto tenha sido excludo pelo usurio) .Esta a razo pela qual, aps ter exibido a
mensagem, o programa solicita ao usurio-definidas anteriormente consideradas Crie funo (), o que
resulta em uma nova criao do objeto na janela do smbolo.
At ao momento da execuo do prximo bloco (4-5), o objeto grfico j foi criada. Para decidir se ela
deve ser movida, voc deve saber a posio do objeto no momento atual. Para este efeito, basta
analisar o valor obtido anteriormente de coordenar a primeira do objeto. Se este valor no coincide com
o tempo de abertura zero bar, para atribuir novas coordenadas para o objeto.
As coordenadas so alterados utilizando a funo ObjectMove ():
ObjectMove ( "Obj_Reg_Ch", 0, Time [Len_Cn - 1], 0); / / Novo t1 coord.
ObjectMove ( "Obj_Reg_Ch", 1, Time [0], 0); / / Novo t1 coord.
Aqui, pela primeira coordenar (coordenar 0) do objeto chamado Obj_Reg_Ch, o valor do Tempo
[Len_Cn-1], sero fixados, que, para coordenar o segundo (coordenar 1)-Time [0]. Os ltimos
parmetros entre aqueles transferidos Para a funo ObjectMove () especificado o parmetro 0. Este
o de coordenar os preos que, segundo a descrio da funo, devem ser transferidos, mas, neste caso,
ser ignorado pelo cliente terminal. Como resultado da execuo destas linhas, consideradas as
propriedades do objeto grfico ser alterado. Como resultado da prxima execuo da funo
WindowRedraw (), o objeto grfico ser redesenhado pela fora o cliente terminal - agora, de acordo
com os novos valores das coordenadas.
Assim, na execuo da funo start (), o objeto grfico Linear Regression Channel ser redesenhado
pelo cliente terminal cada vez quando uma nova barra de formulrios, nas suas primeiras carrapato (ver
fig. 139). Aps a execuo da EA j terminou, o determinado objeto grfico ser eliminada do smbolo
janela durante a execuo da funo especial deinit () (ie, o programa ir "varrer para fora" seu trabalho
institudos aps o trabalho tenha sido concludo).

Fig. 139. Vendo da regresso linear no Canal da execuo da EA moveobjects.mq4.


Em um caso geral, voc pode criar e excluir objetos grficos, de acordo com algumas condies
calculado no programa. Voc pode exibir o suporte / resistncia linhas (OBJ_TREND), marca o momento
de se aproximar dos eventos importantes com linhas verticais (OBJ_VLINE), indicam as intersees de
vrias linhas ou a previso dos preos movimentos texto utilizando objetos (OBJ_LABEL e OBJ_TEXT),
etc
Deve notar-se separadamente, que, em alguns casos, no h necessidade de usar objetos grficos. Por
exemplo, se voc deseja exibir na tela uma simples uma grande variedade de imagens do tipo (por
exemplo, as setas), voc pode usar linhas para este indicador, os seus estilos, em conjunto com o
correspondente curso. Esta abordagem vai te livra da necessidade de acompanhar muitos coordenadas
de objetos no programa, ele vai tambm impedir que voc ocasional supresso de uma imagem (os
sinais que exibem linhas indicador pode ser eliminado nem seleccionada nenhuma).
Funes para Trabalhar com os objectos grficos
Funo

Sntese Info

ObjectCreate

Criando um objeto com o nome predefinido, escreva inicial e coordena o


indicado no grfico subwindow. nmero de coordenadas pode ser objeto
de 1 a 3, dependendo do tipo de objeto.Em caso de sucesso a funo
retorna VERDADEIRO, FALSO caso contrrio.

ObjectDelete

Excluindo um objeto com o nome indicado. Em caso de sucesso a funo


retorna VERDADEIRO, FALSO caso contrrio.

ObjectDescription

A funo retorna o objeto descrio. Ela retorna para objetos do


OBJ_TEXT e OBJ_LABEL tipos de texto exibido na esses objetos.

ObjectFind

A funo procura o objeto do nome indicado. A funo retorna o ndice


da janela, ao qual pertence o objeto pesquisado. Em caso de falha, a
funo retorna -1.

ObjectGet

A funo retorna o valor do imvel dado do objeto.

ObjectGetFiboDescription A funo retorna a descrio do objeto Fibo nvel. O montante dos nveis
depende do tipo do objeto que pertence ao grupo de Fibo objetos. O
montante mximo dos nveis de 32.
ObjectGetShiftByValue

As funes calcula e retorna o nmero bar (a mudana em relao ao


atual bar) para a determinado preo. O bar nmero calculado

utilizando uma equao linear para a primeira e segunda coordenadas.


utilizado para as linhas das tendncias e objectos semelhantes.
ObjectGetValueByShift

As funes calcula e retorna o valor de um determinado preo bar (a


mudana em relao ao atual bar). O preo valor calculado utilizando
uma equao linear para a primeira e segunda coordenadas. utilizado
para as linhas das tendncias e objectos semelhantes.

ObjectMove

Mudar um objeto de coordenadas em um grfico. Objects can have from


one to three anchoring points according to the object type. In case of
success, the function returns TRUE, otherwise FALSE.

ObjectName

The function returns the object name according to its order number in
the list of objects.

ObjectsDeleteAll

Deleting all object of the indicated type in the indicated chart


subwindow. The function returns the number of deleted objects.

ObjectSet

Changing properties of an indicated object. In case of success the


function returns TRUE, otherwise FALSE.

ObjectSetFiboDescription The function assigns a new value to Fibonacci level. Number of levels
depends on Fibonacci object type. Maximal number of levels is 32.
ObjectSetText

Changing object description. For objects OBJ_TEXT and OBJ_LABEL this


description is displayed on a chart as a text line. In case of success the
function returns TRUE, otherwise FALSE.

ObjectsTotal

Returns the total number of objects of the indicated type on a chart.

ObjectType

The function returns the type of an indicated object.

For the detailed description of these and other functions, please refer
to Documentation at MQL4.community , MetaQuotes Software Corp. website or to "Help" section in
MetaEditor.
Operaes com Grficos
No seu trabalho prtico, normalmente um comerciante abre em uma janela do smbolo vrias janelas
que exibem indicadores.No existem limitaes colocao indicadores, que podem ser anexados em
qualquer seqncia. O montante de subwindos um smbolo na janela no limitada quer. Subwindow
Cada um tem o seu nmero. A janela principal contm uma tabela dos preos est permanentemente
disponvel, sendo o seu nmero 0. Cada indicador subwindow tem um nmero, tambm. As janelas
esto numerados em uma seqncia simples - eles so numerados pela sua exibio na janela do
smbolo, de cima para baixo: o indicador subwindow mais prxima janela principal tem o nmero 1, o
prximo tem um menor nmero 2, o prximo tem um nmero 3 , Etc

Fig. 140. Subwindow localizaes na janela do smbolo.


A quantidade de janelas pode ser facilmente calculada utilizando a seguinte funo:
int WindowsTotal ()
A funo retorna o valor do indicador janelas situadas no grfico, incluindo a principal janela do
grfico. O maior nmero (dos mais baixos subwindow) semper 1 inferior ao montante total das janelas
(incluindo a janela principal numerados como 0) na janela do smbolo. Se, na situao mostrada na
Fig. 140, apelamos para a execuo do WindowsTotal funo () a partir de qualquer aplicao, o valor
devolvido ser igual a 3, enquanto o maior nmero (dos mais baixos subwindow) 2.
A numerao sequencial descrito acima mantido, se um novo indicador subwindow adicionado a um
ou subwindow existente excludo do smbolo janela. Se voc adicionar um novo subwindow, ser
exibido abaixo todas as outras janelas e seu nmero 1 mais do que da ltima janela acima dela. Se
voc excluir uma subwindow a partir da janela do smbolo, todas as janelas abaixo dela, ser
automaticamente renumeradas - o nmero de cada um deles ser diminudo em 1.
Em MQL4, possvel criar objetos grficos (e mudar suas propriedades) em qualquer uma das janelas
existentes. Para este efeito, em funo da ObjectCreate () o parmetro 'janela' est fornecido, segundo
a qual um objeto criado na subwindow dado o smbolo da janela. O nmero atual do subwindow pode
ser calculado utilizando a seguinte funo:
int WindowFind (string name)
A funo retorna o nmero do grfico subwindow que contm o indicador denominado como nome,
se esta tiver sido encontrado. Caso contrrio, ele retorna -1. A funo tambm ir retornar -1, se um
indicador pesquisas personalizadas para si prprio durante a inicializao init ().
Parmetros:
nome - nome abreviado do indicador.
A quantidade de janelas em uma janela do smbolo pode mudar a qualquer momento, se o utilizador
elimina um indicador. Esta a razo pela qual o algoritmo de uma aplicao que suporta monitoramento
de objetos grficos deve monitorar continuamente o nmero de janelas, nas quais os indicadores so
exibidos.

Problema 34. Usando objetos grficos, exibir mensagens informando sobre os dados
recebidos a partir de dois indicadores. Se o indicador correspondente anexado ao
smbolo janela de exibio grfica do objeto na janela do indicador. Caso contrrio,
exibi-la na janela principal.
Para resolver o problema, vamos escolher indicadores RSI e Momentum. O algoritmo geral de
construo de um Expert Advisor se resume a isto. Na funo init (), voc pode especificar textos a
serem exibidos na tela de acordo com o indicador leituras, ou seja, fazer os clculos para ser executado
apenas uma vez no programa. No incio da funo (), voc deve calcular o indicador leituras, detectar a
necessria disponibilidade de janelas e seus nmeros e, em seguida, de acordo com a situao, exibir
uma mensagem em um ou outro ou outra subwindow. Na execuo da funo deinit (), necessrio
eliminar todos os objetos grficos criados durante o trabalho de seu programa. Abaixo est o chamado
EA charts.mq4 que controla objetos grficos nas janelas de um smbolo janela.
/ / --------------- --------------------------------- ---------------------------------/ / Charts.mq4
/ / O cdigo deve ser usado apenas para fins educacionais
.
//--------------- --------------- ------------------ ----------------------------- 1 -Win_Mom_old int = 0, / / Old nmero de subwindow Momento.
Win_RSI_old = 0; / / Old nmero de subwindow LER
color Color [5]; / / Declarao da cor do array
Texto string [5]; / / Declarao da string array
//------------------------------ --------------- --- ----------------------------- 2 -int init () / / Especial funo init ()
(
Win_RSI_old = 0; / / Tcnica momento
Win_Mom_old = 0; / / Tcnica momento
Texto [0]
LER
Texto [1]
Texto [2]
Texto [3]
Momentum
Texto [4]
Momentum
Cor [0] =
Color [1]
Cor [2] =
Cor [3] =
Color [4]

= "LER (14) inferior a 30. Comprar"; / / Textos para situaes


= "LER (14) superior a 70. Sell"; / / Textos para situaes LER
= "LER (14) est entre 30 e 70"; / / Textos para situaes LER
= "Momentum (14) est em crescimento"; / / Textos para situaes
= "Momentum (14) est afundando"; / / Textos para situaes
DeepSkyBlue;
= LightPink;
laranja; / /
Cor [0]; / /
= Cor [1]; /

/ / Objeto de cor ..
/ / .. situaes diferentes ..
.. do indicador RSI
As mesmas cores de Momentum
/ As mesmas cores de Momentum

Create_RSI (0); / / Criao do primeiro objeto


Create_Mom (0); / / Criao do segundo objeto
Main (); / / Chamada para user-defined funo
retorno; / / Sair init ()
)
//--------------------------------------------- --- ------------ ----------------- 3 -int start () / / Especial funo 'iniciar'
(
Main (); / / Chamar a ateno para o usurio-funo definida
retorno; / / Sair start ()
)

//------------------------------------------------ ------------ -------------- --- 4 -int deinit () / / Funo Especial deinit ()


(
ObjectDelete ( "Obj_RSI"); / / Supresso do objeto
ObjectDelete ( "Obj_Mom"); / / Supresso do objeto
retorno; / / Sair deinit ()
)
/ / - --------------- -------------------------------- ----------------------------- 5 -int Main () / / Usurio-funo definida
(
int / / Integer variveis
Win_RSI_new = 0, / / Novo nmero da subwindow LER
Win_Mom_new = 0, / / Novo nmero da subwindow Momento.
Ind_RSI, Ind_Mom; / / ndices para situaes
Duplo / / Real variveis
RSI, / / Valor do RSI na barra 0
Mom_0, Mom_1; / / Valor do Mom. em barras 0 e 1
/ / - --------------- -------------------------------- ----------------------------- 6 -RSI = iRSI (NULL, 0, 14, PRICE_CLOSE, 0); / / RSI (14) na barra de zero
Ind_RSI = 2; / / RSI entre os nveis 30 e 70
if (RSI <30) Ind_RSI = 0; / / RSI, na parte inferior. Para comprar
if (LER> 70) Ind_RSI = 1; / / RSI no topo. Para vender
//---------------- --------------- ----------------- ----------------------------- 7 -Win_RSI_new = WindowFind ( "LER (14)"); / / Janela nmero de indicador RSI
if (Win_RSI_new ==- 1) Win_RSI_new = 0; / / Se no houver ind. e, em
seguida, a janela principal
if (Win_RSI_new! = Win_RSI_old) / / Eliminado ou colocao ..
(/ / .. Janela do indicador RSI
ObjectDelete ( "Obj_RSI"); / / Supresso do objeto
Create_RSI (Win_RSI_new); / / Criar um objeto na janela desejada
Win_RSI_old = Win_RSI_new; / / Lembre-se desta janela
) / / Altere a descrio textual:
ObjectSetText ( "Obj_RSI", texto [Ind_RSI], 10, "Arial", Cor [Ind_RSI]);
//------------------------------- --------------- -- ----------------------------- 8 -Mom_0 = iMomentum (NULL, 0, 14, PRICE_CLOSE, 0); / / Valor de zero bar
Mom_1 = iMomentum (NULL, 0, 14, PRICE_CLOSE, 1); / / Valor anterior sobre a
barra
if (Mom_0> = Mom_1) Ind_Mom = 3; / / Indicador linha sobe
if (Mom_0 <Mom_1) Ind_Mom = 4; / / Indicador linha cai
//---------------------------------------------- -- ------------- ---------------- 9 -Win_Mom_new = WindowFind ( "Momentum (14)"); / / Janela do indicador nmero
Momen
if (Win_Mom_new ==- 1) Win_Mom_new = 0; / / Se no houver ind. e, em
seguida, a janela principal
if (Win_Mom_new! = Win_Mom_old) / / Eliminado ou colocao ..
(/ / .. a janela do indicador Momentum
ObjectDelete ( "Obj_Mom"); / / Supresso do objeto
Create_Mom (Win_Mom_new); / / Criar um objeto na janela desejada
Win_Mom_old = Win_Mom_new; / / Lembre-se desta janela
) / / Altere a descrio textual:
ObjectSetText ( "Obj_Mom", texto [Ind_Mom], 10, "Arial", Cor [Ind_Mom]);
//------------------------------------------------ --------------- ------------ - 10 -WindowRedraw (); / / redesenhando a imagem
retorno; / / Sair do usurio-funo definida
)

/ / - --------------- -------------------------------- ---------------------------- 11 -int Create_RSI (int Win) / / Usurio-funo definida


(/ / .. De criao de um objeto
ObjectCreate ( "Obj_RSI", OBJ_LABEL, Vitria, 0, 0); / / Criao de um
objeto
ObjectSet ( "Obj_RSI", OBJPROP_CORNER, 0); / / Ancoragem de um ngulo
ObjectSet ( "Obj_RSI", OBJPROP_XDISTANCE, 3); / / Coordenada X
if (Win == 0)
ObjectSet ( "Obj_RSI", OBJPROP_YDISTANCE, 20); / / Coordenada Y
diferente
ObjectSet ( "Obj_RSI", OBJPROP_YDISTANCE, 15); / / Coordenada Y
retorno; / / Sair do usurio-funo definida
)
//---------------- --------------- ----------------- ---------------------------- 12 -int Create_Mom (int Win) / / Usurio-funo definida
(/ / Criando um objeto ..
ObjectCreate ( "Obj_Mom", OBJ_LABEL, Vitria, 0, 0); / / Criao de um
objeto
ObjectSet ( "Obj_Mom", OBJPROP_CORNER, 0); / / Ancoragem de um ngulo
ObjectSet ( "Obj_Mom", OBJPROP_XDISTANCE, 3); / / Coordenada X
if (Win == 0)
ObjectSet ( "Obj_Mom", OBJPROP_YDISTANCE, 5); / / Coordenada Y
diferente
ObjectSet ( "Obj_Mom", OBJPROP_YDISTANCE, 15); / / Coordenada Y
retorno; / / Sair do usurio-funo definida
)
//------------------------------- --------------- -- ---------------------------- 13 -Antes de analisar o cdigo acima, temos de explicar as particularidades da operao do programa. Um
objeto grfico, uma vez criada (neste caso, uma exibindo um texto) suposto estar presente na tela de
forma contnua. Sua descrio textual presumir que caracterizam a situao. O contedo da descrio
textual deve ser alterado na execuo da funo start (), em todos os carrapatos. Ao mesmo tempo, ao
alternar entre os prazos para a janela, para o qual est anexado AE, o programa passa atravs das
seguintes fases: deinit (), init (), (a aguardar um carrapato), e iniciar (). Se o objeto criado durante a
primeira hora do incio da execuo (), ento, a cada momento em que a mudana para um outro
calendrio, um determinado perodo de tempo ir caducar antes de aparecer o objeto, sendo o perodo
de tempo igual ao de aguardar a prxima carrapato. Isto muito incmodo, sobretudo, quando muitas
vezes so comutados entre os calendrios.
Em um programa construdo adequadamente, a necessria mensagens so exibidas na tela, no
momento de fixar a janela do programa para o smbolo ou no momento da comutao temporal (ou
seja, antes de um novo carrapato rendimentos). Para este efeito, em regra, necessrio realizar todas
as aes a serem realizadas em cada carrapato, no lanamento da funo especial iniciar () na fase da
execuo da funo especial init (). A fim de no repetir o mesmo cdigo de programa diferentes
funes especiais, o cdigo pode ser organizado como uma funo separada. Para esse efeito, a EA
contm o user-defined funo principal (). Ela chamada para ser executado logo na fase de
inicializao (blocos 2-3) e em cada carrapato durante os trabalhos futuros da EA (blocos 3-4).
No programa (bloco 11-13), existem mais duas funes definidas por usurios - Create_RSI () e
Create_Mom () destinados criao e alterao das propriedades do objeto. Na execuo da funo init
(), o necessrio objetos so criados usando essas funes. A chamada para a funo principal () resulta
em propriedades necessrias para conferir os objetos (os objetos desejados com a descrio da cor
desejada so exibidos na janela desejada).
Vamos considerar a funo principal () (bloco 5-11) em mais detalhes. No bloco 6.7, as leituras do
indicador RSI so calculados.Dependendo se o fim da linha indicador superior a 70, abaixo de 30, ou

dentro do intervalo entre esses ndices, um ou outro valor ser atribudo varivel Ind_RSI. Em seguida,
esse valor usado como um ndice de arrays Color [] e texto [] (em bloco 7-8) para alterar as
propriedades do objeto grfico do nome "Obj_RSI".
Bloco 7-8. O nmero de LER janela calculada na linha:
Win_RSI_new = WindowFind ( "LER (14)"); / / Janela nmero de indicador RSI
O valor da seqncia LER (14) usado como parmetro os transferidos. Este o nome abreviado do
indicador, o nmero dos que devem ser detectados. Neste caso, toda a seqncia de caracteres na linha
determinada, incluindo parnteses e algarismos, compe o nome. Deve-se notar que, no caso geral,
pode haver vrios indicadores do mesmo tipo na janela do smbolo, por exemplo, LER (14), LER (21) e
LER (34). Cada um destes indicadores subwindow exibindo tem o seu prprio nmero. Esta tcnica por
isso que os indicadores so desenvolvidos de forma a que cada um deles faz o seu nome abreviado de
acordo com os valores predefinidos de parmetros ajustveis. O nome abreviado de cada indicador
tcnico, coincide com o mostrado no canto superior esquerdo da sua subwindow (o nome abreviado de
um indicador podem ser personalizadas criadas pelo programador usando a funo IndicatorShortName
()).
Se o indicador est pesquisada no colocou na janela do smbolo, a varivel Win_RSI_new (o nmero do
subwindow, na qual este objecto dever ser exibida no momento atual) ter o valor de -1, ou seja, noexistente janela. Neste caso, o programa implica a exibio grfica do objeto na janela do grfico
principal, cujo nmero semper 0:
if (Win_RSI_new == - 1) Win_RSI_new = 0; / / Se no houver ind. e, em
seguida, a janela principal
Durante as suas operaes, o usurio pode colocar um indicador em falta ou apagar uma existente. A
fim de informar-se sobre quais as aces que devem ser realizados, o programa usa variveis globais
Win_RSI_old e Win_Mom_old. O valor de cada varivel o nmero do subwindow, em que o objeto
tenha sido previamente criado. Se os valores das variveis Win_RSI_new e Win_RSI_old no
coincidirem, isso significa que o indicador janela ou adicionado (que no existia antes) ou suprimido
(ele estava disponvel na anterior carrapato). Em ambos os casos, os criados anteriormente objeto deve
ser suprimido, e um novo, deve ser criada na janela desejada:
ObjectDelete ( "Obj_RSI"); / / Supresso do objeto
Create_RSI (Win_RSI_new); / / Criar um objeto na janela desejada
Depois que o objeto tenha sido criado na janela numerados como Win_RSI_new, o valor igual ao
nmero de esta janela atribudo varivel Win_RSI_old, ou seja, o programa lembra-se do nmero da
janela, na qual o objeto grfico foi criado:
Win_RSI_old = Win_RSI_new; / / Lembre-se desta janela
Se os valores das variveis Win_RSI_new e Win_RSI_old coincidem, isso significa que suficiente para
atribuir uma descrio textual para o objeto (que agora colocada na janela do necessrio). Deve
tambm ser feito, no caso de se criar um novo objeto:
ObjectSetText ( "Obj_RSI", texto [Ind_RSI], 10, "Arial", Cor [Ind_RSI]);
Clculos similares so feitas para os outros subwindow, indicador de que a Momentum (blocos de 8 a
10). Ao final da funo principal (), todos os objetos grficos disponveis so redesenhadas como um
resultado da execuo do WindowRedraw ().
fcil ver que o programado controle sobre objetos grficos em janelas implica a utilizao de variveis
globais (voc tambm pode usar 'estticos'). Nesses casos, quando codifica um programa, voc deve

pagar uma ateno especial aos valores que podem ser tomadas pelas variveis globais em situaes
diferentes e que tudo isso poder resultar polegadas No programa acima considerados, variveis globais
so zeroized na funo init () :
Win_RSI_old = 0; / / Tcnica momento
Win_Mom_old = 0; / / Tcnica momento
Estas linhas esto includas no programa, devido ao fato de que perdem os seus valores variveis
globais, apenas se o usurio tiver sido interrompido a execuo do programa aplicativo na janela do
smbolo. No entanto, se o usurio tiver ajustado ou variveis externas ao calendrio comutada, o
programa sofre deinitialization ea conseqente inicializao, os valores das variveis globais sejam
salvos.
Vamos considerar as operaes do programa que no contm essas linhas. Suponha, ambos os
indicadores, com o subwindow nmeros 1 e 2, respectivamente, foram colocadas na janela, smbolo do
momento em que o usurio muda o calendrio. No exemplo considerado, quando os deinitializing
programa, os objetos grficos so eliminados. Na execuo da funo especial init (), os objetos so
criados na janela do zero. Em seguida, na execuo da funo principal (), em blocos 7.8 e 9.10, o
programa compara o nmero obtido da janela, na qual os objetos devem ser colocados, bem como o
nmero da janela, na qual o objetos estavam no anterior carrapato. Na verdade, o objeto j tenha sido
colocado na janela do zero, mas os valores das variveis globais vo dizer para os outros resultado: o
seu nmero ser 1 e 2. Como resultado, os objectos grficos permanecer na janela principal, at que o
usurio apaga reattaches e os indicadores correspondentes. Tal como para prevenir estes
desenvolvimentos indesejveis, o programa implica nulling das variveis globais na execuo da funo
init (). Desta forma, os valores dessas variveis so feitos corresponder-se com a situao.
Como resultado da execuo da EA charts.mq4, as seguintes combinaes de janelas e objetos grficos
mostrados podem aparecer:

Fig. 141. Exibindo objetos grficos nas janelas de um smbolo janela.


Se existirem indicadores tanto na janela do smbolo, o correspondente objetos grficos sero mostrados
em suas janelas. Se no houver um destes indicadores colocado e, em seguida, ambos os objetos
sero criados pelo programa na janela principal.Adicionando ou supresso de qualquer indicador, o
nome das quais processado no programa, ir resultar na deslocao do objeto grfico correspondente
em necessrias janela. Adio ou excluso de outros indicadores a partir da janela do smbolo no ir
implicar quaisquer consequncias.

Deve notar-se separadamente, que a alternativa de excluir um objeto pela grfica do usurio no
considerado neste programa.Um programa utilizado na sua prtica comercial deve conter a anlise dessa
situao, com a posterior restaurao do objeto (veja a soluo do problema 33).

Utilizado em Operaes com funes Grficos


Funo

Sntese Info

HideTestIndicators

A funo coloca uma bandeira de esconder os indicadores chamado pelo


Expert Advisor. Ao abrir o grfico aps anlise, os indicadores marcados
com a bandeira escondendo no ser mostrado no ensaio grfico. Antes
de cada chamada, o indicador marcado com a bandeira escondendo
atualmente definido (apenas os indicadores que so chamados
directamente a partir da EA em ensaio pode ser exibido no teste grfico).

Perodo

Ela devolve o valor do montante do perodo minutos para o atual quadro.

RefreshRates

Atualizando dados da predefinidos timeseries variveis e matrizes. Esta


funo utilizada, quando um EA ou um script clculo foi durante muito
tempo e precisa atualizar dados. Retorna TRUE, se a actualizao tenha
xito. Caso contrrio, retorna FALSE. Os dados podem permanecer
desatualizados apenas se eles correspondem com o estado atual do
cliente terminal.

Smbolo

Ele retorna uma linha de texto com o nome do atual smbolo.

WindowBarsPerChart

A funo retorna a quantidade de bares montagem na janela do grfico


atual.

WindowExpertName

Ela retorna o nome da execuo EA, script, personalizado ou indicador de


biblioteca, dependendo da MQL4 programa, a partir da qual esta funo
tenha sido chamado.

WindowFind

Ele retorna o nmero do grfico subwindow que contm o indicador com


o nome indicado 'nome', se tiver sido encontrado. Caso contrrio, ele
retorna -1. WindowFind () retorna -1, se o indicador est pesquisando
personalizado para si prprio durante a inicializao init ().

WindowFirstVisibleBar

A funo retorna o nmero da primeira barra visvel na janela da tabela


atual. Voc deve considerar que o preo bares esto numerados em uma
ordem invertida, a partir da ltima para a primeira. O atual bar, que o
ltimo no preo matriz, tem ndice 0. O bar tem mais antigo ndice Barras1. Se o nmero da primeira barra visvel 2 ou mais menos do que a
quantidade de barras visvel no grfico, isto significa que a janela do
grfico no est completo e h um espao para a direita.

WindowHandle

Ela retorna a janela para lidar com a janela que contm o dado grfico.
Se nenhum smbolo grfico com o calendrio aberto e, no momento da
chamada de funo, ele retorna 0.

WindowIsVisible

Retorna TRUE, se o grfico visvel subwindow. Caso contrrio, retorna


FALSE. O grfico subwindow chan estar escondido devido s propriedades
do indicador visibilidade anexados a ela.

WindowOnDropped

Ela retorna o ndice da janela, na qual a EA, um script ou um costume


indicador foi descontinuado.Este valor ser verdade, s se os EAs,

indicadores e scripts personalizados so anexados usando uma rato (a


tecnologia de "arrastar e largar '). Para os indicadores personalizados
sendo inicializado (chamada a partir da funo init ()), este ndice no
definido. O ndice devolvido o nmero da janela (0 a principal janela
do grfico, indicador janelas so numerados comeando por 1), em que o
indicador est trabalhando personalizado. Durante a inicializao, um
costume indicador pode criar o seu ganha nova subwindow, e seu
nmero ser diferente do da janela, na qual o indicador foi realmente
caiu.
WindowPriceMax

Ela devolve o valor mximo da escala vertical do dado subwindow da


actual tabela (0 a principal janela do grfico, indicador janelas so
numerados comeando por 1). Subwindow Se o ndice no for
especificado, o valor mximo da escala dos preos dos principais Grficos
janela ser devolvido.

WindowPriceMin

Ela mostra o valor mnimo da escala vertical do dado subwindow da


actual tabela (0 a principal janela do grfico, indicador janelas so
numerados comeando por 1). Subwindow Se o ndice no for
especificado, o valor mnimo da escala dos preos dos principais Grficos
janela ser devolvido.

WindowPriceOnDropped Ela devolve o valor de preo em um grfico ponto, em que um EA ou um


script ter sido descontinuado. O valor ser verdade, s se a EA ou o script
foram movidas usando uma rato (a tecnologia de "arrastar e largar ')
. Este valor no est definido para indicadores personalizados.
WindowRedraw

Ela reformula o atual grfico compulsivamente. A funo normalmente


utilizada aps o objeto propriedades foram alteradas.

WindowScreenShot

Ele salva a exibio do actual grfico em um arquivo GIF. Caso no o faa


uma captura de tela, ele retorna FALSE.

WindowTimeOnDropped A funo retorna um valor com o tempo grfico ponto, em que um EA ou


um script ter sido descontinuado. O valor ser verdade, s se a EA ou o
script foram movidas usando uma rato (a tecnologia de "arrastar e largar '
). Este valor no est definido para indicadores personalizados.
WindowsTotal

A funo retorna a quantidade de janelas do indicador no grfico,


incluindo a principal janela do grfico.

WindowXOnDropped

Ela devolve o valor de X em pixels para coordenar o aspecto grfico da


janela do cliente na rea, onde um EA ou um script foram
abandonadas. O valor ser verdade, s se a EA ou o script foram movidas
usando uma rato (a tecnologia de "arrastar e largar ').

WindowYOnDropped

Ela devolve o valor de Y em pixels para coordenar o aspecto grfico da


janela do cliente na rea, onde um EA ou um script foram
abandonadas. O valor ser verdade, s se a EA ou o script foram movidas
usando uma rato (a tecnologia de "arrastar e largar ').

Para a descrio detalhada destas e de outras funes, favor consultar


a documentao em MQL4.community, MetaQuotes Software Corp site ou para a "Ajuda" na seo
MetaEditor.
Funes String

O mais comum com a seqncia funcionamento valores, alm (concatenao), foi discutido
na Operaes e Expresses(Problema 3) seo. Em alguns casos, h necessidade de realizar outros
clculos relacionados com a corda valores. MQL4 tem um nmero de seqncia funes para trabalhar
com os valores do tipo string. Vamos considerar o uso de alguns deles atravs do exemplo a seguir.
Problema 35. Cor dos ltimos 100 bares do castial grfico da seguinte forma: preto
castiais em vermelho, branco castiais em azul.
Um candelabro pode ser colorido usando duas linhas: uma linha fina deve sobrepor um candelabro de
modo que o mesmo abrange todas as sombras, enquanto uma espessa linha dever preencher um
castial corpo. Neste caso, no podemos usar as linhas de um costume indicador, pois as linhas
indicadas deve ser vertical, ou seja, construda usando duas coordenadas (coordenadas com o mesmo
tempo), enquanto indicador arrays nos permitem armazenar apenas um valor fixado em correspondncia
com cada compasso. Ento, surge a soluo do problema exibindo uma srie de single-tipo OBJ_TREND
objetos que diferem em suas coordenadas e estilo da linha ea cor (ver grficos Objects), em um grfico
dos preos.
Neste caso, a EA utilizado como um programa aplicativo, mas, em geral, o algoritmo pode ser
implementado em um indicador personalizado. Como um todo, o algoritmo claro. O plano deve ser
colorido pela primeira vez, logo que este est ligado ao smbolo janela (durante a execuo do init ()). O
programa deve monitorar possveis alteraes na localizao de objetos grficos (usurio pode mover ou
apagar acidentalmente um deles), com todos os carrapatos prximos, e restaur-los, se
necessrio. Todos os objetos criados pelo programa deve ser eliminado, logo que termine o programa
operacional (deinit ()).
Um utilizador pode criar outros objetos em uma janela enquanto smbolo da EA est a trabalhar, por
exemplo, colocar o canal de desvio-padro, Fibo nveis, linhas de apoio, etc Ento, o algoritmo que nos
permite distinguir user-criado programa e-criada objetos devem ser implementadas no programa. Isto
particularmente importante quando se encerra o programa: necessrio apenas remover o programa
criou-objetos, enquanto os objetos criados por usurios devem permanecer inalterados. Cada objeto
grfico tem as suas prprias propriedades que geralmente podem coincidir. A nica caracterstica de
identificar qualquer objeto seu nico nome (o uso dos mesmos nomes proibida).
recomendado para introduzir a informao til no nome do objeto quando escrevo isso, ento ser
possvel detectar a localizao e as propriedades do objeto. Por exemplo, um objeto nome pode conter
um prefixo que diferencia um programa-objeto criado a partir de outros. Neste caso, "Paint_". Alm
disso, necessrio diferenciar o "utilizador-definido" objetos de qualquer outro, tambm. Ao mesmo
tempo uma simples numerao (Paint_1, Paint_2) no podem ser utilizados. Usando esse mtodo de
objetos numerao, voc no pode compreender, no qual o objeto Paint_73 barra deve ser exibido. O
bar que possui o ndice Paint_73 ir buscar o ndice Paint_74, quando surge um novo bar, quando um
outro ndice Paint_75 nova barra vem, etc Nesse caso, seria necessrio excluir e recriar todos os objetos
em cada novo bar. Essa soluo (embora isso seja possvel) , obviamente, muito acidentado e caro.
Cada objeto criado deve ter o seu tempo com coordenadas que corresponde ao momento da abertura
bar. Alm disso, duas linhas devem ser exibidos em cada bar - uma linha fina e uma linha grossa. mais
confortvel para representar os nomes dos objetos criados por um programa como o seguinte:
Object name = Paint_2_2007.03.22 16:40, aqui:
Paint_ - prefixo que diferencia os objetos criados pelo programa;
2_ - quer nmero de objetos que so exibidos em uma barra (valor 1 ou 2 possvel);

2007.03.22 16:40 - coordenar tempo que caracteriza o unvoca barra o objeto exibido no.
Paint_ e 2_ so os valores das variveis e Prefixo Nom_Lin, respectivamente. As coordenar tempo pode
ser obtido para cada barra de transformao em um valor datetime um valor de seqncia usando a
transformar funes:
TimeToStr () Funo
string TimeToStr (datetime valor, int mode = TIME_DATE | TIME_MINUTES)
A funo transforma os valores que contm tempo (em segundos) caducada desde 01.01.1970
(valor datetime) em uma seqncia de caracteres de formato especificado (string valor).
Parmetros:
valor - o tempo em segundos desde 00:00 expirava em 1 de janeiro de 1970;
modo - um modo de sada de dados adicionais. Pode ser um simples ou combinados uma bandeira:
TIME_DATE obtm o resultado no "yyyy.MM.dd" forma;
TIME_MINUTES obtm o resultado na "hh: mi" forma;
TIME_SECONDS obtm o resultado na "hh: mi: ss" formulrio.
Vamos considerar a EA strings.mq4 que gere objetos para colorir de velas e ver como o TineToStr ()
utilizado neste programa:
//------------------------------------------------ -------------------/ / Strings.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ --------------- 1 -Quant_Bars extern int = 100; / / Nmero de barras
datetime Time_On;
string Prefix = "Paint_";
//------------------------------------------------ --------------- 2 -int init () / / Spec. funo init ()
(
int Ind_Bar; / / Bar ndice
Time_On = Tempo [Quant_Bars]; / / Hora do primeiro colorir
for (Ind_Bar = Quant_Bars - 1; Ind_Bar> = 0; Ind_Bar -) / / Barras ciclo
(
Crie (Ind_Bar, 1); / / Desenha uma linha fina
Crie (Ind_Bar, 2); / / Desenha uma linha grossa
)
WindowRedraw (); / / Imagem redesenhando
retorno; / / Sair init ()
)
//------------------------------------------------ --------------- 3 -int start () / / Spec. funo start ()
(
datetime T1, T2; / / 1 hora e 2 coordenadas
int erro, Ind_Bar; / / Cdigo de erro ea barra de ndice
dupla P1, P2; / / 1 e 2 coordenadas preo
color Col; / / Cor do objeto criado
//------------------------------------------------ --------------- 4 -for (int linha = 1; Line <= 2; Line + +) / / Linha tipo ciclo
(
string Nom_Lin = Linha + "_"; / / String com o nmero da linha
/ / String Nom_Lin = DoubleToStr (Linha, 0 )+"_";// Pode ser to

for (Ind_Bar = 0;; Ind_Bar + +) / / Bar do ciclo


(
//------------------------------------------------ --------------- 5 -datetime T_Bar = Tempo [Ind_Bar]; / / Bar abertura vez
if (T_Bar <Time_On) break; / / No cor fora das fronteiras
string Str_Time = TimeToStr (T_Bar); / / Time string
string His_Name = Prefixo Nom_Lin + + Str_Time; / / Nome do Objeto
//------------------------------------------------ --------------- 6 -T1 = ObjectGet (His_Name, OBJPROP_TIME1); / / t1 coord. query
Erro = GetLastError (); / / Cdigo de erro que recebe
if (Erro == 4202) / / Se no houver um objeto: (
(
Crie (Ind_Bar, Line); / / criando funo chamada Objeto.
continuar; / / Para a prxima iterao
)
//------------------------------------------------ --------------- 7 -T2 = ObjectGet (His_Name, OBJPROP_TIME2); / / t2 coord. query
P1 = ObjectGet (His_Name, OBJPROP_PRICE1); / / p1 coord. query
P2 = ObjectGet (His_Name, OBJPROP_PRICE2); / / p2 coord. query
Col = ObjectGet (His_Name, OBJPROP_COLOR); / / Color query
if (T1! = T_Bar | | T2! = T_Bar | | / / Incorreto coord. ou cor:
(Linha == 1 & & (P1! = Mximo [Ind_Bar] | | P2! = Mnimo [Ind_Bar])) | |
(Linha 2 == & & (P1! Open = [Ind_Bar] | | P2! = Fechar [Ind_Bar])) | |
(Open [Ind_Bar] Fechar [Ind_Bar] & & Col! = Vermelho) | |
(Open [Ind_Bar] == Fechar [Ind_Bar] & & Col! Verde =))
(
ObjectDelete (His_Name); / / Apagar objeto
Crie (Ind_Bar, Line); / / Criar objeto correto
)
//------------------------------------------------ --------------- 8 -)
)
WindowRedraw (); / / Imagem redesenhando
retorno; / / Sair start ()
)
//------------------------------------------------ --------------- 9 -int deinit () / / Spec. deinit funo ()
(
Name_Del string [1]; / / Array declarando
Quant_Del int = 0; / / Nmero de objetos a serem apagados
int Quant_Objects = ObjectsTotal (); / / Nmero total de todos os objetos
ArrayResize (Name_Del, Quant_Objects); / / Necessrio array tamanho
for (int k = 0; k <= Quant_Del; i + +) / / Excluir objetos com nomes ..
ObjectDelete (Name_Del [i]); / / .. que a matriz contm
retorno; / / Sair deinit ()
)
//------------------------------------------------ -------------- 10 -Crie int (int Ind_Bar, int Line) / / Usurio-funo definida ..
(/ / Criao de objetos ..
Cor cor; / / cor Objeto
datetime T_Bar = Tempo [Ind_Bar]; / / Bar abertura vez
Abrir dupla O_Bar = [Ind_Bar]; / / Bar aberto preo
Fecho duplo C_Bar = [Ind_Bar]; / / Bar estreita preo
H_Bar duplo = Mximo [Ind_Bar]; / / Bar preo mximo
L_Bar duplo = Mnimo [Ind_Bar]; / / Bar preo mnimo
string Nom_Lin = Linha + "_"; / / Seqncia - Linha nmero
/ / String Nom_Lin = DoubleToStr (Linha, 0 )+"_";// Pode ser to
string Str_Time = TimeToStr (T_Bar); / / Seqncia - Aberto tempo.
string His_Name = Prefixo Nom_Lin + + Str_Time; / / Nome do objeto criado
if (O_Bar <C_Bar) Cor = Azul; / / Ao escolher a cor, dependendo ..
if (O_Bar> C_Bar) Cor = Vermelho; / / .. parmetros da barra

if (O_Bar == C_Bar) = cor verde;


switch (Line) / / Thin ou linha grossa
(
case 1: / / Thin line
ObjectCreate (His_Name, OBJ_TREND, 0, T_Bar, H_Bar, T_Bar, L_Bar);
break; / / Sair do interruptor
case 2: / / Esp line
ObjectCreate (His_Name, OBJ_TREND, 0, T_Bar, O_Bar, T_Bar, C_Bar);
ObjectSet (His_Name, OBJPROP_WIDTH, 3); / / Estilo
)
ObjectSet (His_Name, OBJPROP_COLOR, Cor); / / Cor
ObjectSet (His_Name, OBJPROP_RAY, false); / / Ray
ObjectSetText (His_Name, "objeto criado pela EA
", 10); / / Descrio
retorno; / / user-defined funo Sair
)
//------------------------------------------------ -------------- 11 -A fim de criar objetos grficos, o usurio-definidas Crie funo () (blocos 10-11) usada no programa. A
varivel Ind_Bar que indica o ndice de barra o objeto deve ser criado, e com a Linha, o objeto nmero
(linha 1 ou 2), so utilizados como parmetros a ceder nesta funo.
Trs componentes so usados quando fazem o nome do objeto a ser criado:
string His_Name = Prefixo Nom_Lin + + Str_Time; / / Nome do objeto criado
O valor do prefixo varivel especificada pelo programador na cabea parte do programa e no
alterado durante a execuo programa:
string Prefix = "Paint_";
O valor da Nom_Lin varivel obtido como resultado de clculos:
string Nom_Lin = Linha + "_"; / / Seqncia - Linha nmero
/ / String Nom_Lin = DoubleToStr (Linha, 0 )+"_";// Pode ser to
Aqui, o valor da varivel inteira (no clculo durante a primeira parte da expresso) transformado no
tipo do maior prioridade, ou seja, para a string tipo. Como resultado, o Nom_Lin recebe "1_" ou "2_"
valores, dependendo do valor da Linha varivel.
Para se calcular o valor da varivel Str_Time o TimeToStr () a transformao funo dos dados
utilizados:
string Str_Time = TimeToStr (T_Bar); / / Seqncia - Aberto tempo
Observe que o TimeToStr () funo tem valores padro. Neste caso, estas so esses valores que so
necessrias: "yyyy.MM.dd hh: mi", no h necessidade de usar adicionalmente segundo, porque o prazo
mnimo igual a 1 minuto.
Ns poderamos tambm aplicar o seguinte mtodo de clculo Str_Time para ser usado no objeto nome:
string Str_Time = T_Bar;
Neste caso, o Str_Time iria obter um valor igual ao nmero de segundos desde 01.01.1970 caducou. A
fim de ver a diferena, podemos desenvolver um programa que contm o seguinte cdigo:
int init ()
(
string String_Time = TimeToStr (Hora [0]); / / Hora no formato
string String_Sec = Tempo [0]; / / Nmero de segundos

Alerta ( "String_Time =", String_Time, "String_Sec =", String_Sec);


retorno;
)
A seguinte mensagem (de acordo com o tempo de abertura zero bar) ser exibida na tela, como
resultado da execuo do programa:
String_Time = 2007.03.22 19:10 String_Sec = 1174590600
A primeira alternativa que implementado na strings.mq4 EA um pouco mais informativo, pelo que a
preferncia para ela, neste caso (as alternativas so equivalentes em termos de compor um
algoritmo).
O objeto chamado His_Name criado na sequncia das linhas definidas pelo utilizador-Crie funo
(). Ele contm informaes sobre a abertura do bar tempo com os parmetros que correspondem ao
nmero da "Linha" linha e tambm a cor dependendo do bar caractersticas. O valor do texto descrio
especificado para cada objeto, "objeto criado pela EA", como bem.
O Crie () chamado em funo do programa a partir de dois locais: a especial funo init a partir de ()
para a criao de objetos inicial e, a partir do incio especiais funo () para re-criar o objeto, se
necessrio, no caso, era suprimidos ou modificados pelo usurio. O objeto nomes no incio () (blocos 46) so formadas da mesma forma que em outras partes do programa.
As coordenar do primeiro considerado objeto definida no block 6-7. Se o objeto no for encontrado,
neste momento, ir ser criado pelo Create () function. E se o objeto existe, as suas outras coordenadas
sero determinadas e os parmetros da sua correspondncia com a barra de propriedades sero
verificadas (blocos 7-8). O objeto ser eliminado e recriado (com o mesmo nome) com as propriedades
corretas, caso seja detectado algum desfasamento.
Outro problema solucionado durante a execuo da deinit () Funo: necessrio excluir apenas os
objetos que foram criadas pelo programa a partir do agregado de todos os objetos na janela do
smbolo. Esta realizada em duas fases: na primeira fase, os nomes de todos os objetos que devem ser
memorizados so apagados ao Name_Del [] array, e ento elas sero suprimidas em um ciclo
individual. O nmero total de objetos na janela (incluindo as criadas pelo programa e colocados
manualmente pelo usurio) calculado pela ObjectsTotal () Funo:
int Quant_Objects = ObjectsTotal (); / / Nmero de TODOS os objetos
O nmero de barras coloridas est a ser fixado pelo usurio em uma varivel externa, ou seja, no se
sabe de antemo quantos objetos devem ser suprimidas. Portanto, a string array que contm os nomes
dos objetos a serem apagados, declarada com o nmero de elementos igual a 1. Alm disso, seu
tamanho programaticamente alterada - o nmero de elementos seja aumentado para o nmero total
de objetos.
ArrayResize (Name_Del, Quant_Objects); / / Necessrio array tamanho
A fim de selecionar os objetos que foram criados pela EA, a deinit () contm a funo do ciclo 'para' que
analisa os nomes de todos os objetos.
Obj_Name seqncia ObjectName = (k); / / Busca nome do objeto
O atributo que diferencia "nossos" objetos de todos os outros o "Paint_" prefixo, com o qual o nome
de cada programa criado-objeto iniciada. Para analisar um nome objeto, devemos extrair a primeira
parte (neste caso, smbolos 6) A partir da seqncia varivel a ser o nico nome do objeto; ento
devemos comparar este valor com o do Prefixo varivel. Se coincidirem, este objeto deve ser
suprimida. Se no, ela no deve ser eliminado.

StringSubstr () Funo
StringSubstr corda (string texto, int start, int comprimento = 0)
A funo extrai o texto a partir do texto linha a partir da posio especificada. A funo devolve a cpia
do texto extrado. Caso contrrio, uma seqncia vazia ser retornada.
Parmetros:
Texto - a linha do texto deveria ser extrado de;
iniciar - a posio inicial da subseqncia. Ela pode variar de 0 a StringLen (texto) -1;
comprimento - o comprimento da substring a ser extrados. Se o valor desse parmetro inferior ou
igual a 0 ou at mesmo no especificado, ento o texto ser extrada a partir da posio especificada
at o fim da linha.
No exemplo considerado, o texto extrado o nome do objeto da seguinte forma:
Chefe StringSubstr string = (Obj_Name, 0, 6); / / Extract 6 primeiros
smbolos
Neste caso, os 6 primeiros smbolos so extradas da Obj_Name varivel string iniciando com um a
zero. Observe que a contagem de todos os ndices (bares, arrays), as encomendas entradas na lista e
tambm o nmero da posio na linha comea com 0, enquanto que a contagem comea com 1
quantificados.
O extradas substring (um valor de seqncia) atribudo ao chefe varivel string. Se o nome do objeto
(e no prprio objeto), considerada criada pela EA, o valor do texto extrado ser "Paint_". Se outro
nome for analisado, ento o valor desejado ser diferente. Por exemplo, o valor do texto extrado a
partir do "Channel stdDev 23109" objeto nome ser o seguinte: "stdDev", e para o objeto chamado
"Fibo 22800", ser "Fibo 2".
Nas linhas subseqentes, o valor da varivel comparado ao chefe que a varivel Prefixo:
if (Chefe == Prefixo) / / O objeto comeo ..
(/ / .. com Paint_ encontrado
Se esses valores so iguais entre si e, em seguida, analisaram o nome do objeto ser colocado matriz
Name_Del [] para os nomes dos objetos a serem excludos. Na prxima "para o" ciclo, todos os objetos,
os nomes dos que esto contidos pela matriz, ser eliminado (note-se em separado que impossvel
eliminar todos os objetos durante o primeiro ciclo, porque, neste caso , O nmero total de objetos e sua
numerao ser alterado de cada vez que o objeto excludo, o que ir resultar na omisso de alguns
nomes objeto).
O preo grfico ter a seguinte aparncia durante a execuo da strings.mq4 EA:

. 142. Preo grfico colorido utilizando objetos grficos (strings.mq4).


Alm dos grupos de objetos que cobrem o preo grfico, dois outros objetos colocados manualmente
pelo usurio so exibidos, como mostrado na fig. 142; eles so regresso canal e Fibo nveis. Os objetos
criados pela EA ser eliminado, assim que estiver concluda a sua execuo, e os objetos criados pelo
usurio permanecer na janela do smbolo. Este resultado obtido em decorrncia do uso da corda
funes no programa. Eles permitem a criar e analisar valores string, incluindo nomes objeto grfico.

Funes String
Funo

Breve descrio

StringConcatenate

Insere-se uma seqncia de parmetros e dado a volta dele. Os


parmetros podem ser de qualquer tipo. O nmero de parmetros no
pode exceder 64.

StringFind

Substring pesquisando. Ele retorna o nmero da posio na linha comea


com a substring desejada, ou -1, no caso do substring no for
encontrado.

StringGetChar

Ela devolve o valor do smbolo que est situado na posio da linha


especificada.

StringLen

Ele retorna o nmero de smbolos na linha.

StringSetChar

Ela devolve a cpia do acordo com a modificao do valor do smbolo na


posio especificada.

StringSubstr

Ele extrai o texto que comea na posio especificada na linha do texto. A


funo devolve a cpia do texto extrado, se possvel. Caso contrrio, uma
seqncia vazia ser retornada.

StringTrimLeft

A funo corta o transporte retorno personagens, espaos e tabulao


smbolos a partir da parte esquerda da corda. A funo devolve a cpia do
texto modificado, se possvel. Caso contrrio, uma seqncia vazia ser
retornada.

StringTrimRight

A funo corta o transporte retorno personagens, espaos e tabulao


smbolos a partir da parte direita da corda. A funo devolve a cpia do
texto modificado, se possvel. Caso contrrio, uma seqncia vazia ser
retornada.

Data Transformation funes


Funo

Sntese Info

CharToStr

Transformao do cdigo em um nico smbolo-smbolo string.

DoubleToStr

Transformao do valor numrico em uma seqncia de texto que contm


a representao simblica do nmero com preciso o formato
especificado.

NormalizeDouble

Arredondamentos com o nmero do ponto flutuante para a preciso


especificada. O clculo StopLoss, TakeProfit e tambm a abrir prcie
encomendas pendentes de valores dever ser normalizado, de acordo com
a preciso que est armazenado na varivel definida Dgitos.

StrToDouble

Transformao da cadeia que contm a representao simblica do


nmero para o nmero de "dupla" tipo (dupla-preciso com o formato de
ponto flutuante).

StrToInteger

Transformao da cadeia que contm a representao simblica para o


nmero do "int" tipo (inteiro).

StrToTime

Transformao da cadeia que contm o tempo e / ou a data no


"yyyy.MM.dd [hh: mi]" formato para o nmero do "datetime" tipo
(nmero de segundos passaram desde 01.01.1970).

TimeToStr

Transformao do valor que contm o tempo expresso em segundos


passaram desde 01.01.1970 para a seqncia das "yyyy.MM.dd hh: mi"
formato.

Para obter a informaes detalhadas sobre essas e outras funes, d uma olhada
na documentao em MQL4.community, emMetaQuotes Software Corp site ou no menu "Ajuda" do
MetaEditor.
Data e Hora
O sistema de comrcio on-line Metatrader 4 utiliza as indicaes de duas fontes de tempo - o local (PC)
eo tempo do servidor tempo.
Hora local - o tempo que for definido sobre o PC local.
Servidor de tempo - o tempo que for definido no servidor.

TimeLocal () Funo
datetime TimeLocal ()
A funo retorna o PC local o tempo, expresso em nmero de segundos desde 00:00 expirava em 1 de
janeiro de 1970. Nota: Na anlise, o horrio local modelado e coincide com o ltimo model-servidor
conhecido tempo.

A grande maioria dos eventos que ocorrem no cliente terminal so consideradas de acordo com o
servidor de tempo. O tempo de carrapatos prximos, nova barra de incio, para abertura e fechamento
considerado de acordo com o servidor de tempo.Para obter o valor do servidor de tempo que
corresponde com o horrio atual, o TimeCurrent () funo deve ser usada:
TimeCurrent () Funo
datetime TimeCurrent ()
A funo retorna o ltimo valor conhecido do servidor de tempo (o tempo da ltima cotao prximos)
expresso em segundos desde 00:00 expirava em 1 de janeiro de 1970. O cliente terminal atualiza o
tempo de citar a ltima vinda (em conjunto com outras variveis do ambiente) antes de iniciar funes
especiais para sua execuo. Cada carrapato caracterizada com o seu prprio valor do servidor de
tempo que pode ser obtida utilizando o TimeCurrent () function. Durante a execuo, este valor s pode
ser alterada na sequncia da RefreshRates () chamada da funo e apenas se a informao foi
atualizada desde a ltima execuo do RefreshRates () function, ou seja, no caso dos novos valores de
algumas variveis do ambiente vieram do servidor.
O tempo de abertura bar, Hora [i], no coincide com o momento do novo carrapato prximos, como
uma regra. A qualquer hora do calendrio barra de abertura divisvel por semper o
calendrio. Qualquer primeiro Assinalar apareceu dentro de um horizonte temporal barra-formando, se
no houver nenhum carrapato recebimento dentro de um prazo definido, o bar no vai ser formado
dentro dos prazos.
Por exemplo, o carrapato chegando ao terminal de tempo (servidor) t0 resulta na formao de um bar
com o tempo abrindo igual a Hora [i +2] (Fig. 143). O momento especificado como o incio do calendrio
no coincide com o momento t0, embora possa concordar com ele acidentalmente, em geral. Os
carrapatos subseqentes que vm para o terminal dentro do mesmo prazo (no momentos de T1 e T2)
pode alterar os parmetros da barra, por exemplo, preo mximo ou abrir preo, mas eles no afetam o
tempo de abertura bar. O bar encerra o tempo no considerada no sistema de comrcio on-line
Metatrader 4 (formalmente, o horrio do ltimo carrapato prximos ou dentro de um horizonte temporal
do incio do prximo perodo de tempo pode ser considerado como tempo fechando o bar, como
mostrado na fig. 143 ).

Fig. 143. Bar formando seqncia no comrcio online plataforma Metatrader 4.


mostrado na fig. 143 que possvel que bares no so formados a alguns perodos de tempo que so
iguais para o perodo de tempo. Assim, entre o tempo do carrapato prximos T5 e T6 da prxima vinda
carrapato, o calendrio completo est embalado, por isso a nova barra de no ter sido formados a esse
perodo de tempo. Desta forma, o tempo de abertura bar diferirem maio, a partir do momento da
abertura de um bar adjacente por mais de um calendrio inteiro, mas semper divisvel por um
horizonte temporal. Para demonstrar a seqncia do bar formando, podemos usar o
EA timebars.mq4 sadas que o tempo de carrapato e prximos do momento da barra de abertura:

//------------------------------------------------ -------------------/ / Timebars.mq4


/ / O programa destinado a ser utilizado como um exemplo em MQL4 Tutorial
.
//------------------------------------------------ -------------------int start () / / Spec. funo start ()
(
Alerta ( "TimeCurrent =", TimeToStr (TimeCurrent (), TIME_SECONDS),
"O tempo [0] =", TimeToStr (Hora [0], TIME_SECONDS));
retorno; / / Sair start ()
)
//------------------------------------------------ -------------------Os resultados da EA timebars.mq4 de trabalho so mostrados na fig. 144. bvio que o primeiro
assinale o regular no perodo de tempo de 1 minuto durao entrou em 14:29:12, ao mesmo tempo uma
nova barra de abertura foi formada com o tempo - 14:29:00. Observe que a coluna direita da caixa de
mensagem exibe o servidor de tempo, a coluna da esquerda exibe a hora local.

Fig. 144. Bar formando seqncia no sistema de comrcio on-line Metatrader 4.


No caso dos carrapatos vm raramente (por exemplo, o perodo entre o final da sesso Europeu e do
incio da sesso asitica), voc pode observar um outro fenmeno durante a execuo
das timebars.mq4: o tempo de abertura da bares adjacentes podem diferir uns dos outros por mais de 1
minuto (para um minuto de tempo). Ao mesmo tempo, a indexao de barras guardado em sucesso,
sem espaos.
O servidor de tempo de servidores em diferentes centros que tratam pode variar. O horrio de incio e
trmino trades fixado em cada servidor individualmente e pode discordar do incio e do fim de regular
o dia. Alguns centros que tratam, por exemplo, as definies tm que realizar abertura comercial no
domingo, s 23:00 hora do servidor. Isso resulta na formao de barras dirio incompleto, a sua durao
igual prtica uma hora (Fig. 145).

Fig. 145. Bar histria diferente em diferentes centros que tratam.


O uso de Data e hora de funes bastante fcil de MQL4. Alguns deles transformar o servidor ea hora
local em segundos desde 00:00 expirava em 1 de janeiro de 1970 em um nmero inteiro que
corresponde a uma hora, um dia, etc Outras funes retornam um nmero inteiro que corresponda com
a hora actual , Dia, minuto, etc
TimeSeconds (), TimeMinute (), TimeHour (), TimeDay (), TimeMonth (), TimeYear (),
TimeDayOfWeek () e TimeDayOfYear () Funes
Este um grupo de funes que retornam o nmero de segundos caducado a partir do incio da hora,
ou minuto, hora, dia, ms, ano, dia da semana eo dia do ano para o perodo de tempo especificado. Por
exemplo:
int TimeMinute (datetime tempo)
A funo retorna minutos para o perodo de tempo especificado.
Parmetros:
tempo - a data expressa no nmero de segundos em que expirava 00:00 desde o dia 1 de janeiro de
1970.
int TimeDayOfWeek (datetime tempo)
Esta funo retorna o dia da semana (0-domingo, 1,2,3,4,5,6) para a data especificada.
Parmetros:
tempo - a data expressa no nmero de segundos em que expirava 00:00 desde o dia 1 de janeiro de
1970.

As funes podem ser considerados utilizadas para a anlise de qualquer barra de abertura tempo, por
exemplo. A EA chamadobigbars.mq4 destinados a encontrar barras de um tamanho que no inferior
especificada tamanho mostrado abaixo.
//------------------------------------------------ -------------------/ / Bigbars.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ --------------- 1 -extern int Quant_Pt = 20; / / Nmero de pontos
//------------------------------------------------ --------------- 2 -int start () / / Spec. funo start ()
(
H_L int = 0; / / Altura da barra
for (int i = 0; H_L <Quant_Pt; i + +) / / Ciclo de barras
(
H_L = MathAbs (High [i] - Baixo [i]) / Point; / / Altura da barra
if (H_L> = Quant_Pt) / / se o elevado bar no encontrado
(
int = TimeYear YY (Hora [i]); / / Ano
MN = int TimeMonth (Hora [i]); / / Ms
DD = int TimeDay (Hora [i]); / / Dia
int HH = TimeHour (Hora [i]); / / Hora
MM = int TimeMinute (Hora [i]); / / Minuto
Comentrio ( "O ltimo preo superior a circulao", Quant_Pt, / / Mensagem
"Pt aconteceu", DD, ".", MN, "." YY ",
", HH,": ", MM); / / output
)
)
retorno; / / Sair start ()
)
//------------------------------------------------ --------------- 3 -O bigbars.mq4 EA pesquisas o bar mais prximo cuja altura (diferena entre a mxima e mnima) seja
maior ou igual ao valor indicado na varivel externa Quant_Pt. A data eo horrio dos outputted bar so
encontrados para a janela de instrumento financeiro, pelo comentrio () function.

Segundos (), Minute (), Hour (), Dia (), TimeMonth (), TimeYear (), DayOfWeek () e
DayOfYear () Funes
Este o grupo de funes que retornam o actual segundo, minuto, hora, dia, ms, ano, dia da semana
eo dia do ano para conhecer o ltimo servidor tempo. A ltima vez conhecido servidor a servidor de
tempo que corresponde com o momento do lanamento do programa (lanamento de qualquer funo
especial pelo cliente terminal). O servidor de tempo no alterado durante a execuo da funo
especial.
int Hour ()
Ela retorna a hora actual (0,1,2, .. 23) da ltima vez conhecida servidor. Note-se que os ltimos tempos
conhecido servidor modelado durante os testes.
int DayOfYear ()
Ela retorna o dia atual do ano (1 o primeiro 1, .., 365 (6) o dia 31 de dezembro), ou seja, o dia do
ano da ltima vez conhecida servidor. Note-se que os ltimos tempos conhecido servidor modelado
durante os testes.

A EA timeevents.mq4 que realiza algumas aes, logo que chega o perodo de tempo especificado pode
ser usado como um exemplo de uso do exposto funes.
//------------------------------------------------ -------------------/ / Timeevents.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ --------------- 1 -extern dupla Time_Cls = 16,10; / / fechando tempo Encomendas
Flag_Time bool = false; / / Bandeira, ainda no existem mensagens
//------------------------------------------------ --------------- 2 -int start () / / Spec. iniciar funes
(
int Cur_Hour = Hour (); / / Servidor em horas
Cur_Min duplo = Minuto (); / / Server tempo em minutos
Cur_time duplo = Cur_Hour + Cur_Min
100; / / Hora atual
Alerta (Cur_time);
if (Cur_time> = Time_Cls) / / Se o tempo veio para o evento
Executora (); / / .. em seguida, executar aces concebidas
retorno; / / Sada de incio ()
)
//------------------------------------------------ --------------- 3 -int testamenteiro () / / Usurio-funo definida
(
if (Flag_Time == false) / / Se no houver mensagens ainda
(/ / .. em seguida, relatrio (1 hora)
Alerta ( "Divulgaes importantes tempo. Feche ordens.");
Flag_Time = true; / / Agora a mensagem j apareceu
)
retorno; / / user-defined funo Sair
)
//------------------------------------------------ --------------- 4 -O servidor de tempo calculado em horas e minutos durante a execuo da funo especial start ()
(blocos 2-3). A linha:
Cur_time duplo = Cur_Hour + Cur_Min

100; / / Hora atual

representa o horrio atual do servidor expressa como a varivel real Cur_time. O uso de variveis reais
conveniente em comparao operaes:
if (Cur_time> = Time_Cls) / / Se o tempo veio para o evento
Se o tempo atual mais do que ou igual ao valor do Time_Cls especificado pelo usurio, ento o
executor () user-defined funo ser chamada para execuo. Neste exemplo, o usurio coloca-se uma
funo definida mensagem negociao com recomendaes. Em geral, esta funo pode incluir qualquer
cdigo, por exemplo, efectuar transaces, enviar e-mails, criar objetos grficos, etc
Funes de Data e Hora
Funo

Descrio

Dia

Ela retorna o dia atual do ms, ou seja, o dia do ltimo ms do servidor


conhecido tempo.

DayOfWeek

Ele retorna o nmero de ndice do dia da semana (domingo-0, 1,2,3,4,5,6) da


ltima vez conhecida servidor.

DayOfYear

Ela retorna o dia atual do ano (1 o primeiro 1, .., 365 (6) o dia 31 de
dezembro), ou seja, o dia do ano da ltima vez conhecida servidor.

Hora

Ela retorna a hora actual (0,1,2, .. 23) da ltima vez servidor conhecido no
momento do programa comear (o valor no for alterado durante a execuo do
programa).

Minuto

a atual regressos minutos (0,1,2, .. 59) da ltima vez servidor conhecido no


momento do programa comear (o valor no for alterado durante a execuo do
programa).

Ms

Ele retorna o nmero do ms em curso (janeiro-1, 2,3,4,5,6,7,8,9,10,11,12), ou


seja, o nmero do ltimo ms do servidor conhecido tempo.

Segundos

Ele retorna o nmero de segundos caducado desde o incio do curso o ltimo


minuto do tempo servidor conhecido no momento do programa comear (o valor
no for alterado durante a execuo do programa).

TimeCurrent

Ele retorna o ltimo servidor conhecido tempo (o tempo da ltima cotao


prximos), expresso em segundos que o nmero de passaram desde a 00:00, 1
de janeiro 1970.

TimeDay

Ela retorna o dia do ms (1 - 31) para a data especificada.

TimeDayOfWeek Ela retorna o dia da semana (0-domingo, 1,2,3,4,5,6) para a data especificada.
TimeDayOfYear

Ele retorna ao dia (1 o primeiro 1, .., 365 (6) o dia 31 de dezembro) do ano
para a data especificada.

TimeHour

Ela retorna a hora durante o perodo de tempo especificado.

TimeLocal

Ela devolve o PC local o tempo, expresso em nmero de segundos desde 00:00


expirava em 1 de janeiro de 1970.

TimeMinute

Ele retorna minutos para o perodo de tempo especificado.

TimeMonth

Ele retorna o nmero do ms, para o perodo de tempo especificado (janeiro-1,


2,3,4,5,6,7,8,9,10,11,12).

TimeSeconds

Ele retorna o nmero de segundos passados desde o incio do perodo de tempo


especificado.

TimeYear

Ele retorna ao ano para a data especificada. O valor pode ser devolvido dentro do
intervalo de 1970-2037.

Ano

Ele retorna ao ano em curso, ou seja, o ano da ltima vez conhecida servidor.

Para obter a informaes detalhadas sobre essas e outras funes, consulte


a documentao em MQL4.community, emMetaQuotes Software Corp site ou no menu "Ajuda" do
MetaEditor.
Arquivo de Operaes

Em MQL4, possvel trabalhar com arquivos que contenham um determinado conjunto de informaes. Poder
ser necessrio escrever as informaes em um arquivo ou para l-lo a partir de um arquivo por vrias razes.

Um ficheiro pode ser utilizado para fornecer informaes para outro programa. Neste caso, o arquivo pode ser
criado por um programa aplicativo e utiliz-las como uma informao receptor. Por exemplo, a histria de uma
conta comercial podem ser gravados em um arquivo na execuo de uma aplicao. Este arquivo pode ser
aberto por outro programa mais tarde (por exemplo, o Excel para desenhar um equilbrio grfico).
Em outros casos, h necessidade de fornecer algumas informaes, por exemplo, as notcias calendrio, para
uma aplicao. Um programa executvel (por exemplo, uma Expert Advisor) pode ler estas informaes do

arquivo previamente preparado e analis-lo durante o clculo para visualizao grfica das mensagens na tela
ou para a tomada de decises comerciais.
Nomes de arquivos e diretrios

O nome de um ficheiro de trabalho deve ser composta de acordo com os requisitos do sistema operacional.
nome de arquivo usado em qualquer MQL4 composta de duas partes: o nome do arquivo e extenso do arquiv
separado por um ponto, por exemplo,News.txt. Tecnicamente, um nome do arquivo no tem qualquer rela
com o contedo do ficheiro, por isso o nome do arquivo e extenso podem ser definidos voluntariamente pelo
programador. Um nome do arquivo geralmente escolhido de modo a que representa o arquivo contm as
informaes.

A maioria dos programas so lanados automaticamente no PC do usurio, se o arquivo for duplo clique com o
boto do mouse. De acordo com a extenso do arquivo, o ambiente operacional carrega um outro programa o
exibir o contedo do ficheiro. Portanto, voc deve atribuir a extenso do arquivo considerando o programa (se
necessrio), que ser geralmente usado para exibir o arquivo.
Os mais populares tipos de arquivos (o tipo determinado pela sua extenso) so as seguintes:
-. Txt - arquivo de texto para visualizao que voc deve usar Bloco de Notas, Word, FrontPage, etc;
-. Csv - arquivo em Excel para construir tabelas;
-. Htm - arquivo para ser visualizado em um navegador, ou seja, o Internet Explorer, Netscape Navigator, etc
H trs pastas (com subpastas) que pode conter ficheiros de trabalho:
- Terminal_folder \ Experts \ Histrico \ atual corretor \ - Histria de arquivos;
- Terminal_folder \ Experts \ Files \ - para uso comum;
- Terminal_folder \ Tester \ Files \ - para os arquivos so usados para testes.
Um grupo de trabalho arquivo pode ser guardado em uma dessas pastas ou em suas subpastas. No caso de
falta de pasta disponvel no momento de salvar arquivos, a pasta ser criado automaticamente pelo cliente de
terminal. Trabalhar com arquivos em outros diretrios no est envolvido.
Modos de operaes de arquivo
A tecnologia de interao entre uma aplicao e um ficheiro de trabalho tem vrios modos. Em geral, um
arquivo pode ser aberto por vrios programas ao mesmo tempo (no prazo de um PC ou vrios PCs ligados
rede). Ao mesmo tempo, o ambiente operacional prev o pleno acesso ao processo, ou seja, o direito de ler o
arquivo e gravar as informaes dele constantes, para um s programa. Os outros programas s pode l-lo.
exemplo, se My_text.doc j foi aberto por um editor de texto, ento todos os outros programas ir receber a
notificao antes de abrir o arquivo:

Fig. 146. Caixa de dilogo que aparece quando um programa tenta acesso ao processo que j foi aberto por

outro programa.
A execuo desta tecnologia garante que um arquivo no ser modificado por dois programas diferentes
simultaneamente. A fim de permitir um programa aplicvel a interagir com um arquivo, voc dever abrir o
arquivo que est em primeiro lugar. O modo de abrir um arquivo especificado na FileOpen () function.

Um programa aplicativo pode abrir vrios ficheiros de trabalho em uma hora. A fim de permitir que o program
de diferenciar um arquivo a partir de um outro arquivo descritor est definido de acordo com todos os arquivo
abertos.
Arquivo descritor - nmero nico de que o arquivo aberto pelo programa no momento.
As FileOpen () funo ir retornar algum valor inteiro (este valor geralmente atribuda ao 'manipular'
varivel), se um arquivo aberto com xito. Esse valor o arquivo descritor. A maioria das funes que lhe
forem destinados ao trabalho com arquivos suponha a utilizao de um descritor de ficheiro como um dos
parmetros formais.
Funo FileOpen ()
int FileOpen (string filename, int modo, int delimitador = ';')

A funo abre um arquivo para inputing e / ou sada. A funo retorna um descritor de ficheiro ou -1, em caso
de avaria. Os arquivos s podem ser abertos no Terminal_folder \ Experts \ Arquivos \ pasta ou
na Terminal_folder \ Tester \ Arquivos \ pasta (no caso dos testes AE) ou em suas subpastas.
Parmetros:
filename - nome do arquivo;
modo - o modo de abertura do arquivo, ele pode ter os seguintes valores (ou suas combinaes): FILE_BIN,
FILE_CSV, FILE_READ, FILE_WRITE;
delimitador - o separador para assinar csv-arquivos. Trata-se , por defeito.
O modo de arquivo FILE_READ abertura implica que um arquivo ser usado apenas para serem lidos por um
programa. Um julgamento para abrir um arquivo neste modo podemos falhar, em caso de no disponvel
arquivo com o nome especificado.
O modo de arquivo FILE_WRITE abertura envolve um arquivo que ser usado para escrever nos por um
programa. A tentar abrir um arquivo neste modo resulta na abertura de um arquivo de um comprimento
zero. Mesmo se houvesse alguma informao no arquivo antes de abrir, ele ser apagado. A tentar abrir um
arquivo neste modo podemos falhar, no caso em que o arquivo foi aberto anteriormente por outro programa
(no modo de escrita).

autorizada a abrir um ficheiro na FILE_READ | FILE_WRITE modo. Este modo envolve a possibilidade de
leitura e escrita para um arquivo. Este modo utilizado, se voc precisa adicionar algumas informaes para o
arquivo que j contm algumas outras informaes. A funo implica a obrigatoriedade da utilizao de um do
modos, FILE_READ ou FILE_WRITE, ou sua combinao.

O modo de arquivo FILE_BIN abertura define um trabalho de transformao como um arquivo binrio uma.
modo de arquivo FILE_CSV abertura define um trabalho de transformao de um texto como um arquivo. A
funo envolve uso obrigatrio de um dos FILE_BIN ou FILE_CSV modos. A utilizao simultnea de FILE_BIN
e modos FILE_CSV proibida

A funo requer obrigatria combinao de FILE_READ, FILE_WRITE ou FILE_READ | FILE_WRITE modos com
o FILE_BIN ou FILE_CSV modo. Por exemplo: preciso usar a combinao de FILE_CSV | FILE_READ de ler as
informaes de um arquivo de texto, e necessrio utilizar o FILE_BIN | FILE_READ | FILE_WRITE combina

para adicionar uma entrada para um arquivo binrio.


No mais do que 32 arquivos podem ser abertos simultaneamente dentro de um mdulo executvel (de um
programa aplicvel, por exemplo, uma Expert Advisor). Os descritores dos arquivos que esto abertas no
mdulo no podem ser passados para outros mdulos (bibliotecas).
Contedo do arquivo entradas
As informaes entradas so escritas para um ficheiro sem espaos com qualquer combinao de modos. As
entradas so adicionadas uma informao por um FILE_BIN quando se utiliza o modo de constituio de um
arquivo. Dependendo do tipo de informao que escrito para um arquivo (e as funes que so utilizadas
para faz-lo) os smbolos que representam a combinao final da linha ( "\ r \ n") pode ser escrita entre os
grupos de entradas. A Informaes entradas so separadas por separadores de arquivo (normalmente ";"),
quando formando um arquivo no FILE_CSV modo, e os grupos de entradas (que compem uma linha) so
separados com a combinao dos smbolos que representam o fim da linha ( "\ r \ n ").

Arquivo separadora - smbolo especial, a entrada que est escrito em um arquivo separado para as linhas d
informao.
O arquivo separador usado para separar as informaes entradas CSV-a apenas em arquivos.
O princpio comum para as entradas em qualquer composio arquivos que essas entradas so adicionadas
de acordo com a seqncia especfica, sem espaos. Correctamente, a entrada constituda por seqncia
contnua de smbolos. Qualquer arquivo pode ser lido por qualquer programa e (dependendo das regras
implemeted no mesmo) pode ser mostrado de alguma forma na tela. Por exemplo: ns temos
o File_1.csv arquivo que contm:
int FileOpen (string filename, int modo, int delimitador = ';')
File_1.csv O arquivo ser exibido em diferentes formas em diferentes editores texto:

Fig. 147. File_1 representao nos diferentes programas (File_1.csv).


Neste caso, o "\ r \ n" smbolo combinao foi interpretada por cada um dos programas (Excel e Notepad),
conforme o depoimento de formatao seqncia: a seqncia de smbolos representado na prxima linha
aps o "\ r \ n" combinao dos smbolos, e os "\ r \ n" conjunto em si mesmo no exibido na janela de
edio. Ao mesmo tempo, o Excel um editor mesa, de forma a "," smbolo foi interpretado pelo programa
como uma das informaes que colunas de separao. Chamar a ateno que os ";" smbolo no exibido na
janela do Excel. Bloco de notas um editor de texto. As regras implementadas em que no suponha a diviso
em colunas de informao, de modo a "," smbolo no foi interpretado como um processo de separao, mas
ela foi interpretada como uma parte de informaes, de forma que ele exibido na tela.
Os smbolos especificada ( ";" e "\ r \ n") so usados para separar as entradas em MQL4.

Fig. 148. Variedade de entradas nos ficheiros de trabalho.

A estrutura da informao escrita em diferentes tipos de ficheiros esto representados na fig. 148. A linha
superior mostra o contedo de arquivo csv, o fundo trs linhas mostram a estrutura de arquivos binrios. Todo
estes arquivos so compostos de acordo com as regras de uma ou outra funo de escrita no arquivo.
Uma entrada no arquivo csv-se a seqncia de valores corda (string tipo) que so separados com o processo
de separao ou com o sinal do fim da linha. Ambos so interpretados como um sinal do fim do valor
informativo ler parte na leitura informaes (utilizando o padro MQL4 funo de arquivo leitura). O valor da
seqncia pode ter a durao diferente e no se sabe quanta smbolos esto l, ento a leitura realizada
antes de um dos separadores est localizado.

As inscries em dois tipos de binrios de arquivos binrios representam as seqncias de dados sem
separadores. Essa seqncia de escrita nos regida pelo comprimento fixo para uma base de dados de
diferentes tipos: 4 bytes de dados para um dos "int", "bool", "datetime" e "cor" tipos, e 8 bytes (ou 4 bytes,
dependendo dos parmetros da funo escrito) para os dados de uma "dupla" tipo.Neste caso, no h
necessidade de separadores, porque a leitura realizada pela funo padro para leitura de dados de um tipo
especfico com uma determinada durao. O ltimo (um sobre o fundo da figueira. 148) arquivo binrio contm
os dados do tipo string que separado com o fim da linha sinal.
Arquivo ponteiro - uma posio no arquivo da leitura do valor comea a partir do prximo.

O "Arquivo ponteiro" conceito o mesmo com "cursor" noo. O arquivo ponteiro definido com a posio no
arquivo. Como leitura longe como se passa o ponteiro est movendo uma direita ou por vrias posies.
Problema 36. Leia as informaes sobre a importante notcia de um arquivo e exibir os
objetos grficos sobre o preo grfico (linhas verticais), em conformidade com o tempo
de notcias publicao.

Deixe o Terminal_Folder \ Experts \ Arquivos \ pasta contm o News.csv trabalho arquivo com o seguint
contedo:

Fig. 149. Contedo do ficheiro de trabalho News.csv.

Neste caso, o arquivo contm informaes sobre os cinco eventos que iro acontecer em pases diferentes, co
um horrio diferente.Cada linha contm duas entradas. A primeira entrada o valor da seqncia que
representam as informaes sobre uma data hora do evento. A segunda entrada o texto de descrio do
evento. Trs primeiros smbolos da segunda entrada contm o nome da moeda (o pas) que o caso diz respeit

A soluo consiste em duas partes. Antes de mais, temos de ler as informaes do arquivo de trabalho e, em
seguida, usar o valor recebido como as coordenadas dos objetos grficos. A leitura das informaes realizado
pela FileReadString () function.
FileReadString () Funo
string FileReadString (int ala, int comprimento = 0)
A funo l a linha a partir da posio actual do ficheiro. adequado tanto para CSV e arquivos binrios. A
linha ser lido at o conheci em separator o arquivo de texto. O nmero especificado de smbolos ser lida
em arquivos binrios. A fim de receber as informaes sobre um erro que voc deve ligar para o GetLastError
function.
Parmetros:
punho - o arquivo descritor que devolvido pelo FileOpen () function;
comprimento - o nmero de caracteres a serem lidos.
A necessidade de tratamento da informao em notcia aparece apenas uma vez no incio da negociao,
portanto, neste caso, podemos usar um script para resolver o problema 36. O timetablenews.mq4 script
destina-se a ler as informaes do arquivo e exibir os objetos grficos na janela do smbolo.
//------------------------------------------------ -------------------/ / Timetablenews.mq4
/ / O cdigo deve ser usado apenas para fins educacionais
.
//------------------------------------------------ --------------- 1 -int start () / / Spec. funo start ()
(
//------------------------------------------------ --------------- 2 -int Manilha, / / File descritor
STL; / / Estilo da linha vertical
string File_Name = "News.csv", / / Nome do arquivo
Obj_Name, / / Nome do objeto
Instr, / / Nome da moeda
Um, Dois, / / 1 e 2 nome do instr.
Texto, / / Texto do evento descrio
Str_DtTm; / / Data e hora do evento (linha)
datetime Dat_DtTm; / / Data e hora do evento (data)
color Col; / / Cor da linha vertical
//------------------------------------------------ --------------- 3 -Manipular = FileOpen (File_Name, FILE_CSV | FILE_READ, ";"); / / arquivos

abrindo
if (Handle <0) / / arquivos abrindo falhar
(
if (GetLastError () == 4103) / / Se o arquivo no existir, ..
Alerta ( "Nenhum arquivo chamado", nome_do_ficheiro); / / .. informar
comerciante
else / / Se qualquer outro erro ocorre ..
Alert ( "Erro ao abrir o arquivo", nome_do_ficheiro); / / .. esta mensagem
PlaySound ( "Bzrrr.wav"); / / Som acompanhamento
retorno; / / Sair start ()
)
//------------------------------------------------ --------------- 4 -while (FileIsEnding (Manilha) == false) / / Enquanto o ponteiro arquivo ..
(/ / .. No , no final do arquivo
//------------------------------------------------ --------- 5 -Str_DtTm = FileReadString (Handle); / / Data e hora do evento (data)
Texto = FileReadString (Handle); / / Texto do evento descrio
if (FileIsEnding (Manilha) == true) / / Arquivo ponteiro est no fim
break; / / Sair leitura e desenho
//------------------------------------------------ --------- 6 -Dat_DtTm = StrToTime (Str_DtTm); / / Transformao de dados tipo
Instr StringSubstr = (Texto, 0, 3); / / Extrair trs primeiros smbolos
Um StringSubstr = (Symbol (), 0, 3); / / Extrair trs primeiros smbolos
Dois StringSubstr = (Symbol (), 3, 3); / / Extract segundo trs smbolos
STL = STYLE_DOT; / / Para todos - linha pontilhada estilo
Col = DarkOrange; / / Para todos - esta cor
if (Instr == Um | | Instr == Dois) / / E, para os eventos de nossa ..
(/ / .. smbolo ..
STL = STYLE_SOLID; / / .. este estilo ..
Col = Vermelho; / / .. e essa cor de verde. linha
)
//------------------------------------------------ --------- 7 -Obj_Name = "News_Line" Str_DtTm +; / / Nome do objeto
ObjectCreate (Obj_Name, OBJ_VLINE, 0, Dat_DtTm, 0); / / Criar objeto ..
ObjectSet (Obj_Name, OBJPROP_COLOR, Col); / / .. e sua cor, ..
ObjectSet (Obj_Name, OBJPROP_STYLE, STL); / / .. e estilo ..
ObjectSetText (Obj_Name, Texto, 10); / / .. e descrio
)
//------------------------------------------------ --------------- 8 -FileClose (Handle); / / Fechar arquivo
PlaySound ( "bulk.wav"); / / Som acompanhamento
WindowRedraw (); / / Redimensionar objeto
retorno; / / Sair start ()
)
//------------------------------------------------ --------------- 9 --

As variveis utilizadas so abertas e descrito no bloco 2.3 da EA. Uma tentativa de abrir o arquivo, bem como
anlise dos resultados desta operao so executadas no bloco 3.4. As FileOpen () funo usada para abrir o
arquivo:
Manipular = FileOpen (File_Name, FILE_CSV | FILE_READ, ";"); / / arquivos
abrindo
Uma tentativa de abrir o arquivo no bem sucedida. Ela pode fracassar, se o arquivo com o nome
especificado no est disponvel.Ao abrir arquivo falhar (o arquivo descritor um nmero negativo) a
necessria mensagem exibida para o usurio e para a execuo do incio () pra de funcionar.
Em caso de abertura de um processo bem sucedido, o controlo passado para o operador do "enquanto o"
ciclo (blocos 4-8). A leitura dos dados do arquivo (blocos 5-6), a transformao dos dados e sua anlise (6-7
blocos) e criao do objeto grfico com coordenadas e parmetros correspondentes ao ltimo ler informaes

(blocos 7-8) so realizados a cada iterao.


A execuo do "enquanto o" ciclo continua at que o ponteiro arquivo chega ao final do arquivo, ou seja, no
haver nenhuma informao que resta para a direita do ponteiro. O FileIsEnding () funo usada para
analisar a posio do ponteiro do arquivo.
FileIsEnding () Funo
bool FileIsEnding (int ala)
A funo retorna TRUE se o arquivo for ponteiro no final do arquivo, caso contrrio ele retorna FALSE. A fim d
receber as informaes sobre um erro que voc deve usar o GetLastError () function. O GetLastError () ir
retornar a funo ERR_END_OF_FILE (4099) de erro, no caso, no final do arquivo for alcanado durante a
leitura.
Parmetros:
punho - arquivo descritor que devolvido pelo FileOpen () function.
A soluo representada (timetablenews.mq4) implica que qualquer nmero de notcias pode ser gravado para
arquivo News.csv.News.csv arquivo contm cinco entradas correspondentes a cinco eventos (notcias) no
exemplo mencionado (fig. 149). Em geral, o nmero de linhas pode ser de 0 a 20-30, dependendo da
quantidade de acontecimentos reais que devem ter lugar neste dia.
Entradas a partir da leitura do arquivo (que identificado pelo "manipular" varivel) realizada em blocos 5
Str_DtTm = FileReadString (Handle); / / Data e hora do evento (data)
Texto = FileReadString (Handle); / / Texto do evento descrio
if (FileIsEnding (Manilha) == true) / / Arquivo ponteiro est no fim
break; / / Sair leitura e desenho

A primeira ea segunda linhas do bloco 5.6 realizar a leitura da informao do arquivo at o prximo separador
est satisfeita. A terceira e quarta linhas realizar testes: se o arquivo ponteiro no final da linha. Se assim no
for, ento os objetos grficos ser formada por dois valores mais lido no ciclo. Se era inicialmente conhecido
sobre o nmero de entradas, ento, a anlise que realizada na terceira e quarta linhas no seria
necessrio. Neste caso, dificilmente teramos especificar o nmero de iteraes do ciclo (por exemplo, 5) e no
iria realizar uma verificao adicional.

No entanto, o nmero de entradas desconhecida, no presente caso. Ao mesmo tempo, neste exemplo cada
caso descrito com dois valores que compem uma linha do seguinte tipo: valor, arquivo separadora, valor
final da linha sinal. Neste caso, supe-se que, se houver uma entrada (valor na primeira linha), em seguida, o
outro existe um; mas se no existir uma primeira entrada, em seguida, o segundo um no existe, portanto, n
h evento, e no h necessidade de se criar um objeto grfico. Se ambas as entradas ou um deles no existir
ir mover o ponteiro para o final do arquivo (ou seja, a posio no arquivo onde no h dados para a direita d
ponteiro existir) quando um tento ler-se realizado. Os testes realizados em 3-4 permite bloquear a descobrir
esse fato. Se notar o controlo (duas ltimas linhas do bloco 5-6) suprimida, em seguida, needless objeto ser
criado enquanto o programa est sendo executado. Somente depois que a condio de "quando" ciclo termina
e vai acionar o controle ser passado para bloquear 8-9. Em geral, voc deve considerar a lgica da
representao de dados no arquivo, ordem sequencial das entradas e separadores, o nmero de linhas, etc
quando escrevo um algoritmo para ler ficheiros. Cada circunstncia exige um certo indivduo algoritmo.

A leitura dos dados do arquivo tem o tipo string. Com o intuito de utilizar os valores recebidos para a criao d
objetos grficos que deveria transformar os dados necessrios para o tipo. No bloco 6.7, o primeiro (leia na
linha seguinte) transformado para o valor "datetime" valor e maior ser utilizado como de coordenadas do
objeto grfico que corresponde ao evento. Trs primeiros smbolos a partir da segunda leitura string valor, so
comparados com os de trigemelar primeiro e segundo smbolos em nome do smbolo. Se existir uma

coincidncia, em seguida, o objeto grfico recebe o correspondente parmetros: linha estilo - slidos e cor vermelho (blocos 7-8). Em outros casos, os objetos so exibidos com a laranja linha pontilhada. Voc pode
observar a notcia linhas na janela do smbolo como o resultado da execuo do script:

Fig. 150. Objetos grficos na janela aps o smbolo timetablenews.mq4 execuo.


De tal forma, o script pode ser executado em qualquer janela do smbolo. Ao mesmo tempo, cada janela ir
conter os slidos linha vermelha que representam os acontecimentos que dizem respeito a este smbolo
especfico, e as linhas pontilhadas que representam as aberturas relativas a outros smbolos eventos. Para
apresentar o texto descries dos objetos que voc deve verificar o "Show objeto descrio" opo na janela
Propriedades de segurana (F8) => comum.

O arquivo est fechado anteriormente aberto no bloco 8.9 depois que o problema seja resolvido, ou seja, todo
os objetos necessrios sejam criados. O arquivo deve ser fechada pelos seguintes motivos: na primeira mo
para que no poupar recursos extras PC e sobre a segunda mo para permitir que os outros programas para
acessar o arquivo no modo de escrever. Deveria ser considerado normal para fechar o arquivo, assim como
todas as informaes so lidas a partir dele (ou escrita no mesmo) e seu uso no necessrio mais. O
fechamento do arquivo realizado pela FileClose () function.
FileClose () Funo
void FileClose (int ala)
A funo desempenhada fechamento de um arquivo que foi aberta anteriormente pelo FileOpen () function.
Parmetros:
punho - arquivo descritor que devolvido pelo FileOpen () function.

A fim de permitir que o profissional que praticamente timetablenews.mq4 usar o script, ele deve manter o seu
mtodo de criao de um arquivo que contm o calendrio de algumas notcias perodo. Este tipo de arquivo
pode ser criado usando qualquer editor de texto, porm, neste caso, a possibilidade de um erro se mantm
(por vezes um separador pode ser erroneamente no especificada). Permite analisar uma variante do trabalho
arquivo usando MQL4 criao.

Problema 37. Representam o cdigo da EA que cria um arquivo de notcias calendrio.

Em geral, uma EA pode ser destinada criao de um ficheiro que contm qualquer nmero de notcias. O
examinadas aquicreatefile.mq4 EA cria grupo de trabalho arquivo que contm informaes sobre a no mais d
cinco eventos.
//------------------------------------------------ -------------------/ / Createfile.mq4
/ /
O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ --------------- 1 -extern string data_1 = ""; / / 2007.05.11 10:30
extern string texto_1 = ""; / / CHF Construo licenas
extern string data_2 = ""; / / 2007.05.11 12:00
extern string texto_2 = ""; / / GBP Refinance taxa de 2%, 2,5%
extern string Date_3 = ""; / / 2007.05.11 13:15
extern string Text_3 = ""; / / EUR Reunio do G10 governadores dos bancos
extern string Date_4 = ""; / / 2007.05.11 15:30
extern string Text_4 = ""; / / USD E.U.A. taxa de desemprego
extern string Date_5 = ""; / / 2007.05.11 18:30
extern string Text_5 = ""; / / JPY A produo industrial
//------------------------------------------------ --------------- 2 -int start () / / Spec. funo start ()
(
//------------------------------------------------ --------------- 3 -int Manilha, / / File descritor
Qnt_Symb; / / Nmero de smbolos gravados
string File_Name = "News.csv"; / / Nome do Arquivo
Erray string [5, 2]; / / Array para 5 notcias
//------------------------------------------------ --------------- 4 -Erray [0, 0] = data_1; / / Preenche o array com os valores
Erray [0, 1] = texto_1;
Erray [1, 0] = data_2;
Erray [1, 1] = texto_2;
Erray [2, 0] = Date_3;
Erray [2, 1] = Text_3;
Erray [3, 0] = Date_4;
Erray [3, 1] = Text_4;
Erray [4, 0] = Date_5;
Erray [4, 1] = Text_5;
//------------------------------------------------ --------------- 5 -Manipular = FileOpen (File_Name, FILE_CSV | FILE_WRITE, ";"); / / arquivos
abrindo
if (Handle ==- 1) / / arquivos abrindo falhar
(
Alerta ( "Um erro ao abrir o arquivo.", / / Mensagem de erro
"Pode ser o arquivo ocupado pelos outros applictiom");
PlaySound ( "Bzrrr.wav"); / / Som acompanhamento
retorno; / / Exir iniciar ()
)
//------------------------------------------------ --------------- 6 -for (int i = 0; i <= 4; i + +) / / Ciclo de toda a panplia
(
if (StringLen (Erray [i, 0]) == 0 | | / / Se o valor da primeira ou ..
StringLen (Erray [i, 1]) == 0) / / .. segunda varivel no est inscrito
break; / / .. em seguida, sair do ciclo
Qnt_Symb = FileWrite (Handle, Erray [i, 0], Erray [i, 1]); / / Escrita para o
arquivo
if (Qnt_Symb <0) / / Se falhou

(
Alert ( "Erro ao escrever o ficheiro", GetLastError ()); / / Mensagem
PlaySound ( "Bzrrr.wav"); / / Som acompanhamento
FileClose (Handle); / / Arquivo fechamento
retorno; / / Sair start ()
)
)
//------------------------------------------------ --------------- 7 -FileClose (Handle); / / Arquivo fechamento
Alerta ( "A", File_Name, "arquivo criado."); / / Mensagem
PlaySound ( "Bulk.wav"); / / Som acompanhamento
retorno; / / Sair start ()
)
//------------------------------------------------ --------------- 8 --

A informao inicial inscrita para o programa utilizando as variveis externas da "cadeia" tipo (blocos 1-2).
variveis so descritas em bloco e abriu 3-4. Para efectuar o processamento dos dados conveniente para a
escrita Erray [] [] string array. Cada evento (informaes que caracterizam notcias) representada por dois
elementos do array na segunda dimenso. O tamanho da primeira dimenso (o nmero de linhas na tabela)
definido com o nmero de notcias, neste caso, 5. A fim de evitar que o manual de valores ao tentar entrar
EA uma demo-nos conta que voc pode carregar as configuraes do arquivo EA example_news.set; o arquivo
de configurao a EA deve estar localizado no Terminal_folder \ Presets \ pasta.
Block abertura 5.6 executa arquivos. Se a operao falhou, em seguida, iniciar o () funo acaba funcionando
aps o utilizador ter recebido a mensagem. Se o arquivo for aberto com xito, em seguida, o controle ser
passado para o "para" operador ciclo no bloco 6.7. Em geral, o nmero de valores de entrada, o tamanho do
array Erray eo nmero de iteraes pode ser aumentada para a quantidade necessria.

A verificao feita a cada iterao: um dos valores inscritos vazio. O comprimento da matriz Erray valores
so calculados com este objetivo. Se um deles tem o comprimento zero, ento ela considerada como a
ausncia do atual e os prximos eventos, por isso a atual iterao interrupes. A escrita de valores de dois
elementos do array vai at o arquivo sobre o vazio, na medida do valor do elemento encontrado. O FileWrite
() funo usada para escrever os valores para o csv-file.
FileWrite () Funo
int FileWrite (int ala, ...)

A funo destinado para escrever as informaes para um arquivo csv-, o separador entre as informaes s
automaticamente includas no. O smbolo representa o fim da linha "\ r \ n" acrescentado ao processo aps a
informao escrita. A informao transformada a partir do numrico para o formato de texto quando
outputted (ver Print () funes). A funo retorna o nmero de smbolos escritos ou o valor negativo, caso
ocorra um erro.
Parmetros:
punho - arquivo descritor que devolvido pelo FileOpen () function;
... - Os dados separados por vrgulas. No pode ser mais de 63 parmetros.

Os dados da "dupla", "int" tipos automaticamente transformados para a string (os dados de "cor", "datetime
e "bool" tipos considerada como o dos nmeros inteiros "int" e transformada para o tipo string, como bem),
os dados da "cadeia" tipo de sada como , sem transformao. As matrizes no podem ser passados como
parmetros; arrays deve ser digitado elementwise.
No exemplo considerado a informao est escrita para o ficheiro na seguinte linha:

Qnt_Symb = FileWrite (Handle, Erray [i, 0], Erray [i, 1]); / / Escrita para o
arquivo

O separador (o smbolo que utilizado como um separador especificado no arquivo abertura funo FileOpen
(), neste caso, ";") ser redigida aps a Erray [i, 0] valor quando se escreve para o arquivo. O smbolo
representa o fim da linha "\ r \ n" automaticamente colocado no final do FileWrite do () funo execuo, ou
seja, no final da escrita. A mesma entrada ser escrito em cada iterao do prximo "para" ciclo. Cada nova
entrada comea a partir da posio em que o processo de separao do ltimo escrito colocado. Ao mesmo
tempo, os valores dos elementos prximos do 'Erray' ser gravado para o arquivo (ndices dos elementos so
aumentadas de 1 a cada iterao).

Se o atual arquivo escrito para o sucesso do passado para o controle a prxima iterao. Se a escrita no
arquivo falhar ento o arquivo ser fechado pelo FileClose () funo aps a mensagem exibida para o usuri
eo incio () termina sua funo de trabalho. Se todos os escritos para o arquivo so executados com xito, em
seguida, o controle passado para o arquivo fecho funo FileClose () no bloco 7.8, aps a execuo do "pa
ciclo est acabado. Neste caso, a mensagem sobre a criao bem sucedida arquivo exibido, depois que o
incio () funo execuo ser finalizada. O News.csv arquivo mostrado na fig. 149 ser criada aps a EA est
acabado execuo.

Funo para a realizao de operaes arquivo


Funo

Sntese Info

FileClose

O fechamento do arquivo que foi aberta anteriormente pelo FileOpen () function.

FileDelete

Excluindo do arquivo. Os arquivos s podem ser eliminados se estiverem localizados


no terminal_folder \ peritos \ Arquivos (terminal_folder \ tester \ arquivos, no caso dos
testes da AE) ou na pasta suas subpastas.

FileFlush

Flushing todas as informaes que so deixadas no arquivo de input-output bufer para


o disco rgido.

FileIsEnding

Devolve TRUE se o arquivo for ponteiro no final do arquivo, caso contrrio - retorna
FALSE. Se ao final do arquivo for alcanado durante a leitura do arquivo,
o GetLastError () ir retornar a funo ERR_END_OF_FILE (4099) de erro.

FileIsLineEnding Retorna TRUE se o arquivo ponteiro est no final da linha do CSV-arquivo. Caso
contrrio, retorna FALSE.
FileOpen

Abre um arquivo para a introduo e / ou sada. A funo retorna o descritor de


arquivo aberto o arquivo de -1, em caso de falha.

FileOpenHistory Abre um arquivo na pasta atual histria (termial_folder \ Histrico \ server_name) ou


em suas subpastas. A funo retorna o arquivo descritor -1 ou, em caso de falha.
FileReadArray

A funo l o nmero especificado de elementos a partir do arquivo binrio para a


matriz. A matriz tem de ter tamanho suficiente antes de ler. A funo retorna o
nmero de praticamente l elementos.

FileReadDouble

A funo l a nmero de preciso dupla com o ponto flutuante (duplo) a partir da


posio atual do arquivo binrio.O tamanho do nmero maio a seguinte: 8 bytes (duas
vezes) e 4 bytes (float).

FileReadInteger A funo l a nmero inteiro a partir da posio atual do arquivo binrio. O tamanho
do nmero pode ser o seguinte: 1, 2 ou 4 bytes. Se o tamanho do nmero no
especificado, ento o sistema ir tentar l-lo como ele era o 4 byte nmero inteiro.

FileReadNumber Lendo o nmero a partir da posio atual do arquivo CSV-at que o separador seja
cumprido. Ela pode ser aplicada apenas para csv-arquivos.
FileReadString

A funo l a linha a partir da posio actual do ficheiro. Ela pode ser aplicada tanto
para csv e arquivos binrios.The line in the text file will be read until the separator is
met. The specified number of symbols in the line will be read in the binary files.

FileSeek

The function moves the separator to the new position that is the displacement from
the beginning, end or the current position of the file in bytes. The next reading or
writing starts from the new position. If the pointer moving is performed successfully
then the function will return TRUE, otherwise - FALSE.

FileSize

The function returns the size of the file in bytes.

FileTell

The function returns the shift of file pointer from the beginning of the file.

FileWrite

The function is intended to write the information to the csv-file, the separator is placed
automatically between the information. The end of the line sign "\r\n" is added to the
file after the writing is finished. The numeric data is transformed to the text format
during the ouptputting process. The function returns the the number of written
symbols or a negative value if an error occurs.

FileWriteArray

The function writes the array to the binary file.

FileWriteDouble The function writes the number with the floating point to the binary file.
FileWriteInteger The function writes the integer number value in the binary file.
FileWriteString

The function writes the line to the binary file from the current position. It returns the
number of practically written bytes or a negative value, in case an error occurs.

To get the detailed information about these and other functions you should take a look at
the documentation at MQL4.community , atMetaQuotes Software Corp. website or at the "Help" section of
MetaEditor.
Matrizes e Timeseries
muito importante manter em mente que a seqncia de um mesmo tipo de elementos semper
numerados a partir de zero em MQL4.
Foi mencionado anteriormente que no se deve confundir o valor do ndice o elemento matriz com o
nmero de elementos no array (ver Arrays). Por exemplo, se a matriz declarada:
int Erray_OHL [3]; / / declarao de Array
ento isso significa que um one-dimensional array chamado Erray_OHL contm trs
elementos. Indexao dos elementos comeam com zero, ou seja, o primeiro dos trs elementos tem o
ndice 0 (Erray_OHL [0]), o segundo um - o ndice 1 (Erray_OHL [1]), eo terceiro um - o ndice 2
(Erray_OHL [ 2]). De tal forma, o ndice mximo valor inferior ao nmero de elementos no array por
um. Neste caso, a matriz uma tridimensionais, ou seja, ns podemos dizer sobre a quantidade de
elementos na primeira dimenso: o ndice mximo nmero 2, porque o nmero de elementos no array
3.
A mesma coisa pode ser dito sobre a numerao das dimenses do array. Por exemplo, se um array
declarada da seguinte forma:
int Erray_OHL [3] [8]; / / declarao de Array

isso significa que a matriz tem duas dimenses. A primeira dimenso especifica o nmero de linhas (3,
neste exemplo), ea segunda uma especifica o nmero de elementos na fila (ou o nmero de colunas, 8,
neste exemplo). A dimenso em si muito numerados. A primeira dimenso tem o nmero 0, eo
segundo - o nmero 1. Os nmeros de dimenses so utilizadas no ArrayRange () function, por
exemplo.
ArrayRange () Funo
int ArrayRange (objeto array [], int range_index)
A funo retorna o nmero de elementos na dimenso especificada da matriz.
O uso de ArrayRange () funo pode ser demonstrada com a soluo do seguinte problema:
Problema 38. O Mas_1 matriz contm os valores da matriz 3X5. Obtenha os valores da
Mas_2 array que contm os elementos cujos valores so iguais aos valores da matriz
transponvel. Uso arbitrrio valores dos elementos.
Vamos trabalhar alguns outros valores dos elementos e representam as primeiras e as matrizes que o
desejado Mas_1 e Mas_2 arrays conter respectivamente:

ndices 0
0
1
1
11
2
21

1
2
12
22

2
3
13
23

3
4
14
24

Matriz inicial, Mas_1 array.

4
5
15
25

ndices
0
1
2
3
4

0
1
2
3
4
5

1
11
12
13
14
15

2
21
22
23
24
25

Transp matriz, Mas_2 array.

Fig. 151. Inicial e Matrizes Transp.


Neste caso, o problema resolve-se a reescrever os valores do primeiro para o segundo uma matriz de
acordo com as regras da matriz de transposio, ou seja, reescrever os valores dos elementos da
primeira matriz para as fileiras de colunas da matriz desejada. A soluo do problema transposio
matriz est representada no matrix.mq4 especialista:
//------------------------------------------------ -------------------/ / Matrix.mq4
/ / O Cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ --------------- 1 -int start () / / Especial funo start ()
(
int Mas_1 [3] [5] = (1, 2, 3, 4, 5, 11, 12, 13, 14, 15, 21, 22, 23, 24,
25);
int Mas_2 [5] [3];
int R0 = ArrayRange (Mas_1, 0); / / Nmero de elementos no primeiro dim.
int R1 = ArrayRange (Mas_1, 1); / / Nmero de elementos no segundo dim.
for (int i = 0; i
Dois arrays so abertas no incio () a funo de perito. O Mas_1 array tem 3 linhas containing 5
elementos cada e os MAS_2 array tem 5 linhas contendo 3 elementos cada. A reformulao dos valores
em si feita da seguinte inscrio:

Mas_2 [[j] [i] = Mas_1 [i] [j]; / / Matriz de transposio


Para se calcular o ambiente runtime (o nmero de iteraes) de dois agentes incorporado ciclo, que
deve saber os valores dos elementos de cada array. Neste exemplo os valores constantes 3, e 5 podero
ser utilizados. No entanto, este modo de conceber programa est incorreto. Em geral, um programa
pode conter um cdigo onde o gigantesco apelando para os mesmos valores realizado em vrias
partes do mesmo. Um programa deve ser concebida de modo que as alteraes possam ser feitas em
um lugar, se necessrio, e em todas as outras peas necessrias eles seriam calculados. Neste caso,
apenas que abrir as inscries e inicializar o arrays deve ser modificado, se necessrio mudar o
tamanho dos arrays, portanto, no h necessidade de modificar o cdigo das outras partes.
Para determinar o nmero de elementos do primeiro e segundo Mas_1 dimenses da matriz so
realizados os seguintes clculos:
int R0 = ArrayRange (Mas_1, 0); / / Nmero de elementos no primeiro dim.
int R1 = ArrayRange (Mas_1, 1); / / Nmero de elementos no segundo dim.
Note que o valor 0 usado para a primeira dimenso e do valor 1 utilizado para a segunda. Os valores
calculados da R0 e R1 variveis so usadas para determinar o nmero de iteraes na "para" ciclos.
Os valores recebidos do array Mas_2 elementos so exibidos na tela usando a Comment () function.

Fig. 152.Result de matrix.mq4 operao.

Funes para Trabalhar com Arrays


Funes

Breve descrio

ArrayBsearch

Ela retorna o ndice do primeiro elemento encontrado na primeira dimenso da


matriz. Se o elemento com o valor especificado, ausente ia ento a funo ir
retornar o ndice do prximo (em valor) elemento.

ArrayCopy

Ele copia um array para outro. As matrizes devem ter o mesmo tipo. As matrizes
do dobro [], int [], datetime [], cor [], e bool [] no pode ser copiado como as
matrizes do mesmo tipo. Retorna o nmero de elementos copiados.

ArrayCopyRates

Ele copia os dados para o bar matriz bi-dimensional RateInfo do [] [6] espcie e
retorna o nmero de bares copiado. Caso contrrio, retorna -1, se a operao
falhar.

ArrayCopySeries Ele copia um array timeseries para o usurio-definidas matriz e devolve o

nmero de elementos copiados.


ArrayDimension

Ele retorna um posto de multy-dimensional array.

ArrayGetAsSeries Retorna TRUE se a matriz organizado como uma timeseries (elementos do


array esto indexados a partir do ltimo elemento para o primeiro), caso
contrrio, retorna FALSE.
ArrayInitialize

Estabelece um valor nico para todos os elementos do array. Retorna o nmero


de elementos inicializado.

ArrayIsSeries

Retorna TRUE se o array est marcada uma timeseries (Hora [], Open [], Close
[], Mximo [], baixo [] Volume de []), caso contrrio, retorna FALSE.

ArrayMaximum

Procura um elemnet com o valor mximo. A funo retorna a localizao da


mxima elemento do array.

ArrayMinimum

Procura um elemento com o valor mnimo. A funo retorna a localizao do


mnimo elemento da matriz.

ArrayRange

Ele retorna o nmero de elementos na dimenso especificada da matriz. O


tamanho da dimenso maior do que o maior ndice de 1, porque os ndices
esto comeando com zero.

ArrayResize

A se define uma nova dimenso da primeira dimenso da matriz. Retorna o


nmero da matriz contm todos os elementos que aps a sua classificao foi
alterada, se a funo executou com xito, caso contrrio, retorna -1 eo tamanho
do array no for alterado.

ArraySetAsSeries Ele aponta o caminho da indexao do array.


ArraySize

Ele retorna o nmero de elementos em um array.

ArraySort

Ela ordena arrays numricos por sua primeira dimenso. O timeseries arrays no
podem ser ordenados.

Funes de acesso Timeseries


Funes

Sntese Info

Ibars

Ele retorna o nmero de barras do grfico especificado.

iBarShift

uma barra de buscas por hora. A funo retorna ao deslocamento do bar que possui o
perodo de tempo especificado. Se a barra para o perodo de tempo especificado est
ausente ( "buraco" na histria), ento a funo retorna -1, dependendo do
parmetro exato ou o deslocamento do bar mais prximo.

iClose

A funo retorna o preo de fechar o bar especificada com a mudana a partir do


parmetro correspondente grfico (sigla, calendrio). Ele retorna 0, se ocorrer um erro.

iHigh

Ela retorna o preo mximo do valor especificado com a barra


de deslocamento correspondente ao parmetro do grfico (sigla, calendrio). Ele retorna
0, se ocorrer um erro.

iHighest

Ela retorna o ndice do valor mximo encontrado (mudana relativamente ao actual bar).

iLow

Ele retorna ao preo mnimo do valor especificado com a barra


de deslocamento correspondente ao parmetro do grfico (sigla, calendrio). Ele retorna
0, se ocorrer um erro.

iLowest

Ela retorna o ndice do valor mnimo encontrado (mudana relativamente ao actual bar).

iOpen

Ela devolve o valor do preo abrir o bar especificada com a mudana a partir do
parmetro correspondente grfico(sigla, calendrio). Ele retorna 0, se ocorrer um erro.

iTime

Ele retorna tempo de abertura da barra especificada com a mudana a partir do


parmetro correspondente grfico(sigla, calendrio). Ele retorna 0, se ocorrer um erro.

iVolume

Ele retorna carrapato valor da barra de volume especfico com a mudana a partir do
parmetro correspondente grfico (sigla, calendrio). Ele retorna 0, se ocorrer um erro.

Para obter a informaes detalhadas sobre essas e outras funes, consultar


a documentao em MQL4.community, emMetaQuotes Software Corp site ou no menu "Ajuda" do
MetaEditor.
Funes Matematicas
Matemtica e trigonometria esto includos no MQL4. No existem dificuldades em utilizar a maioria
deles. Por exemplo, o MathMax () funo retorna o valor mximo dos dois valores especificados na lista
dos parmetros da funo. A utilizao de outras funes determinadas reivindicaes ateno e
considerao. Vamos examinar uma das funes deste tipo.
MathFloor () Funo
MathFloor dupla (double x)
A funo retorna um valor numrico que corresponde ao maior inteiro que menor ou igual a x.
Parmetros:
x - valor numrico.
Observe que um valor devolvido pela funo o nmero real (tipo duplo), ao mesmo tempo, est escrito
que a funo retorna um inteiro. importante ter em conta que a funo retorna um nmero real que
tem todas as posies iguais a zero depois da vrgula. Por exemplo, o MathFloor () function pode
retornar 37,0 (nmero positivo do tipo duplo) ou -4,0 (nmero negativo do tipo duplo).
A descrio diz tambm que a funo retorna o mximo possvel de nmeros que inferior a um
determinado um. Por exemplo, se o valor do parmetro dado x 13.5, em seguida, o nmero mximo
que tem zeros depois da vrgula 13,0. -13,5 Negativo ou se o valor for especificado na funo e, em
seguida, o mximo igual ao menor inteiro -14,0. De tal maneira, a modificao do sinal do passado
para o valor da funo leva a resultados diferentes, ou seja, a valores recebidos no so iguais entre si
em magnitude absoluta.
Utilizao dessas funes muito conveniente, em alguns casos. Vamos analisar o fragmento de clculo
do montante lotes para novas encomendas, como exemplo:
Percentual int = 30; / /% da margem livre
Livre AccountFreeMargin duplo = (); / / Livre margem
One_Lot duplo = MarketInfo (Symb, MODE_MARGINREQUIRED); / / 1 lote preo
Etapa dupla MarketInfo = (Symb, MODE_LOTSTEP); / / Tamanho passo mudou
Lots_New duplo = MathFloor (Livre * Porcentagem
Etapa;

100

One_Lot

Passo) *

O valor da Porcentagem parmetro for definido pelo usurio. Neste caso, o usurio especificado de 30%
da margem livre para novas encomendas. De acordo com as regras que so especificadas pelo
tratamento center, calculou corretamente o valor dos lotes deve ser divisvel pelo escalo mnimo de

lotes mudando tamanho (Step). Os valores da margem livre (gratuito) e 1 lote preo (One_Lot) so
necessrios para o clculo tambm.
Vamos examinar a lgica do raciocnio do programador que compilou a expresso para calcular a
quantidade necessria de lotes Lots_New para novas encomendas. Vamos utilizar os valores numricos
das variveis para melhor visualizao. Deixe Livre = 5000,0, One_Lot = 1360,0 (Na maioria dos centros
que tratam o custo do lote 1 do par cambial seja proporcional ao custo do smbolo), Step = 0,1. Neste
caso, a expresso para calcular Lots_New pode ser escrita como segue:
Lots_New = MathFloor (5000,0 * 30/100/1360.0/0.1) * 0,1;
A 5000,0 * 30/100 expresso o valor das verbas estabelecidas para o usurio abrir uma nova
ordem. Neste caso, o preo de uma nova ordem pode atingir o 1500.0. Gastar dinheiro todos esses voc
pode abrir uma nova ordem que tem a 1500,0 / 1360,0 = 1.102941 quantidade de lotes. No entanto, o
centro ir lidar no aceitar o fim com essa quantidade de lotes, porque o mnimo Step = 0,1 (na maioria
dos centros que tratam). Para calcular a quantidade desejada de lotes que voc deve jogar fora todos os
"inteis" dgitos na parte decimal e substitu-los com zeros.
Para fazer isso voc pode usar a funo matemtica considerados:
Lots_New = MathFloor (1.102941/0.1) * 0,1;
O valor calculado do MathFloor (1.102941/0.1) sero 11,0 e calculado o valor da varivel ser Lots_New
lotes 1-1. Este valor atende aos requisitos de que tratam o centro e, por isso, pode ser utilizado como o
montante declarado de lotes em novas encomendas.

Funes Matematicas
Function
MathAbs

Sntese Info
A funo retorna o valor absoluto (em magnitude absoluta) de um determinado
nmero.

MathArccos A funo retorna o valor de x arccosine no intervalo de 0 a radianos. Se x menor


do que -1 ou maior que 1, a funo retorna NaN (valor indefinido).
MathArcsin A funo retorna arcsine no valor de x- / 2 a / 2 radianos gama. Se x i inferior a -1
ou maior que 1, a funo retorna NaN (valor indefinido).
MathArctan A funo retorna arco tangente de x. Se x igual a 0, a funo retorna 0. MathArctan
retorna o valor no- / 2 a / 2 radianos gama.
MathCeil

A funo retorna o valor numrico que o maior inteiro menor ou igual a x.

MathCos

A funo retorna o seno do ngulo.

MathExp

A funo retorna o valor de e para o poder de d. Na overflow, a funo retorna INF


(infinito), e ele retorna 0 no underflow.

MathFloor

A funo retorna o valor numrico representando o maior inteiro que menor ou


igual a x.

MathLog

A funo retorna o logartmo natural de x caso seja bem sucedido. Se x for negativo,
esta funo retorna NaN (valor indefinido). Se x for 0, ele retorna INF (infinito).

MathMax

A funo retorna o valor mximo dos dois valores numricos.

MathMin

A funo retorna o valor mnimo de dois valores numricos.

MathMod

A funo retorna o de ponto flutuante restante da diviso de dois nmeros. O


MathMod calcula a funo de ponto flutuante f resto de x / y tal que x + y = f *
i, onde i um inteiro, f tem o mesmo sinal que x, e o valor absoluto de f menor que
o valor absoluto de y.

MathPow

Retorna o valor da base expresso elevada potncia especificada (valor expoente).

MathRand

A funo retorna um inteiro pseudorandom dentro do intervalo de 0 a


32767. O MathSrand funo deve ser usada para a semente pseudorandom-gerador
de nmeros antes de chamar MathRand.

MathRound A funo retorna valor arredondado para o nmero inteiro mais prximo do valor
numrico especificado.
MathSin

A funo retorna o seno do ngulo especificado.

MathSqrt

A funo retorna a raiz quadrada de x. Se x for negativo, retorna MathSqrt


indeterminado (o mesmo que uma pacata NaN).

MathSrand A funo define o ponto de partida para gerar uma srie de pseudorandom inteiros.
MathTan

MathTan retorna a tangente de x. Se x maior ou igual a 263, ou igual ou inferior a 263, uma perda de importncia no resultado ocorre. Neste caso, a funo retorna um
valor indeterminado.

GlobalVariable Funes
Muitas funes para trabalhar com variveis globais do cliente terminal esto descritos
no GlobalVariables seo. Na seo anterior, tambm mencionou que tinha um programa corretamente
projetado para apagar suas variveis globais quando ele est sendo executado. N GVs o cliente deve
permanecer no terminal todos os programas aps ter sido abandonado.
Um ou mais GVs pode permanecer no terminal quando depurar programas usando as variveis globais
do cliente terminal. Neste caso, um programador deve excluir GVs manualmente antes do prximo
lanamento de um programa depurado. Para automatizar esse processo, voc pode criar um script que
apaga todas as variveis globais do cliente terminal.
GlobalVariablesDeleteAll () Funo
int GlobalVariablesDeleteAll (string prefix_name = NULL)
Elimina variveis globais. Se no for especificado um prefixo para o nome, ento todas as variveis
globais disponveis sero deletados. Caso contrrio, ele ir excluir apenas os nomes das variveis que
comeam com o prefixo especificado. A funo retorna o nmero de variveis excludas.
Parmetros:
prefix_name - prefixo para os nomes das variveis globais, devem ser suprimidos.
Abaixo est um exemplo de um script simples, deleteall.mq4, que elimina todas as variveis globais do
cliente terminal.
//------------------------------------------------ -------------------/ / Deleteall.mq4
/ / O programa destinado a ser utilizado como um exemplo em MQL4 Tutorial
.
//------------------------------------------------ -------------------int start () / / Especial incio () funo
(
GlobalVariablesDeleteAll (); / / Excluso de todas GVs

PlaySound ( "W2.wav"); / / Som


retorno; / / Sair
)
//------------------------------------------------ -------------------O script pode ser iniciado somente se nenhum programa usando GVs est sendo executado no cliente de
terminal. Caso contrrio, executando o script pode quebrar a lgica dos outros executados programas
que podem resultar em aces descontroladas. Aps a execuo do script na janela de variveis globais
(F3) do cliente terminal ficar vazia:

Fig. 153. Aparecimento de Variveis globais na janela do terminal aps o cliente deleteall.mq4 script
executado.

Funes para Trabalhar com Variveis globais


Funo

Sntese Info

GlobalVariableCheck

Ele retorna True se um GV est disponvel. Caso contrrio, retorna


FALSE.

GlobalVariableDel

Apaga uma varivel global. Retorna TRUE se uma varivel foi


eliminado com sucesso. Caso contrrio, retorna FALSE.

GlobalVariableGet

Ele retorna um valor de uma varivel global, ou 0, se ocorrer um


erro.

GlobalVariableName

A funo retorna o nome de uma varivel global, de acordo com seu


nmero de ndice na lista as variveis globais.

GlobalVariableSet

Estabelece um novo valor para uma varivel global. O sistema ir


criar uma nova varivel, se no houver nenhuma j criada. A hora
do ltimo acesso ser devolvido, se a funo foi executada com
sucesso. Caso contrrio, ele retorna 0.

GlobalVariableSetOnCondition Estabelece um novo valor para uma varivel global, se o seu valor
actual igual ao valor do terceiro parmetro check_value. A funo
ir gerar o ERR_GLOBAL_VARIABLE_NOT_FOUND (4058) de erro e
retornar false se uma varivel no existe. Retorna TRUE se a
funo tenha executado com sucesso. Caso contrrio, retorna
FALSE.
GlobalVariablesDeleteAll

Elimina variveis globais. Se o prefixo para o nome no


especificado, ento todas as variveis globais sero deletados. Caso
contrrio, ele elimina apenas os dos nomes comeando com o
prefixo especificado. A funo retorna o nmero de variveis

excludas.
GlobalVariablesTotal

A funo retorna o nmero total de variveis globais.

Custom Indicadores
As funes dos indicadores personalizados permitem-lhe ajustar as definies necessrias para fazer
uma conveniente representao de um indicador. Vamos considerar alguns desses produtos (ver
tambm a Criao de Indicadores Custom).
SetIndexBuffer () Funo
bool SetIndexBuffer (int ndice, a dupla array [])
A funcionar array-junta uma varivel que foi declarada a nvel global com um indicador tampo
personalizado predestinada. O montante dos amortecedores, que so necessrias para o indicador
definido utilizando a computao IndicatorBuffers () funo e no pode ultrapassar 8. Em caso de
ligao com xito, TRUE retornado, caso contrrio - FALSO. A fim de obter as informaes detalhadas
sobre um erro que voc deve ligar para o GetLastError () function.
Parmetros:
ndice - ndice nmero de uma linha (de 0 a 7 valores so possveis);
array [] - um nome do array que est conectado com um clculo tampo.
SetIndexStyle () Funo
void SetIndexStyle (int index, int tipo, int style = VAZIA, int width = VAZIA,
color = CLR_NONE CLR)
A funo define um novo modelo, estilo, a largura ea cor de uma determinada linha do indicador.
Parmetros:
ndice - ndice nmero de uma linha (de 0 a 7 valores so possveis);
Tipo - indicador linha do tipo. Pode ser um dos listados os tipos de linhas indicadoras (ver Estilos de
Linhas Exibindo Indicator);
estilo - estilo da linha. Usado para as linhas 1 pixel de largura. Pode ser um dos estilos especificados na
linha de Estilos Indicador Linhas Exibindo apndice. O VAZIO valor especifica que o estilo no ser
alterada;
largura - largura da linha; valores admissveis so - 1,2,3,4,5; VAZIA o valor especifica que a largura
no ser alterada;
CLR - linha de cores. O valor vazio CLR_NONE significa que a cor no ser alterada.

SetIndexLabel () Funo
void SetIndexLabel (int index, string texto)
A funo permite definir um indicador linha nome a ser exibido na DataWindow e no pop-up de ponta.
Parmetros:
ndice - ndice nmero de uma linha (de 0 a 7 valores so possveis);

texto - um texto descrevendo um indicador linha. NULL significa que o valor de uma linha no
mostrada na DataWindow.
A exemplo do indicador simples mostrando Alto linha (indicatorstyle.mq4), que usa as funes descritas
acima:
//------------------------------------------------ -------------------/ / Indicatorstyle.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ --------------- 1 -# propriedade indicator_chart_window / / Indic. desenhada na janela
principal
# propriedade indicator_buffers 1 / / Quantidade de buffers
# propriedade indicator_color1 Azul / / Cor da primeira linha
dupla Buf_0 []; / / Indicador array abertura
//------------------------------------------------ --------------- 2 -int init () / / Especial funo init ()
(
SetIndexBuffer (0, Buf_0); / / Atribuindo a matriz para o buffer
SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2); / / Linha de estilo
SetIndexLabel (0, "High Line");
retorno; / / Sair spec. funo init ()
)
//------------------------------------------------ --------------- 3 -int start () / / Especial funo start ()
(
int i, / / Bar ndice
Counted_bars; / / Valor calculado de barras
Counted_bars = IndicatorCounted (); / / Valor calculado de barras
i = Barras - Counted_bars - 1; / / ndice da primeira inmero
while (i> = 0) / / Ciclo de barras para o inmero
(
Buf_0 [i] = Mximo [i]; / / 0 de valor sobre o tampo isimo bar
i -; / / ndice de clculo para o prximo bar
)
retorno; / / Sair spec. funo start ()
)
//------------------------------------------------ --------------- 4 -1.2 O bloco contm as definies gerais de um indicador. Especifica-se com o comando # imvel que o
indicador deve ser apresentado na janela principal, o indicador usa um tampo, a cor da linha o
indicador azul. Um buffer array aberto em bloco 1.2, tambm.
As funes acima especificadas so utilizados no bloco 2.3. A entrada:
SetIndexBuffer (0, Buf_0); / / Atribuindo a matriz para o buffer
atribui o buffer Buf_0 nomeado para o buffer com o ndice 0. A entrada:
SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2); / / Linha de estilo
determina o estilo da linha que tem o indicador ndice 0. O DRAW_LINE constante indica que a linha
mostrada simples, o STYLE_SOLID constante indica que a linha slido, e 2 especifica a largura da
linha. A entrada:
SetIndexLabel (0, "High Line");

atribui o nome ao indicador linha com o ndice 0. O nome especificado pode ser visto na DataWindow e
na ponta do balo na janela do instrumento financeiro (fig. 810_3). Os nomes das linhas conveniente,
se a janela contm uma srie de linhas indicadoras; s vezes a nica forma de distinguir uma linha de
outra. O bloco 3.4 realiza o clculo dos valores do indicador panplia de elementos para a linha que
usada para exibir os valores mximos de bares (a seqncia de matrizes indicador clculo descrito
na Criao de Indicadores Custom seo em detalhes).
Se o indicador exibido em uma janela separada, em seguida, os nveis horizontal pode ser exibida
nesta janela tambm.
SetLevelValue () Funo
void SetLevelValue (int nvel, valor duplo)
Estabelece o valor especificado para o nvel horizontal do indicador que exibido em uma janela
separada.
Parmetros:
nvel - nvel srie (0-31).
valor - um valor para o nvel especificado.
A utilizao dos nveis horizontal pode ser muito conveniente, se voc precisar visualmente para detectar
se o indicador linha est acima ou abaixo dos valores especificados. O simples indicador que calcula a
diferena entre o mximo eo preo mnimo da barra mostrada abaixo. O mercado eventos so
interessantes para o utilizador (timidamente neste exemplo) se o indicador est acima da linha de 0,001
bar ou abaixo da barra de -0,001. A exemplo do indicador que mostra a diferena entre a Alta ea
Baixa (linelevel.mq4):
//------------------------------------------------ -------------------/ / Linelevel.mq4
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ --------------- 1 -# propriedade indicator_separate_window / / Indic. tirado em um sep.
Janela
# propriedade indicator_buffers 1 / / Quantidade de buffers
# propriedade indicator_color1 Vermelho / / Cor da linha
dupla Buf_0 []; / / Indicador array abertura
//------------------------------------------------ --------------- 2 -int init () / / Especial init () funo
(
SetIndexBuffer (0, Buf_0); / / Atribuindo a matriz para o buffer
SetIndexStyle (0, DRAW_LINE, STYLE_SOLID, 2); / / Linha de estilo
SetIndexLabel (0, "High / Low Diferena");
SetLevelValue (0, 0,0010); / / A linha horizontal nvel est definido
SetLevelValue (1, - 0,0010); / / Outro nvel est definido
retorno; / / Sair do spec.init () funo
)
//------------------------------------------------ --------------- 3 -int start () / / Especial incio () funo
(
int i, / / Bar ndice
Counted_bars; / / Valor calculado de barras
Counted_bars = IndicatorCounted (); / / Valor calculado de barras
i = Barras - Counted_bars - 1; / / ndice da primeira inmero

while (i> = 0) / / Ciclo de barras para o inmero


(
Buf_0 [i] = Mximo [i] - Baixo [i]; / / 0 tampo sobre o valor da barra i
if (Open [i]> Fechar [i]) / / se a vela negra ..
Buf_0 [i] =- Buf_0 [i]; / / .. ento reverter o valor
i -; / / ndice de clculo para o prximo bar
)
retorno; / / Sair do spec.start () funo
)
//------------------------------------------------ --------------- 4 -A funo considerada utilizado em bloco no indicador 2.3. Neste caso, esto previstos dois nveis
horizontal. O primeiro valor na lista de parmetros o nmero do nvel horizontal, o segundo o valor
do nvel especificado:
SetLevelValue (0, 0,0010); / / O nvel do horiz. linha est definido
SetLevelValue (1, - 0,0010); / / Outro nvel est definido
Os parmetros de indicatorstyle.mq4 e linelevel.mq4 indicadores estabelecidos de tal forma so exibidas
na janela do instrumento financeiro e no DataWindow.

Fig. 154. Exibindo indicadores nas diferentes configuraes do windows o cliente terminal.
Duas janelas - o DataWindow e do instrumento financeiro so mostrados na janela fig. 154. Voc pode
ver a entrada contendo "High Line" do texto e 1,3641, no valor DataWindow. O mesmo inscries so
mostrados na parte inferior da entrada de pop-up de ponta. A referida entrada exibida na DataWindow
todo o tempo corre o indicador, o nome da linha em que no for alterado, mas o valor na parte direita
da a entrada depende da posio do cursor na janela do instrumento financeiro. O nome da linha que
mostrado na janela pop-up ponta corresponde ao indicador linha o cursor est apontada.
O subwindow do indicador linelevel.mq4 contm as linhas horizontais que so colocados de acordo com
o usurio-os valores definidos. Se voc mover o cursor sobre a linha vermelha indicador, em seguida, o
nome desta linha, neste caso o "Diferena entre a Alta ea Baixa", pode ser visto na janela pop-up ponta,
o valor no ponto do cursor pode ser visto ao direita do nome.
Funes de ajuste personalizado indicadores

Funo

Sntese Info

IndicatorBuffers

Ela trata da memria de buffers que so utilizados para calcular um indicador


personalizado. A quantidade de buffers no pode exceder 8 e deve ser inferior
ao valor especificado na propriedade indicator_buffers # comando. Se o
indicador personalizado precisa de mais buffers para o clculo, voc dever usar
esta funo para especificar o nmero inteiro de buffers.

IndicatorCounted

A funo retorna uma quantidade de bares que no foram alterados desde o


ltimo indicador lanamento. A maioria dos bares no necessitem recalculo.

IndicatorDigits

O documento define a preciso (o nmero de smbolos depois da vrgula) para a


visualizao do indicador valores.

IndicatorShortName A se define uma "curta" nome de um indicador a ser exibida no indicador da


subwindow e na DataWindow.
SetIndexArrow

Estabelece um smbolo de uma linha que tem o indicador DRAW_ARROW estilo.

SetIndexBuffer

Junta-lhe um array varivel que seja declarada a nvel global com um tampo
de um determinado indicador personalizado.

SetIndexDrawBegin

O documento define um nmero de ndice a partir do incio de dados para o bar


a sorteio de um determinado indicador deve comear.

SetIndexEmptyValue Estabelece um valor vazio para o indicador linha. Vazio valores no so tiradas e
no so mostrados no DataWindow.
SetIndexLabel

O documento define um nome de um indicador de linha para exibir as


informaes na DataWindow e na ponta do balo.

SetIndexShift

O documento define uma mudana para um indicador relativamente a linha do


grfico comea. O valor positivo ir deslocar uma linha para a direita, o valor
negativo - para a esquerda. Ou seja, o valor calculado sobre o actual barra
desenhada com o especificado, em relao ao actual barra de deslocamento.

SetIndexStyle

Estabelece um novo tipo, estilo, a largura ea cor de um determinado indicador


linha (ver Estilos de Linhas Exibindo Indicator).

SetLevelStyle

Estabelece um novo estilo, a cor ea largura horizontal para os nveis de um


indicador que exibido em uma janela separada (ver Estilos de Linhas Exibindo
Indicator).

SetLevelValue

Estabelece um valor especificado para o nvel horizontal de um indicador que


exibido em uma janela separada.

Comrcio Funes
Todas as trocas de funes podem ser divididas em dois grupos - funes que fazem comrcio ordens e
funes que retornam alguma ordem caracterizando valores. MQL4 tem apenas cinco funes que fazem
comrcio e enviar encomendas para um servidor:

OrderSend () - para abertura do mercado e colocar ordem pendente;


OrderClose () - para fechamento do mercado;
OrderCloseBy () - fecho de mercado oposta ordens;
OrderDelete () - suprimindo encomendas pendentes;
OrderModify () - modificando todos os tipos de ordens.

A fim de utilizar funes listadas acima est descrito na Programao de Operaes de Comrcio na
seo detalhes. Todas as outras funes que no fazem comrcio encomendas, mas a sua utilizao
muitas vezes necessria. Por exemplo, algumas vezes necessrio fechar algumas ordens de prioridade
na seqncia. Para fazer isso, voc deve analisar as caractersticas de cada ordem no programa, a saber
- tipo de ordem, os lotes montante, ordens de stop-localizao, etc Vamos analisar algumas funes que
permitem a obteno de informaes sobre uma encomenda.
OrderTotal () Funo
int

OrdersTotal ()

A funo retorna o nmero total de encomendas abertos e pendentes.


OrderTakeProfit () Funo
OrderTakeProfit duplo ()
A funo retorna o valor do preo declarado quando a margem de lucro (ter lucro) da actual ordem
selecionada atingida. A ordem tem de ser previamente selecionados atravs de OrderSelect () function.
OrderProfit () Funo
OrderProfit duplo ()
Retorna o valor do lucro lquido (sem considerar o swaps e comisses) da ordem selecionada. o lucro
no realizado para a abertura ordena lucro fixo e fechado para os despachos. A ordem tem de ser
previamente selecionados atravs de OrderSelect () function.
OrderLots () Funo
OrderLots duplo ()
Retorna a quantidade de lotes de uma forma seleccionada. A ordem tem de ser previamente
selecionados atravs de OrderSelect () function.
O fragmento de programa que calcula o preo declarado fechar TakeProfit, fim lucrativo e da quantidade
de lotes mostrado abaixo:
for (int i = 0; i <OrdersTotal (); i + +) / / Para todas as encomendas
(
if ((OrderSelect (i, SELECT_BY_POS) == true) / / Se existe prxima
(
OrderTakeProfit duplo = (); / / TakeProfit de ordem
Lucro OrderProfit duplo = (); / / Portaria lucro
Lotes OrderLots duplo = (); / / Quantidade de lotes
//...... TP e lucro valores de utilizao no programa .....
)
) / / Fim do ciclo corpo
claro que cada funo considerada (OrderTakeProfit (), OrderProfit () OrderLots ()) no tem
quaisquer parmetros ajustveis, ou seja, a denotao de, por exemplo, o nmero de ordem, para
retornar o valor correspondente com as caractersticas deste indivduo fim no est envolvido.
Para calcular as caractersticas de uma forma individual (de uma declararam preo do stop-encomendas,
a fim lucrativo e quantidade de lotes, neste contexto), voc deve selecionar o primeiro necessria
ordem; isso ir informar sobre o programa a fim de executar clculos com. Para faz-lo voc deve
executar o OrderSelect () funo antes de iniciar os clculos (ver fecho e apagando Orders). O comrcio

funes executadas depois que vai retornar os valores que correspondem com as caractersticas
selecionadas fim.
A correta avaliao de uma ou de outra forma pelas caractersticas do programador no pouco
significativo. Por exemplo, ao fim de resolver o problema fechando seqncia, voc deve definir um
critrio de clculo que forma devem ser encerrados mais cedo e que um - posteriormente. Agora, vamos
dar uma olhada para a tarefa simples.

Problema 40. Comprar duas ordens esto atualmente abertos em um nico smbolo. O
primeiro deles aberto ao preo de 1,2000 a 0,5 lote, o segundo aberto ao preo de
1,3000 em 1 lote. O preo atual 1,3008. O critrio para o comrcio Comprar ordens
encerramento provocou. necessrio fazer uma deciso correcta, ou seja, para decidir
qual deveria ser vista como o primeiro fechados e que uma tal como o segundo.
Obviamente, o lucro a partir da primeira ordem faz 108 pontos, enquanto que a segunda de 8
pontos. Embora primeira vista, aberta em uma menor quantidade de lotes, que tem o maior lucro do
que a um segundo, ou seja, o lucro da primeira encomenda de US $ 540 e os lucros do segundo
despacho de R $ 80. Fechando o primeiro fim de maio parece ser prefervel, primeira vista, porque
tem maior lucro. No entanto, um misthought. necessrio analisar a eventual hiptese de fazer uma
deciso correta.
A ordem sequencial no iria fechar questo, se os preos no eram conhecidos de alterao durante o
perodo de ordens de fechamento. No entanto, o preo pode mudar durante a execuo da instruo
para fechar uma das ordens. Portanto, a fim de que possam trazer mais prejuzos, em um cenrio
negativo, dever ser fechado em primeiro lugar. Se o preo afunda um ponto para baixo, o lucro da
primeira ordem vai diminuir em US $ 5, enquanto que a do segundo um vai fazer por $ 10. Obviamente,
a segunda ordem traria mais prejuzos, portanto, deve ser fechado em primeiro lugar. De tal forma, o
montante dos lotes tem o significado dominante ao decidir sobre fechamento ordem
sequencial. Rentveis cenrio no pode ser considerado aqui, porque desenvolve com as trocas
comerciais nos critrios do programa e, desta vez, o critrio de fecho Comprar ordens tem
desencadeado.
Voc deve considerar as caractersticas outra forma, se for necessrio escolher entre duas ordens com a
mesma quantidade de lotes. Por exemplo, voc pode considerar a distncia entre o preo atual e
StopLoss o valor de cada encomenda. Ao mesmo tempo, voc deve analisar qual das ordens traria mais
prejuzos, em caso de movimento rpido dos preos. A resposta bvia, bem como: a um (a partir de
ambas as ordens que so abertos na mesma quantidade de lotes) que tem o seu nvel mais StopLoss a
partir do preo atual.
Assim voc pode analisar as prioridades e todos os outros parmetros de encomendas e compilar a lista
de prioridade orientada para os critrios a considerar quando se fazem com a deciso sobre o
encerramento ordens. No difcil identificar os critrios que devem ser desconsideradas. aberto preo
(e os respectivos lucros do fim), por exemplo. A quantidade de dinheiro que o profissional tenha, neste
momento, mostrada na coluna da Eqidade cliente terminal. A origem deste valor no importante
em que, nem ela uma consequncia da perda de um minrio despachos mais, nem resultado de um
lucro.
Todas as caractersticas necessrias de uma ordem podem ser recebidas utilizando o correspondente
comrcio funes:
Comrcio Funes

Funo

Sntese Info

Erros de execuo

Qualquer operao
comercial (OrderSend, OrderClose, OrderCloseBy, OrderDelete ou OrderModifyfunes)
pode terminar sem sucesso por um escore de motivos e nem devolver o bilhete
nmero negativo ou FALSE. Voc pode descobrir o motivo da falha, usando
o GetLastError. Cada erro deve ser processado em sua prpria maneira. A tabela
abaixo contm as recomendaes gerais.

OrderClose

Encerra posio. Retorna TRUE, se a funo foi finalizada com sucesso. Ele retorna
FALSO, se a funo no consegue terminar.

OrderCloseBy

Encerra uma posio aberta com os outros que se abriu na direo oposta para o
mesmo smbolo. Retorna TRUE. se a funo foi finalizada com sucesso. Ele retorna
FALSO, se a funo no consegue terminar.

OrderClosePrice

Ela retorna o prximo preo de ordem seleccionada.

OrderCloseTime

Ela retorna a tempo para o fechamento da ordem selecionada.

OrderComment

Ela retorna o comentrio de ordem seleccionada.

OrderCommission

Ela devolve o valor da comisso calculada ordem seleccionada.

OrderDelete

Elimina o anteriormente colocado na pendncia judicial. Retorna TRUE, se a funo foi


finalizada com sucesso. Ele retorna FALSO, se a funo no consegue terminar.

OrderExpiration

Ele retorna data do termo da ordem pendente seleccionada.

OrderLots

Ela retorna a quantidade de lotes de ordem seleccionada.

OrderMagicNumber Ela retorna a identificao ( "mgico") o nmero de ordem selecionada.


OrderModify

Ele modifica os parmetros das ordens anteriormente abertos e encomendas


pendentes. Retorna TRUE se a funo foi finalizada com sucesso. Ele retorna FALSO,
se a funo no consegue terminar.

OrderOpenPrice

Ela retorna a abrir preo da ordem seleccionada.

OrderOpenTime

Ela retorna a tempo de abertura da ordem selecionada.

OrderPrint

Ele entra na ordem informaes para a revista.

OrderProfit

Ela devolve o lucro lquido (sem considerar o swaps e comisses) da ordem


selecionada. o lucro no realizado para a abertura ordena lucro fixo e fechado para
os despachos.

OrderSelect

A funo escolhe a fim de colaborar com posteriormente. Retorna TRUE se a funo


foi finalizada com sucesso. Ele retorna FALSO, se a funo no consegue terminar.

OrderSend

A principal funo de abertura ordena e colocar encomendas pendentes. Ele retorna o


nmero do bilhete que foi designado para o fim do comrcio por servidor, ou -1, em
caso de falta para terminar a operao.

OrdersHistoryTotal Ele retorna o nmero de postos fechados e suprimiu ordens na histria da conta
corrente, carregado para o cliente de terminal.
OrderStopLoss

Ele retorna a posio do preo perto quando ele atinge o nvel perda (stop loss), da
ordem selecionada atualmente.

OrdersTotal

Ela devolve o nmero total de encomendas pendentes e aberta.

OrderSwap

Ela devolve o valor do swap atualmente selecionado fim.

OrderSymbol

Ela retorna o nome para o smbolo selecionado atualmente fim.

OrderTakeProfit

Ela retorna o preo perto quando ele atinge a margem de lucro (ter lucro) da ordem
selecionada atualmente.

OrderTicket

Ele retorna o nmero de bilhete da ordem selecionada atualmente.

OrderType

Ela retorna o tipo de operao a fim presentemente seleccionado.

Criao de um programa normal


Como regra, depois de ter codificado uma srie de programas na MQL4 simples aplicao, um
programador vai para um projeto mais complexo - a criao de um programa prtico para uso
prtico. Simples programas, em alguns casos, no satisfazem as necessidades de um programador de
negociao, pelo menos, duas razes:
1. A limitao funcional dos programas simples no lhes permite fornecer um comerciante com todas as
informaes e ferramentas de gesto comercial, o que no torna a utilizao deste tipo de programas
eficientes o suficiente.
2. O cdigo de imperfeio simples programas torna difcil seu posterior desenvolvimento de servios
que visem expandida.
Nesta seo, ns representamos uma das alternativas possveis de realizar uma negociao Expert
Advisor que pode ser considerada como uma base para seus prprios projetos.

Estrutura de um programa normal


A disponibilidade de muitas funes definidas por usurios em um programa permite-lhe para
criar algoritmos potente e flexvel para processar a informao. Compiler directiva # include
permite que voc use a sua funo (uma vez por escrito e depurado) em outros
programas. Dessa maneira, voc pode criar suas prprias bibliotecas ou de utilizao de cdigofonte aberto evoluo de outros programadores.

Ordem Contabilidade
A seo considera um exemplo de user-defined funo Terminal () que realizado em separado
incluir um arquivo com a extenso. Mqh. Esses arquivos esto ligadas ao programa durante a
compilao cdigo usando a directiva # include.

Funo dados
Um exemplo de utilizao mais de uma funo definida que ajuda a organizar a sada do texto
informaes sobre o atual trabalho de um EA. Esta funo lhe permite abandonar a funo
Comment () para apresentar o texto na janela do grfico.A funo percebido como um indicador
em um grfico separado subwindow da janela.

Evento Funo Monitoramento de


Um comerciante no pode detectar todos os eventos durante a negociao. O programa gravado
em MQL4 lhe permite detectar as mudanas nas condies comerciais ou quaisquer
situaes. user-defined funo Eventos () conecta-se EA utilizando a directiva # include e aplica
as chamadas para incluir outra funo, Inform ().

Volume definindo funo


O clculo do volume de uma posio a ser aberto uma das tarefas dos equity / gesto de
risco. O usurio-funo definida Lot () um pequeno exemplo utilizado para esses fins.

Negociao critrios para definir funo


A parte mais importante de qualquer negociao o tempo de deteco de entrar no mercado e
que o encerramento de uma posio. A criao das regras de negociao ou critrios o ncleo
da qualquer Expert Advisor. User-defined funo Critrio () est ligado com a directiva #
include. Mostra como uma EA pode decidir com base nos valores dos indicadores sobre se a
actual situao est em conformidade com um ou outro critrio.

Comrcio Funes
A actual situao tem sido analisadas com a funo Critrio (), ento agora temos de fazer trades:
abrir, fechar, alterar ou apagar uma ordem pendente. Todas estas operaes podem ser
colocados em separado user-defined funes: Comrcio (), Close_All () e Open_Ord (). As ordens
stop so movidos proteger usando a funo definida Tral_Stop de usurio ().

Erro ao processar funo


Erro de controle parte integrante de um Expert Advisor. Este voc quem determina como
processar a mensagem sobre o comrcio movimentado contexto, no sobre os preos para o
smbolo solicitado, etc Em alguns casos, suficiente para exibir uma mensagem sobre o erro. Em
outros casos, seria razovel tentar repetir o comrcio pedido e aps um certo perodo de tempo.
necessrio determinar como um ou outro erro ser processado. A funo definida Erros de
usurio () mostrados nesta seo processos erros utilizando o operador seleo switch ().

Estrutura de um programa normal


A marcante em um programa normal sua estrutura que permite a sua fcil utilizao para algumas
funes definidas por usurios ou outros. Por convenincia, funes definidas por usurios so
geralmente formadas como incluir arquivos (. Mqh) que esto armazenados na
pasta Terminal_directory \ peritos \ include.
Como regra geral, um programa normal contm todas as trs funes especiais que chamam a userdefined funes necessrias para sua execuo. User-defined funes, por sua vez, podem ligar para
outro usurio, funes definidas para efeitos de execuo, cada um deles tenha a sua prpria finalidade
funcionalmente delimitadas.
Ao Especialista Assessor de usurio pode conter funes definidas com as mais diversas
propriedades. Algumas funes, por exemplo, so destinados aos eventos de monitoramento e sada de
dados convenientes, outras funes so utilizadas para formar comrcio pedidos, o terceiro funes so
destinados a diferentes clculos, por exemplo, para definir critrios de negociao, clculo de custos
ordem, etc A deciso sobre o que funciona para usar em um programa depende da EA e com que
finalidade servio o programa se destina a proporcionar ao usurio com um. Na fig. 155 a seguir, voc
pode ver um diagrama do bloco uma negociao normal EA construdo sobre um pequeno conjunto de
funes definidas pelo utilizador.

Fig. 155. Esquema de um programa normal (Expert Advisor).


As setas no diagrama mostram as relaes entre funes. Por exemplo, a ordem contabilstica em
funo da EA chamada a partir de funes especiais init () e comear (); ela tambm pode ser
chamado de qualquer outro local dentro do programa. Na parte direita do diagrama, as setas esto
conectando mostrado que simbolizam a possibilidade de pedir um user-defined funo da outra. Por
exemplo, a funo definindo critrios negociao no pode ser chamado de qualquer funo especfica,
mas pode ser convocado para a execuo de uma funo comercial. Os dados funo chamada a partir
da Funo deinit especiais () e, se necessrio, de outras funes, por exemplo, o erro de processamento
funo, o comrcio funes, ou a partir do evento funo de monitoramento. Os arquivos incluem
declarao da varivel no pode ser chamado a partir de qualquer funo, uma vez que as contidas no
cdigo no a descrio de uma funo que pode ser chamados e executados. Esse arquivo contm as
linhas da declarao varivel global, por isso apenas uma parte de um EA. A fim de compreender a
forma como as diferentes partes de uma relacionar em EA, vamos considerar a ordem de criao e uso
de arquivos de incluso.
Usando incluir arquivos
Se um programa aplicativo contm uma grande variedade de linhas de programa, s vezes difcil de
depurar-lo - o programador tem de percorrer o programa texto muitas vezes, a fim de fazer mudanas
no cdigo em uma ou outra localizao.Em tais casos, por convenincia, o programa pode ser dividido
em vrios fragmentos, cada um formado como incluir um arquivo separado. Incluir arquivos podem
conter quaisquer fragmentos cdigo a ser usado no programa. Cada funo usada no programa
geralmente formado como incluir um arquivo. Se vrias funes esto interligadas logicamente, incluir
um arquivo pode conter a descrio de vrias funes definidas pelo utilizador.
Na seo Informaes sobre uma Conta, que consideramos um exemplo de cdigo que impede a
proteco contra a utilizao no autorizada de programas empresariais. No Expert Advisor check.mq4, a
parte correspondente do programa representado como o cdigo de utilizador definido funo Check (),

a descrio do que est contido diretamente no cdigo-fonte da EA. Nas EAusualexpert.mq4 (ver Fig.
91,3), esta funo utilizada, tambm. No entanto, neste caso, a funo formado como incluir o
arquivo Check.mqh.
Funes Definidas Por Usurio Marque ()
bool Check ()
A funo retorna TRUE, caso as condies de utilizao do aplicativo programa sejam cumpridas. Caso
contrrio, retorna FALSE.
As condies de utilizao do programa so consideradas como cumpridas, se:

o programa usado em uma conta demo;


a conta foi aberta com SuperBank;
o usurio tenha fixado o valor correto da varivel externa livramento condicional quando
trabalhava em uma conta real.

Os arquivos incluem Check.mqh contendo a descrio da funo definida pelo utilizador-Check ():
//------------------------------------------------ --------------------------------/ / Check.mqh
/ / O programa destinado a ser utilizado como um exemplo em MQL4
Tutorial.
//------------------------------------------------ ---------------------------- 1 -/ / A funo controlar a legalidade do programa usado
/ / Entradas:
/ / - Varivel global "livramento condicional"
/ / - Local constante "SuperBank"
/ / Retorno valores:
/ / True - se as condies de utilizao sejam cumpridas
/ / Falso - se as condies de utilizao so violados
//------------------------------------------------ ---------------------------- 2 -extern int livramento condicional = 12345; / / Senha para trabalhar em uma
conta real
//------------------------------------------------ ---------------------------- 3 -bool Check () / / Definido pelo usurio uno
(
if (IsDemo () == true) / / Se for uma conta demo, ento ..
retorno (true); / / .. no existem outras limitaes
quando (AccountCompany () == "SuperBank") / / Para os clientes corporativos
..
return (true); / / .. nenhuma senha for necessria
Key AccountNumber int = () * 2 + 1000001; / / Calcular a tecla
if (Key == livramento condicional) / / Se a senha for verdade, ento ..
return (true); / / .. permitem ao usurio trabalhar em uma conta real
Informar (14); / / Mensagem sobre o uso indevido
return (false); / / Sair do usurio-funo definida
)
//------------------------------------------------ ---------------------------- 4 - fcil notar que inclua o nome do arquivo o mesmo que o nome da funo que ele contm. Esta no
exigido pelas regras do MQL4. Geralmente, o nome de um arquivo include no ter de ser igual ao
nome da funo que ele contm. Ele se torna ainda mais evidente, se considerarmos que um arquivo
pode conter a descrio das diversas funes ou fragmento de um programa que no uma funo de

todo. No entanto, a prtica de dar um arquivo incluir o mesmo nome do que continha a funo
vivel.Isto facilita consideravelmente o trabalho de um programador: usando os nomes de arquivo, ele
ou ela ser facilmente saber quais funes existem na pasta Terminal_directory \ peritos \
include. De forma a incluir o programa fragmento contido no arquivo, voc dever usar a directiva #
include.
Directiva # include
# include <nome_do_ficheiro>
# include "File name"
A directiva # include pode ser especificado em qualquer local dentro do programa. No entanto, todos os
fragmentos includos so colocados no incio do texto-fonte arquivo. Pr ir substituir a linha # include
<file_name> (ou # include "nome_do_arquivo") com o contedo do arquivo do nome indicado.
ngulo entre parnteses significa que o arquivo ser retirado do diretrio padro Terminal_directory \
peritos \ incluem (o diretrio atual no visualizada). Se o nome do arquivo est entre aspas, vai ser
pesquisado no diretrio atual, ou seja, no diretrio que contm o arquivo bsico do texto-fonte (o
diretrio padro no visualizada).
Abaixo est um normal Expert Advisor, usualexpert.mq4. Tudo incluir arquivos so colocados na cabea
parte do programa.
//------------------------------------------------ --------------------------------------/ / Usualexpert.mq4
/ / O cdigo deve ser usado apenas para fins educacionais
.
//------------------------------------------------ ---------------------------------- 1 -# propriedade copyright "Copyright Book, 2007"
# propriedade link "http://AutoGraf.dp.ua"
//------------------------------------------------ -------------------- -------------- 2 -# include <stdlib. mqh>
# include <stderror. mqh>
# include <WinUser32. mqh>
//------------------------------------------------ -------------------- ------------- - 3 -# include <Variables. mqh> / / Descrio das variveis
# include <Confira. mqh> / / C Hecking legalidade dos programas usados
# include <Terminal. mqh> / / Portaria contabilidade
# include <Eventos. mqh> / / Evento funo de monitoramento
# include <Inform. mqh> / / Dados funo
# include <Comrcio. mqh> / / Comrcio funo
# include <Open_Ord. mqh> / / Abrindo uma ordem do modelo predefinimos
# include <Close_All. mqh> / / Fechar todas as encomendas do modelo
predefinimos
# include <Tral_Stop. mqh> / / StopLoss modificao para todas as
encomendas do modelo predefinimos
# include <Lot. mqh> / / Clculo do montante de lotes
# include <Criterion. mqh> / / Trading critrios
# include <Erros. mqh> / / Erro ao processar funo
//------------------------------------------------ ------------- ------------------- - 4 -int init () / / Funo Especial 'init'
(
Level_old = MarketInfo (Symbol (), MODE_STOPLEVEL); / / Min. distncia

Terminal (); / / Portaria funo contabilstica


retorno; / / Sair init ()
)
//------------------------------------------------ ------------- ------------------- - 5 -int start () / / Especial funo 'iniciar'
(
if (Check () == false) / / Se as condies de utilizao ..
retorno; / / .. no so cumpridas, ento saia
PlaySound ( "tick.wav"); / / Em cada carrapato
Terminal (); / / Portaria funo contabilstica
Eventos (); / / Informaes sobre os eventos
Comrcio (Critrio ()); / / Comrcio funo
Informar (0); / / Para mudar a cor dos objectos
retorno; / / Sair start ()
)
//------------------------------------------------ ------------- ------------------- - 6 -int deinit () / / Funo Especial deinit ()
(
Informar (- 1); / / Para excluir objetos
retorno; / / Sair deinit ()
)
//------------------------------------------------ ------------- ------------------- - 7 -No bloco 2.3, estamos includos no programa padro arquivos stdlib.mqh, stderror.mqh e
WinUser32.mqh utilizando a directiva # include. Ela no necessrio usar esses arquivos no
programa. Por exemplo, stderror.mqh arquivo contm a definio do padro utilizado no erro constantes
transformaes. Se no for prestado tratamento de erro no programa (ou seja, essas constantes no so
usados), ento no h necessidade de incluir esse arquivo em texto-fonte. Ao mesmo tempo,
geralmente necessrio incluir esses arquivos em um programa normal.
No bloco 3.4, o programa inclui alguns arquivos contendo a descrio das funes definidas pelo
utilizador. Utilizando a directiva # include na linha abaixo:
# include <Confira. mqh> / / C Hecking legalidade dos programas usados
o texto-fonte do programa inclui a funo definida Check-usurio (). Programador pode ver o cdigo
fonte do EA (neste caso,usualexpert.mq4) como ela representada acima. No entanto, o texto-fonte do
programa modificado na compilao, ou seja, cada linha contendo a directiva # include substitudo
no programa com o texto contido no arquivo do nome indicado. Assim, um arquivo executvel. Ex4
criado com base no cdigo completo do Expert Advisor, em que cada linha # include
<nome_do_ficheiro> (ou # include "Nome do arquivo") substitudo pelo cdigo correspondente
fragmento.
Um exemplo de incluir um arquivo contendo um fragmento programa que no funo da descrio
arquivo Variables.mqh.Este arquivo est includo no programa texto na linha:
# include <Variables. mqh> / / Descrio das variveis
e contm a descrio das variveis globais utilizadas por diferentes funes definidas pelo utilizador.
//------------------------------------------------ ------------------- ------- -/ / Variables.mqh
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ ------------- -------- 1 --

/ / Descrio das variveis globais


extern dupla Lotes = 0,0; / / Quantidade de lotes
Percentual extern int = 0; / / Repartidos fundos percentual
StopLoss extern int = 100; / / StopLoss para novas encomendas (em pontos)
extern int TakeProfit = 40; / / TakeProfit para novas encomendas (em
pontos)
TralingStop extern int = 100; / / TralingStop mercado de encomendas (em
pontos)
//------------------------------------------------ -------- -------------- 2 -int
Level_new, / / Novo valor da distncia mnima
Level_old, / / Anterior valor da distncia mnima
Mas_Tip [6]; / / Portaria tipo array
/ / [] Ordem tipo: 0 = B, S = 1, 2 =, BL, SL = 3, 4 = BS, 5 = SS
//------------------------------------------------ ------ -------- -------- 3 -dupla
Lots_New, / / Quantidade de lotes para novas encomendas
Mas_Ord_New [31] [9], / / Corrente fim array ..
Mas_Ord_Old [31] [9]; / / .. velha ordem array
// 1st index = order number in the list
/ / [] [0] no pode ser detectado
/ / [] [1] para abrir preo (preo abs. valor)
/ / [] [2] StopLoss da encomenda (preo abs. valor)
/ / [] [3] TakeProfit da encomenda (preo abs. valor)
/ / [] [4] o nmero de ordem
/ / [] [5] ordem volume (abs. preo valor)
/ / [] [6] 0 = fim tipo B, S = 1, 2 =, BL, SL = 3, 4 = BS, 5 = SS
/ / [] [7] Despacho nmero mgico
/ / [] [8] 0 / 1 o facto de disponibilidade dos comentrios
//------------------------------------------------ ----------------------4 -De acordo com as regras de MQL4, qualquer varivel (incluindo aqueles mundial) devem ser declarados
antes de a primeira referncia a essa varivel. Por este motivo, o arquivo Variables.mqh est includa no
programa e os arquivos localizados acima das funes que usam os valores das variveis especificadas
neste arquivo. Pela mesma razo, todas as variveis globais so colocados nesse arquivo.
Em alguns (raros) casos, tecnicamente possvel declarar uma varivel global em incluir um arquivo que
descreve a funo, na qual o valor dessa varivel usada no primeiro programa. Nesses casos,
necessrio manter a ordem, incluindo o arquivo. Ou seja, a linha que contm o programa directiva #
include que inclui o arquivo (com a declarao de uma varivel global) para o programa deve ser
colocado acima do texto do que as linhas que incluem outros arquivos usando o valor dessa varivel
global.
Em outros casos, mesmo tecnicamente impossvel fazer isso. Por exemplo, se temos dois incluir
arquivos, cada um deles usando duas variveis globais, um dos quais declarada em um arquivo e outro
declarado no outro arquivo, chegaremos a um erro na elaborao desse programa, uma vez que,
independentemente do processo, incluindo a ordem, uma das variveis usadas antes que seja
declarado no programa. Por isso mesmo, uma prtica habitual em um programa normal de declarar
todas as variveis globais, sem excepes, em um arquivo que est includo no programa antes de
outros arquivos que contm a descrio de funes definidas pelo utilizador.
No bloco 1.2 de incluir o arquivo Variables.mqh, todas as variveis so externas especificado, os valores
de que se determine a quantidade de lotes para novas encomendas, a percentagem atribuda a margem
livre para novas encomendas, a solicitao de preos para parar de encomendas do mercado
encomendas a ser aberto, bem como a distncia de TralingStop para modificao de ordem
StopLoss. Nos blocos 2-4, outras variveis globais so dadas, o sentimento de que se tornar evidente

aps examinar as correspondentes funes definidas pelo utilizador. As subsees desta seo
representam incluir arquivos, cada um contendo a descrio das funes definidas por usurios do
mesmo nome.
Ordem Contabilidade
Ns mencionados acima, que no havia regras estritas para fazer programa algoritmos. Ao mesmo
tempo, a esmagadora maioria dos algoritmos implica uma tomada de decises comerciais de acordo com
o actual estado das encomendas disponveis.Em alguns casos, por exemplo, uma abertura do mercado
no precisam de nenhuma outra forma ordens disponveis no mercado a partir do momento do
comrcio. Em outros casos, no pare de ordens disponveis no mercado pode ser vista uma condio
necessria para a colocao de uma encomenda pendente. Sabemos tambm alguns algoritmos que
implica colocar duas encomendas pendentes dirigidos de forma diferente.
A fim de cumprir os requisitos de uma ou outra ttica ou estratgia, o momento da tomada de deciso,
voc deve saber sobre o status atual - o que mercado e encomendas pendentes esto disponveis e
quais so as caractersticas que eles tm? Voc pode usar uma das duas solues possveis.
De acordo com a primeira soluo, o programa necessrio fragmentar cdigo (no qual so analisadas as
ordens) escrito diretamente no local no programa, onde o conjunto de ordens disponveis e suas
caractersticas devem ser encontradas para fora. Esta soluo tecnicamente vivel, mas que acaba por
ser ineficiente, se voc quiser fazer alteraes no algoritmo. Neste caso, o programador tem que analisa
o programa em todos os locais onde so analisados os status ordem, e fazer alteraes em cada
localidade. Outro, mais eficaz soluo criar uma ordem universal contabilidade funo uma vez e
utiliz-lo todas as vezes, quando voc quiser atualizar as informaes sobre o status atual ordem. Por
um lado, esta soluo permite que voc reduza o programa cdigo. Por outro lado, permite que o
programador para usar esta funo quando j prontas e codificao outros programas.
No intuito de criar uma ordem contabilstica funcionar corretamente, voc deve primeiro decidir quais
parmetros devem ser contabilizados. Na maioria dos casos, os valores dos seguintes parmetros so
usados na tomada de decises comerciais:

montante total de encomendas;


a quantidade de encomendas de cada tipo (por exemplo, a quantidade de encomendas Comprar,
SellStop ordens, ou BuyLimit despachos, etc);
todas as caractersticas de cada ordem (bilhete, StopLoss e TakeProfit nveis de volume em lotes,
etc.)

As informaes acima devem estar disponveis para outras funes, a saber, aqueles, em que esta
informao processada. Por esta razo, todos os parmetros que caracterizam fim estados so os
valores globais das matrizes. No total, esto previstas trs matrizes de ordem contabilstica:

a matriz de encomendas actual, Mas_Ord_New, que contm informaes sobre todas as


caractersticas do mercado e todas as encomendas pendentes disponvel no momento atual, ou
seja, dentro do perodo da ltima execuo da funo;
a matriz de velhas ordens, Mas_Ord_Old, que contm informaes sobre todas as caractersticas
do mercado e todas as encomendas pendentes disponveis no momento da execuo da funo
anterior;
Mas_Tip a matriz, os valores dos quais so os montantes das ordens de tipos diferentes (no
momento atual).

Arrays Mas_Ord_New e Mas_Ord_Old so semelhantes e equidimensional; a diferena entre eles o que


reflecte uma antiga do estado atual das encomendas, enquanto a segunda mostra a um estado
anterior. Vamos dar uma considerao mais atenta aos valores contidos nos elementos dessas matrizes.
Tabela 4. Correspondncia dos elementos de arrays Mas_Ord_New e Mas_Ord_Old com caractersticas
ordem.
No
definido

Abrir
Nmero de
StopLoss TakeProfit
Preo
pedido

Volume, Tipo de
em lotes Ordem

Magic
Number

Comentar

ndices
0
1
2
3
4
5
6
7
8
0 2,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
1 0,0
1,2583 1,2600 1,2550
123456,0
1.4
1,0
1177102416,0 1,0
2 0,0
1,2450 1,2580 1,2415
123458,0
2.5
2,0
1177103358,0 0,0
3 0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
. . . 0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
30 0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
0,0
O primeiro ndice da matriz (linhas) define o nmero da ordem do array. As caractersticas de primeira
ordem detectado (entre todas as ordens no mercado aberto e colocado encomendas pendentes) so
colocadas na primeira linha da matriz, as da segunda ordem detectadas sero colocadas na segunda
linha, etc O tamanho do array para o primeiro ndice igual a 31, deste modo, a matriz destinado a
armazenar informao de cerca de 30 ordens de, no mximo, se eles esto simultaneamente disponveis
em uma conta de explorao. Se a estratgia comercial permite que a disponibilidade de mais de trinta
ordens simultaneamente, voc dever especificar o valor correspondente para os primeiros ndice
quando voc declarar o array. (Na maioria dos casos, o valor de 30 exceda consideravelmente a
necessidade real geralmente varia de 2 a 10.15 ordens. Usamos o valor de 30 neste exemplo, pois
suponho que a funo pode ser usado para muito incomum estratgias comerciais, como bem).
O segundo ndice na tabela (colunas) representa ordem caractersticas. Cada elemento da matriz com o
segundo ndice igual a 1 contm o valor da encomenda abertas preo, com ndice 2 - eles contm o
valor de StopLoss fim, 3 - TakeProfit, etc (ver Tabela 4). Array elemento com ndice [0] [0], tem um
valor que igual quantidade total de ordens disponveis no array. N array elementos que tenham a
primeira ou a segunda ndices iguais a 0 so utilizados (com excepo elemento com ndice [0] [0]).
A Tabela 4 representa o status de uma matriz que contm informaes sobre dois despachos que esto
simultaneamente disponveis no comrcio em um determinado momento. Mas_Ord_New A matriz
elemento [0] [0] tem o valor de 2,0 - o montante total das encomendas de dois. Os elementos da
primeira linha da matriz conter os valores das caractersticas do mercado fim Sell (Mas_Ord_New [1]
[6] = 1,0, consulte Tipos de Ofcios), aberta pelo lote 1-4 (Mas_Ord_New [1] [5] = 1.4 ) E com o
nmero 123456 (Mas_Ord_New [1] [4] = 123456,0). O valor do elemento Mas_Ord_New [1] [8] = 1,0
significa que este despacho no tem comentrio campo vazio. Na segunda linha da matriz, os valores
que caracterizam a segunda ordem esto contidas. Particularmente, o elemento matriz Mas_Ord_New
[2] [6], tem o valor de 2,0, isso significa que BuyLimit.
Array Mas_Tip representa a quantidade de encomendas de cada tipo. Os valores desta matriz ndices so
atribudos aos tipos de trfegos (ver Tipos de Ofcios). Isto significa que o elemento de array Mas_Tip
com ndice 0 contm o valor de mercado dos despachos do tipo Buy simultaneamente disponveis no
comrcio, o ndice 1 significa Vender quantidade de encomendas, 2 significa que o ndice de BuyLimit
despachos, etc Para a situao mostrada na Tabela 4, os elementos do array Mas_Tip tero os seguintes
valores:
Tabela 5. Correspondncia dos elementos do array Mas_Tip com a quantidade de encomendas de
diferentes tipos.

Comprar
Vender
BuyLimit
SellLimit
BuyStop
SellStop
ndice
0
1
2
3
4
5
Valor
0
1
1
0
0
0
Neste caso, os valores dos elementos do array Mas_Tip implicam o seguinte: Mas_Tip [1] igual a 1
significa que existe uma ordem Sell negociados; Mas_Tip [2] igual a 1 significa que existe uma ordem
pendente BuyLimit na negociao. Outros elementos do array tm valores zero - isto significa que no
existem esses tipos de ordens de negociao. Se h vrias encomendas do mesmo modelo
simultaneamente disponveis no comrcio, o elemento correspondente da matriz ter o valor
correspondente ao montante de tais ordens. Por exemplo, se existem trs ordens BuyStop na
negociao, o elemento Mas_Tip [4] ter o valor de 3.
A ordem contabilstica funo Terminal () sugeriu incluir aqui formado como arquivo Terminal.mqh.
Funes Definidas Por Usurio Terminal ()
int Terminal ()
As contas funo do mercado e encomendas pendentes. A execuo da funo traduz-se na
transformao dos valores das seguintes matrizes globais:

Mas_Ord_New - o conjunto de caractersticas de ordens disponveis a partir do momento da


execuo da funo;
Mas_Ord_Old - o conjunto de caractersticas de ordens disponveis a partir do momento da
execuo da funo anterior;
Mas_Tip - a matriz do montante total das encomendas de todos os tipos.

Incluir arquivo Terminal.mqh que contm a descrio da ordem contabilstica funo Terminal ():
//------------------------------------------------ -------------------/ / Terminal.mqh
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ ----------------------------- 1 -/ / Portaria funo contabilstica
/ / Global variveis:
/ / Mas_Ord_New [31] [9] / / O mais recente conhecido ordens array
/ / Mas_Ord_Old [31] [9] / / O anterior (antigo) ordens array
/ / 1o ndice = nmero de ordem
/ / [] [0] no definida
/ / [] [1] para abrir preo (preo abs. valor)
/ / [] [2] StopLoss da encomenda (preo abs. valor)
/ / [] [3] TakeProfit da encomenda (preo abs. valor)
/ / [] [4] o nmero de ordem
/ / [] [5] ordem volume em lotes (preo abs. valor)
/ / [] [6] 0 = fim tipo B, S = 1, 2 =, BL, SL = 3, 4 = BS, 5 = SS
/ / [] [7] fim nmero mgico
/ / [] [8] 0 / 1 comentrio disponibilidade
/ / Mas_Tip [6] / / Array da quantidade de encomendas de todos os tipos
/ / [] Ordem tipo: 0 = B, S = 1, 2 =, BL, SL = 3, 4 = BS, 5 = SS
//------------------------------------------------ ----------------------------- 2 -int Terminal ()
(
Qnt int = 0; / / Pedidos counter
//------------------------------------------------ ----------------------------- 3 --

ArrayCopy (Mas_Ord_Old, Mas_Ord_New); / / Salva o precedente histrico


Qnt = 0; / / Zeroize ordens counter
ArrayInitialize (Mas_Ord_New, 0); / / Zeroize o array
ArrayInitialize (Mas_Tip, 0); / / Zeroize o array
//------------------------------------------------ ----------------------------- 4 -for (int i = 0; i <OrdersTotal (); i + +) / / Para mercado, e enquanto se
aguarda ordens
(
if ((OrderSelect (i, SELECT_BY_POS) == true) / / Se houver uma prxima a
& & (OrderSymbol () == Symbol ())) / / .. e os nossos par cambial
(
//------------------------------------------------ --------------------- 5
-Qnt + +; / / Valor das encomendas
Mas_Ord_New [Qnt] [1] = OrderOpenPrice (); / / Portaria abertas preo
Mas_Ord_New [Qnt] [2] = OrderStopLoss (); / / SL preo
Mas_Ord_New [Qnt] [3] = OrderTakeProfit (); / / TP preo
Mas_Ord_New [Qnt] [4] = OrderTicket (); / / Nmero de ordem
Mas_Ord_New [Qnt] [5] = OrderLots (); / / Quantidade de lotes
Mas_Tip [OrderType ()] + +; / / Valor das ordens do tipo
Mas_Ord_New [Qnt] [6] = OrderType (); / / Tipo de Ordem
Mas_Ord_New [Qnt] [7] = OrderMagicNumber (); / / Nmero mgico
if (OrderComment () == "")
Mas_Ord_New [Qnt] [8] = 0; / / Se no houver um comentrio
diferente
Mas_Ord_New [Qnt] [8] = 1; / / Se houver um comentrio
//------------------------------------------------ --------------------- 6
-)
)
Mas_Ord_New [0] [0] = Qnt; / / Valor das encomendas
//------------------------------------------------ ----------------------------- 7 -retorno;
)
//------------------------------------------------ ----------------------------- 8 -No bloco 1-2, damos um comentrio descrevendo as matrizes globais utilizadas na funo. As matrizes
globais so declaradas em um arquivo include Variables.mqh. No bloco 3.4, o contedo do array
Mas_Ord_New copiado para a matriz Mas_Ord_Old.Assim, os j conhecidos estado das encomendas
armazenada e que pode ser utilizado mais no programa. Em seguida, os valores dos elementos de arrays
Mas_Ord_New e Mas_Tip mostrando o novo estatuto das ordens tem sido zeroized antes de os dados
sejam atualizados no bloco 4.7.
O bloco 4.7 contm o ciclo 'para', em que todos na expectativa do mercado e as ordens so controlados
um por um para o smbolo, para a janela da qual anexado EA. As encomendas so selecionados
utilizando a funo OrderSelect (), de acordo com o MODE_TRADES parmetro definido por padro. No
bloco 5.6, todas as caractersticas necessrias so calculados para os selecionados ordens, os dados
obtidos so armazenados no conjunto de novas encomendas, Mas_Ord_New. Ao mesmo tempo, a
quantidade de encomendas de todos os tipos calculado, os valores obtidos so atribudos aos
correspondentes elementos do array Mas_Tip. Aps o fim do ciclo, o montante total de encomendas
para o smbolo atribudo ao elemento Mas_Ord_New [0] [0].
Deve-se notar que em separado e fechado mercado ordens eliminado encomendas pendentes (a
execuo da funo OrderSelect () com o parmetro MODE_HISTORY) no so analisadas. Como regra,
as informaes sobre encomendas fechadas e apagadas no utilizado na negociao EAs. As
informaes sobre encomendas fechadas e apagadas representar a histria de uma conta de explorao.

Essa informao pode ser usada, por exemplo, para criar diagramas que representam a histria da
capital investido e real dos resultados comerciais. No entanto, ela no pode ser til de alguma forma
para fazer novas decises comerciais. Tecnicamente, essa parte de encomendas podem ser
contabilizados de forma semelhante. No entanto, uma tarefa separada que no tem nenhuma relao
negociao propriamente dita.
Os eventos relacionados com as encomendas so analisados em um programa com base na comparao
dos dados disponveis nos arrays considerada acima. Por exemplo, se Mas_Ord_Old array contm
informaes sobre uma encomenda pendente numerado como 246.810, enquanto a matriz
Mas_Ord_New contm os dados sobre a mesma ordem 246810, mas a ordem de outro tipo, isso
significa que, enquanto se aguarda uma ordem tenha sido modificada em um mercado um. Tambm
necessrio analisar quando efectuam encomendas trades (a ser considerado mais tarde).
Antes da funo Terminal () executado pela primeira vez, arrays Mas_Ord_Old e Mas_Ord_New esto
vazias, ou seja, cada um dos elementos de ambas as matrizes tem valor zero. Isto significa que, aps a
primeira execuo da funo, o leque Mas_Ord_Old na linha:
ArrayCopy (Mas_Ord_Old, Mas_Ord_New); / / Conservar a histria anterior
herda "zero" a partir da matriz Mas_Ord_New estado, o que resulta no aparecimento de falsos alertas de
evento a realizao do evento funo de monitoramento. Para evitar isso, a primeira execuo da
funo Terminal () realizado na fase de iniciao , E os eventos no so processadas aps esta
execuo da funo (veja a funo init () no Expert Advisor usualexpert.mq4).
Funo dados
Um normal Expert Advisor utilizada em nosso trabalho prtico compara favoravelmente aos seus
anlogos simples, porque ele fornece um comerciante com um alto nvel de informao de suporte.
Durante a negociao, a situao muda o tempo todo, vrios eventos tm lugar. Para fazer bom
decises, um comerciante deve ser plenamente informado. Para este efeito, so utilizados em diversas
funes Expert Advisors. Estas funes so destinados a informar o usurio sobre um determinado
conjunto de factos e processos.
Em simples Expert Advisors, em regra, esta tarefa feita pela norma Comentar funo () que exibe o
texto predefinido no canto superior esquerdo da janela do smbolo. Essa informao no est de sada
mtodo bastante confortvel, uma vez que o texto pode ser frequentemente sobrepem ao preo
grfico. Portanto, este mtodo s pode ser usado em uma quantidade limitada de casos, a exibio de
mensagens curtas.
Vamos estudar aqui uma conceptualmente diferente mtodo de exibio de informaes - toda a
mensagem mostrada em uma janela separada, enquanto objetos grficos so utilizados para formar
mensagem textos. A utilizao de objetos grficos produz uma vantagem palpvel, j que voc pode
mover objetos (ao contrrio textos mostrados usando Comment ()), criando, desta forma, sua
mensagem histria.
Um de distintos subwindow exibio das informaes criada utilizando um costume indicador ajustado
proporcionalmente. O nico objectivo deste indicador a criao de subwindow que, por isso no os
clculos so realizados no indicador, nem indicando linhas so construdos na mesma. O cdigo do
indicador Inform.mq4 maio olhar como se segue:
//------------------------------------------------ -------------------/ / Inform.mq4
/ / O cdigo deve ser usado apenas para fins educacionais
.
//------------------------------------------------ --------------------

# propriedade indicator_separate_window / / Separar indicador janela


//------------------------------------------------ -------------------int start () / / Especial funo start ()
(
)
//------------------------------------------------ -------------------Geralmente, um programador pode acrescentar no Indicador do seu cdigo desejado e contribuir para
as suas propriedades. Por exemplo, voc pode exibir indicando linhas em uma determinada parte do
indicador subwindow. No exemplo acima, um simples cdigo do indicador dado, na janela de objetos
grficos que sero apresentados.

Funes Definidas Por Usurio Inform ()


Informe int (int Mess_Number, int Number = 0, duplo Valor = 0,0)
A funo exibe na subwindow do indicador Inform.mq4 mensagens criadas utilizando objetos grficos . A
funo controla a posio dos objetos grficos no indicador subwindow: a cada nova mensagem
exibida na parte inferior da janela (linha inferior) e coloridos na cor desejada, as mensagens
anteriormente demonstrado ser movido para a parte superior da janela ( uma linha para cima). Se no
houver novas mensagens so apresentadas em 15 segundos, todas as mensagens anteriormente
exibidos na janela que ser colorida em cinza (a fim de no criar distores para o utilizador) quando o
programa remete para a funo.
Parmetros:
Mess_Number - nmero de mensagem que pode ter os seguintes valores:

(zero) 0 - nenhuma mensagem exibida, esse modo usado para repor o temporizador;
(menos um) -1 - todos os objetos grficos criados atravs da funo ser excludo;
(uma ou mais) - o nmero da mensagem a ser exibida no indicador subwindow;

- Nmero inteiro utilizado em algumas mensagens;


Valor - nmero real usado em algumas mensagens.
Informar a funo () que cria objetos grficos, como as outras funes normais em um EA, formado
como incluir um arquivo,Inform.mqh:
//------------------------------------------------ ------------------- ------- -/ / Inform.mqh
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------- -------------- 1 -/ / Funo que exibe mensagens na tela grfica.
//------------------------------------------------ -------- -------------- 2 -Informe int (int Mess_Number, int Number = 0, duplo Valor = 0,0)
(
/ / Int Mess_Number / / Mensagem nmero
/ / Nmero int / / Integer que ser aprovado
/ / Valor duplo / / Real nmero passou a ser
int Win_ind; / / Indicador janela nmero
string Graf_Text; / / Mensagem line
color Color_GT; / / Cor da mensagem line
static int Time_Mess; / / hora da ltima publicao da mensagem

static int Nom_Mess_Graf; / / Grfica de mensagens counter


static string Name_Grf_Txt [30]; / / Array grfica mensagem de nomes
//------------------------------------------------ -------------- -------- 3 -Win_ind = WindowFind ( "informar"); / / Buscando indicador janela nmero
if (Win_ind <0) return; / / Se no houver essa janela, deixe
//------------------------------------------------ -------- -------------- 4 -if (Mess_Number == 0) / / Isto acontece em todos os carrapatos
(
if (Time_Mess == 0) return; / / Se ele j cinza
if (GetTickCount () - Time_Mess> 15000) / / A cor tornou-se atualizado
dentro de 15 seg
(
for (int i = 0; i <= 29; i + +) / / cor cinza com linhas
ObjectSet (Name_Grf_Txt [i], OBJPROP_COLOR, Gray);
Time_Mess = 0; / / Bandeira: Todas as linhas so cinza
WindowRedraw (); / / redesenhando objetos
)
retorno; / / Sada da funo
)
//------------------------------------------------ -------- -------------- 5 -if (Mess_Number ==- 1) / / Isto acontece em deinit ()
(
for (i = 0; i <= 29; i + +) / / By objeto ndices
ObjectDelete (Name_Grf_Txt [i]); / / Supresso do objeto
retorno; / / Sada da funo
)
//------------------------------------------------ -------- -------------- 6 -Nom_Mess_Graf + +; / / Grfica de mensagens counter
Time_Mess = GetTickCount (); / / ltima publicao tempo
Color_GT = Lime;
//------------------------------------------------ ---------- -------- ---- 7 -switch (Mess_Number) / / Ir a mensagem
(
case 1:
Graf_Text = "Fechado ordem Comprar" + Nmero;
PlaySound ( "Close_order.wav"); break;
case 2:
Graf_Text = "Fechado para Vender" + Nmero;
PlaySound ( "Close_order.wav"); break;
case 3:
Graf_Text = "Eliminado ordem pendente" + Nmero;
PlaySound ( "Close_order.wav"); break;
case 4:
Graf_Text = "Inaugurado ordem Comprar" + Nmero;
PlaySound ( "Ok.wav"); break;
caso 5:
Graf_Text = "Aberto para Vender" + Nmero;
PlaySound ( "Ok.wav"); break;
caso 6:
Graf_Text = "Colocado ordem pendente
"+ Nmero;
PlaySound ( "Ok.wav"); break;
caso 7:
Graf_Text = "Ordem
"Nmero + +" modificado para o mercado um ";
PlaySound ( "Transform.wav"); break;
caso 8:
Graf_Text = "Reopened ordem" + Nmero; break;
PlaySound ( "Bulk.wav");

caso 9:
Graf_Text = "Parcialmente fechado ordem" + Nmero;
PlaySound ( "Close_order.wav"); break;
caso 10:
Graf_Text = "New distncia mnima:" + Nmero;
PlaySound ( "Inform.wav"); break;
caso 11:
Graf_Text = "No dinheiro suficiente para" +
DoubleToStr (Valor, 2) + "lotes";
Color_GT = Vermelho;
PlaySound ( "Oops.wav"); break;
caso 12:
Graf_Text = "Tentando fechar ordem" + Nmero;
PlaySound ( "expert.wav"); break;
caso 13:
if (Number> 0)
Graf_Text = "Tentando abrir Vender fim ..";
diferente
Graf_Text = "
Tentando Comprar abertas fim .. ";
PlaySound ( "expert.wav"); break;
caso 14:
Graf_Text = "Senha invlida. EA no funciona.";
Color_GT = Vermelho;
PlaySound ( "Oops.wav"); break;
caso 15:
switch (Number) / / Indo para o nmero do erro
(
case 2: Graf_Text = "erro comum". break;
caso 129: Graf_Text = "Wrong preo." break;
caso 135: Graf_Text = "Preo alterado." break;
caso 136: Graf_Text = "No preos. Aguardando uma nova carrapato ..";
break;
caso 146: Graf_Text = "Trading subsistema est ocupado
"; Break;
caso 5: Graf_Text = "antiga verso do terminal."; break;
caso 64: Graf_Text = "Conta est bloqueado." break;
caso 133: Graf_Text = "Negociao proibido"; break;
default: Graf_Text = "Ocorreu erro" + Nmero; / / Outros erros
)
Color_GT = Vermelho;
PlaySound ( "Error.wav"); break;
caso 16:
Graf_Text = "Expert Advisor funciona apenas para EURUSD";
Color_GT = Vermelho;
PlaySound ( "Oops.wav"); break;
padro:
Graf_Text = "default" + Mess_Number;
Color_GT = Vermelho;
PlaySound ( "Bzrrr.wav");
)
//------------------------------------------------ - -------- ------------8 -ObjectDelete (Name_Grf_Txt [29]); / / excluir 29a (superior) objeto
for (i = 29; i> = 1; i -) / / Ciclo de regra dos ndices ..
(/ / .. de objetos grficos
Name_Grf_Txt [i] = Name_Grf_Txt [i - 1]; / / Criando objetos:
ObjectSet (Name_Grf_Txt [i], OBJPROP_YDISTANCE, 2 + 15 * i);
)
Name_Grf_Txt [0] = "Inform_" Nom_Mess_Graf + + "_" + Symbol (); / / Nome do
Objeto
ObjectCreate (Name_Grf_Txt [0], OBJ_LABEL, Win_ind, 0, 0); / / Criao
ObjectSet (Name_Grf_Txt [0], OBJPROP_CORNER, 3); / / Canto

ObjectSet (Name_Grf_Txt [0], OBJPROP_XDISTANCE, 450); / / Eixo


ObjectSet (Name_Grf_Txt [0], OBJPROP_YDISTANCE, 2); / / Eixo Y
/ /
ObjectSetText (Name_Grf_Txt [0], Graf_Text, 10, "Courier New", Color_GT);
WindowRedraw (); / / redesenhando todos os objetos
retorno;
)
//------------------------------------------ ------ - --------------------9 -No bloco 2.3, as variveis utilizadas na funo esto descritos. Para armazenar os nomes de objetos
grficos, o leque Name_Grf_Txt utilizado. De acordo com o mtodo aceito na funo, o programa cria
um novo objeto grfico para cada nova mensagem. O montante total dos objetos de 30, cada objeto
representa uma entrada localizada no texto uma linha. Em caso de resoluo de tela grande, a
quantidade de linhas a serem mostradas pode ser aumentada pelo aumento da quantidade de objetos a
serem criados.
No bloco 3.4, o nmero do subwindow do indicador "Informar" calculado para mensagens a serem
mostradas polegadas Se o indicador no for fixado, a funo pra de suas operaes. Se no houver
nenhuma janela, as mensagens podem no ser exibidas, mas isso no afecta a operacionalidade da EA todas as outras funes iro funcionar nos seus modos normais, trades ser realizada, tambm.
No bloco 4.5, a mensagem cores so analisados. A funo com o parmetro Mess_Number = 0
chamada, no Consultor Especialista em todos os carrapatos (ver a funo start () no Expert
Advisor usualexpert.mq4). Se todos os objetos so cinza na histria anterior, a funo termina as suas
operaes. No entanto, se o valor da varivel Time_Mess no zero, as propriedades de todos os
objetos so alterados, ou seja, todos os objetos sero coloridos em cinza.
If (blocos 5-6) o parmetro Mess_Number =- 1 especificado na chamada de funo, todos os objetos
criados anteriormente execuo da funo so eliminados. Isso pode ser necessria quando a EA
destacada do smbolo janela. Nesse caso, segundo a regra comum, cada programa aplicativo deve
exclu-la todos os objetos criados durante a execuo (ver a funo deinit () noExpert
Advisor usualexpert.mq4) .
Se o controlo no programa transmitido ao bloco 6.7, isso significa que necessrio criar um novo
objeto grfico com propriedades exigidas e coloque-o na parte inferior do indicador subwindow (na linha
inferior; aqui, o termo de "linha" condicional, na verdade, a localizao dos objetos grficos
determinado pelas coordenadas predefinido). Cada objeto tem o seu recm-criado nome nico. Para
criar objetos com nomes, usamos a srie histrica da mensagem, esta a razo pela qual as mensagens
so colocados no balco bloco 6-7 (numa fase posterior, o valor da varivel Nom_Mess_Graf utilizado
para formar um nico nome, bloco 8 -- 9). aqui onde a ltima publicao tempo contabilizado e cor
de base estabelecida por novas mensagens (verde).
7.8 O bloco composto pelo operador 'mudar', no interior dos quais o controlo passado de acordo com
o valor do parmetro Mess_Number especificado na chamada de funo. Em cada "caso" deste operador
da varivel Graf_Text, atribudo um novo valor que o contedo da mensagem a ser exibida. Um
colorido especial est definido para algumas mensagens, por exemplo, vermelho para mensagens
importantes. Todas as mensagens so acompanhados com sons que so a execuo da norma
PlaySound funo () (ver Wave Files).
A criao de um novo objeto grfico e de substituio dos existentes, realizados no bloco 8.9. A
quantidade de objetos limitada, pelo que um objeto (um a mais antiga) suprimida toda vez quando
uma nova mensagem publicada. Todos os outros objectos existentes so deslocados uma linha para
cima. Os objetos so movidos por mudar suas propriedades - Coordenadas verticais. As coordenadas
horizontais dos objetos permanecem inalteradas.

Aps todos os preparativos necessrios tenham sido feitas (todos os objectos so movidos uma linha
para cima), um novo objeto com novas propriedades com nome nico e parcialmente determinada em
bloco 7.8 criado. O tipo do objeto o grfico Texto Label. Os objectos deste tipo esto posicionados
em relao janela do smbolo, que permite ao usurio mover preo grfico arbitrariamente, sem afetar
as posies das mensagens.
Informar a funo () pode ser chamado a partir de qualquer local no programa em que, implicitamente,
uma mensagem de texto deve ser exibido. Como resultado de um longo tratamento, as mensagens so
acumuladas na janela. O usurio pode visualizar as mensagens pelo redimensionamento da histria do
indicador subwindow (por exemplo, puxando para cima a sua borda superior). Opcionalmente, voc
tambm pode definir a janela altura de tal modo que o espao visvel exibe a quantidade desejada de
mensagem de linhas (de trs a quatro linhas so geralmente recomendado).

Fig. 156. Smbolo janela. Mensagem no indicador Subwindow.


fcil ver que a diversidade das mensagens exibidas pela funo pode ser aumentado. Se voc estiver
indo para expandir o programa, basta apenas adicionar a nova verso de casos em que o operador
"switch" (bloco 7 -- 8).
Evento Funo Monitoramento de
Muitos eventos tm lugar durante a negociao. Um comerciante pode ver alguns deles diretamente na
janela do smbolo, por exemplo, preo de mercado ou mudanas atravessadas indicador linhas. Outros
eventos, apesar de serem interessantes para um comerciante, tambm no so mostrados
explicitamente qualquer lugar. Uma parte considervel desses eventos podem ser detectados e tratados
utilizando MQL4.
Por exemplo, o seu tratamento pode mudar o centro condies comerciais muito pouco tempo antes
forem publicadas notcias importantes ou quando o mercado torna-se muito activo. Nesses casos, a
propagao ou a distncia mnima permitida para a colocao de ordens stop e para o fim solicitado
preos podem ser aumentados. Caso isso acontea, necessrio, primeiro, para detectar e levar a novas
condies comerciais em considerao, e, em segundo lugar , Para informar o comerciante sobre estas
alteraes.
Para resolver estas tarefas, voc pode usar o evento na sua funo de monitoramento Expert Advisor.
Funes Definidas Por Usurio Eventos ()
int Eventos ()

As alteraes na funo calcula a distncia mnima exigida para as encomendas e as suas ordens stop,
bem como as alteraes na lista de encomendas pendentes mercado e disponveis na conta. Para
executar a funo, voc deve usar a ordem contabilstica funo Terminal () em seu programa. Os
valores das seguintes matrizes globais so utilizados:

Mas_Ord_New - o conjunto de caractersticas de ordens disponveis a partir do momento da


funo Terminal () execuo;
Mas_Ord_Old - o conjunto de caractersticas de ordens disponveis a partir do momento anterior
ao da execuo da funo terminal ().

Os valores das seguintes variveis globais so utilizados:


- Level_new - o valor atual da distncia mnima;
- Level_old - o valor anterior da distncia mnima.
Para exibir as mensagens, a funo ir utilizar a funo Informar dados (). Se a funo Inform () no
est includo na Expert Advisor, mensagens no sero mostrados.
O evento funo de monitoramento Eventos () formado como incluir o arquivo Events.mqh:
//------------------------------------------------ ------------------------------/ / Events.mqh
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------------- 1 -/ / Evento funo de monitoramento.
/ / Global variveis:
/ / Level_new O novo valor da distncia mnima
/ / Level_old O valor anterior da distncia mnima
/ / Mas_Ord_New [31] [9] A ltima conhecida matriz de encomendas
/ / Mas_Ord_Old [31] [9] A velha matriz de encomendas
//------------------------------------------------ -------------------------- 2 -int Eventos () / / Usurio-funo definida
(
bool Conc_Nom_Ord; / / Adequar as encomendas em ..
/ / .. os antigos e os novos arranjos
//------------------------------------------------ -------------------------- 3 -Level_new = MarketInfo (Symbol (), MODE_STOPLEVEL); / / ltimo conhecidos
if (Level_old! = Level_new) / / Nova no o mesmo que o velho ..
(/ / Isso significa que a condio ter sido alterado
Level_old = Level_new; / / Novo "valor antigo"
Informar (10, Level_new); / / Mensagem: nova distncia
)
//------------------------------------------------ -------------------------- 4 -/ / Procura por perdida, escreva-alterou-se, parcialmente fechado e
reaberto encomendas
for (int idade = 1; velho <= Mas_Ord_Old [0] [0]; velho + +) / / Nos old
matriz de encomendas
(/ / Assumindo o ..
Conc_Nom_Ord = false; / / .. ordens no so iguais
//------------------------------------------------ --------------------- 5
-for (int novo = 1; nova <= Mas_Ord_New [0] [0]; novos + +) / / ciclo para o
array ..
(/ / .. De novas encomendas
//------------------------------------------------ ------------------ 6 --

if (Mas_Ord_Old [antigo] [4] == Mas_Ord_New [novo] [4]) / / nmero


correspondidas
(/ / Tipo de Ordem torna-se ..
if (Mas_Ord_New [novo] [6]! Mas_Ord_Old = [antigo] [6]) / / .. diferente
Informar (7, Mas_Ord_New [novo] [4]); / / Mensagem: modificados:)
Conc_Nom_Ord = true; / / A ordem encontrado, ..
break; / / etc .. sai ..
) / / .. o ciclo interno
//------------------------------------------------ ------------------ 7 -/ / Portaria nmero no corresponde
if (Mas_Ord_Old [antigo] [7]> 0 & & / / MagicNumber jogos
Mas_Ord_Old [antigo] [7] == Mas_Ord_New [novo] [7]) / / .. com a idade uma
(/ / Isso significa que ele seja reaberto ou parcialmente fechados
/ / Se volumes jogo, ..
if (Mas_Ord_Old [antigo] [5] == Mas_Ord_New [novo] [5])
Informar (8, Mas_Ord_Old [antigo] [4]); / / .. ele est reabrindo
else / / Em caso contrrio, ele era ..
Informar (9, Mas_Ord_Old [antigo] [4]); / / fechando parcialmente ..
Conc_Nom_Ord = true; / / A ordem encontrado, ..
break; / / etc .. sai ..
) / / .. o ciclo interno
)
//------------------------------------------------ --------------------- 8
-if (Conc_Nom_Ord == false) / / Se estamos aqui, ..
(/ / .. Isso significa que nenhuma ordem encontrada: (
if (Mas_Ord_Old [antigo] [6] == 0)
Informar (1, Mas_Ord_Old [antigo] [4]); / / Portaria Comprar fechada
if (Mas_Ord_Old [antigo] [6] == 1)
Informar (2, Mas_Ord_Old [antigo] [4]); / / Portaria Vender fechada
if (Mas_Ord_Old [antigo] [6]> 1)
Informar (3, Mas_Ord_Old [antigo] [4]); / / At fim suprimido
)
)
//------------------------------------------------ -------------------------- 9 -/ / Procura de novas encomendas
for (novo = 1; nova <= Mas_Ord_New [0] [0]; novos + +) / / No conjunto de
novas encomendas
(
if (Mas_Ord_New [novo] [8]> 0) / / Esta no uma novidade, mas reaberto
continuar; / / .. ou parcialmente fechados
Conc_Nom_Ord = false; / / Enquanto no foram encontrados resultados
para a (antiga = 1; velho <= Mas_Ord_Old [0] [0]; velho + +) / / para este
fim Pesquisando
(/ / .. Na matriz de velhas ordens
if (Mas_Ord_New [novo] [4] == Mas_Ord_Old [antigo] [4]) / / Matched nmero
..
(/ / .. da ordem
Conc_Nom_Ord = true; / / A ordem encontrado, ..
break; / / etc .. sai ..
) / / .. o ciclo interno
)
if (Conc_Nom_Ord == false) / / Se no for encontrado fsforos, ..
(/ / .. O intuito nova:)
if (Mas_Ord_New [novo] [6] == 0)
Informar (4, Mas_Ord_New [novo] [4]); / / Ordem abriu Comprar
if (Mas_Ord_New [novo] [6] == 1)
Informar (5, Mas_Ord_New [novo] [4]); / / Vender Ordem abriu
if (Mas_Ord_New [novo] [6]> 1)
Informar (6, Mas_Ord_New [novo] [4]); / / At encomenda
)
)

//------------------------------------------------ ------------------------- 10 -retorno;


)
//------------------------------------------------ ------------------------- 11 -Matrizes e variveis globais necessrios para a execuo da funo esto descritos no bloco 1.2. No
bloco 2.3, Conc_Nom_Ord varivel mais utilizada no cdigo de ordens anlise aberta.
A funo das faixas mudanas a distncia mnima para a colocao de ordens de paragem e de
encomendas. Por isso, o atual valor do mnimo Level_new distncia calculada em cada execuo da
funo (blocos 3-4) e, em seguida, em comparao com a anterior, o valor de Level_old (obtida durante
a anterior execuo da funo). Se os valores dessas variveis no so iguais uns aos outros, isso
significa que a distncia mnima foi modificada pela lidar centro pouco antes da ltima execuo da
funo.Neste caso, o valor atual da distncia mnima atribudo para a varivel Level_old (no sentido de
consider-la nas execues posteriores da funo), bem como a funo Inform () executado, a fim de
exibir a mensagem correspondente.
Geralmente, voc pode utilizar um mtodo semelhante para detectar outros eventos, por exemplo,
alteraes no spread, permisses para o comrcio dado smbolo (identificador MODE_TRADEALLOWED
na funo MarketInfo ()), a realizao de uma nova barra (ver Problema 27), o facto de atravessar
indicador linhas (ver fig. 107), o fato de se chegar a uma certa hora predefinida, etc O programa pode
detectar alguns eventos para utilizar em seus valores obtidos a EA, outros eventos - para informar o
usurio sobre elas.
Nos blocos 4-10, os estados do mercado e encomendas pendentes so analisados. Mais informaes
sobre mudanas nas encomendas prestado ao usurio. A anlise realizada em duas fases. Na
primeira fase, o programa detecta as alteraes que dizem respeito aos perdidos (fechado ou excludo),
alterando-tipo, parcialmente fechado e reaberto encomendas (blocos 4-9). Na segunda etapa (bloco 910), as novas encomendas sejam procura.
Em blocos 4.9, as ordens contabilizados no array Mas_Ord_Old so analisados. A quantidade de
iteraes do ciclo externo 'para' encontrado em funo do montante total de encomendas no array
(array Mas_Ord_Old elemento [0] [0]). Para verificar se a ordem for mantida, a partir do momento atual,
necessrio encontrar uma ordem semelhante s ordens matriz Mas_Ord_New.Esta pesquisa realizada
no ciclo interno 'para' (blocos 6-8), a quantidade de iteraes do que igual quantidade de
encomendas no array (array Mas_Ord_New elemento [0] [0]). Vamos continuar a denominao da
matriz Mas_Ord_Old 'velha matriz ", enquanto que o Mas_Ord_New -" nova matriz ".
Em blocos 6.8, o programa de pesquisas somente as ordens, as caractersticas de que so diferentes.
Por exemplo, no bloco 6.7, a ordem est marcada para o seu nmero (veja a regra dos ndices de
correspondncia com caractersticas ordem na Tabela 4). Se a velha ordem sob check-array jogos em
srie com uma das encomendas do novo array, isso significa que, pelo menos, esta ordem no for
fechada (ou excludo). Tambm necessrio verificar se o tipo de ordem alterada. Se sim, isso
significa que, enquanto se aguarda uma ordem seja modificado em um mercado um. Neste caso, a
mensagem correspondente exibido usando a funo Inform (). Independente sobre o fato de mudar
(ou manter inalterado) da ordem tipo, esta ordem no sero analisados mais longe: o programa sadas
internas do ciclo e, finalmente, comea uma nova iterao do ciclo externo.
Se o programa encontrar na execuo do bloco 6.7 que a velha ordem sob check-array no coincidir
com qualquer nmero de encomendas do novo array, o controlo passado para bloquear 7-8. Aqui, o
programa verifica se a actual forma do novo array tenha um MagicNumber no zero (todas as ordens de
abertura e colocado pela EA ter uma MagicNumber no zero). Se ele tem uma tal MagicNumber e este
parmetro coincide com o fim de MagicNumber a partir do antigo array sob controlo, significa que a
ordem negociada, mas foi alterada, de alguma forma. Existem duas situaes quando o nmero de

ordem pode ser alterada.


Situao 1. A ordem parcialmente fechado. Voc pode encerrar parcialmente um mercado ordem (no
uma pendente um!) Em duas fases, de acordo com a tecnologia aceites em MT 4. Na primeira fase, o
despacho inicial est completamente fechada. Ao mesmo tempo, uma nova ordem no mercado de um
volume menor aberta com o mesmo preo e aberto com a mesma ordem requerida para parar de
preos, como no despacho inicial. Essa nova ordem obtenha o seu nome nico, diferente do nmero do
despacho inicial a ser parcialmente fechada.
Situao 2. A ordem reaberto pelo centro lidar. Alguns bancos (devido sua contabilidade interna, as
regras especficas) forcedly fechar todas as ordens no mercado no final do dia de negociao ea
abertura imediata do mercado dos despachos do mesmo tipo e com o mesmo volume, mas ao preo
actual e menos swap. Este evento no afeta os resultados econmicos de uma negociao em conta de
forma alguma. Cada recm-inaugurado recebe o seu nmero exclusivo fim de que no condiz com os
nmeros das encomendas fechadas.
A diferena entre as duas situaes acima do volume de novas encomendas: eles so diferentes na
primeira situao, e eles mantm-se inalterados no segundo. Essa diferena usado em bloco 7.8 a
distino entre despachos modificada por razes diferentes. Em ambos os casos, exibida a mensagem
correspondente ( "o fim est parcialmente fechado ou a ordem seja reaberta").
Se o programa no tenha detectado a correspondncia (blocos 6-7) ou herdar (blocos 7-8) da ordem na
nova matriz pela concluso do ciclo interno, isso significa que a velha ordem sob check-matriz est
fechado ou suprimido. Neste caso, o controlo passado ao bloco 8-9, onde uma ou outra mensagem
ser exibida, de acordo com o tipo de ordem. No exemplo acima, trs tipos de mensagens so
realizados: por fim Compra, Venda e por fim para todos os tipos de encomendas pendentes. Em um caso
geral, essa seqncia pode ser ligeiramente modificado (alargada) - voc pode criar um grupo de
correspondentes mensagens para cada tipo de encomendas pendentes.
Na segunda fase, o programa considera as novas encomendas da ordem array (bloco 9-10). Isto feito
no intuito de detectar recm-inaugurado e colocado ordens. No ciclo externo 'para', o programa busca
em todas as ordens, as informaes sobre o que est armazenado na matriz de novas encomendas. Com
o intuito de identificar as encomendas reaberta ou parcialmente fechados, o programa utiliza uma
simples caracterstica - a disponibilidade de comentrio. Ao fechar parcialmente ou reabertura de uma
ordem, o servidor adiciona um comentrio que d o nmero do pedido inicial. A EA no usa comentrios
acima, de forma a disponibilidade de um comentrio que significa que a ordem sob controlo, no nova.
Se uma ordem no contm um comentrio, o programa procura por um despacho com o mesmo nmero
na antiga matriz. Se o programa encontrar a ordem tendo esse nmero entre as antigas ordens internas
no ciclo 'para', significa que a ordem no nova, mas foi aberto antes. No entanto, se o nmero da
encomenda a partir da nova matriz no coincidir com quaisquer ordens no antigo array, isso significa
que essa ordem um mercado aberto ou uma ordem colocada uma pendente. Na parte inferior do bloco
9-10, o programa pede para Inform funo (), a fim de exibir a mensagem correspondente, de acordo
com o tipo de ordem.
A utilizao da funo considerada Eventos () acaba por ser muito til na prtica. Uma vez que
utilizaram a funo de um EA, o programador normalmente usa-lo no seu trabalho futuro. Deve-se notar
que as funes separadamente Eventos () e Terminal () esto intimamente relacionados. Se voc quer
fazer alteraes em uma destas funes (por exemplo, para usar outros nomes para matrizes globais),
voc deve fazer as alteraes correspondentes na outra funo. Se voc usar comentrios em
encomendas para perceber a sua estratgia comercial, lhe deveria diferentemente do processo
sucessrio caracterstico da ordem (bloco 9-10), ou seja, voc deve usar funes string para analisar o
comentrio.
A quantidade de eventos considerados na funo Eventos () pode ser muito aumentada. Por exemplo, se

voc quiser exibir completamente todos os eventos relacionados ordem, voc deve incluir a anlise das
caractersticas ordem - mudanas na forma requerida para parar de preos e na solicitou a abertura
ordena pendente de preos, bem como o mtodo de fechamento (se as encomendas forem fechadas
como oposto ou ordens de cada um deles fechado em separado) ea razo para fechar / apagar de
encomendas (se o preo atingiu o nvel requerido para parar de ordem ou a ordem fechado em
iniciativa do comerciante, etc.)
Volume definindo funo
Para o seu trabalho prtico, um comerciante tem de ser capaz de regular a quantidade de lotes para
novas encomendas a ser aberto. muito difcil criar uma funo universal para esta finalidade, uma vez
que cada estratgia comercial implica a sua gesto volume especial. Por exemplo, algumas estratgias
implicam a possibilidade de trabalhar com apenas uma ordem no mercado, enquanto que outros
permitem abrir novas encomendas no mercado, independentemente das j existentes.Estratgias
baseadas na gesto das diferentes ordens pendentes so conhecidos, tambm, a existncia simultnea
de vrias ordens de mercado e na expectativa de lhe ser permitido em alguns casos.
Um dos mtodos mais comuns para o clculo do volume recm-inaugurado encomendas (para as
estratgias que permitem apenas um Mercado fim de ser aberto por vez) o mtodo progressivo de
investimentos. De acordo com este mtodo, as caues dos custos de cada nova ordem proporcional
margem livre disponvel no momento da comercializao. Se o mercado estiver fechado com intuito
lucrativo, a quantidade permitida de lotes para a nova ordem aumenta. Se ela estiver fechada, com uma
perda, esse montante ser diminuda.
No exemplo abaixo, o usurio-funo definida Lot () considerado que lhe permite definir o volume para
recm abertura ordena utilizando uma das duas alternativas:
Alternativa 1. O usurio define a quantidade de lotes para novas ordens manualmente.
Alternativa 2. A quantidade de lotes calculado de acordo com a quantia do dinheiro atribudo pelo
usurio. O montante das verbas atribudas so estabelecidos como percentual de margem livre.
Funes Definidas Por Usurio Lot ()
bool Lot ()
A funo calcula a quantidade de lotes para novas encomendas. Como resultado da execuo da funo,
o valor da varivel global Lots_New mudanas: a quantidade de lotes. A funo retorna TRUE, se a
margem livre suficiente para a instaurao de uma ordem com o montante mnimo de lotes (para o
smbolo, na janela da qual anexado EA). Caso contrrio, retorna FALSE.
A funo utiliza os valores das seguintes variveis globais:

Lotes - volume em lotes definidos pelo usurio;


Por cento - o percentual de margem livre definido pelo usurio.

Para exibir mensagem, a funo usa a funo Informar dados (). Se a funo Inform () no est includo
no EA, nenhuma mensagem ser exibida.
A funo Lot () que determina a quantidade de lotes formado como incluir arquivo Lot.mqh:
//--------------- -------------- ------------------- --------------------------------/ / Lot.mqh
/ / O cdigo deve ser usado apenas para fins educacionais.
/ / - -------------- --------------------------------- --------------------

--------- 1 -/ / Funo clculo da quantidade de lotes.


/ / Global variveis:
/ / Duplo Lots_New - a quantidade de lotes para novas encomendas
(calculado)
/ / Duplo Lotes - a quantidade desejada de lotes definidos pelo usurio.
/ / Int Percentual - livre margem percentual definido pelo usurio
/ / Retorno valores:
/ / True - se h dinheiro suficiente para o volume mnimo
/ / Falso - se no h dinheiro suficiente para o volume mnimo
//------------------------------------------------ ------ --------- ------------- 2 -bool Lot () / / Usurio-funo definida
(
Symb seqncia = Simbolo (); / / Smbolo
One_Lot duplo = MarketInfo (Symb, MODE_MARGINREQUIRED); / /! lote custo Min_Lot duplo = MarketInfo (Symb, MODE_MINLOT); / / Min. quantidade de
lotes
Etapa dupla MarketInfo = (Symb, MODE_LOTSTEP); / / Passo de volume
alterando
Livre AccountFreeMargin duplo = (); / / Livre margem
//------------------------------------------- ----- --------- ------------------- 3 -if (Lotes> 0) / / Volume definido explicitamente ..
(/ / Check-lo ..
Dinheiro duplo = Muita One_Lot *; / / Ordem dos custos
se (Moeda <= AccountFreeMargin ()) / / Livre margem cobre tudo ..
Lots_New = Lotes; / / .. aceitar a definir uma
else / / Se no o suficiente margem livre ..
Lots_New = MathFloor (Livre
/ One_Lot /
Passo) * Etapa; / / Calcular
lotes
)
//----------------------------- -------------- ----- ---------------------------- 4 -else / / Se no for volume preset
(/ / .. Tomar percentual
if (Percentual> 100) / / Preset, mas incorretamente ..
Percentual = 100; / / .. ento no mais do que 100
if (Percentual == 0) / / Se 0 predefinido ..
Lots_New = Min_Lot; / / .. ento o min. lote
else / / quantidade desejada de lotes:
Lots_New = MathFloor (Livre * Porcentagem /
100
/ One_Lot /
Passo) *
Etapa; / / Calc
)
//--------------- -------------- ------------------- ---------------------------- 5 -if (Lots_New <Min_Lot) / / Se for inferior a permitida ..
Lots_New = Min_Lot; / / .. ento mnima
if (Lots_New * One_Lot> AccountFreeMargin ()) / / No suficiente sequer
..
(/ / .. Para o min. lote: (
Informar (11, 0, Min_Lot); / / Mensagem ..
return (false); / / .. e sair
)
return (true); / / user-defined funo Sair
)
/ / - -------------- --------------------------------- ---------------------------- 6 -A funo tem um simples cdigo. No bloco 1-2, variveis globais e devolvidos os valores so
descritos. No bloco 2.3, os valores de algumas variveis so calculadas. Para os clculos, a seguinte
prioridade na fixao de valores aceitos so: Se um usurio possui um conjunto diferente de zero

quantia de lotes, o valor do percentual de margem livre no levado em considerao. Lotes variveis
externas e Percentual so declarados na incluem arquivo Variables.mqh.
No bloco 3.4, os clculos so feitos para a situao em que o utilizador tenha definido um valor diferente
de zero do volume em lotes no exterior varivel Lotes. Neste caso, o programa faz um check. Se a
margem livre suficiente para abrir um mercado com vista a definir quantidade de lotes, em seguida, o
valor definido pelo usurio ser atribudo varivel global Lots_New e utilizado em mais clculos. Se a
margem livre no se aplica a esse montante, em seguida, o montante mximo possvel de lotes
calculado que mais usado (ver Funes Matematicas).
O controle passado ao bloco 4.5, se o usurio tiver definido zero quantidade de lotes. Ao mesmo
tempo, ns levamos em considerao o percentual de margem livre especificado pelo usurio na varivel
externa Percentual. O programa faz uma verificao: Se o valor for superior a cem (por cento), o valor
de 100 utilizado em clculos. Se o usurio tiver definido a varivel de valor zero por cento, a
quantidade de lotes equiparado com o mnimo possvel tratar o valor fixado pelo centro.Para todos
intermdio ,
.
No bloco 5.6, so feitas as verificaes necessrias. Se a quantidade calculada de lotes acaba por ser
inferior ao mnimo permitido um (por exemplo, valor zero podem ser obtidas no bloco 4.5, se o usurio
tiver definido um pequeno valor da varivel Percentual), ento o valor mnimo ser ser atribudas para a
varivel Lots_New. Then the program checks whether there are enough free assets to open an order
with the volume of the previously calculated amount of lots (there can be insufficient money on the
account). Se o dinheiro disponvel no suficiente, o programa exibe uma mensagem para o usurio e
sadas da funo, retornando a funo 'falso'. No entanto, o xito no regresso a verificar os resultados
da 'verdadeira'.
Funo definir os critrios de negociao
O sucesso de qualquer estratgia comercial depende, principalmente, a seqncia de negociao
critrios clculos. A funo que define critrios negociao a parte mais importante de um programa e
devem ser usadas sem falhas. De acordo com a estratgia de comercializao, a funo pode retornar
valores que correspondem aos critrios negociao particular.
Em um caso geral, os seguintes critrios podem ser definidos:

critrio
critrio
critrio
critrio
critrio
critrio
critrio
critrio
critrio

para
para
para
para
para
para
para
para
para

a abertura de um mercado fim;


o fechamento de um mercado fim;
o encerramento parcial de um mercado fim;
o encerramento do mercado ordens opostas;
a solicitao de alterao de preos de um mercado pra de ordem;
a colocao de uma encomenda pendente;
excluso de uma ordem pendente;
abrir a solicitao de alterao de preo de uma encomenda pendente;
a solicitao de alterao de preos das paragens de uma ordem pendente.

Na maioria dos casos, o desencadeamento de uma negociao exclusiva como critrio est relacionado
com outros critrios comerciais. Por exemplo, se o critrio para a instaurao de uma ordem Comprar
torna-se importante em um determinado momento, isto significa que os critrios utilizados para o
encerramento de ordens Comprar ou Vender de abertura ordena no pode ser importante ao mesmo
tempo (veja relao dos Critrios de negociao). Ao mesmo tempo, de acordo com as regras inerentes
a uma determinada estratgia de comercializao, alguns critrios podem acionar simultaneamente. Por
exemplo, os critrios para o encerramento de um mercado para o fim Sell e modificao de uma ordem
pendente BuyStop maio tornam-se importantes em simultneo.

Uma estratgia comercial impe requisitos para a utilizao do contedo e tecnologia da funo
definindo critrios comerciais.Qualquer funo pode retornar apenas um valor. Ento, se voc percebeu
em seu Expert Advisor uma estratgia comercial que implica a utilizao de apenas critrios comerciais
mutuamente exclusivos, o valor devolvido pela funo pode ser associada a um dos critrios. No
entanto, se sua estratgia permite desencadeamento de vrios critrios, num momento, os seus valores
devem ser passados para outras funes para serem processados, utilizando variveis globais para isso.
Realizava na trading estratgia da EA abaixo implica a utilizao de critrios apenas se excluem
mutuamente. Esta a razo pela qual a funo Critrio () para fazer passar os critrios anteriores de
outras funes utiliza o valor devolvido pela funo.
Funes Definidas Por Usurio Critrio ()
Critrio int ()
A funo calcula critrios comerciais. Ele pode retornar os seguintes valores:
10 - desencadeou uma negociao critrio de fecho de mercado para Comprar;
20 - desencadeou uma negociao critrio de abertura de mercado para Vender;
11 - desencadeou uma negociao critrio de fecho de mercado para Comprar;
21 - desencadeou uma negociao critrio de abertura de mercado para Vender;
0 - nenhuma critrios importantes disponveis;
-1 - A sigla usada no EURUSD.
A funo utiliza os valores das seguintes variveis externas:
St_min - o nvel mais baixo do indicador Estocsticos Oscilador;
St_max - o nvel superior do indicador Estocsticos Oscilador;
Open_Level - o nvel do indicador MACD (por ordem de criao);
Close_Level - o nvel do indicador MACD (por ordem fechamento).
Para exibir mensagens, a funo usa a funo Informar dados (). Se a funo Inform () no est includo
na EA, mensagens no sero exibidas.
Funo definindo critrios comerciais, Critrio (), formado como incluir arquivo Criterion.mqh:
//------------------------------------------------ -----------------------/ / Criterion.mqh
/ / O cdigo deve ser usado apenas para fins educacionais.
//------------------------------------------------ -------------------- 1 / / Funo clculo critrios comerciais.
/ / Retorno valores:
/ / 10 - abertura Comprar
/ / 20 - Venda de abertura
/ / 11 - fechando Comprar
/ / 21 - Venda de fechamento
/ / 0 - no h critrios importantes disponveis
/ / -1 - Outro smbolo usado
//------------------------------------------------ -------------------- 2 / / Variveis externas:
extern int St_min = 30; / / estocstica nvel mnimo
extern int St_max = 70; / / nvel mximo estocstica
extern dupla Open_Level = 5; / / MACD nvel de abertura (+/-)
extern dupla Close_Level = 4; / / MACD nvel do fechamento (+/-)
//------------------------------------------------ -------------------- 3 Critrio int () / / Usurio-funo definida

(
string Sym = "EURUSD";
if (Sym! = Symbol ()) / / Se um smbolo errado
(
Informar (16); / / Mensagens ..
retorno (- 1); / / .. e sair
)
dupla
M_0, M_1, / / Valor PRINCIPAIS em barras 0 e 1
S_0, S_1, / / Valor SINAL em barras 0 e 1
St_M_0, St_M_1, / MAIN Valor em barras 0 e 1
St_S_0, St_S_1; / / Valor SINAL em barras 0 e 1
Opn duplo = Open_Level * Point; / / Abertura do nvel MACD (pontos)
* Cls = dupla Close_Level Point; / / Encerramento do nvel MACD (pontos)
//------------------------------------------------ -------------------- 4 / /
M_0
bar
M_1
bar
S_0
bar
S_1
bar

Parmetros de indicadores tcnicos:


= iMACD (Sym, PERIOD_H1, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0); / / 0
= iMACD (Sym, PERIOD_H1, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1); / / 1
= iMACD (Sym, PERIOD_H1, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 0); / / 0
= iMACD (Sym, PERIOD_H1, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1); / / 1

St_M_0 = iStochastic (Sym, PERIOD_M15, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 0);


St_M_1 = iStochastic (Sym, PERIOD_M15, 5, 3, 3, MODE_SMA, 0, MODE_MAIN, 1);
St_S_0 = iStochastic (Sym, PERIOD_M15, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL,
0);
St_S_1 = iStochastic (Sym, PERIOD_M15, 5, 3, 3, MODE_SMA, 0, MODE_SIGNAL,
1);
//------------------------------------------------ -------------------- 5 / / Clculo do comrcio critrios
if (M_0> s_0 & & - M_0> Opn & & St_M_0> St_S_0 & & St_S_0 <St_min)
regresso (10); / / Abertura Comprar
if (M_0 <s_0 & & M_0> Opn & & St_M_0 <St_S_0 & & St_S_0> St_max)
regresso (20); / / Abertura Vender
if (M_0 <s_0 & & M_0> Cls & & St_M_0 <St_S_0 & & St_S_0> St_max)
regresso (11); / / Encerramento Comprar
if (M_0> s_0 & & - M_0> Cls & & St_M_0> St_S_0 & & St_S_0> St_min)
regresso (21); / / Encerramento Vender
//------------------------------------------------ -------------------- 6 retorno (0); / / Sair do usurio-funo definida
)
//------------------------------------------------ -------------------- 7 No bloco 1.2, o valor devolvido pela funo so descritos. No bloco 2.3, algumas variveis externas so
declarados. Criterion.mqh incluir o arquivo o arquivo usado somente na considerados EA, em que o
global (neste caso, externo) variveis so declaradas.Na seo denominada Estrutura de um programa
normal, possvel encontrar o raciocnio para declarar de todas as variveis globais, sem excepo, em
um arquivo separado Variables.mqh. Neste caso, as variveis externas so declaradas no arquivo
Criterion.mqh por duas razes: em primeiro lugar, para demonstrar que tecnicamente possvel (que
no possvel), em segundo lugar, para mostrar como usar variveis externas na depurao / testes de
um programa.
tecnicamente possvel declarar variveis externas no arquivo Criterion.mqh, porque essas variveis no
so utilizados em quaisquer outras funes do programa. Os valores das variveis externas declaradas

no bloco 2.3 determinar os nveis de indicadores estocsticos e MACD e Oscilador so utilizados apenas
em funo do critrio considerado (). A declarao de variveis externas no arquivo contendo a funo
que define critrios negociao pode ser razovel, se o arquivo for utilizado temporariamente, ou seja,
durante o programa de depurao e de clculo desses valores ptimos variveis externas. Para este
efeito, voc pode adicionar outras variveis externas no programa, por exemplo, a otimizao do aporte
de indicadores (neste caso, o conjunto dos valores constantes do 12,26,9 para 5,3,3 e MACD para
Estocsticos Oscillator) . Uma vez tendo acabado codificao, voc poder excluir essas variveis
externas a partir do programa e substitu-los com constantes com os valores calculados durante a
otimizao.
No bloco 3.4, as variveis locais so abertos e descritos. O Consultor Especialista se destina a ser
utilizado no smbolo EURUSD, to necessria a verificao feita no bloco 3.4. Se a EA lanado na
janela de outro smbolo, a funo operacional acabamentos e retorna o valor de -1 (smbolo errado).
No programa, os valores dos dois indicadores calculados sobre o actual eo anterior sobre a barra so
utilizados (blocos 4-5).Normalmente, quando voc usa indicadores estocsticos Oscilador e MACD, os
sinais de compra ou de venda, quando so formadas duas linhas indicadoras reunir-se
mutuamente. Neste caso, usamos dois indicadores simultaneamente, para definir critrios comerciais. A
probabilidade de interseo simultnea de duas linhas indicadoras de indicadores bastante reduzida.
muito mais provvel que eles vo intersectar um por um - primeiro em um indicador, um pouco mais
tarde - em uma outra. Se o indicador linhas de interseo dentro de um curto perodo de tempo, dois
indicadores podem ser considerados de ter formado um critrio comercial.
Por exemplo, abaixo mostrado como um critrio para a negociao de compra calculado (blocos 56):
if (M_0> s_0 & & - M_0> Opn & & St_M_0> St_S_0 & & St_S_0 <St_min)
De acordo com esse registro, o critrio para a compra importante se estiverem reunidas as seguintes
condies:

no indicador MACD, indicador linha PRINCIPAIS (histograma) indicador acima e abaixo da linha
SIGNAL Open_Level nvel mais baixo (Fig. 157);
no indicador Estocsticos Oscilador, indicador linha PRINCIPAIS (histograma) indicador acima e
abaixo da linha SIGNAL St_min nvel mais baixo (Fig. 158).

. 157. Condio necessria do indicador MACD linha posies para confirmar a importncia da
negociao critrios para abertura e fechamento das ordens.
Na parte esquerda do grfico. 157, as posies do indicador MACD linhas mostrado, na qual dois
critrios gatilho - abertura de Compra e Venda de fechamento. PRINCIPAIS linha indicador est abaixo
do nvel de 0,0005 no prazo de T1 = t 1 - t 0. Se as indicaes necessrias Estocsticos Oscilador de
ocorrer, neste momento, o critrio para abertura de Compra ir desencadear.PRINCIPAIS linha est
abaixo do nvel de 0,0004 no prazo T2 = t 2 - t 0. Se as indicaes de Estocsticos Oscilador confirmar
esta posio, o critrio para o encerramento do Sell ir desencadear.
Observe que, formalmente, os dois critrios acima acionar dentro T1 (se for confirmado pelo
Estocsticos Oscillator). Foi mencionado anteriormente que o critrio considerado funo () retorna
apenas um valor, ou seja, o valor atribudo a um critrio acionados. Durante este perodo, torna-se
necessrio escolher um dos critrios. Este problema resolvido de forma antecipada, durante a
programao, de acordo com as prioridades prescritos pela estratgia comercial.
Neste caso (de acordo com a estratgia comercial considerado "), a prioridade de abertura Comprar uma
ordem superior ao valor de fecho Vender um fim. Esta a razo pela qual, no bloco 5.6, o programa
linha, na qual o critrio para abertura de Compra, est posicionado acima. Se durante o perodo de T1
(Fig. 157), temos a confirmao do Estocsticos Oscilador, a funo retorna 10 atribudas a este
critrio. Dentro do perodo de t1 para t2, a funo retornar 21 atribudas ao fechamento Vender
critrio.
Ao mesmo tempo, a execuo de funes comerciais, as necessrias trocas pedidos ser formada. Pelo
critrio para o desencadeamento da Comprar abertura de, em primeiro lugar, o comrcio pedidos de
fechamento de todos os meios disponveis Vender encomendas sero formadas. Logo que essas ordens
no so esquerda, abertura de uma ordem Comprar sero solicitados. Respectivamente, quando o
critrio de fecho de ordens Vender triggers, uma sequncia de pedidos de comrcio s fecho de todas as
encomendas sero formadas Sell (ver Funes do Comrcio).
As condies, nas quais a desencadeantes Estocsticos Oscilador confirmao, so mostrados na
fig. 158.

Fig. 158. Condio necessria da Estocsticos Oscilador indicador linha posies para confirmar a
importncia da negociao critrios para abertura e fechamento das ordens.
De acordo com o programa cdigo especificado no bloco 5.6, os critrios para abertura de Compra e
Venda de fechamento pode se tornar importante indicador desde a linha PRINCIPAIS tornar-se em cima
do sinal na linha SIGNAL Estocsticos Oscilador, linha PRINCIPAIS estar abaixo do nvel mnimo
St_min. Na fig. 158, tais condies so formadas no perodo de Ts. As condies espelhado confirmar o
desencadeamento de critrios para a abertura da ordem Sell e fechamento da ordem Buy (na parte
direita do grfico. 158). Se nenhum critrio tem desencadeado, a funo retorna 0. Outras rotas podem
ser feitas sob estas condies, por exemplo, correo de parar o nvel exigido.
Deve ser notado que o considerado separadamente estratgia comercial implica o uso das indicaes
produzidas por MACD calculada sobre o horizonte temporal de uma hora, enquanto que Estocsticos
Oscilador calculada sobre os 15 minutos de timeframe.The prazo pode ser mudado durante o ensaio, a
fim de otimizar a estratgia. No entanto, aps anlise, no final do cdigo da funo Critrio (),
necessrio especificar valor constante para todos os parmetros calculados, incluindo datas. A EA deve
ser utilizada somente sob as condies, para os quais foi criado. No exemplo acima (com os valores de
PERIOD_H1 e PERIOD_M15 especificados expressamente na indicadores), a EA ir considerar apenas os
parmetros necessrios, independentemente do actual calendrio definido na janela do smbolo, onde foi
lanado o EA.
Negociao critrios aceites neste dado EA so utilizados
para fins de formao e no deve ser considerado como
um guia para operaes quando uma verdadeira
negociao em conta.
Comrcio Funes
Como regra geral, uma normal Expert Advisor contm uma srie de funes comerciais. Eles podem
ser divididos em duas categorias - controle e funes executivas. Na maioria dos casos, apenas uma
funo de controlo e de vrias funes executivas so usados em uma EA.
Uma estratgia comercial normal em um EA realizada com base em duas funes - uma funo
definir os critrios comerciais e uma funo de controlo comrcio. No deve haver quaisquer indcios
da estratgia comercial em qualquer outro lugar no programa. O controlo do comrcio funes e

definindo a funo comercial critrios devem ser coordenados entre si, os valores dos parmetros elas
passam.
Cada um tem uma funo executiva comrcio leque de tarefas especiais. De acordo com as exigncias
da estratgia de comercializao, comrcio funes destinados s seguintes tarefas podem ser usados
em uma EA:

abertura de um mercado da ordem do modelo predefinimos;


fechando um mercado da ordem predefinida tipo;
parcialmente fechando um mercado da ordem predefinida tipo;
fechando todos os mercados a fim de preset tipo;
oposto duas ordens de fechamento do mercado no preset volume;
fechando todas as ordens no mercado;
modificao de ordens stop de um mercado da ordem predefinida tipo;
a colocao de uma encomenda pendente do modelo predefinimos;
uma pendncia apagamento da ordem do modelo predefinimos;
supresso de todas as encomendas pendentes do modelo predefinimos;
supresso de todas as encomendas pendentes;
modificao de uma ordem pendente do modelo predefinimos.

A negociao geral em uma seqncia normal Expert Advisor consiste no seguinte: com base no
clculo (de acordo com a estratgia utilizada) critrios comerciais, o controlo do comrcio funo
(tambm perceber a estratgia) alguns convites ou outros executivos comrcio funes que, na sua
por sua vez, constituem o comrcio necessrio solicitar.
User-Defined Controladoria Funo Comrcio ()
int Comrcio (int Trad_Oper)
a funo bsica de que percebe sua estratgia.
Trad_Oper parmetro pode ter os seguintes valores correspondentes a negociao com os critrios:
10 - desencadeou uma negociao critrio para a abertura de um mercado para comprar;
20 - desencadeou uma negociao critrio para a abertura de uma ordem Sell mercado;
11 - desencadeou uma negociao critrio para o encerramento de um mercado para comprar;
21 - desencadeou uma negociao critrio para o encerramento de um mercado para Vender;
0 - nenhuma critrios importantes disponveis;
-1 - A sigla usada no EURUSD.
Para executar a funo, as seguintes funes comerciais so exigidos:

Close_All () - funo da suspenso de todas as ordens no mercado do modelo predefinimos;


Open_Ord () - funo abrindo um mercado da ordem predefinida tipo;
Tral_Stop () - funo modificar StopLoss de um mercado da ordem do modelo predefinimos;
Lote () - funo detectar a quantidade de lotes para novas encomendas.

Os controladores de comrcio Trade funo () formado como incluir arquivo Trade.mqh:


//---- ---- ---------------------------------------- ----------------------/ / Trade.mqh
/ / O cdigo deve ser usado apenas para fins educacionais.
//-------- ---- ------------------------------------ ----------------------/ / Comrcio funo.
//------------ ---- -------------------------------- ------------------- 1

-int Comrcio (int Trad_Oper) / / Usurio-funo definida


(
/ / Trad_Oper - tipo de operao comercial:
/ / 10 - abertura Comprar
/ / 20 - Venda de abertura
/ / 11 - fechando Comprar
/ / 21 - Venda de fechamento
/ / 0 - no h critrios importantes disponveis
/ / -1 - Outro smbolo usado
switch (Trad_Oper)
(
//---------- ---- ---------------------------------- ------------- 2 -caso 10: / / = Trading critrio Comprar
Close_All (1); / / Fechar todas Vender
if (Lot () == false) / / Nem dinheiro suficiente para min.
retorno; / / Sair do usurio-funo definida
Open_Ord (0); / / Open Comprar
retorno; / / Tendo comercializado, deixe
//----------- ---- --------------------------------- ---------- 3 -caso 11: / / Trading critrio = fechamento Comprar
Close_All (0); / / Fechar todas Comprar
retorno; / / Tendo comercializado, deixe
//--------------- ---- ----------------------------- ---------- 4 -caso 20: / / Trading critrio = Vender
Close_All (0); / / Fechar todas Comprar
if (Lot () == false)
retorno; / / Sair do usurio-funo definida
Open_Ord (1); / / Open Vender
retorno; / / Tendo comercializado, deixe
//------------------- ---- ------------------------- ---------- 5 -caso 21: / / Trading critrio = fechamento Vender
Close_All (1); / / Fechar todas Vender
retorno; / / Tendo comercializado, deixe
//----------------------- ---- --------------------- ---------- 6 -caso 0: / / Retenes posies abertas
Tral_Stop (0); / / Trailing stop Comprar
Tral_Stop (1); / / Trailing stop Vender
retorno; / / Tendo comercializado, deixe
//--------------------------- ---- ----------------- ---------- 7 -)
)
//------------------------------------------------ ------------------- 8 Os controladores de comrcio Trade () chamada de funo especial a iniciar () da Expert
Advisor usualexpert.mq4. O valor devolvido pela funo comercial definindo critrios Critrio () dado
como o parmetro passou a funcionar no Comrcio ().
No bloco 1.2 a funo de Comrcio (), o comrcio percebeu critrio considerado pela estratgia
comercial so descritos. Na funo, usamos o operador switch () (blocos 2-7) que nos permite activar
o grupo de funes exigidas s trocas comerciais, de acordo com o critrio. De acordo com a
estratgia de comercializao, o mercado abre e fecha EA ordens. Nenhuma operao com
encomendas pendentes so prestados por esta estratgia comercial.
Na seo denominada Funo Definir Critrios de negociao, foi especificado que, para algumas
trocas critrios do programa podem formar vrias solicitaes comerciais. Assim, no caso do critrio
importante para a compra (o valor da varivel Trad_Oper igual a 10), o controlo passado para a
marca "Casa 10" (blocos 2-3) durante a execuo do operador switch ().Neste caso, o programa
convida a primeira funo Close_All (1). A execuo desta funo resulta em fechamento de todas as
ordens no mercado aberto para Vender o smbolo EURUSD. Depois de todas as ordens Vender foram

fechadas, o dinheiro disponvel est marcada para saber se suficiente para tornar o comrcio
prximo. Para este efeito, o usurio-funo definida Lot () chamado (ver Volume Deteco de
Funo). Se esta funo retorna 'falso', significa que o dinheiro disponvel na conta no o suficiente
para abrir com o fim Buy permitidas montante mnimo dos lotes. Neste caso, a funo do Comrcio ()
termina as suas operaes. Se no h dinheiro suficiente, o comrcio funo Open_Ord (0) chamado
para abrir um mercado para comprar com o valor dos lotes calculada em funo da execuo do Lote
(). O conjunto de aes descritas representa o Consultor Especialista da resposta situao do
mercado (de acordo com o critrio determinado trfego).
Se o critrio importante que chama a ateno para a necessidade de fechar o mercado ordens
Comprar, o controlo passado para a marca "Casa 11" em bloco 3.4. Neste caso, apenas uma funo
Close_All (0) chamado para fechar todas as ordens do tipo Buy disponveis. 4.6 blocos so
construdos na maneira semelhante a blocos 2.4, o controlo passado a marca caso 20 'e' caso 21 ',
se os critrios para a venda ou encerramento do mercado ordens Vender tornam-se importantes.
Observe que todas as funes executivas que fazem trocas comerciais pedidos so chamados na Trade
funo () que, por sua vez, chamado a execuo da EA especiais da funo start () lanada pelo
cliente terminal como resultado de um novo carrapato incoming. O cdigo da funo Comrcio () est
escrito de forma a que o controlo no devolvido para a funo start () (e, no final, para o cliente
terminal) at que todos os requeridos comrcio funes executivas so executados. Essa a razo
pela qual todas as rotas comerciais destinados a cada critrio so feitas pela EA, uma a uma, sem
pausas. A exceo pode ser o caso de erros crticos que ocorrem durante a realizao de transaces
(ver Erro de Processamento de Funo).
Se no houver negociao detectado como critrio importante (Trad_Oper varivel igual a 0) na
execuo da funo Critrio (), o controlo passado para a marca 'caso 0', o que resulta numa dupla
chamada para Tral_Stop funo () para modificar os valores de mercado solicitado encomendas de
diferentes tipos. A estratgia comercial realizada nesta EA permite a existncia de um mercado nico
fim, de modo a sequncia de chamadas para as funes Tral_Stop (0) e Tral_Stop (1) no
importa. Neste caso, uma escolha aleatria.
Se a funo Critrio () tenha devolvido o valor de -1, isto significa que a EA vem junto janela de um
smbolo que no EURUSD. Neste caso, a funo do Comrcio () no chama a qualquer comrcio
funes executivas e retorna o controlo para iniciar a funo especial () que se manifestou a ele.

User-Defined Executivo Funo Close_All Comrcio ()


int Close_All (int Sugesto)
A funo fecha todas as ordens no mercado do mesmo modelo.
O parmetro Sugesto pode ter os seguintes valores correspondentes com os tipos de ordens que
devem ser fechados:
0 - Comprar ordens de fechamento;
1 - Vender ordens de fechamento.
Para executar a funo, necessrio aplicar os princpios de ordem contabilstica funo Terminal (),
caso a funo de monitoramento Eventos () e do erro ao processar funo Erros () no programa. Para
exibir as mensagens, a funo implica a utilizao de dados da funo Inform (). Se a funo Inform ()
no est includo na EA, mensagens no sero exibidas.
Os valores das seguintes matrizes globais so utilizados:

Mas_Ord_New - o conjunto de caractersticas de ordens disponveis a partir do momento da

funo Terminal () execuo;


Mas_Tip - a matriz do montante total das encomendas de todos os tipos a partir do momento
da ltima execuo da funo terminal ().

O comrcio funes executivas Close_All () formado como incluir o arquivo Close_All.mqh:


/ / - ------------- --------------------------------- -------------------------------/ / Close_All.mqh
/ / O cdigo deve ser usado apenas para fins educacionais.
//--------------- ------------- -------------------- --------------------------- 1 -/ / Funo fechando todas as ordens no mercado a determinado tipo de
/ / Global variveis:
/ / ltimo conhecidos Mas_Ord_New fim array
/ / Mas_Tip Ordem tipo array
//---------------------------- ------------- ------- --------------------------- 2 -int Close_All (int Sugesto) / / Usurio-funo definida
(
/ / Int Sugesto / / Tipo de Ordem
Bilhete int = 0; / / Portaria bilhete
Lote duplo = 0; / / Quantidade de lotes fechados
Price_Cls duplo; / / Portaria fechar preo
//----------------------------------------- ------- ------ --------------------- 3 -while (Mas_Tip [Dica]> 0) / / Enquanto os despachos do ..
(/ / .. determinado tipo esto disponveis
for (int i = 1; i <= Mas_Ord_New [0] [0]; i + +) / / Ciclo para viver
encomendas
(
if (Mas_Ord_New [i] [6] == Dica & & / / Entre as ordens do nosso tipo
Mas_Ord_New [i] [5]> Lote) / / .. selecionar o mais caro um
(/ / Essa foi encontrado em um mais antigo.
Lote = Mas_Ord_New [i] [5]; / / A maior quantidade de lotes encontrados
Bilhete Mas_Ord_New = [i] [4]; / / O seu intuito que o bilhete
)
)
if (Tip == 0) = Price_Cls lance; / / Para encomendas Comprar
if (Tip == 1) = Pergunte Price_Cls; / / Para encomendas Vender
Informar (12, Bilheteira); / / Mensagem sobre uma tentativa de encerrar
bool = OrderClose Ans (Bilhete, Lot, Price_Cls, 2); / / Fechar fim!:)
//------------------------------------------------ ------------- --------4 -if (Ans == false) / / Falha: (
(/ / Verificar se h erros:
if (Erros (GetLastError ()) == false) / / Se o erro crtico,
retorno; / / .. em seguida, sair.
)
/ / - ------------- ---------------------------------- --------------------- 5 -Terminal (); / / Portaria funo contabilstica
Eventos (); / / Evento de monitoramento
)
retorno; / / Sair do usurio-funo definida
)
//-------------------- ------------- --------------- --------------------------- 6 -No bloco 1.2, as variveis globais utilizadas so descritas. No bloco 2-3, variveis locais so abertos e
descritos. A condio Mas_Tip [Dica]> 0 na posio do operador do ciclo 'enquanto' (blocos 3-6)

implica que vai exercer a funo de controle at que ela atende a sua finalidade, ou seja, at que
todas as encomendas de determinado tipo so fechados . O elemento do array global Mas_Tip [Dica]
contm o valor igual ao montante das ordens de determinado tipo de Dica. Por exemplo, se a funo
Close_All () chamado com os parmetros transferidos igual a 1, isto significa que a funo deve
fechar todas as ordens no mercado Sell (ver Tipos de Ofcios). Neste caso, o valor do elemento
Mas_Tip array [1] ser igual ao montante disponvel de ordens Sell (ltima conhecida como do
momento da execuo da funo Terminal ()). Assim, o ciclo operador 'enquanto' ser executado
tantas vezes quantas Vender despachos esto disponveis.
Se o comerciante no intervm nas operaes da EA (ou seja, ele ou ela no colocar ordens
manualmente), ento apenas um mercado de um modo ou de outro tipo podem estar disponveis no
comrcio. Contudo, se o comerciante possui adicionalmente colocado no mercado uma ou vrias
ordens por sua prpria iniciativa e, em seguida, uma certa seqncia de ordens devem ser mantidos
execuo da funo Close_All (). Prefervel a seqncia de fechamento ordens para fechar as
maiores, em primeiro lugar. Por exemplo, se existem trs ordens de venda como o momento de
comear a executar a funo Close_All (), uma delas sendo aberta por 5 lotes, sendo aberta para um
outro lote 1, o terceiro e um a ser abertos por 4 lotes, em seguida, as encomendas sero encerradas
na seguinte seqncia de acordo com a argumentao: o primeiro fim de ser fechado ser o de 5
lotes, que depois de 4 lotes, ea ltima ser da ordem de 1 lote.
Observe que a quantidade de lotes o nico critrio utilizado para determinar a seqncia de ordens
de fechamento. A fim de ganhos / perdas, abra o preo, bem como outros parmetros caracterizando
o fim (da ordem requerida para parar de preos, a hora eo motivo do fechamento, etc) no so
considerados.
Todas as ordens no mercado de um determinado tipo deve ser fechada, se o
critrio para o encerramento das encomendas deste tipo importante, sendo a
seqncia de fechamento do maior para o menor volume.
Para manter a seqncia de fechamento acima fim, no bloco 3.4, o ciclo 'para' utilizado, em que a
maior parte (em volume) selecionado dentre fim de todas as ordens do mesmo tipo. Esta ordem
procurado a partir da anlise dos valores da matriz global Mas_Ord_New contendo todas as
informaes sobre negociao em disponveis ordem. Aps a passagem deste modo tenha sido
detectada, de acordo com o tipo de ordem, solicitou a fechar preo ser calculado que igual ao
correspondente valor da ltima cotao conhecida, em ambos os sentidos. Se as encomendas esto a
ser fechadas do tipo Buy, feche o preo deve ser pedida com base no valor de lance. Se eles forem
Vender ordens, ento use Pergunte valores.
Directamente antes de formar um pedido comrcio, as informaes sobre a tentativa de encerrar a
ordem exibida. O programa usa funo chamada Inform () para esse fim. O pedido de fechamento
do comrcio a ordem formada na linha:
bool = OrderClose Ans (Bilhete, Lot, Price_Cls, 2); / / Fechar fim!:)
Os valores calculados so utilizados como parmetros: Ticket - nmero de ordem, Lote - volume em
lotes, Price_Cls - solicitou fechar preo, 2 - derrapagem.
No bloco 4.5, o comrcio resultados so analisados. Se a funo OrderClose () retornou 'verdadeira',
isto significa que o comrcio tenha sido concludo com xito, ou seja, a ordem tenha sido
encerrada. Neste caso, o controlo passado ao bloco 5-6, onde as informaes sobre encomendas
disponvel no atual momento atualizado. Aps a execuo de funes Terminal () e Eventos (), a
atual iterao do ciclo 'enquanto' termina (a quantidade disponvel de ordens pode mudar dentro da
funo durante o tempo de execuo e fazer novas aquisies, de modo a execuo da ordem

contabilstica funo obrigatrio, em cada iterao do ciclo 'enquanto'). Se as ordens do mesmo tipo
esto ainda disponveis no comrcio, que ser encerrada na prxima iterao do ciclo 'enquanto', os
novos valores dos elementos das matrizes Mas_Ord_New e Mas_Tip obtidas durante a execuo da
funo Terminal () sendo utilizada para a determinao dos parmetros do prximo fim de ser
encerrada.
Se a execuo do pedido de que os resultados em funo OrderClose () retorna "falso", isso significa
que a ordem no foi fechado. A fim de informar-se sobre as razes deste fracasso, o programa analisa
o ltimo erro ocorrido na tentativa de tornar o comrcio. Para o efeito, apela para a funo Erros ()
(ver Erro de Processamento de Funo). Se, a execuo desta funo, o programa detecta que o erro
crtica (por exemplo, o comrcio proibido), a funo Close_All () termina as suas operaes e
retorna o controle para controlar o comrcio funcionar Comrcio (), que acabou por resultar em que a
funo especial start90 da EA termina a sua execuo, bem como. Na prxima carrapato, o terminal ir
lanar a funo start () para execuo de novo. Se fechar o critrio permanece real naquele momento,
isso ir produzir a chamada para a funo da suspenso de todas as ordens, Close_All ().

User-Defined Executivo Funo Open_Ord Comrcio ()


int Open_Ord (int Sugesto)
A funo abre um mercado da ordem de determinado tipo.
O parmetro Sugesto pode ter os seguintes valores correspondentes com os tipos de ordens a
serem abertos:
0 - Comprar o tipo de encomendas para ser aberto;
1 - Vender o tipo de encomendas a ser aberto.
Para executar a funo, voc deve usar o programa em funo da ordem contabilstica Terminal (),
caso a funo de monitoramento Eventos () e do erro ao processar Erros funo (). Para exibir as
mensagens, a funo implica a funo Informar dados (). Se a funo Inform () no est includo na
EA, mensagens no sero exibidas.
Os valores das seguintes variveis globais so utilizados:

Mas_Tip - a matriz do montante total das encomendas de todos os tipos a partir do momento
da ltima execuo da funo Terminal ();
StopLoss - o valor de StopLoss (quantidade de pontos);
TakeProfit - o valor de TakeProfit (quantidade de pontos).

O comrcio funes executivas Open_Ord () que incluir arquivo formado Open_Ord.mqh:


//--------------------------------- ------------- -- -------------------------------/ / Open_Ord.mqh
/ / O cdigo deve ser usado apenas para fins educacionais.
//---------------------------------------------- -- ----------- ---------------- 1 -/ / Funo abrindo um mercado da ordem de determinado tipo
/ / Global variveis:
/ / Int Mas_Tip Ordem tipo array
/ / Int StopLoss O valor de StopLoss (quantidade de pontos)
/ / Int TakeProfit O valor de TakeProfit (quantidade de pontos)
//------------------------------------------------ ----------- ------------ ---- 2 -int Open_Ord (int Sugesto)
(

int Ticket, / / Order bilhete


MN; / / MagicNumber
dupla SL, / / StopLoss (como as relacionadas com o preo)
TP; / / TakeProf (como as relacionadas com o preo)
/ / - ------------- ---------------------------------- --------------------------- 3 -while (Mas_Tip [Dica] == 0) / / At eles ..
(/ / .. suceder
if (StopLoss <Level_new) / / Se for inferior a permitida ..
StopLoss = Level_new; / / .. ento o permitido um
if (TakeProfit <Level_new) / / Se for inferior a permitida ..
TakeProfit = Level_new; / / .. ento o permitido um
MN = TimeCurrent (); / / Simple MagicNumber
Informar (13, Tip); / / Mensagem sobre uma tentativa de abrir
if (Tip == 0) / / Vamos abrir uma Comprar
(
SL = Oferta - Point StopLoss *; / / StopLoss (preo)
TP = Lance + TakeProfit * Point; / / TakeProfit (preo)
Bilhete = OrderSend (Symbol (), 0, Lots_New, Ask, 2, SL, TP, "", MN);
)
if (Tip == 1) / / Vamos abrir um Vender
(
SL = Pea + StopLoss * Point; / / StopLoss (preo)
TP = Ask - TakeProfit * Point; / / TakeProfit (preo)
Bilhete = OrderSend (Symbol (), 1, Lots_New, Lance, 2, SL, TP, "", MN);
)
//-------- ------------- --------------------------- --------------------- 4 -if (Ticket <0) / / Falha: (
(/ / Verificar se h erros:
if (Erros (GetLastError ()) == false) / / Se o erro crtico,
retorno; / / .. ento sair.
)
Terminal (); / / Portaria funo contabilstica
Eventos (); / / Evento de monitoramento
)
//--------------------------- ------------- -------- --------------------------- 5 -retorno; / / Sair do usurio-funo definida
)
//---------------------------------------- -------- ----- ---------------------- 6 -Nos blocos de 1.3 a funo Open_Ord (), as variveis globais so descritas, os valores dos que so
utilizados na execuo da funo, e variveis locais so abertos e descrita. O cdigo da funo bsica
concentra-se no ciclo operador 'enquanto' (blocos 3-5) que executado enquanto nenhum dado
ordens do tipo Sugesto esto disponveis no comrcio.
A estratgia comercial implica abertura ordena que no nulas paragem ordens. Num caso geral, um
comerciante pode estabelecer tais valores das ordens que no vai parar de cumprir com os requisitos
de que tratam o centro, ou seja, menos do que o permitido distncia mnima da preo de
mercado. Esta a razo pela qual so feitas as verificaes necessrias antes de abrir uma ordem: Se
a ltima conhecida distncia mnima (Level_new) excede o valor da varivel externa StopLoss ou
TakeProfit, o valor dessa varivel aumentada e definido para ser igual a Level_new.
Cada fim de ser aberto tem o seu nico MagicNumber igual ao horrio atual do servidor. Como
resultado da execuo de um EA para um smbolo, s pode ser uma ordem mercado aberto (ou
colocados, se for uma ordem pendente) de uma s vez. Este mercado apresenta todas as
encomendas, com a nica MagicNumbers. Antes de abrir um despacho, o Informe funo ()
executado, o que resulta na exibio de uma mensagem informando sobre uma tentativa de fazer um

comrcio.
De acordo com o tipo de ordem, o corpo de um dos operadores do 'se' executado. Por exemplo, se o
valor do parmetro transferido Sugesto igual a 0, isso significa que uma ordem Comprar devem ser
abertas. Neste caso, os valores de StopLoss e TakeProfit so calculados com que correspondem a
ordem Comprar tipo, em seguida, o controlo passado para a linha
Bilhete = OrderSend (Symbol (), 0, Lots_New, Ask, 2, SL, TP, "", MN);
comrcio de modo a formar um pedido de abertura de um mercado para comprar. Similar clculos so
feitos, se o valor do parmetro Dica 1, ou seja, uma ordem Sell devem ser abertos.
Erros em todos definidos por usurios comrcio funes executivas so tratados de forma
semelhante. Se um comrcio feito com sucesso, a funo termina as suas operaes (porque
nenhum prxima iterao do ciclo 'enquanto' ser realizada, uma vez que o valor do elemento do array
Mas_Tip [Dica] ser igual a 1 aps a execuo da funo Terminal ()). No entanto, se o comrcio
pedido no for executada, os erros so analisados (blocos 4-5). Neste caso, o erro detectar erros
funo () chamado. Se ele retorna "falso" (o erro crtico), a execuo da funo Open_Ord ()
termina, o controlo passado para o controle consecutivamente comrcio funo Comrcio () , Com a
funo especial iniciar () e depois para o cliente de terminal. Contudo, se o erro overcomable, em
seguida, depois de actualizao das matrizes de ordem em funo do Terminal (), o controlo passado
para o consecutivos iterao do ciclo 'enquanto ', O que resulta em mais uma tentativa de abrir um
fim.
Assim, a funo Open_Ord () detm o controle at que uma ordem seja aberta ou se tem um erro
crtico na execuo do comrcio pedido.

User-Defined Executivo Funo Tral_Stop Comrcio ()


int Tral_Stop (int Sugesto)
A funo modifica todas as ordens no mercado do mesmo modelo.
O parmetro Sugesto pode ter os seguintes valores correspondentes com o tipo de encomendas a
ser modificada:
0 - Comprar o tipo de ordens, de ser modificado;
1 - Vender o tipo de encomendas a ser modificado.
Para executar a funo, necessrio utilizar o programa em funo da ordem contabilstica Terminal
(), caso a funo de monitoramento Eventos (), e os erros erro ao processar funo (). Para exibir as
mensagens, a funo implica a funo Informar dados (). Se a funo Inform () no est includo na
EA, mensagens no sero exibidas.
Os valores das seguintes variveis globais so utilizados:

Mas_Ord_New - o conjunto de caractersticas de ordens disponveis a partir do momento da


ltima execuo da funo Terminal ();
TralingStop - a distncia entre o preo de mercado e ao valor desejado do preo requerido para
StopLoss (quantidade de pontos).

O comrcio funes executivas Tral_Stop () que incluir arquivo formado Tral_Stop.mqh:


//--------------------------- ------------- -------- -------------------------------/ / Tral_Stop.mqh

/ / O cdigo deve ser usado apenas para fins educacionais.


//-------------- ------------- --------------------- --------------------------- 1 -/ / Funo modificando StopLosses de todas as ordens de determinado tipo
/ / Global variveis:
/ / ltimo conhecidos Mas_Ord_New fim array
/ / Int TralingStop Valor da TralingStop (quantidade de pontos)
/ / - ------------- ---------------------------------- --------------------------- 2 -int Tral_Stop (int Sugesto)
(
int Ticket; / / Portaria bilhete
dupla
Preo, / / Mercado Aberto ordem preo
TS, / / TralingStop (como as relacionadas com o preo)
SL, / / Valor da ordem StopLoss
TP; / / Valor da ordem TakeProfit
Modificar bool; / / Um critrio para modificar.
//------------------------------------------------ ----- ---------- ------------ 3 -for (int i = 1; i <= Mas_Ord_New [0] [0]; i + +) / / ciclo para todas as
encomendas
(/ / Busca de encomendas do mesmo modelo
if (Mas_Ord_New [i] [6]! = Dica) / / Se no for esse o nosso tipo ..
continuar; / / .. ignorar a ordem
Modificar = false; / / No atribudo a ser modificado
Preo = Mas_Ord_New [i] [1]; / / Portaria abertas preo
SL = Mas_Ord_New [i] [2]; / / Valor da ordem StopLoss
TP = Mas_Ord_New [i] [3]; / / Valor da ordem TakeProft
Bilhete Mas_Ord_New = [i] [4]; / / Portaria bilhete
if (TralingStop <Level_new) / / Se for inferior a permitida ..
TralingStop = Level_new; / / .. ento o permitido um
TS = TralingStop * Point; / / O mesmo no relat, preo valor
//---------------------------------- ------------- -- --------------------- 4 -switch (Dica) / / Ir para a Ordem tipo
(
caso 0: / / Portaria Comprar
if (NormalizeDouble (SL, Dgitos) </ / Se for menor que queremos ..
NormalizeDouble (Bid - TS, Dgitos))
(/ / .., Em seguida, modific-lo:
SL = Oferta - TS; / / O seu novo StopLoss
Modificar = true; / / Atribuda a ser modificado.
)
break; / / Sair 'mudar'
case 1: / / Portaria Vender
if (NormalizeDouble (SL, Dgitos)> / / Se for maior do que ns queremos ..
NormalizeDouble (Pergunte + TS, Dgitos) | |
NormalizeDouble (SL, Dgitos) == 0) / / .. ou zero (!)
(/ / .., Em seguida, modific-lo
SL = Pea + TS; / / O seu novo StopLoss
Modificar = true; / / Atribuda a ser modificado.
)
) / / Fim de 'mudar'
if (Modify == false) / / Se no h necessidade de modific-lo ..
continuar; / / .., em seguida, continuar o ciclo
bool = OrderModify Ans (Bilhete, Preo, SL, TP, 0); / / modificar isso!
//----------------------------------------------- -- ------------ --------- 5 -if (Ans == false) / / Falha: (
(/ / Verificar se h erros:
if (Erros (GetLastError ()) == false) / / Se o erro crtico,
retorno; / / .. ento sair.

i -; / / contador Decrescente
)
Terminal (); / / Portaria funo contabilstica
Eventos (); / /
Evento de monitoramento
)
retorno; / / Sair do usurio-funo definida
)
/ / - ------------- ---------------------------------- --------------------------- 6 -Em blocos 1.3, so descritas as variveis globais que so utilizados na funo, bem como as variveis
locais so abertos e descritos. No ciclo 'para' (blocos 3-6), os despachos do mesmo tipo so
selecionados e, se for o StopLoss de qualquer dessas encomendas maior a partir do preo atual do
que o que foi definido pelo usurio, a ordem modificada.
Para tornar o cdigo mais orientada para os humanos, os valores de alguns elementos do array fim
Mas_Ord_New so atribudos a simples variveis (blocos 3-4). Em seguida, a necessria verificao
ser feita para a varivel TralingStop: Se o valor dessa varivel inferior ao mnimo permitido distncia
definida pelo tratamento no centro, ela ser aumentada at o valor mnimo permitido.
No bloco 4.5, de acordo com o tipo de ordem, so necessrios clculos feitos. Por exemplo, se o valor
do parmetro transferido Sugesto 1 (um fim Venda de deveriam ser modificados), o controle ser
passado para a marca 'case 1' do operador 'mudar'.A necessidade de alterar a ordem StopLoss aqui
est marcada (de acordo com as regras que se aplicam a este tipo de ordem, ver Requisitos e
Limitaes em Making Ofcios). Se no for definido StopLoss ou se ele estiver definido sobre uma
distncia maior do que o valor de TralingStop a partir do preo corrente de mercado, o novo valor
desejado de StopLoss calculado. Trade pedido de alterao da ordem formada em linha:
bool = OrderModify Ans (Bilhete, Preo, SL, TP, 0); / / modificar isso!
Notou-se antes que a estratgia comercial considerada aqui implcita a existncia de um mercado nico
fim. No entanto, a funo Tral_Stop () prev a possibilidade de modificar vrias ordens de um tipo de
mercado. Se o operador no intervir em negociao durante os trabalhos da EA, sem necessidade de
modificar vrias ordens ocorre. No entanto, se o comerciante abre um mercado para manualmente
(para alm dos j abertas), temos de decidir qual das ordens disponveis devem ser alterados, como o
primeiro e porqu.
Ao estudar a seqncia de fecho de vrias ordens, temos dito que o critrio que define a prioridade
das ordens de fechamento foi o valor dos lotes. Esta soluo bvia - o mais lotes (do total) esto
fechados, quanto mais cedo a EA vai resposta ao desencadeamento do fechamento critrio. O
problema de ordem sequencial modificao no tem soluo sem ambiguidades. Em todos os casos, o
critrio de ordem modificao seqncia determinada pela essncia da estratgia comercial. Este
critrio pode ser tanto a quantidade de lotes, o fato de no StopLoss em uma das ordens, sendo a
distncia entre StopLoss ao preo actual. Em vrios casos, este critrio pode ser expresso atravs de
um ndice global - o tamanho das perdas que podem resultar de alteraes de preos acentuadas, ou
seja, quando todas as ordens no mercado so fechadas automaticamente pelo StopLoss ao mesmo
tempo.
No exemplo acima da funo Tral_Stop (), uma ordem aleatria de modificao realizada - as ordens
so modificados na seqncia, em que ocorrem na perda de mercado aberto e de encomendas
colocadas encomendas pendentes. Em cada caso especfico, a funo deve ser refinado mediante - a
ordem sequencial modificao deve ser programado de acordo com as regras especficas de sua
estratgia comercial.
Deve ser dada especial ateno para o facto de todos os negcios so feitos na modalidade realtime. Se houver muitos pedidos, a EA vai gerar uma grande variedade de comrcio

pedidos. Obviamente, o mercado pode virar-se enquanto os pedidos esto sendo executados. No
entanto, a funo no devolver o controle para a funo Comrcio () que tem chamado a ele at que
todas as ordens que devem ser modificados so modificadas. Isto significa que o perigo de um
comrcio omitindo pedido de abertura ou fechamento de ordens pode ocorrer. Por esta razo,
qualquer estratgia deve ser codificado de modo a que no se permita uma quantidade considervel
de ordens no mercado a estar disponveis em um momento.
No bloco 5.6, tenho os erros durante a execuo do comrcio solicitaes so analisadas. Se o erro
crtico, a funo vai terminar as suas operaes. No entanto, caso tenha sido um erro overcomable
tenho, o valor do contador 'i' diminudo em 1.Assim ser feito, a fim de produzir mais uma tentativa
de modificar o mesmo fim, na prxima iterao do ciclo 'para'.
Na maioria dos casos, o cdigo acima ir cumprir-se a necessidade de modificar vrias ordens. Ao
mesmo tempo, se houver mudanas tm lugar na ordem (por exemplo, uma ordem ser fechada
quando o preo de mercado chega a uma paragem dos nveis), dentro do perodo de vrias tentativas
falhadas para modificar ordens, a seqncia de ordens no array Mas_Ord_New tambm pode
mudar. This will result in that an order may be omitted and not modified within the period of the last
launching of the special function start(). This situation can be improved at the next tick, at the next
launch of the function start().
Erro ao processar funo
Os erros que aparecem durante a execuo comrcio encomendas podem ser divididos em dois grupos overcomable (no-crticos) erros e erros crticos. Overcomable erros so aqueles que ocorrem falhas no
servidor. Depois de terem sido eliminados, pode continuar a negociao. Por exemplo, um pedido pode
ser rejeitado pelo corretor, se no h informaes sobre as atuais cotaes no momento. Este tipo de
situao pode aparecer em um mercado lento, ou seja, quando no carrapatos renda com
freqncia. Ou, pelo contrrio, o corretor no pode executar uma das muitas solicitaes dos
comerciantes de um mercado activo, onde muitas aspas so prximos. Em seguida aparece a pausa
antes de a ordem seja executada ou - por vezes - uma negao. Nesses casos, o Expert Advisor
continuar o seu trabalho e maio, por exemplo, repetir o pedido um pouco mais tarde, aps a execuo
de algum cdigo relacionada com o cdigo de erro.
Erros crticos incluem todos os erros que alerta sobre grave perturbao. Por exemplo, se uma conta
est bloqueada, ento no vale a enviar solicitaes comerciais. Nesse caso, a EA deve exibir a
mensagem correspondente e no dever repetir o pedido. O erro ao processar funo deve ser usada
em uma indispensably normal EA.

Erro ao processar erros personalizado funo ()


bool Erros (Error int)
A funo retorna TRUE, se o erro overcomable. Caso contrrio, retorna FALSE.
O Erro de parmetro pode ter qualquer valor e correspondem a nenhum cdigo de erro que ocorreu
durante a tentativa de fazer um comrcio.
O usurio-definidas erro ao processar Erros funo () concebido como incluir o arquivo Errors.mqh:
//------------------------------------------------ -------------------/ / Errors.mqh
/ / O cdigo deve ser usado apenas para fins educacionais
.
//------------------------------------------------ --------------- 1 -/ / Erro ao processar funo.
/ / Retorno valores:

/ / True - se o erro overcomable (ou seja, trabalho pode ser continuado)


/ / Falso - se o erro crtico (ou seja, impossvel negociao)
//------------------------------------------------ --------------- 2 -bool Erros (Error int) / / Custom funo
(
/ / Error / / Erro nmero
if (erro == 0)
return (false); / / Nenhum erro
Informar (15, Erro); / / Mensagem
//------------------------------------------------ --------------- 3 -switch (Error)
(/ / Overcomable erros:
caso 129: / / Errado preo
caso 135: / / Preo alterado
RefreshRates (); / / Renew dados
return (true); / / O erro overcomable
caso 136: / / No h citaes. Esperando pelo carrapato para vir
while (RefreshRates () == false) / / Antes novo carrapato
Sono (1); / / Atraso no ciclo
return (true); / / O erro overcomable
caso 146: / / O comrcio subsistema est ocupado
Sleep (500); / / Soluo Simples
RefreshRates (); / / Renew dados
return (true); / / O erro overcomable
/ / Crtica erros:
case 2: / / erro comum
caso 5: / / antiga verso do cliente terminal
caso 64: / / Conta bloqueada
caso 133: / / Trading proibida
default: / / Outras variantes
return (false); / / Critical erro
)
//------------------------------------------------ --------------- 4 -)
//------------------------------------------------ -------------------Uma das perguntas que surgem quando escrevo os algoritmos de processamento de erro Erros funo ()
: O que deve voltar a funcionar, se o valor de um determinado parmetro 0 (ou seja, no h
erros). Este tipo de situao no deveria aparecer em um corretamente codificados EA. No entanto, o
cdigo pode ser modificado diversas vezes, reforando o programa, por isso s vezes o valor de um erro
pode ser igual a 0. Portanto, seria razovel para adicionar algumas linhas para a funo em fase de
desenvolvimento do primitivo (blocos 2-3), para situaes em que o erro igual a 0.
A reao dos Erros () a funo do valor do erro zero varivel depende do algoritmo usado para o
tratamento dos valores devolvidos pela funo. O valor devolvido pela funo tomado em considerao
para o executvel comrcio funo do acima exposto EA. Se os erros () funo retorna 'verdadeira' (erro
overcomable), em seguida, o programa ir fazer uma nova tentativa para o comrcio. Se ele retorna
"falso" e, em seguida, o comrcio deixa de funcionar e que o controlo passado para o seqencialmente
chamando funo, em seguida, ao iniciar () function, e depois para o cliente de terminal. Se a escolha
entre estas duas alternativas, ento a situao em que no h erros (Error = 0) corresponde com a
segunda alternativa, ou seja, com o falso valor devolvido. Ele garante que uma vez executado um
pedido no ser repetida.
Depois que a mensagem sobre o erro exibido pela Inform () function, o controlo passado para
bloquear 3-4, para o operador "switch". A variante especfica para cada caso esteja envolvida
considerado cdigo de erro. Por exemplo, caso ocorra erro 136, significa que o corretor no tem
corrente aspas para uma adequada tomada deciso. Isto significa que a situao no vai mudar se um
novo carrapato vem, ento no h necessidade de repetir o envio do mesmo comrcio pedido porque ele
no ser executado, de qualquer maneira. A soluo acertada nesta situao a pausa - a ausncia de

iniciativa por parte da EA. Um mtodo simples para a deteco de um novo carrapato usado para esta
finalidade - a anlise do valor devolvido pela RefreshRates () function. O controle ser devolvido para o
chamado funo, em que o pedido repetido comrcio (aps a anlise correspondente, caso seja
necessrio), logo que o novo carrapato vem.
Se houver um erro o programador considera ser um crtico, a funo retorna "falso". O pedido no ser
repetido, em tal caso, portanto, no h necessidade de fazer alguma coisa na Erros () function. Todos os
erros no processados so consideradas essenciais por omisso. Voc pode expandir a lista de erros
processveis (ver Cdigos de erro).
As caractersticas gerais de programas complexos
No existe uma nica caracterstica que distingue formal de um programa habitual de um complexo
um. Em geral, os programas complexos positivamente diferem entre si em uma variedade de
ferramentas fornecidas e quantidade das informaes tratadas.Apenas alguns dos adjectivos qualitativos
que so peculiares para os programas complexos podem ser denotado.
Programa execuo fim
Como regra geral, um costume programa contm o seu cdigo em especial a funo start () que a
execuo iniciada pelo cliente terminal. Na maioria dos casos funo start () tempo de execuo
consideravelmente menor do que o carrapato perodo. Isto significa que a maior parte do tempo, o
programa est esperando por um carrapato que se avizinham. Este tipo de processos so caracterizados
pelo on-off rcio prazo. Ratio on-off o rcio de repetio de um processo para o perodo de durao do
processo em si. O tempo de execuo de incio () 1 quase de 10 a 100 milisegundos, e entre o
tempo 2carrapatos de 5 segundos, em mdia. Assim, a on-off de uma relao de trabalho est a
atingir 2/1 EA = 1000 e mais (ver fig. 159). Isto quer dizer que a durao normal de uma efectiva
capacidade de funcionamento da EA 0,1% de todo o tempo, o resto do tempo que est em p.
s vezes clculos complexos podem ser executados por um EA e, como resultado da durao do incio ()
execuo pode ser mais longo alcance e de dezenas de segundos. Nesses casos inicia () funo no ser
iniciado em todos os carrapatos, mas apenas sobre os carrapatos que vieram ao passo que o incio ()
est esperando por eles. A fig. 159 revela que carrapatos o que veio a iniciar a execuo do () function
perodo (no momento t4) no vai causar uma nova funo especial do comeo. A prxima vez que o
incio () vai comear a funcionar no momento T5. A pausa entre o final do atual execuo eo incio da
prxima execuo do incio () ir aparecer com funo desta disposio.

Fig. 159 Diferentes on-off, enquanto o rcio start () funo executada pelo cliente terminal
e ciclada a iniciar () function.
Existe um mtodo eficaz para aumentar a capacidade do programa essencialmente, diminuindo assim o
on-off rcio do comrcio processo de gesto. Para o efeito vamos implementar um algoritmo, segundo o

qual o cdigo principal muitas vezes (infinitamente) repetida durante o arranque () execuo (EAs e
permitido apenas em scripts). A exemplo do incio anelada () mostrado abaixo:
//------------------------------------------------ -------------------start () / / Especial funo start ()
(
while (! IsStopped ()) / / At usurio ..
(/ / .. Pra execuo do programa
RefreshRates (); / / Dados renovao
//...................... O cdigo principal do programa especificado aqui
Sono (5); / / Breve pausa
)
retorno; / / O controle retornado para o terminal
)
//------------------------------------------------ -------------------Todo o cdigo especificado no corpo do "enquanto o" ciclo operador, e que o nico caminho para sair
do ciclo para receber um comando a partir do terminal cliente para finalizar a execuo do
programa. Se o incio () construdos em funo deste princpio especificado iniciado, ele ser
executado infinitamente longo e vai retornar controle para o cliente terminal apenas quando um usurio
manualmente remove a EA a partir de uma janela de segurana ou de fornecer algumas outras
condies (ver Funes Especiais) .
A execuo do ciclada iniciar () funo correr ininterruptamente, e por isso que no existe um
perodo em que o programa est no modo de espera de um novo carrapato (ver fig. 159), de modo a
on-off razo do processo de ciclada execuo do programa igual a 1. O incio () funo que se baseia
no princpio especificado iniciada pelo cliente terminal apenas uma vez.Isto significa que a actualizao
da informao (por exemplo, mercado aspas) deve ser realizada utilizando-se obrigatria RefreshRates ()
function. A fim de evitar o grande consumo de recursos muito uma curta pausa no final do ciclo pode ser
especificado.
O desenvolvimento de enlaar o programa exige muita ateno, enquanto que compem o
algoritmo. Por exemplo, a reaco de um programa em um costume recebido crticas de erro comear
a quebrar () funo execuo e retornando o controle para o terminal do cliente. Um programa ciclada
mantm controle permanente enquanto executa-lo a outra deve ser reaco previsvel, como por
exemplo a proibio do comrcio encomenda gerao durante algum perodo. No entanto, a proibio
temporria no devem impedir o programa execuo. Durante todo o perodo execuo, o programa
deve tratar todas as informaes disponveis sobre os eventos, incluindo o controlador de aes de um
usurio. Em geral, essas incomensurveis programa possui uma potncia em comparao com uma
usual.
Ferramentas disponveis
Utilizao de programas enlaado s faz sentido se a continuidade de um programa execuo
efetivamente utilizado. Por exemplo, um tal programa pode processar um comerciante de controle da
aes. A alterao das coordenadas de objetos grficos ou o fato de atribuir a outros programas - scripts
e os indicadores podem ser considerados como controlar as aces.
Um programa simples pode responder a alguns eventos (incluindo iniciou-usurio) a iniciar uma regular
da funo especial start () sobre a aproximao de carrapato, como uma regra. Enquanto uma ciclada
programa pode processar todas as ocorrncias (!). Neste caso, a defasagem pode ser apenas por um
curto espao de tempo, no mais do que o tempo de execuo de um ciclo de incio () funo (no mais
que cerca de 10-100 ms).
Um programa complexo pode usar objetos grficos para apresentar caractersticas ou regras fim da sua
modificao. Por exemplo, as encomendas de todos os tipos so mostrados em uma janela de segurana

nas linhas verdes, pra de ordens - em linhas vermelhas. E se vrias ordens so mostradas na tela ao
mesmo tempo, muito difcil de detectar em que linha pertence a este ou aquele fim. Mas, se
aplicarmos o objeto grfico "linha horizontal" de uma cor eo estilo necessrio para cada linha fim, ser
muito mais fcil de diferenciar entre as suas ordens e ordens stop.
Alm disso, o fato de mudar as coordenadas desses objetos podem ser percebidos por um programa
como um guia para a aco. Por exemplo, se um usurio muda uma linha horizontal mostrando uma
ordem pendente at vrios pontos, como resultado desta aco, o programa pode formulrio e enviar
para o servidor um pedido comrcio, segundo a qual a ordem deve ser modificada, ou seja, abrir o
preset preo devia ser aumentado em vrios pontos (para uma execuo imediata da utilizao de um
programa furado obrigatria). Assim, um programa complexo pode oferecer a possibilidade de gerir
negociao utilizando um rato.
Funo utilizada para modificao de distintas ordens de stop-declarada aberta ou um preo de uma
ordem podem ser utilizados em programas complexos tambm. Se tal funo disso usado para um fim
de linha, um objeto grfico, por exemplo, "uma seta" pode ser exibido prximo ao fim linha, o indicativo
de funo atividade.
Usando objetos grficos que voc pode configurar o cenrio comercial. Por exemplo, determinando o
"piv" bandeira a alguma distncia a partir do preo atual, voc pode informar ao programa que
necessrio para fechar a abrir uma nova ordem e uma na direo oposta quando o preo especificado
for atingido. Da mesma forma que voc pode especificar modificao nvel limites, a fim preo de fecho,
etc dentro do programa. A utilizao de objetos grficos que exibem as configuraes de um programa
aumenta consideravelmente a sensibilizao do profissional sobre acontecimentos actuais e planeadas.
Sinais sonoros associados a eventos so tambm utilizados em programas complexos. Usar soa em um
programa permite que o profissional de deixar o PC atravs de eventos e orientar pelos tipos de sinais
sonoros (melodias, vocalizado texto, etc).
A eficcia da negociao depende muitas vezes do fato se o tempo de importantes polticos e
econmicos comunicado de imprensa tida em conta. Grande maioria dos centros fornecem que tratam
os comerciantes com a lista das notcias mais prxima para a semana com a indicao da importncia e
do tempo. As informaes sobre prximos eventos gravada em um arquivo. Durante a operao um
programa l as informaes do arquivo e executa um ou outro cenrio comercial, em funo da
importncia de um prximo evento. Por exemplo, um programa pode apagar encomendas pendentes,
modificar ordens de stop-ordens no mercado, etc Pouco antes da importante notcia vem o programa
pode encerrar a negociao - feche todas as encomendas, informando preliminarmente um comerciante.
Automatizado e manual de Programas Modo de operao
Um programa complexo caracterizado por um algoritmo mais complexo de eventos de
transformao. Particularmente, este programa pressupe algum tipo de reao a um comerciante da
interferncia com o processo de negociao. Por exemplo, se uma estratgia comercial permite que
apenas um mercado e uma ordem profissional abre mais um fim, um programa complexo, em primeiro
lugar, controla este tipo de evento e, em seguida, inicia a execuo do algoritmo parte desde uma
ocasio para tal.O programa pode avisar um comerciante cerca de uma interferncia no autorizada,
num primeiro momento, e oferecer-se para apagar a estranha forma independente. Caso isso no
acontea, o programa (dependendo das configuraes) pode excluir a ordem mpar ou sair do modo de
negociao automtica informando que o profissional anteriormente.
Se um programa iniciado pela execuo quando j existem mltiplas encomendas feitas, as aes
necessrias sero realizadas em funo da sua configurao. Por exemplo, o programa pode fechar
todas as ordens sem um comerciante oposto do acordo.Se uma estratgia comercial no permite

encomendas pendentes, sero apagados na seqncia prioridade - o primeiro, mais prximo da cotao
no mercado e, em seguida, os mais caros, etc
Uma vez que o profissional tem defina a quantidade e qualidade dos limites das encomendas, em uma
estratgia de comercializao, o programa (trabalhando o tempo todo e acompanhamento dos eventos)
pode propor um comerciante para activar o modo de negociao automtica, e se um comerciante
aceita, designar a prossecuo negociao cenrio usando objetos grficos.
Cada comerciante tem seu prprio conjunto de preferncias quando se trabalha com um
programa. Alguns comerciantes admitem apenas a negociao automtica, outros comerciantes - semiautomatizada, teros preferem apenas o modo manual.Um programa projetado corretamente dever
abranger todos os requisitos, ou seja, deve ter um nmero de configuraes que fornecem diferentes
modos de utilizao. Por exemplo, um programa pode agir como um conselheiro no modo manual de
trabalho - apresentam um texto contendo recomendaes direta e tambm objetos grficos mostrando
uma tendncia rumo, previso piv pontos, etc Um programa pode pedir a um comerciante para permitir
a fim de abrir, admitir comerciante interferncia nas decises de gesto (por exemplo, manual ordens
stop-modificao) enquanto trabalha no modo semi-automatizado. No caso, o programa est sendo
executado em modo automtico a qualquer profissional da interferncia no processo de negociao pode
ser considerada como um sinal de mudana do modo de semi-automticas ou manuais.

Todas as propriedades de descrita um programa pode ser traduzido em linguagem de


programao MQL4 a base que especialmente concebido para o efeito. Um
programa complexo projetado corretamente tem vrias vantagens inegveis, um
comerciante rapidamente se acostuma-los e comea a utiliz-los na negociao.
Apndices

Glossrio.
Conceitos e termos utilizados.

Tipos de Trades.
Tipos de ordens que podem ser utilizados em Metatrader Cliente Terminal 4.

Limitaes e exigncias em Making Trade.


Algumas limitaes para a abertura, encerramento, modificar e apagar ordens.

Cdigos de erro.
Existe uma possibilidade de um erro que aparecem enquanto o programa executado.
necessrio definir a movimentao dos mais importantes erros de antecedncia. Voc pode obter
o cdigo de erro usando o GetLastError () function.

Estilos de Linhas Exibindo Indicator.


Custom indicadores permitem que voc exiba as informaes grficas usando diferentes estilos. O
estilo pode chamar DRAW_LINE linhas de largura e um estilo predefinidos. Para DRAW_ARROW
estilo necessrio especificar o cdigo exibido na seta Enrolamentos formato. O estilo
DRAW_SECTION usa um indicador-tampo, enquanto o indicador DRAW_ZIGZAG estilo requer
dois buffers: mesmo e mpar. Sabendo estilos de desenho permite-lhe combinar diferentes
mtodos de informaes mostrando em um indicador.

Propriedades e tipos de objetos grficos.


L esto 24 built-in objetos grficos que podem ser criadas atravs de um programa. Esse recurso
permite a fornecer indicadores EAs e com abundantes visualizao ferramentas
adicionais. Propriedades como objeto comum, por exemplo, juno ponto objeto e cores podem
ser definidas, bem como propriedades de um objeto individual grfica. Quando algumas
propriedades foram objeto alteradas, o objeto pode ser imediato (forcedly) redesenhado usando o
WindowsRedraw () function.

Wave Files.
Voc pode redefinir o conjunto da onda arquivos que so utilizados em Metatrader 4. Para fazer
isso abra o "Tools" - "Opes" janela e vaga necessrio especificar os arquivos em "Eventos"
tab. Voc pode jogar os arquivos anexados em seus prprios programas utilizando o PlaySound ()
function.

Funo MessageBox () Retorno Cdigos.


O MessageBox () Esta funo permite que voc organize a interao entre um programa e um
usurio durante o processo de execuo directa. Processamento de cdigos de retorno a
MessageBox () permite a janela para orientar os programas em execuo, dependendo do boto
pressionado por um usurio. Isso torna o programa mais flexvel.

Consulta Identificadores Utilizado na MarketInfo () Funo.


O MarketInfo () funo lhe permite obter informaes sobre diferentes uma conta comercial e de
propriedades comerciais de segurana do servidor.

Lista de Programas.
Todos os programas que foram utilizados neste livro.

Glossrio

Algoritmo preciso uma instruo para completar uma sequncia predefinida agir; controle
em um programa executvel transferida de acordo com o algoritmo.

Application Program um programa codificado em MQL4 e utilizado em Metatrader Cliente


Terminal 4; ele pode ser um Expert Advisor, um script ou um indicador.

Array - um conjunto organizado dos valores de um tipo de variveis que tm um nome


comum. Arrays podem ser one-dimensional e multidimensional. O montante mximo admissvel
de dimenses em um array quatro. Matrizes de quaisquer tipos de dados so permitidos.

Array Componente uma parte de um array, uma varivel indexada com o mesmo nome e
um valor.

Pergunte se o mais elevado dos dois preos oferecidos pela corretora em uma Frase TwoWay para uma Segurana.

Bar uma representao grfica de um preo de tabela. Bar caracterizada por Abrir, Fechar,
Alta, Baixa dos preos, bem como pelo volume e tempo (ver tambm Castial).

Lance o menor dos dois preos oferecidos pela corretora em uma Frase Two-Way para
uma Segurana.

Tampo uma rea de memria contendo valores numricos de um indicador array.

Built-In Funo o mesmo que uma norma funo.

Comprar um mercado que define ordem de compra de activos de uma cauo.

BuyLimit est pendente uma ordem de compra activos para uma segurana a um preo inferior
ao actual. A ordem ser executada (Buy modificados na ordem do mercado) Pergunte se o preo
atinge ou cair abaixo do preo fixado na ordem pendente.

BuyStop est pendente uma ordem de compra activos para uma segurana a um preo superior
ao actual. A ordem ser executada (Buy modificados na ordem do mercado) Pergunte se o preo
atinge ou ultrapassa o preo estipulado na ordem pendente.

Candlestick uma representao grfica de um preo grfico. Castial caracterizada por


Abrir, Fechar, Alta, Baixa dos preos, bem como pelo volume e hora. A pode ser preto e branco
castiais castiais (ver tambm Bar).

Um comentrio opcional e nonexecutable parte de um programa.

Constante um programa constituinte, um objeto que tem um valor.

Expresso constante uma expresso constituda de constantes e operaes, como por


exemplo: 2 +3 * 7. Uma expresso constante calculada em tempo compilar.

O controle execuo de aes previamente definidas pelo programa e pelo algoritmo as


propriedades do cliente terminal. Controle pode ser transferido dentro de um programa a partir de
um programa de linha para a outra, assim como entre o programa eo cliente terminal (ver alguns
conceitos bsicos).

Instrumento moeda um par cambial, por exemplo, EURUSD, GBPCHF, etc, uma especial de
segurana (smbolo).

Indicador personalizado codificada em um programa aplicativo MQL4; basicamente


destinados exibio grfica das dependncias calculadas preliminarmente. Os valores dos
componentes do Indicador Arrays personalizado de um indicador esto disponveis para outras
aplicaes atravs da funo chamada iCustom () (ver tambm Tcnico Indicator).

EA uma abreviatura de Expert Advisor (ver tambm Script e Indicator).

Expert Advisor um programa codificado em MQL4; distinguida pelo propriedades especiais


da funo start () chamado pelo cliente terminal para ser executado em cada carrapato, a
principal finalidade de Expert Advisors est programado controle sobre rotas comerciais (ver
tambm EA, Script e Indicator).

Expresso uma seqncia de operandos e operaes; gravar um programa, o valor


calculado de que caracterizada por um tipo de dados.

A varivel uma varivel externa, cujo valor est disponvel a partir das propriedades do
programa janela, que tem as propriedades de uma varivel global.

Descriptor File o nmero exclusivo de um processo aberto por um programa executvel, no


momento atual.

Ponteiro um arquivo local em um arquivo onde a leitura do prximo valor inicia. Como os dados
so lidos, o ponteiro desloca-se para a direita por uma ou vrias posies.

Arquivo separador um carcter especial, que um recorde a ser armazenado no arquivo de


dados separados registros.

Bandeira uma varivel cujo valor colocado em correspondncia com alguns fatos ou
eventos.

Parmetros formais representam uma lista de variveis que consta do cabealho da Funo
Descrio (ver tambmFunes e Funo Descrio e Operador de "regresso").

Funo um chamado, uma parte especfica do programa que descreve o mtodo de converso
de dados. A utilizao de uma funo em um programa envolve Funo Descrio e Funo
Chamada. No pode ser especial, a norma (built-in) e funes personalizadas
(ver tambm Funes e Funes Especiais).

Corpo uma funo ou vrios operadores do executvel a ser parte da Funo Descrio.

Call Function (Funo ou de Referncia) um recorde, o que resulta na execuo de


execuo de uma funo (ver tambm Funo Descrio).

A descrio uma funo especfica denominada parte de um programa destinado


execuo, consiste de duas partes principais - uma funo cabealho eo corpo de uma funo, e
utilizada em especial e personalizado funes (vertambm Funes, Funo Descrio e Operador
de regresso e Funes Especiais ).

Cabealho da funo uma parte da funo descrio, consiste do tipo do valor de retorno,
nome e funo da lista de parmetros formais. A lista de parmetros formais fechado e
colocados entre parnteses aps o nome da funo.

Referncia funo a mesma chamada da funo.

Varivel global uma varivel declarada fora todas as funes. O mbito de variveis globais
o programa inteiro.

Varivel global do Terminal Client uma varivel, cujo valor est disponvel em todas as
aplicaes do cliente lanada no terminal (abreviadamente: GV).

Objeto de Grfico - uma forma na janela do smbolo, a forma pode ser selecionado, movido,
alterados ou apagados.

GV uma abreviatura de Variable Global do Terminal Client.

O indicador um espao construdo, em funo do cliente terminal ou um programa codificado


em MQL4; o principal objetivo dos indicadores a exibio Indicador Linhas na tela; indicadores
no podem fazer trades; existem dois tipos de indicadores: Indicadores
personalizado e indicadores tcnicos ( veja tambm Expert Advisor, EA e Escrita).

Array indicador um one-dimensional array contendo valores numricos que so a base para a
construo doIndicador Line.

Indicador Line uma exibio grfica de uma certa dependncia baseada em valores
numricos includos em umIndicador Array.

A inicializao da varivel dependente do tipo de atribuir um valor para a varivel


por varivel Declarao.

Iterao repetida uma execuo de alguns clculos, ele usado para constatar que o
programa linhas que compem o ciclo operador corpo (ver tambm Ciclo do Operador ",
enquanto" e Ciclo de Operador "para") so executados.

Varivel local uma varivel declarada dentro de uma funo. O mbito de variveis locais o
corpo da funo, no qual a varivel declarada.

Hora Local o tempo definido em um PC local (veja tambm Server Time).

Loop (Cycle) um rgo ou vrios operadores includos no aparelho; localiza-se directamente


aps o ciclo operador cabealho (ver Ciclo do Operador ", enquanto" Ciclo do Operador "para").

Looping repetida continuamente uma execuo de operadores que compem o circuito


fechado (ciclo) corpo: uma situao crtica que resulta da realizao de um algoritmo errado.

Despacho do mercado executada uma ordem para comprar ou vender activos a um smbolo
(a segurana). Um mercado exibido no fim da janela do smbolo e no 'Terminal' janela at que o
fim est fechado (ver tambm a Ordem Pendente).

Preo normalizou-se de um preo arredondado para um Ponto de uma dimenso de segurana


(smbolo).

Operando uma constante, uma varivel, um componente array ou um valor retornado por uma
funo (ver Funo Chamada).

A operao feita mediante uma aco Operandos (veja tambm Operao Smbolo).

Operao Smbolo um estilo de caracteres ou um grupo de caracteres que forma a executar


uma operao.

Operador uma parte de um programa, uma frase de uma linguagem algortmica, que
prescreve um determinado mtodo de converso de dados. No pode ser simples e compostos
operadores.

Formato operador um conjunto de regras para a formatao de um operador do mesmo


tipo. Cada operador possui o seu prprio tipo de formato (ver tambm Operators).

Oposto (Contador) Ordem um mercado aberto em ordem a direco oposta direco de


uma outra ordem no mercado aberto para o mesmo smbolo.

Pendente Ordem um comrcio para comprar ou vender activos a um segurana (um smbolo)
quando o preo predefinido nvel seja atingido. A ordem pendente exibido na janela do smbolo
e no 'Terminal' janela at que ela se torna uma forma ou de mercado suprimido (ver tambm
o Mercado Order).

O ponto a unidade de medio, para um preo de segurana (o preo mnimo possvel mudar,
o ltimo algarismo significativo do preo do valor).

Predefinidos varivel uma varivel com um nome predefinido, o valor dessa varivel
definida pelo cliente terminal e no podem ser alterados pela codificao (ver tambm Predefinida
Variables).

Sada transferncia regular Loop de controle fora do ciclo operador, como resultado da
execuo de uma condio colocada no cabealho operador ciclo (ver tambm Especial Loop
Exit).

Script um programa codificado em MQL4; marcado por propriedades especiais da funo de


incio () chamado pelo cliente terminal para ser executado apenas uma vez; scripts so
destinados para a realizao de quaisquer operaes que devem ser executadas apenas
implicitamente uma vez (ver tambm Expert Assessor de EA e Indicator).

Segurana (Symbol) o nome do objeto a ser citado.

Vender um mercado que define ordem de venda de activos para uma segurana .

SellLimit est pendente uma ordem de vender activos para uma segurana a um preo superior
ao actual. A ordem ser executada (modificado em ordem Vender mercado) se o preo de lance
atinge ou ultrapassa o preo estipulado na ordem pendente.

SellStop est pendente uma ordem de vender activos para uma segurana a um preo inferior
ao actual. A ordem ser executada (modificado em ordem Vender mercado) se o preo de lance
atinja ou cair abaixo do preo fixado na ordem pendente.
O tempo o servidor de tempo definido no servidor (ver tambm hora local).

Funo Especial uma funo que possui um dos nomes predefinidos (init (), start
() e deinit ()) e chamada para ser executado pelo cliente terminal, mas tambm tem suas
prprias caractersticas especiais (ver Funes Especiais).

Sada transferncia Loop especiais de controle fora do ciclo operador, como resultado da
execuo do operador "quebrar" o ciclo operador includo no organismo (ver tambm Regular
Loop Exit).

Spread a diferena entre os maiores e os menores preos nos dois pontos em uma citao de
um caminho-de segurana.

Funo padro o mesmo que foi construda em funo, que uma funo criada pelos
programadores do MQL4, tem um nome predefinido e propriedades predefinidas, a descrio das
funes habituais em um programa no especificado; funes habituais so propriedades de
descrita no Detalhes no MQL4 Referncia (ver Funes e Funes Standard).

StopLoss uma ordem stop, que um preo estipulado pelo comerciante, um mercado em que
a ordem ser encerrada se o smbolo preo se move numa direco que produz prejuzos para a
ordem.

TakeProfit uma ordem stop, que um preo estipulado pelo comerciante, um mercado em
que a ordem ser encerrada se o smbolo preo se move numa direco que produz lucros para o
fim.

Indicador tcnica uma parte do comrcio online plataforma Metatrader 4; um espao


construdo, em funo que nos permite mostrar uma certa dependncia em relao tela (ver
tambm personalizado Indicator).

Assinale-se de um evento caracterizado por um novo preo para um smbolo em algum


momento.

Calendrio um perodo de tempo, dentro do qual um preo bar formado; existem vrios
calendrios padro: 1, 5, 15, 30, 1, 4, D1, W1 e MN (1 min, 5 min, 15 min, 30 min , 1
h, 4 h, 1 dia, 1 semana e 1 ms, respectivamente)

Time-Series Array um array com um nome predefinido (Abrir, Fechar, Mximo, Mnimo,
volume ou tempo); seus componentes contm os valores correspondentes das caractersticas
histricas das grades.

O comrcio abertura, o encerramento ou a alterao do mercado, e enquanto se aguarda


ordens.

O comrcio uma solicitao feita pelo comando de um programa ou por um comerciante, a


fim de realizar umcomrcio. A ordem pode ser executada em ou rejeitado pelo servidor ou pelo
cliente de terminal.

Trader uma pessoa que negoca dos mercados financeiros para fins de lucro.

Two-Way Citaes so ligados um par de mercado os preos oferecidos pela corretora para a
compra e venda de activos para uma segurana no momento.

Typecasting est modificando (mapeamento) dos tipos dos valores de um Operando ou


uma Expression. Antes da execuo de operaes (todas as operaes, mas cesso), so
alteradas para um tipo da mais alta prioridade, que antes da realizao da cesso operaes
forem modificados para o tipo de alvo.

Funes Definidas Por Usurio uma funo criada pelo programador (ver tambm
a funo).

Varivel uma parte de um programa, este um objeto com um nome e um valor.

Declarao varivel a primeira meno de uma varivel em um programa. Na sua declarao


tipo varivel especificado.

Identificador varivel um conjunto de caracteres consistindo de letras, nmeros e caractere


(s), que tem incio com uma carta, no mximo 31 caracteres. o mesmo que Nome da varivel.

Nome varivel o mesmo que Varivel Identificador.

mbito varivel um local em um programa em que o valor da varivel est disponvel. Cada
varivel tem o seu mbito (ver tambm o Varivel Local e Global Varivel).

Zero Bar o atual bar ainda no completamente formado. Em uma janela do smbolo, o zero
exibido na barra direita posio.

ipos de Trades
Um tipo de comrcio no OrderSend () funo pode ser indicada como uma constante predefinidos ou
como seu valor de acordo com um tipo de comrcio:
Constante

Valor

Operao de negociao

OP_BUY

0 Comprar

OP_SELL

1 Vender

OP_BUYLIMIT

2 Enquanto se aguarda despacho comprar limite

OP_SELLLIMIT

3 Enquanto se aguarda despacho vender limite

OP_BUYSTOP

4 Enquanto se aguarda despacho comprar parar

OP_SELLSTOP

5 Enquanto se aguarda despacho vender parar

Limitaes e exigncias em Making Trades


Tabelas abaixo mostram que o clculo valores-limite da realizao de transaces quando abrir, fechar, a
colocao, suprimindo ou modificando ordens.
Para obter a distncia mnima para StopLevel e congelamento distncia FreezeLevel o MarketInfo
() funo deve ser chamado.
Requisitos.
Corretos os preos utilizados quando realizar operaes comerciais.

Tipo de
Ordem

Abrir
Preo

Preo
fechar

Comprar

Perguntar

Bid

Vender

Bid

Perguntar

Preo de abrir
uma Ordem
Pendente

Enquanto aguarda um decreto


transformando em aMarket
Ordem

BuyLimit

Abaixo do preo
corrente Pergunte

Pergunte preos chega a abrir


preo

SellLimit

Acima do preo
actual de lance

Proposta de preo chega a abrir


preo

BuyStop

Acima do preo
actual Pergunte

Pergunte preos chega a abrir


preo

SellStop

Abaixo do preo
corrente de oferta

Proposta de preo chega a abrir


preo

A possibilidade de excluso de uma ordem pendente regulamentada pela FreezeLevel parmetro.


StopLevel distncia mnima limitao.
Um comrcio operao no ser realizada se alguma das seguintes condies for interrompida.
Tipo de
Ordem

Abrir Preo

StopLoss (LS)

TakeProfit (TP)

Comprar

Modificao proibida

Lance-SL StopLevel

Vender

Modificao proibida

Pergunte-SL StopLevel Pergunte-TP StopLevel

TP-Bid StopLevel

BuyLimit

Pergunte-OpenPrice StopLevel OpenPriceSL StopLevel

TPOpenPrice StopLevel

SellLimit

OpenPrice-Bid StopLevel

OpenPriceTP StopLevel

BuyStop

Pergunte-OpenPrice StopLevel OpenPriceSL StopLevel

TPOpenPrice StopLevel

SellStop

Lance-OpenPrice StopLevel

OpenPriceTP StopLevel

SLOpenPrice StopLevel

SLOpenPrice StopLevel

FreezeLevel Prescrio (Congelamento Distncia).


Ordens de mercado no pode ser fechada se os valores StopLoss e TakeProfit violar os requisitos
FreezLevel parmetro.
StopLoss ou TakeProfit ordens no pode ser modificado, se StopLoss ou TakeProfit Valores parmetro
violam o StopLevel requisitos.
Enquanto se aguarda ordens no pode ser excludo ou modificado, se o preo declarado aberto viola os
requisitos FreezeLevel parmetro.
Tipo de
Ordem

Abrir Preo

StopLoss (SL)

TakeProfit (TP)

Comprar

Modificao proibida

Lance-SL> FreezeLevel

TP-Bid> FreezeLevel

Vender

Modificao proibida

Pergunte-SL>
FreezeLevel

Pergunte-TP>
FreezeLevel

BuyLimit

Pergunte-OpenPrice> FreezeLevel Regulamentado pela


StopLevel parmetro

Regulamentado pela
StopLevel parmetro

SellLimit

OpenPrice-Bid> FreezeLevel

Regulamentado pela
StopLevel parmetro

Regulamentado pela
StopLevel parmetro

BuyStop

Pergunte-OpenPrice> FreezeLevel Regulamentado pela


StopLevel parmetro

Regulamentado pela
StopLevel parmetro

SellStop

Lance-OpenPrice> FreezeLevel

Regulamentado pela
StopLevel parmetro

Regulamentado pela
StopLevel parmetro

Cdigos de erro
GetLastError () - a funo que retorna cdigos de erro. Cdigo constantes dos erros so determinados
em stderror.mqh arquivo.Para tirar as mensagens de texto utilizar o ErrorDescription () stdlib.mqh
funo descrita no arquivo.
Cdigos de erro retornado de um servidor ou cliente comrcio terminal:
Constante

Valor

Descrio

ERR_NO_ERROR

0 Nenhum erro retornado.

ERR_NO_RESULT

1 Nenhum erro devolvido, mas o resultado


desconhecido.

ERR_COMMON_ERROR

2 Erro comum.

ERR_INVALID_TRADE_PARAMETERS

3 Comrcio parmetros invlidos.

ERR_SERVER_BUSY

4 Comrcio servidor est ocupado.

ERR_OLD_VERSION

5 Antiga verso do cliente de terminal.

ERR_NO_CONNECTION

6 Sem ligao com o servidor de comrcio.

ERR_NOT_ENOUGH_RIGHTS

7 No basta direitos.

ERR_TOO_FREQUENT_REQUESTS

8 Demasiado frequentes solicitaes.

ERR_MALFUNCTIONAL_TRADE

9 Malfunctional operao comercial.

ERR_ACCOUNT_DISABLED

64 Conta desativada.

ERR_INVALID_ACCOUNT

65 Conta invlida.

ERR_TRADE_TIMEOUT

128 Comrcio timeout.

ERR_INVALID_PRICE

129 Preo invlido.

ERR_INVALID_STOPS

130 Invalid pra.

ERR_INVALID_TRADE_VOLUME

131 Invalid volume comercial.

ERR_MARKET_CLOSED

132 Mercado est fechado.

ERR_TRADE_DISABLED

133 O comrcio est desativada.

ERR_NOT_ENOUGH_MONEY

134 Falta de dinheiro.

ERR_PRICE_CHANGED

135 Preo alterado.

ERR_OFF_QUOTES

136 Off aspas.

ERR_BROKER_BUSY

137 Corretor est ocupado.

ERR_REQUOTE

138 Requote.

ERR_ORDER_LOCKED

139 Ordem est bloqueado.

ERR_LONG_POSITIONS_ONLY_ALLOWED

140 As posies longas s permitido.

ERR_TOO_MANY_REQUESTS

141 Excesso de pedidos.

ERR_TRADE_MODIFY_DENIED

145 Modificao negado porque uma forma muito


prxima do mercado.

ERR_TRADE_CONTEXT_BUSY

146 Comrcio contexto est ocupado.

ERR_TRADE_EXPIRATION_DENIED

147 Expiraes so negados pelo corretor.

ERR_TRADE_TOO_MANY_ORDERS

148 A quantidade de encomendas pendentes e abriu


atingiu o limite estabelecido por um corretor.

MQL4 tempo executar cdigos de erro:


Constante

Valor

Descrio

ERR_NO_MQLERROR

4000 Nenhum erro.

ERR_WRONG_FUNCTION_POINTER

4001 Funo ponteiro errado.

ERR_ARRAY_INDEX_OUT_OF_RANGE

4002 Array ndice est fora do alcance.

ERR_NO_MEMORY_FOR_FUNCTION_CALL_STACK

4003 N de memria para a funo


chamada pilha.

ERR_RECURSIVE_STACK_OVERFLOW

4004 Recursivo stack overflow.

ERR_NOT_ENOUGH_STACK_FOR_PARAMETER

4005 No basta pilha de parmetro.

ERR_NO_MEMORY_FOR_PARAMETER_STRING

4006 N de memria para o parmetro


string.

ERR_NO_MEMORY_FOR_TEMP_STRING

4007 N de memria para a string


temp.

ERR_NOT_INITIALIZED_STRING

4008 No inicializado seqncia.

ERR_NOT_INITIALIZED_ARRAYSTRING

4009 No inicializado seqncia em um


array.

ERR_NO_MEMORY_FOR_ARRAYSTRING

4010 N de memria para um array


string.

ERR_TOO_LONG_STRING

4011 Demasiado longa seqncia.

ERR_REMAINDER_FROM_ZERO_DIVIDE

4012 Restante do zero dividir.

ERR_ZERO_DIVIDE

4013 Zero dividir.

ERR_UNKNOWN_COMMAND

4014 Comando desconhecido.

ERR_WRONG_JUMP

4015 Errado salto.

ERR_NOT_INITIALIZED_ARRAY

4016 Array no inicializado.

ERR_DLL_CALLS_NOT_ALLOWED

4017 DLL chamadas no so


permitidos.

ERR_CANNOT_LOAD_LIBRARY

4018 No possvel carregar biblioteca.

ERR_CANNOT_CALL_FUNCTION

4019 No podemos chamar funo.

ERR_EXTERNAL_EXPERT_CALLS_NOT_ALLOWED

4020 EA funo chamadas no so


permitidos.

ERR_NOT_ENOUGH_MEMORY_FOR_RETURNED_STRING

4021 No existe memria suficiente


para uma seqncia de regressar
de uma funo.

ERR_SYSTEM_BUSY

4022 Sistema est ocupado.

ERR_INVALID_FUNCTION_PARAMETERS_COUNT

4050 Parmetros invlidos funo


contagem.

ERR_INVALID_FUNCTION_PARAMETER_VALUE

4051 Valor Funo parmetro invlido.

ERR_STRING_FUNCTION_INTERNAL_ERROR

4052 Seqncia funo erro interno.

ERR_SOME_ARRAY_ERROR

4053 Alguns array erro.

ERR_INCORRECT_SERIES_ARRAY_USING

4054 Incorreto srie array usando.

ERR_CUSTOM_INDICATOR_ERROR

4055 Custom indicador de erro.

ERR_INCOMPATIBLE_ARRAYS

4056 Matrizes so incompatveis.

ERR_GLOBAL_VARIABLES_PROCESSING_ERROR

4057 Variveis globais processamento


de erro.

ERR_GLOBAL_VARIABLE_NOT_FOUND

4058 Varivel global no foi


encontrado.

ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE

4059 Funo no permitido no modo


de teste.

ERR_FUNCTION_NOT_CONFIRMED

4060 Funo no est confirmado.

ERR_SEND_MAIL_ERROR

4061 Envio de e-mail de erro.

ERR_STRING_PARAMETER_EXPECTED

4062 String parmetro esperado.

ERR_INTEGER_PARAMETER_EXPECTED

4063 Integer parmetro esperado.

ERR_DOUBLE_PARAMETER_EXPECTED

4064 Duplo parmetro esperado.

ERR_ARRAY_AS_PARAMETER_EXPECTED

4065 Array como parmetro esperado.

ERR_HISTORY_WILL_UPDATED

4066 Solicitadas na actualizao de


dados histria estadual.

ERR_TRADE_ERROR

4067 Alguns erros na operao


comercial execuo.

ERR_END_OF_FILE

4099 Fim de um arquivo.

ERR_SOME_FILE_ERROR

4100 Alguns arquivos de erro.

ERR_WRONG_FILE_NAME

4101 Nome do arquivo errado.

ERR_TOO_MANY_OPENED_FILES

4102 Excesso de arquivos abertos.

ERR_CANNOT_OPEN_FILE

4103 No pode abrir o arquivo.

ERR_INCOMPATIBLE_ACCESS_TO_FILE

4104 Incompatvel acesso a um


arquivo.

ERR_NO_ORDER_SELECTED

4105 Nenhuma ordem selecionada.

ERR_UNKNOWN_SYMBOL

4106 Smbolo desconhecido.

ERR_INVALID_PRICE_PARAM

4107 Preo invlido.

ERR_INVALID_TICKET

4108 Invalid bilhete.

ERR_TRADE_NOT_ALLOWED

4109 O comrcio no permitido.

ERR_LONGS_NOT_ALLOWED

4110 Longos no so permitidos.

ERR_SHORTS_NOT_ALLOWED

4111 Shorts no so permitidos.

ERR_OBJECT_ALREADY_EXISTS

4200 O objeto j existe.

ERR_UNKNOWN_OBJECT_PROPERTY

4201 Imvel objeto desconhecido.

ERR_OBJECT_DOES_NOT_EXIST

4202 Objeto no existe.

ERR_UNKNOWN_OBJECT_TYPE

4203 Tipo de objeto desconhecido.

ERR_NO_OBJECT_NAME

4204 No h nenhum objeto nome.

ERR_OBJECT_COORDINATES_ERROR

4205 Objeto coordenadas erro.

ERR_NO_SPECIFIED_SUBWINDOW

4206 No especificado subwindow.

ERR_SOME_OBJECT_ERROR

4207 Alguns erros na operao objeto.

Estilos de linhas indicadoras


Estilos de desenho de linhas indicadoras SetIndexStyle () e SetLevelStyle () funes:
Constante

Valor

Descrio

DRAW_LINE

0 Linha Simples

DRAW_SECTION

1 As seces no vazio linha entre valores

DRAW_HISTOGRAM

2 Histograma

DRAW_ARROW

3 Arrows (smbolos)

DRAW_ZIGZAG

4 Desenho e mpar at mesmo entre as sees indicador buffers

DRAW_NONE

12 Nenhum desenho

Linha de estilo. Utilizado somente se a largura da linha igual a 0 ou 1:


Constante

Valor

Descrio

STYLE_SOLID

0 Linha slida

STYLE_DASH

1 Linha tracejada

STYLE_DOT

2 Linha pontilhada

STYLE_DASHDOT

3 Dash-line e-dot

STYLE_DASHDOTDOT

4 Trao duplo ponto-e-fc Linha

Propriedades e tipos de objetos grficos


Grfica tipo de objeto usado com identificadores ObjectCreate (), ObjectsDeleteAll () e ObjectType
() funes. Pode ser qualquer um dos seguintes valores:
Tipo de Objeto

Valor

Descrio

OBJ_VLINE

0 Linha vertical. Utiliza parte do primeiro tempo, articular, o preo


ignorado.

OBJ_HLINE

1 Linha horizontal. Utiliza a primeira parte do preo coordenar, a


hora ignorado.

OBJ_TREND

2 Curva de tendncia. Utiliza 2 coordenadas.

OBJ_TRENDBYANGLE

3 Trend pelo ngulo. Utiliza 1 ou 2 coordenadas coordenar e


ngulo. Para definir uma linha ngulo (OBJPROP_ANGLE bens)
utilizar ObjectSet () function.

OBJ_REGRESSION

4 Regresso. Utiliza peas de primeira hora 2 coordenadas, preo


peas so ignorados.

OBJ_CHANNEL

5 Eqidistante canal. Utiliza 3 coordenadas.

OBJ_STDDEVCHANNEL

6 Desvio padro canal. Utiliza a tempo duas primeiras partes de


coordenadas, preo peas so ignorados.

OBJ_GANNLINE

7 Gann linha. Utiliza 2 coordenadas, mas a segunda parte do preo


coordenar ignorado. Para definir a relao entre o preo e
calendrio (OBJPROP_SCALE bens) utilizar ObjectSet () function.

OBJ_GANNFAN

8 Gann f. Utiliza 2 coordenadas, mas a segunda parte do preo


coordenar ignorado. Para definir a relao entre o preo e
calendrio (OBJPROP_SCALE bens) utilizar ObjectSet () function.

OBJ_GANNGRID

9 Gann grid. Utiliza 2 coordenadas, mas a segunda parte do preo


coordenar ignorado. Para definir a relao entre o preo e
calendrio (OBJPROP_SCALE bens) utilizar ObjectSet () function.

OBJ_FIBO

10 Retracement Fibonacci. Utiliza 2 coordenadas. Para definir o


nmero de nveis (OBJPROP_FIBOLEVELS propriedade) e os
valores de nveis (n + OBJPROP_FIRSTLEVEL bens) utilizar
ObjectSet () function.

OBJ_FIBOTIMES

11 Fibonacci fusos horrios. Utiliza 2 coordenadas. Para definir o


nmero de nveis (OBJPROP_FIBOLEVELS propriedade) e os
valores de nveis (n + OBJPROP_FIRSTLEVEL bens) utilizar
ObjectSet () function.

OBJ_FIBOFAN

12 Fibonacci f. Utiliza 2 coordenadas. Para definir o nmero de


nveis (OBJPROP_FIBOLEVELS propriedade) e os valores de
nveis (n + OBJPROP_FIRSTLEVEL bens) utilizar ObjectSet ()
function.

OBJ_FIBOARC

13 Fibonacci arcos. Utiliza 2 coordenadas. Para definir o nmero de


nveis (OBJPROP_FIBOLEVELS propriedade) e os valores de
nveis (n + OBJPROP_FIRSTLEVEL bens) utilizar ObjectSet ()
function.

OBJ_EXPANSION

14 Fibonacci expanses. Utiliza 3 coordenadas. Para definir o

nmero de nveis (OBJPROP_FIBOLEVELS propriedade) e os


valores de nveis (n + OBJPROP_FIRSTLEVEL bens) utilizar
ObjectSet () function.
OBJ_FIBOCHANNEL

15 Fibonacci canal. Utiliza 3 coordenadas. Para definir o nmero de


nveis (OBJPROP_FIBOLEVELS propriedade) e os valores de
nveis (n + OBJPROP_FIRSTLEVEL bens) utilizar ObjectSet ()
function.

OBJ_RECTANGLE

16 Rectngulo. Utiliza 2 coordenadas.

OBJ_TRIANGLE

17 Tringulo. Utiliza 3 coordenadas.

OBJ_ELLIPSE

18 Elipse. Utiliza 2 coordenadas. Para definir a relao entre o preo


e calendrio (OBJPROP_SCALE bens) utilizar ObjectSet ()
function.

OBJ_PITCHFORK

19 Andrews forquilha. Utiliza 3 coordenadas.

OBJ_CYCLES

20 Tempo voltas (cclica linhas). Utiliza 2 coordenadas.

OBJ_TEXT

21 Texto. 1 coordenar utilizaes. Para ajustar o ngulo do texto


escrito (OBJPROP_ANGLE parmetro) utilize ObjectSet ()
fucntion. Para modificar o texto utilizao ObjectSetText ()
fucntion.

OBJ_ARROW

22 Arrows (smbolos). Utiliza 1 coordenar. Para definir o smbolo


cdigo (OBJPROP_ARROWCODE parmetro) utilize ObjectSet ()
function.

OBJ_LABEL

23 Texto rtulo. Para definir as coordenadas em pixels relativamente


ao ngulo de ligao (OBJPROP_CORNER,
OBJPROP_XDISTANCE, OBJPROP_YDISTANCE parmetros) utilize
ObjectSet () function. Para modificar o texto utilizao
ObjectSetText () fucntion.

Objeto grfico usado com propriedades identificadores ObjectGet () ObjectSet (), e pode ser qualquer
um dos seguintes valores:
Objeto Parmetros

Valor

Tipo

Descrio

OBJPROP_TIME1

0 datetime Valor de set / get coordenar primeiro tempo


parcial.

OBJPROP_PRICE1

OBJPROP_TIME2

2 datetime Valor de set / get coordenar segundo tempo


parcial.

OBJPROP_PRICE2

OBJPROP_TIME3

4 datetime Valor para definir / get terceiro coordenar tempo


parcial.

OBJPROP_PRICE3

dupla Valor de set / get coordenar preo terceira parte.

OBJPROP_COLOR

color Valor de set / get objeto colorido.

OBJPROP_STYLE

int Valor de set / get estilo da linha.

OBJPROP_WIDTH

int Valor de set / get objeto largura da linha.

dupla Valor de set / get primeira parte coordenar preo.

dupla Valor de set / get segunda parte coordenar preo.

OBJPROP_BACK

bool Valor de set / get fundo objeto de desenho


bandeira.

OBJPROP_RAY

10

bool Valor de set / get ray bandeira de objetos como


OBJ_TREND e alikes.

OBJPROP_ELLIPSE

11

bool Valor de set / get elipse bandeira para


OBJ_FIBOARC objeto.

OBJPROP_SCALE

12

dupla Valor de set / get escala objeto imvel.

OBJPROP_ANGLE

13

dupla Valor de set / get imvel objeto ngulo em graus


para OBJ_TRENDBYANGLE obect.

OBJPROP_ARROWCODE

14

int Valor ou a seta enumerao set / get seta cdigo


de propriedade OBJ_ARROW obect. Pode-se sobre
o wondings de smbolos ou de um dos cdigos
predefinidos seta.

OBJPROP_TIMEFRAMES

15

int Valor de set / get calendrio objeto imvel. Ou


pode ser uma combinao do nmero de objeto
visibilidade constantes.

OBJPROP_DEVIATION

16

dupla Valor de set / get desvio de bens para


OBJ_STDDEVCHANNEL objeto.

OBJPROP_FONTSIZE

100

int Valor de set / get tamanho da fonte para


OBJ_TEXT e OBJ_LABEL objetos.

OBJPROP_CORNER

101

int Valor de set / get ncora canto imvel para


OBJ_LABEL objeto. Deve ser de 0-3.

OBJPROP_XDISTANCE

102

int Valor de set / get ncora X distncia objeto imvel


em pixels relativamente ao ngulo de ligao para
OBJ_LABEL objeto.

OBJPROP_YDISTANCE

103

int Valor de set / get ncora Y imvel objeto distncia


em pixels relativamente ao ngulo de ligao para
OBJ_LABEL objeto.

OBJPROP_FIBOLEVELS

200

int Valor de set / get Fibonacci objeto nvel


contar. Pode ser de 1 a 32.

OBJPROP_LEVELCOLOR

201

OBJPROP_LEVELSTYLE

202

int Vlaue de set / get objeto nvel estilo da linha.

OBJPROP_LEVELWIDTH

203

int Valor de set / get objeto nvel largura da linha.

OBJPROP_FIRSTLEVEL + n 210 + n

color Valor de set / get objeto nvel linha colorida.

int Valor de set / get o nmero do nvel do objecto,


em que n um ndice de nvel set / get. Pode ser
de 0 a 31.

Arquivos sonoros
O conjunto dos ficheiros wav recomendada para usar no trabalho prtico em EAs, indicadores e scripts:
Nome do Arquivo

Recomendado Termos de Uso

Close_order.wav

Mercado fim fechamento

Ok.wav

Bem sucedida encerramento de uma operao comercial

Transform.wav

Transformar uma ordem pendente em um mercado fim

Bulk.wav

Insignificante eventos

Inform.wav

Informaes diferentes (comrcio critrio modificao, etc)

Oops.wav

Informao crtica (de dinheiro, etc) ou invlidos ao

Expert.wav

O comrcio dada a ordem

Error.wav

Que terminou em uma infrutferas de operao comercial

Bzrrr.wav

Outros erros

Wait.wav

Pausa

Work.wav

Programas e arquivos necessrios esto instalados

Tick.wav

Nova carrapato

W1.wav

Outros termos

W2.wav

Outros termos

W3.wav

Outros termos

No recomendado o uso jar, demandando tempo e jogar sons.


MessageBox () Retorno Cdigos
Se uma caixa de mensagem tem um boto Cancelar, a funo retorna o valor IDCANCEL se quer a
tecla ESC for pressionado ou o boto Cancelar for selecionado. Se uma caixa de mensagem no tem
nenhum boto Cancelar, pressionando a tecla ESC no tem nenhum efeito.
Constante

Valor

Descrio

IDOK

Boto OK foi selecionado.

IDCANCEL

Boto Cancelar foi selecionado

IDABORT

Abortar boto foi selecionado

IDRETRY

Repetir boto foi selecionado

IDIGNORE

Ignorar boto foi selecionado

IDYES

Sim boto foi selecionado

IDNO

"No" foi selecionado

IDTRYAGAIN

10

Tente Novamente boto foi selecionado

IDCONTINUE

11

Continuar boto foi selecionado

Estes cdigos so definidos no regresso a WinUser32.mqh arquivo, para que este ficheiro cabealho
deve ser includo nos programas por # include <WinUser32.mqh>.
O MessageBox () funo bandeiras especificar o contedo eo comportamento de uma caixa de
dilogo. Esse valor pode ser uma combinao dos pavilhes a partir dos seguintes grupos de bandeiras:
Constante

Valor

Descrio

MB_OK

0x00000000 A caixa de mensagem contm um boto: OK. Este o


padro.

MB_OKCANCEL

0x00000001 A caixa de mensagem contm dois botes: OK e


Cancelar.

MB_ABORTRETRYIGNORE

0x00000002 A caixa de mensagem contm trs botes: Cancelar,


Repetir, Ignore e.

MB_YESNOCANCEL

0x00000003 A caixa de mensagem contm trs botes: Sim, No e


Cancelar.

MB_YESNO

0x00000004 A caixa de mensagem contm dois botes: Sim e No.

MB_RETRYCANCEL

0x00000005 A caixa de mensagem contm dois botes: Retry e


Cancel.

MB_CANCELTRYCONTINUE 0x00000006 A caixa de mensagem contm trs botes: Cancelar,


Tentar novamente, Continuar.
Para exibir um cone em uma caixa de mensagem define os pavilhes adicionais:
Constante

Valor

Descrio

MB_ICONSTOP
MB_ICONERROR
MB_ICONHAND

0x00000010 Um sinal para parar de cone aparece na caixa de


mensagem.

MB_ICONQUESTION

0x00000020 Uma pergunta-marca cone aparece na caixa de


mensagem.

MB_ICONEXCLAMATION
MB_ICONWARNING

0x00000030 Um ponto de exclamao cone aparece na caixa de


mensagem.

MB_ICONINFORMATION 0x00000040 Um cone constitudo por uma letra minscula i, em um


MB_ICONASTERISK
crculo aparece na caixa de mensagem.
Default botes so especificadas com as seguintes bandeiras:
Constante

Valor

Descrio

MB_DEFBUTTON1

0x00000000 A primeira burron MB_DEFBUTTON1 boto padro, a


menos MB_DEFBUTTON2, MB_DEFBUTTON3, ou
MB_DEFBUTTON4 especificado.

MB_DEFBUTTON2

0x00000100 O segundo boto o boto padro.

MB_DEFBUTTON3

0x00000200 O terceiro boto o boto padro.

MB_DEFBUTTON4

0x00000300 O quarto boto o boto padro.

MessageBox () funo comportamento sinalizadores so definidos no WinUser32.mqh arquivo, esse


arquivo a razo pela qual esta rubrica deve ser includa em programas atravs # include
<WinUser32.mqh>. Nem todos os possveis sinalizadores so listados aqui. Para mais detalhes, consulte
a descrio da API Win32.
MarketInfo () Identificadores
Consulta identificadores utilizados no MarketInfo () funo pode ter os seguintes valores:

Constante

Valor

Descrio

MODE_LOW

1 Preo mnimo dias

MODE_HIGH

2 Preo mximo dias

MODE_TIME

5 A ltima vez recebida carrapato.

MODE_BID

9 ltima incoming lance preo. Para o actual smbolo, que


armazenado na varivel pr-lance.

MODE_ASK

10 ltima incoming perguntar preo. Para o actual smbolo, que


armazenado na varivel predefinidos Pergunte.

MODE_POINT

11 Tamanho da ponta na citao moeda. Para o actual smbolo,


que armazenado na varivel pr-Point.

MODE_DIGITS

12 A contagem de dgitos depois da vrgula no smbolo


preos. Para o actual smbolo, que armazenado na varivel
predefinidos Dgitos.

MODE_SPREAD

13 Espalhe valor em pontos.

MODE_STOPLEVEL

14 Mnima admissvel StopLoss / TakeProfit valor em pontos.

MODE_LOTSIZE

15 Tamanho do lote em moeda base.

MODE_TICKVALUE

16 Minimal carrapato valor do depsito em moeda.

MODE_TICKSIZE

17 Dimenso mnima carrapato na citao moeda.

MODE_SWAPLONG

18 Swap de uma posio longa.

MODE_SWAPSHORT

19 Swap de uma posio curta.

MODE_STARTING

20 Comrcio data inicial (geralmente utilizados para futuros).

MODE_EXPIRATION

21 Comrcio da data de validade (normalmente utilizado para


futuros).

MODE_TRADEALLOWED

22 O comrcio permitido para o smbolo.

MODE_MINLOT

23 Lote tamanho mnimo permitido.

MODE_LOTSTEP

24 Passo para a mudana dos lotes.

MODE_MAXLOT

25 Lote tamanho mximo permitido.

MODE_SWAPTYPE

26 Swap mtodo de clculo. 0 - em pontos; 1 - o smbolo da


moeda base; 2 - por interesse; 3 - na margem moeda.

MODE_PROFITCALCMODE

27 Modo de clculo lucro. 0 - Forex; 1 - CFD; 2 - Futures.

MODE_MARGINCALCMODE

28 Modo de clculo margem. 0 - Forex; 1 - CFD; 2 - Futures; 3 CFD de ndices.

MODE_MARGININIT

29 Requisitos iniciais de margem de 1 lote.

MODE_MARGINMAINTENANCE

30 Margem de manter posies abertas calculado para 1 lote.

MODE_MARGINHEDGED

31 Cobertos margem calculada para 1 lote.

MODE_MARGINREQUIRED

32 Livre margem necessria para abrir 1 lote para comprar.

MODE_FREEZELEVEL

33 Ordem congelar nvel em pontos. Se a execuo preo se


situa dentro do intervalo definido pelo congelamento nvel, a

ordem no pode ser modificada, cancelada ou fechada.


Lista de Programas
Expert Advisors:
Nome

Descrio com o link para a seo

create.mq4

Exemplo de um cdigo de programao comentados

simple.mq4

Exemplo de um simples EA, a execuo de funes especiais

possible.mq4

Exemplo de um programa correto estrutura

incorrect.mq4

Exemplo de um programa incorrecto estrutura

userfunction.mq4

Exemplo simples de uma funo definida aplicao de usurio

onelevel.mq4

Exemplo de outra operadora se-candidatura

twolevel.mq4

Exemplo de outra operadora se-candidatura

twoleveloptim.mq4

Exemplo de outra operadora se-candidatura

compoundcondition.mq4

Exemplo de outra operadora se-candidatura

pricealert.mq4

Exemplo de aplicao operador mudar

predefined.mq4

Atualizando um valor predefinido de uma varivel

countticks.mq4

Exemplo de aplicao varivel global (assinalar contador)

staticvar.mq4

Exemplo de aplicao varivel esttica (assinalar contador)

externvar.mq4

Exemplo de programas externos aplicao

globalvar.mq4

Exemplo de aplicao GlobalVariable

stringarray.mq4

Exemplo de aplicao string array

extremumprice.mq4

Uso de valores de sries cronolgicas array elementos

newbar.mq4

Detectando o fato de um novo aparecimento bar (de sries


temporais array)

modifystoploss.mq4

StopLoss mercado ordens de modificao

callindicator.mq4

Chamando uma funo a partir de um indicador tcnico EA

historybars.mq4

Chamando IMA () a partir de uma funo tcnica indicador EA

callstohastic.mq4

Chamando iStochastic () a partir de uma funo tcnica indicador


EA

tradingexpert.mq4

Simples EA. Estrutura, estratgia, algoritmo.

shared.mq4

EA calcula que o comrcio critrios, com base num indicador


personalizado.

comment.mq4

Exibindo um texto no canto superior esquerdo de uma janela de


segurana

dialogue.mq4

EA apoiar um dilogo com um usurio

grafobjects.mq4

EA que usa OBJ_LABEL objeto grfico

moveobjects.mq4

EA que gere a posio de uma grfica de objetos

charts.mq4

EA que gere objetos grficos nas janelas de uma janela de


segurana

strings.mq4

EA que gere objetos grficos para colorir castial

timebars.mq4

EA que exibe um carrapato prximos tempos e barra abertura vez

bigbars.mq4

EA para procurar um bar que no seja inferior a uma determinada


altura

timeevents.mq4

EA que realiza alguma ao em um perodo de tempo especificado

createfile.mq4

EA notcias calendrio para a criao de arquivo

matrix.mq4

EA para transpor matriz

heck.mq4

Direitos limitao ao utilizar programas que so distribudos numa


base comercial

usualexpert.mq4

EA usual que usa arquivos incluem

Scripts:
Nome

Descrio com o link para a seo

pifagor.mq4

Exemplo de um programa de usurio, sem qualquer funo definida

gipo.mq4

Exemplo de funo definida aplicao de usurio

fibonacci.mq4

Exemplo de ciclo, enquanto operador aplicao

sumtotal.mq4

Exemplo de aplicao para o ciclo operador

rectangle.mq4

Exemplo de quebra operador aplicao

area.mq4

Exemplo de quebra operador aplicao

sheep.mq4

Exemplo de aplicao continuar operador

othersheep.mq4

Exemplo de aplicao continuar operador

barnumber.mq4

Exemplo de aplicao operador mudar

callfunction.mq4

Exemplo de funo definida aplicao de usurio

countiter.mq4

Intertick ciclos counter

arrayalert.mq4

Exemplo de matrizes de inicializao

simpleopen.mq4

Simples script de abertura ordem

confined.mq4

Script com erro simples anlise

improved.mq4

Script pode trabalhar em qualquer janela de segurana

mistaken.mq4

Script com a abertura incorreto preo

conditions.mq4

Script para definir um preo para

openbuy.mq4

Script para a abertura do mercado para Comprar

openbuystop.mq4

Script de abertura BuyStop ordem pendente

closeorder.mq4

Um script para fechar o mercado de encomendas

deleteorder.mq4

Script para apagar uma das ordens pendentes

closeby.mq4

Script para fechamento de ordens opostas

modifyorderprice.mq4

Script para modificar ordem pendente

timetablenews.mq4

Script para ler dados de um arquivo e exibir objetos grficos

deleteall.mq4

Script, que elimina todas as variveis globais do cliente terminal

Indicadores:
Nome

Descrio com o link para a seo

userindicator.mq4

Simples personalizado indicador (Alto e Baixo linhas)

averagevalue.mq4

Simples personalizado indicador (alta e baixa mdia)

separatewindow.mq4

Custom indicador em uma janela separada

displacement.mq4

Deslocamento vertical e horizontal das linhas personalizadas


indicador

roc.mq4

Custom indicador ROC

rocseparate.mq4

Custom indicador ROC em uma janela separada

indicatorstyle.mq4

Indicador mostrando a linha High

linelevel.mq4

Indicador que mostre a diferena entre alta e baixa

Inform.mq4

Indicador que cria um vazio subwindow em uma janela de


segurana

Os arquivos incluem:
Nome

Descrio com o link para a seo

Variables.mqh

Incluir arquivo que contm variveis globais declarao

Check.mqh

Funo que limites aos direitos de utilizao

Terminal.mqh

Ordem funo contabilstica

Inform.mqh

Funo para exibir uma mensagem em um subwindow criado pelo


indicador Inform.mq4

Events.mqh

Eventos rastreio funo

Lot.mqh

Funo para definir a quantidade de lotes

Criterion.mqh

Funo define critrio para o comrcio

Trade.mqh

Controlo do comrcio funes

Close_All.mqh

Funo para fechar todas as ordens no mercado de um determinado


tipo

Open_Ord.mqh

Funo para abrir um mercado de um determinado tipo oder

Tral_Stop.mqh

Funo para modificar todas as ordens no mercado de um


determinado tipo

Errors.mqh

Funo erro de processamento

Você também pode gostar