Como Criar um Bot de Stop-Loss de 10% para Angel One com Python

Aprenda a criar um bot em Python para monitorar opções na Angel One e disparar ordens de stop-loss de 10% com agilidade, baixa latência e controle de risco.

No mercado de opções, a volatilidade opera em frações de segundo. Uma reversão repentina no ativo subjacente pode transformar uma operação lucrativa em prejuízo antes mesmo que o trader consiga abrir a interface da corretora e enviar uma ordem a mercado. Para quem opera opções ativamente na Angel One, o gerenciamento de risco manual introduz atrito emocional e latência operacional, dois fatores que degradam sistematicamente o capital no longo prazo.

A solução para eliminar essa ineficiência é delegar o encerramento defensivo a um script Python conectado diretamente à SmartAPI da Angel One, configurado para vigiar cada posição aberta e disparar uma ordem de saída no instante exato em que a perda atinge 10%.

Arquitetura de Monitoramento com a SmartAPI

A Angel One disponibiliza a SmartConnect API, permitindo autenticação programática via API Key e autenticação de dois fatores (TOTP). Para construir um bot de stop-loss determinístico, dividimos a aplicação em três etapas fundamentais:

  1. Autenticação e Leitura de Posições: Obter o feed de posições abertas (getPositions).
  2. Loop de Avaliação de Risco: Comparar o preço médio de compra (Average Buy Price) com o último preço negociado (LTP – Last Traded Price).
  3. Execução de Saída: Submeter a ordem de encerramento (placeOrder) assim que a condição for satisfeita.

Implementando a Lógica em Python

O exemplo a seguir ilustra a estrutura essencial de monitoramento contínuo:

python
from smartapi import SmartConnect
import pyotp
import time

1. Conexão Segura

apikey = “SUAAPIKEY”
client
id = “SEUCLIENTID”
pwd = “SEUPIN”
totp
token = “SEUSEGREDOTOTP”

smartapi = SmartConnect(apikey)
totp = pyotp.TOTP(totptoken).now()
data = smart
api.generateSession(client_id, pwd, totp)

def verificarposicoes():
posicoes = smart
api.position().get(‘data’, [])

for pos in posicoes:
    quantidade = int(pos.get('netqty', 0))

    # Apenas posições compradas ativas
    if quantidade > 0:
        preco_medio = float(pos.get('buyprice', 0))
        ltp = float(pos.get('ltp', 0))
        simbolo = pos.get('tradingsymbol')
        token = pos.get('symboltoken')
        exchange = pos.get('exchange')

        # Cálculo do drawdown percentual
        desvalorizacao = ((ltp - preco_medio) / preco_medio) * 100

        if desvalorizacao <= -10.0:
            print(f"[STOP-LOSS DISPARADO] {simbolo}: Queda de {desvalorizacao:.2f}%. Executando saída...")
            executar_venda(simbolo, token, exchange, quantidade)

def executarvenda(simbolo, token, exchange, quantidade):
params = {
“variety”: “NORMAL”,
“tradingsymbol”: simbolo,
“symboltoken”: token,
“transactiontype”: “SELL”,
“exchange”: exchange,
“ordertype”: “MARKET”,
“producttype”: “CARRYFORWARD”,
“duration”: “DAY”,
“price”: “0”,
“quantity”: str(quantidade)
}
smart
api.placeOrder(params)

Loop de monitoramento controlado para respeitar os limites da API

while True:
try:
verificar_posicoes()
time.sleep(1) # Intervalo para evitar rate-limits
except Exception as e:
print(f”Erro de comunicação: {e}”)
time.sleep(5)

Otimização Técnica: WebSocket vs. Polling REST

Fazer requisições REST periódicas a cada segundo funciona para carteiras pequenas, mas consome cotas de requisição e introduz um atraso de até 1000ms. Como especialista em IA e sistemas orientados a eventos para o mercado financeiro, a recomendação para ambientes de produção é migrar o rastreamento do LTP para o WebSocket da Angel One.

Com o SmartStream (WebSocket):

  • O script subscreve apenas aos tokens das opções em carteira.
  • A atualização ocorre por evento de tick (orientada a push, sem sobrecarga de rede).
  • O cálculo da condição <= -10% ocorre na memória local em microsegundos, emitindo a ordem com slippage reduzido.

Tratamento de Falhas e Robustez Operacional

Em automações financeiras, o código deve ser defensivo:

  • Reconexão Silenciosa: Quedas de socket devem ser tratadas com reconexão exponencial imediata.
  • Controle de Estado de Ordens: Evitar o envio de ordens duplicadas garantindo que a posição seja marcada como ‘pendente de saída’ assim que a ordem for disparada.
  • Notificações em Tempo Real: Integrar webhooks do Telegram para alertar o operador a cada intervenção realizada pelo bot.

Conclusão

Construir um utilitário de stop-loss automático para a Angel One protege seu capital contra movimentos anômalos e disciplina a estratégia. Se você procura desenvolver infraestruturas de trading algorítmico, integrações avançadas de baixa latência ou estratégias inteligentes com gestão de risco personalizada, entre em contato para analisarmos o seu projeto de automação.

Preencha o formulário abaixo para que eu consiga entrar em contato com você.