IDE: parâmetros, validação e histórico

Parâmetros com sliders para ajustar e otimizar, o diagnóstico ao vivo, as versões automáticas e a caixa de segurança.

Parâmetros do código convertidos em sliders no painel direito do IDE
Cada Parameter() que você declara no código (esquerda) aparece como um slider ajustável no painel direito do IDE.

Esta página cobre três coisas que tornam o IDE confortável e seguro: parâmetros ajustáveis com sliders, o diagnóstico ao vivo que avisa sobre erros enquanto você digita, e o histórico de versões automáticas que salva seu progresso. No final você encontrará também tudo que precisa saber sobre a caixa de segurança (sandbox) onde seu código é executado.

Parâmetros com Parameter()

Quando você declara um atributo de classe com `Parameter(...)`, o TradingNote o detecta automaticamente e cria um slider no painel direito do IDE. Assim você pode ajustar valores sem tocar no código, e esses mesmos parâmetros ficam prontos para serem varridos pelo otimizador quando chegar a hora.

python
class MiEstrategia(Strategy):
    rsi_period = Parameter(14, min_val=5, max_val=50, step=1, label="Periodo RSI")
    sl_atr     = Parameter(1.5, min_val=0.5, max_val=5.0, step=0.1, label="Stop Loss (ATR)")
Cada Parameter() gera um slider no painel direito do IDE.
ArgumentoO que define
Primeiro (posicional)Valor padrão do parâmetro.
min_valMínimo do slider.
max_valMáximo do slider.
stepIncremento entre valores do slider.
labelRótulo visível no painel de parâmetros.

Agrupar parâmetros

Você pode organizar os sliders em seções com um comentário especial imediatamente antes do grupo. O IDE reconhece a sintaxe `# ── Nome ──` e cria um cabeçalho visual que separa os parâmetros no painel.

python
class MiEstrategia(Strategy):
    # ── Entrada ──
    rsi_period = Parameter(14, min_val=5, max_val=50, step=1, label="Periodo RSI")
    # ── Salida ──
    sl_atr = Parameter(1.5, min_val=0.5, max_val=5.0, step=0.1, label="Stop (ATR)")
    tp_atr = Parameter(3.0, min_val=0.5, max_val=10.0, step=0.1, label="Target (ATR)")
Comentários com traços criam seções visuais no painel de parâmetros.

Use Parameter() para tudo que queira poder ajustar. Mais tarde, esses mesmos parâmetros são os que o otimizador vai variar para encontrar a melhor configuração, então quanto mais você declarar desde o início, mais margem de melhoria terá.

Diagnóstico ao vivo

Enquanto você digita, a aba de Diagnóstico (painel inferior do IDE) marca problemas na hora, sem que você precise executar nada. Quando tudo está correto, aparece o estado verde «código limpo»; se houver algo errado, você verá contadores de erros e avisos com a linha exata.

  • Imports ou funções proibidas (acesso fora do sandbox).
  • Ausência da classe Strategy como classe base.
  • Ausência do método obrigatório on_bar().
  • Indentação inválida (mistura de espaços e tabs).
  • Parênteses, aspas ou chaves sem fechar.

Histórico de versões

Você não precisa salvar manualmente. O IDE salva automaticamente a cada 1,5 segundos aproximadamente e, se houve mudanças, cria um snapshot automático a cada ~30 segundos. São mantidas até 100 versões por arquivo. Na aba Histórico você pode ver todas as versões anteriores com seu timestamp e restaurar qualquer uma com um único clique.

Se você quebrar algo, abra a aba Histórico e volte para uma versão que funcionava. Nada se perde: o IDE salva silenciosamente enquanto você programa.

A caixa de segurança (sandbox)

Seu código é executado de forma isolada por segurança: sem acesso à internet, sem disco, sem bibliotecas do sistema operacional. Isso protege a plataforma e todos os outros usuários. A tabela abaixo resume o que é permitido e o que é bloqueado.

PermitidoBloqueado
`from strategy_base import Strategy, Parameter`Módulos de sistema: os, sys, subprocess, socket, requests, urllib, threading, multiprocessing, pickle, sqlite3 e similares.
Importar seus próprios arquivos do projeto (ex. `from helpers import minha_funcao`).Funções built-in perigosas: open(), eval(), exec(), compile(), __import__(), input().
Python puro: cálculos, if/for, listas, dicionários, classes próprias...Atributos de introspecção: __class__, __globals__, __subclasses__() e similares.

Se você ver um erro de «import bloqueado» ou «função bloqueada», não é um bug da plataforma: é o sandbox funcionando corretamente. Resolva implementando a lógica com Python puro ou com a API da Strategy, que já cobre os casos de uso comuns.

Projetos com vários arquivos

Você pode dividir sua estratégia em vários arquivos .py (por exemplo main.py e helpers.py) e pastas, e importar entre eles normalmente usando caminhos relativos. O ponto de entrada obrigatório é sempre main.py.

python
# helpers.py
def es_sesion_londres(hora_utc):
    return 7 <= hora_utc < 16

# main.py
from strategy_base import Strategy, Parameter
from helpers import es_sesion_londres

class MiEstrategia(Strategy):
    def on_bar(self):
        if not es_sesion_londres(self.current_bar.hour):
            return
        # ... lógica de trading
main.py é o ponto de entrada; a partir daí você pode importar qualquer módulo próprio do projeto.

Publicar como algoritmo

Quando sua estratégia estiver pronta, pressione «Salvar como algoritmo». Lembre-se de que o IDE não executa o código: ao salvar, a estratégia passa para «Meus Algoritmos» como um novo algoritmo, e é aí que você faz o backtest, ajusta seus parâmetros para encontrar os melhores, valida estatisticamente (DSR, Walk-Forward, Multiverso) e, se passar, adiciona a um portfólio ou leva ao live trading.

A iteração é a chave: ajuste um slider, execute o backtest, veja o resultado e repita. A cada rodada você afina um pouco mais a estratégia. O histórico automático permite experimentar sem medo de perder o que já funcionava.