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.

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ção | Use o Explorador | Use 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
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
Pressione «Nova sessão»
No canto superior direito você encontrará o botão «New session». Isso abre o assistente de criação.
- 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
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:
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()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étodo | Quando é executado | Para que usá-lo |
|---|---|---|
| on_init() | Uma vez no início do backtest | Registrar indicadores, inicializar variáveis |
| on_bar() | Em cada vela fechada | Ló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 dia | Resets diários, carregar níveis do dia anterior |
| on_day_end() | Última barra de cada dia | Fechar posições no fim do dia, salvar estado |
| on_week_start() | Primeira barra da segunda-feira | Resets semanais, ajuste de parâmetros por semana |
| on_week_end() | Última barra da sexta-feira | Fechar no fechamento semanal, evitar risco de fim de semana |
| on_month_start() | Primeira barra do mês | Resets mensais, rotação de ativos por mês |
| on_month_end() | Última barra do mês | Fechar 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.
| Propriedade | O que é |
|---|---|
| self.bar | Vela atual: open, high, low, close, volume, time |
| self.position | Posição aberta principal (None se não houver nenhuma) |
| self.positions | Lista de todas as posições abertas |
| self.in_position | Booleano: True se houver pelo menos uma posição aberta |
| self.position_count | Número de posições abertas no momento |
| self.balance | Saldo da conta (capital em dinheiro) |
| self.equity | Equity = saldo + PnL flutuante das posições abertas |
| self.trades | Histórico de operações fechadas no backtest |
| self.data | Preços históricos com índices relativos (self.data.close[-1] = vela anterior) |
| self.symbol_info | Specs do instrumento: pip size, tick value, spread, etc. |
| self.account | Info da conta: moeda base, alavancagem, broker |
| self.calendar | Calendá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
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
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
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
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
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.