Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

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();
        }
    }
}