Tuesday 31 October 2017

Estratégias De Negociação Ninjatrader


Página não encontrada


A página que você tentou acessar não existe neste servidor. Esta página pode não existir devido às seguintes razões: Você é o proprietário deste site e você não enviou (ou carregou incorretamente) seu site. Para obter informações sobre como fazer o upload do seu site usando software de cliente de FTP ou software de design da Web, clique aqui para obter informações sobre o upload de FTP.


O URL inserido no seu navegador está incorreto. Volte a introduzir o URL e tente novamente.


O link que você clicou incorretamente aponta para esta página. Entre em contato com o proprietário deste site para informá-los dessa situação.


Parceiros NinjaTrader


Copyright & copy; 2015. Todos os direitos reservados. O logo do NinjaTrader Ecosystem é uma marca registrada do NinjaTrader Ecosystem LLC.


Este site é apenas para fins educacionais e informativos e não deve ser considerado uma solicitação para comprar ou vender um contrato de futuros ou fazer qualquer outro tipo de decisão de investimento. As empresas e serviços listados neste site não devem ser considerados uma recomendação e é da responsabilidade do leitor avaliar qualquer produto, serviço ou empresa. A NinjaTrader Ecosystem LLC não é responsável pela exatidão ou conteúdo de qualquer produto, serviço ou empresa vinculada neste site.


Negociação de futuros contém risco substancial e não é para todos os investidores. Um investidor poderia potencialmente perder todo ou mais do que o investimento inicial. Capital de risco é dinheiro que pode ser perdido sem comprometer a segurança financeira ou estilo de vida. Apenas o capital de risco deve ser utilizado para negociação e apenas aqueles com capital de risco suficiente devem considerar a negociação. O desempenho passado não é necessariamente indicativo de resultados futuros. Visualizar a Divulgação de Risco Completo.


Regras da CFTC 4.41 - Os resultados de desempenho hipotéticos ou simulados têm certas limitações, ao contrário de um registro de desempenho real, os resultados simulados não representam a negociação real. Além disso, uma vez que os negócios não foram executados, os resultados podem ter sub-ou-mais compensado o impacto, se houver, de certos fatores de mercado, como a falta de liquidez. Programas de negociação simulados em geral também estão sujeitos ao fato de que eles são projetados com o benefício de retrospectiva. Nenhuma representação está sendo feita que qualquer conta vai ou é susceptível de alcançar lucros ou perdas semelhantes aos mostrados.


Adaptrade Software Newsletter Artigo


NinjaScript para comerciantes da estratégia


Por Michael R. Bryant


Estive ansioso para fornecer NinjaTrader & reg; NinjaScript & reg; Para o meu software de geração de estratégia do Adaptrade Builder por algum tempo e agora pode anunciar que está quase pronto (veja abaixo um exemplo de uma estratégia NinjaScript gerada pelo Builder), com uma versão esperada em ou cerca de 30 de junho. Nível da linguagem NinjaScript e como ele se compara aos outros idiomas suportados pelo Builder. *


Aproveitando uma linguagem existente


NinjaTrader é uma plataforma de negociação popular para estoque, futuros e forex trading. Como o MetaTrader, o NinjaTrader é gratuito para negociação e desenvolvimento de estratégia simulados e é compatível com uma ampla variedade de corretores e provedores de dados. Uma das razões por trás da popularidade do NinjaTrader é a linguagem de programação NinjaScript para o desenvolvimento de indicadores e estratégias. A versatilidade e poder de NinjaScript criou um grande ecossistema de indicador e código de estratégia que efetivamente estende a plataforma NinjaTrader.


O NinjaScript é baseado na linguagem de programação C # (pronuncia-se "C Sharp") desenvolvida pela Microsoft e publicada pela primeira vez em 2002. C # é uma linguagem de programação de uso geral baseada nas linguagens C e C ++ e utilizando o framework da Microsoft. Basar o NinjaScript em C # significa que ele pode tirar vantagem de toda a funcionalidade do C # e que pode ser compilado com os compiladores existentes do Microsoft C #. Isso é diferente de outras linguagens de script, como EasyLanguage da TradeStation, AFL da AmiBroker e MQL4 do MetaTrader 4. Embora todas essas linguagens tenham sintaxe C-like, particularmente MQL4, elas são todas construídas a partir do zero. Em princípio, isto deve proporcionar uma vantagem de design; Ou seja, que eles podem ser personalizados para a negociação. No entanto, isso tem que ser equilibrado contra as vantagens proporcionadas pela fundação de um maduro, linguagem altamente desenvolvida como C #.


O C # e bibliotecas fornecem recursos básicos como data / hora e funções matemáticas. Desde C # e foram em desenvolvimento por aproximadamente 14 anos, esses recursos básicos são bastante maduro e estável. O NinjaScript não só aproveita as funções de biblioteca incorporadas, mas também os recursos básicos de linguagem, incluindo condicionais ( "se então" ramificação), loops, funções e assim por diante. Construindo sobre a fundação de uma língua existente, popular, NinjaTrader alavancou uma disposição larga das potencialidades e dos recursos ao evitar os riscos e as armadilhas de desenvolver uma língua scripting do risco. O resultado é uma linguagem de script rica em recursos, altamente capaz e confiável.


Uma linguagem de script moderna


O NinjaScript é consistente com o design subjacente do C #, que é orientado a objetos, orientado a eventos e baseado em componentes. Todas as estratégias em NinjaTrader definem sua própria classe, que deriva da classe Strategy dentro do namespace NinjaTrader. É aqui que a funcionalidade adicionada ao C # para criar o NinjaScript está localizada.


Figura 1. A declaração de classe de estratégia está no namespace NinjaTrader. Strategy. A função Inicializar é chamada uma vez no início da estratégia.


Em c #, a maioria das ações é precipitada por eventos externos, que desencadeiam "manipuladores de eventos". No NinjaScript, o manipulador de eventos principal é chamado OnBarUpdate, que é acionado no final de cada barra ou, opcionalmente, em cada marca. É aqui que reside a principal lógica de estratégia. O outro manipulador de eventos primário é Initialize, que é acionado no início da estratégia e é executado apenas uma vez nesse momento. Outros manipuladores de eventos podem ser implementados opcionalmente, como OnPositionUpdate, que é acionado sempre que a posição de negociação é alterada e OnOrderUpdate, que é acionado sempre que uma ordem existente muda. A capacidade de executar código de estratégia quando ocorre eventos específicos pode facilitar a programação de determinadas ações no NinjaScript em comparação com idiomas mais tradicionais, como o EasyLanguage.


Figura 2. A função NinjaScript OnBarUpdate é chamada no final de cada barra ou em cada tick, dependendo da configuração em Initialize.


Abstração, Controle e Versatilidade


Todas as linguagens de script para negociação fazem trade-offs na forma como eles abstraem certos aspectos da negociação versus quanto controle eles dão e exigem do usuário. A negociação envolve uma série de ações bastante complexas: avaliando a lógica da estratégia em cada barra e / ou tick, colocando várias ordens de negociação para entrada e saída, rastreando e atualizando as ordens de negociação em cada bar / tick, processando e registrando preenchimentos e cancelando open Ordens, incluindo um-cancela-outros e ordens contingentes. Um alto nível de abstração significa que grande parte dessa complexidade é escondida do programador e executada automaticamente por trás dos bastidores, o que torna mais fácil programar, mas fornece menos controle e versatilidade. Um nível mais baixo de abstração deixa muito do trabalho até o programador, o que torna a programação mais difícil, mas normalmente fornece mais controle.


Por exemplo, algumas linguagens, como MetaQuotes Language 4 (MQL4), fornecem comandos bastante básicos para lidar com pedidos e deixá-lo até o usuário para cancelar ordens abertas após um preenchimento. Isso pode dificultar a implementação de uma estratégia que usa, por exemplo, saídas múltiplas (por exemplo, uma parada de proteção, uma saída de destino e uma saída com base em uma condição lógica) porque quando uma saída é atingida, a outra, pendente ordens têm de Ser cancelado pelo código da estratégia. Por outro lado, esta camada fina de abstração fornece controle máximo e versatilidade.


A AmiBroker Formula Language (AFL), por outro lado, fornece uma abstração muito profunda em sua forma básica, na medida em que o usuário fornece apenas as condições sob as quais a entrada e a saída devem ocorrer e a linguagem (ea plataforma subjacente) Quando e como as ordens de negociação reais são colocadas e executadas. Para tipos mais simples de estratégias, isso torna muito fácil codificar a estratégia. No entanto, ele fornece muito pouca flexibilidade e controle para o desenvolvedor de estratégia. De facto, a AmiBroker reconheceu aparentemente esta limitação quando adicionou a sua chamada "interface de backtester do portfólio" (Procedimento de backtest personalizado), que fornece acesso a funções de nível inferior para controlar coisas como entrada de pedidos. Infelizmente, esta abordagem separada não se integra bem com o design original da AFL.


EasyLanguage fornece vários tipos de abstrações complexas. Inerente em cada estratégia EasyLanguage é o fato de que a maioria do código, além das inicializações de variáveis, é executado em cada barra. Se a expressão "olhar para dentro da barra traseira de teste" Está habilitado, uma abstração adicional está presente na medida em que cálculos adicionais são realizados nos bastidores para avaliar mais de uma vez cada barra, dependendo da configuração do usuário. Com efeito, o TradeStation tem o equivalente ao OnBarUpdate do NinjaScript, mas está escondido do usuário e manipulado nos bastidores.


O EasyLanguage também gerencia o processamento de pedidos de forma a minimizar a carga sobre o usuário. Múltiplas ordens podem ser colocadas em código, e as não executadas serão canceladas como se "um-cancela-outro" Quando um está cheio. O NinjaScript implementa abstrações quase idênticas para o posicionamento e execução de pedidos, incluindo o cancelamento automático de cada pedido no final de cada barra. Isso é consistente com o fato de que o código de estratégia é executado em cada barra, o que normalmente significa que as instruções de código para fazer pedidos serão repetidas em cada barra. Se as ordens não expirassem automaticamente no final de cada barra, elas teriam que ser canceladas pela estratégia antes de colocar novas.


O processamento de matrizes é outra área que destaca o grau de abstração entre as linguagens de script. Como os indicadores e outros elementos da lógica de estratégia precisam ser avaliados em cada barra de um gráfico de preços ou série de dados, as linguagens de script para negociação são inerentemente baseadas em matrizes; Ou seja, eles se beneficiam de realizar cálculos em matrizes de dados de preços, em vez de executar os cálculos bar-by-bar.


Por exemplo, se uma estratégia inclui uma média móvel e uma estocástica, uma abordagem seria calcular a média móvel na primeira barra, calcular o estocástico na mesma barra, avaliar a lógica de estratégia para essa barra e, em seguida, passar para a próxima barra . No entanto, é muito mais eficiente para calcular a média móvel para cada barra no gráfico, em seguida, calcular o estocástico para cada barra no gráfico e, em seguida, avaliar a lógica de estratégia. Este último é um exemplo de processamento de matriz, que geralmente pode ser executado nos bastidores, mesmo que não seja aparente pela forma como o código é escrito.


O EasyLanguage fornece o melhor exemplo disso: o processamento do array é abstraído para que o usuário não precise se preocupar com ele. Por exemplo, quando você codifica uma função em EasyLanguage, você escreve os cálculos a serem executados na barra atual. Cabe ao compilador EasyLanguage fazer os cálculos eficientes, presumivelmente através do processamento de matriz. Na AFL, por outro lado, o processamento de matriz é projetado para ser conveniente, mas é explícito em que você tem que estar ciente de que você está processando arrays de dados e levar isso em conta na forma como você escreve o código.


NinjaScript é semelhante ao MQL 4 em que o uso de arrays é principalmente explícito. No entanto, no MQL4, o uso de arrays arbitrários como entradas de indicadores, como uma média móvel de algo diferente do preço, é manipulado de forma desajeitada, dificultando a avaliação de indicadores de indicadores, como uma média móvel de um estocástico. O NinjaScript supera esse problema potencial fornecendo um tipo especial de array chamado DataSeries, que pode ser definido no código de estratégia e que é aceito como uma entrada por qualquer indicador que inerentemente considera o preço como uma entrada. Isso torna relativamente fácil codificar indicadores aninhados.


Exemplo de código de estratégia NinjaScript gerado pelo Builder


O arquivo disponível no link abaixo foi gerado automaticamente pelo Adaptrade Builder em NinjaScript para NinjaTrader. O arquivo pode ser aberto em qualquer editor de texto, como o bloco de notas. Para compilar a estratégia em NinjaTrader, salve-a para a pasta Estratégia na pasta de documentos do NinjaTrader, abra-a no editor de NinjaScript e clique no botão de compilação. Um caminho típico para salvar o arquivo é C: \ Users \ [your_user_name] \ Documents \ NinjaTrader 7 \ bin \ Custom \ Strategy, no qual [your_user_name] é o nome de usuário na pasta Users. Como alternativa, copie o código para a área de transferência e cole-o em uma estratégia em branco dentro do editor NinjaScript.


A saída do NinjaScipt no Builder estará disponível na versão 1.7.0, com uma data de lançamento esperada de 30 de junho de 2014.


DOWNLOAD ou OPEN (arquivo: Builder_Ninja_Ex. cs)


Atingir um equilíbrio


Como sugerido acima, todas as linguagens de script para negociação atingem um equilíbrio em algum lugar ao longo do espectro entre uma linguagem altamente abstraída que lida muito atrás dos bastidores (por exemplo, AFL) e uma linguagem finamente abstraída que requer que o usuário especifique cada etapa da negociação Processo (eg MQL4). NinjaScript é muito parecido com EasyLanguage em que ele cai em algum lugar no meio.


Comparado com EasyLanguage, NinjaScript, sem dúvida, torna pelo menos algumas de suas abstrações mais claras, sem torná-las muito mais complexas. Por exemplo, o código que executa em cada barra é óbvio que reside na função OnBarUpdate. Em EasyLanguage, pode não ser imediatamente aparente para um recém-chegado que a maioria do código de estratégia é executada no fechamento de cada barra e que as variáveis ​​não reinicializar em cada barra. No NinjaScript, as variáveis ​​não fazem parte do OnBarUpdate, portanto fica claro que qualquer inicialização executada fora dessa função, como na função Inicializar, acontece apenas uma vez. Por outro lado, EasyLanguage fornece um nível geral de abstração mais elevado, o que pode torná-lo mais fácil de codificar uma vez que as características de design da linguagem são compreendidas.


Do ponto de vista de um programador, há muito a admirar sobre NinjaScript. Seu design é consistente com as convenções de programação modernas, é facilmente extensível, fornece abstrações comerciais convenientes para coisas como a colocação de pedidos e ainda consegue ser claro sobre o que o código faz em uma base bar-by-bar. Além disso, aproveita os recursos de linguagem de biblioteca e C #.


Tendo programado o EasyLanguage por cerca de 20 anos, é difícil avaliar outras linguagens de script com novos olhos. No entanto, se eu estivesse aprendendo a programar estratégias de negociação hoje - e deixando de lado quaisquer considerações relacionadas às diferentes plataformas de negociação - eu poderia muito bem escolher NinjaScript.


Mike Bryant


Adaptrade Software


* Este artigo não se destina a ser tutorial na natureza e não discutir os recursos da plataforma NinjaTrader.


"Depois de 20 anos de negociação para instituições, ganhei uma posição de Trader Sênior especificamente por causa deste Programa de Mentor Executivo"


Casper Johansen,


Trader institucional


"Eu sou um comerciante institucional para um grande fabricante de mercado nas Ilhas Cayman e têm sido negociados nos mercados de Valores dos EUA por 18 anos. Nesta profissão você não recebe um salário pago, você recebe uma porcentagem do valor total de lucro que você traz para seus clientes sob gestão. Aqui nós trabalhamos na aceitação da realidade que este é um ambiente muito competitivo e stress total.


No início de uma nova carreira decisão, eu estava experimentando um segundo trimestre de início de não desempenho e uma redução que, em seguida, ameaçou a minha posição. A longa história curta é através de uma referência que eu descobri Jeff Kilian e eu imediatamente reteve seu serviço.

No comments:

Post a Comment