NinjaScript, o C # API usado para estratégias de programação em NinjaTrader, Tenta stirke um equilíbrio entre fazer o processo de desenvolvimento de estratégia mais simples possível, preservando a flexibilidade nos tipos de estratégias que pode suportar. Ele lida com esses requisitos concorrentes pelas estratégias de divisão em dois tipos de métodos de ordem. Muitos programadores dentro da comunidade NinjaTrader também se referem a esses tipos como abordagens.
Abordagem Managed
A primeira e mais comum método de ordem é uma abordagem de gestão. A abordagem gestão é também a premissa padrão que NinjaTrader assume que você está usando, ao escrever uma estratégia.
I backtest estratégias desta maneira 90%+ do tempo. É a maneira mais fácil de escrevê-los usando uma abordagem de gestão uma vez que todas as variáveis e as propriedades são configurados. NinjaScript torna disponível um número de métodos que todos inter-relacionam. Os nomes e funcionalidade de cada um é óbvio. Digite Longo(), por exemplo, entra um longo comércio.
Todos estes métodos têm premapped relações entre cada outra. Quando a estratégia exige ExitLong(), NinjaTrader cuida dos detalhes, como saber que há muito tempo que ele precisa para sair. Isso parece bastante óbvio, mas muitas aplicações comerciais não ligar os pontos tão facilmente entre funcionalidade de negociação. MetaTrader 4 & 5 são bons exemplos deste tipo de funcionalidade simples não estar disponível.
A facilidade com que decisões de negociação são manipuladas é ideal para o desenvolvimento rápido e sujo de código para testar idéias simples. A maioria das minhas idéias de estratégia seguem o princípio KISS; mantê-lo simples, estúpido. É geralmente um processo de desenvolvimento muito simples (10-20 atas) programar e testar uma idéia de negociação a partir do momento em que ele entra na minha mente. A maioria das idéias não funcionam, mas pelo menos eu tenho a satisfação de saber a resposta rapidamente.
Eu descobri a maneira dura que a abordagem gestão faz suposições sobre a manipulação fim. Digite o limite de Longo(), por exemplo, exclui automaticamente uma ordem de limite pendente após um bar. Lembro-me de passar várias horas com uma estratégia vivo tentando descobrir por que tantos de meus pedidos digitado corretamente em cartas de carrapatos, apenas para tê-los desaparecer no próximo tick. Cuidadosamente debruçado sobre a documentação me levou a descobrir um método sobrecarregado com o parâmetro liveUntilCandelled.
É exemplos como essa funcionalidade pré-programados que você precisa prestar atenção para fora para. Isto é especialmente verdadeiro se você tem um bug que não faz sentido no contexto de sua estratégia.
Abordagem não gerenciado
Uma abordagem não gerenciado tira todos os pressupostos que NinjaTrader faz enquanto a estratégia é executado em tempo real. Esta opção deixa para o codificador para armazenar o status de posição na memória e tomar decisões apropriadas.
Todas as estratégias que temos escrito com ordens não gerenciados usa pendente parar e limitar as ordens. Um exemplo recente envolve uma estratégia de criação de mercado na Interactive Brokers. A estratégia é 100% no mercado durante os EUA e sessões asiáticas. Nós originalmente começou com uma abordagem de gestão, mas teve problemas com as comissões e overfills.
A estratégia é apenas trading 2 lotes mini durante a fase de testes, que é o tamanho mínimo de comércio. Embora a comissão padrão de 0.2 pips por lado é bastante baixa, a comissão mínima é $2.50. Isso é relativamente alto para tal um pequeno tamanho de posição. Notei no primeiro dia que o meu cliente estava recebendo comissões cobradas para a perna entrada e saída perna, respectivamente.
O primeiro comércio entrou com 20k. Quando chegou a hora de sair, a abordagem de gestão definir um limite de saída para 20k e um limite de entrada separada para outro 20k. IB cobrado comissões duas vezes para ambas as ordens, que custo $5 por turno rodada comercial. O relatório de negociação parecia:
O BOT 20K $2.50
20k SLD $2.50
20k SLD $2.50
BOT 20k $ 2.5o
O BOT 20K $2.50
20k SLD $2.50
O BOT 20K $2.50
20k SLD $2.50
Isso é eficaz 4 comercializa a um custo de $20.
Agrupando os comércios em um único fim de mais ou menos cortar as comissões pela metade. Eu achei que era mais fácil fazer com uma abordagem não gerenciado, porque eu não tinha que se preocupar com a forma como o Entry() e Exit() métodos iria interagir. O relatório comércio alterado para:
O BOT 20K $2.50
40k SLD $2.50
BOT 40k $2.50
40k SLD $2.50
O BOT 20K $2.50
A mesma sequência agrupados cai o custo do 4 comércios para baixo para $12.50. A entrada inicial e o custo de saída final $2.50, mas os negócios realizados entre só paga $2.50 para a entrada e saída combinada. Quando o tamanho da ordem aumenta a lotes padrão, as economias de comissão irá melhorar dramaticamente o retorno do cliente.
A outra razão que nós mudamos para uma abordagem não gerenciado foi que NinjaTrader mata uma estratégia sempre que ocorre um transbordo. Um transbordo é quando uma estratégia solicita o cancelamento de uma ordem pendente, mas que a ordem pendente fica cheio antes da solicitação de cancelamento chega. Em seguida, sai a nova posição no mercado e desliga a estratégia.
Eu encontrei esta quase intolerável com uma estratégia de criação de mercado porque um transbordo quase certamente ocorrer pelo menos uma vez por dia. Ordens não gerenciadas tem a opção de desabilitar uma sobrecarga e lidando com isso de maneira que o comerciante julga apropriado. No meu caso, foi simplesmente aumentar a quantidade de posição que a estratégia de se tentar sair.
A principal desvantagem para encomendas não gerenciados é que tudo é controlado internamente. Se você precisa desativar uma estratégia para alterar as configurações ou perder a conexão corretor, o código provavelmente não vai interagir muito bem com as posições que já estão abertas. Quaisquer objetos de IOrder foram armazenados na memória, que é como a estratégia sabe o que as posições estão abertas, desaparecem quando a estratégia é removido a partir de um gráfico.
Estratégias não gerenciados também levar muito mais tempo para testar. A quantidade de código envolvido não difere drasticamente de ordens gerenciados. É maior, mas não tão grotescamente. A razão que leva mais tempo é que a interação entre os tipos de ordem não é polido, como é em ordens gerenciados. O programador deve escrever tudo do zero, que invariavelmente significa que a estratégia vai sofrer de muitas mais bugs iniciais, especialmente em um ambiente vivo.
Estratégias que dependem de ordens de mercado não precisa considerar esta abordagem na minha opinião. Isso faz com que muito mais trabalho e eu ainda tenho que encontrar uma situação em que faz sentido. Mais importante, Eu não posso pensar em uma situação hipotética em que não faria sentido ou.