diff --git a/xchange-ascendex/api-specification.txt b/xchange-ascendex/api-specification.txt new file mode 100644 index 00000000000..838c43dcd0a --- /dev/null +++ b/xchange-ascendex/api-specification.txt @@ -0,0 +1,9 @@ +AscendEx api spec + +url: https://ascendex.com/ +url(backup): https://asdx.me/zh-cn +doc: https://ascendex.github.io/ascendex-pro-api/#ascendex-pro-api-documentation + +You need an extra parameters: +exSpec.setExchangeSpecificParametersItem("account-group","account-group"); + diff --git a/xchange-ascendex/pom.xml b/xchange-ascendex/pom.xml index 47cfa77e466..04e08baca33 100644 --- a/xchange-ascendex/pom.xml +++ b/xchange-ascendex/pom.xml @@ -27,7 +27,10 @@ xchange-core ${project.version} - + + org.projectlombok + lombok + org.mockito mockito-core diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/AscendexAdapters.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/AscendexAdapters.java index bfbdd3a65b2..66fa318bf3f 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/AscendexAdapters.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/AscendexAdapters.java @@ -8,12 +8,14 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -import org.knowm.xchange.ascendex.dto.account.AscendexCashAccountBalanceDto; +import org.knowm.xchange.ascendex.dto.balance.AscendexCashAccountBalanceDto; +import org.knowm.xchange.ascendex.dto.enums.AscendexOrderType; +import org.knowm.xchange.ascendex.dto.enums.AscendexSide; import org.knowm.xchange.ascendex.dto.marketdata.AscendexAssetDto; import org.knowm.xchange.ascendex.dto.marketdata.AscendexMarketTradesDto; import org.knowm.xchange.ascendex.dto.marketdata.AscendexOrderbookDto; import org.knowm.xchange.ascendex.dto.marketdata.AscendexProductDto; -import org.knowm.xchange.ascendex.dto.trade.AscendexFlags; +import org.knowm.xchange.ascendex.dto.enums.AscendexFlags; import org.knowm.xchange.ascendex.dto.trade.AscendexOpenOrdersResponse; import org.knowm.xchange.ascendex.dto.trade.AscendexPlaceOrderRequestPayload; import org.knowm.xchange.currency.Currency; @@ -98,10 +100,10 @@ public static AscendexPlaceOrderRequestPayload adaptLimitOrderToAscendexPlaceOrd limitOrder.getInstrument().toString(), Date.from(Instant.now()).toInstant().toEpochMilli(), limitOrder.getOriginalAmount().toString(), - AscendexPlaceOrderRequestPayload.AscendexOrderType.limit, + AscendexOrderType.limit, limitOrder.getType().equals(Order.OrderType.ASK) - ? AscendexPlaceOrderRequestPayload.AscendexSide.sell - : AscendexPlaceOrderRequestPayload.AscendexSide.buy, + ? AscendexSide.sell + : AscendexSide.buy, null, limitOrder.getLimitPrice().toString(), null, @@ -207,8 +209,8 @@ public static ExchangeMetaData adaptExchangeMetaData( } public static Order.OrderType adaptAscendexSideToOrderType( - AscendexPlaceOrderRequestPayload.AscendexSide ascendexSide) { - if (AscendexPlaceOrderRequestPayload.AscendexSide.buy.equals(ascendexSide)) { + AscendexSide ascendexSide) { + if (AscendexSide.buy.equals(ascendexSide)) { return Order.OrderType.BID; } else { return Order.OrderType.ASK; diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/IAscendex.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/IAscendex.java index 3eab130d1e0..3c6a5db5b5a 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/IAscendex.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/IAscendex.java @@ -2,47 +2,56 @@ import java.io.IOException; import java.util.List; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; +import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import org.knowm.xchange.ascendex.dto.AscendexResponse; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexAssetDto; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexBarHistDto; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexMarketTradesDto; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexOrderbookDto; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexProductDto; +import org.knowm.xchange.ascendex.dto.enums.AccountCategory; +import org.knowm.xchange.ascendex.dto.marketdata.*; -@Path("api/pro/v1") +@Path("api/pro") @Produces(MediaType.APPLICATION_JSON) public interface IAscendex { - + /**=========================Market Data (Public)======================================**/ @GET - @Path("/assets") + @Path("/v1/assets") + @Deprecated AscendexResponse> getAllAssets() throws IOException; @GET - @Path("/products") + @Path("/v2/assets") + AscendexResponse> getAllAssetsV2() throws IOException; + + @GET + @Path("/v1/products") AscendexResponse> getAllProducts() throws IOException; @GET - @Path("/depth") - AscendexResponse getOrderbookDepth(@QueryParam("symbol") String symbol) - throws IOException; + @Path("/v1/{accountCategory}/products") + AscendexResponse> getAllProducts(@PathParam("accountCategory") AccountCategory accountCategory) throws IOException; @GET - @Path("/trades") - AscendexResponse getTrades(@QueryParam("symbol") String symbol) - throws IOException; + @Path("/v1/spot/ticker") + AscendexResponse getTicker( @QueryParam("symbol") String symbol) throws IOException; @GET - @Path("/barhist") + @Path("/v1/barhist") AscendexResponse> getHistoricalBarData( - @QueryParam("symbol") String symbol, - @QueryParam("interval") String internal, - @QueryParam("to") Long to, - @QueryParam("from") Long from, - @QueryParam("n") Integer noOfBars) + @QueryParam("symbol") String symbol, + @QueryParam("interval") String internal, + @QueryParam("to") Long to, + @QueryParam("from") Long from, + @QueryParam("n") Integer noOfBars) + throws IOException; + + @GET + @Path("/v1/depth") + AscendexResponse getOrderbookDepth(@QueryParam("symbol") String symbol) throws IOException; + + @GET + @Path("/v1/trades") + AscendexResponse getTrades(@QueryParam("symbol") String symbol,@QueryParam("n") Integer n) + throws IOException; + + } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/IAscendexAuthenticated.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/IAscendexAuthenticated.java index 50c82851c19..092cdfce2cd 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/IAscendexAuthenticated.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/IAscendexAuthenticated.java @@ -2,97 +2,237 @@ import java.io.IOException; import java.util.List; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; +import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import org.knowm.xchange.ascendex.dto.AscendexResponse; -import org.knowm.xchange.ascendex.dto.account.AscendexCashAccountBalanceDto; -import org.knowm.xchange.ascendex.dto.trade.AscendexOpenOrdersResponse; -import org.knowm.xchange.ascendex.dto.trade.AscendexOrderResponse; -import org.knowm.xchange.ascendex.dto.trade.AscendexPlaceOrderRequestPayload; +import org.knowm.xchange.ascendex.dto.account.*; +import org.knowm.xchange.ascendex.dto.balance.*; +import org.knowm.xchange.ascendex.dto.enums.AccountCategory; +import org.knowm.xchange.ascendex.dto.enums.AscendexTransactionType; +import org.knowm.xchange.ascendex.dto.trade.*; +import org.knowm.xchange.ascendex.dto.wallet.AscendDepositAddressesDto; +import org.knowm.xchange.ascendex.dto.wallet.AscendexWalletTransactionHistoryDto; import si.mazi.rescu.ParamsDigest; -@Path("api/pro/v1") +@Path("") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public interface IAscendexAuthenticated extends IAscendex { + /**=========================Account======================================**/ + @GET + @Path("api/pro/v1/info") + AscendexResponse getAscendexAccountInfo( + + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature) + throws IOException; + + @GET + @Path("{account-group}/api/pro/v1/spot/fee/info") + AscendexResponse getAscendexVIPFeeSchedule( + @PathParam("account-group") String accountGroup, + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature) + throws IOException; + + @GET + @Path("{account-group}/api/pro/v1/spot/fee") + AscendexResponse getAscendexSymbolFeeSchedule( + @PathParam("account-group") String accgruop, + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature) + throws IOException; + + + @GET + @Path("/api/pro/v2/risk-limit-info") + AscendexResponse getAscendexRiskLimitInfo() + throws IOException; + + + @GET + @Path("/api/pro/v1/exchange-info") + AscendexResponse getAscendexExchangeLatencyInfo( + @QueryParam("requestTime") Long requestTime + ) + throws IOException; + + /**=========================Balance======================================**/ @GET - @Path("/cash/balance") - AscendexResponse> getCashAccountBalance( + @Path("{account-group}/api/pro/v1/cash/balance") + AscendexResponse> getAscendexCashAccountBalance( + @QueryParam("asset") String asset, + @QueryParam("showAll") Boolean showAll, + @PathParam("account-group") String accountGroup, @HeaderParam("x-auth-key") String apiKey, @HeaderParam("x-auth-timestamp") Long nonce, @HeaderParam("x-auth-signature") ParamsDigest signature) throws IOException; + @GET + @Path("{account-group}/api/pro/v1/margin/balance") + AscendexResponse> getAscendexMarginAccountBalance( + @QueryParam("asset") String asset, + @QueryParam("showAll") Boolean showAll, + @PathParam("account-group") String accountGroup, + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature) + throws IOException; + + @GET + @Path("{account-group}/api/pro/v1/margin/risk") + AscendexResponse getAscendexMarginRisk( + @PathParam("account-group") String accountGroup, + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature) + throws IOException; + + @POST + @Path("{account-group}/api/pro/v1/transfer") + AscendexResponse getAscendexBalanceTransfer( + AscendexBalanceTransferRequestPayload payload, + @PathParam("account-group") String accountGroup, + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature) + throws IOException; + +// TODO Balance Transfer for Subaccount +// TODO Balance Transfer history for Subaccount + + + /**=========================Balance Snapshot And Update Detail======================================**/ +@GET +@Path("api/pro/data/v1/{type}/balance/snapshot") +AscendexBalanceSnapshotDto getAscendexBalanceSnapshot( + @QueryParam("date")String date, + @PathParam("type") AccountCategory AccountCategory, + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature)throws IOException; + + + @GET + @Path("api/pro/data/v1/{type}/balance/history") + AscendexOrderAndBalanceDetailDto getAscendexOrderAndBalanceDetail( + @QueryParam("date")String date, + @PathParam("type") AccountCategory AccountCategory, + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature)throws IOException; + + /**=========================Wallet======================================**/ + @GET + @Path("api/pro/v1/wallet/deposit/address") + AscendexResponse getAscendexDepositAddresses( + @QueryParam("asset")String asset, + @QueryParam("blockchain")String blockchain, + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature)throws IOException; + + @GET + @Path("api/pro/v1/wallet/transactions") + AscendexResponse getAscendexWalletTransactionHistory( + @QueryParam("asset") String asset, + @QueryParam("txType") AscendexTransactionType txType, + @QueryParam("page") Integer page, + @QueryParam("pageSize") Integer pageSize, + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature)throws IOException; + + + /**=========================Order======================================**/ @POST - @Path("/{account-category}/order") + @Path("{account-group}/api/pro/v1/{account-category}/order") AscendexResponse placeOrder( + @PathParam("account-group") String accountGroup, @HeaderParam("x-auth-key") String apiKey, @HeaderParam("x-auth-timestamp") Long nonce, @HeaderParam("x-auth-signature") ParamsDigest signature, - @PathParam("account-category") String accountCategory, + @PathParam("account-category") AccountCategory accountCategory, AscendexPlaceOrderRequestPayload payload) throws IOException; @DELETE - @Path("/{account-category}/order") + @Path("{account-group}/api/pro/v1/{account-category}/order") AscendexResponse cancelOrder( + @PathParam("account-group") String accountGroup, @HeaderParam("x-auth-key") String apiKey, @HeaderParam("x-auth-timestamp") Long nonce, @HeaderParam("x-auth-signature") ParamsDigest signature, - @PathParam("account-category") String accountCategory, - @QueryParam("orderId") String orderId, - @QueryParam("symbol") String symbol, - @QueryParam("time") Long time) + @PathParam("account-category") AccountCategory accountCategory, + AscendexCancelOrderRequestPayload payload) throws IOException; @DELETE - @Path("/{account-category}/order/all") + @Path("{account-group}/api/pro/v1/{account-category}/order/all") AscendexResponse cancelAllOrders( + @PathParam("account-group") String accountGroup, @HeaderParam("x-auth-key") String apiKey, @HeaderParam("x-auth-timestamp") Long nonce, @HeaderParam("x-auth-signature") ParamsDigest signature, - @PathParam("account-category") String accountCategory, + @PathParam("account-category") AccountCategory accountCategory, @QueryParam("symbol") String symbol) throws IOException; + // TODO Place Batch Orders Cancel Batch Orders + + @GET + @Path("{account-group}/api/pro/v1/{account-category}/order/status") + AscendexResponse getOrderById( + @PathParam("account-group") String accountGroup, + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature, + @PathParam("account-category") AccountCategory accountCategory, + @QueryParam("orderId") String orderId) + throws IOException; + @GET - @Path("/{account-category}/order/open") + @Path("{account-group}/api/pro/v1/{account-category}/order/open") AscendexResponse> getOpenOrders( + @PathParam("account-group") String accountGroup, @HeaderParam("x-auth-key") String apiKey, @HeaderParam("x-auth-timestamp") Long nonce, @HeaderParam("x-auth-signature") ParamsDigest signature, - @PathParam("account-category") String accountCategory, + @PathParam("account-category") AccountCategory accountCategory, @QueryParam("symbol") String symbol) throws IOException; - @GET - @Path("/{account-category}/order/status") - AscendexResponse getOrderById( - @HeaderParam("x-auth-key") String apiKey, - @HeaderParam("x-auth-timestamp") Long nonce, - @HeaderParam("x-auth-signature") ParamsDigest signature, - @PathParam("account-category") String accountCategory, - @QueryParam("orderId") String orderId) - throws IOException; + @GET - @Path("/{account-category}/order/hist/current") + @Path("{account-group}/api/pro/v1/{account-category}/order/hist/current") AscendexResponse> getOrdersHistory( + @PathParam("account-group") String accountGroup, @HeaderParam("x-auth-key") String apiKey, @HeaderParam("x-auth-timestamp") Long nonce, @HeaderParam("x-auth-signature") ParamsDigest signature, - @PathParam("account-category") String accountCategory, + @PathParam("account-category") AccountCategory accountCategory, @QueryParam("n") int numberOfRecords, @QueryParam("symbol") String symbol, @QueryParam("executedOnly") boolean executedOnly) throws IOException; + + @GET + @Path("api/pro/data/v2/order/hist") + AscendexResponse> getOrdersHistoryV2( + @HeaderParam("x-auth-key") String apiKey, + @HeaderParam("x-auth-timestamp") Long nonce, + @HeaderParam("x-auth-signature") ParamsDigest signature, + @QueryParam("account") AccountCategory accountCategory, + @QueryParam("symbol") String symbol, + @QueryParam("startTime") Long startTime, + @QueryParam("endTime") Long endTime, + @QueryParam("seqNum") Long seqNum, + @QueryParam("limit") Integer limit) + throws IOException; } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexAccountInfoDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexAccountInfoDto.java new file mode 100644 index 00000000000..3fc0c836e1c --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexAccountInfoDto.java @@ -0,0 +1,34 @@ +package org.knowm.xchange.ascendex.dto.account; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * Package:org.knowm.xchange.ascendex.dto.account + * Description: + * + * @date:2022/7/14 21:15 + * @author:wodepig + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexAccountInfoDto { + private Integer accountGroup; + private String email; + /** + * If -1, the api key will not expire + */ + private Long expireTime; + private List allowedIps; + private List cashAccount; + private List marginAccount; + private String userUID; + private Boolean tradePermission; + private Boolean transferPermission; + private Boolean viewPermission; + +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexCashAccountBalanceDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexCashAccountBalanceDto.java deleted file mode 100644 index a4a708d63ec..00000000000 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexCashAccountBalanceDto.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.knowm.xchange.ascendex.dto.account; - -import com.fasterxml.jackson.annotation.JsonProperty; -import java.math.BigDecimal; - -public class AscendexCashAccountBalanceDto { - - private final String asset; - - private final BigDecimal totalBalance; - - private final BigDecimal availableBalance; - - public AscendexCashAccountBalanceDto( - @JsonProperty("asset") String asset, - @JsonProperty("totalBalance") BigDecimal totalBalance, - @JsonProperty("availableBalance") BigDecimal availableBalance) { - this.asset = asset; - this.totalBalance = totalBalance; - this.availableBalance = availableBalance; - } - - public String getAsset() { - return asset; - } - - public BigDecimal getTotalBalance() { - return totalBalance; - } - - public BigDecimal getAvailableBalance() { - return availableBalance; - } - - @Override - public String toString() { - return "AscendexCashAccountBalanceDto{" - + "asset='" - + asset - + '\'' - + ", totalBalance=" - + totalBalance - + ", availableBalance=" - + availableBalance - + '}'; - } -} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexExchangeLatencyInfoDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexExchangeLatencyInfoDto.java new file mode 100644 index 00000000000..18ebe4741a3 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexExchangeLatencyInfoDto.java @@ -0,0 +1,22 @@ +package org.knowm.xchange.ascendex.dto.account; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.checkerframework.checker.units.qual.A; + +/** + * Package:org.knowm.xchange.ascendex.dto.account + * Description: + * + * @date:2022/7/16 12:54 + * @author:wodepig + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexExchangeLatencyInfoDto { + private Long requestTimeEcho; + private Long requestReceiveAt; + private Integer latency; +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexRiskLimitInfoDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexRiskLimitInfoDto.java new file mode 100644 index 00000000000..fa3f43d3c57 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexRiskLimitInfoDto.java @@ -0,0 +1,122 @@ +package org.knowm.xchange.ascendex.dto.account; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Package:org.knowm.xchange.ascendex.dto.account + * Description: + * + * @date:2022/7/16 12:45 + * @author:wodepig + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AscendexRiskLimitInfoDto { + private String ip; + private WebSocket webSocket; + + @Data + public static class Level2ReqThreshold { + + private Integer place_order; + private Integer cancel_order; + private Integer cancel_all; + private Integer batch_place_order; + private Integer batch_cancel_order; + private Integer depth_snapshot; + private Integer depth_snapshot_top100; + private Integer market_trades; + private Integer balance; + private Integer open_order; + private Integer margin_risk; + private Integer futures_account_snapshot; + private Integer futures_open_orders; + + } + + @Data + public static class MessageThreshold { + + private Level1OpThreshold level1OpThreshold; + private Level2OpThreshold level2OpThreshold; + private Level1ReqThreshold level1ReqThreshold; + private Level2ReqThreshold level2ReqThreshold; + + } + + @Data + public static class WebSocket { + + private Status status; + private Limits limits; + private MessageThreshold messageThreshold; + + } + + + @Data + public static class Level1ReqThreshold { + + private Integer place_order; + private Integer cancel_order; + private Integer cancel_all; + private Integer batch_place_order; + private Integer batch_cancel_order; + private Integer depth_snapshot; + private Integer depth_snapshot_top100; + private Integer market_trades; + private Integer balance; + private Integer open_order; + private Integer margin_risk; + private Integer futures_account_snapshot; + private Integer futures_open_orders; + + } + + + @Data + public static class Level2OpThreshold { + + private Integer auth; + private Integer ping; + private Integer pong; + private Integer sub; + private Integer unsub; + private Integer req; + + } + + + @Data + public static class Level1OpThreshold { + + private Integer auth; + private Integer ping; + private Integer pong; + private Integer sub; + private Integer unsub; + private Integer req; + + } + + @Data + public static class Limits { + + private Integer maxWebSocketSessionsPerIpAccountGroup; + private Integer maxWebSocketSessionsPerIpTotal; + + } + + @Data + public static class Status { + + private Boolean isBanned; + private Integer bannedUntil; + private Integer violationCode; + private String reason; + + } +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexSymbolFeeDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexSymbolFeeDto.java new file mode 100644 index 00000000000..2ed4e74edd9 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexSymbolFeeDto.java @@ -0,0 +1,41 @@ +package org.knowm.xchange.ascendex.dto.account; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +/** + * Package:org.knowm.xchange.ascendex.dto.account + * Description: + * + * @date:2022/7/16 11:10 + * @author:wodepig + */ +@Data +public class AscendexSymbolFeeDto { + private String domain; + private String userUID; + private Integer vipLevel; + @JsonProperty("fees") + private List productFee; + + @Data + public static class ProductFee{ + + private Fee fee; + private String symbol; + + } + + @Data + public static class Fee{ + + private BigDecimal maker; + private BigDecimal taker; + + } +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexVIPFeeScheduleDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexVIPFeeScheduleDto.java new file mode 100644 index 00000000000..b1bc075ab0c --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/account/AscendexVIPFeeScheduleDto.java @@ -0,0 +1,44 @@ +package org.knowm.xchange.ascendex.dto.account; + + +import lombok.Data; + + +/** + * Package:org.knowm.xchange.ascendex.dto.account + * Description: + * + * @date:2022/7/16 11:00 + * @author:wodepig + */ +@Data +public class AscendexVIPFeeScheduleDto { + private String domain; + private String userUID; + private Integer vipLevel; + private GenericFee genericFee; + + @Data + public static class GenericFee{ + + private LargeCap largeCap; + private SmallCap smallCap; + + } + + @Data + public static class SmallCap{ + + private String maker; + private String taker; + + } + + @Data + public static class LargeCap{ + + private String maker; + private String taker; + + } +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexBalanceSnapshotDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexBalanceSnapshotDto.java new file mode 100644 index 00000000000..81b2dc8d441 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexBalanceSnapshotDto.java @@ -0,0 +1,44 @@ +package org.knowm.xchange.ascendex.dto.balance; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +/** + * Package:org.knowm.xchange.ascendex.dto.account + * Description: + * + * @date:2022/7/16 21:13 + * @author:wodepig + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexBalanceSnapshotDto { + + + private Meta meta; + + private List balance; + + @Data + public static class Meta { + + private String ac; + private String accountId; + private Long sn; + private Long balanceTime; + + } + + @Data + public static class Balance { + + private String asset; + private BigDecimal totalBalance; + + } +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexBalanceTransferRequestPayload.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexBalanceTransferRequestPayload.java new file mode 100644 index 00000000000..d6020d19f45 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexBalanceTransferRequestPayload.java @@ -0,0 +1,26 @@ +package org.knowm.xchange.ascendex.dto.balance; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.knowm.xchange.ascendex.dto.enums.AccountCategory; + +/** + * Package:org.knowm.xchange.ascendex.dto.account + * Description: + * + * @date:2022/7/16 20:20 + * @author:wodepig + */ +@Data +@AllArgsConstructor +public class AscendexBalanceTransferRequestPayload { + + String amount; + String asset; + AccountCategory fromAccount; + AccountCategory toAccount; + + public void setAsset(String asset) { + this.asset =asset==null?null: asset.toUpperCase(); + } +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexCashAccountBalanceDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexCashAccountBalanceDto.java new file mode 100644 index 00000000000..aea0cc00dbb --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexCashAccountBalanceDto.java @@ -0,0 +1,18 @@ +package org.knowm.xchange.ascendex.dto.balance; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexCashAccountBalanceDto { + + private String asset; + + private BigDecimal totalBalance; + + private BigDecimal availableBalance; +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexMarginAccountBalanceDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexMarginAccountBalanceDto.java new file mode 100644 index 00000000000..97bb8dab4e9 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexMarginAccountBalanceDto.java @@ -0,0 +1,22 @@ +package org.knowm.xchange.ascendex.dto.balance; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexMarginAccountBalanceDto { + + private String asset; + + private BigDecimal totalBalance; + + private BigDecimal availableBalance; + private BigDecimal borrowed; + private BigDecimal interest; + +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexMarginRiskDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexMarginRiskDto.java new file mode 100644 index 00000000000..1609e8fb823 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexMarginRiskDto.java @@ -0,0 +1,30 @@ +package org.knowm.xchange.ascendex.dto.balance; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * Package:org.knowm.xchange.ascendex.dto.account + * Description: + * + * @date:2022/7/16 19:57 + * @author:wodepig + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexMarginRiskDto { + private Integer accountMaxLeverage; + private BigDecimal availableBalanceInUSDT; + private BigDecimal totalBalanceInUSDT; + private BigDecimal totalBorrowedInUSDT; + private BigDecimal totalInterestInUSDT; + private BigDecimal netBalanceInUSDT; + private BigDecimal pointsBalance; + private Integer currentLeverage; + private BigDecimal cushion; + +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexOrderAndBalanceDetailDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexOrderAndBalanceDetailDto.java new file mode 100644 index 00000000000..5416376fa17 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/balance/AscendexOrderAndBalanceDetailDto.java @@ -0,0 +1,64 @@ +package org.knowm.xchange.ascendex.dto.balance; + +import lombok.Data; +import org.knowm.xchange.ascendex.dto.enums.AscendexOrderType; +import org.knowm.xchange.ascendex.dto.trade.AscendexPlaceOrderRequestPayload; + +import java.math.BigDecimal; +import java.util.List; + +/** + * Package:org.knowm.xchange.ascendex.dto.balance + * Description: + * + * @date:2022/7/18 11:02 + * @author:wodepig + */ +@Data +public class AscendexOrderAndBalanceDetailDto { + private Meta meta; + private List order; + private List balance; + + @Data + public static class Meta { + + private String ac; + private String accountId; + + } + + + + @Data + public static class Order { + + private List data; + private String liquidityInd; + private String orderId; + private AscendexOrderType orderType; + private String side; + private Long sn; + private Long transactTime; + + } + + @Data + public static class DataDetail { + private String asset; + private BigDecimal curBalance; + private String dataType; + private BigDecimal deltaQty; + + } + + @Data + public static class Balance { + + private List data; + private String eventType; + private Long sn; + private Long transactTime; + + } +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AccountCategory.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AccountCategory.java new file mode 100644 index 00000000000..8592bd446c7 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AccountCategory.java @@ -0,0 +1,17 @@ +package org.knowm.xchange.ascendex.dto.enums; + +/** + * Package:org.knowm.xchange.ascendex + * Description: + * + * @date:2022/7/14 18:00 + * @author:wodepig + */ +public enum AccountCategory { + cash, + Cash, + margin, + Margin, + futures, + Futures; +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexAssetStatus.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexAssetStatus.java new file mode 100644 index 00000000000..9618523883e --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexAssetStatus.java @@ -0,0 +1,10 @@ +package org.knowm.xchange.ascendex.dto.enums; + +public enum AscendexAssetStatus { + Normal, + NoDeposit, + NoTrading, + NoWithdraw, + InternalTrading, + NoTransaction + } \ No newline at end of file diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexFlags.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexFlags.java similarity index 70% rename from xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexFlags.java rename to xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexFlags.java index 61197e9d123..13552e1c239 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexFlags.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexFlags.java @@ -1,4 +1,4 @@ -package org.knowm.xchange.ascendex.dto.trade; +package org.knowm.xchange.ascendex.dto.enums; import org.knowm.xchange.dto.Order; diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexOrderType.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexOrderType.java new file mode 100644 index 00000000000..806a6a380df --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexOrderType.java @@ -0,0 +1,10 @@ +package org.knowm.xchange.ascendex.dto.enums; + +public enum AscendexOrderType { + market, + Market, + limit, + Limit, + stop_market, + stop_limit; + } \ No newline at end of file diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexProductCommissionType.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexProductCommissionType.java new file mode 100644 index 00000000000..f38e8161460 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexProductCommissionType.java @@ -0,0 +1,7 @@ +package org.knowm.xchange.ascendex.dto.enums; + +public enum AscendexProductCommissionType { + Base, + Quote, + Received + } \ No newline at end of file diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexRespInst.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexRespInst.java new file mode 100644 index 00000000000..be03c7626c9 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexRespInst.java @@ -0,0 +1,16 @@ +package org.knowm.xchange.ascendex.dto.enums; + +/** + * Package:org.knowm.xchange.ascendex.dto.enums + * Description: + * https://ascendex.github.io/ascendex-pro-api/#place-order + * @date:2022/7/20 9:42 + * @author:wodepig + */ +public enum AscendexRespInst { + + ACK, + ACCEPT, + DONE + +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexSide.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexSide.java new file mode 100644 index 00000000000..23b78691244 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexSide.java @@ -0,0 +1,8 @@ +package org.knowm.xchange.ascendex.dto.enums; + +public enum AscendexSide { + buy, + Buy, + sell, + Sell + } \ No newline at end of file diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexTimeInForce.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexTimeInForce.java new file mode 100644 index 00000000000..ce2565ded9d --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexTimeInForce.java @@ -0,0 +1,17 @@ +package org.knowm.xchange.ascendex.dto.enums; + +/** + * Package:org.knowm.xchange.ascendex.dto.enums + * Description: + * + * @date:2022/7/20 9:41 + * @author:wodepig + */ +public enum AscendexTimeInForce { + // good-till-canceled有效直到取消 + GTC, + // immediate-or-cancel立即成交或取消 + IOC, + // fill-or-kill全部成交或取消 + FOK; +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexTransactionType.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexTransactionType.java new file mode 100644 index 00000000000..623e0e19841 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/enums/AscendexTransactionType.java @@ -0,0 +1,13 @@ +package org.knowm.xchange.ascendex.dto.enums; + +/** + * Package:org.knowm.xchange.ascendex.dto.enums + * Description: + * + * @date:2022/7/19 9:56 + * @author:wodepig + */ +public enum AscendexTransactionType { + deposit, + withdrawal +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexAssetDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexAssetDto.java index 0168fe86f7c..17b5d916d04 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexAssetDto.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexAssetDto.java @@ -1,97 +1,70 @@ package org.knowm.xchange.ascendex.dto.marketdata; -import com.fasterxml.jackson.annotation.JsonProperty; -import java.math.BigDecimal; - -public class AscendexAssetDto { - - private final String assetCode; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.knowm.xchange.ascendex.dto.enums.AscendexAssetStatus; - private final String assetName; - private final int precisionScale; - - private final int nativeScale; - - private final BigDecimal withdrawalFee; +import java.math.BigDecimal; +import java.util.List; - private final BigDecimal minWithdrawalAmt; +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexAssetDto { - private final AscendexAssetStatus status; + private String assetCode; - public AscendexAssetDto( - @JsonProperty("assetCode") String assetCode, - @JsonProperty("assetName") String assetName, - @JsonProperty("precisionScale") int precisionScale, - @JsonProperty("nativeScale") int nativeScale, - @JsonProperty("withdrawalFee") BigDecimal withdrawalFee, - @JsonProperty("nimWithdrawalAmt") BigDecimal minWithdrawalAmt, - @JsonProperty("status") AscendexAssetStatus status) { - this.assetCode = assetCode; - this.assetName = assetName; - this.precisionScale = precisionScale; - this.nativeScale = nativeScale; - this.withdrawalFee = withdrawalFee; - this.minWithdrawalAmt = minWithdrawalAmt; - this.status = status; - } + private String assetName; - public String getAssetCode() { - return assetCode; - } + private int precisionScale; - public String getAssetName() { - return assetName; - } + private int nativeScale; + /** + * v2 remove + */ + private BigDecimal withdrawalFee; + private BigDecimal minWithdrawalAmt; + private AscendexAssetStatus status; + /** + * v2 add + */ + private List blockChain; - public int getPrecisionScale() { - return precisionScale; - } - public int getNativeScale() { - return nativeScale; - } public BigDecimal getWithdrawFee() { + if (blockChain!=null&&blockChain.size()!=0){ + return blockChain.get(0).getWithdrawFee(); + } return withdrawalFee; } public BigDecimal getMinWithdrawalAmt() { + if (blockChain!=null&&blockChain.size()!=0){ + return blockChain.get(0).getMinWithdrawal(); + } return minWithdrawalAmt; } public AscendexAssetStatus getStatus() { - return status; + return status==null?AscendexAssetStatus.Normal:status; } - @Override - public String toString() { - return "AscendexAssetDto{" - + "assetCode='" - + assetCode - + '\'' - + ", assetName='" - + assetName - + '\'' - + ", precisionScale=" - + precisionScale - + ", nativeScale=" - + nativeScale - + ", withdrawFee=" - + withdrawalFee - + ", minWithdrawalAmt=" - + minWithdrawalAmt - + ", status=" - + status - + '}'; - } - public enum AscendexAssetStatus { - Normal, - NoDeposit, - NoTrading, - NoWithdraw, - InternalTrading, - NoTransaction + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class AscendexAssetBlockChain { + private String chainName; + private BigDecimal withdrawFee; + private Boolean allowDeposit; + private Boolean allowWithdraw; + private BigDecimal minDepositAmt; + private BigDecimal minWithdrawal; + private Integer numConfirmations; + } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexBarDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexBarDto.java index bf81f23a775..2a4ba75f781 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexBarDto.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexBarDto.java @@ -1,83 +1,26 @@ package org.knowm.xchange.ascendex.dto.marketdata; import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +@Data +@NoArgsConstructor +@AllArgsConstructor public class AscendexBarDto { - private final Long timestamp; - private final String interval; - private final String openPrice; - private final String closePrice; - private final String highPrice; - private final String lowPrice; - private final String volume; - - public AscendexBarDto( - @JsonProperty("ts") Long timestamp, - @JsonProperty("i") String interval, - @JsonProperty("o") String openPrice, - @JsonProperty("c") String closePrice, - @JsonProperty("h") String highPrice, - @JsonProperty("l") String lowPrice, - @JsonProperty("v") String volume) { - this.timestamp = timestamp; - this.interval = interval; - this.openPrice = openPrice; - this.closePrice = closePrice; - this.highPrice = highPrice; - this.lowPrice = lowPrice; - this.volume = volume; - } - - public Long getTimestamp() { - return timestamp; - } - - public String getInterval() { - return interval; - } - - public String getOpenPrice() { - return openPrice; - } - - public String getClosePrice() { - return closePrice; - } - - public String getHighPrice() { - return highPrice; - } - - public String getLowPrice() { - return lowPrice; - } - - public String getVolume() { - return volume; - } - - @Override - public String toString() { - return "AscendexBarDto{" - + "timestamp=" - + timestamp - + ", interval='" - + interval - + '\'' - + ", openPrice='" - + openPrice - + '\'' - + ", closePrice=" - + closePrice - + ", highPrice='" - + highPrice - + '\'' - + ", lowPrice='" - + lowPrice - + '\'' - + ", volume='" - + volume - + '\'' - + '}'; - } + @JsonProperty("ts") + private Long timestamp; + @JsonProperty("i") + private String interval; + @JsonProperty("o") + private String openPrice; + @JsonProperty("c") + private String closePrice; + @JsonProperty("h") + private String highPrice; + @JsonProperty("l") + private String lowPrice; + @JsonProperty("v") + private String volume; } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexBarHistDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexBarHistDto.java index 563aa0d4c9c..df07c87528b 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexBarHistDto.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexBarHistDto.java @@ -1,46 +1,20 @@ package org.knowm.xchange.ascendex.dto.marketdata; import com.fasterxml.jackson.annotation.JsonProperty; -import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexBarHistDto { + @JsonProperty("m") + private String m; + @JsonProperty("s") + private String symbol; + @JsonProperty("data") + private AscendexBarDto bar; -public class AscendexBarHistDto implements Serializable { - - private final String m; - private final String symbol; - private final AscendexBarDto bar; - - public AscendexBarHistDto( - @JsonProperty("m") String m, - @JsonProperty("s") String symbol, - @JsonProperty("data") AscendexBarDto bar) { - this.m = m; - this.symbol = symbol; - this.bar = bar; - } - - public String getM() { - return m; - } - - public String getSymbol() { - return symbol; - } - - public AscendexBarDto getBar() { - return bar; - } - - @Override - public String toString() { - return "AscendexBarHistDto{" - + "m='" - + m - + '\'' - + ", symbol='" - + symbol - + '\'' - + ", bar=" - + bar - + '}'; - } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexMarketTradesDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexMarketTradesDto.java index 4c4333880b5..3b853922658 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexMarketTradesDto.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexMarketTradesDto.java @@ -1,116 +1,47 @@ package org.knowm.xchange.ascendex.dto.marketdata; -import com.fasterxml.jackson.annotation.JsonCreator; + import com.fasterxml.jackson.annotation.JsonProperty; -import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.util.Date; import java.util.List; -public class AscendexMarketTradesDto implements Serializable { - - private final String m; - - private final String symbol; - - private final List data; - @JsonCreator - public AscendexMarketTradesDto( - @JsonProperty("m") String m, - @JsonProperty("symbol") String symbol, - @JsonProperty("data") List data) { - this.m = m; - this.symbol = symbol; - this.data = data; - } +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexMarketTradesDto{ - public String getM() { - return m; - } + @JsonProperty("m") + private String m; - public String getSymbol() { - return symbol; - } + @JsonProperty("symbol") + private String symbol; - public List getData() { - return data; - } + @JsonProperty("data") + private List data; - @Override - public String toString() { - return "AscendexMarketTradesDto{" - + "m='" - + m - + '\'' - + ", symbol='" - + symbol - + '\'' - + ", data=" - + data - + '}'; - } + @Data + @NoArgsConstructor + @AllArgsConstructor public static class AscendexMarketTradesData { - private final String seqnum; - - private final BigDecimal price; - - private final BigDecimal quantity; - - private final Date timestamp; - - private final boolean isBuyerMaker; - - @JsonCreator - public AscendexMarketTradesData( - @JsonProperty("seqnum") String seqnum, - @JsonProperty("p") BigDecimal price, - @JsonProperty("q") BigDecimal quantity, - @JsonProperty("ts") Date timestamp, - @JsonProperty("bm") boolean isBuyerMaker) { - this.seqnum = seqnum; - this.price = price; - this.quantity = quantity; - this.timestamp = timestamp; - this.isBuyerMaker = isBuyerMaker; - } - - public String getSeqnum() { - return seqnum; - } - - public BigDecimal getPrice() { - return price; - } + @JsonProperty("seqnum") + private String seqnum; - public BigDecimal getQuantity() { - return quantity; - } + @JsonProperty("p") + private BigDecimal price; - public Date getTimestamp() { - return timestamp; - } + @JsonProperty("q") + private BigDecimal quantity; - public boolean isBuyerMaker() { - return isBuyerMaker; - } + @JsonProperty("ts") + private Date timestamp; - @Override - public String toString() { - return "AscendexMarketTradesData{" - + "seqnum='" - + seqnum - + '\'' - + ", price=" - + price - + ", quantity=" - + quantity - + ", timestamp=" - + timestamp - + ", isBuyerMaker=" - + isBuyerMaker - + '}'; - } + @JsonProperty("bm") + private boolean isBuyerMaker; } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexOrderbookDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexOrderbookDto.java index eec9320c44d..ff6e03d98c2 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexOrderbookDto.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexOrderbookDto.java @@ -1,101 +1,38 @@ package org.knowm.xchange.ascendex.dto.marketdata; -import com.fasterxml.jackson.annotation.JsonProperty; -import java.time.Instant; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; import java.util.Date; import java.util.List; +@Data +@NoArgsConstructor +@AllArgsConstructor public class AscendexOrderbookDto { - private final String m; - - private final String symbol; - - private final AscendexOrderbookData data; - - public AscendexOrderbookDto( - @JsonProperty("m") String m, - @JsonProperty("symbol") String symbol, - @JsonProperty("data") AscendexOrderbookData data) { - this.m = m; - this.symbol = symbol; - this.data = data; - } - - public String getM() { - return m; - } + private String m; - public String getSymbol() { - return symbol; - } + private String symbol; - public AscendexOrderbookData getData() { - return data; - } + private AscendexOrderbookData data; - @Override - public String toString() { - return "AscendexOrderbookDto{" - + "m='" - + m - + '\'' - + ", symbol='" - + symbol - + '\'' - + ", data=" - + data - + '}'; - } + @Data + @NoArgsConstructor + @AllArgsConstructor public static class AscendexOrderbookData { - private final Long seqnum; + private Long seqnum; - private final Date ts; + private Date ts; - private final List asks; + private List asks; - private final List bids; - - public AscendexOrderbookData( - @JsonProperty("seqnum") Long seqnum, - @JsonProperty("ts") Long ts, - @JsonProperty("asks") List asks, - @JsonProperty("bids") List bids) { - this.seqnum = seqnum; - this.ts = Date.from(Instant.ofEpochMilli(ts)); - this.asks = asks; - this.bids = bids; - } - - public Long getSeqnum() { - return seqnum; - } + private List bids; public Date getTimestamp() { return ts; } - - public List getAsks() { - return asks; - } - - public List getBids() { - return bids; - } - - @Override - public String toString() { - return "AscendexOrderbookData{" - + "seqnum=" - + seqnum - + ", timestamp=" - + ts - + ", asks=" - + asks - + ", bids=" - + bids - + '}'; - } } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexProductBaseDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexProductBaseDto.java new file mode 100644 index 00000000000..abaa61ba092 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexProductBaseDto.java @@ -0,0 +1,29 @@ +package org.knowm.xchange.ascendex.dto.marketdata; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.knowm.xchange.ascendex.dto.enums.AscendexProductCommissionType; + +import java.math.BigDecimal; + +/** + * Package:org.knowm.xchange.ascendex.dto.marketdata + * Description: + * + * @date:2022/7/14 18:07 + * @author:wodepig + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexProductBaseDto { + private String symbol; + private BigDecimal minNotional; + private BigDecimal maxNotional; + private BigDecimal tickSize; + private BigDecimal lotSize; + private AscendexProductCommissionType commissionType; + private BigDecimal commissionReserveRate; +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexProductDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexProductDto.java index 0ccc31e5887..a1946152691 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexProductDto.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexProductDto.java @@ -1,135 +1,26 @@ package org.knowm.xchange.ascendex.dto.marketdata; -import com.fasterxml.jackson.annotation.JsonProperty; -import java.math.BigDecimal; -public class AscendexProductDto { +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.knowm.xchange.ascendex.dto.enums.AscendexAssetStatus; - private final String symbol; - private final String baseAsset; +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexProductDto extends AscendexProductBaseDto { - private final String quoteAsset; + private String baseAsset; - private final AscendexAssetDto.AscendexAssetStatus status; + private String quoteAsset; - private final BigDecimal minNotional; + private AscendexAssetStatus status; - private final BigDecimal maxNotional; + private boolean marginTradable; - private final boolean marginTradable; - private final AscendexProductCommissionType commissionType; - - private final BigDecimal commissionReserveRate; - - private final BigDecimal tickSize; - - private final BigDecimal lotSize; - - public AscendexProductDto( - @JsonProperty("symbol") String symbol, - @JsonProperty("baseAsset") String baseAsset, - @JsonProperty("quoteAsset") String quoteAsset, - @JsonProperty("status") AscendexAssetDto.AscendexAssetStatus status, - @JsonProperty("minNotional") BigDecimal minNotional, - @JsonProperty("maxNotional") BigDecimal maxNotional, - @JsonProperty("marginTradable") boolean marginTradable, - @JsonProperty("commissionType") AscendexProductCommissionType commissionType, - @JsonProperty("commissionReserveRate") BigDecimal commissionReserveRate, - @JsonProperty("tickSize") BigDecimal tickSize, - @JsonProperty("lotSize") BigDecimal lotSize) { - this.symbol = symbol; - this.baseAsset = baseAsset; - this.quoteAsset = quoteAsset; - this.status = status; - this.minNotional = minNotional; - this.maxNotional = maxNotional; - this.marginTradable = marginTradable; - this.commissionType = commissionType; - this.commissionReserveRate = commissionReserveRate; - this.tickSize = tickSize; - this.lotSize = lotSize; - } - - public String getSymbol() { - return symbol; - } - - public String getBaseAsset() { - return baseAsset; - } - - public String getQuoteAsset() { - return quoteAsset; - } - - public AscendexAssetDto.AscendexAssetStatus getStatus() { - return status; - } - - public BigDecimal getMinNotional() { - return minNotional; - } - - public BigDecimal getMaxNotional() { - return maxNotional; - } - - public boolean isMarginTradeable() { - return marginTradable; - } - - public AscendexProductCommissionType getCommissionType() { - return commissionType; - } - - public BigDecimal getCommissionReserveRate() { - return commissionReserveRate; - } - - public BigDecimal getTickSize() { - return tickSize; - } - - public BigDecimal getLotSize() { - return lotSize; - } - - @Override - public String toString() { - return "AscendexProductDto{" - + "symbol='" - + symbol - + '\'' - + ", baseAsset='" - + baseAsset - + '\'' - + ", quoteAsset='" - + quoteAsset - + '\'' - + ", status=" - + status - + ", minNotional=" - + minNotional - + ", maxNotional=" - + maxNotional - + ", marginTradeable=" - + marginTradable - + ", commissionType=" - + commissionType - + ", commissionReserveRate=" - + commissionReserveRate - + ", tickSize=" - + tickSize - + ", lotSize=" - + lotSize - + '}'; - } - - public enum AscendexProductCommissionType { - Base, - Quote, - Received - } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexProductKindDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexProductKindDto.java new file mode 100644 index 00000000000..a8ecaad79e7 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexProductKindDto.java @@ -0,0 +1,32 @@ +package org.knowm.xchange.ascendex.dto.marketdata; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.knowm.xchange.ascendex.dto.enums.AscendexAssetStatus; + +import java.math.BigDecimal; +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexProductKindDto extends AscendexProductBaseDto { + + + private String displayName; + private String domain; + private Long tradingStartTime; + private String collapseDecimals; + private BigDecimal minQty; + private BigDecimal maxQty; + private AscendexAssetStatus statusCode; + private String statusMessage; + private boolean useTick; + private boolean useLot; + private BigDecimal qtyScale; + private BigDecimal priceScale; + private BigDecimal notionalScale; + +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexTickerDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexTickerDto.java new file mode 100644 index 00000000000..894d005e71b --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/marketdata/AscendexTickerDto.java @@ -0,0 +1,31 @@ +package org.knowm.xchange.ascendex.dto.marketdata; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +/** + * Package:org.knowm.xchange.ascendex.dto.marketdata + * Description: + * + * @date:2022/7/14 18:07 + * @author:wodepig + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AscendexTickerDto { + private String symbol; + private BigDecimal open; + private BigDecimal close; + private BigDecimal high; + private BigDecimal low; + private BigDecimal volume; + private List ask; + private List bid; + +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexCancelOrderRequestPayload.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexCancelOrderRequestPayload.java index d58a863a0a8..7f65cc7bd14 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexCancelOrderRequestPayload.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexCancelOrderRequestPayload.java @@ -1,50 +1,25 @@ package org.knowm.xchange.ascendex.dto.trade; -import com.fasterxml.jackson.annotation.JsonProperty; -public class AscendexCancelOrderRequestPayload { - - @JsonProperty("orderId") - private final String orderId; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.knowm.xchange.ascendex.dto.enums.AccountCategory; - @JsonProperty("symbol") - private final String symbol; - - @JsonProperty("time") - private final Long time; +@Data +@AllArgsConstructor +public class AscendexCancelOrderRequestPayload { + private String orderId; - public AscendexCancelOrderRequestPayload( - @JsonProperty("orderId") String orderId, - @JsonProperty("symbol") String symbol, - @JsonProperty("time") Long time) { - this.orderId = orderId; - this.symbol = symbol; - this.time = time; - } - public String getOrderId() { - return orderId; - } + private String symbol; - public String getSymbol() { - return symbol; - } - public Long getTime() { - return time; - } + private Long time; + @JsonIgnore + private AccountCategory accountCategory; - @Override - public String toString() { - return "AscendexCancelOrderRequestPayload{" - + ", orderId='" - + orderId - + '\'' - + ", symbol='" - + symbol - + '\'' - + ", time=" - + time - + '}'; + public void setSymbol(String symbol) { + this.symbol = symbol==null?null:symbol.toUpperCase(); } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexHistoryOrderResponse.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexHistoryOrderResponse.java new file mode 100644 index 00000000000..ba48c909419 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexHistoryOrderResponse.java @@ -0,0 +1,34 @@ +package org.knowm.xchange.ascendex.dto.trade; + +import lombok.Data; +import org.knowm.xchange.ascendex.dto.enums.AscendexOrderType; +import org.knowm.xchange.ascendex.dto.enums.AscendexSide; + +import java.math.BigDecimal; + +/** + * Package:org.knowm.xchange.ascendex.dto.trade + * Description: + * + * @date:2022/7/20 18:47 + * @author:wodepig + */ +@Data +public class AscendexHistoryOrderResponse { + private String orderId; + private Long seqNum; + private String accountId; + private String symbol; + private AscendexOrderType orderType; + private AscendexSide side; + private BigDecimal price; + private BigDecimal stopPrice; + private BigDecimal orderQty; + private String status; + private Long createTime; + private Long lastExecTime; + private BigDecimal avgFillPrice; + private BigDecimal fillQty; + private BigDecimal fee; + private String feeAsset; +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOpenOrdersResponse.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOpenOrdersResponse.java index 27fc48ba052..845c424ef61 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOpenOrdersResponse.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOpenOrdersResponse.java @@ -1,187 +1,49 @@ package org.knowm.xchange.ascendex.dto.trade; -import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.knowm.xchange.ascendex.dto.enums.AscendexOrderType; +import org.knowm.xchange.ascendex.dto.enums.AscendexSide; import java.math.BigDecimal; -import java.time.Instant; import java.util.Date; +@Data +@NoArgsConstructor +@AllArgsConstructor public class AscendexOpenOrdersResponse { - private final BigDecimal avgPx; + private BigDecimal avgPx; - private final BigDecimal cumFee; + private BigDecimal cumFee; - private final BigDecimal cumFilledQty; + private BigDecimal cumFilledQty; - private final String errorCode; + private String errorCode; - private final String feeAsset; + private String feeAsset; - private final Date lastExecTime; + private Date lastExecTime; - private final String orderId; + private String orderId; - private final BigDecimal orderQty; + private BigDecimal orderQty; - private final AscendexPlaceOrderRequestPayload.AscendexOrderType orderType; + private AscendexOrderType orderType; - private final BigDecimal price; + private BigDecimal price; - private final Long seqNum; + private Long seqNum; - private final AscendexPlaceOrderRequestPayload.AscendexSide side; + private AscendexSide side; - private final String status; + private String status; - private final BigDecimal stopPrice; + private BigDecimal stopPrice; - private final String symbol; + private String symbol; - private final String execInst; + private String execInst; - public AscendexOpenOrdersResponse( - @JsonProperty("avgPx") BigDecimal avgPx, - @JsonProperty("cumFee") BigDecimal cumFee, - @JsonProperty("cumFilledQty") BigDecimal cumFilledQty, - @JsonProperty("errorCode") String errorCode, - @JsonProperty("feeAsset") String feeAsset, - @JsonProperty("lastExecTime") Long lastExecTime, - @JsonProperty("orderId") String orderId, - @JsonProperty("orderQty") BigDecimal orderQty, - @JsonProperty("orderType") String orderType, - @JsonProperty("price") BigDecimal price, - @JsonProperty("seqNum") Long seqNum, - @JsonProperty("side") String side, - @JsonProperty("status") String status, - @JsonProperty("stopPrice") BigDecimal stopPrice, - @JsonProperty("symbol") String symbol, - @JsonProperty("execInst") String execInst) { - this.avgPx = avgPx; - this.cumFee = cumFee; - this.cumFilledQty = cumFilledQty; - this.errorCode = errorCode; - this.feeAsset = feeAsset; - this.lastExecTime = Date.from(Instant.ofEpochMilli(lastExecTime)); - this.orderId = orderId; - this.orderQty = orderQty; - this.orderType = - AscendexPlaceOrderRequestPayload.AscendexOrderType.valueOf(orderType.toLowerCase()); - this.price = price; - this.seqNum = seqNum; - this.side = AscendexPlaceOrderRequestPayload.AscendexSide.valueOf(side.toLowerCase()); - this.status = status; - this.stopPrice = stopPrice; - this.symbol = symbol; - this.execInst = execInst; - } - - public BigDecimal getAvgPx() { - return avgPx; - } - - public BigDecimal getCumFee() { - return cumFee; - } - - public BigDecimal getCumFilledQty() { - return cumFilledQty; - } - - public String getErrorCode() { - return errorCode; - } - - public String getFeeAsset() { - return feeAsset; - } - - public Date getLastExecTime() { - return lastExecTime; - } - - public String getOrderId() { - return orderId; - } - - public BigDecimal getOrderQty() { - return orderQty; - } - - public AscendexPlaceOrderRequestPayload.AscendexOrderType getOrderType() { - return orderType; - } - - public BigDecimal getPrice() { - return price; - } - - public Long getSeqNum() { - return seqNum; - } - - public AscendexPlaceOrderRequestPayload.AscendexSide getSide() { - return side; - } - - public String getStatus() { - return status; - } - - public BigDecimal getStopPrice() { - return stopPrice; - } - - public String getSymbol() { - return symbol; - } - - public String getExecInst() { - return execInst; - } - - @Override - public String toString() { - return "AscendexOpenOrdersResponse{" - + "avgPx=" - + avgPx - + ", cumFee=" - + cumFee - + ", cumFilledQty=" - + cumFilledQty - + ", errorCode='" - + errorCode - + '\'' - + ", feeAsset='" - + feeAsset - + '\'' - + ", lastExecTime=" - + lastExecTime - + ", orderId='" - + orderId - + '\'' - + ", orderQty=" - + orderQty - + ", orderType='" - + orderType - + '\'' - + ", price=" - + price - + ", seqNum=" - + seqNum - + ", side='" - + side - + '\'' - + ", status='" - + status - + '\'' - + ", stopPrice=" - + stopPrice - + ", symbol='" - + symbol - + '\'' - + ", execInst='" - + execInst - + '\'' - + '}'; - } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOrderResponse.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOrderResponse.java index 10e456bf916..2f401549715 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOrderResponse.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOrderResponse.java @@ -2,168 +2,44 @@ import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Date; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.knowm.xchange.ascendex.dto.enums.AscendexOrderType; +import java.util.Date; +@Data +@NoArgsConstructor +@AllArgsConstructor public class AscendexOrderResponse { - private final String ac; - - private final String accountId; - - private final String action; + private String ac; - private final AscendexPlaceOrderInfo info; + private String accountId; - private final String status; + private String action; - private final String message; + private AscendexPlaceOrderInfo info; - private final String reason; + private String status; - private final String code; + private String message; - public AscendexOrderResponse( - @JsonProperty("ac") String ac, - @JsonProperty("accountId") String accountId, - @JsonProperty("action") String action, - @JsonProperty("info") AscendexPlaceOrderInfo info, - @JsonProperty("status") String status, - @JsonProperty("message") String message, - @JsonProperty("reason") String reason, - @JsonProperty("code") String code) { - this.ac = ac; - this.accountId = accountId; - this.action = action; - this.info = info; - this.status = status; - this.message = message; - this.reason = reason; - this.code = code; - } - - public String getAc() { - return ac; - } + private String reason; - public String getAccountId() { - return accountId; - } + private String code; - public String getAction() { - return action; - } - - public AscendexPlaceOrderInfo getInfo() { - return info; - } - - public String getStatus() { - return status; - } - - public String getMessage() { - return message; - } - - public String getReason() { - return reason; - } - - public String getCode() { - return code; - } - - @Override - public String toString() { - return "AscendexPlaceOrderResponse{" - + "ac='" - + ac - + '\'' - + ", accountId='" - + accountId - + '\'' - + ", action='" - + action - + '\'' - + ", info=" - + info - + ", status='" - + status - + '\'' - + ", message='" - + message - + '\'' - + ", reason='" - + reason - + '\'' - + ", code='" - + code - + '\'' - + '}'; - } + @Data public static class AscendexPlaceOrderInfo { - private final String id; - - private final String orderId; - - private final String orderType; - - private final String symbol; - - private final Date timestamp; - - public AscendexPlaceOrderInfo( - @JsonProperty("id") String id, - @JsonProperty("orderId") String orderId, - @JsonProperty("orderType") String orderType, - @JsonProperty("symbol") String symbol, - @JsonProperty("timestamp") @JsonAlias({"lastExecTime"}) Long timestamp) { - this.id = id; - this.orderId = orderId; - this.orderType = orderType; - this.symbol = symbol; - this.timestamp = timestamp == null ? null : new Date(timestamp); - } - - public String getId() { - return id; - } - - public String getOrderId() { - return orderId; - } - - public String getOrderType() { - return orderType; - } + private String id; - public String getSymbol() { - return symbol; - } + private String orderId; - public Date getTimestamp() { - return timestamp; - } + private String orderType; - @Override - public String toString() { - return "{" - + "id='" - + id - + '\'' - + ", orderId='" - + orderId - + '\'' - + ", orderType='" - + orderType - + '\'' - + ", symbol='" - + symbol - + '\'' - + ", timestamp=" - + timestamp - + '}'; - } + private String symbol; + @JsonProperty("timestamp") @JsonAlias({"lastExecTime"}) + private Date timestamp; } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOrderResponse4AcceptDONE.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOrderResponse4AcceptDONE.java new file mode 100644 index 00000000000..fa9291f1612 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexOrderResponse4AcceptDONE.java @@ -0,0 +1,27 @@ +package org.knowm.xchange.ascendex.dto.trade; + +import lombok.Data; +import org.knowm.xchange.ascendex.dto.enums.AscendexOrderType; +import org.knowm.xchange.ascendex.dto.enums.AscendexRespInst; +import org.knowm.xchange.ascendex.dto.enums.AscendexSide; + +import java.math.BigDecimal; + +/** + * Package:org.knowm.xchange.ascendex.dto.trade + * Description: + * + * @date:2022/7/20 14:27 + * @author:wodepig + */ +@Data +public class AscendexOrderResponse4AcceptDONE { + private String id; + private Long time; + private String symbol; + private BigDecimal orderPrice; + private BigDecimal orderQty; + private AscendexOrderType orderType; + private AscendexSide side; + private AscendexRespInst respInst; +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexPlaceOrderRequestPayload.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexPlaceOrderRequestPayload.java index 724a561c06b..8bda34664fa 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexPlaceOrderRequestPayload.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/trade/AscendexPlaceOrderRequestPayload.java @@ -1,142 +1,50 @@ package org.knowm.xchange.ascendex.dto.trade; import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.knowm.xchange.ascendex.dto.enums.AscendexOrderType; +import org.knowm.xchange.ascendex.dto.enums.AscendexRespInst; +import org.knowm.xchange.ascendex.dto.enums.AscendexSide; +import org.knowm.xchange.ascendex.dto.enums.AscendexTimeInForce; -public class AscendexPlaceOrderRequestPayload { +import java.util.Date; - private final String symbol; +@Data +@AllArgsConstructor +public class AscendexPlaceOrderRequestPayload { - private final Long time; + private String symbol; - private final String orderQty; + private Long time; - private final AscendexOrderType orderType; + private String orderQty; - private final AscendexSide side; + private AscendexOrderType orderType; - @JsonIgnore private final String id; + private AscendexSide side; - private final String orderPrice; + @JsonIgnore private String id; - @JsonIgnore private final String stopPrice; + private String orderPrice; - private final boolean postOnly; + @JsonIgnore private String stopPrice; + /** + * 只挂单 + */ + private boolean postOnly; // GTC or OIC, default GTC - @JsonIgnore private final String timeInForce; + @JsonIgnore private AscendexTimeInForce timeInForce; - private final String respInst; + private AscendexRespInst respInst; - public AscendexPlaceOrderRequestPayload( - String symbol, - Long time, - String orderQty, - AscendexOrderType orderType, - AscendexSide side, - String id, - String orderPrice, - String stopPrice, - boolean postOnly, - String timeInForce, - String respInst) { + public AscendexPlaceOrderRequestPayload(String symbol, String orderQty,String orderPrice ,AscendexOrderType orderType, AscendexSide side) { this.symbol = symbol; - this.time = time; + this.time = new Date().getTime(); + this.orderPrice = orderPrice; this.orderQty = orderQty; this.orderType = orderType; this.side = side; - this.id = id; - this.orderPrice = orderPrice; - this.stopPrice = stopPrice; - this.postOnly = postOnly; - this.timeInForce = timeInForce; - this.respInst = respInst; - } - - public String getSymbol() { - return symbol; - } - - public Long getTime() { - return time; - } - - public String getOrderQty() { - return orderQty; - } - - public AscendexOrderType getOrderType() { - return orderType; - } - - public AscendexSide getSide() { - return side; - } - - public String getId() { - return id; - } - - public String getOrderPrice() { - return orderPrice; - } - - public String getStopPrice() { - return stopPrice; - } - - public boolean isPostOnly() { - return postOnly; - } - - public String getTimeInForce() { - return timeInForce; - } - - public String getRespInst() { - return respInst; - } - - @Override - public String toString() { - return "AscendexPlaceOrderRequestPayload{" - + "symbol='" - + symbol - + '\'' - + ", time=" - + time - + ", orderQty=" - + orderQty - + ", orderType=" - + orderType - + ", side=" - + side - + ", id='" - + id - + '\'' - + ", orderPrice=" - + orderPrice - + ", stopPrice=" - + stopPrice - + ", postOnly=" - + postOnly - + ", timeInForce='" - + timeInForce - + '\'' - + ", respInst='" - + respInst - + '\'' - + '}'; - } - - public enum AscendexOrderType { - market, - limit, - stop_market, - stop_limit - } - - public enum AscendexSide { - buy, - sell } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/wallet/AscendDepositAddressesDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/wallet/AscendDepositAddressesDto.java new file mode 100644 index 00000000000..1c9a9460943 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/wallet/AscendDepositAddressesDto.java @@ -0,0 +1,28 @@ +package org.knowm.xchange.ascendex.dto.wallet; + +import lombok.Data; + +import java.util.List; + +/** + * Package:org.knowm.xchange.ascendex.dto.wallet + * Description: + * + * @date:2022/7/18 11:54 + * @author:wodepig + */ +@Data +public class AscendDepositAddressesDto { + private String asset; + private String assetName; + private List
address; + @Data + public static class Address{ + + private String address; + private String blockchain; + private String destTag; + + } + +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/wallet/AscendexWalletTransactionHistoryDto.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/wallet/AscendexWalletTransactionHistoryDto.java new file mode 100644 index 00000000000..8225290d573 --- /dev/null +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/dto/wallet/AscendexWalletTransactionHistoryDto.java @@ -0,0 +1,54 @@ +package org.knowm.xchange.ascendex.dto.wallet; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * Package:org.knowm.xchange.ascendex.dto.wallet + * Description: + * + * @date:2022/7/19 9:20 + * @author:wodepig + */ +@Data +public class AscendexWalletTransactionHistoryDto { + private List data; + private boolean hasNext; + private Integer page; + private Integer pageSize; + + @Data + public static class DestAddress{ + + private String address; + + } + @Data + public static class Detail{ + + private String asset; + private BigDecimal amount; + /** + * the commission charged by the exchange + */ + private BigDecimal commission; + private DestAddress destAddress; + private String networkTransactionId; + /** + * the minimun number of confirmations for the transaction to be viewed as confirmed. + + */ + private Integer numConfirmations; + /** + * current number of confirmations + */ + private Integer numConfirmed; + private String requestId; + private String status; + private Long time; + private String transactionType; + + } +} diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexAccountServiceRaw.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexAccountServiceRaw.java index d09542b9034..a23d85d60c5 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexAccountServiceRaw.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexAccountServiceRaw.java @@ -2,9 +2,16 @@ import java.io.IOException; import java.util.List; + import org.knowm.xchange.Exchange; +import org.knowm.xchange.ascendex.dto.enums.AccountCategory; import org.knowm.xchange.ascendex.AscendexException; -import org.knowm.xchange.ascendex.dto.account.AscendexCashAccountBalanceDto; +import org.knowm.xchange.ascendex.dto.AscendexResponse; +import org.knowm.xchange.ascendex.dto.account.*; +import org.knowm.xchange.ascendex.dto.balance.*; +import org.knowm.xchange.ascendex.dto.enums.AscendexTransactionType; +import org.knowm.xchange.ascendex.dto.wallet.AscendDepositAddressesDto; +import org.knowm.xchange.ascendex.dto.wallet.AscendexWalletTransactionHistoryDto; public class AscendexAccountServiceRaw extends AscendexBaseService { @@ -12,12 +19,182 @@ public AscendexAccountServiceRaw(Exchange exchange) { super(exchange); } - public List getAscendexCashAccountBalance() + public AscendexAccountInfoDto getAscendexAccountInfo() throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.getAscendexAccountInfo( + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator + ) + ); + + } + + public AscendexVIPFeeScheduleDto getAscendexVIPFeeSchedule() throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.getAscendexVIPFeeSchedule( + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator + ) + ); + + } + + public AscendexSymbolFeeDto getAscendexSymbolFee() throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.getAscendexSymbolFeeSchedule( + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator + ) + ); + + } + + public AscendexRiskLimitInfoDto getAscendexRiskLimitInfo()throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.getAscendexRiskLimitInfo() + ); + } + + public AscendexExchangeLatencyInfoDto getAscendexExchangeLatencyInfo(Long requestTime)throws AscendexException,IOException{ + return checkResult( + ascendexAuthenticated.getAscendexExchangeLatencyInfo(requestTime) + ); + } + + public List getAscendexCashAccountBalance()throws AscendexException, IOException { + return getAscendexCashAccountBalance(null,false); + } + public List getAscendexCashAccountBalance( + String asset, + Boolean showAll + ) throws AscendexException, IOException { return checkResult( - ascendexAuthenticated.getCashAccountBalance( + ascendexAuthenticated.getAscendexCashAccountBalance( + asset==null?null:asset.toUpperCase(), + showAll, + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), exchange.getExchangeSpecification().getApiKey(), exchange.getNonceFactory().createValue(), signatureCreator)); } + public List getAscendexMarginAccountBalance() throws AscendexException, IOException{ + return getAscendexMarginAccountBalance(null,false); + } + + public List getAscendexMarginAccountBalance( + String asset, + Boolean showAll + ) + throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.getAscendexMarginAccountBalance( + asset==null?null:asset.toUpperCase(), + showAll, + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator)); + } + public AscendexMarginRiskDto getAscendexMarginRisk() throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.getAscendexMarginRisk( + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator + ) + ); + } + + + public Boolean getAscendexBalanceTransfer( AscendexBalanceTransferRequestPayload payload) throws AscendexException, IOException { + AscendexResponse ascendexBalanceTransfer = ascendexAuthenticated.getAscendexBalanceTransfer( + payload, + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator + ); + if (ascendexBalanceTransfer.getCode().equals(0)){ + return true; + } + + return false; + } + + + public AscendexBalanceSnapshotDto getAscendexBalanceSnapshot(String date,AccountCategory accountCategory)throws AscendexException, IOException{ + /* int days = (int) ((new Date().getTime() - new Date(date).getTime()) / (1000*3600*24)); + if (days>7){ + throw new AscendexException(0,"Data query for most recent 7 days is supported"); + }*/ + AscendexBalanceSnapshotDto BalanceSnapshot = ascendexAuthenticated.getAscendexBalanceSnapshot( + date, + accountCategory, + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator + ); + return BalanceSnapshot; + } + + public AscendexOrderAndBalanceDetailDto getAscendexOrderAndBalanceDetail(String date, AccountCategory accountCategory)throws AscendexException, IOException{ + + AscendexOrderAndBalanceDetailDto Detail = ascendexAuthenticated.getAscendexOrderAndBalanceDetail( + date, + accountCategory, + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator + ); + return Detail; + } + + public AscendDepositAddressesDto getAscendDepositAddresses( String asset)throws AscendexException, IOException{ + return getAscendDepositAddresses(asset,null); + + } + public AscendDepositAddressesDto getAscendDepositAddresses( String asset, String blockchain)throws AscendexException, IOException{ + return checkResult( + ascendexAuthenticated.getAscendexDepositAddresses( + asset.toUpperCase(),blockchain==null?null:blockchain.toUpperCase(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator + ) + ); + + } + + /** + * We do support API withdrawals. Please contact your dedicated sales manager or support@ascendex.com for further information. + */ + public void getAscendWithdrawal(){ + + } + public AscendexWalletTransactionHistoryDto getAscendexWalletTransactionHistory()throws AscendexException, IOException{ + return getAscendexWalletTransactionHistory(null,null,null,null); + } + public AscendexWalletTransactionHistoryDto getAscendexWalletTransactionHistory(String asset, + AscendexTransactionType txType, + Integer page,Integer pageSize)throws AscendexException, IOException{ + return checkResult( + ascendexAuthenticated.getAscendexWalletTransactionHistory( + asset==null?null:asset.toUpperCase(), + txType, + page, + pageSize, + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator + ) + ); + + } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexBaseService.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexBaseService.java index f0ef9b36af6..29c7a137080 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexBaseService.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexBaseService.java @@ -11,15 +11,18 @@ import org.knowm.xchange.service.BaseService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import si.mazi.rescu.ClientConfig; +import si.mazi.rescu.ClientConfigUtil; import si.mazi.rescu.ParamsDigest; +import java.net.Proxy; + /** * In order for Ascendex exchange authenticated endpoints to work you must add a * specificParameterItem named 'account-group' on the * getExchangeSpecification.getExchangeSpecificParameters Map */ public class AscendexBaseService extends BaseExchangeService implements BaseService { - protected IAscendex ascendex; protected IAscendexAuthenticated ascendexAuthenticated; protected ParamsDigest signatureCreator; @@ -36,14 +39,24 @@ public AscendexBaseService(Exchange exchange) { .getExchangeSpecificParameters() .containsKey("account-group")) { ExchangeSpecification specWithAccountGroup = exchange.getDefaultExchangeSpecification(); - specWithAccountGroup.setSslUri( + specWithAccountGroup.setSslUri(exchange.getExchangeSpecification().getSslUri()); + String proxyUsername = getExchangeSpecificParametersItem("proxyUsername"); + String proxyPassword = getExchangeSpecificParametersItem("proxyPassword"); + Proxy.Type proxyType = getExchangeSpecificParametersItem("proxyType"); + /* not all api that auth need + like :/api/pro/v1/info api/pro/data/v2/order/hist + specWithAccountGroup.setSslUri( exchange.getExchangeSpecification().getSslUri() + exchange .getExchangeSpecification() .getExchangeSpecificParametersItem("account-group") - + "/"); + + "/");*/ + ClientConfig clientConfig = ExchangeRestProxyBuilder.createClientConfig(exchange.getExchangeSpecification()); + clientConfig.setProxyType(proxyType); + ClientConfig addPassword = ClientConfigUtil.addBasicAuthCredentials(clientConfig, proxyUsername, proxyPassword); ascendexAuthenticated = ExchangeRestProxyBuilder.forInterface(IAscendexAuthenticated.class, specWithAccountGroup) + .clientConfig(addPassword) .build(); } else { LOG.warn( @@ -53,6 +66,13 @@ public AscendexBaseService(Exchange exchange) { AscendexDigest.createInstance(exchange.getExchangeSpecification().getSecretKey()); } + public T getExchangeSpecificParametersItem(String key){ + try { + return (T)exchange.getExchangeSpecification().getExchangeSpecificParametersItem(key); + } catch (Exception e) { + return null; + } + } public R checkResult(AscendexResponse response) throws AscendexException { if (response.getCode() == 0) { return response.getData(); diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexDigest.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexDigest.java index 1e4bbff7971..f36193d4a2f 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexDigest.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexDigest.java @@ -21,29 +21,96 @@ public static AscendexDigest createInstance(String secretKeyBase64) { @Override public String digestParams(RestInvocation restInvocation) { - String message; + String signUrl = getSignUrl(restInvocation.getPath()); - if (restInvocation.getPath().contains("cash")) { + // signature have no regulate + + String message=restInvocation.getHttpHeadersFromParams().get("x-auth-timestamp")+signUrl; + /* String path =restInvocation.getPath(); + int index=0; + if (path.contains("api/pro/v1/cash")){ + index=path.lastIndexOf("api/pro/v1/cash")+16; + }else if (path.contains("api/pro/v1/margin")){ + index=path.lastIndexOf("api/pro/v1/margin")+18; + }else if (path.contains("api/pro/v1")){ + index=path.lastIndexOf("api/pro/v1")+11; + }else if (path.contains("/api/pro/v1/spot/fee")){ + message=messageBefore+"fee"; + + } + + if (index!=0){ + message= messageBefore+path.substring(index); + }*/ + +/* + if (restInvocation.getPath().contains("cash")) { message = - restInvocation.getHttpHeadersFromParams().get("x-auth-timestamp") + messageBefore + restInvocation .getPath() .substring(restInvocation.getPath().lastIndexOf("cash") + 5); } else if (restInvocation.getPath().contains("margin")) { message = - restInvocation.getHttpHeadersFromParams().get("x-auth-timestamp") + messageBefore + restInvocation .getPath() .substring(restInvocation.getPath().lastIndexOf("margin") + 7); } else { message = - restInvocation.getHttpHeadersFromParams().get("x-auth-timestamp") + messageBefore + restInvocation.getPath().substring(restInvocation.getPath().lastIndexOf("/") + 1); } + // special message + String path = restInvocation.getPath().substring(1);*/ + /* switch (path){ + case "pi/pro/data/v1/cash/balance/snapshot": + // because no + message=messageBefore+"data/v1/cash/balance/snapshot"; + break; + case "pi/pro/data/v1/margin/balance/snapshot": + // because no + message=messageBefore+"data/v1/margin/balance/snapshot"; + break; + case "pi/pro/data/v1/cash/balance/history": + // because no + message=messageBefore+"data/v1/cash/balance/history"; + break; + case "pi/pro/data/v1/margin/balance/history": + // because no + message=messageBefore+"data/v1/margin/balance/history"; + break; + case "pi/pro/v1/wallet/deposit/address": + // because no + message=messageBefore+"wallet/deposit/address"; + break; + }*/ Mac mac256 = getMac(); mac256.update(message.getBytes(StandardCharsets.UTF_8)); return Base64.getEncoder().encodeToString(mac256.doFinal()).trim(); } + + private String getSignUrl(String path) { + if (path.contains("api/pro/v1/spot/fee")){ + return "fee"; + } + if (path.contains("api/pro/v1/margin/risk")){ + return "margin/risk"; + } + if (path.startsWith("api/pro/data/")){ + return path.substring(8); + } + if (path.startsWith("api/pro/v1/wallet")){ + return path.substring(11); + } + if (path.contains("cash")) { + return path.substring(path.lastIndexOf("cash") + 5); + } else if (path.contains("margin")) { + return path.substring(path.lastIndexOf("margin") + 7); + } else { + return path.substring(path.lastIndexOf("/") + 1); + } + } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexMarketDataServiceRaw.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexMarketDataServiceRaw.java index 65d09a0a414..1fdec6b26d5 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexMarketDataServiceRaw.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexMarketDataServiceRaw.java @@ -3,12 +3,9 @@ import java.io.IOException; import java.util.List; import org.knowm.xchange.Exchange; +import org.knowm.xchange.ascendex.dto.enums.AccountCategory; import org.knowm.xchange.ascendex.AscendexException; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexAssetDto; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexBarHistDto; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexMarketTradesDto; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexOrderbookDto; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexProductDto; +import org.knowm.xchange.ascendex.dto.marketdata.*; public class AscendexMarketDataServiceRaw extends AscendexBaseService { @@ -16,27 +13,55 @@ public AscendexMarketDataServiceRaw(Exchange exchange) { super(exchange); } + @Deprecated public List getAllAssets() throws AscendexException, IOException { return checkResult(ascendex.getAllAssets()); } + public List getAllAssetsV2() throws AscendexException, IOException { + return checkResult(ascendex.getAllAssetsV2()); + } public List getAllProducts() throws AscendexException, IOException { return checkResult(ascendex.getAllProducts()); } + public List getAllProducts(AccountCategory accountCategory) throws AscendexException, IOException { + return checkResult(ascendex.getAllProducts(accountCategory)); + } + + + public AscendexTickerDto getTicker(String symbol) throws AscendexException, IOException { + return checkResult(ascendex.getTicker(symbol.toUpperCase())); + } + + + public AscendexOrderbookDto getAscendexOrderbook(String symbol) throws AscendexException, IOException { - return checkResult(ascendex.getOrderbookDepth(symbol)); + return checkResult(ascendex.getOrderbookDepth(symbol.toUpperCase())); } public AscendexMarketTradesDto getAscendexTrades(String symbol) throws AscendexException, IOException { - return checkResult(ascendex.getTrades(symbol)); + return getAscendexTrades(symbol.toUpperCase(),10); + } + + /** + * + * @param symbol symbol + * @param n any positive integer, capped at 100 + * @return + * @throws AscendexException + * @throws IOException + */ + public AscendexMarketTradesDto getAscendexTrades(String symbol,Integer n) + throws AscendexException, IOException { + return checkResult(ascendex.getTrades(symbol.toUpperCase(),Math.min(n,100))); } public List getBarHistoryData( String symbol, String interval, Long to, Long from, Integer noOfBars) throws AscendexException, IOException { - return checkResult(ascendex.getHistoricalBarData(symbol, interval, to, from, noOfBars)); + return checkResult(ascendex.getHistoricalBarData(symbol.toUpperCase(), interval, to, from, noOfBars)); } } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexTradeService.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexTradeService.java index 60ccf9af6f3..085cb025b9b 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexTradeService.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexTradeService.java @@ -4,6 +4,7 @@ import java.util.Collection; import org.knowm.xchange.Exchange; import org.knowm.xchange.ascendex.AscendexAdapters; +import org.knowm.xchange.ascendex.dto.enums.AccountCategory; import org.knowm.xchange.dto.Order; import org.knowm.xchange.dto.trade.LimitOrder; import org.knowm.xchange.dto.trade.OpenOrders; @@ -24,6 +25,7 @@ public AscendexTradeService(Exchange exchange) { @Override public String placeLimitOrder(LimitOrder limitOrder) throws IOException { + return placeAscendexOrder( AscendexAdapters.adaptLimitOrderToAscendexPlaceOrderRequestPayload(limitOrder)) .getInfo() @@ -33,7 +35,7 @@ public String placeLimitOrder(LimitOrder limitOrder) throws IOException { @Override public boolean cancelOrder(CancelOrderParams orderParams) throws IOException { if (orderParams instanceof CancelOrderByCurrencyPair) { - cancelAllAscendexOrdersBySymbol( + cancelAllAscendexOrdersBySymbol(AccountCategory.cash, ((CancelOrderByCurrencyPair) orderParams).getCurrencyPair().toString()); return true; } else { @@ -56,11 +58,11 @@ public OpenOrdersParams createOpenOrdersParams() { public OpenOrders getOpenOrders(OpenOrdersParams params) throws IOException { if (params instanceof OpenOrdersParamCurrencyPair) { return AscendexAdapters.adaptOpenOrders( - getAscendexOpenOrders( + getAscendexOpenOrders(AccountCategory.cash, ((OpenOrdersParamCurrencyPair) params).getCurrencyPair().toString())); } else if (params instanceof OpenOrdersParamInstrument) { return AscendexAdapters.adaptOpenOrders( - getAscendexOpenOrders(((OpenOrdersParamInstrument) params).getInstrument().toString())); + getAscendexOpenOrders(AccountCategory.cash,((OpenOrdersParamInstrument) params).getInstrument().toString())); } else { throw new IOException( "Params must be instanceOf OpenOrdersParamCurrencyPair or OpenOrdersParamInstrument in order to get openOrders from Ascendex."); @@ -76,7 +78,7 @@ public TradeHistoryParams createTradeHistoryParams() { public UserTrades getTradeHistory(TradeHistoryParams params) throws IOException { if (params instanceof TradeHistoryParamCurrencyPair) { return AscendexAdapters.adaptUserTrades( - getAscendexUserTrades( + getAscendexUserTrades(AccountCategory.cash, ((TradeHistoryParamCurrencyPair) params).getCurrencyPair().toString())); } else { throw new IOException( @@ -86,14 +88,14 @@ public UserTrades getTradeHistory(TradeHistoryParams params) throws IOException @Override public OpenOrders getOpenOrders() throws IOException { - return AscendexAdapters.adaptOpenOrders(getAscendexOpenOrders(null)); + return AscendexAdapters.adaptOpenOrders(getAscendexOpenOrders(AccountCategory.cash,null)); } @Override public Collection getOrder(OrderQueryParams... orderQueryParams) throws IOException { if (orderQueryParams.length == 1) { return AscendexAdapters.adaptOpenOrderById( - getAscendexOrderById(orderQueryParams[0].getOrderId())); + getAscendexOrderById(AccountCategory.cash,orderQueryParams[0].getOrderId())); } else { throw new IOException("Ascendex only supports query with single id"); } diff --git a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexTradeServiceRaw.java b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexTradeServiceRaw.java index 332cbe2afa7..d124757b472 100644 --- a/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexTradeServiceRaw.java +++ b/xchange-ascendex/src/main/java/org/knowm/xchange/ascendex/service/AscendexTradeServiceRaw.java @@ -2,89 +2,145 @@ import java.io.IOException; import java.util.List; + import org.knowm.xchange.Exchange; import org.knowm.xchange.ascendex.AscendexException; -import org.knowm.xchange.ascendex.dto.trade.AscendexCancelOrderRequestPayload; -import org.knowm.xchange.ascendex.dto.trade.AscendexOpenOrdersResponse; -import org.knowm.xchange.ascendex.dto.trade.AscendexOrderResponse; -import org.knowm.xchange.ascendex.dto.trade.AscendexPlaceOrderRequestPayload; +import org.knowm.xchange.ascendex.dto.enums.AccountCategory; +import org.knowm.xchange.ascendex.dto.trade.*; + +import javax.ws.rs.QueryParam; public class AscendexTradeServiceRaw extends AscendexBaseService { - private static final String ACCOUNT_CASH_CATEGORY = "cash"; - - public AscendexTradeServiceRaw(Exchange exchange) { - super(exchange); - } - - public AscendexOrderResponse placeAscendexOrder(AscendexPlaceOrderRequestPayload payload) - throws AscendexException, IOException { - return checkResult( - ascendexAuthenticated.placeOrder( - exchange.getExchangeSpecification().getApiKey(), - exchange.getNonceFactory().createValue(), - signatureCreator, - ACCOUNT_CASH_CATEGORY, - payload)); - } - - public AscendexOrderResponse cancelAscendexOrder(AscendexCancelOrderRequestPayload payload) - throws AscendexException, IOException { - return checkResult( - ascendexAuthenticated.cancelOrder( - exchange.getExchangeSpecification().getApiKey(), - exchange.getNonceFactory().createValue(), - signatureCreator, - ACCOUNT_CASH_CATEGORY, - payload.getOrderId(), - payload.getSymbol(), - payload.getTime())); - } - - public AscendexOrderResponse cancelAllAscendexOrdersBySymbol(String symbol) - throws AscendexException, IOException { - return checkResult( - ascendexAuthenticated.cancelAllOrders( - exchange.getExchangeSpecification().getApiKey(), - exchange.getNonceFactory().createValue(), - signatureCreator, - ACCOUNT_CASH_CATEGORY, - symbol)); - } - - public List getAscendexOpenOrders(String symbol) - throws AscendexException, IOException { - - return checkResult( - ascendexAuthenticated.getOpenOrders( - exchange.getExchangeSpecification().getApiKey(), - exchange.getNonceFactory().createValue(), - signatureCreator, - ACCOUNT_CASH_CATEGORY, - symbol)); - } - - public AscendexOpenOrdersResponse getAscendexOrderById(String orderId) - throws AscendexException, IOException { - return checkResult( - ascendexAuthenticated.getOrderById( - exchange.getExchangeSpecification().getApiKey(), - exchange.getNonceFactory().createValue(), - signatureCreator, - ACCOUNT_CASH_CATEGORY, - orderId)); - } - - public List getAscendexUserTrades(String symbol) - throws AscendexException, IOException { - return checkResult( - ascendexAuthenticated.getOrdersHistory( - exchange.getExchangeSpecification().getApiKey(), - exchange.getNonceFactory().createValue(), - signatureCreator, - ACCOUNT_CASH_CATEGORY, - 50, - symbol, - true)); - } + private static final String ACCOUNT_CASH_CATEGORY = "cash"; + + public AscendexTradeServiceRaw(Exchange exchange) { + super(exchange); + } + + /** + * default cash + * + * @param payload + * @return + * @throws AscendexException + * @throws IOException + */ + public AscendexOrderResponse placeAscendexOrder(AscendexPlaceOrderRequestPayload payload) + throws AscendexException, IOException { + + return placeAscendexOrder(payload, AccountCategory.cash); + } + + + public AscendexOrderResponse placeAscendexOrder(AscendexPlaceOrderRequestPayload payload, AccountCategory accountCategory) + throws AscendexException, IOException { + + return checkResult( + ascendexAuthenticated.placeOrder( + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator, + accountCategory, + payload)); + } + + public AscendexOrderResponse cancelAscendexOrder(AscendexCancelOrderRequestPayload payload) + throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.cancelOrder( + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator, + payload.getAccountCategory(), + payload)); + } + + public AscendexOrderResponse cancelAllAscendexOrdersBySymbol(AccountCategory accountCategory, String symbol) + throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.cancelAllOrders( + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator, + accountCategory, + symbol == null ? null : symbol.toUpperCase())); + } + + public List getAscendexOpenOrders(AccountCategory accountCategory, String symbol) + throws AscendexException, IOException { + + return checkResult( + ascendexAuthenticated.getOpenOrders( + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator, + accountCategory, + symbol == null ? symbol : symbol.toUpperCase())); + } + + public AscendexOpenOrdersResponse getAscendexOrderById(AccountCategory accountCategory, String orderId) + throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.getOrderById( + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator, + accountCategory, + orderId)); + } + + public List getAscendexUserTrades(AccountCategory accountCategory, String symbol) + throws AscendexException, IOException { + return getAscendexUserTrades(accountCategory, + symbol, + 50, + true); + } + + public List getAscendexUserTrades(AccountCategory accountCategory, String symbol, Integer size, Boolean executedOnly) + throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.getOrdersHistory( + exchange.getExchangeSpecification().getExchangeSpecificParametersItem("account-group").toString(), + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator, + accountCategory, + size, + symbol == null ? symbol : symbol.toUpperCase(), + executedOnly)); + } + + public List getAscendexOrdersHistoryV2(AccountCategory accountCategory)throws AscendexException, IOException { + return getAscendexOrdersHistoryV2(accountCategory,null,null,null,null,null); + } + + public List getAscendexOrdersHistoryV2(AccountCategory accountCategory, + String symbol, + Long startTime, + Long endTime, + Long seqNum, + Integer limit) + throws AscendexException, IOException { + return checkResult( + ascendexAuthenticated.getOrdersHistoryV2( + exchange.getExchangeSpecification().getApiKey(), + exchange.getNonceFactory().createValue(), + signatureCreator, + accountCategory, + symbol == null ? symbol : symbol.toUpperCase(), + startTime, + endTime, + seqNum, + limit + + ) + ); + } } diff --git a/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Account/AscendexAccountTest.java b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Account/AscendexAccountTest.java new file mode 100644 index 00000000000..b730712acb1 --- /dev/null +++ b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Account/AscendexAccountTest.java @@ -0,0 +1,75 @@ +package org.knowm.xchange.ascendex.Account; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.knowm.xchange.Exchange; +import org.knowm.xchange.ExchangeFactory; +import org.knowm.xchange.ExchangeSpecification; +import org.knowm.xchange.ascendex.AscendexExchange; +import org.knowm.xchange.ascendex.dto.account.*; +import org.knowm.xchange.ascendex.service.AscendexAccountServiceRaw; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Package:org.knowm.xchange.ascendex.Account + * Description: + * + * @date:2022/7/14 21:11 + * @author:wodepig + */ +public class AscendexAccountTest { + + private AscendexAccountServiceRaw serviceRaw; + // @Before + public void getAccountServiceRaw() throws IOException { + InputStream is = + org.knowm.xchange.ascendex.AscendexMarketDataJSONTest.class.getResourceAsStream( + "/org/knowm/xchange/ascendex/ascendexApiInfo.json"); + ObjectMapper mapper = new ObjectMapper(); + JsonNode tree = mapper.readTree(is); + ExchangeSpecification exSpec = new AscendexExchange().getDefaultExchangeSpecification(); + exSpec.setSslUri("https://asdx.me/"); + exSpec.setApiKey(tree.get("apiKey").asText()); + exSpec.setSecretKey(tree.get("secretKey").asText()); + exSpec.setExchangeSpecificParametersItem("account-group",tree.get("accountGroup").asInt()); + exSpec.setShouldLoadRemoteMetaData(false); + Exchange exchange = ExchangeFactory.INSTANCE.createExchange(exSpec); + serviceRaw = (AscendexAccountServiceRaw)exchange.getAccountService(); + + } + // @Test + public void testAscendexAccount()throws IOException { + AscendexAccountInfoDto info = serviceRaw.getAscendexAccountInfo(); + Assert.assertTrue(info!=null&&info.getEmail()!=null); + } + + // @Test + public void testVIPFeeSchedule()throws IOException { + AscendexVIPFeeScheduleDto vipFeeSchedule = serviceRaw.getAscendexVIPFeeSchedule(); + Assert.assertTrue(vipFeeSchedule!=null&&vipFeeSchedule.getUserUID()!=null); + + } + + // @Test + public void testSymbolFee()throws IOException { + AscendexSymbolFeeDto symbolFee = serviceRaw.getAscendexSymbolFee(); + Assert.assertTrue(symbolFee!=null&&symbolFee.getProductFee().size()>10); + } + // @Test + public void testRiskLimitInfo()throws IOException { + AscendexRiskLimitInfoDto riskLimitInfo = serviceRaw.getAscendexRiskLimitInfo(); + Assert.assertTrue(riskLimitInfo!=null&&riskLimitInfo.getWebSocket()!=null); + } + // @Test + public void testExchangeLatencyInfoDto()throws IOException { + long sendTime = System.currentTimeMillis(); + AscendexExchangeLatencyInfoDto exchangeLatencyInfoDto = serviceRaw.getAscendexExchangeLatencyInfo(sendTime); + Assert.assertNotNull(exchangeLatencyInfoDto); + } + +} diff --git a/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/AscendexMarketDataIntegrationTest.java b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/AscendexMarketDataIntegrationTest.java deleted file mode 100644 index d7cc7b7cfbe..00000000000 --- a/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/AscendexMarketDataIntegrationTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.knowm.xchange.ascendex; - -import java.io.IOException; -import java.util.List; -import java.util.Objects; -import org.junit.Assert; -import org.junit.Test; -import org.knowm.xchange.Exchange; -import org.knowm.xchange.ExchangeFactory; -import org.knowm.xchange.ascendex.dto.marketdata.AscendexBarHistDto; -import org.knowm.xchange.ascendex.service.AscendexMarketDataService; - -public class AscendexMarketDataIntegrationTest { - - @Test - public void testBarHist() throws IOException { - Exchange exchange = - ExchangeFactory.INSTANCE.createExchange(AscendexExchange.class.getCanonicalName()); - exchange.remoteInit(); - - List barHistDtos = - ((AscendexMarketDataService) exchange.getMarketDataService()) - .getBarHistoryData("BTC/USDT", "15", null, null, 100); - Assert.assertTrue(Objects.nonNull(barHistDtos) && !barHistDtos.isEmpty()); - } -} diff --git a/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/AscendexMarketDataJSONTest.java b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/AscendexMarketDataJSONTest.java index 54bda5d5391..7734b59af6b 100644 --- a/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/AscendexMarketDataJSONTest.java +++ b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/AscendexMarketDataJSONTest.java @@ -10,30 +10,13 @@ import java.util.List; import org.junit.Test; import org.knowm.xchange.ascendex.dto.AscendexResponse; +import org.knowm.xchange.ascendex.dto.enums.AscendexAssetStatus; import org.knowm.xchange.ascendex.dto.marketdata.AscendexAssetDto; import org.knowm.xchange.ascendex.dto.marketdata.AscendexOrderbookDto; import org.knowm.xchange.ascendex.dto.marketdata.AscendexProductDto; public class AscendexMarketDataJSONTest { - @Test - public void ascendexAssetDtoTest() throws IOException { - - // Read in the JSON from the example resources - InputStream is = - AscendexMarketDataJSONTest.class.getResourceAsStream( - "/org/knowm/xchange/ascendex/ascendexAssetsResponseExample.json"); - - // Use Jackson to parse it - ObjectMapper mapper = new ObjectMapper(); - AscendexResponse> ascendexAssets = - mapper.readValue(is, new TypeReference>>() {}); - - // Verify that the example data was unmarshalled correctly - assertThat(ascendexAssets.getData().size()).isEqualTo(1); - assertThat(ascendexAssets.getData().get(0).getStatus()) - .isEqualTo(AscendexAssetDto.AscendexAssetStatus.Normal); - } @Test public void ascendexProductDtoTest() throws IOException { @@ -51,7 +34,7 @@ public void ascendexProductDtoTest() throws IOException { // Verify that the example data was unmarshalled correctly assertThat(ascendexAssets.getData().size()).isEqualTo(1); assertThat(ascendexAssets.getData().get(0).getStatus()) - .isEqualTo(AscendexAssetDto.AscendexAssetStatus.Normal); + .isEqualTo(AscendexAssetStatus.Normal); } @Test diff --git a/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Balance/AscendexBalanceTest.java b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Balance/AscendexBalanceTest.java new file mode 100644 index 00000000000..01ef116cf43 --- /dev/null +++ b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Balance/AscendexBalanceTest.java @@ -0,0 +1,95 @@ +package org.knowm.xchange.ascendex.Balance; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.knowm.xchange.Exchange; +import org.knowm.xchange.ExchangeFactory; +import org.knowm.xchange.ExchangeSpecification; +import org.knowm.xchange.ascendex.dto.enums.AccountCategory; +import org.knowm.xchange.ascendex.AscendexExchange; +import org.knowm.xchange.ascendex.dto.balance.*; +import org.knowm.xchange.ascendex.service.AscendexAccountServiceRaw; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * Package:org.knowm.xchange.ascendex.balance + * Description: + * + * @date:2022/7/16 21:37 + * @author:wodepig + */ +public class AscendexBalanceTest { + private AscendexAccountServiceRaw serviceRaw; + // @Before + public void getAccountServiceRaw() throws IOException { + InputStream is = + org.knowm.xchange.ascendex.AscendexMarketDataJSONTest.class.getResourceAsStream( + "/org/knowm/xchange/ascendex/ascendexApiInfo.json"); + ObjectMapper mapper = new ObjectMapper(); + JsonNode tree = mapper.readTree(is); + ExchangeSpecification exSpec = new AscendexExchange().getDefaultExchangeSpecification(); + exSpec.setSslUri("https://asdx.me/"); + exSpec.setApiKey(tree.get("apiKey").asText()); + exSpec.setSecretKey(tree.get("secretKey").asText()); + exSpec.setExchangeSpecificParametersItem("account-group",tree.get("accountGroup").asInt()); + exSpec.setShouldLoadRemoteMetaData(false); + Exchange exchange = ExchangeFactory.INSTANCE.createExchange(exSpec); + serviceRaw = (AscendexAccountServiceRaw)exchange.getAccountService(); + + } + + // @Test + public void testCashAccountBalance()throws IOException{ + List cash = serviceRaw.getAscendexCashAccountBalance(); + List cash1 = serviceRaw.getAscendexCashAccountBalance("TRX",true); + Assert.assertNotNull(cash); + Assert.assertNotNull(cash1); + + } + + // @Test + public void testMarginAccountBalance()throws IOException{ + List cash = serviceRaw.getAscendexMarginAccountBalance(); + List cash1 = serviceRaw.getAscendexMarginAccountBalance("TRX",false); + Assert.assertNotNull(cash); + + } + + // @Test + public void testAscendexMarginRiskDto()throws IOException{ + AscendexMarginRiskDto ascendexMarginRiskDto = serviceRaw.getAscendexMarginRisk(); + Assert.assertNotNull(ascendexMarginRiskDto); + } + + // @Test + public void testAscendexBalanceTransfer()throws IOException{ + AscendexBalanceTransferRequestPayload payload= new AscendexBalanceTransferRequestPayload( "100", + "ABCD", + AccountCategory.cash, + AccountCategory.margin); + Boolean transfer = serviceRaw.getAscendexBalanceTransfer(payload); + Assert.assertFalse(transfer); + } + + // @Test + public void testAscendexBalanceSnapshot()throws IOException{ + AscendexBalanceSnapshotDto cashSnapshot = serviceRaw.getAscendexBalanceSnapshot("2022-07-16",AccountCategory.margin); + Assert.assertNotNull(cashSnapshot); + } + + // @Test + public void testAscendexOrderAndBalanceDetail()throws IOException{ + /** + * TODO https://github.com/ascendex/ascendex-pro-api-demo/blob/4aac308813f0dabd5765f1ad1641537c595ba1d4/python/query_balance_and_order_fills.py + */ + AscendexOrderAndBalanceDetailDto detailDto = serviceRaw.getAscendexOrderAndBalanceDetail("2022-07-18",AccountCategory.cash); + Assert.assertNotNull(detailDto); + } + +} diff --git a/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/MarketData/AscendexMarketDataJSONTest.java b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/MarketData/AscendexMarketDataJSONTest.java new file mode 100644 index 00000000000..61503ebd91b --- /dev/null +++ b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/MarketData/AscendexMarketDataJSONTest.java @@ -0,0 +1,46 @@ +package org.knowm.xchange.ascendex.MarketData; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Assert; +import org.junit.Test; +import org.knowm.xchange.Exchange; +import org.knowm.xchange.ExchangeFactory; +import org.knowm.xchange.ascendex.AscendexExchange; +import org.knowm.xchange.ascendex.dto.AscendexResponse; +import org.knowm.xchange.ascendex.dto.enums.AscendexAssetStatus; +import org.knowm.xchange.ascendex.dto.marketdata.AscendexAssetDto; +import org.knowm.xchange.ascendex.dto.marketdata.AscendexBarHistDto; +import org.knowm.xchange.ascendex.service.AscendexMarketDataService; + +import java.io.IOException; +import java.io.InputStream; +import java.math.BigDecimal; +import java.util.List; +import java.util.Objects; + +import static org.assertj.core.api.Assertions.assertThat; + +public class AscendexMarketDataJSONTest { + + @Test + public void ascendexAssetDtoTest() throws IOException { + + // Read in the JSON from the example resources + InputStream is = + org.knowm.xchange.ascendex.AscendexMarketDataJSONTest.class.getResourceAsStream( + "/org/knowm/xchange/ascendex/MarketData/ascendexAssetsResponseExample.json"); + + // Use Jackson to parse it + ObjectMapper mapper = new ObjectMapper(); + AscendexResponse> ascendexAssets = + mapper.readValue(is, new TypeReference>>() {}); + + // Verify that the example data was unmarshalled correctly + assertThat(ascendexAssets.getData().size()).isEqualTo(2); + assertThat(ascendexAssets.getData().get(0).getStatus()) + .isEqualTo(AscendexAssetStatus.Normal); + assertThat(ascendexAssets.getData().get(0).getWithdrawFee()) + .isEqualTo(new BigDecimal("30.0")); + } +} diff --git a/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/MarketData/AscendexMarketDataTest.java b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/MarketData/AscendexMarketDataTest.java new file mode 100644 index 00000000000..b1dcaad5dda --- /dev/null +++ b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/MarketData/AscendexMarketDataTest.java @@ -0,0 +1,111 @@ +package org.knowm.xchange.ascendex.MarketData; + +import org.junit.Assert; +import org.junit.Test; +import org.knowm.xchange.Exchange; +import org.knowm.xchange.ExchangeFactory; +import org.knowm.xchange.ExchangeSpecification; +import org.knowm.xchange.ascendex.dto.enums.AccountCategory; +import org.knowm.xchange.ascendex.AscendexExchange; +import org.knowm.xchange.ascendex.dto.marketdata.*; +import org.knowm.xchange.ascendex.service.AscendexMarketDataServiceRaw; + +import java.io.IOException; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +public class AscendexMarketDataTest { + + public Exchange getExchange() throws IOException{ + ExchangeSpecification exSpec = new AscendexExchange().getDefaultExchangeSpecification(); + exSpec.setSslUri("https://asdx.me/"); + exSpec.setShouldLoadRemoteMetaData(false); + return ExchangeFactory.INSTANCE.createExchange(exSpec); + } + + // @Test + public void testAllAsset() throws IOException{ + Exchange asdx = getExchange(); + AscendexMarketDataServiceRaw marketData = (AscendexMarketDataServiceRaw) asdx.getMarketDataService(); + //List allAssets = marketData.getAllAssets(); + List allAssetsV2 = marketData.getAllAssetsV2(); + Assert.assertTrue(Objects.nonNull(allAssetsV2)); + List collect = allAssetsV2.stream().filter(asset -> { + return "BTC".equals(asset.getAssetCode()); + }).collect(Collectors.toList()); + assertThat(collect.size()).isEqualTo(1); + assertThat(collect.get(0).getBlockChain().size()).isEqualTo(1); + System.out.println(); + } + + // @Test + public void testAllProducts() throws IOException{ + Exchange asdx = getExchange(); + // allProducts + AscendexMarketDataServiceRaw marketData = (AscendexMarketDataServiceRaw) asdx.getMarketDataService(); + List allProducts = marketData.getAllProducts(); + List collect = allProducts.stream().filter(asset -> { + return "BTC/USDT".equals(asset.getSymbol()); + }).collect(Collectors.toList()); + assertThat(collect.size()).isEqualTo(1); + assertThat(collect.get(0).getBaseAsset()).isEqualTo("BTC"); + assertThat(collect.get(0).getSymbol()).isEqualTo("BTC/USDT"); + + // according to margin + List marginProducts = marketData.getAllProducts(AccountCategory.margin); + List margins = marginProducts.stream().filter(asset -> { + return "BTC/USDT".equals(asset.getSymbol()); + }).collect(Collectors.toList()); + assertThat(margins.size()).isEqualTo(1); + assertThat(margins.get(0).isUseLot()).isEqualTo(false); + assertThat(margins.get(0).getSymbol()).isEqualTo("BTC/USDT"); + + } + // @Test + public void testTicker()throws IOException{ + Exchange asdx = getExchange(); + AscendexMarketDataServiceRaw marketData = (AscendexMarketDataServiceRaw) asdx.getMarketDataService(); + AscendexTickerDto ticker = marketData.getTicker("ASD/USDT"); + Assert.assertTrue(Objects.nonNull(ticker)); + assertThat(ticker.getSymbol()).isEqualTo("ASD/USDT"); + assertThat(ticker.getAsk().size()).isEqualTo(2); + } + public static void main(String[] args) { + } + + + // @Test + public void testBarHist() throws IOException { + Exchange asdx = getExchange(); + AscendexMarketDataServiceRaw marketData = (AscendexMarketDataServiceRaw) asdx.getMarketDataService(); + List barHistDtos = marketData.getBarHistoryData("BTC/USDT", "15", null, null, 100); + /* + Exchange exchange = + ExchangeFactory.INSTANCE.createExchange(AscendexExchange.class.getCanonicalName()); + exchange.remoteInit(); + + List barHistDtos = + ((AscendexMarketDataService) exchange.getMarketDataService()) + .getBarHistoryData("BTC/USDT", "15", null, null, 100);*/ + Assert.assertTrue(Objects.nonNull(barHistDtos) && !barHistDtos.isEmpty()); + } + // @Test + public void getOrderbookDepth() throws IOException { + Exchange asdx = getExchange(); + AscendexMarketDataServiceRaw marketData = (AscendexMarketDataServiceRaw) asdx.getMarketDataService(); + AscendexOrderbookDto orderbook = marketData.getAscendexOrderbook("ASD/USDT"); + + Assert.assertTrue(Objects.nonNull(orderbook) && !orderbook.getData().getAsks().isEmpty()); + } + + // @Test + public void getMarketTrades() throws IOException { + Exchange asdx = getExchange(); + AscendexMarketDataServiceRaw marketData = (AscendexMarketDataServiceRaw) asdx.getMarketDataService(); + AscendexMarketTradesDto ascendexTrades = marketData.getAscendexTrades("ASD/USDT",20); + Assert.assertTrue(Objects.nonNull(ascendexTrades) && ascendexTrades.getData().size()==20); + } +} diff --git a/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Order/AscendexOrderTest.java b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Order/AscendexOrderTest.java new file mode 100644 index 00000000000..a97eb028f86 --- /dev/null +++ b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Order/AscendexOrderTest.java @@ -0,0 +1,110 @@ +package org.knowm.xchange.ascendex.Order; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.knowm.xchange.Exchange; +import org.knowm.xchange.ExchangeFactory; +import org.knowm.xchange.ExchangeSpecification; +import org.knowm.xchange.ascendex.AscendexExchange; +import org.knowm.xchange.ascendex.dto.enums.*; +import org.knowm.xchange.ascendex.dto.trade.*; +import org.knowm.xchange.ascendex.service.AscendexAccountServiceRaw; +import org.knowm.xchange.ascendex.service.AscendexTradeService; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Date; +import java.util.List; + +/** + * Package:org.knowm.xchange.ascendex.Order + * Description: + * + * @date:2022/7/20 12:27 + * @author:wodepig + */ +public class AscendexOrderTest { + private AscendexTradeService serviceRaw; + @Before + public void getAccountServiceRaw() throws IOException { + InputStream is = + org.knowm.xchange.ascendex.AscendexMarketDataJSONTest.class.getResourceAsStream( + "/org/knowm/xchange/ascendex/ascendexApiInfo.json"); + ObjectMapper mapper = new ObjectMapper(); + JsonNode tree = mapper.readTree(is); + ExchangeSpecification exSpec = new AscendexExchange().getDefaultExchangeSpecification(); + exSpec.setSslUri("https://asdx.me/"); + exSpec.setApiKey(tree.get("apiKey").asText()); + exSpec.setSecretKey(tree.get("secretKey").asText()); + exSpec.setExchangeSpecificParametersItem("account-group",tree.get("accountGroup").asInt()); + exSpec.setShouldLoadRemoteMetaData(false); + Exchange exchange = ExchangeFactory.INSTANCE.createExchange(exSpec); + serviceRaw = (AscendexTradeService)exchange.getTradeService(); + + } + // @Test + public void testPlaceOrder()throws IOException{ + /* AscendexPlaceOrderRequestPayload paylod = new AscendexPlaceOrderRequestPayload( + "TRX/USDT",new Date().getTime(),"100", AscendexOrderType.limit, AscendexSide.buy, + null,"0.07",null,false, AscendexTimeInForce.GTC, AscendexRespInst.ACK + );*/ + AscendexPlaceOrderRequestPayload paylod = new AscendexPlaceOrderRequestPayload("TRX/USDT", + "100","0.06",AscendexOrderType.limit, AscendexSide.sell); + AscendexOrderResponse ascendexOrderResponse = serviceRaw.placeAscendexOrder(paylod); + Assert.assertNotNull(ascendexOrderResponse); + } + // @Test + public void testCancelOrder()throws IOException{ + AscendexCancelOrderRequestPayload payload = new AscendexCancelOrderRequestPayload( + "a1821a8c3afbU2171064316LjoPeBWda", + "TRX/USDT", + new Date().getTime(), + AccountCategory.cash + ); + AscendexOrderResponse ascendexOrderResponse = serviceRaw.cancelAscendexOrder(payload); + Assert.assertNotNull(ascendexOrderResponse); + + } + + // @Test + public void testCancelOrderAll()throws IOException{ + AscendexOrderResponse ascendexOrderResponse = serviceRaw.cancelAllAscendexOrdersBySymbol(AccountCategory.cash,null); + Assert.assertNotNull(ascendexOrderResponse); + + } + + // @Test + public void testGetOrderById()throws IOException { + AscendexOpenOrdersResponse ascendexOrderById = serviceRaw.getAscendexOrderById(AccountCategory.cash,"r1821b163db0U2171064316WI9qpS5zs"); + Assert.assertNotNull(ascendexOrderById); + } + // @Test + public void testOpenOrders()throws IOException { + List ascendexOpenOrders = serviceRaw.getAscendexOpenOrders(AccountCategory.cash,"TRX/USDT"); + Assert.assertNotNull(ascendexOpenOrders); + } + + // @Test + public void testOrdersHistory()throws IOException { + List ascendexUserTrades = serviceRaw.getAscendexUserTrades(AccountCategory.cash,"TRX/USDT",1,true); + Assert.assertNotNull(ascendexUserTrades); + } + + // @Test + public void testOrdersHistoryV2()throws IOException { + List cash = serviceRaw.getAscendexOrdersHistoryV2(AccountCategory.cash); + Assert.assertNotNull(cash); + List cashTrx = serviceRaw.getAscendexOrdersHistoryV2(AccountCategory.cash, + "TRx/usdt", + 1655722674000L, + 1658314674000L, + 1L, + 10 + ); + Assert.assertNotNull(cashTrx); + }; + +} diff --git a/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Wallet/AscendexWalletTest.java b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Wallet/AscendexWalletTest.java new file mode 100644 index 00000000000..ca63c53fb52 --- /dev/null +++ b/xchange-ascendex/src/test/java/org/knowm/xchange/ascendex/Wallet/AscendexWalletTest.java @@ -0,0 +1,66 @@ +package org.knowm.xchange.ascendex.Wallet; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.knowm.xchange.Exchange; +import org.knowm.xchange.ExchangeFactory; +import org.knowm.xchange.ExchangeSpecification; +import org.knowm.xchange.ascendex.AscendexExchange; +import org.knowm.xchange.ascendex.dto.enums.AscendexTransactionType; +import org.knowm.xchange.ascendex.dto.wallet.AscendDepositAddressesDto; +import org.knowm.xchange.ascendex.dto.wallet.AscendexWalletTransactionHistoryDto; + +import org.knowm.xchange.ascendex.service.AscendexAccountServiceRaw; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Package:org.knowm.xchange.ascendex.wallet + * Description: + * + * @date:2022/7/18 11:57 + * @author:wodepig + */ +public class AscendexWalletTest { + private AscendexAccountServiceRaw serviceRaw; + // @Before + public void getAccountServiceRaw() throws IOException { + InputStream is = + org.knowm.xchange.ascendex.AscendexMarketDataJSONTest.class.getResourceAsStream( + "/org/knowm/xchange/ascendex/ascendexApiInfo.json"); + ObjectMapper mapper = new ObjectMapper(); + JsonNode tree = mapper.readTree(is); + ExchangeSpecification exSpec = new AscendexExchange().getDefaultExchangeSpecification(); + exSpec.setSslUri("https://asdx.me/"); + exSpec.setApiKey(tree.get("apiKey").asText()); + exSpec.setSecretKey(tree.get("secretKey").asText()); + exSpec.setExchangeSpecificParametersItem("account-group",tree.get("accountGroup").asInt()); + exSpec.setShouldLoadRemoteMetaData(false); + Exchange exchange = ExchangeFactory.INSTANCE.createExchange(exSpec); + serviceRaw = (AscendexAccountServiceRaw)exchange.getAccountService(); + + } + + // @Test + public void testAscendDepositAddresses()throws IOException{ + AscendDepositAddressesDto sdt = serviceRaw.getAscendDepositAddresses("USDT"); + Assert.assertTrue(sdt.getAddress().size()>2); + AscendDepositAddressesDto usdtErc20 = serviceRaw.getAscendDepositAddresses("USDT", "erc20"); + Assert.assertEquals(1, usdtErc20.getAddress().size()); + } + + // @Test + public void testAscendexWalletTransactionHistory()throws IOException{ + + AscendexWalletTransactionHistoryDto allHistory = serviceRaw.getAscendexWalletTransactionHistory(); + Assert.assertTrue(allHistory.getData().size()>0); + AscendexWalletTransactionHistoryDto transactionHistory = serviceRaw.getAscendexWalletTransactionHistory( + "btc", AscendexTransactionType.withdrawal,1,5 + ); + Assert.assertNotNull(transactionHistory); + } +} diff --git a/xchange-ascendex/src/test/resources/org/knowm/xchange/ascendex/MarketData/ascendexAssetsResponseExample.json b/xchange-ascendex/src/test/resources/org/knowm/xchange/ascendex/MarketData/ascendexAssetsResponseExample.json new file mode 100644 index 00000000000..9e2fd09666e --- /dev/null +++ b/xchange-ascendex/src/test/resources/org/knowm/xchange/ascendex/MarketData/ascendexAssetsResponseExample.json @@ -0,0 +1,39 @@ +{ + "code": 0, + "data": [ + { + "assetCode": "USDT", + "assetName": "Tether", + "precisionScale": 9, + "nativeScale": 4, + "blockChain": [ + { + "chainName": "Omni", + "withdrawFee": "30.0", + "allowDeposit": true, + "allowWithdraw": true, + "minDepositAmt": "0.0", + "minWithdrawal": "50.0", + "numConfirmations": 3 + }, + { + "chainName": "ERC20", + "withdrawFee": "10.0", + "allowDeposit": true, + "allowWithdraw": true, + "minDepositAmt": "0.0", + "minWithdrawal": "20.0", + "numConfirmations": 12 + } + ] + }, + { + "assetCode" : "CSPR-S", + "assetName" : "CasperLabs Staking", + "precisionScale" : 8, + "nativeScale" : 3, + "blockChain" : [ + ] + } + ] +} \ No newline at end of file diff --git a/xchange-ascendex/src/test/resources/org/knowm/xchange/ascendex/ascendexApiInfo.json b/xchange-ascendex/src/test/resources/org/knowm/xchange/ascendex/ascendexApiInfo.json new file mode 100644 index 00000000000..cca68fc5b64 --- /dev/null +++ b/xchange-ascendex/src/test/resources/org/knowm/xchange/ascendex/ascendexApiInfo.json @@ -0,0 +1,5 @@ +{ + "apiKey": "your apiKey", + "secretKey": "your secretKey", + "accountGroup": "your accountGroup" +} \ No newline at end of file