@Override public int compareTo(StopOrder stopOrder) { final int ret; if (this.getType() == stopOrder.getType()) { // Same side ret = this.getStopPrice().compareTo(stopOrder.getStopPrice()) * (getType() == OrderType.BID ? -1 : 1); } else { // Keep bid side be less than ask side ret = this.getType() == OrderType.BID ? -1 : 1; } return ret; }
@Override public String placeStopOrder(StopOrder so) throws IOException { TimeInForce tif = null; Set<IOrderFlags> orderFlags = so.getOrderFlags(); Iterator<IOrderFlags> orderFlagsIterator = orderFlags.iterator(); while (orderFlagsIterator.hasNext()) { IOrderFlags orderFlag = orderFlagsIterator.next(); if (orderFlag instanceof TimeInForce) { tif = (TimeInForce) orderFlag; } } // Time-in-force should not be provided for market orders but is required for // limit orders, so we only default it for limit orders. If the caller // specifies one for a market order, we don't remove it, since Binance might allow // it at some point. if (so.getLimitPrice() != null && tif == null) { tif = TimeInForce.GTC; } OrderType orderType; if (so.getType().equals(Order.OrderType.BID)) { orderType = so.getLimitPrice() == null ? OrderType.TAKE_PROFIT : OrderType.TAKE_PROFIT_LIMIT; } else { orderType = so.getLimitPrice() == null ? OrderType.STOP_LOSS : OrderType.STOP_LOSS_LIMIT; } return placeOrder(orderType, so, so.getLimitPrice(), so.getStopPrice(), tif); }
@Override public String placeStopOrder(StopOrder stopOrder) throws IOException { return super.placeStopLimitOrder( stopOrder.getOriginalAmount(), stopOrder.getLimitPrice(), stopOrder.getStopPrice(), stopOrder.getCurrencyPair(), BTCTurkAdapters.adaptOrderType(stopOrder.getType())) .getId(); }
.productId(adaptProductID(stopOrder.getCurrencyPair())) .type(CoinbaseProPlaceOrder.Type.market) .side(adaptSide(stopOrder.getType())) .size(stopOrder.getOriginalAmount()) .stop(adaptStop(stopOrder.getType())) .stopPrice(stopOrder.getStopPrice()) .build(); .productId(adaptProductID(stopOrder.getCurrencyPair())) .type(CoinbaseProPlaceOrder.Type.limit) .side(adaptSide(stopOrder.getType())) .size(stopOrder.getOriginalAmount()) .stop(adaptStop(stopOrder.getType())) .stopPrice(stopOrder.getStopPrice()) .price(stopOrder.getLimitPrice())
@Override public String placeStopOrder(StopOrder stopOrder) throws ExchangeException { String symbol = BitmexAdapters.adaptCurrencyPairToSymbol(stopOrder.getCurrencyPair()); return placeOrder( new BitmexPlaceOrderParameters.Builder(symbol) .setSide(fromOrderType(stopOrder.getType())) .setOrderQuantity(stopOrder.getOriginalAmount()) .setStopPrice(stopOrder.getStopPrice()) .setClOrdId(stopOrder.getId()) .build()) .getId(); }
@Override public String placeStopOrder(StopOrder stopOrder) throws IOException { if (stopOrder.getLimitPrice() != null) { throw new NotYetImplementedForExchangeException( "Limit stops are not supported by the Bitfinex v1 API."); } LimitOrder limitOrder = new LimitOrder( stopOrder.getType(), stopOrder.getOriginalAmount(), stopOrder.getCurrencyPair(), stopOrder.getId(), stopOrder.getTimestamp(), stopOrder.getStopPrice()); limitOrder.setOrderFlags(stopOrder.getOrderFlags()); limitOrder.setLeverage(stopOrder.getLeverage()); limitOrder.addOrderFlag(BitfinexOrderFlags.STOP); return placeLimitOrder(limitOrder); }
@Override public int compareTo(StopOrder stopOrder) { final int ret; if (this.getType() == stopOrder.getType()) { // Same side ret = this.getStopPrice().compareTo(stopOrder.getStopPrice()) * (getType() == OrderType.BID ? -1 : 1); } else { // Keep bid side be less than ask side ret = this.getType() == OrderType.BID ? -1 : 1; } return ret; }
@Override public String placeStopOrder(StopOrder so) throws IOException { TimeInForce tif = null; Set<IOrderFlags> orderFlags = so.getOrderFlags(); Iterator<IOrderFlags> orderFlagsIterator = orderFlags.iterator(); while (orderFlagsIterator.hasNext()) { IOrderFlags orderFlag = orderFlagsIterator.next(); if (orderFlag instanceof TimeInForce) { tif = (TimeInForce) orderFlag; } } // Time-in-force should not be provided for market orders but is required for // limit orders, so we only default it for limit orders. If the caller // specifies one for a market order, we don't remove it, since Binance might allow // it at some point. if (so.getLimitPrice() != null && tif == null) { tif = TimeInForce.GTC; } OrderType orderType; if (so.getType().equals(Order.OrderType.BID)) { orderType = so.getLimitPrice() == null ? OrderType.TAKE_PROFIT : OrderType.TAKE_PROFIT_LIMIT; } else { orderType = so.getLimitPrice() == null ? OrderType.STOP_LOSS : OrderType.STOP_LOSS_LIMIT; } return placeOrder(orderType, so, so.getLimitPrice(), so.getStopPrice(), tif); }
.productId(adaptProductID(stopOrder.getCurrencyPair())) .type(GDAXPlaceOrder.Type.market) .side(adaptSide(stopOrder.getType())) .size(stopOrder.getOriginalAmount()) .stop(adaptStop(stopOrder.getType())) .stopPrice(stopOrder.getStopPrice()) .build(); .productId(adaptProductID(stopOrder.getCurrencyPair())) .type(GDAXPlaceOrder.Type.limit) .side(adaptSide(stopOrder.getType())) .size(stopOrder.getOriginalAmount()) .stop(adaptStop(stopOrder.getType())) .stopPrice(stopOrder.getStopPrice()) .price(stopOrder.getLimitPrice())
@Override public String placeStopOrder(StopOrder stopOrder) throws ExchangeException { String symbol = BitmexAdapters.adaptCurrencyPairToSymbol(stopOrder.getCurrencyPair()); return placeOrder( new BitmexPlaceOrderParameters.Builder(symbol) .setSide(fromOrderType(stopOrder.getType())) .setOrderQuantity(stopOrder.getOriginalAmount()) .setStopPrice(stopOrder.getStopPrice()) .setClOrdId(stopOrder.getId()) .build()) .getId(); }
@Override public String placeStopOrder(StopOrder stopOrder) throws IOException { if (stopOrder.getLimitPrice() != null) { throw new NotYetImplementedForExchangeException( "Limit stops are not supported by the Bitfinex v1 API."); } LimitOrder limitOrder = new LimitOrder( stopOrder.getType(), stopOrder.getOriginalAmount(), stopOrder.getCurrencyPair(), stopOrder.getId(), stopOrder.getTimestamp(), stopOrder.getStopPrice()); limitOrder.setOrderFlags(stopOrder.getOrderFlags()); limitOrder.setLeverage(stopOrder.getLeverage()); limitOrder.addOrderFlag(BitfinexOrderFlags.STOP); return placeLimitOrder(limitOrder); }