Skip to content

Commit

Permalink
[Binance] Implement getOpenOrders without a pair, allowing to get all…
Browse files Browse the repository at this point in the history
… open orders at once
  • Loading branch information
roeiba committed Jul 19, 2018
1 parent 800515d commit 979d64c
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import java.util.HashSet;
import java.util.Set;
import org.knowm.xchange.binance.dto.trade.BinanceOrder;
import java.util.Arrays;

import org.knowm.xchange.binance.dto.trade.OrderSide;
import org.knowm.xchange.binance.dto.trade.OrderStatus;
import org.knowm.xchange.binance.service.BinanceTradeService.BinanceOrderFlags;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,24 @@ List<BinanceOrder> openOrders(
@HeaderParam(X_MBX_APIKEY) String apiKey,
@QueryParam(SIGNATURE) ParamsDigest signature)
throws IOException, BinanceException;

@GET
@Path("api/v3/openOrders")
/**
* Get all open orders without a symbol.
* @param symbol
* @param recvWindow optional
* @param timestamp mandatory
* @return
* @throws IOException
* @throws BinanceException
*/
List<BinanceOrder> openOrders(
@QueryParam("recvWindow") Long recvWindow,
@QueryParam("timestamp") long timestamp,
@HeaderParam(X_MBX_APIKEY) String apiKey,
@QueryParam(SIGNATURE) ParamsDigest signature)
throws IOException, BinanceException;

@GET
@Path("api/v3/allOrders")
Expand All @@ -197,7 +215,7 @@ List<BinanceOrder> openOrders(
* returned.
*
* @param symbol
* @param orderId optionanl
* @param orderId optional
* @param limit optional
* @param recvWindow optional
* @param timestamp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import org.knowm.xchange.service.trade.params.TradeHistoryParamLimit;
import org.knowm.xchange.service.trade.params.TradeHistoryParams;
import org.knowm.xchange.service.trade.params.TradeHistoryParamsIdSpan;
import org.knowm.xchange.service.trade.params.orders.DefaultOpenOrdersParam;
import org.knowm.xchange.service.trade.params.orders.DefaultOpenOrdersParamCurrencyPair;
import org.knowm.xchange.service.trade.params.orders.OpenOrdersParamCurrencyPair;
import org.knowm.xchange.service.trade.params.orders.OpenOrdersParams;
Expand All @@ -56,21 +57,7 @@ public interface BinanceOrderFlags extends IOrderFlags {

@Override
public OpenOrders getOpenOrders() throws IOException {
Long recvWindow =
(Long) exchange.getExchangeSpecification().getExchangeSpecificParametersItem("recvWindow");
List<BinanceOrder> binanceOpenOrders = super.openOrders(recvWindow, getTimestamp());
List<LimitOrder> limitOrders = new ArrayList<>();
List<Order> otherOrders = new ArrayList<>();
binanceOpenOrders.forEach(
binanceOrder -> {
Order order = BinanceAdapters.adaptOrder(binanceOrder);
if (order instanceof LimitOrder) {
limitOrders.add((LimitOrder) order);
} else {
otherOrders.add(order);
}
});
return new OpenOrders(limitOrders, otherOrders);
return getOpenOrders(new DefaultOpenOrdersParam());
}

public OpenOrders getOpenOrders(CurrencyPair pair) throws IOException {
Expand All @@ -79,21 +66,31 @@ public OpenOrders getOpenOrders(CurrencyPair pair) throws IOException {

@Override
public OpenOrders getOpenOrders(OpenOrdersParams params) throws IOException {
Assert.isTrue(
params instanceof OpenOrdersParamCurrencyPair,
"You need to provide the currency pair to get the list of open orders.");
OpenOrdersParamCurrencyPair pairParams = (OpenOrdersParamCurrencyPair) params;
CurrencyPair pair = pairParams.getCurrencyPair();
Long recvWindow =
(Long) exchange.getExchangeSpecification().getExchangeSpecificParametersItem("recvWindow");
List<BinanceOrder> binanceOpenOrders = super.openOrders(pair, recvWindow, getTimestamp());
List<LimitOrder> openOrders =
binanceOpenOrders
.stream()
.filter(o -> o.type.equals(OrderType.LIMIT))
.map(o -> (LimitOrder) BinanceAdapters.adaptOrder(o))
.collect(Collectors.toList());
return new OpenOrders(openOrders);

Long recvWindow =
(Long) exchange.getExchangeSpecification().getExchangeSpecificParametersItem("recvWindow");

List<BinanceOrder> binanceOpenOrders;
if (params instanceof OpenOrdersParamCurrencyPair) {
OpenOrdersParamCurrencyPair pairParams = (OpenOrdersParamCurrencyPair) params;
CurrencyPair pair = pairParams.getCurrencyPair();
binanceOpenOrders = super.openOrders(pair, recvWindow, getTimestamp());
} else {
binanceOpenOrders = super.openOrders(recvWindow, getTimestamp());
}

List<LimitOrder> limitOrders = new ArrayList<>();
List<Order> otherOrders = new ArrayList<>();
binanceOpenOrders.forEach(
binanceOrder -> {
Order order = BinanceAdapters.adaptOrder(binanceOrder);
if (order instanceof LimitOrder) {
limitOrders.add((LimitOrder) order);
} else {
otherOrders.add(order);
}
});
return new OpenOrders(limitOrders, otherOrders);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ public List<BinanceOrder> openOrders(CurrencyPair pair, Long recvWindow, long ti
super.apiKey,
super.signatureCreator);
}

public List<BinanceOrder> openOrders(Long recvWindow, long timestamp) throws BinanceException, IOException {
return binance.openOrders(recvWindow, timestamp, super.apiKey, super.signatureCreator);
}

public BinanceNewOrder newOrder(
CurrencyPair pair,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.knowm.xchange.service.trade.params.orders;

import org.knowm.xchange.dto.trade.LimitOrder;

public class DefaultOpenOrdersParam implements OpenOrdersParams {

public DefaultOpenOrdersParam() {
}

@Override
public boolean accept(LimitOrder order) {
return order != null;
}
}

0 comments on commit 979d64c

Please sign in to comment.