package org.knowm.xchange.mercadobitcoin.service; import java.io.IOException; import java.math.BigDecimal; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.knowm.xchange.Exchange; import org.knowm.xchange.exceptions.ExchangeException; import org.knowm.xchange.mercadobitcoin.MercadoBitcoinAuthenticated; import org.knowm.xchange.mercadobitcoin.dto.MercadoBitcoinBaseTradeApiResult; import org.knowm.xchange.mercadobitcoin.dto.trade.MercadoBitcoinCancelOrderResult; import org.knowm.xchange.mercadobitcoin.dto.trade.MercadoBitcoinPlaceLimitOrderResult; import org.knowm.xchange.mercadobitcoin.dto.trade.MercadoBitcoinUserOrders; import si.mazi.rescu.RestProxyFactory; /** * @author Felipe Micaroni Lalli */ public class MercadoBitcoinTradeServiceRaw extends MercadoBitcoinBaseService { private static final String GET_ORDER_LIST = "OrderList"; private static final String TRADE = "Trade"; private static final String CANCEL_ORDER = "CancelOrder"; private final MercadoBitcoinAuthenticated mercadoBitcoinAuthenticated; /** * Constructor * * @param exchange */ public MercadoBitcoinTradeServiceRaw(Exchange exchange) { super(exchange); this.mercadoBitcoinAuthenticated = RestProxyFactory.createProxy(MercadoBitcoinAuthenticated.class, exchange.getExchangeSpecification().getSslUri()); } public MercadoBitcoinBaseTradeApiResult<MercadoBitcoinUserOrders> getMercadoBitcoinUserOrders(@Nonnull String pair, @Nullable String type, @Nullable String status, @Nullable String fromId, @Nullable String endId, @Nullable Long since, @Nullable Long end) throws IOException { String method = GET_ORDER_LIST; long tonce = exchange.getNonceFactory().createValue(); MercadoBitcoinDigest signatureCreator = MercadoBitcoinDigest.createInstance(method, exchange.getExchangeSpecification().getPassword(), exchange.getExchangeSpecification().getSecretKey(), tonce); MercadoBitcoinBaseTradeApiResult<MercadoBitcoinUserOrders> userOrders = mercadoBitcoinAuthenticated.getOrderList( exchange.getExchangeSpecification().getApiKey(), signatureCreator, method, tonce, pair, type, status, fromId, endId, since, end); if (userOrders.getSuccess() == 0) { throw new ExchangeException("Error getting user orders: " + userOrders.getError()); } return userOrders; } public MercadoBitcoinBaseTradeApiResult<MercadoBitcoinPlaceLimitOrderResult> mercadoBitcoinPlaceLimitOrder(@Nonnull String pair, @Nonnull String type, @Nonnull BigDecimal volume, @Nonnull BigDecimal price) throws IOException { String method = TRADE; long tonce = exchange.getNonceFactory().createValue(); MercadoBitcoinDigest signatureCreator = MercadoBitcoinDigest.createInstance(method, exchange.getExchangeSpecification().getPassword(), exchange.getExchangeSpecification().getSecretKey(), tonce); MercadoBitcoinBaseTradeApiResult<MercadoBitcoinPlaceLimitOrderResult> newOrder = mercadoBitcoinAuthenticated .placeLimitOrder(exchange.getExchangeSpecification().getApiKey(), signatureCreator, method, tonce, pair, type, volume, price); if (newOrder.getSuccess() == 0) { throw new ExchangeException("Error creating a new order: " + newOrder.getError()); } return newOrder; } /** * @param pair btc_brl or ltc_brl * @param orderId the order ID * @return See {@link org.knowm.xchange.mercadobitcoin.dto.trade.MercadoBitcoinCancelOrderResult} . * @throws IOException */ public MercadoBitcoinBaseTradeApiResult<MercadoBitcoinCancelOrderResult> mercadoBitcoinCancelOrder(@Nonnull String pair, @Nonnull String orderId) throws IOException { String method = CANCEL_ORDER; long tonce = exchange.getNonceFactory().createValue(); MercadoBitcoinDigest signatureCreator = MercadoBitcoinDigest.createInstance(method, exchange.getExchangeSpecification().getPassword(), exchange.getExchangeSpecification().getSecretKey(), tonce); MercadoBitcoinBaseTradeApiResult<MercadoBitcoinCancelOrderResult> result = mercadoBitcoinAuthenticated .cancelOrder(exchange.getExchangeSpecification().getApiKey(), signatureCreator, method, tonce, pair, orderId); if (result.getSuccess() == 0) { throw new ExchangeException("Error canceling a new order: " + result.getError()); } return result; } }