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
camelCasee enums como string (por exemplo,"BUY"e"SELL"). - Campos de horário usam o formato
hh:mm:ssno fuso BRT, comostartTimeeendTime.
StrategyType (parâmetro de path)
1=DiDiff22=DiDiff33=DiDiff44=DiFra25=DiFra36=DiFra47=DiFra3EdsDiff8=DiFra4EdsDiff9=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
| Campo | Tipo | Obrigatório | Default | Descrição | Aplica a |
|---|---|---|---|---|---|
id | int | Não | auto quando 0 | Identificação da estratégia. Reenviar com o mesmo id atualiza a estratégia existente | Todos |
memo | string | null | Não | null | Texto adicional para o memo FIX, enviado no formato {username}:{id}:{memo} | Todos |
validateFatFinger | bool | null | Não | true | Validação de proteção que rejeita o request se o preço alvo já estiver dentro do mercado | Todos |
startTime | string | null | Não | 00:00:00 | Horário de início do apregoamento (BRT) | Todos |
endTime | string | null | Não | 00:00:00 | Horário de término, após o qual a estratégia é cancelada (BRT) | Todos |
instruments | array | Sim | - | Lista de instrumentos (pernas) da estratégia | Todos |
Específicos de spread (Di*, Spread)
| Campo | Tipo | Obrigatório | Default | Descrição | Aplica a |
|---|---|---|---|---|---|
spread | number | Sim | - | Preço alvo de spread da estratégia | Di*, Spread |
slippageMaxContracts | int | null | Não | 0 | Quantidade máxima de contratos encilhados (executados parcialmente entre pernas) antes de pausar o apregoamento | Di*, Spread |
slippageWaitSeconds | int | null | Não | 0 | Tempo de espera em segundos antes de ativar slippageMaxTicks após encilhamento | Di*, Spread |
slippageMaxTicks | int | null | Não | 0 | Variação máxima de preço em ticks para dentro do mercado ao resolver encilhamento | Di*, 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.
| Campo | Tipo | Obrigatório | Default | Descrição | Aplica a |
|---|---|---|---|---|---|
isEdsEnabled | bool | null | Não | true | Habilita a execução via EDS | DiDiff2, DiFra2 |
edsOrderQuantity | ulong | null | Não | 0 | Quantidade fixa de apregoamento para ordens EDS | DiDiff2, 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 instrumentosDi*3: 3 instrumentosDi*4: 4 instrumentosDiFra3EdsDiff: 2 instrumentos (pernas EDS)DiFra4EdsDiff: 3 instrumentos (pernas EDS)Spread: 2 ou mais instrumentos
Parâmetros de instrumento
RequestInstrument (base, comum a todos)
| Campo | Tipo | Obrigatório | Default | Descrição | Aplica a |
|---|---|---|---|---|---|
account | uint | null | Não | null | Conta para envio da ordem FIX. Se ausente, o sistema usa a conta padrão da configuração | Todos |
symbol | string | Sim | - | Ticker do instrumento | Todos |
side | "BUY" | "SELL" | Sim | - | Direção da perna (compra ou venda) | Todos |
quantity | ulong | Sim | - | Quantidade alvo da perna | Todos |
maxQuantity | ulong | Não | sem default implícito | Limite máximo de quantidade para apregoamento nessa perna | Todos |
maxPriceIncrements | int | Não | 3 | Distância máxima em ticks a partir do preço de mercado para continuar apregoando | Todos |
maxSimultaneousOrders | int | Não | 5 | Máximo de ordens simultâneas no book para manter prioridade de fila | Todos |
SpreadRequestInstrument (para Di* e Spread)
Estende RequestInstrument com campos de controle de apregoamento.
| Campo | Tipo | Obrigatório | Default | Descrição | Aplica a |
|---|---|---|---|---|---|
isPlacementEnabled | bool | null | Não | true | Habilita o apregoamento dessa perna | Di*, Spread |
burstQuantity | ulong | null | Não | 0 | Eleva a quantidade máxima de apregoamento quando o spread entra no mercado | Di*, Spread |
placementPriceLevels | int | Não | 3 | Níveis adicionais de preço onde a estratégia mantém ordens para garantir prioridade | Di*, Spread |
PriceFactorSpreadRequestInstrument (apenas Spread)
Estende SpreadRequestInstrument com o fator de preço usado no cálculo do spread.
| Campo | Tipo | Obrigatório | Default | Descrição | Aplica a |
|---|---|---|---|---|---|
priceFactor | number | Sim | - | 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)
| Campo | Tipo | Obrigatorio | Default | Descricao | Regra |
|---|---|---|---|---|---|
id | int | Sim | - | Id da estrategia alvo | >= 1 |
symbolType | "All" | "Fixed" | Nao | "Fixed" | Escopo de instrumento | Se "Fixed", informar symbol |
symbol | string | null | Condicional | null | Instrumento da ordem manual | Obrigatorio quando symbolType="Fixed" |
priceType | "Market" | "Limit" | Nao | "Limit" | Tipo de preco | Se "Limit", informar price |
price | number | null | Condicional | null | Preco da ordem | Obrigatorio quando priceType="Limit" |
quantityType | "All" | "Fixed" | Nao | "Fixed" | Escopo de quantidade | Se "Fixed", informar quantity |
quantity | ulong | null | Condicional | null | Quantidade da ordem | Obrigatorio e != 0 quando quantityType="Fixed" |
trancheType | "All" | "Fixed" | Nao | "Fixed" | Escopo de tranche | Se "Fixed", informar tranchePosition ou trancheId |
tranchePosition | int | null | Condicional | null | Posicao da tranche | Com trancheType="Fixed", preencher um entre tranchePosition e trancheId |
trancheId | int | null | Condicional | null | Id da tranche | Com trancheType="Fixed", preencher um entre tranchePosition e trancheId |