Skip to content

Commit

Permalink
update read me & message handler
Browse files Browse the repository at this point in the history
  • Loading branch information
VictorFrWu committed Feb 26, 2024
1 parent 39517e1 commit 14b3573
Show file tree
Hide file tree
Showing 44 changed files with 887 additions and 30 deletions.
50 changes: 36 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,29 +40,25 @@ Maven Example
<dependency>
<groupId>io.github.wuhewuhe</groupId>
<artifactId>bybit-java-api</artifactId>
<version>1.2.3</version>
<version>1.2.4</version>
</dependency>
```
Gradle Example
```java
implementation group: 'io.github.wuhewuhe', name: 'bybit-java-api', version: '1.2.3'
implementation group: 'io.github.wuhewuhe', name: 'bybit-java-api', version: '1.2.4'
```
Furthermore, build tool, please check [sonar type central repository](https://central.sonatype.com/artifact/io.github.wuhewuhe/bybit-java-api/1.2.3)

## Release-Notes
### HTTP Sync & Async Request
- Position new endpoints: Move Positions and Get Move Positions History
- Account new endpoint: Batch Set Collateral Coin
- TradeOrderRequest add a new parameter: marketUnit
### Websockets
- Add WebSocketMessage handler class to all public and private channels

### Improvements
- Fix Switch Position Mode Issue
- public and private websocket channel set message handler

### Change Log
- C:\Net\GithubProjects\open-api-sdk\bybit-java-api
- Set Tp/SL and Set Risk Limit endpoints are deprecated
- GetExecutionList move from PositionService to TradeService and rename to GetTradeHistory

- Spot Margin Trade endpoints are decrypted for classical users
-
## Usage
Note: Replace placeholders (like YOUR_API_KEY, links, or other details) with the actual information. You can also customize this template to better fit the actual state and details of your Java API.
### HttP Client Factory & Websocket Client
Expand Down Expand Up @@ -224,16 +220,42 @@ client.getPublicChannelStream(List.of("orderbook.50.BTCUSDT"), BybitApiConfig.V5
client.getPublicChannelStream(List.of("orderbook.50.BTCUSDT","orderbook.1.ETHUSDT"), BybitApiConfig.V5_PUBLIC_LINEAR);
```

- Ticker Subscribe
```java
var client = BybitApiClientFactory.newInstance(BybitApiConfig.STREAM_MAINNET_DOMAIN, true).newWebsocketClient();

client.setMessageHandler(message -> {
var tickerData = (new ObjectMapper()).readValue(message, WebSocketTickerMessage.class);
// Process message data here
System.out.println("Websocket Message Data: " + tickerData.getData().toString());
});

// Ticker
client.getPublicChannelStream(List.of("tickers.BTCUSDT"), BybitApiConfig.V5_PUBLIC_LINEAR);
```

### Websocket private channel
- Order Subscribe
- Position Subscribe
```java
var client = BybitApiClientFactory.newInstance("YOUR_API_KEY", "YOUR_API_SECRET", BybitApiConfig.STREAM_TESTNET_DOMAIN).newWebsocketClient(5, "60s", (message) -> System.out.println("Handle message :" + message));
var client = BybitApiClientFactory.newInstance("YOUR_API_KEY", "YOUR_API_SECRET", BybitApiConfig.STREAM_TESTNET_DOMAIN).newWebsocketClient();

// Position
// client.getOrderBookStream(List.of("position.linear"), BybitApiConfig.V5_PRIVATE);
client.getPrivateChannelStream(List.of("position"), BybitApiConfig.V5_PRIVATE);
```

- Order Channel active Message Handler & Max Alive Time & Ping Interval
```java
var client = BybitApiClientFactory.newInstance("YOUR_API_KEY", "YOUR_API_SECRET", BybitApiConfig.STREAM_TESTNET_DOMAIN, true)
.newWebsocketClient(5, "60s", (message) -> {
var orderMessage = (new ObjectMapper()).readValue(message, WebSocketOrderMessage.class);
// Process message data here
System.out.println("Websocket Message Data: " + orderMessage.getData().toString());
});

// Order
client.getPrivateChannelStream(List.of("order"), BybitApiConfig.V5_PRIVATE);
```

## Contact
For support, join our Bybit API community on [Telegram](https://t.me/Bybitapi).

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>io.github.wuhewuhe</groupId>
<artifactId>bybit-java-api</artifactId>
<version>1.2.3</version>
<version>1.2.4-SNAPSHOT</version>
<name>bybit-java-api</name>
<url>https://github.com/wuhewuhe/bybit-java-api</url>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class CoinData {
private String coin;
private String equity;
private String usdValue;
private String walletBalance;
private String free;
private String locked;
private String spotHedgingQty;
private String borrowAmount;
private String availableToBorrow;
private String availableToWithdraw;
private String accruedInterest;
private String totalOrderIM;
private String totalPositionIM;
private String totalPositionMM;
private String unrealisedPnl;
private String cumRealisedPnl;
private String bonus;
private Boolean collateralSwitch;
private Boolean marginCollateral;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ExecutionData {
private String category;
private String symbol;
private String isLeverage;
private String orderId;
private String orderLinkId;
private String side;
private String orderPrice;
private String orderQty;
private String leavesQty;
private String createType;
private String orderType;
private String stopOrderType;
private String execFee;
private String execId;
private String execPrice;
private String execQty;
private String execType;
private String execValue;
private String execTime;
private Boolean isMaker;
private String feeRate;
private String tradeIv;
private String markIv;
private String markPrice;
private String indexPrice;
private String underlyingPrice;
private String blockTradeId;
private String closedSize;
private Long seq;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class GreekData {
private String baseCoin;
private String totalDelta;
private String totalGamma;
private String totalVega;
private String totalTheta;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class OrderData {
private String category;
private String orderId;
private String orderLinkId;
private String isLeverage;
private String blockTradeId;
private String symbol;
private String price;
private String qty;
private String side;
private Integer positionIdx;
private String orderStatus;
private String createType;
private String cancelType;
private String rejectReason;
private String avgPrice;
private String leavesQty;
private String leavesValue;
private String cumExecQty;
private String cumExecValue;
private String cumExecFee;
private String feeCurrency;
private String timeInForce;
private String orderType;
private String stopOrderType;
private String ocoTriggerType;
private String orderIv;
private String marketUnit;
private String triggerPrice;
private String takeProfit;
private String stopLoss;
private String tpslMode;
private String tpLimitPrice;
private String slLimitPrice;
private String tpTriggerBy;
private String slTriggerBy;
private Integer triggerDirection;
private String triggerBy;
private String lastPriceOnCreated;
private Boolean reduceOnly;
private Boolean closeOnTrigger;
private String placeType;
private String smpType;
private Integer smpGroup;
private String smpOrderId;
private String createdTime;
private String updatedTime;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class PositionData {
private String category;
private String symbol;
private String side;
private String size;
private Integer positionIdx;
private Integer tradeMode;
private String positionValue;
private Integer riskId;
private String riskLimitValue;
private String entryPrice;
private String markPrice;
private String leverage;
private String positionBalance;
private Integer autoAddMargin;
private String positionMM;
private String positionIM;
private String liqPrice;
private String bustPrice;
private String tpslMode;
private String takeProfit;
private String stopLoss;
private String trailingStop;
private String unrealisedPnl;
private String cumRealisedPnl;
private String positionStatus;
private Integer adlRankIndicator;
private Boolean isReduceOnly;
private String mmrSysUpdatedTime;
private String leverageSysUpdatedTime;
private String createdTime;
private String updatedTime;
private Long seq;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class WalletData {
private String accountType;
private String accountLTV;
private String accountIMRate;
private String accountMMRate;
private String totalEquity;
private String totalWalletBalance;
private String totalMarginBalance;
private String totalAvailableBalance;
private String totalPerpUPL;
private String totalInitialMargin;
private String totalMaintenanceMargin;
private List<CoinData> coin;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WebSocketExecutionMessage {
private String id;
private String topic;
private Long creationTime;
private List<ExecutionData> data; // Assuming 'data' is an array of KlineData objects
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WebSocketGreekMessage {
private String id;
private String topic;
private Long creationTime;
private List<GreekData> data; // Assuming 'data' is an array of KlineData objects
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.bybit.api.client.domain.websocket_message.public_channel.KlineData;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WebSocketOrderMessage {
private String id;
private String topic;
private Long creationTime;
private List<OrderData> data; // Assuming 'data' is an array of KlineData objects
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WebSocketPositionMessage {
private String id;
private String topic;
private Long creationTime;
private List<PositionData> data; // Assuming 'data' is an array of KlineData objects
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.bybit.api.client.domain.websocket_message.private_channel;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WebSocketWalletMessage {
private String id;
private String topic;
private Long creationTime;
private List<WalletData> data; // Assuming 'data' is an array of KlineData objects
}
Loading

0 comments on commit 14b3573

Please sign in to comment.