Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[bybit] fix tests and run formatting #4997

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,13 @@
import static org.knowm.xchange.bybit.dto.BybitCategory.INVERSE;
import static org.knowm.xchange.bybit.dto.BybitCategory.OPTION;
import static org.knowm.xchange.bybit.dto.marketdata.instruments.option.BybitOptionInstrumentInfo.OptionType.CALL;
import static org.knowm.xchange.bybit.dto.marketdata.instruments.option.BybitOptionInstrumentInfo.OptionType.PUT;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.TemporalAccessor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
Expand All @@ -26,7 +23,6 @@
import org.knowm.xchange.bybit.dto.marketdata.instruments.BybitInstrumentInfo;
import org.knowm.xchange.bybit.dto.marketdata.instruments.linear.BybitLinearInverseInstrumentInfo;
import org.knowm.xchange.bybit.dto.marketdata.instruments.option.BybitOptionInstrumentInfo;
import org.knowm.xchange.bybit.dto.marketdata.instruments.option.BybitOptionInstrumentInfo.OptionType;
import org.knowm.xchange.bybit.dto.marketdata.instruments.spot.BybitSpotInstrumentInfo;
import org.knowm.xchange.bybit.dto.marketdata.tickers.BybitTicker;
import org.knowm.xchange.bybit.dto.marketdata.tickers.linear.BybitLinearInverseTicker;
Expand Down Expand Up @@ -58,9 +54,8 @@ public class BybitAdapters {
private static final ThreadLocal<SimpleDateFormat> OPTION_DATE_FORMAT =
ThreadLocal.withInitial(() -> new SimpleDateFormat("ddMMMyy", Locale.US));
public static final List<String> QUOTE_CURRENCIES =
Arrays.asList("USDT", "USDC", "USDE", "EUR", "BRL", "PLN", "TRY", "SOL", "BTC", "ETH", "DAI",
"BRZ");

Arrays.asList(
"USDT", "USDC", "USDE", "EUR", "BRL", "PLN", "TRY", "SOL", "BTC", "ETH", "DAI", "BRZ");

public static Wallet adaptBybitBalances(List<BybitCoinWalletBalance> coinWalletBalances) {
List<Balance> balances = new ArrayList<>(coinWalletBalances.size());
Expand Down Expand Up @@ -154,7 +149,7 @@ public static String convertToBybitSymbol(Instrument instrument) {
}

public static CurrencyPair guessSymbol(String symbol) {
//SPOT Only
// SPOT Only
for (String quoteCurrency : QUOTE_CURRENCIES) {
if (symbol.endsWith(quoteCurrency)) {
int splitIndex = symbol.lastIndexOf(quoteCurrency);
Expand Down Expand Up @@ -254,7 +249,7 @@ public static Order adaptBybitOrderDetails(BybitOrderDetail bybitOrderResult) {
case LIMIT:
builder =
new LimitOrder.Builder(
adaptOrderType(bybitOrderResult), guessSymbol(bybitOrderResult.getSymbol()))
adaptOrderType(bybitOrderResult), guessSymbol(bybitOrderResult.getSymbol()))
.limitPrice(bybitOrderResult.getPrice());
break;
default:
Expand Down Expand Up @@ -386,45 +381,51 @@ private static Builder adaptBybitTickerBuilder(

public static Instrument convertBybitSymbolToInstrument(String symbol, BybitCategory category) {
switch (category) {
case SPOT: {
return guessSymbol(symbol);
}
case LINEAR: {
if (symbol.endsWith("USDT")) {
int splitIndex = symbol.lastIndexOf("USDT");
case SPOT:
{
return guessSymbol(symbol);
}
case LINEAR:
{
if (symbol.endsWith("USDT")) {
int splitIndex = symbol.lastIndexOf("USDT");
return new FuturesContract(
new CurrencyPair(symbol.substring(0, splitIndex), "USDT"), "PERP");
}
if (symbol.endsWith("PERP")) {
int splitIndex = symbol.lastIndexOf("PERP");
return new FuturesContract(
new CurrencyPair(symbol.substring(0, splitIndex), "USDC"), "PERP");
}
// USDC Futures
int splitIndex = symbol.lastIndexOf("-");
return new FuturesContract(
new CurrencyPair(symbol.substring(0, splitIndex), "USDT"), "PERP");
new CurrencyPair(symbol.substring(0, splitIndex), "USDC"),
symbol.substring(splitIndex + 1));
}
if (symbol.endsWith("PERP")) {
int splitIndex = symbol.lastIndexOf("PERP");
case INVERSE:
{
int splitIndex = symbol.lastIndexOf("USD");
String perp = symbol.length() > splitIndex + 3 ? symbol.substring(splitIndex + 3) : "";
return new FuturesContract(
new CurrencyPair(symbol.substring(0, splitIndex), "USDC"), "PERP");
new CurrencyPair(symbol.substring(0, splitIndex), "USD"), perp);
}
case OPTION:
{
DateTimeFormatter dateParser =
new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("ddLLLyy")
.toFormatter(Locale.US);
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyMMdd");
String[] tokens = symbol.split("-");
String base = tokens[0];
String quote = "USDC";
String date = dateFormat.format(LocalDate.parse(tokens[1], dateParser));
BigDecimal strike = new BigDecimal(tokens[2]);
return new OptionsContract(
base + "/" + quote + "/" + date + "/" + strike + "/" + tokens[3]);
}
// USDC Futures
int splitIndex = symbol.lastIndexOf("-");
return new FuturesContract(
new CurrencyPair(symbol.substring(0, splitIndex), "USDC"),
symbol.substring(splitIndex + 1));
}
case INVERSE: {
int splitIndex = symbol.lastIndexOf("USD");
String perp = symbol.length() > splitIndex + 3 ? symbol.substring(splitIndex + 3) : "";
return new FuturesContract(
new CurrencyPair(symbol.substring(0, splitIndex), "USD"), perp);
}
case OPTION: {
DateTimeFormatter dateParser = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("ddLLLyy")
.toFormatter(Locale.US);
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyMMdd");
String[] tokens = symbol.split("-");
String base = tokens[0];
String quote = "USDC";
String date = dateFormat.format(LocalDate.parse(tokens[1], dateParser));
BigDecimal strike = new BigDecimal(tokens[2]);
return new OptionsContract(base + "/" + quote + "/" + date + "/" + strike + "/" + tokens[3]);
}
}
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import org.knowm.xchange.client.ResilienceRegistries;
import org.knowm.xchange.exceptions.ExchangeException;

public class BybitExchange extends BaseExchange implements Exchange{
public class BybitExchange extends BaseExchange implements Exchange {

public static final String SPECIFIC_PARAM_ACCOUNT_TYPE = "accountType";
private static final String BASE_URL = "https://api.bybit.com";
Expand All @@ -30,14 +30,15 @@ public class BybitExchange extends BaseExchange implements Exchange{

@Override
protected void initServices() {
marketDataService = new BybitMarketDataService(this,getResilienceRegistries());
tradeService = new BybitTradeService(this,getResilienceRegistries());
marketDataService = new BybitMarketDataService(this, getResilienceRegistries());
tradeService = new BybitTradeService(this, getResilienceRegistries());
accountService =
new BybitAccountService(
this,
(BybitAccountType)
getExchangeSpecification()
.getExchangeSpecificParametersItem(SPECIFIC_PARAM_ACCOUNT_TYPE),getResilienceRegistries());
.getExchangeSpecificParametersItem(SPECIFIC_PARAM_ACCOUNT_TYPE),
getResilienceRegistries());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,40 +1,41 @@
package org.knowm.xchange.bybit;

import static jakarta.ws.rs.core.Response.Status.FORBIDDEN;
import static jakarta.ws.rs.core.Response.Status.TOO_MANY_REQUESTS;

import io.github.resilience4j.ratelimiter.RateLimiterConfig;
import java.time.Duration;
import org.knowm.xchange.client.ResilienceRegistries;
import org.knowm.xchange.client.ResilienceUtils;

public class BybitResilience {

/**
* for UTA 2.0 pro account
* <a href="https://bybit-exchange.github.io/docs/v5/rate-limit">Documentation</a>
* for UTA 2.0 pro account <a
* href="https://bybit-exchange.github.io/docs/v5/rate-limit">Documentation</a>
*/
public static final String GLOBAL_RATE_LIMITER = "global";

// /v5/order/create
public static final String ORDER_CREATE_LINEAR_AND_INVERSE_RATE_LIMITER = "orderCreateLinearAndInverse";
public static final String ORDER_CREATE_LINEAR_AND_INVERSE_RATE_LIMITER =
"orderCreateLinearAndInverse";
public static final String ORDER_CREATE_SPOT_RATE_LIMITER = "orderCreateSpot";
public static final String ORDER_CREATE_OPTION_LIMITER = "orderCreateOption";

// /v5/order/amend
public static final String ORDER_AMEND_LINEAR_AND_INVERSE_RATE_LIMITER = "orderAmendLinearAndInverse";
public static final String ORDER_AMEND_LINEAR_AND_INVERSE_RATE_LIMITER =
"orderAmendLinearAndInverse";
public static final String ORDER_AMEND_SPOT_RATE_LIMITER = "orderAmendSpot";
public static final String ORDER_AMEND_OPTION_LIMITER = "orderAmendOption";

// /v5/order/cancel
public static final String ORDER_CANCEL_LINEAR_AND_INVERSE_RATE_LIMITER = "orderCancelLinearAndInverse";
public static final String ORDER_CANCEL_LINEAR_AND_INVERSE_RATE_LIMITER =
"orderCancelLinearAndInverse";
public static final String ORDER_CANCEL_SPOT_RATE_LIMITER = "orderCancelSpot";
public static final String ORDER_CANCEL_OPTION_LIMITER = "orderCancelOption";

// /v5/position/set-leverage
public static final String POSITION_SET_LEVERAGE_INVERSE_RATE_LIMITER = "positionSetLeverageInverse";
public static final String POSITION_SET_LEVERAGE_LINEAR_RATE_LIMITER = "positionSetLeverageLinear";

public static final String POSITION_SET_LEVERAGE_INVERSE_RATE_LIMITER =
"positionSetLeverageInverse";
public static final String POSITION_SET_LEVERAGE_LINEAR_RATE_LIMITER =
"positionSetLeverageLinear";

public static ResilienceRegistries createRegistries() {
ResilienceRegistries registries = new ResilienceRegistries();
Expand Down Expand Up @@ -157,5 +158,4 @@ public static ResilienceRegistries createRegistries() {
.build());
return registries;
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.knowm.xchange.bybit.dto.account;


import lombok.Getter;

@Getter
Expand All @@ -13,5 +12,4 @@ public class BybitAccountInfoResponse {
private String dcpStatus;
private int timeWindow;
private int smpGroup;

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import lombok.Getter;
import lombok.Setter;
import org.knowm.xchange.bybit.dto.BybitCategory;

@Getter
@Setter
Expand All @@ -14,8 +13,13 @@ public class BybitCancelAllOrdersPayload {
String orderFilter;
String stopOrderType;

public BybitCancelAllOrdersPayload(String category, String symbol, String baseCoin,
String settleCoin, String orderFilter, String stopOrderType) {
public BybitCancelAllOrdersPayload(
String category,
String symbol,
String baseCoin,
String settleCoin,
String orderFilter,
String stopOrderType) {
this.category = category;
this.symbol = symbol;
this.baseCoin = baseCoin;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@
import lombok.Setter;
import org.knowm.xchange.bybit.dto.trade.BybitOrderResponse;


@Getter
@Setter
public class BybitCancelAllOrdersResponse {

@JsonProperty("list")
List<BybitOrderResponse> list;
String success;

String success;
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,16 @@ public class BybitOrder extends Order {
private BybitOrderType slOrderType;
private BybitOrderType orderType;
private boolean reduceOnly = false;

/**
* <p>0: one-way mode</p>
* <p>1: hedge-mode Buy side</p>
* <p>2: hedge-mode Sell side</p>
* 0: one-way mode
*
* <p>1: hedge-mode Buy side
*
* <p>2: hedge-mode Sell side
*/
private int positionIdx;

private BybitTimeInForce timeInForce;

public BybitOrder(
Expand Down Expand Up @@ -93,17 +97,14 @@ public enum SlTriggerBy {
LASTPRICE("LastPrice"),
MARKPRICE("MarkPrice"),
INDEXPRICE("IndexPrice");
@JsonValue
private final String value;
@JsonValue private final String value;
}

@Getter
@AllArgsConstructor
public enum TpslMode {
FULL("Full"),
PARTIAL("Partial");
@JsonValue
private final String value;
@JsonValue private final String value;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
import lombok.Setter;
import org.knowm.xchange.bybit.dto.BybitCategory;
import org.knowm.xchange.bybit.dto.trade.BybitOrder.SlTriggerBy;
import org.knowm.xchange.bybit.dto.trade.details.BybitTimeInForce;

@Getter
@Setter
Expand Down Expand Up @@ -58,7 +57,7 @@ public BybitPlaceOrderPayload(
this.qty = qty.toString();
this.orderLinkId = orderLinkId;
this.positionIdx = positionIdx;
if(price != null) {
if (price != null) {
this.price = price.toString();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@
import lombok.Getter;
import org.knowm.xchange.dto.Order.IOrderFlags;

@Getter
@AllArgsConstructor
public enum BybitHedgeMode implements IOrderFlags {
ONEWAY,
TWOWAY;
}


@Getter
@AllArgsConstructor
public enum BybitHedgeMode implements IOrderFlags {
ONEWAY,
TWOWAY;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,5 @@ public enum BybitTimeInForce implements IOrderFlags {
IOC("IOC"),
FOK("FOK"),
POSTONLY("PostOnly");
@JsonValue
private final String value;
@JsonValue private final String value;
}


Loading