Documentação1.0 (latest)
PáginasOtimização · 20 / 29

Otimização

O QuantCraft pode executar vários backtests em sequência com valores diferentes para os seus parâmetros de entrada e deixar você comparar os resultados. Configure as execuções pelo Test (Execução de código); os resultados resumidos aparecem em Resultados dos testes. Há duas estratégias de busca disponíveis:

  • Brute force — testa todas as combinações dos valores que você listar.
  • Genetic — usa um algoritmo genético para explorar grandes espaços de busca com muito menos execuções.

Ambos os modos são configurados na aba Script da caixa Run backtest (o botão Test) e só aparecem quando o seu script declara parâmetros por meio de quantcraft.inputs (os caminhos mais antigos quantcraft.inputs_module / ide.inputs_module ainda são reconhecidos em scripts existentes). Salve grades de otimização e outras configurações da caixa com as Predefinições de execução (.qcs) (optStep / optMax são armazenados para predefinições de backtest).


Onde encontrar

  1. Abra a caixa Test com o botão Test na barra de ferramentas do IDE.
  2. Abra a aba Script (exibida quando o seu script importa params de quantcraft.inputs — ou dos caminhos mais antigos quantcraft.inputs_module / ide.inputs_module).
  3. Ative Optimize e escolha Brute force ou Genetic.

As execuções de otimização usam as mesmas configurações de Symbol & data e Simulation de um backtest normal. Você só configura como os parâmetros variam.


Comportamento da tabela de parâmetros com a otimização ativada

A tabela Parameter values ganha duas colunas extras quando a otimização está ativada:

ColunaFinalidade
ParameterO nome do seu script (somente leitura).
Typeint, float, bool ou str.
ValueNos tipos numéricos, é o início da grade. Em bool/str, é o valor fixo.
StepSomente numérico. Passo entre valores consecutivos (positivo ou negativo).
MaxSomente numérico. Limite superior nas grades crescentes ou limite inferior nas decrescentes.

Comportamento por tipo:

  • int / float — os valores são gerados como start, start+step, … até Max, inclusive (arredondado em int).
  • bool — expandido automaticamente para true e false (dois valores).
  • str — mantido fixo; um parâmetro de string não varia.

Cada linha mostra um pequeno marcador (true / false ou fixed) quando o valor não pode ser expandido, para que você veja de relance quais parâmetros realmente variam.


Força bruta (grade de parâmetros)

A força bruta avalia todas as combinações dos valores que você definiu. Se você listar 5 valores para length e 4 para threshold, são 5 × 4 = 20 backtests.

Limites e validação

  • O número total de combinações é limitado a 256 execuções. Acima disso, a caixa bloqueia o envio com uma mensagem explícita pedindo que você amplie os passos ou remova parâmetros da grade.
  • Cada intervalo numérico precisa dos três: Value (início), Step e Max. O Step não pode ser 0.
  • Se o Max não puder ser alcançado a partir do Value com o sinal de Step escolhido, a caixa explica o problema (por exemplo, início ≤ máximo para passos positivos).

O que você vê durante a execução

Quando você envia uma otimização por força bruta:

  • Um banner de cabeçalho aparece na visualização Test results: Optimization — <file> (current/total).
  • O painel de saída registra cada execução com a sua combinação de parâmetros, além de uma linha de cabeçalho: Optimization (brute force): N backtest run(s).
  • A barra de progresso do painel de saída mostra Run X / N.
  • Um botão Stop está disponível — as execuções já concluídas são mantidas e exibidas nos resultados.

O que você vê ao terminar

O painel Test Results exibe uma visualização Optimization:

  • Um cabeçalho resumindo o script e quantas execuções foram concluídas.
  • Uma faixa de abas com todas as execuções, cada aba rotulada com a combinação de parâmetros (por exemplo, length=20, threshold=1.5). Quando os rótulos ficam longos, a combinação completa é mostrada acima do gráfico da execução ativa.
  • Selecionar uma aba mostra a visualização normal de desempenho daquela execução (gráfico de patrimônio, métricas, operações), para que você possa detalhar qualquer combinação.
  • Se a execução foi interrompida antes de todas as combinações serem concluídas, um banner informa que os resultados são parciais.

Busca genética

O modo genético é a escolha certa quando a grade de força bruta seria grande demais. Em vez de testar cada combinação, ele faz evoluir uma pequena população de candidatos ao longo de várias gerações, mantendo os melhores e recombinando-os.

Hiperparâmetros

Mude a aba interna para Genetic e você verá estes campos:

CampoIntervaloObservações
Population size4 – 64Número de candidatos avaliados por geração. Valores típicos são 8–32. Deve ser maior que Elitism.
Generations1 – 40Cada geração executa uma população completa de backtests.
Elitism≥ 1, < populaçãoMelhores candidatos copiados sem alteração para a geração seguinte.
Crossover rate0 – 1Chance de dois pais produzirem um filho misto (caso contrário, o primeiro pai é copiado).
Mutation rate0 – 1Chance, por gene, de saltar aleatoriamente para outro valor discreto.
Fitness metriclista suspensaO que a busca maximiza (veja abaixo).
Random seed (optional)textoUse a mesma semente para reproduzir uma busca exatamente.

O total de backtests executados é population × generations. Esse produto é limitado a 400 avaliações — se você o exceder, a caixa pede que reduza um dos dois valores.

Os alelos (os valores discretos que cada parâmetro pode assumir) são exatamente as mesmas grades que a força bruta construiria:

  • Parâmetros numéricos usam Value / Step / Max para criar uma lista discreta.
  • Parâmetros bool viram true / false.
  • Parâmetros string são fixos (e não afetam a busca).

A busca genética precisa de pelo menos um parâmetro que possa variar (mais de um alelo). A caixa bloqueia o envio e pede que você amplie uma grade numérica ou inclua um bool se todos os parâmetros forem fixos.

Métricas de aptidão

A lista suspensa oferece (quanto maior, melhor):

  • Sharpe ratio (padrão)
  • Sortino ratio
  • Total return
  • Total P/L ($)
  • Profit factor
  • Calmar ratio

A métrica é lida do desempenho da conta de cada backtest — as execuções que deram erro recebem a menor aptidão possível e, por isso, sempre ficam por último.

O que você vê durante a execução

  • Banner de cabeçalho: Genetic optimization — <file> com Generation g of N, individual i of P.
  • O painel de saída registra a busca: Genetic optimization: population P, N generation(s), fitness = …, depois ── Gen g/N, indiv i/P: <combo> ── para cada backtest.
  • A barra de progresso mostra Gen g/N · i/P.
  • Um painel de resultados parciais aparece assim que as primeiras execuções terminam — os candidatos já avaliados são ordenados por aptidão e listados com prefixos G<g>·… para que você veja quem lidera sem esperar a busca inteira.

O que você vê ao terminar

  • O painel Test Results mostra Genetic optimization — <file> junto com a métrica de aptidão usada e o número de execuções.
  • A visualização final contém a última geração ordenada por aptidão, com a melhor no topo. Cada aba abre a visualização de desempenho completa daquela execução.
  • Se você pressionar Stop, as avaliações concluídas de todas as gerações até então são exibidas ordenadas por aptidão, e um banner informa que a busca foi interrompida antes da hora.

Dicas práticas

  • Comece pequeno. Uma grade de força bruta com 3 parâmetros de 10 valores cada já dá 1000 execuções — bem acima do limite de 256. Reduza os passos antes de ativar a otimização.
  • Prefira o Genetic para espaços grandes. Além de ~3 parâmetros numéricos, costuma ser mais rápido e útil usar algumas gerações de busca genética do que uma pequena grade de força bruta.
  • Fixe uma semente quando quiser que uma execução Genetic seja reproduzível (por exemplo, comparar duas estratégias com a mesma busca).
  • Use o Stop à vontade. Ambos os modos preservam as execuções já concluídas, então você pode interromper assim que surgir um vencedor claro.
  • Escolha a aptidão com intenção. Sharpe e Sortino recompensam a consistência, Total return / Total P/L perseguem o crescimento bruto, Profit factor recompensa o equilíbrio entre ganhos e perdas e Calmar penaliza drawdowns profundos.
  • Inspecione cada execução. Cada aba de resultado contém o gráfico de patrimônio padrão, as métricas e o histórico de operações — você pode exportar o relatório HTML de qualquer execução individual como em um backtest único.
7 min de leituraSugerir uma edição ↗
Otimização — Documentação (1.0 (latest)) | QuantCraft