Stop Loss e Take Profit: 3 Passos para Salvar seu Robô (NTSL)

Introdução: O Cinto de Segurança

Imagine que a internet da sua casa caia exatamente 10 segundos depois do seu robô comprar 50 contratos de Mini Índice. O mercado desaba 2.000 pontos contra você. O que acontece?

Sem Stop Loss e Take Profit, seu robô é apenas um passageiro em um carro sem freios. Se você configurou o Filtro Anti-Violino no post anterior, seu robô já sabe quando entrar. Agora, ele precisa saber a hora exata de sair, tanto no lucro quanto no prejuízo.

Neste tutorial, vamos configurar as ordens de saída fixa (O.C.O) no código NTSL. Essa é a única barreira entre uma perda calculada e a ruína da sua conta.

A Lógica da Sobrevivência

Até agora, usamos saídas “à mercado” (quando a média cruza de volta). O problema é que, em movimentos bruscos, a média demora para cruzar. Para profissionalizar o código, precisamos definir:

  1. Stop Loss (Perda Máxima): Se o preço voltar X pontos, saia imediatamente.
  2. Take Profit (Alvo de Lucro): Se o preço andar Y pontos a favor, coloque o dinheiro no bolso.

O Código com Stop Loss e Take Profit (Versão 3.0)

Vamos atualizar nosso código. Note que agora inserimos comandos específicos de saída: SellToCover (para fechar compras) e BuyToCover (para fechar vendas).

Copie o código abaixo e substitua no seu Editor de Estratégias:

Input
  PeriodoMedia(9);
  PeriodoADX(14);
  NivelADX(25);
  HorarioInicio(0910);
  HorarioFim(1650);
  // NOVOS PARAMETROS DE RISCO
  AlvoPontos(300);  // Take Profit em Pontos
  StopPontos(150);  // Stop Loss em Pontos

Var
  MinhaMedia : Float;
  MeuADX     : Float;
  EstaNoHorario, TemForca, Comprou, Vendeu : Boolean;

Begin
  // 1. Calculos (Mantemos a lógica do Filtro Anti-Violino)
  MinhaMedia := MediaExp(PeriodoMedia, Close);
  MeuADX     := ADX(PeriodoADX, 10);

  EstaNoHorario := (Time >= HorarioInicio) and (Time <= HorarioFim);
  TemForca      := (MeuADX > NivelADX);

  // 2. Plotagem
  Plot(MinhaMedia);
  SetPlotColor(1, clAqua);

  // 3. ENTRADAS (Com Filtros)
  // Se nao tiver posicao aberta (BuyPosition e SellPosition = 0)
  if (BuyPosition = 0) and (SellPosition = 0) then
  begin
    // Compra
    if (Close > MinhaMedia) and (EstaNoHorario) and (TemForca) then
      BuyAtMarket;

    // Venda
    if (Close < MinhaMedia) and (EstaNoHorario) and (TemForca) then
      SellShortAtMarket;
  end;

  // 4. SAIDAS DE RISCO (Stop Loss e Take Profit)
  
  // Se estiver comprado...
  if (IsBought) then
  begin
    // Saida de Gain (Alvo)
    SellToCoverLimit(BuyPrice + AlvoPontos);
    // Saida de Loss (Stop)
    SellToCoverStop(BuyPrice - StopPontos, BuyPrice - StopPontos);
    
    // Saida pela Media (Virada de Mao - opcional)
    if (Close < MinhaMedia) then SellToCoverAtMarket;
  end;

  // Se estiver vendido...
  if (IsSold) then
  begin
    // Saida de Gain (Alvo)
    BuyToCoverLimit(SellPrice - AlvoPontos);
    // Saida de Loss (Stop)
    BuyToCoverStop(SellPrice + StopPontos, SellPrice + StopPontos);
    
    // Saida pela Media
    if (Close > MinhaMedia) then BuyToCoverAtMarket;
  end;

  // 5. Encerramento Day Trade
  if (Time >= 1700) then ClosePosition;

End;

Como Testar o Stop Loss e Take Profit

Ao rodar o Backtest com esse novo código, você notará uma mudança drástica no comportamento do gráfico:

  1. Linhas Retas: Você verá linhas horizontais verdes (Gain) e vermelhas (Loss) no gráfico.
  2. Menos Drawdown: O Stop Loss e Take Profit protegem seu lucro acumulado. O robô não devolve mais tudo quando o mercado vira de repente.

Dever de Casa: O que rende mais no Mini Índice? Um alvo curto (100 pontos) ou um alvo longo (500 pontos)? Altere o valor de AlvoPontos nos parâmetros e descubra.


Seu robô sobreviveu ao teste de estresse? Poste o resultado no nosso Grupo VIP.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima