Algos

Scalper

Loop automatizado de scalping intradiário. O algoritmo entra repetidamente a uma distância fixa do último negócio, encerra cada operação com um pequeno ganho ou perda, pausa e volta a entrar — até atingir um limite de ganho/perda da sessão ou a quantidade total.

Quando usar

  • Você busca muitos ganhos pequenos em vez de um único movimento grande.
  • Quer lógica de entrada e saída pré-definida rodando automaticamente em períodos curtos.
  • Precisa de um teto rígido para quanto a sessão pode perder ou negociar.

Início rápido

from investflex import AsyncInvestflexClient
from investflex.models.algos import Scalper
from investflex.models.common import Side

sc = Scalper(
    name="win-scalper",
    init_time="09:05:00",
    end_time="17:30:00",
    # por operação
    distance_last=10,
    gain_trade=30,
    loss_trade=20,
    restart_time=15,
    # limites da sessão
    stop_gain=600,
    stop_loss=300,
    total_quantity=40,
    # perna (clip de cada operação)
    symbol="WINQ26",
    side=Side.BUY,
    quantity=2,
    account="SUA_CONTA",
)

async with AsyncInvestflexClient.from_env() as client:
    handle = await client.algos.create(sc)
    print(handle.clord_id, handle.status.name)
import { InvestflexClient, Scalper, Side } from "@investflex/sdk";

const sc = new Scalper({
  name: "win-scalper",
  initTime: "09:05:00",
  endTime: "17:30:00",
  // por operação
  distanceLast: 10,
  gainTrade: 30,
  lossTrade: 20,
  restartTime: 15,
  // limites da sessão
  stopGain: 600,
  stopLoss: 300,
  totalQuantity: 40,
  // perna (clip de cada operação)
  symbol: "WINQ26",
  side: Side.BUY,
  quantity: 2,
  account: "SUA_CONTA",
});

const client = InvestflexClient.fromEnv();
const handle = await client.algos.create(sc);
console.log(handle.clOrdId, handle.status);

await client.close();

Parâmetros

customizados são editáveis com o algoritmo em execução.

Estratégia — por operação

Campo Tipo Obrigatório Editável Observações
distance_last número sim sim Distância de entrada em relação ao último preço negociado.
gain_trade número sim sim Take-profit de cada operação.
loss_trade número sim sim Stop-loss de cada operação.
restart_time int sim sim Pausa após uma operação antes da próxima entrada (≥ 0).

Estratégia — limites da sessão

Campo Tipo Obrigatório Editável Observações
stop_gain número não sim Ganho acumulado que encerra o algoritmo.
stop_loss número sim sim Perda acumulada que encerra o algoritmo.
total_quantity int sim sim Quantidade máxima negociada na sessão (> 0).

Perna

Perna única, passada de forma plana.

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 Direção de cada entrada.
quantity int sim sim Clip de cada operação (> 0).
account str sim não Conta na corretora.
security_exchange str não não Default XBSP.

Editando um Scalper em execução

await client.algos.edit(
    handle.clord_id,
    GainTrade=35,
    LossTrade=15,
    StopLoss=250,
)
await client.algos.edit(
  handle.clOrdId,
  { GainTrade: 35, LossTrade: 15, StopLoss: 250 },
  { strategyCode: "scalper" },
);

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)
await client.algos.commands.close_position(handle.clord_id)
await client.commands.cancel(handle.clOrdId);
await client.commands.suspend(handle.clOrdId);
await client.commands.resume(handle.clOrdId);
await client.commands.closePosition(handle.clOrdId);

Notas de comportamento

  • O schema não publica tooltips dos campos; os significados acima seguem os nomes dos parâmetros e o modelo de scalping do engine. Confira as release notes do engine para as unidades exatas de distance_last, gain_trade e loss_trade (ticks vs. preço) no seu mercado.
  • stop_gain é opcional: omita para deixar o algoritmo rodar até stop_loss, total_quantity ou end_time.