Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
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.
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.
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"
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).
Fig. 5. O estado da memria celular de uma constante quando se define o valor para o programa.
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.
mesmo, considerando que o programa se torna a cpia do valor contido na clula de memria alocado
para essa varivel (Fig. 8).
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.
int - inteiros;
duplo - nmeros reais;
bool - booleanos (lgicos) valores;
string - valores do tipo string;
cor - valores de cor tipo;
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
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
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 '
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
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
x+2
--
x - 3, y = - y
Multiplicao de valores
3*x
Quociente da diviso
x/5
Resduo de diviso
minutos = tempo% 60
y++
y=y+1
y --
y=y-1
++
--
Cesso de Operaes
Os seguintes smbolos pertencem a cesso operaes smbolos:
Smbolo
=
Operao
Exemplo
Analgico
x=
+=
+=x
y=y+x
-=
y -= x
y=y-x
*=
y *= x
y=x*y
/=
y/x=
y=y/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 =
<
x> y
>
x> y
<=
x <= y
>=
x> y =
Operao
Exemplo
Declaraes
NO (lgico
negao)
||
OU (disjuno
lgico)
x <5 | | x> 7 TRUE (1), se houver algum valor dos valores verdade
&&
E (conjuno
lgica)
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).
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
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.
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:
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:
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)
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.
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.
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.
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.
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
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
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).
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
)
//------------------------------------------------ -----------------------
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.
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.
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.
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.
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:
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.
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.
Na histria ainda, a 2 outras encomendas pendentes tambm foram modificadas em mercado queridos.
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).
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.
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.
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.
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. 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:
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:
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 (
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).
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).
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.
"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).
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.
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 --
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 ()
) / / 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.
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).
)
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.
funo contm dados sobre a quantidade de bares que no tenha alterao desde o ltimo
arranque () convite.
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 ..
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.
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).
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.
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.
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.
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.
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.
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
)
)
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.
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.
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.
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. 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. 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
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
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).
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)
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;
= i + Left_Right ;
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 ;
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).
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.
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.
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.
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
//------------------------------------------------ -------------- 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
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:
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.
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.
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
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.
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
Imprimir
Imprime uma mensagem para os peritos log. Parmetros podem ser de qualquer
tipo. Quantidade de parmetros passados no pode exceder 64.
SendFTP
SendMail
Dormir
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).
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:
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:
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
[0]
[1]
[2]
[3]
=
=
=
=
bar
0
bar
1
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:
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.
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:
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.
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).
Sntese Info
ObjectCreate
ObjectDelete
ObjectDescription
ObjectFind
ObjectGet
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
ObjectMove
ObjectName
The function returns the object name according to its order number in
the list of objects.
ObjectsDeleteAll
ObjectSet
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
ObjectsTotal
ObjectType
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
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]
/ / Objeto de cor ..
/ / .. situaes diferentes ..
.. do indicador RSI
As mesmas cores de Momentum
/ As mesmas cores de Momentum
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:
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).
Sntese Info
HideTestIndicators
Perodo
RefreshRates
Smbolo
WindowBarsPerChart
WindowExpertName
WindowFind
WindowFirstVisibleBar
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
WindowOnDropped
WindowPriceMin
WindowScreenShot
WindowXOnDropped
WindowYOnDropped
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
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:
Funes String
Funo
Breve descrio
StringConcatenate
StringFind
StringGetChar
StringLen
StringSetChar
StringSubstr
StringTrimLeft
StringTrimRight
Sntese Info
CharToStr
DoubleToStr
NormalizeDouble
StrToDouble
StrToInteger
StrToTime
TimeToStr
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 ).
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
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
DayOfWeek
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
Ms
Segundos
TimeCurrent
TimeDay
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
TimeLocal
TimeMinute
TimeMonth
TimeSeconds
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.
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
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:
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:
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
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:
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.
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.
Sntese Info
FileClose
FileDelete
FileFlush
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
FileReadDouble
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
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
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
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
Breve descrio
ArrayBsearch
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.
ArrayIsSeries
Retorna TRUE se o array est marcada uma timeseries (Hora [], Open [], Close
[], Mximo [], baixo [] Volume de []), caso contrrio, retorna FALSE.
ArrayMaximum
ArrayMinimum
ArrayRange
ArrayResize
ArraySort
Ela ordena arrays numricos por sua primeira dimenso. O timeseries arrays no
podem ser ordenados.
Sntese Info
Ibars
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
iHigh
iHighest
Ela retorna o ndice do valor mximo encontrado (mudana relativamente ao actual bar).
iLow
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
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.
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.
MathCos
MathExp
MathFloor
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
MathMin
MathMod
MathPow
MathRand
MathRound A funo retorna valor arredondado para o nmero inteiro mais prximo do valor
numrico especificado.
MathSin
MathSqrt
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
Fig. 153. Aparecimento de Variveis globais na janela do terminal aps o cliente deleteall.mq4 script
executado.
Sntese Info
GlobalVariableCheck
GlobalVariableDel
GlobalVariableGet
GlobalVariableName
GlobalVariableSet
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
excludas.
GlobalVariablesTotal
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
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
IndicatorCounted
IndicatorDigits
SetIndexBuffer
Junta-lhe um array varivel que seja declarada a nvel global com um tampo
de um determinado indicador personalizado.
SetIndexDrawBegin
SetIndexEmptyValue Estabelece um valor vazio para o indicador linha. Vazio valores no so tiradas e
no so mostrados no DataWindow.
SetIndexLabel
SetIndexShift
SetIndexStyle
SetLevelStyle
SetLevelValue
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:
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 ()
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
OrderCloseTime
OrderComment
OrderCommission
OrderDelete
OrderExpiration
OrderLots
OrderOpenPrice
OrderOpenTime
OrderPrint
OrderProfit
OrderSelect
OrderSend
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
OrderSwap
OrderSymbol
OrderTakeProfit
Ela retorna o preo perto quando ele atinge a margem de lucro (ter lucro) da ordem
selecionada atualmente.
OrderTicket
OrderType
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.
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 ().
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:
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
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:
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:
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:
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 --
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
.
//------------------------------------------------ --------------------
(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;
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
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).
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:
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:
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.
/ / - -------------- --------------------------------- --------------------
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
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
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:
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:
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.
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 ().
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).
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.
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.
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.
Glossrio.
Conceitos e termos utilizados.
Tipos de Trades.
Tipos de ordens que podem ser utilizados em Metatrader Cliente Terminal 4.
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.
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.
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.
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.
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.
Instrumento moeda um par cambial, por exemplo, EURUSD, GBPCHF, etc, uma especial de
segurana (smbolo).
A varivel uma varivel externa, cujo valor est disponvel a partir das propriedades do
programa janela, que tem as propriedades de uma varivel global.
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.
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.
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.
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.
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.
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.
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).
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).
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.
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).
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.
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.
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.
Funes Definidas Por Usurio uma funo criada pelo programador (ver tambm
a funo).
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
OP_SELLLIMIT
OP_BUYSTOP
OP_SELLSTOP
Tipo de
Ordem
Abrir
Preo
Preo
fechar
Comprar
Perguntar
Bid
Vender
Bid
Perguntar
Preo de abrir
uma Ordem
Pendente
BuyLimit
Abaixo do preo
corrente Pergunte
SellLimit
Acima do preo
actual de lance
BuyStop
Acima do preo
actual Pergunte
SellStop
Abaixo do preo
corrente de oferta
Abrir Preo
StopLoss (LS)
TakeProfit (TP)
Comprar
Modificao proibida
Lance-SL StopLevel
Vender
Modificao proibida
TP-Bid StopLevel
BuyLimit
TPOpenPrice StopLevel
SellLimit
OpenPrice-Bid StopLevel
OpenPriceTP StopLevel
BuyStop
TPOpenPrice StopLevel
SellStop
Lance-OpenPrice StopLevel
OpenPriceTP StopLevel
SLOpenPrice StopLevel
SLOpenPrice StopLevel
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
Regulamentado pela
StopLevel parmetro
SellLimit
OpenPrice-Bid> FreezeLevel
Regulamentado pela
StopLevel parmetro
Regulamentado pela
StopLevel parmetro
BuyStop
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
ERR_NO_RESULT
ERR_COMMON_ERROR
2 Erro comum.
ERR_INVALID_TRADE_PARAMETERS
ERR_SERVER_BUSY
ERR_OLD_VERSION
ERR_NO_CONNECTION
ERR_NOT_ENOUGH_RIGHTS
7 No basta direitos.
ERR_TOO_FREQUENT_REQUESTS
ERR_MALFUNCTIONAL_TRADE
ERR_ACCOUNT_DISABLED
64 Conta desativada.
ERR_INVALID_ACCOUNT
65 Conta invlida.
ERR_TRADE_TIMEOUT
ERR_INVALID_PRICE
ERR_INVALID_STOPS
ERR_INVALID_TRADE_VOLUME
ERR_MARKET_CLOSED
ERR_TRADE_DISABLED
ERR_NOT_ENOUGH_MONEY
ERR_PRICE_CHANGED
ERR_OFF_QUOTES
ERR_BROKER_BUSY
ERR_REQUOTE
138 Requote.
ERR_ORDER_LOCKED
ERR_LONG_POSITIONS_ONLY_ALLOWED
ERR_TOO_MANY_REQUESTS
ERR_TRADE_MODIFY_DENIED
ERR_TRADE_CONTEXT_BUSY
ERR_TRADE_EXPIRATION_DENIED
ERR_TRADE_TOO_MANY_ORDERS
Valor
Descrio
ERR_NO_MQLERROR
ERR_WRONG_FUNCTION_POINTER
ERR_ARRAY_INDEX_OUT_OF_RANGE
ERR_NO_MEMORY_FOR_FUNCTION_CALL_STACK
ERR_RECURSIVE_STACK_OVERFLOW
ERR_NOT_ENOUGH_STACK_FOR_PARAMETER
ERR_NO_MEMORY_FOR_PARAMETER_STRING
ERR_NO_MEMORY_FOR_TEMP_STRING
ERR_NOT_INITIALIZED_STRING
ERR_NOT_INITIALIZED_ARRAYSTRING
ERR_NO_MEMORY_FOR_ARRAYSTRING
ERR_TOO_LONG_STRING
ERR_REMAINDER_FROM_ZERO_DIVIDE
ERR_ZERO_DIVIDE
ERR_UNKNOWN_COMMAND
ERR_WRONG_JUMP
ERR_NOT_INITIALIZED_ARRAY
ERR_DLL_CALLS_NOT_ALLOWED
ERR_CANNOT_LOAD_LIBRARY
ERR_CANNOT_CALL_FUNCTION
ERR_EXTERNAL_EXPERT_CALLS_NOT_ALLOWED
ERR_NOT_ENOUGH_MEMORY_FOR_RETURNED_STRING
ERR_SYSTEM_BUSY
ERR_INVALID_FUNCTION_PARAMETERS_COUNT
ERR_INVALID_FUNCTION_PARAMETER_VALUE
ERR_STRING_FUNCTION_INTERNAL_ERROR
ERR_SOME_ARRAY_ERROR
ERR_INCORRECT_SERIES_ARRAY_USING
ERR_CUSTOM_INDICATOR_ERROR
ERR_INCOMPATIBLE_ARRAYS
ERR_GLOBAL_VARIABLES_PROCESSING_ERROR
ERR_GLOBAL_VARIABLE_NOT_FOUND
ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE
ERR_FUNCTION_NOT_CONFIRMED
ERR_SEND_MAIL_ERROR
ERR_STRING_PARAMETER_EXPECTED
ERR_INTEGER_PARAMETER_EXPECTED
ERR_DOUBLE_PARAMETER_EXPECTED
ERR_ARRAY_AS_PARAMETER_EXPECTED
ERR_HISTORY_WILL_UPDATED
ERR_TRADE_ERROR
ERR_END_OF_FILE
ERR_SOME_FILE_ERROR
ERR_WRONG_FILE_NAME
ERR_TOO_MANY_OPENED_FILES
ERR_CANNOT_OPEN_FILE
ERR_INCOMPATIBLE_ACCESS_TO_FILE
ERR_NO_ORDER_SELECTED
ERR_UNKNOWN_SYMBOL
ERR_INVALID_PRICE_PARAM
ERR_INVALID_TICKET
ERR_TRADE_NOT_ALLOWED
ERR_LONGS_NOT_ALLOWED
ERR_SHORTS_NOT_ALLOWED
ERR_OBJECT_ALREADY_EXISTS
ERR_UNKNOWN_OBJECT_PROPERTY
ERR_OBJECT_DOES_NOT_EXIST
ERR_UNKNOWN_OBJECT_TYPE
ERR_NO_OBJECT_NAME
ERR_OBJECT_COORDINATES_ERROR
ERR_NO_SPECIFIED_SUBWINDOW
ERR_SOME_OBJECT_ERROR
Valor
Descrio
DRAW_LINE
0 Linha Simples
DRAW_SECTION
DRAW_HISTOGRAM
2 Histograma
DRAW_ARROW
3 Arrows (smbolos)
DRAW_ZIGZAG
DRAW_NONE
12 Nenhum desenho
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
Valor
Descrio
OBJ_VLINE
OBJ_HLINE
OBJ_TREND
OBJ_TRENDBYANGLE
OBJ_REGRESSION
OBJ_CHANNEL
OBJ_STDDEVCHANNEL
OBJ_GANNLINE
OBJ_GANNFAN
OBJ_GANNGRID
OBJ_FIBO
OBJ_FIBOTIMES
OBJ_FIBOFAN
OBJ_FIBOARC
OBJ_EXPANSION
OBJ_RECTANGLE
OBJ_TRIANGLE
OBJ_ELLIPSE
OBJ_PITCHFORK
OBJ_CYCLES
OBJ_TEXT
OBJ_ARROW
OBJ_LABEL
Objeto grfico usado com propriedades identificadores ObjectGet () ObjectSet (), e pode ser qualquer
um dos seguintes valores:
Objeto Parmetros
Valor
Tipo
Descrio
OBJPROP_TIME1
OBJPROP_PRICE1
OBJPROP_TIME2
OBJPROP_PRICE2
OBJPROP_TIME3
OBJPROP_PRICE3
OBJPROP_COLOR
OBJPROP_STYLE
OBJPROP_WIDTH
OBJPROP_BACK
OBJPROP_RAY
10
OBJPROP_ELLIPSE
11
OBJPROP_SCALE
12
OBJPROP_ANGLE
13
OBJPROP_ARROWCODE
14
OBJPROP_TIMEFRAMES
15
OBJPROP_DEVIATION
16
OBJPROP_FONTSIZE
100
OBJPROP_CORNER
101
OBJPROP_XDISTANCE
102
OBJPROP_YDISTANCE
103
OBJPROP_FIBOLEVELS
200
OBJPROP_LEVELCOLOR
201
OBJPROP_LEVELSTYLE
202
OBJPROP_LEVELWIDTH
203
OBJPROP_FIRSTLEVEL + n 210 + n
Arquivos sonoros
O conjunto dos ficheiros wav recomendada para usar no trabalho prtico em EAs, indicadores e scripts:
Nome do Arquivo
Close_order.wav
Ok.wav
Transform.wav
Bulk.wav
Insignificante eventos
Inform.wav
Oops.wav
Expert.wav
Error.wav
Bzrrr.wav
Outros erros
Wait.wav
Pausa
Work.wav
Tick.wav
Nova carrapato
W1.wav
Outros termos
W2.wav
Outros termos
W3.wav
Outros termos
Valor
Descrio
IDOK
IDCANCEL
IDABORT
IDRETRY
IDIGNORE
IDYES
IDNO
IDTRYAGAIN
10
IDCONTINUE
11
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
MB_OKCANCEL
MB_ABORTRETRYIGNORE
MB_YESNOCANCEL
MB_YESNO
MB_RETRYCANCEL
Valor
Descrio
MB_ICONSTOP
MB_ICONERROR
MB_ICONHAND
MB_ICONQUESTION
MB_ICONEXCLAMATION
MB_ICONWARNING
Valor
Descrio
MB_DEFBUTTON1
MB_DEFBUTTON2
MB_DEFBUTTON3
MB_DEFBUTTON4
Constante
Valor
Descrio
MODE_LOW
MODE_HIGH
MODE_TIME
MODE_BID
MODE_ASK
MODE_POINT
MODE_DIGITS
MODE_SPREAD
MODE_STOPLEVEL
MODE_LOTSIZE
MODE_TICKVALUE
MODE_TICKSIZE
MODE_SWAPLONG
MODE_SWAPSHORT
MODE_STARTING
MODE_EXPIRATION
MODE_TRADEALLOWED
MODE_MINLOT
MODE_LOTSTEP
MODE_MAXLOT
MODE_SWAPTYPE
MODE_PROFITCALCMODE
MODE_MARGINCALCMODE
MODE_MARGININIT
MODE_MARGINMAINTENANCE
MODE_MARGINHEDGED
MODE_MARGINREQUIRED
MODE_FREEZELEVEL
create.mq4
simple.mq4
possible.mq4
incorrect.mq4
userfunction.mq4
onelevel.mq4
twolevel.mq4
twoleveloptim.mq4
compoundcondition.mq4
pricealert.mq4
predefined.mq4
countticks.mq4
staticvar.mq4
externvar.mq4
globalvar.mq4
stringarray.mq4
extremumprice.mq4
newbar.mq4
modifystoploss.mq4
callindicator.mq4
historybars.mq4
callstohastic.mq4
tradingexpert.mq4
shared.mq4
comment.mq4
dialogue.mq4
grafobjects.mq4
moveobjects.mq4
charts.mq4
strings.mq4
timebars.mq4
bigbars.mq4
timeevents.mq4
createfile.mq4
matrix.mq4
heck.mq4
usualexpert.mq4
Scripts:
Nome
pifagor.mq4
gipo.mq4
fibonacci.mq4
sumtotal.mq4
rectangle.mq4
area.mq4
sheep.mq4
othersheep.mq4
barnumber.mq4
callfunction.mq4
countiter.mq4
arrayalert.mq4
simpleopen.mq4
confined.mq4
improved.mq4
mistaken.mq4
conditions.mq4
openbuy.mq4
openbuystop.mq4
closeorder.mq4
deleteorder.mq4
closeby.mq4
modifyorderprice.mq4
timetablenews.mq4
deleteall.mq4
Indicadores:
Nome
userindicator.mq4
averagevalue.mq4
separatewindow.mq4
displacement.mq4
roc.mq4
rocseparate.mq4
indicatorstyle.mq4
linelevel.mq4
Inform.mq4
Os arquivos incluem:
Nome
Variables.mqh
Check.mqh
Terminal.mqh
Inform.mqh
Events.mqh
Lot.mqh
Criterion.mqh
Trade.mqh
Close_All.mqh
Open_Ord.mqh
Tral_Stop.mqh
Errors.mqh