Monday 12 February 2018

Curso gratuito de programação de EA



Se alguém está interessado em aprender a escrever uma EA, então, há um e-curso gratuito no Free E-Course - Build Your Own Automatic Robot de negociação.
Espero que ajude alguém.
Eu sou novo no Forex - MetaTrader Programming & gt; Software de gráficos de gráficos múltiplos (eu devo ter barras de alcance) e enviar código de idioma fácil para & gt; Conta demo Interactive Brokers.
Deve ser uma maneira mais fácil, mais barata e melhor de fazer tudo isso?
Gostaria de um lugar para cobrir:
2. Gráficos de barras de intervalo com comércio na capacidade de gráfico.
3. Easy Language friendly para troca mecânica de meus códigos.
5. Capacidade de colocar a estratégia no servidor da plataforma para que um desconectado do meu desktop não seja um problema.

Forex e tutorial de programação
Coding Video Course.
mql4 aulas de video.
Os comerciantes que procuram um curso de codificação de programação de programação de metatrader MQL4 forex não precisam mais do que o curso de treinamento de vídeo MQL4 10 da Steve Flemming, projetado para transformar um novato em um desenvolvedor de EA em dez aulas de vídeo simples.
O curso de Steve foi projetado para ensinar MetaQuotes Language 4 para comerciantes, de modo a traduzir a estratégia de negociação em um consultor experiente totalmente funcional, EA ou robô forex.
Steve tem sido um programador profissional há mais de 15 anos, com 10 daquelas exclusivamente na MetaQuotes Language 4 (MQL4). Steve também treinou através de aulas privadas, mas agora decidiu oferecer esse tutorial de vídeo ao público pela primeira vez.
MetaQuotes Language 4 (MQL4) para o Tutorial de Programação de Traders.
* Lição 1: Variáveis ​​* Lição 2: Operadores e Expressões * Lição 3: Declarações condicionais * Lição 4: Funções * Lição 5: colocando tudo junto - Construindo sua primeira EA * Lição 6: Objetos * Lição 7: Arrays * Lição 8 : Variáveis ​​globais e iCustom * Lição 9: Manipulação de arquivos * Lição 10: Gerenciamento e depuração de erros.
Comece com o básico - Baixe Metatrader Primeiro.
Começar a criar seu próprio consultor especialista pode ser feito abrindo o MetaEditor uma vez que você está no terminal Metatrader principal e USANDO O CONSELHEIRO DE CRIAÇÃO DE CONSULTORES.
Eu copiei as instruções abaixo, conforme mostrado no menu de ajuda no MetaEditor.
Criando consultores especializados usando o MetaEditor.
Uma das características mais poderosas do terminal cliente está criando seu próprio programa MQL4. Assim, você pode verificar idéias comerciais e desenvolver estratégias lucrativas.
Para criar um novo consultor especialista:
Clique com o botão direito do mouse na janela "Navegador" no terminal do cliente e selecione o item "Criar um novo perito" no menu de contexto;
Selecione o item de menu "Arquivo -> Novo" no MetaEditor ou clique no botão "Novo perito" na barra de ferramentas. Você verá o Advisor Creation Wizard. No primeiro passo do seu trabalho, você deve especificar o tipo de seu Conselheiro ou selecionar um modelo para criar um Conselheiro. Em seguida, clique no botão "Avançar" e siga as instruções.
Para a próxima etapa selecione;
Consultor especialista da seleção da lista.
Criando consultor especialista - Criando um programa.
Uma das características mais poderosas do terminal do cliente está criando seus próprios consultores especializados. Eles ajudam você a verificar as idéias comerciais e desenvolver estratégias lucrativas.
Para criar o Expert Advisor, você deve especificar os parâmetros:
Nome do Advisor Perito (arquivo).
endereço de e-mail ou endereço do site do autor.
parâmetros de entrada (nome, tipo e valor inicial)
Depois de especificar todos os parâmetros Expert necessários, clique no botão "Concluir" para iniciar a geração Expert.
O resultado da geração será um código fonte Expert Advisor com declaração de funções e parâmetros.
Atenção: O conjunto de funções e seu conteúdo dependem do modelo padrão "expert. mqt". Você pode encontrar mais informações sobre os modelos na seção do formato do arquivo do modelo.
Um ótimo exemplo é mostrado em um artigo intitulado "Guia passo a passo para escrever um consultor especialista em MQL5 para iniciantes" Vá aqui.
FOREX BROKERS.
OPÇÕES FOREX.
EDUCACIONAL.
ADMINISTRAÇÃO.
Quem disse que os sistemas de negociação automatizados não funcionam? Confira nossa página de teste do robô brainyforex aqui.
Confira nossos testes do construtor de consultor especializado chamado Expert Advisor Studio aqui.
O comércio cambial envolve um risco substancial de perda. Leia o aviso legal aqui.
(C) Copyright 2009 - 2017 Brainyforex. Todos os direitos reservados.

Expert Advisors no MetaTrader 4 - MQL4 para o Tutorial de Iniciantes Completos, Parte 21.
Neste tutorial vamos apresentar um novo tipo de programa no MQL4 & # 8211; consultores especializados.
Em essência, os consultores especializados (EA & # 8217; s) são seus robôs Forex. Existem algumas diferenças importantes entre consultores especializados e scripts, e vamos discuti-los neste tutorial.
Além disso, criaremos o primeiro teste de EA e veremos como funciona no terminal de negociação MetaTrader 4.
Código fonte abaixo do vídeo. Importante: lembre-se de que isso não é mais um script & # 8211; É um consultor especialista agora, e, portanto, você precisa selecionar a opção associada ao usar o Assistente MetaEditor.
COMEÇAR COM A ACADEMIA DE NEGOCIAÇÃO FOREX.
Eu sou um comerciante Forex, um Data Scientist, um Empreendedor, um Online Coach. Essas são minhas principais ocupações. Eu estive em Forex Trading desde 2007 e, como eles dizem, eu vi o bom, o ruim e o feio. Eu sobrevivi ao GFC e aprendi muito ao longo do caminho. Hoje eu quero compartilhar todos os meus conhecimentos e idéias com você.
Categorias.
Curso de negociação algorítmica (1) Curso: Forex Trading for Beginners (6) Curso: MQL4 para Iniciantes Completos (48) Curso: Testador de Estratégia para Iniciantes (11) FOREX (75) Forex Stategy (14) Estratégia Forex (61) Forex Trading para Iniciantes (66) Forex VPS (1) Análise Fundamental (2) Entrevistas (1) MQL4 (2) Análise Técnica (7) Uncategorized (24)
Postagem recente.
Tags populares.
COMEÇAR COM A ACADEMIA DE NEGOCIAÇÃO FOREX.
Forexboat Pty Ltd (ABN: 29 609 855 414), um Representante Autorizado Corporativo (AR No. 001238951) da HLK Group Pty Ltd (ACN: 161 284 500) que detém uma Licença Australiana de Serviços Financeiros (AFSL nº 435746). Qualquer informação ou conselho contida neste site é de natureza geral e não constitui um conselho pessoal ou de investimento. Não aceitamos nenhuma responsabilidade por qualquer perda ou dano, incluindo, sem limitação, qualquer perda de lucro, que possa surgir direta ou indiretamente do uso ou dependência de tais informações. Você deve procurar um conselho financeiro independente antes de adquirir um produto financeiro. Todas as operações de produtos e instrumentos financeiros e de valores mobiliários envolvem riscos. Lembre-se de que os resultados do desempenho passado não são necessariamente indicativos de resultados futuros.
A informação neste site pode ser acessada em todo o mundo, no entanto, não é direcionada a residentes em qualquer país ou jurisdição onde tal distribuição ou uso seja contrário à lei ou regulamento local. Forexboat Pty Ltd não está registrado com qualquer regulador dos EUA, incluindo a National Futures Association (& # 8220; NFA & # 8221;) e Commodity Futures Trading Commission (& # 8220; CFTC & # 8221;); portanto, os produtos e serviços oferecidos neste site não são destinado a residentes dos Estados Unidos.

Consultor Especialista Simples.
Esta seção se baseia nos princípios de criação de um consultor de especialistas de negociação simples.
Argumentos preliminares.
Antes de começar a programar um consultor especialista em negociação, é necessário definir princípios gerais de um programa futuro. Não existem regras estritas de criação de programas. No entanto, uma vez que criou um programa, um programador geralmente continua a melhorar. Para poder entender facilmente o programa no futuro, ele deve ser criado de acordo com um esquema bem pensado e fácil de entender (é especialmente importante se um programa for melhorado por outro programador). O programa mais conveniente é aquele que consiste em blocos funcionais, cada um dos quais é responsável pela parte dos cálculos. Para criar um algoritmo de um Expert Advisor comercial, vamos analisar o que um programa operacional deve fazer.
Um dos dados mais importantes na formação de ordens comerciais é a informação sobre pedidos que já existem em um terminal de cliente. Algumas das estratégias de negociação permitem apenas uma ordem unidirecional. Geralmente, se uma estratégia de negociação permitir, vários pedidos podem ser abertos em um terminal ao mesmo tempo, embora seu número seja razoavelmente limitado. Ao usar qualquer estratégia, as decisões comerciais devem ser feitas levando em consideração a situação atual. Antes de uma decisão comercial ser tomada em um programa, é necessário saber quais ordens de negociação já foram abertas ou colocadas. Antes de tudo, um programa deve conter um bloco de contabilidade de pedidos que está entre os primeiros a serem executados.
Durante uma execução EA, as decisões comerciais devem ser tomadas, cuja implementação leva à execução de operações comerciais. A parte do código responsável pela formação de pedidos comerciais é melhor escrita em um bloco separado. Um Consultor Especialista pode formar uma solicitação comercial para abrir uma nova ordem pendente ou de mercado, fechar ou modificar qualquer uma das ordens existentes ou executar nenhuma ação. Uma EA também deve calcular os preços das ordens dependendo do desejo de um usuário.
As decisões comerciais devem ser tomadas em um programa com base em critérios comerciais. O sucesso de todo o programa depende da correção da detecção de critérios comerciais no programa. Ao calcular critérios de comércio, um programa pode (e deve) ter em conta todas as informações que podem ser úteis. Por exemplo, um Consultor Especializado pode analisar a combinação de valores de indicadores técnicos, o tempo de lançamentos de notícias importantes, a hora atual, os valores de alguns níveis de preços, etc. Por conveniência, a parte do programa responsável pelo cálculo dos critérios de negociação deve ser escrita de forma separada. quadra.
Um consultor especialista em negociação deve necessariamente conter o bloco de processamento de erros. Analisar os erros que podem ocorrer na execução da operação comercial permite, por um lado, repetir um pedido comercial e, por outro lado, informar um usuário sobre uma possível situação de conflito.
Estrutura de um consultor experiente simples.
Abaixo está um esquema estrutural de um simples Consultor Especial construído com base em vários blocos funcionais, em cada bloco uma certa parte dos cálculos.
Fig. 109. Esquema estrutural de um simples consultor especialista.
Na fase de desenvolvimento de EA a seguir, ainda não existe um código de programa. Ao mesmo tempo, o algoritmo de um programa é formado em grande parte. A forma como a EA construída nas bases do esquema oferecido irá operar pode ser facilmente entendida simplesmente olhando o esquema e orientando-se sobre nomes de blocos e matrizes de relações (controle de passagem) entre eles.
Após o início do programa, o controle é passado para o bloco de processamento preliminar. Neste bloco, alguns parâmetros gerais podem ser analisados. Por exemplo, se não houver barras suficientes em uma janela (barras necessárias para calcular parâmetros de indicadores técnicos), uma EA não poderá operar adequadamente. Nesse caso, uma EA deve encerrar a operação informando preliminarmente um usuário sobre isso e informando sobre o motivo do término. Se não houver contra-indicações de caráter geral, o controle é passado para o bloco de contabilização de pedidos.
No bloco de ordens contábeis, o número e a qualidade das ordens existentes em um terminal cliente para uma segurança (para a janela da qual o EA está anexado) são detectados. Neste bloqueio, as ordens de outros títulos devem ser eliminadas. Se uma estratégia de negociação programada requer o uso de apenas ordens de mercado (e não usa ordens pendentes), o fato da presença de ordens pendentes deve ser detectado. Se uma estratégia admite apenas uma ordem de mercado e existem várias ordens, esse fato também deve ser conhecido. A tarefa do bloco de contabilidade de ordem (neste esquema) é definir se a situação comercial atual corresponde a uma esperada, ou seja, na qual a EA pode operar adequadamente. Se a situação corresponder, o controle deve ser passado para o próximo bloco para continuar a operação da EA; caso contrário, a operação da EA deve ser encerrada e esse fato deve ser reportado a um usuário.
Se não houver pedidos no terminal ou o número e a qualidade das ordens existentes correspondem ao esperado, o controle é passado para o bloco de definir critérios de negociação. Neste bloco são calculados todos os critérios necessários para tomar decisões comerciais, nomeadamente critérios para abertura, encerramento e modificação de pedidos. O controle adicional é passado para o bloco de pedidos de fechamento.
É fácil entender por que no esquema oferecido o bloco de pedidos de fechamento é executado antes do bloco de ordens de abertura. É sempre mais razoável processar as primeiras ordens existentes (fechar ou modificar) e somente depois disso para abrir novos pedidos. Geralmente, é correto guiar pelo desejo de ter tão poucas ordens quanto possível. Durante a execução deste bloco, todos os pedidos, para os quais o critério de fechamento foi ativado, devem ser fechados.
Depois de todas as ordens necessárias terem sido fechadas, o controle é passado para um bloco de novo cálculo de tamanho de ordens. Há muitos algoritmos para calcular um volume de pedidos. O mais simples é usar um tamanho de lote constante e fixo. É conveniente usar esse algoritmo em um programa para testar estratégias. O método mais popular de definir um tamanho de ordem é definir o número de lotes dependendo da quantidade de margem livre, por exemplo, 30-40%. Se a margem livre não for suficiente, o programa encerra sua operação informando um usuário sobre o motivo.
Depois que o número de lotes para abrir novos pedidos é definido, o controle é passado para o bloco de abertura de pedidos. Se algum dos critérios calculados anteriormente aponta para a necessidade de abrir uma ordem de um determinado tipo, um pedido comercial para abrir uma ordem é formado neste bloco.
Há também erro de análise de bloqueio em um consultor especialista. Se alguma operação comercial falhou, o controle (somente neste caso) é passado para o bloco de processamento de erros. Se um erro retornado por um servidor ou terminal cliente não for crucial, mais uma tentativa é feita para executar uma operação comercial. Se um erro crucial for retornado (por exemplo, uma conta é bloqueada), uma EA deve encerrar sua operação. Lembre-se, no MQL4 não há possibilidade de encerrar o programa de uma operação de EA em uma janela de segurança (como distinto dos scripts, consulte Funções especiais). O que pode ser feito de uma maneira de programa é o término do início (). Em um novo começo da função start () em um novo tick, o valor de uma certa bandeira de variáveis ​​que proíbe a negociação (neste caso, habilitado como resultado de um erro crítico) pode ser analisado e o controle pode ser passado para o término do operação de função especial; assim, a formação de um novo pedido comercial não é permitida. No esquema oferecido, o valor da bandeira é analisado no bloco de processamento preliminar.
Estratégia de negociação.
Os preços do mercado estão constantemente em movimento. O estado do mercado em qualquer momento pode ser condicionalmente caracterizado como uma tendência - forte mudança de preço unidirecional (aumento ou queda), ou como um movimento de preço plano - lateral com desvios fracos de uma certa média. Essas características de mercado são condicionais, porque não há critérios claros, segundo os quais a tendência ou o plano podem ser identificados. Por exemplo, movimentos laterais longos com fortes desvios que não podem ser traçados nem para um plano nem para uma tendência. Geralmente, presume-se que o mercado esteja principalmente no estado do movimento lateral e as tendências geralmente acontecem entre 15 e 20% do tempo.
Fig. 110. Plano e tendência no mercado.
Todas as estratégias comerciais também podem ser convencionalmente divididas em dois grupos principais. O primeiro grupo contém estratégias orientadas para o plano. A idéia principal de tais estratégias é que, após um preço de desvio evidente deve retornar à posição anterior, é por isso que as ordens são abertas na direção contrária ao último movimento de preços. As estratégias do segundo grupo são estratégias de tendências, quando as ordens são abertas na mesma direção que o movimento do preço do sal. Existem estratégias mais complicadas (combinadas). Tais estratégias levam em conta muitos fatores diferentes que caracterizam o mercado; Como resultado, a negociação pode ser executada tanto no plano quanto na tendência. Não é difícil implementar a negociação de acordo com esta ou essa estratégia tecnicamente - MQL4 contém todos os meios necessários para isso. O principal trabalho na criação de uma estratégia própria é a busca de critérios de negociação.
Critérios de negociação.
Neste exemplo, tentaremos construir uma Tendência Consultor Especialista, ou seja, aquele que abrirá ordens na direção do movimento de preços. Então, precisamos encontrar entre vários indicadores técnicos aqueles que detectam um início de tendência. Um dos métodos mais simples de busca de critérios comerciais baseia-se na análise da combinação de MAs com diferentes períodos de média. A Fig. 111 e a Fig. 112 mostram a posição de duas MA diferentes (com períodos de média 11 e 31) em diferentes partes do mercado. As médias com pequeno período de média (linhas vermelhas) estão mais próximas de um gráfico de preços, torção e móveis. As médias móveis com um período maior de média (linha azul) são mais inertes, têm atraso maior e estão mais distantes dos preços do mercado. Vamos prestar atenção aos lugares onde MAs com diferentes períodos de média cruzam e tentam decidir se o fato de cruzamento de MA pode ser usado como um critério de leitura.
Fig. 111. Cruzamento de MA (11) e MA (31) quando a direção do movimento do preço muda.
Na Fig. 111, vemos uma parte do mercado onde as ordens de abertura na direção do movimento de preços no cruzamento de AMs são justificadas. No ponto A, a linha vermelha cruza o azul de baixo para cima, depois disso o preço do mercado continua a crescer por algum tempo. O cruzamento inverso adicional MA indica a mudança na direção do movimento do preço. Se abrirmos uma ordem de compra no ponto A e fechá-la em B, obteremos lucro proporcional à diferença dos preços A e B.
Fig. 112. Cruzamento de MA (11) e MA (31) quando a direção do movimento do preço muda.
Ao mesmo tempo, há outros momentos no mercado quando MA atravessa, mas isso não leva a aumento ou queda considerável de preços (Fig. 112). As ordens abertas no cruzamento de MA em tais momentos levarão a perdas. Se a Vender for aberta em A e fechada em B, essa negociação trará perdas. O mesmo pode ser dito sobre um pedido de compra aberto em B e fechado em C.
O sucesso de toda a estratégia implementada com base no cruzamento do MA depende do número de partes que podem ser caracterizadas como tendência e plana. Em plano, muitas vezes o cruzamento de MA é um evento regular que interfere com qualquer estratégia de tendências. Numerosos sinais falsos, em regra, conduzem a perdas. É por isso que este sinal - cruzamento de MAs com diferentes períodos de média - pode ser usado para construir estratégias de negociação somente em combinação com outros sinais que comprovem uma tendência. Neste exemplo (para construir um simples Consultor Especialista), teremos que recusar usar este sinal.
Usaremos outro sinal. Analisando visualmente o caráter das mudanças de preços no mercado, podemos ver que um aumento ou queda de um longo passo de uma direção geralmente aparece como resultado de um curto movimento forte. Em outras palavras, se, dentro de um curto período, um forte movimento acontecesse, podemos esperar sua continuação em um período de médio prazo.
Fig. 113. Um forte movimento de preços pode levar a um desenvolvimento de tendências.
A Fig. 113 mostra o período de mercado quando um forte movimento resultou na continuação da mudança de preço na mesma direção. Como o "movimento forte" podemos usar a diferença de MAs com diferentes períodos de média. Quanto mais forte o movimento, maior é o atraso de MA com maior período de média de MA com um pequeno período de média. Além disso, mesmo fortes movimentos de preços descontínuos com retorno adicional não resultam em uma grande diferença entre MAs, ou seja, numerosos sinais falsos não aparecem. Por exemplo, o salto de preço em 50 pontos com retorno adicional (no centro na Fig. 113) implicou aumento da diferença entre MAs apenas por 20 pontos. Ao mesmo tempo, um movimento muito forte (que geralmente não é acompanhado por uma correção considerável) no ponto A resultou na diferença aumentar até 25-30 pontos.
Se a ordem de compra for aberta quando um certo valor de diferença entre MAs for atingido, por exemplo, em A, muito provavelmente a ordem será rentável quando um preço atingir um valor de ordem Stop pré-definido. Vamos usar esse valor como critério de negociação em nosso Consultor Especialista.
Número de encomendas.
Neste exemplo, analisamos um Consultor Especialista que admite a presença de apenas um pedido de mercado, não são fornecidas ordens pendentes. Tal abordagem é justificada não só neste exemplo, mas pode ser usada como base para qualquer estratégia.
As ordens pendentes geralmente são usadas quando um desenvolvedor possui um critério bastante confiável para prever a futura mudança de preço com alta probabilidade. Se não houver tal critério, não é necessário usar ordens pendentes.
A situação em que várias ordens opostas para uma segurança está aberta também não pode ser considerada razoável. Foi escrito anteriormente que, do ponto de vista econômico, as ordens opostas são consideradas sem sentido, especialmente se os preços das ordens forem iguais (ver Fechamento e Executando Pedidos). Nesse caso, devemos fechar um pedido por outro e esperar um sinal para abrir uma ordem de mercado em uma determinada direção.
Relação de Critérios de Negociação.
A partir desta posição, fica claro quais as relações possíveis entre os critérios comerciais. A Fig. 114 mostra três variantes de correlação de critérios de negociação, quando cada critério é importante (válido). As ações (abertura e encerramento de pedidos de mercado) ocorrem no sentido horário nas seguintes imagens.
Fig. 114. Correspondência de critérios de abertura e fechamento de ordem (a e b - correto, c - incorreto).
A variante mais popular de um critério comercial corretamente formado é a variante a. Depois de abrir uma ordem de mercado, a compra é realizada até o momento em que o critério exige os seus gatilhos de fechamento. Depois disso, ocorre uma pausa quando nenhuma ordem é aberta. Além disso, uma venda de mercado pode ser aberta. As condições para fechar uma ordem de Venda (de acordo com os critérios corretamente formados) ocorrem mais cedo do que as condições para abrir uma ordem Comprar. No entanto, uma ordem de compra pode ser aberta novamente, se um critério de negociação exigir isso. Mas de acordo com esta variante, uma ordem de mercado não pode ser aberta se houver uma ordem de mercado aberto na direção contrária.
A correlação de critérios semelhante está na variante b. A diferença é que um critério para abrir qualquer ordem de mercado é ao mesmo tempo um critério para fechar a ordem oposta. Esta variante como a variante a não permite vários pedidos abertos no terminal ao mesmo tempo em uma segurança.
A variante da correlação de critérios está incorreta. De acordo com esta variante, a abertura de um pedido de mercado é permitida quando as ordens contrárias ainda não estão fechadas, o que é sem sentido. Pode haver casos raros quando esta variante é parcialmente justificada. A abertura de uma ordem oposta às vezes é aceitável para compensar perdas que ocorrem em pequenas correções após fortes movimentos de preços. Em tais casos, uma ordem oposta pode ser aberta do mesmo ou menor valor que o já existente e depois fechado quando a correção acabou. Essa tática permite não interferir com o "principal" O pedido foi aberto na direção da tendência.
Em geral, várias ordens de uma direção também são possíveis. Isso pode ser justificado quando uma ordem aberta anterior é protegida por uma ordem Stop e o critério apontando para o desenvolvimento de preços na mesma direção desencadeada mais uma vez. No entanto, ao criar essa estratégia, um desenvolvedor deve estar plenamente consciente de que, no caso de uma mudança de movimento de preço acentuada, as ordens de parada colocadas podem ser executadas por alguns corretores no primeiro toque de preço. E a perda será proporcional ao valor total das ordens de mercado unidirecionais.
No nosso exemplo, usamos a variante b de correlação de critérios de negociação. Todas as ordens de mercado abertas são fechadas por uma ordem de parada ou após um critério de abertura de um pedido em giros de direção oposta (aqui o critério de fechamento de Compra coincide com o de abertura de Vender e vice-versa).
Tamanho das ordens abertas.
Em qualquer estratégia de negociação, os tamanhos de pedidos devem ser razoavelmente limitados. Em um caso simples, um tamanho de ordem fixa é usado em um consultor especialista. Antes de iniciar a operação EA, um usuário pode definir qualquer tamanho de pedidos futuros e deixá-lo inalterado por algum tempo. Além disso, se o saldo mudar, um usuário pode configurar um novo valor de lote de números de pedidos abertos.
Um tamanho de ordem muito pequeno proporciona mais confiança na operação na mudança de mercado imprevisível, mas o lucro em caso de sucesso não será tão grande. Se o tamanho da ordem for muito grande, grande lucro pode ser adquirido, mas tal EA será muito arriscado. Normalmente, o tamanho das ordens abertas é configurado de forma que os requisitos de margem não excedam 2-35% por cento do saldo ou margem livre (se uma estratégia permite apenas uma ordem aberta, saldo e margem livre no momento antes da abertura do pedido seja igual).
Neste exemplo, ambas as variantes são implementadas. Um usuário pode escolher indicar valores diretos de ordens ou definir o valor em porcentagem da margem livre.
Detalhes da programação.
Uma tendência simples Expert Advisor tradingexpert. mq4 construída com base em argumentos anteriores pode ser assim:
Descrevendo Variáveis.
Mais um critério na estimativa do programa é a legibilidade. Um programa é considerado corretamente escrito, se pode ser facilmente lido por outros programadores, é por isso que todas as principais partes do programa e os principais momentos que caracterizam a estratégia devem ser comentados. É também por isso que é recomendado declarar e comentar todas as variáveis ​​no início do programa.
No bloco 1-2 são descritas variáveis ​​externas e globais.
De acordo com as regras, as variáveis ​​externas e globais devem ser abertas antes do seu primeiro uso (ver Tipos de Variáveis), é por isso que eles são declarados na parte da cabeça do programa. Todas as variáveis ​​locais da função start () são reunidas e descritas na parte superior da função (bloco 2-3) imediatamente após o cabeçalho da função. Regras de declaração de variáveis ​​locais não exigem, mas também não proíbem. Se um programador tiver dificuldades para entender o significado de uma variável ao ler o programa, ele pode se referir à parte do programa superior e descobrir o significado e o tipo de qualquer variável. É muito conveniente na prática de programação.
Bloco de processamento preliminar.
Neste exemplo, o pré-processamento consiste em duas partes (bloco 3-4). O programa encerra a operação se não houver barras suficientes em uma janela de segurança; nesse caso, é impossível detectar corretamente (no bloco 5-6) valores de médias móveis necessários para o cálculo de critérios. Além disso, o valor da variável Trabalho é analisado. Na operação EA normal, o valor da variável é sempre "verdadeiro" (é definido uma vez durante a inicialização). Se ocorrer um erro crítico na operação do programa, "false" é atribuído a esta variável e start () termina a operação. Esse valor não será alterado no futuro, é por isso que o código a seguir não é executado. Nesse caso, a operação do programa deve ser interrompida e o motivo do erro crítico deve ser detectado (se necessário, um centro de negociação deve ser contatado). Depois que a situação for resolvida, o programa pode ser iniciado novamente, ou seja, o EA pode ser anexado a uma janela de segurança.
Ordens contábeis.
O Expert Advisor descrito permite trabalhar apenas com uma ordem de mercado. A tarefa do bloco de contabilidade de ordens (bloco 4-5) é definir características de uma ordem aberta, se houver uma. No loop que passa por ordens para "todas as encomendas pendentes e de mercado existentes são verificadas, desde o primeiro (int i = 1) até o último (i & amp; lt; = OrdersTotal ()). Em cada ciclo, a ordem seguinte é selecionada pela função OrderSelect (). A seleção é feita a partir de uma fonte de pedidos pendentes e pendentes (SELECT_BY_POS).
Se a seleção for executada com sucesso (ou seja, há mais uma ordem no terminal), além disso, esta ordem e a situação devem ser analisadas: se a ordem é aberta para a segurança, na qual a EA opera, se a ordem é de mercado ou pendente ; Também deve ser levado em consideração na contagem de pedidos. Na linha:
Todos os pedidos abertos para outra segurança são eliminados. O operador "continuar" pára a iteração e as características de tal ordem não são processadas. Mas se a ordem for aberta para a segurança, para a janela da qual a EA está anexada, ela é analisada posteriormente.
Se OrderType () retorna valor superior a 1 (veja Tipos de Operações), a ordem selecionada é pendente. Mas neste consultor especialista, gerenciar ordens pendentes não é fornecido. Isso significa que a execução do início () deve ser encerrada, porque ocorreu uma situação de conflito. Nesse caso, após uma mensagem sobre o início da terminação da operação (), a execução é interrompida pelo "retorno" do operador.
Se o último controle mostrou que a ordem analisada é uma ordem de mercado, o número total de pedidos de segurança é calculado e analisado. Para o primeiro desses pedidos, todas as características necessárias são definidas. Se na próxima iteração o contador de pedidos (variável Total) encontrar a segunda ordem de mercado, a situação também é considerada um conflito, porque a EA não consegue gerenciar mais do que uma ordem de mercado. Em tal caso, a execução de início () é interrompida após mostrar uma mensagem correspondente.
Como resultado da execução do bloco de contabilidade de ordem (se todas as verificações tiverem sido bem-sucedidas), a variável Total preserva seu valor zero se não houver ordens de mercado ou obtenha o valor 1 se houver um pedido de mercado para nossa segurança. No último caso, algumas variáveis ​​definidas em correspondência com as características da ordem (número, tipo, preço de abertura, níveis de parada e valor da ordem) também obtêm seus valores.
Cálculo de critérios de negociação.
No exemplo analisado, a definição dos critérios de negociação (bloco 5-6) é calculada com base na diferença entre as Médias Móveis com diferentes períodos de média. De acordo com os critérios aceitos, um gráfico é dirigido por touros se o valor atual da MA com um período menor for maior que o valor de MA com um período maior e a diferença entre os valores for maior que um determinado valor. Em um movimento de urso MA com menor período é menor do que MA com maior período e a diferença também é maior do que um determinado valor crítico.
Nos valores iniciais do bloco de MAs com períodos de média Period_MA_1 e Period_MA_2 são calculados. O fato de significância de qualquer critério de negociação é expresso através do valor de uma variável correspondente. As variáveis ​​Opn_B e Opn_S indicam o critério desencadeante para abrir ordens de compra e venda, variáveis ​​Cls_В e Cls_S - para fechamento. Por exemplo, se um critério para abrir o Buy não tiver disparado, o valor de Opn_B permanece "falso" (definido na inicialização da variável); Se ele disparou, Opn_B obtém o valor 'verdadeiro'. Nesse caso, o critério de fechamento da Vender coincide com o da abertura da Compra. O critério de abertura da Varecila coincide com o encerramento da Compra.
Ordens de encerramento.
Foi escrito anteriormente que este Consultor Especialista destina-se a operação somente com um único pedido de mercado aberto para uma segurança, a qual janela anexada. No momento em que o controle no programa é passado para o bloco de fechamento de pedidos, é conhecido com certeza que, no momento atual, não há ordens para a segurança, ou há apenas uma ordem de mercado. É por isso que o código no bloco de fechamento de pedidos está escrito de modo que apenas uma ordem possa ser fechada com sucesso.
Este bloco é baseado no loop infinito 'enquanto', cujo corpo consiste em duas partes análogas: uma para fechar uma ordem de compra, outra para fechar uma ordem de venda. "Enquanto" é usado aqui para a finalidade de que, no caso de uma falha na operação comercial, ela poderia ser repetida mais uma vez.
No cabeçalho da primeira condição do operador 'if' para fechar uma ordem de compra é calculada (as ordens de venda são fechadas da maneira análoga). Se o tipo de uma ordem aberta anterior corresponder a Comprar (ver Tipos de Operações) e o sinal de fechamento de Compra é relevante, o controle é passado para o corpo do operador 'if' onde uma solicitação para fechar é formada. Como um preço de fechamento de ordem na função OrderClose (), o valor de uma cotação de dois lados correspondente ao tipo de ordem é indicado (ver Requisitos e Limitações na Fazendo Negociações). Se uma operação de comércio for executada com sucesso, após uma mensagem sobre o fechamento da ordem, a iteração "while" atual é parada e a execução do bloco de fechamento da ordem acabou. Mas se a operação falhar, a função definida pelo usuário para processar erros Fun_Error () é chamada (bloco 10-11).
Erros de processamento.
Como um parâmetro passado no Fun_Error (), o último código de erro calculado pelo GetLastError () é usado. Dependendo do código de erro Fun_Error () retorna 1 se o erro não for crítico ea operação pode ser repetida e 0 se o erro for crítico. Os erros críticos são divididos em dois tipos - aqueles, após os quais a execução do programa pode ser continuada (por exemplo, um erro comum) e aqueles, após os quais a execução de operações comerciais deve ser interrompida (por exemplo, conta bloqueada).
se, após uma operação comercial sem êxito, a função definida pelo usuário retorna 1, a iteração atual quando está encerrada e durante a próxima iteração outra tentativa é feita para executar a operação - para fechar a ordem. Se a função retornar 0, a execução atual do início () está parada. No próximo começo do tiquetaque () será iniciado pelo terminal do cliente novamente e se forem preservadas as condições para o encerramento da ordem, outra tentativa de fechar a ordem será feita.
Se, durante o processamento do erro, descobrir que a execução adicional do programa é sem sentido (por exemplo, o programa funciona em uma versão anterior do terminal do cliente) durante o próximo início, a execução do início da função especial () será encerrada no bloco de processamento preliminar quando analisando o valor da variável Trabalho.
Calculando quantidade de lotes para novas encomendas.
A quantidade de lotes pode ser calculada de acordo com as configurações de um usuário seguindo uma das duas variantes. A primeira variante é um determinado valor constante configurado por um usuário. 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 (i. e. 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.

No comments:

Post a Comment