Kaique Mitsuo Silva Yamamoto
Mercado financeiroAutomação de Estratégias

Automação no NinjaTrader: NinjaScript (C#), estratégias e order flow

Guia completo para automação de estratégias no NinjaTrader 8 usando NinjaScript baseado em C#.

O NinjaTrader é uma plataforma profissional de trading focada em futuros americanos, utilizada por mais de 800.000 traders. Em 2025, passou a fazer parte da Kraken. A linguagem NinjaScript, baseada em C#/.NET, oferece o maior poder computacional entre as plataformas de varejo.

Visão geral da plataforma

Preços

PlanoCustoComissão (standard)Comissão (micro)Destaques
Free$0$1.29/contrato$0.39/contratoGráficos avançados + sim ilimitada
Monthly$99/mês$0.99/contrato$0.29/contratoCustos reduzidos
Lifetime$1.499 único$0.59/contrato$0.09/contratoOrder Flow+, upgrades grátis

Capacidades principais

  • Gráficos profissionais com centenas de indicadores nativos
  • Order Flow+: barras volumétricas, footprint charts, análise de fluxo
  • NinjaScript: automação completa baseada em C#
  • Strategy Builder: criação visual sem código
  • Strategy Analyzer: backtest, otimização (exaustiva, genética, Walk Forward), Monte Carlo
  • Market Replay: replay tick-a-tick de dados históricos
  • ATM (Automated Trade Management): templates pré-definidos de stop/target
  • Market Analyzer: scanning e alertas em tempo real
  • REST API para integração externa

NinjaScript — C# para trading

NinjaScript é construído sobre C# (.NET), oferecendo acesso total ao framework .NET com uma API específica para trading.

Tipos de programa

TipoExecuta trades?Contínuo?Método principal
StrategySimSimOnBarUpdate()
IndicatorNãoSimOnBarUpdate()
AddOnSimSimCustom (extensões da plataforma)
MarketAnalyzerColumnNãoSimColunas customizadas
DrawingToolNãoN/AFerramentas de desenho

Ciclo de vida — OnStateChange()

protected override void OnStateChange()
{
    if (State == State.SetDefaults)
    {
        // Nome, descrição, valores padrão
        Description = "Minha Estratégia";
        Name = "MinhaEstrategia";
        Calculate = Calculate.OnBarClose;
        EntriesPerDirection = 1;
    }
    else if (State == State.Configure)
    {
        // Adicionar séries de dados adicionais
        AddDataSeries(BarsPeriodType.Minute, 5);
    }
    else if (State == State.DataLoaded)
    {
        // Inicializar indicadores
        smaFast = SMA(10);
        smaSlow = SMA(20);
    }
}

Progressão de estados:

SetDefaults → Configure → Active → DataLoaded → Historical → Transition → Realtime → Terminated

Lógica principal — OnBarUpdate()

protected override void OnBarUpdate()
{
    if (CurrentBar < 20) return; // aguardar candles suficientes

    if (CrossAbove(smaFast, smaSlow, 1))
        EnterLong();

    if (CrossBelow(smaFast, smaSlow, 1))
        EnterShort();
}

Criando uma estratégia automatizada

Path A: Strategy Builder (sem código)

  1. Abra NinjaTrader → Tools → Strategy Builder
  2. Defina condições de entrada via dropdowns
  3. Defina condições de saída (stop-loss, profit target, trailing stop)
  4. Configure tamanho de posição e tipos de ordem
  5. Salve e teste no Strategy Analyzer
  6. Opcionalmente, visualize e edite o código gerado no NinjaScript Editor

Path B: NinjaScript Editor (código)

  1. Abra NinjaTrader → New → NinjaScript Editor
  2. Right-click → New Strategy
  3. Implemente OnStateChange() e OnBarUpdate()
  4. Compile (F5)
  5. Aplique ao gráfico ou rode via Strategy Analyzer

Exemplo completo: SMA Crossover com stop e target

public class SMACrossover : Strategy
{
    private SMA smaFast;
    private SMA smaSlow;

    protected override void OnStateChange()
    {
        if (State == State.SetDefaults)
        {
            Description = "SMA Crossover Strategy";
            Name = "SMACrossover";
            Calculate = Calculate.OnBarClose;
            EntriesPerDirection = 1;
            EntryHandling = EntryHandling.AllEntries;
            IsExitOnSessionCloseStrategy = true;
            ExitOnSessionCloseSeconds = 30;
            FastPeriod = 10;
            SlowPeriod = 20;
        }
        else if (State == State.DataLoaded)
        {
            smaFast = SMA(FastPeriod);
            smaSlow = SMA(SlowPeriod);
            AddChartIndicator(smaFast);
            AddChartIndicator(smaSlow);
        }
    }

    protected override void OnBarUpdate()
    {
        if (CurrentBar < SlowPeriod) return;

        if (CrossAbove(smaFast, smaSlow, 1))
        {
            EnterLong("Long Entry");
            SetStopLoss("Long Entry", CalculationMode.Ticks, 20, false);
            SetProfitTarget("Long Entry", CalculationMode.Ticks, 40);
        }

        if (CrossBelow(smaFast, smaSlow, 1))
        {
            EnterShort("Short Entry");
            SetStopLoss("Short Entry", CalculationMode.Ticks, 20, false);
            SetProfitTarget("Short Entry", CalculationMode.Ticks, 40);
        }
    }

    [NinjaScriptProperty]
    [Range(1, int.MaxValue)]
    [Display(Name = "Fast Period", GroupName = "Parameters", Order = 0)]
    public int FastPeriod { get; set; }

    [NinjaScriptProperty]
    [Range(1, int.MaxValue)]
    [Display(Name = "Slow Period", GroupName = "Parameters", Order = 1)]
    public int SlowPeriod { get; set; }
}

Funções de ordem

Entradas:

  • EnterLong() / EnterShort() — ordens a mercado
  • EnterLongLimit() / EnterShortLimit() — ordens limite
  • EnterLongStopMarket() / EnterShortStopMarket() — ordens stop

Saídas:

  • ExitLong() / ExitShort() — fecha posições
  • SetStopLoss() — define stop loss
  • SetProfitTarget() — define alvo de lucro
  • SetTrailStop() — define trailing stop

Deploy para trading ao vivo

  1. Abra um gráfico com o instrumento e timeframe desejados
  2. Right-click → Strategies → selecione sua estratégia
  3. Configure parâmetros e conta
  4. Ative "Enabled"
  5. A estratégia roda em tempo real executando ordens na corretora

Criando indicadores personalizados

public class MeuIndicador : Indicator
{
    protected override void OnStateChange()
    {
        if (State == State.SetDefaults)
        {
            Description = "Indicador personalizado";
            Name = "MeuIndicador";
            IsOverlay = true; // true = sobre o gráfico, false = painel separado
            AddPlot(Brushes.DodgerBlue, "MainPlot");
        }
    }

    protected override void OnBarUpdate()
    {
        if (CurrentBar < Period) return;

        double sum = 0;
        for (int i = 0; i < Period; i++)
            sum += Close[i];

        Value[0] = sum / Period;
    }

    [NinjaScriptProperty]
    [Range(1, int.MaxValue)]
    [Display(Name = "Period", GroupName = "Parameters", Order = 0)]
    public int Period { get; set; }
}

Usando indicadores customizados em estratégias

// No State.DataLoaded:
meuIndicador = MeuIndicador(14);

// No OnBarUpdate():
if (meuIndicador.Value[0] > algumLimite)
    EnterLong();

Strategy Analyzer — backtesting e otimização

Backtesting

  1. Control Center → New → Strategy Analyzer
  2. Selecione estratégia, instrumento, tipo de barra e período
  3. Configure: comissão, slippage, tipo de preenchimento
  4. Execute e analise os resultados

Métricas geradas:

  • Lucro líquido, lucro bruto, perda bruta
  • Profit factor, Sharpe ratio
  • Drawdown máximo (absoluto e %)
  • Win rate, razão média ganho/perda
  • Total de trades, duração média

Métodos de otimização

Exaustiva: testa toda combinação possível. Precisa, porém lenta para muitos parâmetros.

Genética: usa algoritmos evolutivos para aproximar os melhores parâmetros. Muito mais rápida para estratégias com muitas variáveis.

Multi-Objetivo: otimiza para dois objetivos simultaneamente (ex: maximizar lucro E minimizar drawdown). Produz uma fronteira de Pareto.

Walk Forward Optimization (WFO)

  • Divide dados históricos em janelas "in-sample" (otimização) e "out-of-sample" (validação)
  • Desliza a janela adiante no tempo
  • Testa se parâmetros otimizados generalizam para dados não vistos
  • Essencial para detectar overfitting

Simulação Monte Carlo

  • Randomiza a ordem dos trades do backtest
  • Roda centenas/milhares de simulações
  • Gera distribuições de probabilidade para drawdown, lucro etc.
  • Responde: "qual o pior drawdown com 95% de confiança?"
  • Valida significância estatística dos resultados

Market Analyzer

Ferramenta de scanning e monitoramento em tempo real:

  • Colunas customizadas: qualquer indicador como coluna
  • Alertas de preço: condições que disparam áudio, popup ou email
  • Ranking dinâmico: ordene instrumentos por qualquer valor
  • Coloração de células: destaque visual por condições
  • Templates: salve configurações diferentes

Ecossistema NinjaTrader

O NinjaTrader Ecosystem conta com 600+ parceiros e milhares de produtos:

  • Indicadores: volume profile, order flow, estrutura de mercado (1000+)
  • Estratégias automatizadas: sistemas pré-construídos
  • Ferramentas de trading: gestão de risco, journaling
  • Serviços de dados: feeds adicionais, notícias
  • Educação: cursos, mentoria, webinars
  • Desenvolvimento: serviços de programação NinjaScript

Instalando add-ons de terceiros

  1. Baixe o arquivo .zip do vendor
  2. NinjaTrader → Control Center → Tools → Import → NinjaScript Add-On
  3. Selecione o .zip e importe
  4. Reinicie o NinjaTrader se necessário

Vantagens do C# para trading

Performance

  • Compilado para código nativo via JIT — significativamente mais rápido que linguagens interpretadas
  • Sem GIL (Global Interpreter Lock): multi-threading real
  • Baixa latência: essencial para scalping e order flow

Poder da linguagem

  • Acesso total ao .NET: file I/O, databases, HTTP, JSON, regex
  • Tipagem forte: erros detectados em tempo de compilação
  • Orientação a objetos: arquitetura limpa para estratégias complexas
  • LINQ: manipulação elegante de dados
  • Async/await: operações não-bloqueantes

Comparativo

FeatureNinjaScript (C#)Pine ScriptMQL5
VelocidadeMuito rápidaLentaRápida
Multi-timeframeNativoLimitadoSim
Dados externosAcesso totalNãoSim
Learning curveÍngremeFácilModerada
DebuggingIDE completaLimitadoIDE integrada
Ecossistema.NET + NuGetNenhumMQL5 Market

Guia passo a passo para iniciantes

Fase 1: Setup (Dia 1)

  1. Baixe NinjaTrader Desktop (gratuito)
  2. Crie conta de simulação
  3. Conecte ao feed de dados de simulação
  4. Familiarize-se com Control Center, gráficos e SuperDOM

Fase 2: Plataforma (Semana 1)

  1. Crie gráficos com futuros (ES, NQ, CL)
  2. Adicione indicadores nativos (SMA, RSI, MACD, Bollinger)
  3. Pratique ordens manuais no SuperDOM e Chart Trader
  4. Configure templates ATM para stop/target

Fase 3: Strategy Builder (Semana 2)

  1. Tools → Strategy Builder
  2. Crie SMA Crossover via interface visual
  3. Rode no Strategy Analyzer
  4. Examine o código NinjaScript gerado

Fase 4: Aprender NinjaScript (Semanas 3-4)

  1. Estude fundamentos de C# (variáveis, tipos, if/else, loops, classes)
  2. Leia o código gerado pelo Strategy Builder
  3. Faça pequenas modificações
  4. Escreva seu primeiro indicador do zero

Fase 5: Construir e testar (Semanas 5-8)

  1. Codifique sua própria estratégia em NinjaScript
  2. Backtest com dados históricos
  3. Otimize parâmetros (cuidado com overfitting)
  4. Walk Forward Optimization para robustez
  5. Monte Carlo para validação estatística
  6. Paper trade em simulação por 2-4 semanas

Fase 6: Go Live

  1. Abra conta real com NinjaTrader
  2. Comece com micro contratos (MES, MNQ)
  3. Monitore performance diariamente
  4. Compare resultados reais vs backtest

Estratégias mais populares

Trend Following

  • Cruzamento de médias móveis (SMA, EMA)
  • Triple Moving Average para confirmação
  • MACD Crossover com histograma
  • Donchian Channel Breakout (turtle trading)

Mean Reversion

  • RSI sobrecomprado/sobrevendido com filtro de tendência
  • Bollinger Band bounce em tendência de alta

Breakout

  • Opening Range Breakout (ORB): breakout dos primeiros 15-30 min
  • ATR Breakout: preço supera N * ATR de uma consolidação
  • Volume Breakout: confirma rompimento com volume acima da média

Scalping / Day Trading

  • VWAP Reversion: pullbacks ao VWAP em mercados tendenciosos
  • Order Flow: divergência de delta, padrões de absorção
  • Session Open/Close: baseados na abertura/fechamento do pregão

Gestão de risco automatizada

  • Trailing stops baseados em ATR
  • Saídas por tempo (fecha antes do fim do pregão)
  • Max daily loss: flatten e desabilita trading ao atingir limite

Fontes de aprendizado

Documentação oficial

Cursos de terceiros

Caminho recomendado de aprendizado

  1. Comece pelo Help Guide oficial
  2. Use o Strategy Builder para aprender fazendo
  3. Se não tem background em C#, faça um curso básico primeiro
  4. Avance para NinjaCoding ou Rize Capital
  5. Participe do fórum NinjaTrader para suporte da comunidade

Precisa de desenvolvimento profissional?

Se você precisa de estratégias NinjaScript customizadas, indicadores de order flow ou automação completa em C#, a RedBlock é especialista em engenharia de software para o mercado financeiro — do algoritmo ao deploy em produção.

Fale com a RedBlock


Aviso Legal: Conteúdo educativo. Não constitui recomendação de investimento. Resultados passados em backtesting não garantem resultados futuros.

On this page