All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.bitrich.xchangestream.coinmate.CoinmateStreamingAdapter Maven / Gradle / Ivy

The newest version!
package info.bitrich.xchangestream.coinmate;

import info.bitrich.xchangestream.coinmate.dto.CoinmateWebSocketUserTrade;
import info.bitrich.xchangestream.coinmate.dto.CoinmateWebsocketOpenOrder;
import java.math.BigDecimal;
import java.sql.Date;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
import org.knowm.xchange.currency.CurrencyPair;
import org.knowm.xchange.dto.Order;
import org.knowm.xchange.dto.marketdata.Trades;
import org.knowm.xchange.dto.trade.LimitOrder;
import org.knowm.xchange.dto.trade.OpenOrders;
import org.knowm.xchange.dto.trade.UserTrade;
import org.knowm.xchange.dto.trade.UserTrades;

public class CoinmateStreamingAdapter {

  public static String getChannelPostfix(CurrencyPair currencyPair) {
    return currencyPair.base.toString().toUpperCase()
        + "_"
        + currencyPair.counter.toString().toUpperCase();
  }

  public static UserTrades adaptWebSocketUserTrades(
      List coinmateWebSocketUserTrades, CurrencyPair currencyPair) {
    List userTrades = new ArrayList<>();
    coinmateWebSocketUserTrades.forEach(
        (coinmateWebSocketUserTrade) -> {
          userTrades.add(
              new UserTrade.Builder()
                  .type(
                      (coinmateWebSocketUserTrade.getUserOrderType().equals("SELL"))
                          ? Order.OrderType.ASK
                          : Order.OrderType.BID)
                  .originalAmount(BigDecimal.valueOf(coinmateWebSocketUserTrade.getAmount()))
                  .currencyPair(currencyPair)
                  .price(BigDecimal.valueOf(coinmateWebSocketUserTrade.getPrice()))
                  .timestamp(
                      Date.from(Instant.ofEpochMilli(coinmateWebSocketUserTrade.getTimestamp())))
                  .id(coinmateWebSocketUserTrade.getTransactionId())
                  .orderId(
                      (coinmateWebSocketUserTrade.getUserOrderType().equals("SELL"))
                          ? coinmateWebSocketUserTrade.getSellOrderId()
                          : coinmateWebSocketUserTrade.getBuyOrderId())
                  .feeAmount(BigDecimal.valueOf(coinmateWebSocketUserTrade.getFee()))
                  .feeCurrency(currencyPair.counter)
                  .build());
        });
    return new UserTrades(userTrades, Trades.TradeSortType.SortByTimestamp);
  }

  public static OpenOrders adaptWebsocketOpenOrders(
      List coinmateWebsocketOpenOrders, CurrencyPair currencyPair) {
    List openOrders = new ArrayList<>();
    coinmateWebsocketOpenOrders.forEach(
        (coinmateWebsocketOpenOrder) -> {
          openOrders.add(
              new LimitOrder.Builder(
                      (coinmateWebsocketOpenOrder.getOrderType().contains("SELL"))
                          ? Order.OrderType.ASK
                          : Order.OrderType.BID,
                      currencyPair)
                  .originalAmount(BigDecimal.valueOf(coinmateWebsocketOpenOrder.getAmount()))
                  .cumulativeAmount(
                      BigDecimal.valueOf(coinmateWebsocketOpenOrder.getOriginalOrderSize()))
                  .id(coinmateWebsocketOpenOrder.getId())
                  .timestamp(
                      Date.from(Instant.ofEpochMilli(coinmateWebsocketOpenOrder.getTimestamp())))
                  .limitPrice(BigDecimal.valueOf(coinmateWebsocketOpenOrder.getPrice()))
                  .build());
        });
    return new OpenOrders(openOrders);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy