PageRenderTime 48ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/xchange-enigma/src/main/java/org/knowm/xchange/enigma/EnigmaAdapters.java

http://github.com/timmolter/XChange
Java | 165 lines | 142 code | 23 blank | 0 comment | 5 complexity | 6f6d82614356ea4b3c650ba35cae4035 MD5 | raw file
  1. package org.knowm.xchange.enigma;
  2. import static org.knowm.xchange.utils.jackson.CurrencyPairDeserializer.getCurrencyPairFromString;
  3. import java.math.BigDecimal;
  4. import java.text.MessageFormat;
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. import java.util.Collections;
  8. import java.util.List;
  9. import java.util.stream.Collectors;
  10. import org.knowm.xchange.currency.Currency;
  11. import org.knowm.xchange.currency.CurrencyPair;
  12. import org.knowm.xchange.dto.Order;
  13. import org.knowm.xchange.dto.account.AccountInfo;
  14. import org.knowm.xchange.dto.account.Balance;
  15. import org.knowm.xchange.dto.account.Wallet;
  16. import org.knowm.xchange.dto.marketdata.OrderBook;
  17. import org.knowm.xchange.dto.marketdata.Ticker;
  18. import org.knowm.xchange.dto.marketdata.Trade;
  19. import org.knowm.xchange.dto.marketdata.Trades;
  20. import org.knowm.xchange.dto.trade.LimitOrder;
  21. import org.knowm.xchange.dto.trade.OpenOrders;
  22. import org.knowm.xchange.enigma.dto.account.EnigmaBalance;
  23. import org.knowm.xchange.enigma.dto.marketdata.EnigmaOpenOrders;
  24. import org.knowm.xchange.enigma.dto.marketdata.EnigmaOrderBook;
  25. import org.knowm.xchange.enigma.dto.marketdata.EnigmaTicker;
  26. import org.knowm.xchange.enigma.dto.marketdata.EnigmaTransaction;
  27. import org.knowm.xchange.enigma.dto.trade.EnigmaExecutedQuote;
  28. import org.knowm.xchange.enigma.dto.trade.EnigmaOrderSubmission;
  29. public final class EnigmaAdapters {
  30. private EnigmaAdapters() {}
  31. public static AccountInfo adaptAccountInfo(EnigmaBalance enigmaBalance, String userName) {
  32. List<Balance> balances =
  33. enigmaBalance.getBalances().entrySet().stream()
  34. .map(
  35. balanceEntry ->
  36. new Balance(
  37. Currency.getInstance(balanceEntry.getKey().toUpperCase()),
  38. balanceEntry.getValue()))
  39. .collect(Collectors.toList());
  40. return new AccountInfo(userName, Wallet.Builder.from(balances).build());
  41. }
  42. public static Trade adaptTrade(EnigmaExecutedQuote enigmaTrade) {
  43. return new Trade.Builder()
  44. .currencyPair(getCurrencyPairFromString(enigmaTrade.getProductName()))
  45. .price(enigmaTrade.getPrice())
  46. .originalAmount(enigmaTrade.getQuantity())
  47. .timestamp(enigmaTrade.getCreatedAt())
  48. .type(enigmaTrade.getSide().equals("sell") ? Order.OrderType.ASK : Order.OrderType.BID)
  49. .build();
  50. }
  51. public static Trade adaptTrade(EnigmaOrderSubmission enigmaTrade) {
  52. return new Trade.Builder()
  53. .id(String.valueOf(enigmaTrade.getId()))
  54. .currencyPair(getCurrencyPairFromString(enigmaTrade.getProductName()))
  55. .price(enigmaTrade.getPrice())
  56. .originalAmount(enigmaTrade.getQuantity())
  57. .timestamp(enigmaTrade.getSent())
  58. .type(enigmaTrade.getSide().equals("sell") ? Order.OrderType.ASK : Order.OrderType.BID)
  59. .build();
  60. }
  61. public static Trades adaptTrades(List<Trade> trades) {
  62. return new Trades(trades);
  63. }
  64. public static Trades adaptTrades(EnigmaTransaction[] transactions, CurrencyPair currencyPair) {
  65. return new Trades(
  66. Arrays.stream(transactions)
  67. .filter(
  68. enigmaTransaction ->
  69. enigmaTransaction
  70. .getProductName()
  71. .equals(currencyPair.toString().replace("/", "-")))
  72. .map(
  73. enigmaTransaction ->
  74. new Trade.Builder()
  75. .id(String.valueOf(enigmaTransaction.getOrderId()))
  76. .currencyPair(currencyPair)
  77. .price(enigmaTransaction.getPrice())
  78. .originalAmount(enigmaTransaction.getQuantity())
  79. .timestamp(enigmaTransaction.getSentAt())
  80. .type(
  81. enigmaTransaction.getSide().equals("sell")
  82. ? Order.OrderType.ASK
  83. : Order.OrderType.BID)
  84. .build())
  85. .collect(Collectors.toList()));
  86. }
  87. public static Ticker adaptTicker(EnigmaTicker enigmaTicker, CurrencyPair currencyPair) {
  88. BigDecimal open = enigmaTicker.getOpen();
  89. BigDecimal last = enigmaTicker.getLast();
  90. BigDecimal bid = enigmaTicker.getBid();
  91. BigDecimal ask = enigmaTicker.getAsk();
  92. BigDecimal bidSize = enigmaTicker.getBidQty();
  93. BigDecimal askSize = enigmaTicker.getAskQty();
  94. return new Ticker.Builder()
  95. .currencyPair(currencyPair)
  96. .open(open)
  97. .last(last)
  98. .bid(bid)
  99. .ask(ask)
  100. .bidSize(bidSize)
  101. .askSize(askSize)
  102. .build();
  103. }
  104. public static OrderBook adaptOrderBook(
  105. EnigmaOrderBook enigmaOrderBook, CurrencyPair currencyPair) {
  106. List<LimitOrder> asks =
  107. createOrders(currencyPair, Order.OrderType.ASK, enigmaOrderBook.getAsks());
  108. List<LimitOrder> bids =
  109. createOrders(currencyPair, Order.OrderType.BID, enigmaOrderBook.getBids());
  110. return new OrderBook(enigmaOrderBook.getTimestamp(), asks, bids);
  111. }
  112. public static OpenOrders adaptOpenOrders(EnigmaOpenOrders baseResponse) {
  113. if (baseResponse.isResult()) {
  114. List<LimitOrder> asks =
  115. createOrders(CurrencyPair.BTC_UAH, Order.OrderType.ASK, baseResponse.getAsks());
  116. asks.addAll(createOrders(CurrencyPair.BTC_UAH, Order.OrderType.BID, baseResponse.getBids()));
  117. return new OpenOrders(asks);
  118. } else {
  119. return new OpenOrders(Collections.emptyList());
  120. }
  121. }
  122. public static List<LimitOrder> createOrders(
  123. CurrencyPair currencyPair, Order.OrderType orderType, List<List<BigDecimal>> orders) {
  124. List<LimitOrder> limitOrders = new ArrayList<>();
  125. for (List<BigDecimal> ask : orders) {
  126. checkArgument(
  127. ask.size() == 2, "Expected a pair (price, amount) but got {0} elements.", ask.size());
  128. limitOrders.add(createOrder(currencyPair, ask, orderType));
  129. }
  130. return limitOrders;
  131. }
  132. public static LimitOrder createOrder(
  133. CurrencyPair currencyPair, List<BigDecimal> priceAndAmount, Order.OrderType orderType) {
  134. return new LimitOrder(
  135. orderType, priceAndAmount.get(1), currencyPair, "", null, priceAndAmount.get(0));
  136. }
  137. public static void checkArgument(boolean argument, String msgPattern, Object... msgArgs) {
  138. if (!argument) {
  139. throw new IllegalArgumentException(MessageFormat.format(msgPattern, msgArgs));
  140. }
  141. }
  142. }