Workflows de IA
Como usar modelos de IA pra gerar, iterar e melhorar estratégias — com prompts, padrões e salvaguardas.
Visão geral
A EmidLabs trata IA como uma ferramenta de pesquisa quantitativa, não um gerador mágico de sinais de trading. A infraestrutura é explicitamente projetada pra trabalhar com estratégias geradas por IA: a DSL de estratégia é legível por máquina, o formato JSON é limpo e sem ambiguidade, e os resultados contêm dados de diagnóstico suficientes pra refinamento iterativo.
O Loop de Workflow de IA
O workflow recomendado é um loop de quatro estágios:
Esse loop pode ser automatizado. Você pode construir agentes que geram estratégias, executam backtests via a API, fazem parse dos resultados, e iteram — sem intervenção humana entre cada ciclo.
#Engenharia de Prompt
O system prompt essencial
A coisa mais importante a incluir no seu system prompt é a especificação completa da DSL de estratégia. A IA precisa saber o schema exato e todas as funções disponíveis. A página Strategy System tem uma versão condensada e pronta pra colar dessa spec, construída exatamente pra esse propósito.
Informação chave pra incluir no system prompt:
- As seis chaves de nível superior:
configuration,inputs,conditions,score,decision,riskManagement(opcional). - Todas as funções nativas com suas assinaturas.
- A lista de operadores (AND, OR, operadores de comparação).
- As variáveis de dados de mercado (
close,open,high,low,volume). - A regra de que a saída deve ser só JSON válido (sem markdown, sem explicações).
- A regra contra dados futuros, aleatoriedade, e variáveis indefinidas.
Exemplo de estrutura de prompt do usuário
Hipótese:
Eu acredito que o BTC tende a ter tendência consistente quando a
EMA de 9 períodos está acima da EMA de 21 períodos no gráfico de
1H, e o RSI está numa faixa saudável (nem sobrecomprado, nem
sobrevendido). Confirmação de volume reduz sinais falsos em
mercados agitados.
Gere uma estratégia que:
- Usa timeframe de 1H
- Captura o alinhamento de tendência das EMAs
- Exige RSI entre 40 e 65
- Adiciona confirmação de pico de volume como sinal bônus
- Define um limiar de score que exige trend + rsi no mínimo
Retorne só o JSON da estratégia. Sem markdown. Sem explicações.Alimentando resultados de volta pra IA
Depois de rodar um backtest, compartilhe os dados de diagnóstico com a IA pra guiar o refinamento:
A estratégia produziu esses resultados:
- trades: 284, winRate: 0.524, expectancyR: 0.18
- conditionsDistributionPct: { trendUp: 0.41, rsiHealthy: 0.55, volConfirm: 0.72 }
- scoreDistributionPct: { 0: 0.38, 20: 0.21, 45: 0.24, 60: 0.17 }
Problemas a resolver:
1. volConfirm dispara 72% das vezes — não é seletivo o suficiente.
Aumente o multiplicador de pico de volume (em volume > sma(volume, 20) * multiplier) pra 2.0 ou 2.5.
2. winRate é 52.4% mas a expectância é só 0.18R — o RR de 1:3
parece estar performando abaixo do esperado. Tente adicionar
um sinal de crossover pra melhorar o timing de entrada.
Revise a estratégia e retorne só o JSON atualizado.#Iteração Automatizada
A API é projetada pra suportar loops de iteração programáticos. Aqui está um padrão básico em Python pra um ciclo de pesquisa automatizado:
import anthropic
import requests
import json
import time
EMID_API_KEY = "em_YOUR_KEY"
BASE_URL = "https://backtest.emidlabs.com/api/public/v1"
def generate_strategy(hypothesis: str, previous_result: dict = None) -> dict:
client = anthropic.Anthropic()
prompt = f"Hypothesis: {hypothesis}"
if previous_result:
prompt += f"\n\nPrevious results: {json.dumps(previous_result, indent=2)}"
prompt += "\n\nRevise the strategy based on these results. Output JSON only."
msg = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
system=STRATEGY_SYSTEM_PROMPT, # Include full DSL spec
messages=[{"role": "user", "content": prompt}]
)
return json.loads(msg.content[0].text)
def run_backtest(strategy: dict) -> dict:
resp = requests.post(
f"{BASE_URL}/backtest",
headers={"x-api-key": EMID_API_KEY},
json={
"assetPair": "BTC-USDC",
"initialDate": "2023-01-01",
"finalDate": "2023-12-31",
"strategySnapshotJson": strategy
}
)
backtest_id = resp.json()["id"]
# Poll for result
while True:
result = requests.get(
f"{BASE_URL}/backtest/{backtest_id}",
headers={"x-api-key": EMID_API_KEY}
).json()
if result["status"] in ("Completed", "Failed"):
return result
time.sleep(0.5)
# Run 5 iterations
hypothesis = "EMA crossover with RSI confirmation on BTC 1H"
result = None
for i in range(5):
strategy = generate_strategy(hypothesis, result)
result = run_backtest(strategy)
print(f"Iteration {i+1}: expectancyR={result['result']['expectancyR']}")#Boas Práticas
Evite overfitting
- Não otimize parâmetros rodando centenas de variações no mesmo intervalo de datas e escolhendo a melhor. Isso é curve-fitting, não descoberta de edge.
- Valide estratégias promissoras num intervalo de datas out-of-sample separado antes de tirar conclusões.
- Prefira estratégias com uma história causal clara em vez das que simplesmente "parecem boas no papel."
Valide a saída da IA antes de submeter
- Confirme que todo input referenciado em conditions está definido no bloco
inputs. - Confirme que toda condition referenciada em
scoreestá definida emconditions. - Verifique que o JSON é válido antes de aninhar no payload da API.
Use diagnósticos pra guiar a iteração
- Se uma condition dispara em mais de 70% dos candles, ela não é seletiva. Aperte o limiar.
- Se uma condition dispara em menos de 5% dos candles, considere se ela é rara o suficiente pra ser ruído.
- Foque em melhorar
expectancyR, não sówinRate. Um win rate de 40% com RR de 1:3 é expectância positiva.
Limitações de IA a reconhecer
- IA não tem acesso a dados de mercado ao vivo. Ela raciocina sobre dinâmicas de mercado usando conhecimento de treinamento, que pode estar desatualizado ou errado.
- Estratégias geradas por IA podem conter erros lógicos sutis (referências indefinidas, inputs circulares). Sempre valide.
- IA não consegue prever quais estratégias serão lucrativas. Ela só consegue gerar e formalizar hipóteses.