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:
- Stop Loss (Perda Máxima): Se o preço voltar X pontos, saia imediatamente.
- 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:
- Linhas Retas: Você verá linhas horizontais verdes (Gain) e vermelhas (Loss) no gráfico.
- 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.

