package br.com.kronus.binance.testes;
import java.math.BigDecimal;
import br.com.kronus.binance.futures.ClienteHttpFuturosBinance;
import br.com.kronus.binance.futures.ConfiguracaoFuturosBinance;
import br.com.kronus.binance.futures.DirecaoOrdem;
import br.com.kronus.binance.futures.RequisicaoOrdemBracket;
import br.com.kronus.binance.futures.ServicoMercadoFuturosBinance;
import br.com.kronus.binance.futures.ServicoOrdensFuturosBinance;
import br.com.kronus.binance.futures.tipos.TipoOrdem;
public class TesteOrdemBracketMain
{
public static void main
(String[] args
) {
try {
ConfiguracaoFuturosBinance config =
ConfiguracaoFuturosBinance.
aPartirDeProperties("futuros-binance.properties");
ClienteHttpFuturosBinance cliente =
new ClienteHttpFuturosBinance
(config
);
cliente.
sincronizarHorarioServidor();
ServicoMercadoFuturosBinance servicoMercado =
new ServicoMercadoFuturosBinance
(cliente
);
ServicoOrdensFuturosBinance servicoOrdens =
new ServicoOrdensFuturosBinance
(cliente
);
String simbolo =
"BTCUSDT";
// 1) Descobrir o mark price atual
BigDecimal precoMarca = servicoMercado.
buscarPrecoMarca(simbolo
);
System.
out.
println("Preço de marca atual de " + simbolo +
" = " + precoMarca
);
// 2) Definir quantidade garantindo notional >= 100 USDT
// notional = markPrice * qty
BigDecimal quantidade =
new BigDecimal("0.002");
BigDecimal notional = precoMarca.
multiply(quantidade
);
System.
out.
println("Notional da ordem = " + notional
);
if (notional.
compareTo(new BigDecimal("100")) < 0) {
// se ficar menor que 100, ajusta a qty
BigDecimal qtdMin =
new BigDecimal("100")
.
divide(precoMarca,
6,
BigDecimal.
ROUND_UP);
quantidade = qtdMin
;
notional = precoMarca.
multiply(quantidade
);
System.
out.
println("Ajustando quantidade para " + quantidade +
" (notional=" + notional +
")");
}
// 3) Definir stop e alvo RELATIVOS ao preço atual (exemplo: -1% e +1%)
// Arredonda para 2 casas (ajusta conforme o tickSize do símbolo depois)
BigDecimal stopLoss = precoMarca.
multiply(new BigDecimal("0.99"))
.
setScale(2,
BigDecimal.
ROUND_HALF_UP);
BigDecimal takeProfit = precoMarca.
multiply(new BigDecimal("1.01"))
.
setScale(2,
BigDecimal.
ROUND_HALF_UP);
System.
out.
println("StopLoss = " + stopLoss +
" | TakeProfit = " + takeProfit
);
// 4) Montar o bracket: LONG (BUY)
RequisicaoOrdemBracket bracket =
new RequisicaoOrdemBracket
()
.
setSimbolo(simbolo
)
.
setDirecao(DirecaoOrdem.
COMPRA)
.
setQuantidade(quantidade
)
.
setTipoEntrada(TipoOrdem.
MERCADO)
.
setStopLoss(stopLoss
)
.
setTakeProfit(takeProfit
)
.
setTipoAcionamento("MARK_PRICE");
// 5) Enviar bracket
servicoOrdens.
enviarOrdemBracket(bracket
);
System.
out.
println("Ordem bracket enviada.");
} catch (Exception e
) {
System.
err.
println("ERRO EM TesteOrdemBracketMain:");
e.
printStackTrace();
}
}
}