package org.knowm.xchange.huobi.service;
import org.knowm.xchange.Exchange;
import org.knowm.xchange.dto.Order;
import org.knowm.xchange.dto.trade.LimitOrder;
import org.knowm.xchange.dto.trade.MarketOrder;
import org.knowm.xchange.dto.trade.OpenOrders;
import org.knowm.xchange.dto.trade.UserTrades;
import org.knowm.xchange.exceptions.ExchangeException;
import org.knowm.xchange.exceptions.NotAvailableFromExchangeException;
import org.knowm.xchange.exceptions.NotYetImplementedForExchangeException;
import org.knowm.xchange.huobi.BitVcFutures;
import org.knowm.xchange.huobi.BitVcFuturesAdapter;
import org.knowm.xchange.huobi.FuturesContract;
import org.knowm.xchange.huobi.dto.trade.BitVcFuturesPlaceOrderResult;
import org.knowm.xchange.huobi.dto.trade.BitVcFuturesPositionByContract;
import org.knowm.xchange.service.trade.TradeService;
import org.knowm.xchange.service.trade.params.TradeHistoryParams;
import org.knowm.xchange.service.trade.params.orders.OpenOrdersParams;
import si.mazi.rescu.RestProxyFactory;
import java.io.IOException;
import java.util.Collection;
public class BitVcFuturesTradeService extends BitVcFuturesServiceRaw implements TradeService {
private final FuturesContract futuresContract;
private enum TradeTypes {
BUY(1, 1), SELL(1,2), CLOSE_BUY(2, 2), CLOSE_SELL(2, 1);
private int orderType;
private int tradeType;
TradeTypes(int orderType, int tradeType) {
this.orderType = orderType;
this.tradeType = tradeType;
}
public int getOrderType() {
return orderType;
}
public int getTradeType() {
return tradeType;
}
};
public BitVcFuturesTradeService(final Exchange exchange, final FuturesContract futuresContract) {
super(exchange);
this.futuresContract = futuresContract;
}
@Override
public OpenOrders getOpenOrders() throws ExchangeException, NotAvailableFromExchangeException, NotYetImplementedForExchangeException, IOException {
final BitVcFuturesPositionByContract positions = bitvc.positions(accessKey, 1, requestTimestamp(), digest);
return BitVcFuturesAdapter.adaptOpenOrders(positions);
}
@Override
public OpenOrders getOpenOrders(final OpenOrdersParams openOrdersParams) throws ExchangeException, NotAvailableFromExchangeException, NotYetImplementedForExchangeException, IOException {
return getOpenOrders();
}
@Override
public String placeMarketOrder(final MarketOrder marketOrder) throws ExchangeException, NotAvailableFromExchangeException, NotYetImplementedForExchangeException, IOException {
return null;
}
@Override
public String placeLimitOrder(final LimitOrder limitOrder) throws ExchangeException, NotAvailableFromExchangeException, NotYetImplementedForExchangeException, IOException {
final TradeTypes tradeTypes;
switch(limitOrder.getType()) {
case BID:
tradeTypes = TradeTypes.BUY;
break;
case ASK:
tradeTypes = TradeTypes.SELL;
break;
case EXIT_BID:
tradeTypes = TradeTypes.CLOSE_BUY;
break;
case EXIT_ASK:
tradeTypes = TradeTypes.CLOSE_SELL;
break;
default:
tradeTypes = null;
break;
}
final BitVcFuturesPlaceOrderResult result =
bitvc.placeLimitOrder(accessKey, 1, futuresContract.getName(), requestTimestamp(), digest,
tradeTypes.getOrderType(), tradeTypes.getTradeType(), limitOrder.getLimitPrice().doubleValue(), limitOrder.getTradableAmount().doubleValue());
return String.valueOf(result);
}
@Override
public boolean cancelOrder(final String s) throws ExchangeException, NotAvailableFromExchangeException, NotYetImplementedForExchangeException, IOException {
return false;
}
@Override
public UserTrades getTradeHistory(final TradeHistoryParams tradeHistoryParams) throws IOException {
return null;
}
@Override
public TradeHistoryParams createTradeHistoryParams() {
return null;
}
@Override
public OpenOrdersParams createOpenOrdersParams() {
return null;
}
@Override
public void verifyOrder(final LimitOrder limitOrder) {
}
@Override
public void verifyOrder(final MarketOrder marketOrder) {
}
@Override
public Collection<Order> getOrder(final String... strings) throws ExchangeException, NotAvailableFromExchangeException, NotYetImplementedForExchangeException, IOException {
return null;
}
}