
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