Algos

Gradiente Dinâmico

Estratégia de grade de uma perna que se adapta ao movimento do mercado. Todos os parâmetros do Gradiente Linear se aplicam, mais um bloco de feedback ("retroalimentação") que recalibra as entradas para acompanhar o preço atual.

Quando usar

  • Você quer execução em escada que acompanhe um mercado em tendência, em vez de lutar contra ele.
  • Está fornecendo liquidez e precisa que a escada acompanhe o mid em tempo real.
  • Espera que o mercado percorra a sua faixa ao longo da sessão e quer cobertura contínua.

Início rápido

from investflex import AsyncInvestflexClient
from investflex.models.algos import GradDynamic
from investflex.models.common import RetroalimentType, SelectStopByPrice, Side

g = GradDynamic(
    name="winq-dyn-grid",
    init_time="09:00:00",
    end_time="17:00:00",
    # grade de entrada (igual ao grdlin)
    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,
    use_start_when_cross="N",
    select_stop_by_price1=SelectStopByPrice.AUTOMATIC,
    stop_by_price1=3000.0,
    select_stop_by_price2=SelectStopByPrice.MANUAL,
    stop_by_price2=6000.0,
    stop_loss_finance=100.0,
    use_stop_gain_global_finance="Y",
    stop_gain_global_finance=100.0,
    send_stop_loss_on_end="Y",
    use_preservation="Y",
    preservation_start_trigger=80.0,
    preservation_step=10.0,
    preservation_percentual=20.0,
    # bloco dinâmico
    use_retroaliment="Y",
    retroaliment_time_window=60,
    retroaliment_type=RetroalimentType.STDDEV_COUNT,
    retroaliment_param1=1.0,
    maximum_zero_time_window=60,
    zerar_stop_loss="Y",
    # 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

Todos os parâmetros do Gradiente Linear se aplicam. Campos adicionais:

Estratégia — bloco dinâmico

Campo Tipo Obrigatório Editável Observações
use_retroaliment "Y" / "N" não não Habilita o controle de feedback que reancora a grade.
retroaliment_time_window int condicional sim Segundos de histórico de preço usados pelo algoritmo de feedback.
retroaliment_type RetroalimentType condicional sim Algoritmo de feedback: RetroalimentType.STDDEV_COUNT (padrão), PCT_HIST_MINMAX, VALUE_HIST_MINMAX, PCT_LAST_TRADE, VALUE_LAST_TRADE.
retroaliment_param1 número condicional sim Parâmetro de ajuste específico do algoritmo.
maximum_zero_time_window int não sim Segundos de preço estagnado tolerados antes de forçar a grade a zerar a posição.
zerar_stop_loss "Y" / "N" não não Zera a posição residual quando um stop-loss dispara.

Editando um Gradiente Dinâmico em execução

await client.algos.edit(
    handle.clord_id,
    EntrancePrice=4000,
    NumberOfEntrances=10,
    OrderQuantity=1,
    MaximumZeroTimeWindow=60,
    RetroalimentParam1=1,
    RetroalimentTimeWindow=60,
    RetroalimentType=1,
    StopLossFinance=100,
    StopGainGlobalFinance=100,
)

Além do conjunto editável do grdlin, MaximumZeroTimeWindow, RetroalimentParam1, RetroalimentTimeWindow e RetroalimentType também são editáveis.

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

  • Com use_retroaliment="Y" a engine reancora a grade de entrada conforme o preço de referência se desloca, usando os últimos retroaliment_time_window segundos de negócios.
  • maximum_zero_time_window é uma proteção: se o mercado fica silencioso, o algo zera a posição aberta para evitar exposição estagnada.
  • zerar_stop_loss="Y" garante que qualquer quantidade residual seja fechada quando um stop-loss dispara (senão o residual ficaria passivo no livro).
  • Os demais comportamentos seguem o Gradiente Linear.