Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
795 blopes 1
package br.com.kronus.binance.testes;
2
 
3
import java.math.BigDecimal;
4
 
5
import br.com.kronus.binance.futures.ClienteHttpFuturosBinance;
6
import br.com.kronus.binance.futures.ConfiguracaoFuturosBinance;
7
import br.com.kronus.binance.futures.DirecaoOrdem;
8
import br.com.kronus.binance.futures.RequisicaoOrdemBracket;
9
import br.com.kronus.binance.futures.ServicoMercadoFuturosBinance;
10
import br.com.kronus.binance.futures.ServicoOrdensFuturosBinance;
11
import br.com.kronus.binance.futures.tipos.TipoOrdem;
12
 
13
public class TesteOrdemBracketMain {
14
 
15
    public static void main(String[] args) {
16
        try {
17
            ConfiguracaoFuturosBinance config =
18
                    ConfiguracaoFuturosBinance.aPartirDeProperties("futuros-binance.properties");
19
 
20
            ClienteHttpFuturosBinance cliente = new ClienteHttpFuturosBinance(config);
21
            cliente.sincronizarHorarioServidor();
22
 
23
            ServicoMercadoFuturosBinance servicoMercado =
24
                    new ServicoMercadoFuturosBinance(cliente);
25
 
26
            ServicoOrdensFuturosBinance servicoOrdens =
27
                    new ServicoOrdensFuturosBinance(cliente);
28
 
29
            String simbolo = "BTCUSDT";
30
 
31
            // 1) Descobrir o mark price atual
32
            BigDecimal precoMarca = servicoMercado.buscarPrecoMarca(simbolo);
33
            System.out.println("Preço de marca atual de " + simbolo + " = " + precoMarca);
34
 
35
            // 2) Definir quantidade garantindo notional >= 100 USDT
36
            // notional = markPrice * qty
37
            BigDecimal quantidade = new BigDecimal("0.002");
38
            BigDecimal notional = precoMarca.multiply(quantidade);
39
            System.out.println("Notional da ordem = " + notional);
40
 
41
            if (notional.compareTo(new BigDecimal("100")) < 0) {
42
                // se ficar menor que 100, ajusta a qty
43
                BigDecimal qtdMin = new BigDecimal("100")
44
                        .divide(precoMarca, 6, BigDecimal.ROUND_UP);
45
                quantidade = qtdMin;
46
                notional = precoMarca.multiply(quantidade);
47
                System.out.println("Ajustando quantidade para " + quantidade + " (notional=" + notional + ")");
48
            }
49
 
50
            // 3) Definir stop e alvo RELATIVOS ao preço atual (exemplo: -1% e +1%)
51
            // Arredonda para 2 casas (ajusta conforme o tickSize do símbolo depois)
52
            BigDecimal stopLoss = precoMarca.multiply(new BigDecimal("0.99"))
53
                    .setScale(2, BigDecimal.ROUND_HALF_UP);
54
            BigDecimal takeProfit = precoMarca.multiply(new BigDecimal("1.01"))
55
                    .setScale(2, BigDecimal.ROUND_HALF_UP);
56
 
57
            System.out.println("StopLoss = " + stopLoss +
58
                    " | TakeProfit = " + takeProfit);
59
 
60
            // 4) Montar o bracket: LONG (BUY)
61
            RequisicaoOrdemBracket bracket = new RequisicaoOrdemBracket()
62
                    .setSimbolo(simbolo)
63
                    .setDirecao(DirecaoOrdem.COMPRA)
64
                    .setQuantidade(quantidade)
65
                    .setTipoEntrada(TipoOrdem.MERCADO)
66
                    .setStopLoss(stopLoss)
67
                    .setTakeProfit(takeProfit)
68
                    .setTipoAcionamento("MARK_PRICE");
69
 
70
            // 5) Enviar bracket
71
            servicoOrdens.enviarOrdemBracket(bracket);
72
 
73
            System.out.println("Ordem bracket enviada.");
74
 
75
        } catch (Exception e) {
76
            System.err.println("ERRO EM TesteOrdemBracketMain:");
77
            e.printStackTrace();
78
        }
79
    }
80
}