Estratégias Disponíveis

Schemas de Request de Estratégia

Esta seção descreve os formatos de request (corpo JSON) aceitos pela API de estratégia do AlgoServer. Os dois endpoints que consomem esses schemas são:

  • Criar ou atualizar estratégia: POST /api/strategy/{strategyType}
  • Ordem manual: POST /api/strategy

Para a lista completa de endpoints, consulte a seção API Endpoints.

Convenções gerais

  • O JSON aceita campos em camelCase e enums como string (por exemplo, "BUY" e "SELL").
  • Campos de horário usam o formato hh:mm:ss no fuso BRT, como startTime e endTime.

StrategyType (parâmetro de path)

  • 1 = DiDiff2
  • 2 = DiDiff3
  • 3 = DiDiff4
  • 4 = DiFra2
  • 5 = DiFra3
  • 6 = DiFra4
  • 7 = DiFra3EdsDiff
  • 8 = DiFra4EdsDiff
  • 9 = Spread

Separação de parâmetros

O request é dividido em dois níveis:

  • Parâmetros de estratégia: campos globais que se aplicam à estratégia como um todo.
  • Parâmetros de instrumento: campos dentro de cada item do array instruments[], configurando cada perna individualmente.

Parâmetros de estratégia

Comuns a todos os tipos

CampoTipoObrigatórioDefaultDescriçãoAplica a
idintNãoauto quando 0Identificação da estratégia. Reenviar com o mesmo id atualiza a estratégia existenteTodos
memostring | nullNãonullTexto adicional para o memo FIX, enviado no formato {username}:{id}:{memo}Todos
validateFatFingerbool | nullNãotrueValidação de proteção que rejeita o request se o preço alvo já estiver dentro do mercadoTodos
startTimestring | nullNão00:00:00Horário de início do apregoamento (BRT)Todos
endTimestring | nullNão00:00:00Horário de término, após o qual a estratégia é cancelada (BRT)Todos
instrumentsarraySim-Lista de instrumentos (pernas) da estratégiaTodos

Específicos de spread (Di*, Spread)

CampoTipoObrigatórioDefaultDescriçãoAplica a
spreadnumberSim-Preço alvo de spread da estratégiaDi*, Spread
slippageMaxContractsint | nullNão0Quantidade máxima de contratos encilhados (executados parcialmente entre pernas) antes de pausar o apregoamentoDi*, Spread
slippageWaitSecondsint | nullNão0Tempo de espera em segundos antes de ativar slippageMaxTicks após encilhamentoDi*, Spread
slippageMaxTicksint | nullNão0Variação máxima de preço em ticks para dentro do mercado ao resolver encilhamentoDi*, Spread

Específicos de EDS (DiDiff2, DiFra2)

EDS (Execução Direta de Spread) permite que a estratégia execute o spread diretamente quando disponível, sem apregoar perna a perna.

CampoTipoObrigatórioDefaultDescriçãoAplica a
isEdsEnabledbool | nullNãotrueHabilita a execução via EDSDiDiff2, DiFra2
edsOrderQuantityulong | nullNão0Quantidade fixa de apregoamento para ordens EDSDiDiff2, DiFra2

Quantidade de instrumentos por tipo

Cada tipo de estratégia exige um número específico de instrumentos no array instruments[]:

  • Di*2: 2 instrumentos
  • Di*3: 3 instrumentos
  • Di*4: 4 instrumentos
  • DiFra3EdsDiff: 2 instrumentos (pernas EDS)
  • DiFra4EdsDiff: 3 instrumentos (pernas EDS)
  • Spread: 2 ou mais instrumentos

Parâmetros de instrumento

RequestInstrument (base, comum a todos)

CampoTipoObrigatórioDefaultDescriçãoAplica a
accountuint | nullNãonullConta para envio da ordem FIX. Se ausente, o sistema usa a conta padrão da configuraçãoTodos
symbolstringSim-Ticker do instrumentoTodos
side"BUY" | "SELL"Sim-Direção da perna (compra ou venda)Todos
quantityulongSim-Quantidade alvo da pernaTodos
maxQuantityulongNãosem default implícitoLimite máximo de quantidade para apregoamento nessa pernaTodos
maxPriceIncrementsintNão3Distância máxima em ticks a partir do preço de mercado para continuar apregoandoTodos
maxSimultaneousOrdersintNão5Máximo de ordens simultâneas no book para manter prioridade de filaTodos

SpreadRequestInstrument (para Di* e Spread)

Estende RequestInstrument com campos de controle de apregoamento.

CampoTipoObrigatórioDefaultDescriçãoAplica a
isPlacementEnabledbool | nullNãotrueHabilita o apregoamento dessa pernaDi*, Spread
burstQuantityulong | nullNão0Eleva a quantidade máxima de apregoamento quando o spread entra no mercadoDi*, Spread
placementPriceLevelsintNão3Níveis adicionais de preço onde a estratégia mantém ordens para garantir prioridadeDi*, Spread

PriceFactorSpreadRequestInstrument (apenas Spread)

Estende SpreadRequestInstrument com o fator de preço usado no cálculo do spread.

CampoTipoObrigatórioDefaultDescriçãoAplica a
priceFactornumberSim-Fator multiplicador do preço: spread = soma(preço_i × priceFactor_i)Spread

Exemplo de request (DiFra3EdsDiff)

{
  "instruments": [
    {
      "isPlacementEnabled": true,
      "burstQuantity": 50,
      "placementPriceLevels": 3,
      "account": 0,
      "symbol": "DIIF28F29",
      "side": "SELL",
      "quantity": 120,
      "maxQuantity": 30,
      "maxPriceIncrements": 3,
      "maxSimultaneousOrders": 5
    },
    {
      "isPlacementEnabled": true,
      "burstQuantity": 75,
      "placementPriceLevels": 3,
      "account": 0,
      "symbol": "DIIF29F30",
      "side": "BUY",
      "quantity": 210,
      "maxQuantity": 50,
      "maxPriceIncrements": 3,
      "maxSimultaneousOrders": 5
    }
  ],
  "spread": 0.25,
  "slippageMaxContracts": 20,
  "slippageWaitSeconds": 0,
  "slippageMaxTicks": 0,
  "validateFatFinger": true,
  "startTime": "09:00:00",
  "endTime": "18:00:00",
  "id": 3,
  "memo": null
}

ManualOrderRequest (POST /api/strategy)

CampoTipoObrigatorioDefaultDescricaoRegra
idintSim-Id da estrategia alvo>= 1
symbolType"All" | "Fixed"Nao"Fixed"Escopo de instrumentoSe "Fixed", informar symbol
symbolstring | nullCondicionalnullInstrumento da ordem manualObrigatorio quando symbolType="Fixed"
priceType"Market" | "Limit"Nao"Limit"Tipo de precoSe "Limit", informar price
pricenumber | nullCondicionalnullPreco da ordemObrigatorio quando priceType="Limit"
quantityType"All" | "Fixed"Nao"Fixed"Escopo de quantidadeSe "Fixed", informar quantity
quantityulong | nullCondicionalnullQuantidade da ordemObrigatorio e != 0 quando quantityType="Fixed"
trancheType"All" | "Fixed"Nao"Fixed"Escopo de trancheSe "Fixed", informar tranchePosition ou trancheId
tranchePositionint | nullCondicionalnullPosicao da trancheCom trancheType="Fixed", preencher um entre tranchePosition e trancheId
trancheIdint | nullCondicionalnullId da trancheCom trancheType="Fixed", preencher um entre tranchePosition e trancheId