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

org.knowm.xchange.yobit.service.YoBitTradeServiceRaw Maven / Gradle / Ivy

package org.knowm.xchange.yobit.service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.knowm.xchange.currency.CurrencyPair;
import org.knowm.xchange.dto.Order;
import org.knowm.xchange.dto.trade.LimitOrder;
import org.knowm.xchange.dto.trade.OpenOrders;
import org.knowm.xchange.exceptions.ExchangeException;
import org.knowm.xchange.exceptions.NotYetImplementedForExchangeException;
import org.knowm.xchange.service.trade.TradeService;
import org.knowm.xchange.service.trade.params.CancelOrderByIdParams;
import org.knowm.xchange.service.trade.params.orders.OpenOrdersParamCurrencyPair;
import org.knowm.xchange.yobit.YoBit;
import org.knowm.xchange.yobit.YoBitAdapters;
import org.knowm.xchange.yobit.YoBitExchange;
import org.knowm.xchange.yobit.dto.BaseYoBitResponse;

public abstract class YoBitTradeServiceRaw extends YoBitBaseService implements TradeService {

  public YoBitTradeServiceRaw(YoBitExchange exchange) {
    super(YoBit.class, exchange);
  }

  @Override
  public OpenOrders getOpenOrders() throws IOException {
    throw new NotYetImplementedForExchangeException("Need to specify OpenOrdersParams");
  }

  public BaseYoBitResponse activeOrders(OpenOrdersParamCurrencyPair params) throws IOException {

    CurrencyPair currencyPair = params.getCurrencyPair();
    String market = YoBitAdapters.adaptCcyPairToUrlFormat(currencyPair);

    BaseYoBitResponse response =
        service.activeOrders(
            exchange.getExchangeSpecification().getApiKey(),
            signatureCreator,
            "ActiveOrders",
            exchange.getNonceFactory(),
            market);

    if (!response.success) throw new ExchangeException("failed to get open orders");

    return response;
  }

  public BaseYoBitResponse trade(LimitOrder limitOrder) throws IOException {

    String market = YoBitAdapters.adaptCcyPairToUrlFormat(limitOrder.getCurrencyPair());
    String direction = limitOrder.getType().equals(Order.OrderType.BID) ? "buy" : "sell";

    BaseYoBitResponse response =
        service.trade(
            exchange.getExchangeSpecification().getApiKey(),
            signatureCreator,
            "Trade",
            exchange.getNonceFactory(),
            market,
            direction,
            limitOrder.getLimitPrice(),
            limitOrder.getOriginalAmount());

    if (!response.success) throw new ExchangeException("failed to get place order");

    return response;
  }

  public BaseYoBitResponse cancelOrder(CancelOrderByIdParams params) throws IOException {

    return cancelOrderById(params.getOrderId());
  }

  protected BaseYoBitResponse cancelOrderById(String orderId) throws IOException {

    return service.cancelOrder(
        exchange.getExchangeSpecification().getApiKey(),
        signatureCreator,
        "CancelOrder",
        exchange.getNonceFactory(),
        Long.valueOf(orderId));
  }

  public BaseYoBitResponse tradeHistory(
      Integer count,
      Long offset,
      String market,
      Long fromTransactionId,
      Long endTransactionId,
      String order,
      Long fromTimestamp,
      Long toTimestamp)
      throws IOException {

    return service.tradeHistory(
        exchange.getExchangeSpecification().getApiKey(),
        signatureCreator,
        "TradeHistory",
        exchange.getNonceFactory(),
        offset,
        count,
        fromTransactionId,
        endTransactionId,
        order,
        fromTimestamp,
        toTimestamp,
        market);
  }

  @Override
  public Collection getOrder(String... orderIds) throws IOException {

    List orders = new ArrayList<>();

    for (String orderId : orderIds) {
      Long id = Long.valueOf(orderId);

      BaseYoBitResponse response =
          service.orderInfo(
              exchange.getExchangeSpecification().getApiKey(),
              signatureCreator,
              "OrderInfo",
              exchange.getNonceFactory(),
              id);

      if (response.returnData != null) {
        Map map = (Map) response.returnData.get(orderId);
        Order order = YoBitAdapters.adaptOrder(orderId, map);

        orders.add(order);
      }
    }

    return orders;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy