Algos

Gradiente Linear

Estratégia de grade de uma perna. Posta number_of_entrances ordens de entrada começando em entrance_price e avançando por increment_price_step_entrance. Cada entrada executada encadeia uma ordem de stop-gain a increment_price_stop_gain ticks além da entrada.

Quando usar

  • Você quer entrar ou sair de uma posição em diferentes níveis de preço.
  • Tem uma visão sobre uma faixa de preço, mas não um ponto exato de entrada.
  • Prefere comportamento de reversão à média a um único fill.

Início rápido

from investflex import AsyncInvestflexClient
from investflex.models.algos import GradLinear
from investflex.models.common import SelectStopByPrice, Side

g = GradLinear(
    name="winq-grid",
    init_time="09:00:00",
    end_time="17:00:00",
    # grade de entrada
    order_quantity=1,
    entrance_price=4000.0,
    increment_price_step_entrance=20.0,
    number_of_entrances=10,
    increment_price_stop_gain=20.0,
    number_of_min_price_increments_to_start=5,
    # start-when-cross
    use_start_when_cross="N",
    # stop-by-price
    select_stop_by_price1=SelectStopByPrice.MANUAL,
    stop_by_price1=3000.0,
    # stops financeiros
    stop_loss_finance=100.0,
    use_stop_gain_global_finance="N",
    send_stop_loss_on_end="Y",
    # preservação
    use_preservation="Y",
    preservation_start_trigger=80.0,
    preservation_step=10.0,
    preservation_percentual=20.0,
    # perna (sem quantidade aqui)
    symbol="WINQ19",
    side=Side.BUY,
    account="YOUR_ACCOUNT",
)

async with AsyncInvestflexClient.from_env() as client:
    handle = await client.algos.create(g)
    print(handle.clord_id, handle.status.name)

Parâmetros

Estratégia — grade de entrada

Campo Tipo Obrigatório Editável Observações
order_quantity int sim sim Quantidade por ordem de entrada.
entrance_price número sim sim Preço da primeira entrada.
increment_price_step_entrance número sim sim Passo em ticks entre entradas consecutivas.
number_of_entrances int sim sim Quantas entradas a grade posta.
increment_price_stop_gain número sim sim Distância em ticks da entrada ao seu stop-gain.
number_of_min_price_increments_to_start int não não Ticks de confirmação antes de armar a grade.

Estratégia — gatilho start-when-cross

Campo Tipo Obrigatório Editável Observações
use_start_when_cross "Y" / "N" não não Esperar start_when_cross ser tocado antes de armar.
start_when_cross número condicional sim Preço-gatilho; obrigatório quando use_start_when_cross="Y".

Estratégia — níveis stop-by-price

Dois níveis independentes que desligam a grade ao serem tocados.

Campo Tipo Obrigatório Editável Observações
select_stop_by_price1 SelectStopByPrice não não SelectStopByPrice.DISABLED, SelectStopByPrice.MANUAL (para no cruzamento para cima), SelectStopByPrice.AUTOMATIC (para no cruzamento para baixo).
stop_by_price1 número condicional sim Preço para o nível 1.
select_stop_by_price2 SelectStopByPrice não não Mesmos modos, para o nível 2.
stop_by_price2 número condicional sim Preço para o nível 2.

Estratégia — stops financeiros

Campo Tipo Obrigatório Editável Observações
stop_loss_finance número não sim Limite de perda em BRL.
use_stop_gain_global_finance "Y" / "N" não sim Habilita stop-gain global.
stop_gain_global_finance número condicional sim Alvo de ganho em BRL quando habilitado.
send_stop_loss_on_end "Y" / "N" não sim Enviar stop-loss ao final da janela.

Estratégia — preservação (lock-in de ganhos)

Campo Tipo Obrigatório Editável Observações
use_preservation "Y" / "N" não não Habilita preservação dinâmica.
preservation_start_trigger número condicional sim Lucro em BRL a partir do qual a preservação arma.
preservation_step número condicional sim Passo em BRL entre reavaliações.
preservation_percentual número condicional sim % do lucro a preservar.

Perna

Perna única, passada de forma plana. quantity não é usado aqui — o tamanho por entrada é order_quantity na estratégia.

Campo Tipo Obrigatório Editável Observações
symbol str sim não Código do instrumento.
side Side.BUY / Side.SELL sim não
account str sim não Conta da corretora.
security_exchange str não não Padrão XBSP.

Editando um Gradiente Linear em execução

await client.algos.edit(
    handle.clord_id,
    EntrancePrice=5000,
    IncrementPriceStepEntrance=20,
    NumberOfEntrances=10,
    OrderQuantity=1,
    StopLossFinance=100,
    UseStopGainGlobalFinance="Y",
    StopGainGlobalFinance=100,
    PreservationStartTrigger=80,
    PreservationStep=10,
    PreservationPercentual=20,
)

Comandos de ciclo de vida

await client.algos.commands.cancel(handle.clord_id)
await client.algos.commands.suspend(handle.clord_id)
await client.algos.commands.resume(handle.clord_id)

Notas de comportamento

  • A grade é estática: os preços são calculados uma única vez a partir de entrance_price e nunca são recentrados. Use GradDynamic se quiser uma grade que acompanha o mercado.
  • Cada entrada executada recebe imediatamente uma ordem pareada de stop-gain em entrance + increment_price_stop_gain ticks (o sinal depende do side).
  • select_stop_by_price1/2 oferecem dois gatilhos independentes para parar a grade — úteis para níveis globais de suporte/resistência.
  • A preservação só entra em ação quando preservation_start_trigger BRL de lucro acumulado é atingido; a partir daí o algo desloca o stop protetor em incrementos de preservation_step, travando preservation_percentual do ganho realizado.