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 | } |