IDE interno (código)

Escreva seus próprios bots de trading em Python dentro do TradingNote, sem instalar nada. Editor estilo VS Code com backtest integrado.

O IDE interno do TradingNote com editor Python
O IDE interno: árvore de arquivos à esquerda, editor Python ao centro, parâmetros com sliders à direita e diagnóstico ao vivo embaixo.

Além de descobrir algoritmos automaticamente com o Explorador, o TradingNote tem um IDE interno onde você escreve a estratégia em Python. É para quem quer controle total: uma lógica específica que o explorador aleatório não encontraria. O editor roda no navegador, tem destaque de sintaxe estilo VS Code (Monaco), backtest integrado e não requer nada instalado no seu computador.

Você só precisa de um pouco de Python básico. Se não programa, o Explorador aleatório faz o mesmo trabalho sem código: lance uma exploração e a plataforma busca por você.

Explorador ou IDE? Quando usar cada um

SituaçãoUse o ExploradorUse o IDE
Não sei programar
Tenho uma ideia de lógica específica
Quero varrer milhares de combos de parâmetros
Quero condições personalizadas / lógica por sessão horária
Quero multi-posição ou gestão de risco avançada
Quero iterar rápido sem pensar em código

Como criar uma estratégia no IDE

  1. 1

    Entre no Criador de Algoritmos

    No menu principal, clique em «Criador de Algoritmos» (seção Lab). Você verá a lista das suas sessões de exploração.

  2. 2

    Pressione «Nova sessão»

    No canto superior direito você encontrará o botão «New session». Isso abre o assistente de criação.

  3. 3

    Escolha «Desenvolvimento personalizado»

    No assistente você verá dois modos: «Exploração aleatória» e «Desenvolvimento personalizado». Selecione o segundo para abrir o IDE.

  4. 4

    Dê um nome e abra o IDE

    Digite um nome descritivo para a sessão (ex. «RSI + EMA EURUSD H1») e confirme. O IDE abre com um modelo pronto para editar.

O layout do IDE

O IDE é dividido em quatro painéis principais que trabalham juntos:

  • Esquerda — árvore de arquivos: você pode criar vários arquivos .py e pastas, arrastar, renomear e excluir. O arquivo main.py é obrigatório e é o ponto de entrada da sua estratégia.
  • Centro — editor de código: o editor Monaco (o mesmo núcleo do VS Code) com abas e visão dividida para ver dois arquivos ao mesmo tempo. Inclui autocompletar da API do TradingNote.
  • Direita — painel de parâmetros: sliders e controles que aparecem automaticamente quando você usa Parameter() no seu código. Permite ajustar valores sem tocar no código. Veja a sub-página «Parâmetros, validação e histórico».
  • Baixo — abas de Diagnóstico e Histórico: Diagnóstico mostra erros e avisos em tempo real enquanto você digita; Histórico lista as versões salvas automaticamente do seu código (a cada ~30 segundos).

Estrutura mínima de uma estratégia

Toda estratégia é uma classe Python que herda de Strategy. Precisa de pelo menos dois métodos: on_init() (executado uma vez na inicialização, para registrar indicadores e preparar variáveis) e on_bar() (executado em cada nova vela, onde você escreve a lógica para decidir quando comprar ou vender). A seguir, o modelo padrão que aparece ao criar uma sessão IDE:

python
from strategy_base import Strategy, Parameter

class MiEstrategia(Strategy):
    rsi_period = Parameter(14, min_val=5, max_val=50, step=1, label="Periodo RSI")
    rsi_oversold = Parameter(30, min_val=10, max_val=45, step=1, label="RSI Sobreventa")
    rsi_overbought = Parameter(70, min_val=55, max_val=90, step=1, label="RSI Sobrecompra")
    ema_period = Parameter(200, min_val=10, max_val=500, step=10, label="Periodo EMA")
    sl_atr = Parameter(1.5, min_val=0.5, max_val=5.0, step=0.1, label="Stop Loss (ATR)")
    tp_atr = Parameter(3.0, min_val=0.5, max_val=10.0, step=0.1, label="Take Profit (ATR)")

    def on_init(self):
        self.rsi = self.indicator("RSI", period=self.rsi_period)
        self.ema = self.indicator("EMA", period=self.ema_period)

    def on_bar(self):
        if not self.position:
            if self.rsi.value < self.rsi_oversold and self.bar.close > self.ema.value:
                self.buy(sl_atr=self.sl_atr, tp_atr=self.tp_atr)
                self.log(f"BUY @ {self.bar.close:.5f} | RSI={self.rsi.value:.1f}")
        else:
            if self.rsi.value > self.rsi_overbought:
                self.close()
Modelo padrão do IDE. Compra quando o RSI está em sobrevenda e o preço está acima da EMA200; fecha quando o RSI atinge sobrecompra.

Vamos ver o que cada parte faz. As linhas de Parameter() definem controles ajustáveis que aparecerão como sliders no painel direito do IDE: rsi_period controla o período do RSI (padrão 14), rsi_oversold e rsi_overbought são os limiares de entrada e saída, ema_period define a média móvel de tendência, e sl_atr / tp_atr definem o Stop Loss e Take Profit como múltiplos do ATR. Em on_init() são registrados os indicadores que a estratégia usará: um RSI com o período escolhido e uma EMA com seu período. Em on_bar(), a lógica principal: se não há posição aberta e o RSI está abaixo do limiar de sobrevenda e o preço de fechamento está acima da EMA (filtro de tendência), uma compra é executada com o stop loss e take profit configurados, e uma mensagem é escrita no log. Se já houver posição aberta, fecha assim que o RSI superar o limiar de sobrecompra.

Comece com o modelo. Mude um número (ex. o período do RSI de 14 para 20), salve como algoritmo, faça o backtest e veja como as métricas mudam: é a forma mais rápida de ganhar intuição sobre como os parâmetros afetam os resultados.

Métodos do ciclo de vida

Além de on_init() e on_bar(), você pode sobrescrever estes métodos opcionais para responder a momentos-chave da execução:

MétodoQuando é executadoPara que usá-lo
on_init()Uma vez no início do backtestRegistrar indicadores, inicializar variáveis
on_bar()Em cada vela fechadaLógica principal: sinais de entrada e saída
on_tick(tick)Em cada tick intra-vela (opcional)Scalping, gestão intra-vela, trailing stops finos
on_day_start()Primeira barra de cada diaResets diários, carregar níveis do dia anterior
on_day_end()Última barra de cada diaFechar posições no fim do dia, salvar estado
on_week_start()Primeira barra da segunda-feiraResets semanais, ajuste de parâmetros por semana
on_week_end()Última barra da sexta-feiraFechar no fechamento semanal, evitar risco de fim de semana
on_month_start()Primeira barra do mêsResets mensais, rotação de ativos por mês
on_month_end()Última barra do mêsFechar no fechamento mensal, relatórios de desempenho

O que você pode ler no seu código (propriedades)

Dentro de qualquer método você tem acesso a estas propriedades do contexto de execução. O detalhe completo de indicadores, ordens e parâmetros está nas sub-páginas correspondentes.

PropriedadeO que é
self.barVela atual: open, high, low, close, volume, time
self.positionPosição aberta principal (None se não houver nenhuma)
self.positionsLista de todas as posições abertas
self.in_positionBooleano: True se houver pelo menos uma posição aberta
self.position_countNúmero de posições abertas no momento
self.balanceSaldo da conta (capital em dinheiro)
self.equityEquity = saldo + PnL flutuante das posições abertas
self.tradesHistórico de operações fechadas no backtest
self.dataPreços históricos com índices relativos (self.data.close[-1] = vela anterior)
self.symbol_infoSpecs do instrumento: pip size, tick value, spread, etc.
self.accountInfo da conta: moeda base, alavancagem, broker
self.calendarCalendário econômico: próximos eventos macro para o símbolo ativo
self.log(msg)Escreve uma mensagem no log de diagnóstico do IDE

O IDE roda em uma sandbox: você não pode importar bibliotecas externas (numpy, pandas, requests…) nem acessar a internet ou o sistema de arquivos. Só é permitido importar from strategy_base import Strategy, Parameter e seus próprios arquivos dentro do projeto. O detalhe do que é permitido e o que não é está na sub-página de parâmetros.

Salvar e backtestar sua estratégia

Aqui há um detalhe importante: o IDE não tem um botão de «Executar» que rode o código dentro do editor. O fluxo é outro — você salva o algoritmo e o teste acontece no backtesting, onde, graças aos Parameter() que você declarou, também pode ajustar os valores e descobrir quais funcionam melhor para esse algoritmo em específico.

  1. 1

    Escreva e deixe salvar sozinho

    Dentro do IDE não há botão de «Executar». Você só escreve: o IDE salva seu trabalho automaticamente (a cada ~1.5 segundos de inatividade) e cria versões do seu código a cada ~30 segundos. Você pode voltar a qualquer versão anterior pela aba «Histórico» embaixo.

  2. 2

    Salvar como algoritmo

    Pressione «Salvar algoritmo» (canto superior direito). Sua estratégia é publicada em «Meus Algoritmos» com os parâmetros atuais, exatamente como um algoritmo descoberto pelo Explorador. A partir daí ele é backtestado.

  3. 3

    Faça o backtest sobre dados reais

    No backtest você escolhe símbolo, timeframe, intervalo de datas e capital, e a plataforma roda seu código vela por vela incluindo spread, comissões e swap. Você obtém a curva de capital, a lista de operações e as métricas-chave: Sharpe, drawdown máximo, win rate, fator de lucro e TN Score.

  4. 4

    Ajuste os parâmetros e encontre os melhores

    Como sua estratégia declara Parameter(), no backtesting você pode mover esses parâmetros e comparar as métricas para descobrir quais valores funcionam melhor para esse algoritmo em específico. É a forma de afinar sua própria ideia sem reescrever o código.

  5. 5

    Valide e opere

    Quando os números te convencerem, valide-o com Walk-Forward e Multiverso (veja a seção de Validação) para descartar o sobreajuste. Se passar, você já pode adicioná-lo a um portfólio ou levá-lo ao live trading como qualquer outro algoritmo.

Continue aprendendo

Este artigo cobre a visão geral do IDE. As três sub-páginas a seguir entram em detalhe em cada área especializada:

  • Indicadores e dados — como registrar e usar indicadores técnicos (RSI, MACD, Bollinger, ATR e mais de 25 disponíveis), acessar preços históricos com self.data e ler o calendário econômico a partir do seu código.
  • Ordens e saídas — como abrir posições longas e curtas, colocar Stop Loss e Take Profit (em pips, ATR ou preço exato), usar trailing stops, escalar dentro de uma posição (pyramid) e forçar fechamentos parciais ou totais.
  • Parâmetros, validação e histórico — como o Parameter() funciona em detalhe (tipos, intervalos, rótulos), como o painel de parâmetros é gerado automaticamente, o que é permitido importar na sandbox e como usar o histórico de versões para recuperar código anterior.