Saturday 16 September 2017

Código De Linguagem Fácil Tradição Forex


Qualquer pessoa que codifique o TradeStation EasyLanguage Oi Bemac, recorra gentilmente esses indicadores Easylanguage em linguagem MT4. Obrigado. Variáveis: BandDays (28), DevConstant (3.500000) Variáveis: keltnerTop (0), keltnerMid (0), keltnerBot (0), expSmoothPrice (0) Variáveis: expSmoothRange (0) Variáveis: altu (0), altd (0), (0), (0), (0), n (0), p (0) SE (CURRENTBAR 1) ENCONTRO expSmoothPrice CLOSE expSmoothRange HIGH-LOW END ELSE BEGIN expSmoothPrice (expSmoothPrice (BandDays-1) CLOSE) BandDays expSmoothRange (expSmoothRange (BandDays-1) (HIGH-LOW)) BandDays END keltnerTop expSmoothPrice (expSmoothRangeDevC onstant) keltnerMid expSmoothPrice keltnerBot expSmoothPrice - (expSmoothRangeDevConstant) se fechar lt KeltnerMid então altd 1 else altd 0 se altd 1 e high1 lt KeltnerMid e fechar Lt Low1 então comece dir -1 final se fechar gt KeltnerMid então altu 1 else altu 0 se altu 1 e low1 gt KeltnerMid e fechar gt high1 então começar dir 1 end if dir -1 então setplotcolor (2, magenta) se dir 1 então setplotcolor (2, verde) PLOT1 (keltnerTop, quotTBand Topquot) PLOT2 (keltnerMid, quotTBand Midquot) PLOT3 (keltnerBot, quotT Boca Botta) variáveis: Comprimento (20), TrigAvg (5), UpColor (verde), DnColor (magenta) Variáveis: xAvg (0), yAvg (0) yAvg TimeSeriesForecast (Comprimento, 0) xAvg XAverage (yAvg, TrigAvg) PLOT1 (1, DnColor) SETPLOTCOLOR (2, DnColor) END ELG BEGIN SETPLOTCOLOR (1, UpColor) SETPLOTCOLOR (2, UpColor) END Primeiro a ETI (1, DnColor) SETPLOTCOLOR (1, UpColor) SETTROTCOLOR (2, UpColor) END Primeiro a ETI Entradas de função: Preço (NumericSeries), r (NumericSimple), s (NumericSimple), If Value2 ltgt 0, então TSI Value1 Value2 The Indicator Inputs: Preço (c), r (7), s (27), u (1), SmTLen (7) Value1 TSI (Price, r, s, u) Value2 XAverage (TSI (Price, r, s, u), SmthLen) IF (PLOT1 gt PLOT3) ENCONTRO SETPLOTCOLOR (1, magenta) SETPLOTCOLOR (3, magenta ) END ELSE BEGIN SETPLOTCOLOR (1, verde) SETPLOTCOLOR (3, verde) END MetaTrader vs. TradeStation: uma comparação de linguagem por Michael R. Bryant Qualquer um que negocie ativamente o forex provavelmente tenha ouvido falar do MetaTrader. Eles afirmam ter mais de meio milhão de usuários para as versões móveis de suas plataformas de negociação MT4 e MT5. Em resposta aos pedidos dos usuários do MetaTrader, trabalhei na adição da saída do MetaTrader 4 (MT4) ao Adaptrade Builder. Ao concluir a documentação do novo recurso de saída de código MT4 no Builder, pensei que seria um bom momento para discutir algumas das maneiras pelas quais a linguagem de programação MT4, chamada MQL4, difere da linguagem de programação TradeStations, chamada EasyLanguage. Se você é um comerciante sistemático interessado em negociar forex e ainda não escolheu uma plataforma de negociação, ou você está pensando em mudar de uma plataforma para a outra, há algumas coisas que você deve saber sobre as duas linguagens de script. Se você está apenas aprendendo sobre MetaTrader, você pode se perguntar por que é uma plataforma tão popular. Na minha opinião, é um resultado de vários fatores. Primeiro, a plataforma é gratuita. Você pode baixar o software e obter dados de forex gratuitos como parte da plataforma sem nenhum custo. A plataforma inclui todos os principais símbolos de divisas e, depois de se inscrever para uma conta demo gratuita, os dados são atualizados em tempo real. Além disso, a linguagem de script MetaTrader 4, MQL4, é parte integrante da plataforma. Você pode usar o MQL4 para escrever indicadores, quotscriptsquot (código para executar funções específicas sob solicitação) e quotes quotexpert (estratégias de negociação). O idioma MQL4, conforme discutido abaixo, é muito versátil e torna a MT4, como a TradeStation, uma plataforma extensível. Existe uma comunidade ativa de usuários MT4 que contribuem com indicadores e EA para o fórum MT4. A plataforma MT4, como a linguagem MQL4, foi projetada especificamente para forex. Eu vou discutir mais sobre como isso afeta a linguagem MQL4 abaixo, mas o ponto aqui é que o forex é um mercado global grande e crescente, e o MetaTrader segmentou esse mercado especificamente. Por fim, ao contrário da TradeStation, que restringe os usuários ao uso de seus próprios serviços de corretagem, o MetaTrader é compatível com uma grande variedade de corretores forex. Como um usuário de longa data da TradeStation, posso lembrar quando a TradeStation era apenas para negociar os mercados de futuros. A linguagem de programação EasyLanguage foi projetada por comerciantes de futuros para comerciantes de futuros. Ao longo dos anos, o idioma foi ampliado e adaptado para funcionar bem em outros mercados, principalmente ações, opções e divisas. No entanto, algumas de suas características ainda refletem suas origens nos mercados de futuros. MQL4 (abreviação de MetaQuotes Language 4) foi projetado especificamente para os mercados de forex. Muitas vezes, o material de instrução para negociação forex concentra-se em idéias e conceitos de negociação genéricos, como indicadores técnicos e tipos de lógica de negociação, e ignora os detalhes de como os mercados de Forex funcionam e como isso torna o forex diferente de outros mercados, como ações e futuros . O fato é que a negociação forex funciona de forma algo diferente de outros mercados, como todos os que estão em transição de um mercado diferente. MQL4 tende a refletir essas diferenças. Principais diferenças Aqui estão algumas das principais diferenças entre EasyLanguage e MQL4. Salvo indicação em contrário, a discussão refere-se a escrever estratégias de negociação e back-testing em dados históricos. A premissa da execução do código EasyLanguage é que todo o código é executado no fechamento de cada barra do gráfico ao qual a estratégia é aplicada. Se o gráfico consistir em barras diárias, por exemplo, o código será executado no fechamento de cada barra diária. Se você quiser que o código seja executado com mais freqüência, o gráfico deve ser alterado para ter um tamanho de barra menor. No entanto, você pode forçar o código a executar certos elementos com mais freqüência usando o recurso quotLook-inside-bar back-testingquot. Isso usa dados de preços com uma resolução maior do que o mostrado no gráfico para produzir resultados mais precisos. O código MQL4 usa uma função chamada start () que executa em cada marca. Normalmente, o código de estratégia principal ocorre dentro da função start (). Se você não deseja que o código seja executado em cada marca, você deve programar esta lógica no início (). Por exemplo, para que o código seja executado ao aberto de cada barra, você pode usar o volume da barra para detectar o aberto usando quotVolume0 lt 1quot. Não há nenhuma maneira prática de detectar o fechamento da barra, de modo que as estratégias no MT4 normalmente executam em todos os carrapatos ou nas barras abertas. Como o código EasyLanguage é executado no fechamento da barra, as instruções de ordem comercial são sempre para execução na próxima barra, e. QuotComprar próxima barra no marketquot. A declaração equivalente mais próxima no MQL4 seria colocar a ordem para a barra atual nas barras atuais abertas. Nesse caso, a lógica de negociação sempre é avaliada na barra anterior em MQL4, enquanto que na EasyLanguage, a lógica é avaliada na barra atual. Ao contrário do EasyLanguage, o MQL4 não restringe as estratégias aos dados do gráfico em que a estratégia foi aplicada. Você pode fazer referência a qualquer série de dados disponíveis em uma estratégia MT4, consultando o símbolo e o tamanho da barra. Os tamanhos dos bares são limitados a 1, 5, 15, 30, 60 e 240 minutos, bem como diariamente, semanalmente e mensalmente. A TradeStation tem uma maior variedade de tamanhos de barra disponíveis, incluindo tamanhos de barras de qualquer número inteiro de minutos e barras de tiras de qualquer número de tiques. Execução de Ordem A EasyLanguage faz um trabalho louvável de esconder as complexidades de colocar e executar ordens de negociação. Por exemplo, se você tem uma posição curta e você coloca uma ordem de entrada longa, se você não especifica o tamanho, a entrada longa fechará automaticamente o comércio curto ao mesmo tempo em que coloca o longo comércio. Da mesma forma, se você tiver várias ordens pendentes para sair, digamos, um longo comércio no mercado, dependendo de condições diferentes, se várias condições forem verdadeiras ao mesmo tempo, somente uma ordem de saída será colocada, as outras serão canceladas automaticamente. Além disso, as ordens de negociação no EasyLanguage persistem por apenas uma barra e são automaticamente canceladas se não estiverem preenchidas no final da próxima barra. O MQL4 deixa o gerenciamento de pedidos em grande parte até o programador. Se você tiver várias ordens concorrentes, você precisa gerenciá-las você mesmo, cancelando as que não são executadas e certificando-se de que várias ordens não são executadas sem querer. Por exemplo, no MQL4, se você quer uma entrada para reverter uma posição aberta, você deve especificar o número de lotes para dar o resultado líquido desejado (por exemplo, vender 2 lotes curtos com 1 lote aberto longo para acabar 1 lote curto) Ou rastrear a posição aberta e fechá-la assim que a nova entrada for detectada. Ações vs. Lotes Na EasyLanguage, o tamanho de uma posição de negociação é especificado em contratos (por exemplo, futuros) ou compartilhamentos. Para negociação forex, um tamanho de posição padrão na TradeStation seria de 10.000 ou 100.000 ações, correspondendo a um lote pequeno ou completo. De acordo com a orientação forex, no MetaTrader, o tamanho do comércio é especificado em lotes, que podem ser fracionários. Um lote de tamanho completo seria um tamanho muito grande de 1. Um lote de mini seria um tamanho de tamanho de 0,1. Custos de negociação e preços de enchimento Como a TradeStation e a EasyLanguage foram originalmente orientadas para a negociação de futuros, eles seguem a convenção de usar o deslizamento para explicar o fato de que os negócios geralmente não são preenchidos ao preço de mercado. Slippage é o custo do dólar adicionado ao comércio para explicar isso. Normalmente, você também entraria os custos de comissão por contrato ou por troca para registrar as taxas dos encargos de corretagem para executar o comércio. Todos esses custos são tratados da mesma maneira: eles deduzem um valor em dólares de um comércio rentável ou adicionam o mesmo valor a uma troca perdedora. Os mesmos custos são deduzidos de todos os negócios, tanto longos quanto curtos. Ao mesmo tempo, o comércio é assumido como tendo sido preenchido no preço especificado, seja o preço atual para um pedido de mercado ou o preço de parada ou limite especificado. O MQL4 usa uma abordagem um pouco mais sofisticada para os custos de negociação e os preços de preenchimento. No MetaTrader, é importante entender que cada preço é na verdade dois preços, a oferta e a pergunta. A oferta é o preço mais baixo, enquanto a pergunta é o preço mais alto. A diferença entre a oferta e a pergunta é chamada de spread de bidask. Os pedidos de compra são sempre preenchidos no pedido, e as ordens de venda são sempre preenchidas na oferta. Um gráfico de preços mostra apenas o preço da oferta. Isso significa que as ordens de compra no mercado serão preenchidas acima do preço de mercado aparente (com base no gráfico), enquanto as ordens de venda de mercado serão preenchidas ao preço observado no gráfico. A propagação bidask é parte do custo do comércio. Isso é consistente com a prática comum na negociação forex de pagar o comércio através do spread em vez de pagar ao corretor uma comissão fixa. O MQL4 também usa o spread bidask para determinar se um pedido pendente é preenchido. Por exemplo, um pedido de parada de compra só é preenchido se o preço de venda, que está acima do preço do gráfico (lance), toca o preço de parada. Se, por exemplo, a barra de preços no gráfico apenas toca o preço da parada, pode parecer que a ordem deve ser preenchida, mas o MT4 não mostrará o histórico comercial como preenchido, a menos que o preço de venda tenha chegado ao preço de parada de compra. Da mesma forma, um pedido de limite de compra não será registrado como preenchido, a menos que o preço de venda alcance o preço limite de compra. As paradas de venda e os limites são preenchidos na oferta, portanto, ao contrário de pedidos de compra, seus preços de preenchimento correspondem diretamente aos preços do gráfico. O spread da bidask não é o único spread de preços que afeta ordens de negociação no MT4MQL4. Se uma ordem pendente (parada ou limite) estiver muito próxima do mercado no momento da sua colocação, a ordem será rejeitada. Isso é baseado na idéia de que não haverá tempo suficiente para fazer a ordem antes que o mercado se mova através do preço da ordem. Esta distância mínima pode ser recuperada usando a função MarketInfo (..) no MQL4. Da mesma forma, uma ordem pendente não pode ser modificada no MQL4 se o preço atual da ordem estiver dentro do chamado nível quotfreezequot. Em outras palavras, se o pedido estiver tão próximo ao mercado que possa ser preenchido a qualquer momento, você não pode modificá-lo. Devido à abordagem mais sofisticada que o MT4MQL4 usa para representar o preenchimento da ordem, os preços de enchimento no MT4 para simulações históricas (ou seja, back-testing) provavelmente serão mais precisos do que no TradeStation. Sintaxe da linguagem Tanto o EasyLanguage quanto o MQL4 são linguagens tipo C. Ou seja, ambos têm semelhanças com a linguagem de programação C, que é um propósito geral, linguagem de programação processual desenvolvida no final da década de 1970. MQL4 é muito mais próximo em sintaxe para C do que EasyLanguage. No entanto, enquanto o MQL4 parece quase idêntico ao C, existem algumas diferenças, e o MQL4 não implementa todos os recursos do idioma Cs. Os arquivos de ajuda em MT4 observam as diferenças. Diferenças de indicadores Para qualquer um que considere a conversão de uma estratégia EasyLanguage para MQL4 ou vice-versa, esteja ciente de que nem todos os indicadores que estão disponíveis em ambas as plataformas são calculados da mesma maneira em cada plataforma. Em particular, os seguintes indicadores dão valores substancialmente diferentes em cada plataforma para os mesmos dados de preço: Momento, estocástico FastD (modo principal do indicador estocástico em MT4), estocástico lento (linha de sinal do indicador estocástico em MT4), DI-DI (Movimento direcional), ADX e distribuição de acumulação. Também deve notar-se que a TradeStation inclui indicadores mais incorporados do que o MT4. Através do fórum on-line para MT4, no entanto, é possível encontrar uma grande variedade de indicadores que foram fornecidos por outros membros gratuitamente. Conclusões Tanto o EasyLanguage quanto o MQL4 são linguagens de script de propósito geral projetadas para negociar os mercados. Com ambos os idiomas é possível desenvolver estratégias de negociação altamente complexas e sofisticadas. Em geral, minha experiência, que parece ser suportada por outros, é que o MQL4 é uma linguagem mais desafiadora para dominar do que o EasyLanguage, embora a maioria dos usuários da TradeStation provavelmente concorda que o nome EasyLanguage é um pouco errado. Grande parte da complexidade do MQL4 vem dos requisitos que ele coloca no programador para gerenciar ordens comerciais, algo que a EasyLanguage lida com os bastidores para a maior parte. No entanto, a carga adicional vem com maior controle e maior precisão na estimativa de preços de enchimento em testes históricos. No geral, não é surpreendente que MT4 seja uma plataforma de negociação popular para o forex e que o MQL4 tenha estado no topo da minha lista de solicitações de clientes do meu software Adaptrade Builder para construção de estratégias. Existem duas versões atuais do MetaTrader: MetaTrader 4 e MetaTrader 5. Ambas as plataformas são ativamente suportadas, mas usam linguagens de script diferentes. MT4 é, de longe, a plataforma mais popular. Como resultado, este artigo se concentrará exclusivamente em MT4 e em sua linguagem de script associada, MQL4. Este artigo apareceu na edição de dezembro de 2012 da newsletter do Adaptrade Software.

No comments:

Post a Comment