diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml
index dc75db151..974f950c6 100644
--- a/.github/workflows/go.yml
+++ b/.github/workflows/go.yml
@@ -17,7 +17,7 @@ jobs:
env:
MYSQL_DATABASE: bbgo
MYSQL_USER: "root"
- MYSQL_PASSWORD: "root"
+ MYSQL_PASSWORD: "root" # pragma: allowlist secret
steps:
@@ -44,10 +44,17 @@ jobs:
# auto-start: "false"
- name: Set up Go
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.18
+ - name: Run pre-commit
+ run: |
+ pip install pre-commit
+ pre-commit install-hooks
+ pre-commit run markdownlint --files=README.md --verbose
+ pre-commit run detect-secrets --all-files --verbose
+
- name: Install Migration Tool
run: go install github.com/c9s/rockhopper/cmd/rockhopper@v1.2.1
@@ -72,6 +79,12 @@ jobs:
go test -race -coverprofile coverage_dnum.txt -covermode atomic -tags dnum ./pkg/...
sed -i -e '/_requestgen.go/d' coverage_dnum.txt
+ - name: Revive Check
+ uses: morphy2k/revive-action@v2
+ with:
+ reporter: github-pr-review
+ fail_on_error: true
+
- name: Upload Coverage Report
uses: codecov/codecov-action@v3
with:
diff --git a/.github/workflows/golang-lint.yml b/.github/workflows/golang-lint.yml
new file mode 100644
index 000000000..420724cb7
--- /dev/null
+++ b/.github/workflows/golang-lint.yml
@@ -0,0 +1,22 @@
+name: golang-lint
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ branches: [ main ]
+permissions:
+ contents: read
+
+jobs:
+ golangci:
+ name: lint
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/setup-go@v3
+ with:
+ go-version: 1.18
+ - uses: actions/checkout@v3
+ - name: golangci-lint
+ uses: golangci/golangci-lint-action@v3
+ with:
+ version: v1.46.2
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 000000000..081c79221
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,7 @@
+run:
+ issues-exit-code: 0
+ tests: false
+linters:
+ disable-all: true
+ enable:
+ - gofmt
diff --git a/.markdownlint.yaml b/.markdownlint.yaml
new file mode 100644
index 000000000..cd599ae32
--- /dev/null
+++ b/.markdownlint.yaml
@@ -0,0 +1,5 @@
+default: true
+extends: null
+MD033: false
+MD010: false
+MD013: false
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 000000000..cbb041829
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,14 @@
+---
+repos:
+ # Secret Detection
+ - repo: https://github.com/Yelp/detect-secrets
+ rev: v1.2.0
+ hooks:
+ - id: detect-secrets
+ args: ['--exclude-secrets', '3899a918953e01bfe218116cdfeccbed579e26275c4a89abcbc70d2cb9e9bbb8']
+ exclude: pacakge.lock.json
+ # Markdown
+ - repo: https://github.com/igorshubovych/markdownlint-cli
+ rev: v0.31.1
+ hooks:
+ - id: markdownlint
diff --git a/README.md b/README.md
index 6c425bd52..2e896b34f 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,8 @@ A trading bot framework written in Go. The name bbgo comes from the BB8 bot in t
## Current Status
[![Go](https://github.com/c9s/bbgo/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/c9s/bbgo/actions/workflows/go.yml)
+[![GoDoc](https://godoc.org/github.com/c9s/bbgo?status.svg)](https://pkg.go.dev/github.com/c9s/bbgo)
+[![Go Report Card](https://goreportcard.com/badge/github.com/c9s/bbgo)](https://goreportcard.com/report/github.com/c9s/bbgo)
[![DockerHub](https://img.shields.io/docker/pulls/yoanlin/bbgo.svg)](https://hub.docker.com/r/yoanlin/bbgo)
[![Coverage Status](http://codecov.io/github/c9s/bbgo/coverage.svg?branch=main)](http://codecov.io/github/c9s/bbgo?branch=main)
@@ -42,7 +44,38 @@ You can use BBGO's underlying common exchange API, currently it supports 4+ majo
- Built-in parameter optimization tool.
- Built-in Grid strategy and many other built-in strategies.
- Multi-exchange session support: you can connect to more than 2 exchanges with different accounts or subaccounts.
-- Standard indicators, e.g., SMA, EMA, BOLL, VMA, MACD...
+- Indicators with interface similar to `pandas.Series`([series](https://github.com/c9s/bbgo/blob/main/doc/development/series.md))([usage](https://github.com/c9s/bbgo/blob/main/doc/development/indicator.md)):
+ - [Accumulation/Distribution Indicator](./pkg/indicator/ad.go)
+ - [Arnaud Legoux Moving Average](./pkg/indicator/alma.go)
+ - [Average True Range](./pkg/indicator/atr.go)
+ - [Bollinger Bands](./pkg/indicator/boll.go)
+ - [Commodity Channel Index](./pkg/indicator/cci.go)
+ - [Cumulative Moving Average](./pkg/indicator/cma.go)
+ - [Double Exponential Moving Average](./pkg/indicator/dema.go)
+ - [Directional Movement Index](./pkg/indicator/dmi.go)
+ - [Brownian Motion's Drift Factor](./pkg/indicator/drift.go)
+ - [Ease of Movement](./pkg/indicator/emv.go)
+ - [Exponentially Weighted Moving Average](./pkg/indicator/ewma.go)
+ - [Hull Moving Average](./pkg/indicator/hull.go)
+ - [Trend Line (Tool)](./pkg/indicator/line.go)
+ - [Moving Average Convergence Divergence Indicator](./pkg/indicator/macd.go)
+ - [On-Balance Volume](./pkg/indicator/obv.go)
+ - [Pivot](./pkg/indicator/pivot.go)
+ - [Running Moving Average](./pkg/indicator/rma.go)
+ - [Relative Strength Index](./pkg/indicator/rsi.go)
+ - [Simple Moving Average](./pkg/indicator/sma.go)
+ - [Ehler's Super Smoother Filter](./pkg/indicator/ssf.go)
+ - [Stochastic Oscillator](./pkg/indicator/stoch.go)
+ - [SuperTrend](./pkg/indicator/supertrend.go)
+ - [Triple Exponential Moving Average](./pkg/indicator/tema.go)
+ - [Tillson T3 Moving Average](./pkg/indicator/till.go)
+ - [Triangular Moving Average](./pkg/indicator/tma.go)
+ - [Variable Index Dynamic Average](./pkg/indicator/vidya.go)
+ - [Volatility Indicator](./pkg/indicator/volatility.go)
+ - [Volume Weighted Average Price](./pkg/indicator/vwap.go)
+ - [Zero Lag Exponential Moving Average](./pkg/indicator/zlema.go)
+ - And more...
+- HeikinAshi OHLC / Normal OHLC (check [this config](https://github.com/c9s/bbgo/blob/main/config/skeleton.yaml#L5))
- React-powered Web Dashboard.
- Docker image ready.
- Kubernetes support.
@@ -51,7 +84,7 @@ You can use BBGO's underlying common exchange API, currently it supports 4+ majo
## Screenshots
-![bbgo dashboard](assets/screenshots/dashboard.jpeg)
+![bbgo dashboard](assets/screenshots/dashboard.jpeg)
![bbgo backtest report](assets/screenshots/backtest-report.jpg)
@@ -63,8 +96,8 @@ You can use BBGO's underlying common exchange API, currently it supports 4+ majo
- Kucoin Spot Exchange
- MAX Spot Exchange (located in Taiwan)
-
## Documentation and General Topics
+
- Check the [documentation index](doc/README.md)
## BBGO Tokenomics
@@ -105,6 +138,7 @@ bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/setup-bol
```
If you already have configuration somewhere, a download-only script might be suitable for you:
+
```sh
bash <(curl -s https://raw.githubusercontent.com/c9s/bbgo/main/scripts/download.sh)
```
@@ -114,7 +148,7 @@ Or refer to the [Release Page](https://github.com/c9s/bbgo/releases) and downloa
Since v2, we've added new float point implementation from dnum to support decimals with higher precision.
To download & setup, please refer to [Dnum Installation](doc/topics/dnum-binary.md)
-### One-click Linode StackScript:
+### One-click Linode StackScript
- BBGO Grid Trading on Binance
- BBGO USDT/TWD Grid Trading on MAX
@@ -165,14 +199,12 @@ Prepare your dotenv file `.env.local` and BBGO yaml config file `bbgo.yaml`.
To check the available environment variables, please see [Environment Variables](./doc/configuration/envvars.md)
-
The minimal bbgo.yaml could be generated by:
```sh
curl -o bbgo.yaml https://raw.githubusercontent.com/c9s/bbgo/main/config/minimal.yaml
```
-
To run strategy:
```sh
@@ -185,14 +217,12 @@ To start bbgo with the frontend dashboard:
bbgo run --enable-webserver
```
-
If you want to switch to other dotenv file, you can add an `--dotenv` option or `--config`:
```sh
bbgo sync --dotenv .env.dev --config config/grid.yaml --session binance
```
-
To query transfer history:
```sh
@@ -207,13 +237,13 @@ bbgo pnl --exchange binance --asset BTC --since "2019-01-01"
```
--->
-
## Advanced Configuration
### Testnet (Paper Trading)
Currently only supports binance testnet.
To run bbgo in testnet, apply new API keys from [Binance Test Network](https://testnet.binance.vision), and set the following env before you start bbgo:
+
```bash
export PAPER_TRADE=1
export DISABLE_MARKET_CACHE=1 # the symbols supported in testnet is far less than the mainnet
diff --git a/cmd/bbgo-lorca/main.go b/cmd/bbgo-lorca/main.go
index f9c44c200..361066164 100644
--- a/cmd/bbgo-lorca/main.go
+++ b/cmd/bbgo-lorca/main.go
@@ -102,7 +102,7 @@ func main() {
return
}
- if err := trader.LoadState() ; err != nil {
+ if err := trader.LoadState(); err != nil {
log.WithError(err).Error("failed to load strategy states")
return
}
diff --git a/cmd/bbgo-webview/main.go b/cmd/bbgo-webview/main.go
index 215d6d73e..3aff9361e 100644
--- a/cmd/bbgo-webview/main.go
+++ b/cmd/bbgo-webview/main.go
@@ -110,7 +110,7 @@ func main() {
return
}
- if err := trader.LoadState() ; err != nil {
+ if err := trader.LoadState(); err != nil {
log.WithError(err).Error("failed to load strategy states")
return
}
@@ -123,7 +123,7 @@ func main() {
}
// find a free port for binding the server
- ln, err := net.Listen("tcp", "127.0.0.1:" + strconv.Itoa(portNum))
+ ln, err := net.Listen("tcp", "127.0.0.1:"+strconv.Itoa(portNum))
if err != nil {
log.WithError(err).Error("can not bind listener")
return
diff --git a/cmd/update-doc/main.go b/cmd/update-doc/main.go
index ae4fcdfcf..214ff608b 100644
--- a/cmd/update-doc/main.go
+++ b/cmd/update-doc/main.go
@@ -1,12 +1,12 @@
package main
import (
+ "fmt"
"github.com/c9s/bbgo/pkg/cmd"
"github.com/spf13/cobra/doc"
+ "log"
"path"
"runtime"
- "fmt"
- "log"
)
func main() {
diff --git a/examples/kucoin/accounts.go b/examples/kucoin/accounts.go
index 087a5a4cc..7e09e13cc 100644
--- a/examples/kucoin/accounts.go
+++ b/examples/kucoin/accounts.go
@@ -39,4 +39,3 @@ var accountsCmd = &cobra.Command{
return nil
},
}
-
diff --git a/examples/kucoin/orders.go b/examples/kucoin/orders.go
index 8e13b874d..4acb01cbe 100644
--- a/examples/kucoin/orders.go
+++ b/examples/kucoin/orders.go
@@ -32,7 +32,6 @@ func init() {
ordersCmd.AddCommand(historyOrdersCmd)
}
-
// go run ./examples/kucoin orders
var ordersCmd = &cobra.Command{
Use: "orders",
@@ -73,7 +72,6 @@ var ordersCmd = &cobra.Command{
},
}
-
// go run ./examples/kucoin orders history
var historyOrdersCmd = &cobra.Command{
Use: "history [--symbol SYMBOL]",
@@ -105,7 +103,6 @@ var historyOrdersCmd = &cobra.Command{
},
}
-
// usage:
// go run ./examples/kucoin orders place --symbol LTC-USDT --price 50 --size 1 --order-type limit --side buy
var placeOrderCmd = &cobra.Command{
@@ -124,14 +121,12 @@ var placeOrderCmd = &cobra.Command{
req.OrderType(kucoinapi.OrderType(orderType))
-
side, err := cmd.Flags().GetString("side")
if err != nil {
return err
}
req.Side(kucoinapi.SideType(side))
-
symbol, err := cmd.Flags().GetString("symbol")
if err != nil {
return err
@@ -155,7 +150,6 @@ var placeOrderCmd = &cobra.Command{
}
-
size, err := cmd.Flags().GetString("size")
if err != nil {
return err
@@ -172,8 +166,6 @@ var placeOrderCmd = &cobra.Command{
},
}
-
-
// usage:
var cancelOrderCmd = &cobra.Command{
Use: "cancel",
diff --git a/examples/kucoin/symbols.go b/examples/kucoin/symbols.go
index 52656fdef..dd2420ce2 100644
--- a/examples/kucoin/symbols.go
+++ b/examples/kucoin/symbols.go
@@ -25,4 +25,3 @@ var symbolsCmd = &cobra.Command{
return nil
},
}
-
diff --git a/examples/kucoin/tickers.go b/examples/kucoin/tickers.go
index 6b7b060c6..0da748783 100644
--- a/examples/kucoin/tickers.go
+++ b/examples/kucoin/tickers.go
@@ -36,7 +36,6 @@ var tickersCmd = &cobra.Command{
logrus.Infof("ticker: %+v", ticker)
-
tickerStats, err := client.MarketDataService.GetTicker24HStat(args[0])
if err != nil {
return err
@@ -46,4 +45,3 @@ var tickersCmd = &cobra.Command{
return nil
},
}
-
diff --git a/examples/kucoin/websocket.go b/examples/kucoin/websocket.go
index 287d0e2e7..d522637d7 100644
--- a/examples/kucoin/websocket.go
+++ b/examples/kucoin/websocket.go
@@ -77,16 +77,16 @@ var websocketCmd = &cobra.Command{
id := time.Now().UnixNano() / int64(time.Millisecond)
wsCmds := []kucoin.WebSocketCommand{
/*
- {
- Id: id+1,
- Type: "subscribe",
- Topic: "/market/ticker:ETH-USDT",
- PrivateChannel: false,
- Response: true,
- },
+ {
+ Id: id+1,
+ Type: "subscribe",
+ Topic: "/market/ticker:ETH-USDT",
+ PrivateChannel: false,
+ Response: true,
+ },
*/
{
- Id: id+2,
+ Id: id + 2,
Type: "subscribe",
Topic: "/market/candles:ETH-USDT_1min",
PrivateChannel: false,
@@ -131,7 +131,6 @@ var websocketCmd = &cobra.Command{
logrus.WithError(err).Error("websocket ping error", err)
}
-
case <-interrupt:
logrus.Infof("interrupt")
@@ -144,8 +143,8 @@ var websocketCmd = &cobra.Command{
}
select {
- case <-done:
- case <-time.After(time.Second):
+ case <-done:
+ case <-time.After(time.Second):
}
return nil
}
diff --git a/examples/okex-book/main.go b/examples/okex-book/main.go
index dc9715c44..77218d81c 100644
--- a/examples/okex-book/main.go
+++ b/examples/okex-book/main.go
@@ -69,7 +69,6 @@ var rootCmd = &cobra.Command{
log.Infof("%+v", account)
-
log.Infof("ASSET BALANCES:")
assetBalances, err := client.AssetBalances()
if err != nil {
diff --git a/pkg/backtest/dumper_test.go b/pkg/backtest/dumper_test.go
index d5db13445..be13a2261 100644
--- a/pkg/backtest/dumper_test.go
+++ b/pkg/backtest/dumper_test.go
@@ -19,19 +19,19 @@ func TestKLineDumper(t *testing.T) {
t1 := time.Now()
err := dumper.Record(types.KLine{
- Exchange: types.ExchangeBinance,
- Symbol: "BTCUSDT",
- StartTime: types.Time(t1),
- EndTime: types.Time(t1.Add(time.Minute)),
- Interval: types.Interval1m,
- Open: fixedpoint.NewFromFloat(1000.0),
- High: fixedpoint.NewFromFloat(2000.0),
- Low: fixedpoint.NewFromFloat(3000.0),
- Close: fixedpoint.NewFromFloat(4000.0),
- Volume: fixedpoint.NewFromFloat(5000.0),
- QuoteVolume: fixedpoint.NewFromFloat(6000.0),
- NumberOfTrades: 10,
- Closed: true,
+ Exchange: types.ExchangeBinance,
+ Symbol: "BTCUSDT",
+ StartTime: types.Time(t1),
+ EndTime: types.Time(t1.Add(time.Minute)),
+ Interval: types.Interval1m,
+ Open: fixedpoint.NewFromFloat(1000.0),
+ High: fixedpoint.NewFromFloat(2000.0),
+ Low: fixedpoint.NewFromFloat(3000.0),
+ Close: fixedpoint.NewFromFloat(4000.0),
+ Volume: fixedpoint.NewFromFloat(5000.0),
+ QuoteVolume: fixedpoint.NewFromFloat(6000.0),
+ NumberOfTrades: 10,
+ Closed: true,
})
assert.NoError(t, err)
diff --git a/pkg/backtest/matching.go b/pkg/backtest/matching.go
index d567af658..37cced39a 100644
--- a/pkg/backtest/matching.go
+++ b/pkg/backtest/matching.go
@@ -30,6 +30,7 @@ var klineMatchingLogger *logrus.Entry = nil
// FeeToken is used to simulate the exchange platform fee token
// This is to ease the back-testing environment for closing positions.
const FeeToken = "FEE"
+
var useFeeToken = true
func init() {
diff --git a/pkg/backtest/recorder_test.go b/pkg/backtest/recorder_test.go
index c95a6b394..3b6348d8e 100644
--- a/pkg/backtest/recorder_test.go
+++ b/pkg/backtest/recorder_test.go
@@ -34,7 +34,6 @@ func TestStateRecorder(t *testing.T) {
assert.NoError(t, err)
assert.Len(t, recorder.writers, 1)
-
st.Position.AddTrade(types.Trade{
OrderID: 1,
Exchange: types.ExchangeBinance,
diff --git a/pkg/bbgo/environment.go b/pkg/bbgo/environment.go
index d6e55ff0f..b1f11da2f 100644
--- a/pkg/bbgo/environment.go
+++ b/pkg/bbgo/environment.go
@@ -596,7 +596,7 @@ func (environ *Environment) syncWithUserConfig(ctx context.Context, userConfig *
syncSymbolMap, restSymbols := categorizeSyncSymbol(userConfig.Sync.Symbols)
for _, session := range sessions {
syncSymbols := restSymbols
- if ss, ok := syncSymbolMap[session.Name] ; ok {
+ if ss, ok := syncSymbolMap[session.Name]; ok {
syncSymbols = append(syncSymbols, ss...)
}
@@ -928,10 +928,11 @@ func (environ *Environment) setupInteraction(persistence service.PersistenceServ
}
interact.AddCustomInteraction(&interact.AuthInteract{
- Strict: authStrict,
- Mode: authMode,
- Token: authToken, // can be empty string here
- OneTimePasswordKey: key, // can be nil here
+ Strict: authStrict,
+ Mode: authMode,
+ Token: authToken, // can be empty string here
+ // pragma: allowlist nextline secret
+ OneTimePasswordKey: key, // can be nil here
})
return nil
}
diff --git a/pkg/bbgo/notifier.go b/pkg/bbgo/notifier.go
index daf4b29e3..d74021f5c 100644
--- a/pkg/bbgo/notifier.go
+++ b/pkg/bbgo/notifier.go
@@ -69,4 +69,3 @@ func (m *Notifiability) NotifyTo(channel string, obj interface{}, args ...interf
n.NotifyTo(channel, obj, args...)
}
}
-
diff --git a/pkg/bbgo/profitstats.go b/pkg/bbgo/profitstats.go
index 920078f66..f30d11b65 100644
--- a/pkg/bbgo/profitstats.go
+++ b/pkg/bbgo/profitstats.go
@@ -1,2 +1 @@
package bbgo
-
diff --git a/pkg/bbgo/reflect.go b/pkg/bbgo/reflect.go
index 6488b166f..4f72e29ed 100644
--- a/pkg/bbgo/reflect.go
+++ b/pkg/bbgo/reflect.go
@@ -100,4 +100,3 @@ func newTypeValueInterface(typ reflect.Type) interface{} {
dst := reflect.New(typ)
return dst.Interface()
}
-
diff --git a/pkg/bbgo/strategycontroller_callbacks.go b/pkg/bbgo/strategycontroller_callbacks.go
index caa3e68fb..dd432fcb5 100644
--- a/pkg/bbgo/strategycontroller_callbacks.go
+++ b/pkg/bbgo/strategycontroller_callbacks.go
@@ -1,4 +1,4 @@
-// Code generated by "callbackgen -type StrategyController strategy_controller.go"; DO NOT EDIT.
+// Code generated by "callbackgen -type StrategyController -interface"; DO NOT EDIT.
package bbgo
@@ -33,3 +33,11 @@ func (s *StrategyController) EmitEmergencyStop() {
cb()
}
}
+
+type StrategyControllerEventHub interface {
+ OnSuspend(cb func())
+
+ OnResume(cb func())
+
+ OnEmergencyStop(cb func())
+}
diff --git a/pkg/bbgo/trader_test.go b/pkg/bbgo/trader_test.go
index 920078f66..f30d11b65 100644
--- a/pkg/bbgo/trader_test.go
+++ b/pkg/bbgo/trader_test.go
@@ -1,2 +1 @@
package bbgo
-
diff --git a/pkg/cmd/cmdutil/exchange.go b/pkg/cmd/cmdutil/exchange.go
index 3baca0880..b6eaaab51 100644
--- a/pkg/cmd/cmdutil/exchange.go
+++ b/pkg/cmd/cmdutil/exchange.go
@@ -1,2 +1 @@
package cmdutil
-
diff --git a/pkg/datasource/coinmarketcap/v1/client.go b/pkg/datasource/coinmarketcap/v1/client.go
index d1e68da60..be4f3d181 100644
--- a/pkg/datasource/coinmarketcap/v1/client.go
+++ b/pkg/datasource/coinmarketcap/v1/client.go
@@ -35,6 +35,7 @@ func New() *RestClient {
}
func (c *RestClient) Auth(apiKey string) {
+ // pragma: allowlist nextline secret
c.apiKey = apiKey
}
diff --git a/pkg/datasource/glassnode/glassnodeapi/client.go b/pkg/datasource/glassnode/glassnodeapi/client.go
index c1631a015..fcc71d0b1 100644
--- a/pkg/datasource/glassnode/glassnodeapi/client.go
+++ b/pkg/datasource/glassnode/glassnodeapi/client.go
@@ -35,6 +35,7 @@ func NewRestClient() *RestClient {
}
func (c *RestClient) Auth(apiKey string) {
+ // pragma: allowlist nextline secret
c.apiKey = apiKey
}
diff --git a/pkg/depth/buffer.go b/pkg/depth/buffer.go
index 620743639..0b627f255 100644
--- a/pkg/depth/buffer.go
+++ b/pkg/depth/buffer.go
@@ -3,6 +3,7 @@ package depth
import (
"fmt"
"sync"
+ "sync/atomic"
"time"
log "github.com/sirupsen/logrus"
@@ -40,7 +41,7 @@ type Buffer struct {
updateTimeout time.Duration
// bufferingPeriod is used to buffer the update message before we get the full depth
- bufferingPeriod time.Duration
+ bufferingPeriod atomic.Value
}
func NewBuffer(fetcher SnapshotFetcher) *Buffer {
@@ -55,7 +56,7 @@ func (b *Buffer) SetUpdateTimeout(d time.Duration) {
}
func (b *Buffer) SetBufferingPeriod(d time.Duration) {
- b.bufferingPeriod = d
+ b.bufferingPeriod.Store(d)
}
func (b *Buffer) resetSnapshot() {
@@ -185,8 +186,8 @@ func (b *Buffer) fetchAndPush() error {
func (b *Buffer) tryFetch() {
for {
- if b.bufferingPeriod > 0 {
- <-time.After(b.bufferingPeriod)
+ if period := b.bufferingPeriod.Load(); period != nil {
+ <-time.After(period.(time.Duration))
}
err := b.fetchAndPush()
diff --git a/pkg/exchange/batch/batch_test.go b/pkg/exchange/batch/batch_test.go
index 720b9c4f1..389c4ab2a 100644
--- a/pkg/exchange/batch/batch_test.go
+++ b/pkg/exchange/batch/batch_test.go
@@ -1,2 +1 @@
package batch
-
diff --git a/pkg/exchange/batch/margin_interest.go b/pkg/exchange/batch/margin_interest.go
index 5ffe823b5..4e8224bc9 100644
--- a/pkg/exchange/batch/margin_interest.go
+++ b/pkg/exchange/batch/margin_interest.go
@@ -15,8 +15,8 @@ type MarginInterestBatchQuery struct {
func (e *MarginInterestBatchQuery) Query(ctx context.Context, asset string, startTime, endTime time.Time) (c chan types.MarginInterest, errC chan error) {
query := &AsyncTimeRangedBatchQuery{
- Type: types.MarginInterest{},
- Limiter: rate.NewLimiter(rate.Every(5*time.Second), 2),
+ Type: types.MarginInterest{},
+ Limiter: rate.NewLimiter(rate.Every(5*time.Second), 2),
JumpIfEmpty: time.Hour * 24 * 30,
Q: func(startTime, endTime time.Time) (interface{}, error) {
return e.QueryInterestHistory(ctx, asset, &startTime, &endTime)
diff --git a/pkg/exchange/batch/margin_liquidation.go b/pkg/exchange/batch/margin_liquidation.go
index 1f4425382..3726d1891 100644
--- a/pkg/exchange/batch/margin_liquidation.go
+++ b/pkg/exchange/batch/margin_liquidation.go
@@ -16,8 +16,8 @@ type MarginLiquidationBatchQuery struct {
func (e *MarginLiquidationBatchQuery) Query(ctx context.Context, startTime, endTime time.Time) (c chan types.MarginLiquidation, errC chan error) {
query := &AsyncTimeRangedBatchQuery{
- Type: types.MarginLiquidation{},
- Limiter: rate.NewLimiter(rate.Every(5*time.Second), 2),
+ Type: types.MarginLiquidation{},
+ Limiter: rate.NewLimiter(rate.Every(5*time.Second), 2),
JumpIfEmpty: time.Hour * 24 * 30,
Q: func(startTime, endTime time.Time) (interface{}, error) {
return e.QueryLiquidationHistory(ctx, &startTime, &endTime)
diff --git a/pkg/exchange/batch/margin_repay.go b/pkg/exchange/batch/margin_repay.go
index 0d5c29e25..a30ea1208 100644
--- a/pkg/exchange/batch/margin_repay.go
+++ b/pkg/exchange/batch/margin_repay.go
@@ -16,8 +16,8 @@ type MarginRepayBatchQuery struct {
func (e *MarginRepayBatchQuery) Query(ctx context.Context, asset string, startTime, endTime time.Time) (c chan types.MarginRepay, errC chan error) {
query := &AsyncTimeRangedBatchQuery{
- Type: types.MarginRepay{},
- Limiter: rate.NewLimiter(rate.Every(5*time.Second), 2),
+ Type: types.MarginRepay{},
+ Limiter: rate.NewLimiter(rate.Every(5*time.Second), 2),
JumpIfEmpty: time.Hour * 24 * 30,
Q: func(startTime, endTime time.Time) (interface{}, error) {
return e.QueryRepayHistory(ctx, asset, &startTime, &endTime)
diff --git a/pkg/exchange/batch/trade.go b/pkg/exchange/batch/trade.go
index 351800b06..dc5abce48 100644
--- a/pkg/exchange/batch/trade.go
+++ b/pkg/exchange/batch/trade.go
@@ -21,7 +21,7 @@ func (e TradeBatchQuery) Query(ctx context.Context, symbol string, options *type
startTime := *options.StartTime
endTime := *options.EndTime
query := &AsyncTimeRangedBatchQuery{
- Type: types.Trade{},
+ Type: types.Trade{},
Q: func(startTime, endTime time.Time) (interface{}, error) {
return e.ExchangeTradeHistoryService.QueryTrades(ctx, symbol, options)
},
diff --git a/pkg/exchange/binance/binanceapi/client.go b/pkg/exchange/binance/binanceapi/client.go
index 45c39e6f1..0fa05db42 100644
--- a/pkg/exchange/binance/binanceapi/client.go
+++ b/pkg/exchange/binance/binanceapi/client.go
@@ -60,6 +60,7 @@ func NewClient(baseURL string) *RestClient {
func (c *RestClient) Auth(key, secret string) {
c.Key = key
+ // pragma: allowlist nextline secret
c.Secret = secret
}
diff --git a/pkg/exchange/binance/binanceapi/client_test.go b/pkg/exchange/binance/binanceapi/client_test.go
index ac32a3f18..e86bba783 100644
--- a/pkg/exchange/binance/binanceapi/client_test.go
+++ b/pkg/exchange/binance/binanceapi/client_test.go
@@ -84,7 +84,6 @@ func TestClient_NewSpotRebateHistoryRequest(t *testing.T) {
t.Logf("spot rebate history: %+v", history)
}
-
func TestClient_NewGetMarginInterestRateHistoryRequest(t *testing.T) {
client := getTestClientOrSkip(t)
ctx := context.Background()
@@ -121,8 +120,8 @@ func TestClient_privateCall(t *testing.T) {
resp, err := client.SendRequest(req)
if assert.NoError(t, err) {
- var feeStructs []struct{
- Symbol string `json:"symbol"`
+ var feeStructs []struct {
+ Symbol string `json:"symbol"`
MakerCommission string `json:"makerCommission"`
TakerCommission string `json:"takerCommission"`
}
@@ -131,7 +130,7 @@ func TestClient_privateCall(t *testing.T) {
assert.NotEmpty(t, feeStructs)
}
} else {
- dump, _ := httputil.DumpRequest(req, true);
+ dump, _ := httputil.DumpRequest(req, true)
log.Printf("request: %s", dump)
}
}
diff --git a/pkg/exchange/binance/binanceapi/get_trade_fee_request.go b/pkg/exchange/binance/binanceapi/get_trade_fee_request.go
index 1816f5f07..0b6c54406 100644
--- a/pkg/exchange/binance/binanceapi/get_trade_fee_request.go
+++ b/pkg/exchange/binance/binanceapi/get_trade_fee_request.go
@@ -7,9 +7,9 @@ import (
)
type TradeFee struct {
- Symbol string `json:"symbol"`
+ Symbol string `json:"symbol"`
MakerCommission fixedpoint.Value `json:"makerCommission"`
- TakerCommission fixedpoint.Value `json:"takerCommission"`
+ TakerCommission fixedpoint.Value `json:"takerCommission"`
}
//go:generate requestgen -method GET -url "/sapi/v1/asset/tradeFee" -type GetTradeFeeRequest -responseType []TradeFee
diff --git a/pkg/exchange/binance/exchange.go b/pkg/exchange/binance/exchange.go
index f8a5fc023..9dc464e65 100644
--- a/pkg/exchange/binance/exchange.go
+++ b/pkg/exchange/binance/exchange.go
@@ -122,7 +122,8 @@ func New(key, secret string) *Exchange {
}
return &Exchange{
- key: key,
+ key: key,
+ // pragma: allowlist nextline secret
secret: secret,
client: client,
futuresClient: futuresClient,
diff --git a/pkg/exchange/ftx/convert_test.go b/pkg/exchange/ftx/convert_test.go
index 3eee61a6a..3a1ea7f1e 100644
--- a/pkg/exchange/ftx/convert_test.go
+++ b/pkg/exchange/ftx/convert_test.go
@@ -119,4 +119,3 @@ func Test_toLocalOrderTypeWithMarket(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, ftxapi.OrderTypeMarket, orderType)
}
-
diff --git a/pkg/exchange/ftx/exchange.go b/pkg/exchange/ftx/exchange.go
index a941caa0c..b947dc5c0 100644
--- a/pkg/exchange/ftx/exchange.go
+++ b/pkg/exchange/ftx/exchange.go
@@ -90,8 +90,9 @@ func NewExchange(key, secret string, subAccount string) *Exchange {
client: client,
restEndpoint: u,
key: key,
- secret: secret,
- subAccount: subAccount,
+ // pragma: allowlist nextline secret
+ secret: secret,
+ subAccount: subAccount,
}
}
diff --git a/pkg/exchange/ftx/ftxapi/account.go b/pkg/exchange/ftx/ftxapi/account.go
index 345ce7864..f6309f272 100644
--- a/pkg/exchange/ftx/ftxapi/account.go
+++ b/pkg/exchange/ftx/ftxapi/account.go
@@ -66,7 +66,6 @@ func (c *RestClient) NewGetPositionsRequest() *GetPositionsRequest {
}
}
-
type Balance struct {
Coin string `json:"coin"`
Free fixedpoint.Value `json:"free"`
diff --git a/pkg/exchange/ftx/ftxapi/client.go b/pkg/exchange/ftx/ftxapi/client.go
index 0da9ee516..2437bd48f 100644
--- a/pkg/exchange/ftx/ftxapi/client.go
+++ b/pkg/exchange/ftx/ftxapi/client.go
@@ -68,6 +68,7 @@ func NewClient() *RestClient {
func (c *RestClient) Auth(key, secret, subAccount string) {
c.Key = key
+ // pragma: allowlist nextline secret
c.Secret = secret
c.subAccount = subAccount
}
@@ -200,5 +201,3 @@ func castPayload(payload interface{}) ([]byte, error) {
return nil, nil
}
-
-
diff --git a/pkg/exchange/ftx/ftxapi/client_test.go b/pkg/exchange/ftx/ftxapi/client_test.go
index 421c0d6a0..a73f59566 100644
--- a/pkg/exchange/ftx/ftxapi/client_test.go
+++ b/pkg/exchange/ftx/ftxapi/client_test.go
@@ -37,7 +37,7 @@ func TestClient_Requests(t *testing.T) {
return
}
- ctx, cancel := context.WithTimeout(context.TODO(), 15 * time.Second)
+ ctx, cancel := context.WithTimeout(context.TODO(), 15*time.Second)
defer cancel()
client := NewClient()
@@ -45,13 +45,13 @@ func TestClient_Requests(t *testing.T) {
testCases := []struct {
name string
- tt func(t *testing.T)
- } {
+ tt func(t *testing.T)
+ }{
{
name: "GetMarketsRequest",
tt: func(t *testing.T) {
req := client.NewGetMarketsRequest()
- markets ,err := req.Do(ctx)
+ markets, err := req.Do(ctx)
assert.NoError(t, err)
assert.NotNil(t, markets)
t.Logf("markets: %+v", markets)
@@ -61,7 +61,7 @@ func TestClient_Requests(t *testing.T) {
name: "GetAccountRequest",
tt: func(t *testing.T) {
req := client.NewGetAccountRequest()
- account ,err := req.Do(ctx)
+ account, err := req.Do(ctx)
assert.NoError(t, err)
assert.NotNil(t, account)
t.Logf("account: %+v", account)
@@ -78,7 +78,7 @@ func TestClient_Requests(t *testing.T) {
Side(SideBuy).
Market("LTC/USDT")
- createdOrder,err := req.Do(ctx)
+ createdOrder, err := req.Do(ctx)
if assert.NoError(t, err) {
assert.NotNil(t, createdOrder)
t.Logf("createdOrder: %+v", createdOrder)
diff --git a/pkg/exchange/ftx/ftxapi/market.go b/pkg/exchange/ftx/ftxapi/market.go
index 6035d3526..4cac2fee9 100644
--- a/pkg/exchange/ftx/ftxapi/market.go
+++ b/pkg/exchange/ftx/ftxapi/market.go
@@ -25,7 +25,7 @@ type Market struct {
Underlying string `json:"underlying"`
Enabled bool `json:"enabled"`
Ask fixedpoint.Value `json:"ask"`
- Bid fixedpoint.Value `json:"bid"`
+ Bid fixedpoint.Value `json:"bid"`
Last fixedpoint.Value `json:"last"`
PostOnly bool `json:"postOnly"`
Price fixedpoint.Value `json:"price"`
@@ -33,6 +33,7 @@ type Market struct {
SizeIncrement fixedpoint.Value `json:"sizeIncrement"`
Restricted bool `json:"restricted"`
}
+
//go:generate GetRequest -url "api/markets" -type GetMarketsRequest -responseDataType []Market
type GetMarketsRequest struct {
client requestgen.APIClient
diff --git a/pkg/exchange/ftx/ftxapi/trade.go b/pkg/exchange/ftx/ftxapi/trade.go
index ccc390c39..323481d20 100644
--- a/pkg/exchange/ftx/ftxapi/trade.go
+++ b/pkg/exchange/ftx/ftxapi/trade.go
@@ -128,7 +128,7 @@ type Fill struct {
BaseCurrency string `json:"baseCurrency"`
QuoteCurrency string `json:"quoteCurrency"`
OrderId uint64 `json:"orderId"`
- TradeId uint64 `json:"tradeId"`
+ TradeId uint64 `json:"tradeId"`
Price fixedpoint.Value `json:"price"`
Side Side `json:"side"`
Size fixedpoint.Value `json:"size"`
diff --git a/pkg/exchange/ftx/generate_symbol_map.go b/pkg/exchange/ftx/generate_symbol_map.go
index 1096494b0..b2c68072e 100644
--- a/pkg/exchange/ftx/generate_symbol_map.go
+++ b/pkg/exchange/ftx/generate_symbol_map.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
diff --git a/pkg/exchange/ftx/rest.go b/pkg/exchange/ftx/rest.go
index 9d9cc96b1..18282551c 100644
--- a/pkg/exchange/ftx/rest.go
+++ b/pkg/exchange/ftx/rest.go
@@ -92,6 +92,7 @@ func newRestRequest(c *http.Client, baseURL *url.URL) *restRequest {
func (r *restRequest) Auth(key, secret string) *restRequest {
r.key = key
+ // pragma: allowlist nextline secret
r.secret = secret
return r
}
diff --git a/pkg/exchange/ftx/rest_responses.go b/pkg/exchange/ftx/rest_responses.go
index cb6c318af..6174d6846 100644
--- a/pkg/exchange/ftx/rest_responses.go
+++ b/pkg/exchange/ftx/rest_responses.go
@@ -5,8 +5,8 @@ import (
"strings"
"time"
- "github.com/c9s/bbgo/pkg/types"
"github.com/c9s/bbgo/pkg/fixedpoint"
+ "github.com/c9s/bbgo/pkg/types"
)
// ex: 2019-03-05T09:56:55.728933+00:00
@@ -121,7 +121,7 @@ type position struct {
Cost fixedpoint.Value `json:"cost"`
EntryPrice fixedpoint.Value `json:"entryPrice"`
EstimatedLiquidationPrice fixedpoint.Value `json:"estimatedLiquidationPrice"`
- Future string `json:"future"`
+ Future string `json:"future"`
InitialMarginRequirement fixedpoint.Value `json:"initialMarginRequirement"`
LongOrderSize fixedpoint.Value `json:"longOrderSize"`
MaintenanceMarginRequirement fixedpoint.Value `json:"maintenanceMarginRequirement"`
@@ -129,7 +129,7 @@ type position struct {
OpenSize fixedpoint.Value `json:"openSize"`
RealizedPnl fixedpoint.Value `json:"realizedPnl"`
ShortOrderSize fixedpoint.Value `json:"shortOrderSize"`
- Side string `json:"Side"`
+ Side string `json:"Side"`
Size fixedpoint.Value `json:"size"`
UnrealizedPnl fixedpoint.Value `json:"unrealizedPnl"`
CollateralUsed fixedpoint.Value `json:"collateralUsed"`
@@ -139,7 +139,7 @@ type balances struct {
Success bool `json:"success"`
Result []struct {
- Coin string `json:"coin"`
+ Coin string `json:"coin"`
Free fixedpoint.Value `json:"free"`
Total fixedpoint.Value `json:"total"`
} `json:"result"`
@@ -178,9 +178,9 @@ type marketsResponse struct {
}
type market struct {
- Name string `json:"name"`
- Enabled bool `json:"enabled"`
- PostOnly bool `json:"postOnly"`
+ Name string `json:"name"`
+ Enabled bool `json:"enabled"`
+ PostOnly bool `json:"postOnly"`
PriceIncrement fixedpoint.Value `json:"priceIncrement"`
SizeIncrement fixedpoint.Value `json:"sizeIncrement"`
MinProvideSize fixedpoint.Value `json:"minProvideSize"`
@@ -188,12 +188,12 @@ type market struct {
Bid fixedpoint.Value `json:"bid"`
Ask fixedpoint.Value `json:"ask"`
Price fixedpoint.Value `json:"price"`
- Type string `json:"type"`
- BaseCurrency string `json:"baseCurrency"`
- QuoteCurrency string `json:"quoteCurrency"`
- Underlying string `json:"underlying"`
- Restricted bool `json:"restricted"`
- HighLeverageFeeExempt bool `json:"highLeverageFeeExempt"`
+ Type string `json:"type"`
+ BaseCurrency string `json:"baseCurrency"`
+ QuoteCurrency string `json:"quoteCurrency"`
+ Underlying string `json:"underlying"`
+ Restricted bool `json:"restricted"`
+ HighLeverageFeeExempt bool `json:"highLeverageFeeExempt"`
Change1h fixedpoint.Value `json:"change1h"`
Change24h fixedpoint.Value `json:"change24h"`
ChangeBod fixedpoint.Value `json:"changeBod"`
@@ -222,12 +222,12 @@ type HistoricalPricesResponse struct {
}
type Candle struct {
- Close fixedpoint.Value `json:"close"`
- High fixedpoint.Value `json:"high"`
- Low fixedpoint.Value `json:"low"`
- Open fixedpoint.Value `json:"open"`
- StartTime datetime `json:"startTime"`
- Volume fixedpoint.Value `json:"volume"`
+ Close fixedpoint.Value `json:"close"`
+ High fixedpoint.Value `json:"high"`
+ Low fixedpoint.Value `json:"low"`
+ Open fixedpoint.Value `json:"open"`
+ StartTime datetime `json:"startTime"`
+ Volume fixedpoint.Value `json:"volume"`
}
type ordersHistoryResponse struct {
@@ -248,24 +248,24 @@ type cancelOrderResponse struct {
}
type order struct {
- CreatedAt datetime `json:"createdAt"`
- FilledSize fixedpoint.Value `json:"filledSize"`
+ CreatedAt datetime `json:"createdAt"`
+ FilledSize fixedpoint.Value `json:"filledSize"`
// Future field is not defined in the response format table but in the response example.
- Future string `json:"future"`
- ID int64 `json:"id"`
- Market string `json:"market"`
+ Future string `json:"future"`
+ ID int64 `json:"id"`
+ Market string `json:"market"`
Price fixedpoint.Value `json:"price"`
AvgFillPrice fixedpoint.Value `json:"avgFillPrice"`
RemainingSize fixedpoint.Value `json:"remainingSize"`
- Side string `json:"side"`
+ Side string `json:"side"`
Size fixedpoint.Value `json:"size"`
- Status string `json:"status"`
- Type string `json:"type"`
- ReduceOnly bool `json:"reduceOnly"`
- Ioc bool `json:"ioc"`
- PostOnly bool `json:"postOnly"`
- ClientId string `json:"clientId"`
- Liquidation bool `json:"liquidation"`
+ Status string `json:"status"`
+ Type string `json:"type"`
+ ReduceOnly bool `json:"reduceOnly"`
+ Ioc bool `json:"ioc"`
+ PostOnly bool `json:"postOnly"`
+ ClientId string `json:"clientId"`
+ Liquidation bool `json:"liquidation"`
}
type orderResponse struct {
@@ -299,18 +299,18 @@ type depositHistoryResponse struct {
}
type depositHistory struct {
- ID int64 `json:"id"`
- Coin string `json:"coin"`
- TxID string `json:"txid"`
- Address address `json:"address"`
- Confirmations int64 `json:"confirmations"`
- ConfirmedTime datetime `json:"confirmedTime"`
- Fee fixedpoint.Value `json:"fee"`
- SentTime datetime `json:"sentTime"`
- Size fixedpoint.Value `json:"size"`
- Status string `json:"status"`
- Time datetime `json:"time"`
- Notes string `json:"notes"`
+ ID int64 `json:"id"`
+ Coin string `json:"coin"`
+ TxID string `json:"txid"`
+ Address address `json:"address"`
+ Confirmations int64 `json:"confirmations"`
+ ConfirmedTime datetime `json:"confirmedTime"`
+ Fee fixedpoint.Value `json:"fee"`
+ SentTime datetime `json:"sentTime"`
+ Size fixedpoint.Value `json:"size"`
+ Status string `json:"status"`
+ Time datetime `json:"time"`
+ Notes string `json:"notes"`
}
/**
@@ -354,22 +354,22 @@ type fillsResponse struct {
}
*/
type fill struct {
- ID int64 `json:"id"`
- Market string `json:"market"`
- Future string `json:"future"`
- BaseCurrency string `json:"baseCurrency"`
- QuoteCurrency string `json:"quoteCurrency"`
- Type string `json:"type"`
- Side types.SideType `json:"side"`
- Price fixedpoint.Value `json:"price"`
- Size fixedpoint.Value `json:"size"`
- OrderId uint64 `json:"orderId"`
- Time datetime `json:"time"`
- TradeId uint64 `json:"tradeId"`
- FeeRate fixedpoint.Value `json:"feeRate"`
- Fee fixedpoint.Value `json:"fee"`
- FeeCurrency string `json:"feeCurrency"`
- Liquidity string `json:"liquidity"`
+ ID int64 `json:"id"`
+ Market string `json:"market"`
+ Future string `json:"future"`
+ BaseCurrency string `json:"baseCurrency"`
+ QuoteCurrency string `json:"quoteCurrency"`
+ Type string `json:"type"`
+ Side types.SideType `json:"side"`
+ Price fixedpoint.Value `json:"price"`
+ Size fixedpoint.Value `json:"size"`
+ OrderId uint64 `json:"orderId"`
+ Time datetime `json:"time"`
+ TradeId uint64 `json:"tradeId"`
+ FeeRate fixedpoint.Value `json:"feeRate"`
+ Fee fixedpoint.Value `json:"fee"`
+ FeeCurrency string `json:"feeCurrency"`
+ Liquidity string `json:"liquidity"`
}
type transferResponse struct {
@@ -378,12 +378,12 @@ type transferResponse struct {
}
type transfer struct {
- Id uint `json:"id"`
- Coin string `json:"coin"`
+ Id uint `json:"id"`
+ Coin string `json:"coin"`
Size fixedpoint.Value `json:"size"`
- Time string `json:"time"`
- Notes string `json:"notes"`
- Status string `json:"status"`
+ Time string `json:"time"`
+ Notes string `json:"notes"`
+ Status string `json:"status"`
}
func (t *transfer) String() string {
diff --git a/pkg/exchange/ftx/rest_wallet_request.go b/pkg/exchange/ftx/rest_wallet_request.go
index addbab521..039a32553 100644
--- a/pkg/exchange/ftx/rest_wallet_request.go
+++ b/pkg/exchange/ftx/rest_wallet_request.go
@@ -42,4 +42,3 @@ func (r *walletRequest) DepositHistory(ctx context.Context, since time.Time, unt
return d, nil
}
-
diff --git a/pkg/exchange/ftx/stream.go b/pkg/exchange/ftx/stream.go
index 4e6650c5d..6a70a249d 100644
--- a/pkg/exchange/ftx/stream.go
+++ b/pkg/exchange/ftx/stream.go
@@ -37,8 +37,9 @@ type klineSubscription struct {
func NewStream(key, secret string, subAccount string, e *Exchange) *Stream {
s := &Stream{
- exchange: e,
- key: key,
+ exchange: e,
+ key: key,
+ // pragma: allowlist nextline secret
secret: secret,
subAccount: subAccount,
StandardStream: &types.StandardStream{},
diff --git a/pkg/exchange/ftx/symbols.go b/pkg/exchange/ftx/symbols.go
index 77907297c..33cb02296 100644
--- a/pkg/exchange/ftx/symbols.go
+++ b/pkg/exchange/ftx/symbols.go
@@ -1,818 +1,819 @@
// Code generated by go generate; DO NOT EDIT.
package ftx
+
var symbolMap = map[string]string{
- "1INCH-0325": "1INCH-0325",
- "1INCH-PERP": "1INCH-PERP",
- "1INCHUSD": "1INCH/USD",
- "AAPL-0325": "AAPL-0325",
- "AAPLUSD": "AAPL/USD",
- "AAVE-0325": "AAVE-0325",
- "AAVE-PERP": "AAVE-PERP",
- "AAVEUSD": "AAVE/USD",
- "AAVEUSDT": "AAVE/USDT",
- "ABNB-0325": "ABNB-0325",
- "ABNBUSD": "ABNB/USD",
- "ACB-0325": "ACB-0325",
- "ACBUSD": "ACB/USD",
- "ADA-0325": "ADA-0325",
- "ADA-PERP": "ADA-PERP",
- "ADABEARUSD": "ADABEAR/USD",
- "ADABULLUSD": "ADABULL/USD",
- "ADAHALFUSD": "ADAHALF/USD",
- "ADAHEDGEUSD": "ADAHEDGE/USD",
- "AGLD-PERP": "AGLD-PERP",
- "AGLDUSD": "AGLD/USD",
- "AKROUSD": "AKRO/USD",
- "AKROUSDT": "AKRO/USDT",
- "ALCX-PERP": "ALCX-PERP",
- "ALCXUSD": "ALCX/USD",
- "ALEPHUSD": "ALEPH/USD",
- "ALGO-0325": "ALGO-0325",
- "ALGO-PERP": "ALGO-PERP",
- "ALGOBEARUSD": "ALGOBEAR/USD",
- "ALGOBULLUSD": "ALGOBULL/USD",
- "ALGOHALFUSD": "ALGOHALF/USD",
- "ALGOHEDGEUSD": "ALGOHEDGE/USD",
- "ALICE-PERP": "ALICE-PERP",
- "ALICEUSD": "ALICE/USD",
- "ALPHA-PERP": "ALPHA-PERP",
- "ALPHAUSD": "ALPHA/USD",
- "ALT-0325": "ALT-0325",
- "ALT-PERP": "ALT-PERP",
- "ALTBEARUSD": "ALTBEAR/USD",
- "ALTBULLUSD": "ALTBULL/USD",
- "ALTHALFUSD": "ALTHALF/USD",
- "ALTHEDGEUSD": "ALTHEDGE/USD",
- "AMC-0325": "AMC-0325",
- "AMCUSD": "AMC/USD",
- "AMD-0325": "AMD-0325",
- "AMDUSD": "AMD/USD",
- "AMPL-PERP": "AMPL-PERP",
- "AMPLUSD": "AMPL/USD",
- "AMPLUSDT": "AMPL/USDT",
- "AMZN-0325": "AMZN-0325",
- "AMZNUSD": "AMZN/USD",
- "APHAUSD": "APHA/USD",
- "AR-PERP": "AR-PERP",
- "ARKK-0325": "ARKK-0325",
- "ARKKUSD": "ARKK/USD",
- "ASD-PERP": "ASD-PERP",
- "ASDBEARUSD": "ASDBEAR/USD",
- "ASDBEARUSDT": "ASDBEAR/USDT",
- "ASDBULLUSD": "ASDBULL/USD",
- "ASDBULLUSDT": "ASDBULL/USDT",
- "ASDHALFUSD": "ASDHALF/USD",
- "ASDHEDGEUSD": "ASDHEDGE/USD",
- "ASDUSD": "ASD/USD",
- "ATLAS-PERP": "ATLAS-PERP",
- "ATLASUSD": "ATLAS/USD",
- "ATOM-0325": "ATOM-0325",
- "ATOM-PERP": "ATOM-PERP",
- "ATOMBEARUSD": "ATOMBEAR/USD",
- "ATOMBULLUSD": "ATOMBULL/USD",
- "ATOMHALFUSD": "ATOMHALF/USD",
- "ATOMHEDGEUSD": "ATOMHEDGE/USD",
- "ATOMUSD": "ATOM/USD",
- "ATOMUSDT": "ATOM/USDT",
- "AUDIO-PERP": "AUDIO-PERP",
- "AUDIOUSD": "AUDIO/USD",
- "AUDIOUSDT": "AUDIO/USDT",
- "AURYUSD": "AURY/USD",
- "AVAX-0325": "AVAX-0325",
- "AVAX-PERP": "AVAX-PERP",
- "AVAXBTC": "AVAX/BTC",
- "AVAXUSD": "AVAX/USD",
- "AVAXUSDT": "AVAX/USDT",
- "AXS-PERP": "AXS-PERP",
- "AXSUSD": "AXS/USD",
- "BABA-0325": "BABA-0325",
- "BABAUSD": "BABA/USD",
- "BADGER-PERP": "BADGER-PERP",
- "BADGERUSD": "BADGER/USD",
- "BAL-0325": "BAL-0325",
- "BAL-PERP": "BAL-PERP",
- "BALBEARUSD": "BALBEAR/USD",
- "BALBEARUSDT": "BALBEAR/USDT",
- "BALBULLUSD": "BALBULL/USD",
- "BALBULLUSDT": "BALBULL/USDT",
- "BALHALFUSD": "BALHALF/USD",
- "BALHEDGEUSD": "BALHEDGE/USD",
- "BALUSD": "BAL/USD",
- "BALUSDT": "BAL/USDT",
- "BAND-PERP": "BAND-PERP",
- "BANDUSD": "BAND/USD",
- "BAO-PERP": "BAO-PERP",
- "BAOUSD": "BAO/USD",
- "BARUSD": "BAR/USD",
- "BAT-PERP": "BAT-PERP",
- "BATUSD": "BAT/USD",
- "BB-0325": "BB-0325",
- "BBUSD": "BB/USD",
- "BCH-0325": "BCH-0325",
- "BCH-PERP": "BCH-PERP",
- "BCHBEARUSD": "BCHBEAR/USD",
- "BCHBEARUSDT": "BCHBEAR/USDT",
- "BCHBTC": "BCH/BTC",
- "BCHBULLUSD": "BCHBULL/USD",
- "BCHBULLUSDT": "BCHBULL/USDT",
- "BCHHALFUSD": "BCHHALF/USD",
- "BCHHEDGEUSD": "BCHHEDGE/USD",
- "BCHUSD": "BCH/USD",
- "BCHUSDT": "BCH/USDT",
- "BEARSHITUSD": "BEARSHIT/USD",
- "BEARUSD": "BEAR/USD",
- "BEARUSDT": "BEAR/USDT",
- "BICOUSD": "BICO/USD",
- "BILI-0325": "BILI-0325",
- "BILIUSD": "BILI/USD",
- "BIT-PERP": "BIT-PERP",
- "BITO-0325": "BITO-0325",
- "BITOUSD": "BITO/USD",
- "BITUSD": "BIT/USD",
- "BITW-0325": "BITW-0325",
- "BITWUSD": "BITW/USD",
- "BLTUSD": "BLT/USD",
- "BNB-0325": "BNB-0325",
- "BNB-PERP": "BNB-PERP",
- "BNBBEARUSD": "BNBBEAR/USD",
- "BNBBEARUSDT": "BNBBEAR/USDT",
- "BNBBTC": "BNB/BTC",
- "BNBBULLUSD": "BNBBULL/USD",
- "BNBBULLUSDT": "BNBBULL/USDT",
- "BNBHALFUSD": "BNBHALF/USD",
- "BNBHEDGEUSD": "BNBHEDGE/USD",
- "BNBUSD": "BNB/USD",
- "BNBUSDT": "BNB/USDT",
- "BNT-PERP": "BNT-PERP",
- "BNTUSD": "BNT/USD",
- "BNTX-0325": "BNTX-0325",
- "BNTXUSD": "BNTX/USD",
- "BOBA-PERP": "BOBA-PERP",
- "BOBAUSD": "BOBA/USD",
- "BOLSONARO2022": "BOLSONARO2022",
- "BRZ-PERP": "BRZ-PERP",
- "BRZUSD": "BRZ/USD",
- "BRZUSDT": "BRZ/USDT",
- "BSV-0325": "BSV-0325",
- "BSV-PERP": "BSV-PERP",
- "BSVBEARUSD": "BSVBEAR/USD",
- "BSVBEARUSDT": "BSVBEAR/USDT",
- "BSVBULLUSD": "BSVBULL/USD",
- "BSVBULLUSDT": "BSVBULL/USDT",
- "BSVHALFUSD": "BSVHALF/USD",
- "BSVHEDGEUSD": "BSVHEDGE/USD",
- "BTC-0325": "BTC-0325",
- "BTC-0624": "BTC-0624",
- "BTC-MOVE-0303": "BTC-MOVE-0303",
- "BTC-MOVE-0304": "BTC-MOVE-0304",
- "BTC-MOVE-2022Q1": "BTC-MOVE-2022Q1",
- "BTC-MOVE-2022Q2": "BTC-MOVE-2022Q2",
- "BTC-MOVE-2022Q3": "BTC-MOVE-2022Q3",
+ "1INCH-0325": "1INCH-0325",
+ "1INCH-PERP": "1INCH-PERP",
+ "1INCHUSD": "1INCH/USD",
+ "AAPL-0325": "AAPL-0325",
+ "AAPLUSD": "AAPL/USD",
+ "AAVE-0325": "AAVE-0325",
+ "AAVE-PERP": "AAVE-PERP",
+ "AAVEUSD": "AAVE/USD",
+ "AAVEUSDT": "AAVE/USDT",
+ "ABNB-0325": "ABNB-0325",
+ "ABNBUSD": "ABNB/USD",
+ "ACB-0325": "ACB-0325",
+ "ACBUSD": "ACB/USD",
+ "ADA-0325": "ADA-0325",
+ "ADA-PERP": "ADA-PERP",
+ "ADABEARUSD": "ADABEAR/USD",
+ "ADABULLUSD": "ADABULL/USD",
+ "ADAHALFUSD": "ADAHALF/USD",
+ "ADAHEDGEUSD": "ADAHEDGE/USD",
+ "AGLD-PERP": "AGLD-PERP",
+ "AGLDUSD": "AGLD/USD",
+ "AKROUSD": "AKRO/USD",
+ "AKROUSDT": "AKRO/USDT",
+ "ALCX-PERP": "ALCX-PERP",
+ "ALCXUSD": "ALCX/USD",
+ "ALEPHUSD": "ALEPH/USD",
+ "ALGO-0325": "ALGO-0325",
+ "ALGO-PERP": "ALGO-PERP",
+ "ALGOBEARUSD": "ALGOBEAR/USD",
+ "ALGOBULLUSD": "ALGOBULL/USD",
+ "ALGOHALFUSD": "ALGOHALF/USD",
+ "ALGOHEDGEUSD": "ALGOHEDGE/USD",
+ "ALICE-PERP": "ALICE-PERP",
+ "ALICEUSD": "ALICE/USD",
+ "ALPHA-PERP": "ALPHA-PERP",
+ "ALPHAUSD": "ALPHA/USD",
+ "ALT-0325": "ALT-0325",
+ "ALT-PERP": "ALT-PERP",
+ "ALTBEARUSD": "ALTBEAR/USD",
+ "ALTBULLUSD": "ALTBULL/USD",
+ "ALTHALFUSD": "ALTHALF/USD",
+ "ALTHEDGEUSD": "ALTHEDGE/USD",
+ "AMC-0325": "AMC-0325",
+ "AMCUSD": "AMC/USD",
+ "AMD-0325": "AMD-0325",
+ "AMDUSD": "AMD/USD",
+ "AMPL-PERP": "AMPL-PERP",
+ "AMPLUSD": "AMPL/USD",
+ "AMPLUSDT": "AMPL/USDT",
+ "AMZN-0325": "AMZN-0325",
+ "AMZNUSD": "AMZN/USD",
+ "APHAUSD": "APHA/USD",
+ "AR-PERP": "AR-PERP",
+ "ARKK-0325": "ARKK-0325",
+ "ARKKUSD": "ARKK/USD",
+ "ASD-PERP": "ASD-PERP",
+ "ASDBEARUSD": "ASDBEAR/USD",
+ "ASDBEARUSDT": "ASDBEAR/USDT",
+ "ASDBULLUSD": "ASDBULL/USD",
+ "ASDBULLUSDT": "ASDBULL/USDT",
+ "ASDHALFUSD": "ASDHALF/USD",
+ "ASDHEDGEUSD": "ASDHEDGE/USD",
+ "ASDUSD": "ASD/USD",
+ "ATLAS-PERP": "ATLAS-PERP",
+ "ATLASUSD": "ATLAS/USD",
+ "ATOM-0325": "ATOM-0325",
+ "ATOM-PERP": "ATOM-PERP",
+ "ATOMBEARUSD": "ATOMBEAR/USD",
+ "ATOMBULLUSD": "ATOMBULL/USD",
+ "ATOMHALFUSD": "ATOMHALF/USD",
+ "ATOMHEDGEUSD": "ATOMHEDGE/USD",
+ "ATOMUSD": "ATOM/USD",
+ "ATOMUSDT": "ATOM/USDT",
+ "AUDIO-PERP": "AUDIO-PERP",
+ "AUDIOUSD": "AUDIO/USD",
+ "AUDIOUSDT": "AUDIO/USDT",
+ "AURYUSD": "AURY/USD",
+ "AVAX-0325": "AVAX-0325",
+ "AVAX-PERP": "AVAX-PERP",
+ "AVAXBTC": "AVAX/BTC",
+ "AVAXUSD": "AVAX/USD",
+ "AVAXUSDT": "AVAX/USDT",
+ "AXS-PERP": "AXS-PERP",
+ "AXSUSD": "AXS/USD",
+ "BABA-0325": "BABA-0325",
+ "BABAUSD": "BABA/USD",
+ "BADGER-PERP": "BADGER-PERP",
+ "BADGERUSD": "BADGER/USD",
+ "BAL-0325": "BAL-0325",
+ "BAL-PERP": "BAL-PERP",
+ "BALBEARUSD": "BALBEAR/USD",
+ "BALBEARUSDT": "BALBEAR/USDT",
+ "BALBULLUSD": "BALBULL/USD",
+ "BALBULLUSDT": "BALBULL/USDT",
+ "BALHALFUSD": "BALHALF/USD",
+ "BALHEDGEUSD": "BALHEDGE/USD",
+ "BALUSD": "BAL/USD",
+ "BALUSDT": "BAL/USDT",
+ "BAND-PERP": "BAND-PERP",
+ "BANDUSD": "BAND/USD",
+ "BAO-PERP": "BAO-PERP",
+ "BAOUSD": "BAO/USD",
+ "BARUSD": "BAR/USD",
+ "BAT-PERP": "BAT-PERP",
+ "BATUSD": "BAT/USD",
+ "BB-0325": "BB-0325",
+ "BBUSD": "BB/USD",
+ "BCH-0325": "BCH-0325",
+ "BCH-PERP": "BCH-PERP",
+ "BCHBEARUSD": "BCHBEAR/USD",
+ "BCHBEARUSDT": "BCHBEAR/USDT",
+ "BCHBTC": "BCH/BTC",
+ "BCHBULLUSD": "BCHBULL/USD",
+ "BCHBULLUSDT": "BCHBULL/USDT",
+ "BCHHALFUSD": "BCHHALF/USD",
+ "BCHHEDGEUSD": "BCHHEDGE/USD",
+ "BCHUSD": "BCH/USD",
+ "BCHUSDT": "BCH/USDT",
+ "BEARSHITUSD": "BEARSHIT/USD",
+ "BEARUSD": "BEAR/USD",
+ "BEARUSDT": "BEAR/USDT",
+ "BICOUSD": "BICO/USD",
+ "BILI-0325": "BILI-0325",
+ "BILIUSD": "BILI/USD",
+ "BIT-PERP": "BIT-PERP",
+ "BITO-0325": "BITO-0325",
+ "BITOUSD": "BITO/USD",
+ "BITUSD": "BIT/USD",
+ "BITW-0325": "BITW-0325",
+ "BITWUSD": "BITW/USD",
+ "BLTUSD": "BLT/USD",
+ "BNB-0325": "BNB-0325",
+ "BNB-PERP": "BNB-PERP",
+ "BNBBEARUSD": "BNBBEAR/USD",
+ "BNBBEARUSDT": "BNBBEAR/USDT",
+ "BNBBTC": "BNB/BTC",
+ "BNBBULLUSD": "BNBBULL/USD",
+ "BNBBULLUSDT": "BNBBULL/USDT",
+ "BNBHALFUSD": "BNBHALF/USD",
+ "BNBHEDGEUSD": "BNBHEDGE/USD",
+ "BNBUSD": "BNB/USD",
+ "BNBUSDT": "BNB/USDT",
+ "BNT-PERP": "BNT-PERP",
+ "BNTUSD": "BNT/USD",
+ "BNTX-0325": "BNTX-0325",
+ "BNTXUSD": "BNTX/USD",
+ "BOBA-PERP": "BOBA-PERP",
+ "BOBAUSD": "BOBA/USD",
+ "BOLSONARO2022": "BOLSONARO2022",
+ "BRZ-PERP": "BRZ-PERP",
+ "BRZUSD": "BRZ/USD",
+ "BRZUSDT": "BRZ/USDT",
+ "BSV-0325": "BSV-0325",
+ "BSV-PERP": "BSV-PERP",
+ "BSVBEARUSD": "BSVBEAR/USD",
+ "BSVBEARUSDT": "BSVBEAR/USDT",
+ "BSVBULLUSD": "BSVBULL/USD",
+ "BSVBULLUSDT": "BSVBULL/USDT",
+ "BSVHALFUSD": "BSVHALF/USD",
+ "BSVHEDGEUSD": "BSVHEDGE/USD",
+ "BTC-0325": "BTC-0325",
+ "BTC-0624": "BTC-0624",
+ "BTC-MOVE-0303": "BTC-MOVE-0303",
+ "BTC-MOVE-0304": "BTC-MOVE-0304",
+ "BTC-MOVE-2022Q1": "BTC-MOVE-2022Q1",
+ "BTC-MOVE-2022Q2": "BTC-MOVE-2022Q2",
+ "BTC-MOVE-2022Q3": "BTC-MOVE-2022Q3",
"BTC-MOVE-WK-0304": "BTC-MOVE-WK-0304",
"BTC-MOVE-WK-0311": "BTC-MOVE-WK-0311",
"BTC-MOVE-WK-0318": "BTC-MOVE-WK-0318",
"BTC-MOVE-WK-0325": "BTC-MOVE-WK-0325",
- "BTC-PERP": "BTC-PERP",
- "BTCBRZ": "BTC/BRZ",
- "BTCEUR": "BTC/EUR",
- "BTCTRYB": "BTC/TRYB",
- "BTCUSD": "BTC/USD",
- "BTCUSDT": "BTC/USDT",
- "BTT-PERP": "BTT-PERP",
- "BTTUSD": "BTT/USD",
- "BULLSHITUSD": "BULLSHIT/USD",
- "BULLUSD": "BULL/USD",
- "BULLUSDT": "BULL/USDT",
- "BVOLBTC": "BVOL/BTC",
- "BVOLUSD": "BVOL/USD",
- "BVOLUSDT": "BVOL/USDT",
- "BYND-0325": "BYND-0325",
- "BYNDUSD": "BYND/USD",
- "C98-PERP": "C98-PERP",
- "C98USD": "C98/USD",
- "CADUSD": "CAD/USD",
- "CAKE-PERP": "CAKE-PERP",
- "CEL-0325": "CEL-0325",
- "CEL-PERP": "CEL-PERP",
- "CELBTC": "CEL/BTC",
- "CELO-PERP": "CELO-PERP",
- "CELUSD": "CEL/USD",
- "CGC-0325": "CGC-0325",
- "CGCUSD": "CGC/USD",
- "CHR-PERP": "CHR-PERP",
- "CHRUSD": "CHR/USD",
- "CHZ-0325": "CHZ-0325",
- "CHZ-PERP": "CHZ-PERP",
- "CHZUSD": "CHZ/USD",
- "CHZUSDT": "CHZ/USDT",
- "CITYUSD": "CITY/USD",
- "CLV-PERP": "CLV-PERP",
- "CLVUSD": "CLV/USD",
- "COINUSD": "COIN/USD",
- "COMP-0325": "COMP-0325",
- "COMP-PERP": "COMP-PERP",
- "COMPBEARUSD": "COMPBEAR/USD",
- "COMPBEARUSDT": "COMPBEAR/USDT",
- "COMPBULLUSD": "COMPBULL/USD",
- "COMPBULLUSDT": "COMPBULL/USDT",
- "COMPHALFUSD": "COMPHALF/USD",
- "COMPHEDGEUSD": "COMPHEDGE/USD",
- "COMPUSD": "COMP/USD",
- "COMPUSDT": "COMP/USDT",
- "CONV-PERP": "CONV-PERP",
- "CONVUSD": "CONV/USD",
- "COPEUSD": "COPE/USD",
- "CQTUSD": "CQT/USD",
- "CREAM-PERP": "CREAM-PERP",
- "CREAMUSD": "CREAM/USD",
- "CREAMUSDT": "CREAM/USDT",
- "CRO-PERP": "CRO-PERP",
- "CRON-0325": "CRON-0325",
- "CRONUSD": "CRON/USD",
- "CROUSD": "CRO/USD",
- "CRV-PERP": "CRV-PERP",
- "CRVUSD": "CRV/USD",
- "CUSDT-PERP": "CUSDT-PERP",
- "CUSDTBEARUSD": "CUSDTBEAR/USD",
- "CUSDTBEARUSDT": "CUSDTBEAR/USDT",
- "CUSDTBULLUSD": "CUSDTBULL/USD",
- "CUSDTBULLUSDT": "CUSDTBULL/USDT",
- "CUSDTHALFUSD": "CUSDTHALF/USD",
- "CUSDTHEDGEUSD": "CUSDTHEDGE/USD",
- "CUSDTUSD": "CUSDT/USD",
- "CUSDTUSDT": "CUSDT/USDT",
- "CVC-PERP": "CVC-PERP",
- "CVCUSD": "CVC/USD",
- "DAIUSD": "DAI/USD",
- "DAIUSDT": "DAI/USDT",
- "DASH-PERP": "DASH-PERP",
- "DAWN-PERP": "DAWN-PERP",
- "DAWNUSD": "DAWN/USD",
- "DEFI-0325": "DEFI-0325",
- "DEFI-PERP": "DEFI-PERP",
- "DEFIBEARUSD": "DEFIBEAR/USD",
- "DEFIBEARUSDT": "DEFIBEAR/USDT",
- "DEFIBULLUSD": "DEFIBULL/USD",
- "DEFIBULLUSDT": "DEFIBULL/USDT",
- "DEFIHALFUSD": "DEFIHALF/USD",
- "DEFIHEDGEUSD": "DEFIHEDGE/USD",
- "DENT-PERP": "DENT-PERP",
- "DENTUSD": "DENT/USD",
- "DFLUSD": "DFL/USD",
- "DKNG-0325": "DKNG-0325",
- "DKNGUSD": "DKNG/USD",
- "DMGUSD": "DMG/USD",
- "DMGUSDT": "DMG/USDT",
- "DODO-PERP": "DODO-PERP",
- "DODOUSD": "DODO/USD",
- "DOGE-0325": "DOGE-0325",
- "DOGE-PERP": "DOGE-PERP",
- "DOGEBEAR2021USD": "DOGEBEAR2021/USD",
- "DOGEBTC": "DOGE/BTC",
- "DOGEBULLUSD": "DOGEBULL/USD",
- "DOGEHALFUSD": "DOGEHALF/USD",
- "DOGEHEDGEUSD": "DOGEHEDGE/USD",
- "DOGEUSD": "DOGE/USD",
- "DOGEUSDT": "DOGE/USDT",
- "DOT-0325": "DOT-0325",
- "DOT-PERP": "DOT-PERP",
- "DOTBTC": "DOT/BTC",
- "DOTUSD": "DOT/USD",
- "DOTUSDT": "DOT/USDT",
- "DRGN-0325": "DRGN-0325",
- "DRGN-PERP": "DRGN-PERP",
- "DRGNBEARUSD": "DRGNBEAR/USD",
- "DRGNBULLUSD": "DRGNBULL/USD",
- "DRGNHALFUSD": "DRGNHALF/USD",
- "DRGNHEDGEUSD": "DRGNHEDGE/USD",
- "DYDX-PERP": "DYDX-PERP",
- "DYDXUSD": "DYDX/USD",
- "EDEN-0325": "EDEN-0325",
- "EDEN-PERP": "EDEN-PERP",
- "EDENUSD": "EDEN/USD",
- "EGLD-PERP": "EGLD-PERP",
- "EMBUSD": "EMB/USD",
- "ENJ-PERP": "ENJ-PERP",
- "ENJUSD": "ENJ/USD",
- "ENS-PERP": "ENS-PERP",
- "ENSUSD": "ENS/USD",
- "EOS-0325": "EOS-0325",
- "EOS-PERP": "EOS-PERP",
- "EOSBEARUSD": "EOSBEAR/USD",
- "EOSBEARUSDT": "EOSBEAR/USDT",
- "EOSBULLUSD": "EOSBULL/USD",
- "EOSBULLUSDT": "EOSBULL/USDT",
- "EOSHALFUSD": "EOSHALF/USD",
- "EOSHEDGEUSD": "EOSHEDGE/USD",
- "ETC-PERP": "ETC-PERP",
- "ETCBEARUSD": "ETCBEAR/USD",
- "ETCBULLUSD": "ETCBULL/USD",
- "ETCHALFUSD": "ETCHALF/USD",
- "ETCHEDGEUSD": "ETCHEDGE/USD",
- "ETH-0325": "ETH-0325",
- "ETH-0624": "ETH-0624",
- "ETH-PERP": "ETH-PERP",
- "ETHBEARUSD": "ETHBEAR/USD",
- "ETHBEARUSDT": "ETHBEAR/USDT",
- "ETHBRZ": "ETH/BRZ",
- "ETHBTC": "ETH/BTC",
- "ETHBULLUSD": "ETHBULL/USD",
- "ETHBULLUSDT": "ETHBULL/USDT",
- "ETHE-0325": "ETHE-0325",
- "ETHEUR": "ETH/EUR",
- "ETHEUSD": "ETHE/USD",
- "ETHHALFUSD": "ETHHALF/USD",
- "ETHHEDGEUSD": "ETHHEDGE/USD",
- "ETHUSD": "ETH/USD",
- "ETHUSDT": "ETH/USDT",
- "EURTEUR": "EURT/EUR",
- "EURTUSD": "EURT/USD",
- "EURTUSDT": "EURT/USDT",
- "EURUSD": "EUR/USD",
- "EXCH-0325": "EXCH-0325",
- "EXCH-PERP": "EXCH-PERP",
- "EXCHBEARUSD": "EXCHBEAR/USD",
- "EXCHBULLUSD": "EXCHBULL/USD",
- "EXCHHALFUSD": "EXCHHALF/USD",
- "EXCHHEDGEUSD": "EXCHHEDGE/USD",
- "FB-0325": "FB-0325",
- "FBUSD": "FB/USD",
- "FIDA-PERP": "FIDA-PERP",
- "FIDAUSD": "FIDA/USD",
- "FIDAUSDT": "FIDA/USDT",
- "FIL-0325": "FIL-0325",
- "FIL-PERP": "FIL-PERP",
- "FLM-PERP": "FLM-PERP",
- "FLOW-PERP": "FLOW-PERP",
- "FRONTUSD": "FRONT/USD",
- "FRONTUSDT": "FRONT/USDT",
- "FTM-PERP": "FTM-PERP",
- "FTMUSD": "FTM/USD",
- "FTT-PERP": "FTT-PERP",
- "FTTBTC": "FTT/BTC",
- "FTTUSD": "FTT/USD",
- "FTTUSDT": "FTT/USDT",
- "GALA-PERP": "GALA-PERP",
- "GALAUSD": "GALA/USD",
- "GALUSD": "GAL/USD",
- "GARIUSD": "GARI/USD",
- "GBPUSD": "GBP/USD",
- "GBTC-0325": "GBTC-0325",
- "GBTCUSD": "GBTC/USD",
- "GDX-0325": "GDX-0325",
- "GDXJ-0325": "GDXJ-0325",
- "GDXJUSD": "GDXJ/USD",
- "GDXUSD": "GDX/USD",
- "GENEUSD": "GENE/USD",
- "GLD-0325": "GLD-0325",
- "GLDUSD": "GLD/USD",
- "GLXYUSD": "GLXY/USD",
- "GME-0325": "GME-0325",
- "GMEUSD": "GME/USD",
- "GODSUSD": "GODS/USD",
- "GOGUSD": "GOG/USD",
- "GOOGL-0325": "GOOGL-0325",
- "GOOGLUSD": "GOOGL/USD",
- "GRT-0325": "GRT-0325",
- "GRT-PERP": "GRT-PERP",
- "GRTBEARUSD": "GRTBEAR/USD",
- "GRTBULLUSD": "GRTBULL/USD",
- "GRTUSD": "GRT/USD",
- "GTUSD": "GT/USD",
- "HALFSHITUSD": "HALFSHIT/USD",
- "HALFUSD": "HALF/USD",
- "HBAR-PERP": "HBAR-PERP",
- "HEDGESHITUSD": "HEDGESHIT/USD",
- "HEDGEUSD": "HEDGE/USD",
- "HGETUSD": "HGET/USD",
- "HGETUSDT": "HGET/USDT",
- "HMTUSD": "HMT/USD",
- "HNT-PERP": "HNT-PERP",
- "HNTUSD": "HNT/USD",
- "HNTUSDT": "HNT/USDT",
- "HOLY-PERP": "HOLY-PERP",
- "HOLYUSD": "HOLY/USD",
- "HOODUSD": "HOOD/USD",
- "HOT-PERP": "HOT-PERP",
- "HT-PERP": "HT-PERP",
- "HTBEARUSD": "HTBEAR/USD",
- "HTBULLUSD": "HTBULL/USD",
- "HTHALFUSD": "HTHALF/USD",
- "HTHEDGEUSD": "HTHEDGE/USD",
- "HTUSD": "HT/USD",
- "HUM-PERP": "HUM-PERP",
- "HUMUSD": "HUM/USD",
- "HXROUSD": "HXRO/USD",
- "HXROUSDT": "HXRO/USDT",
- "IBVOLBTC": "IBVOL/BTC",
- "IBVOLUSD": "IBVOL/USD",
- "IBVOLUSDT": "IBVOL/USDT",
- "ICP-PERP": "ICP-PERP",
- "ICX-PERP": "ICX-PERP",
- "IMX-PERP": "IMX-PERP",
- "IMXUSD": "IMX/USD",
- "INTERUSD": "INTER/USD",
- "IOTA-PERP": "IOTA-PERP",
- "JETUSD": "JET/USD",
- "JOEUSD": "JOE/USD",
- "JSTUSD": "JST/USD",
- "KAVA-PERP": "KAVA-PERP",
- "KBTT-PERP": "KBTT-PERP",
- "KBTTUSD": "KBTT/USD",
- "KIN-PERP": "KIN-PERP",
- "KINUSD": "KIN/USD",
- "KNC-PERP": "KNC-PERP",
- "KNCBEARUSD": "KNCBEAR/USD",
- "KNCBEARUSDT": "KNCBEAR/USDT",
- "KNCBULLUSD": "KNCBULL/USD",
- "KNCBULLUSDT": "KNCBULL/USDT",
- "KNCHALFUSD": "KNCHALF/USD",
- "KNCHEDGEUSD": "KNCHEDGE/USD",
- "KNCUSD": "KNC/USD",
- "KNCUSDT": "KNC/USDT",
- "KSHIB-PERP": "KSHIB-PERP",
- "KSHIBUSD": "KSHIB/USD",
- "KSM-PERP": "KSM-PERP",
- "KSOS-PERP": "KSOS-PERP",
- "KSOSUSD": "KSOS/USD",
- "LEO-PERP": "LEO-PERP",
- "LEOBEARUSD": "LEOBEAR/USD",
- "LEOBULLUSD": "LEOBULL/USD",
- "LEOHALFUSD": "LEOHALF/USD",
- "LEOHEDGEUSD": "LEOHEDGE/USD",
- "LEOUSD": "LEO/USD",
- "LINA-PERP": "LINA-PERP",
- "LINAUSD": "LINA/USD",
- "LINK-0325": "LINK-0325",
- "LINK-PERP": "LINK-PERP",
- "LINKBEARUSD": "LINKBEAR/USD",
- "LINKBEARUSDT": "LINKBEAR/USDT",
- "LINKBTC": "LINK/BTC",
- "LINKBULLUSD": "LINKBULL/USD",
- "LINKBULLUSDT": "LINKBULL/USDT",
- "LINKHALFUSD": "LINKHALF/USD",
- "LINKHEDGEUSD": "LINKHEDGE/USD",
- "LINKUSD": "LINK/USD",
- "LINKUSDT": "LINK/USDT",
- "LOOKS-PERP": "LOOKS-PERP",
- "LOOKSUSD": "LOOKS/USD",
- "LRC-PERP": "LRC-PERP",
- "LRCUSD": "LRC/USD",
- "LTC-0325": "LTC-0325",
- "LTC-PERP": "LTC-PERP",
- "LTCBEARUSD": "LTCBEAR/USD",
- "LTCBEARUSDT": "LTCBEAR/USDT",
- "LTCBTC": "LTC/BTC",
- "LTCBULLUSD": "LTCBULL/USD",
- "LTCBULLUSDT": "LTCBULL/USDT",
- "LTCHALFUSD": "LTCHALF/USD",
- "LTCHEDGEUSD": "LTCHEDGE/USD",
- "LTCUSD": "LTC/USD",
- "LTCUSDT": "LTC/USDT",
- "LUAUSD": "LUA/USD",
- "LUAUSDT": "LUA/USDT",
- "LUNA-PERP": "LUNA-PERP",
- "LUNAUSD": "LUNA/USD",
- "LUNAUSDT": "LUNA/USDT",
- "MANA-PERP": "MANA-PERP",
- "MANAUSD": "MANA/USD",
- "MAPS-PERP": "MAPS-PERP",
- "MAPSUSD": "MAPS/USD",
- "MAPSUSDT": "MAPS/USDT",
- "MATHUSD": "MATH/USD",
- "MATHUSDT": "MATH/USDT",
- "MATIC-PERP": "MATIC-PERP",
+ "BTC-PERP": "BTC-PERP",
+ "BTCBRZ": "BTC/BRZ",
+ "BTCEUR": "BTC/EUR",
+ "BTCTRYB": "BTC/TRYB",
+ "BTCUSD": "BTC/USD",
+ "BTCUSDT": "BTC/USDT",
+ "BTT-PERP": "BTT-PERP",
+ "BTTUSD": "BTT/USD",
+ "BULLSHITUSD": "BULLSHIT/USD",
+ "BULLUSD": "BULL/USD",
+ "BULLUSDT": "BULL/USDT",
+ "BVOLBTC": "BVOL/BTC",
+ "BVOLUSD": "BVOL/USD",
+ "BVOLUSDT": "BVOL/USDT",
+ "BYND-0325": "BYND-0325",
+ "BYNDUSD": "BYND/USD",
+ "C98-PERP": "C98-PERP",
+ "C98USD": "C98/USD",
+ "CADUSD": "CAD/USD",
+ "CAKE-PERP": "CAKE-PERP",
+ "CEL-0325": "CEL-0325",
+ "CEL-PERP": "CEL-PERP",
+ "CELBTC": "CEL/BTC",
+ "CELO-PERP": "CELO-PERP",
+ "CELUSD": "CEL/USD",
+ "CGC-0325": "CGC-0325",
+ "CGCUSD": "CGC/USD",
+ "CHR-PERP": "CHR-PERP",
+ "CHRUSD": "CHR/USD",
+ "CHZ-0325": "CHZ-0325",
+ "CHZ-PERP": "CHZ-PERP",
+ "CHZUSD": "CHZ/USD",
+ "CHZUSDT": "CHZ/USDT",
+ "CITYUSD": "CITY/USD",
+ "CLV-PERP": "CLV-PERP",
+ "CLVUSD": "CLV/USD",
+ "COINUSD": "COIN/USD",
+ "COMP-0325": "COMP-0325",
+ "COMP-PERP": "COMP-PERP",
+ "COMPBEARUSD": "COMPBEAR/USD",
+ "COMPBEARUSDT": "COMPBEAR/USDT",
+ "COMPBULLUSD": "COMPBULL/USD",
+ "COMPBULLUSDT": "COMPBULL/USDT",
+ "COMPHALFUSD": "COMPHALF/USD",
+ "COMPHEDGEUSD": "COMPHEDGE/USD",
+ "COMPUSD": "COMP/USD",
+ "COMPUSDT": "COMP/USDT",
+ "CONV-PERP": "CONV-PERP",
+ "CONVUSD": "CONV/USD",
+ "COPEUSD": "COPE/USD",
+ "CQTUSD": "CQT/USD",
+ "CREAM-PERP": "CREAM-PERP",
+ "CREAMUSD": "CREAM/USD",
+ "CREAMUSDT": "CREAM/USDT",
+ "CRO-PERP": "CRO-PERP",
+ "CRON-0325": "CRON-0325",
+ "CRONUSD": "CRON/USD",
+ "CROUSD": "CRO/USD",
+ "CRV-PERP": "CRV-PERP",
+ "CRVUSD": "CRV/USD",
+ "CUSDT-PERP": "CUSDT-PERP",
+ "CUSDTBEARUSD": "CUSDTBEAR/USD",
+ "CUSDTBEARUSDT": "CUSDTBEAR/USDT",
+ "CUSDTBULLUSD": "CUSDTBULL/USD",
+ "CUSDTBULLUSDT": "CUSDTBULL/USDT",
+ "CUSDTHALFUSD": "CUSDTHALF/USD",
+ "CUSDTHEDGEUSD": "CUSDTHEDGE/USD",
+ "CUSDTUSD": "CUSDT/USD",
+ "CUSDTUSDT": "CUSDT/USDT",
+ "CVC-PERP": "CVC-PERP",
+ "CVCUSD": "CVC/USD",
+ "DAIUSD": "DAI/USD",
+ "DAIUSDT": "DAI/USDT",
+ "DASH-PERP": "DASH-PERP",
+ "DAWN-PERP": "DAWN-PERP",
+ "DAWNUSD": "DAWN/USD",
+ "DEFI-0325": "DEFI-0325",
+ "DEFI-PERP": "DEFI-PERP",
+ "DEFIBEARUSD": "DEFIBEAR/USD",
+ "DEFIBEARUSDT": "DEFIBEAR/USDT",
+ "DEFIBULLUSD": "DEFIBULL/USD",
+ "DEFIBULLUSDT": "DEFIBULL/USDT",
+ "DEFIHALFUSD": "DEFIHALF/USD",
+ "DEFIHEDGEUSD": "DEFIHEDGE/USD",
+ "DENT-PERP": "DENT-PERP",
+ "DENTUSD": "DENT/USD",
+ "DFLUSD": "DFL/USD",
+ "DKNG-0325": "DKNG-0325",
+ "DKNGUSD": "DKNG/USD",
+ "DMGUSD": "DMG/USD",
+ "DMGUSDT": "DMG/USDT",
+ "DODO-PERP": "DODO-PERP",
+ "DODOUSD": "DODO/USD",
+ "DOGE-0325": "DOGE-0325",
+ "DOGE-PERP": "DOGE-PERP",
+ "DOGEBEAR2021USD": "DOGEBEAR2021/USD",
+ "DOGEBTC": "DOGE/BTC",
+ "DOGEBULLUSD": "DOGEBULL/USD",
+ "DOGEHALFUSD": "DOGEHALF/USD",
+ "DOGEHEDGEUSD": "DOGEHEDGE/USD",
+ "DOGEUSD": "DOGE/USD",
+ "DOGEUSDT": "DOGE/USDT",
+ "DOT-0325": "DOT-0325",
+ "DOT-PERP": "DOT-PERP",
+ "DOTBTC": "DOT/BTC",
+ "DOTUSD": "DOT/USD",
+ "DOTUSDT": "DOT/USDT",
+ "DRGN-0325": "DRGN-0325",
+ "DRGN-PERP": "DRGN-PERP",
+ "DRGNBEARUSD": "DRGNBEAR/USD",
+ "DRGNBULLUSD": "DRGNBULL/USD",
+ "DRGNHALFUSD": "DRGNHALF/USD",
+ "DRGNHEDGEUSD": "DRGNHEDGE/USD",
+ "DYDX-PERP": "DYDX-PERP",
+ "DYDXUSD": "DYDX/USD",
+ "EDEN-0325": "EDEN-0325",
+ "EDEN-PERP": "EDEN-PERP",
+ "EDENUSD": "EDEN/USD",
+ "EGLD-PERP": "EGLD-PERP",
+ "EMBUSD": "EMB/USD",
+ "ENJ-PERP": "ENJ-PERP",
+ "ENJUSD": "ENJ/USD",
+ "ENS-PERP": "ENS-PERP",
+ "ENSUSD": "ENS/USD",
+ "EOS-0325": "EOS-0325",
+ "EOS-PERP": "EOS-PERP",
+ "EOSBEARUSD": "EOSBEAR/USD",
+ "EOSBEARUSDT": "EOSBEAR/USDT",
+ "EOSBULLUSD": "EOSBULL/USD",
+ "EOSBULLUSDT": "EOSBULL/USDT",
+ "EOSHALFUSD": "EOSHALF/USD",
+ "EOSHEDGEUSD": "EOSHEDGE/USD",
+ "ETC-PERP": "ETC-PERP",
+ "ETCBEARUSD": "ETCBEAR/USD",
+ "ETCBULLUSD": "ETCBULL/USD",
+ "ETCHALFUSD": "ETCHALF/USD",
+ "ETCHEDGEUSD": "ETCHEDGE/USD",
+ "ETH-0325": "ETH-0325",
+ "ETH-0624": "ETH-0624",
+ "ETH-PERP": "ETH-PERP",
+ "ETHBEARUSD": "ETHBEAR/USD",
+ "ETHBEARUSDT": "ETHBEAR/USDT",
+ "ETHBRZ": "ETH/BRZ",
+ "ETHBTC": "ETH/BTC",
+ "ETHBULLUSD": "ETHBULL/USD",
+ "ETHBULLUSDT": "ETHBULL/USDT",
+ "ETHE-0325": "ETHE-0325",
+ "ETHEUR": "ETH/EUR",
+ "ETHEUSD": "ETHE/USD",
+ "ETHHALFUSD": "ETHHALF/USD",
+ "ETHHEDGEUSD": "ETHHEDGE/USD",
+ "ETHUSD": "ETH/USD",
+ "ETHUSDT": "ETH/USDT",
+ "EURTEUR": "EURT/EUR",
+ "EURTUSD": "EURT/USD",
+ "EURTUSDT": "EURT/USDT",
+ "EURUSD": "EUR/USD",
+ "EXCH-0325": "EXCH-0325",
+ "EXCH-PERP": "EXCH-PERP",
+ "EXCHBEARUSD": "EXCHBEAR/USD",
+ "EXCHBULLUSD": "EXCHBULL/USD",
+ "EXCHHALFUSD": "EXCHHALF/USD",
+ "EXCHHEDGEUSD": "EXCHHEDGE/USD",
+ "FB-0325": "FB-0325",
+ "FBUSD": "FB/USD",
+ "FIDA-PERP": "FIDA-PERP",
+ "FIDAUSD": "FIDA/USD",
+ "FIDAUSDT": "FIDA/USDT",
+ "FIL-0325": "FIL-0325",
+ "FIL-PERP": "FIL-PERP",
+ "FLM-PERP": "FLM-PERP",
+ "FLOW-PERP": "FLOW-PERP",
+ "FRONTUSD": "FRONT/USD",
+ "FRONTUSDT": "FRONT/USDT",
+ "FTM-PERP": "FTM-PERP",
+ "FTMUSD": "FTM/USD",
+ "FTT-PERP": "FTT-PERP",
+ "FTTBTC": "FTT/BTC",
+ "FTTUSD": "FTT/USD",
+ "FTTUSDT": "FTT/USDT",
+ "GALA-PERP": "GALA-PERP",
+ "GALAUSD": "GALA/USD",
+ "GALUSD": "GAL/USD",
+ "GARIUSD": "GARI/USD",
+ "GBPUSD": "GBP/USD",
+ "GBTC-0325": "GBTC-0325",
+ "GBTCUSD": "GBTC/USD",
+ "GDX-0325": "GDX-0325",
+ "GDXJ-0325": "GDXJ-0325",
+ "GDXJUSD": "GDXJ/USD",
+ "GDXUSD": "GDX/USD",
+ "GENEUSD": "GENE/USD",
+ "GLD-0325": "GLD-0325",
+ "GLDUSD": "GLD/USD",
+ "GLXYUSD": "GLXY/USD",
+ "GME-0325": "GME-0325",
+ "GMEUSD": "GME/USD",
+ "GODSUSD": "GODS/USD",
+ "GOGUSD": "GOG/USD",
+ "GOOGL-0325": "GOOGL-0325",
+ "GOOGLUSD": "GOOGL/USD",
+ "GRT-0325": "GRT-0325",
+ "GRT-PERP": "GRT-PERP",
+ "GRTBEARUSD": "GRTBEAR/USD",
+ "GRTBULLUSD": "GRTBULL/USD",
+ "GRTUSD": "GRT/USD",
+ "GTUSD": "GT/USD",
+ "HALFSHITUSD": "HALFSHIT/USD",
+ "HALFUSD": "HALF/USD",
+ "HBAR-PERP": "HBAR-PERP",
+ "HEDGESHITUSD": "HEDGESHIT/USD",
+ "HEDGEUSD": "HEDGE/USD",
+ "HGETUSD": "HGET/USD",
+ "HGETUSDT": "HGET/USDT",
+ "HMTUSD": "HMT/USD",
+ "HNT-PERP": "HNT-PERP",
+ "HNTUSD": "HNT/USD",
+ "HNTUSDT": "HNT/USDT",
+ "HOLY-PERP": "HOLY-PERP",
+ "HOLYUSD": "HOLY/USD",
+ "HOODUSD": "HOOD/USD",
+ "HOT-PERP": "HOT-PERP",
+ "HT-PERP": "HT-PERP",
+ "HTBEARUSD": "HTBEAR/USD",
+ "HTBULLUSD": "HTBULL/USD",
+ "HTHALFUSD": "HTHALF/USD",
+ "HTHEDGEUSD": "HTHEDGE/USD",
+ "HTUSD": "HT/USD",
+ "HUM-PERP": "HUM-PERP",
+ "HUMUSD": "HUM/USD",
+ "HXROUSD": "HXRO/USD",
+ "HXROUSDT": "HXRO/USDT",
+ "IBVOLBTC": "IBVOL/BTC",
+ "IBVOLUSD": "IBVOL/USD",
+ "IBVOLUSDT": "IBVOL/USDT",
+ "ICP-PERP": "ICP-PERP",
+ "ICX-PERP": "ICX-PERP",
+ "IMX-PERP": "IMX-PERP",
+ "IMXUSD": "IMX/USD",
+ "INTERUSD": "INTER/USD",
+ "IOTA-PERP": "IOTA-PERP",
+ "JETUSD": "JET/USD",
+ "JOEUSD": "JOE/USD",
+ "JSTUSD": "JST/USD",
+ "KAVA-PERP": "KAVA-PERP",
+ "KBTT-PERP": "KBTT-PERP",
+ "KBTTUSD": "KBTT/USD",
+ "KIN-PERP": "KIN-PERP",
+ "KINUSD": "KIN/USD",
+ "KNC-PERP": "KNC-PERP",
+ "KNCBEARUSD": "KNCBEAR/USD",
+ "KNCBEARUSDT": "KNCBEAR/USDT",
+ "KNCBULLUSD": "KNCBULL/USD",
+ "KNCBULLUSDT": "KNCBULL/USDT",
+ "KNCHALFUSD": "KNCHALF/USD",
+ "KNCHEDGEUSD": "KNCHEDGE/USD",
+ "KNCUSD": "KNC/USD",
+ "KNCUSDT": "KNC/USDT",
+ "KSHIB-PERP": "KSHIB-PERP",
+ "KSHIBUSD": "KSHIB/USD",
+ "KSM-PERP": "KSM-PERP",
+ "KSOS-PERP": "KSOS-PERP",
+ "KSOSUSD": "KSOS/USD",
+ "LEO-PERP": "LEO-PERP",
+ "LEOBEARUSD": "LEOBEAR/USD",
+ "LEOBULLUSD": "LEOBULL/USD",
+ "LEOHALFUSD": "LEOHALF/USD",
+ "LEOHEDGEUSD": "LEOHEDGE/USD",
+ "LEOUSD": "LEO/USD",
+ "LINA-PERP": "LINA-PERP",
+ "LINAUSD": "LINA/USD",
+ "LINK-0325": "LINK-0325",
+ "LINK-PERP": "LINK-PERP",
+ "LINKBEARUSD": "LINKBEAR/USD",
+ "LINKBEARUSDT": "LINKBEAR/USDT",
+ "LINKBTC": "LINK/BTC",
+ "LINKBULLUSD": "LINKBULL/USD",
+ "LINKBULLUSDT": "LINKBULL/USDT",
+ "LINKHALFUSD": "LINKHALF/USD",
+ "LINKHEDGEUSD": "LINKHEDGE/USD",
+ "LINKUSD": "LINK/USD",
+ "LINKUSDT": "LINK/USDT",
+ "LOOKS-PERP": "LOOKS-PERP",
+ "LOOKSUSD": "LOOKS/USD",
+ "LRC-PERP": "LRC-PERP",
+ "LRCUSD": "LRC/USD",
+ "LTC-0325": "LTC-0325",
+ "LTC-PERP": "LTC-PERP",
+ "LTCBEARUSD": "LTCBEAR/USD",
+ "LTCBEARUSDT": "LTCBEAR/USDT",
+ "LTCBTC": "LTC/BTC",
+ "LTCBULLUSD": "LTCBULL/USD",
+ "LTCBULLUSDT": "LTCBULL/USDT",
+ "LTCHALFUSD": "LTCHALF/USD",
+ "LTCHEDGEUSD": "LTCHEDGE/USD",
+ "LTCUSD": "LTC/USD",
+ "LTCUSDT": "LTC/USDT",
+ "LUAUSD": "LUA/USD",
+ "LUAUSDT": "LUA/USDT",
+ "LUNA-PERP": "LUNA-PERP",
+ "LUNAUSD": "LUNA/USD",
+ "LUNAUSDT": "LUNA/USDT",
+ "MANA-PERP": "MANA-PERP",
+ "MANAUSD": "MANA/USD",
+ "MAPS-PERP": "MAPS-PERP",
+ "MAPSUSD": "MAPS/USD",
+ "MAPSUSDT": "MAPS/USDT",
+ "MATHUSD": "MATH/USD",
+ "MATHUSDT": "MATH/USDT",
+ "MATIC-PERP": "MATIC-PERP",
"MATICBEAR2021USD": "MATICBEAR2021/USD",
- "MATICBTC": "MATIC/BTC",
- "MATICBULLUSD": "MATICBULL/USD",
- "MATICHALFUSD": "MATICHALF/USD",
- "MATICHEDGEUSD": "MATICHEDGE/USD",
- "MATICUSD": "MATIC/USD",
- "MBSUSD": "MBS/USD",
- "MCB-PERP": "MCB-PERP",
- "MCBUSD": "MCB/USD",
- "MEDIA-PERP": "MEDIA-PERP",
- "MEDIAUSD": "MEDIA/USD",
- "MER-PERP": "MER-PERP",
- "MERUSD": "MER/USD",
- "MID-0325": "MID-0325",
- "MID-PERP": "MID-PERP",
- "MIDBEARUSD": "MIDBEAR/USD",
- "MIDBULLUSD": "MIDBULL/USD",
- "MIDHALFUSD": "MIDHALF/USD",
- "MIDHEDGEUSD": "MIDHEDGE/USD",
- "MINA-PERP": "MINA-PERP",
- "MKR-PERP": "MKR-PERP",
- "MKRBEARUSD": "MKRBEAR/USD",
- "MKRBULLUSD": "MKRBULL/USD",
- "MKRUSD": "MKR/USD",
- "MKRUSDT": "MKR/USDT",
- "MNGO-PERP": "MNGO-PERP",
- "MNGOUSD": "MNGO/USD",
- "MOBUSD": "MOB/USD",
- "MOBUSDT": "MOB/USDT",
- "MRNA-0325": "MRNA-0325",
- "MRNAUSD": "MRNA/USD",
- "MSOLUSD": "MSOL/USD",
- "MSTR-0325": "MSTR-0325",
- "MSTRUSD": "MSTR/USD",
- "MTA-PERP": "MTA-PERP",
- "MTAUSD": "MTA/USD",
- "MTAUSDT": "MTA/USDT",
- "MTL-PERP": "MTL-PERP",
- "MTLUSD": "MTL/USD",
- "MVDA10-PERP": "MVDA10-PERP",
- "MVDA25-PERP": "MVDA25-PERP",
- "NEAR-PERP": "NEAR-PERP",
- "NEO-PERP": "NEO-PERP",
- "NEXOUSD": "NEXO/USD",
- "NFLX-0325": "NFLX-0325",
- "NFLXUSD": "NFLX/USD",
- "NIO-0325": "NIO-0325",
- "NIOUSD": "NIO/USD",
- "NOK-0325": "NOK-0325",
- "NOKUSD": "NOK/USD",
- "NVDA-0325": "NVDA-0325",
- "NVDAUSD": "NVDA/USD",
- "OKB-0325": "OKB-0325",
- "OKB-PERP": "OKB-PERP",
- "OKBBEARUSD": "OKBBEAR/USD",
- "OKBBULLUSD": "OKBBULL/USD",
- "OKBHALFUSD": "OKBHALF/USD",
- "OKBHEDGEUSD": "OKBHEDGE/USD",
- "OKBUSD": "OKB/USD",
- "OMG-0325": "OMG-0325",
- "OMG-PERP": "OMG-PERP",
- "OMGUSD": "OMG/USD",
- "ONE-PERP": "ONE-PERP",
- "ONT-PERP": "ONT-PERP",
- "ORBS-PERP": "ORBS-PERP",
- "ORBSUSD": "ORBS/USD",
- "OXY-PERP": "OXY-PERP",
- "OXYUSD": "OXY/USD",
- "OXYUSDT": "OXY/USDT",
- "PAXG-PERP": "PAXG-PERP",
- "PAXGBEARUSD": "PAXGBEAR/USD",
- "PAXGBULLUSD": "PAXGBULL/USD",
- "PAXGHALFUSD": "PAXGHALF/USD",
- "PAXGHEDGEUSD": "PAXGHEDGE/USD",
- "PAXGUSD": "PAXG/USD",
- "PAXGUSDT": "PAXG/USDT",
- "PENN-0325": "PENN-0325",
- "PENNUSD": "PENN/USD",
- "PEOPLE-PERP": "PEOPLE-PERP",
- "PEOPLEUSD": "PEOPLE/USD",
- "PERP-PERP": "PERP-PERP",
- "PERPUSD": "PERP/USD",
- "PFE-0325": "PFE-0325",
- "PFEUSD": "PFE/USD",
- "POLIS-PERP": "POLIS-PERP",
- "POLISUSD": "POLIS/USD",
- "PORTUSD": "PORT/USD",
- "PRISMUSD": "PRISM/USD",
- "PRIV-0325": "PRIV-0325",
- "PRIV-PERP": "PRIV-PERP",
- "PRIVBEARUSD": "PRIVBEAR/USD",
- "PRIVBULLUSD": "PRIVBULL/USD",
- "PRIVHALFUSD": "PRIVHALF/USD",
- "PRIVHEDGEUSD": "PRIVHEDGE/USD",
- "PROM-PERP": "PROM-PERP",
- "PROMUSD": "PROM/USD",
- "PSGUSD": "PSG/USD",
- "PSYUSD": "PSY/USD",
- "PTUUSD": "PTU/USD",
- "PUNDIX-PERP": "PUNDIX-PERP",
- "PUNDIXUSD": "PUNDIX/USD",
- "PYPL-0325": "PYPL-0325",
- "PYPLUSD": "PYPL/USD",
- "QIUSD": "QI/USD",
- "QTUM-PERP": "QTUM-PERP",
- "RAMP-PERP": "RAMP-PERP",
- "RAMPUSD": "RAMP/USD",
- "RAY-PERP": "RAY-PERP",
- "RAYUSD": "RAY/USD",
- "REALUSD": "REAL/USD",
- "REEF-0325": "REEF-0325",
- "REEF-PERP": "REEF-PERP",
- "REEFUSD": "REEF/USD",
- "REN-PERP": "REN-PERP",
- "RENUSD": "REN/USD",
- "RNDR-PERP": "RNDR-PERP",
- "RNDRUSD": "RNDR/USD",
- "RON-PERP": "RON-PERP",
- "ROOK-PERP": "ROOK-PERP",
- "ROOKUSD": "ROOK/USD",
- "ROOKUSDT": "ROOK/USDT",
- "ROSE-PERP": "ROSE-PERP",
- "RSR-PERP": "RSR-PERP",
- "RSRUSD": "RSR/USD",
- "RUNE-PERP": "RUNE-PERP",
- "RUNEUSD": "RUNE/USD",
- "RUNEUSDT": "RUNE/USDT",
- "SAND-PERP": "SAND-PERP",
- "SANDUSD": "SAND/USD",
- "SC-PERP": "SC-PERP",
- "SCRT-PERP": "SCRT-PERP",
- "SECO-PERP": "SECO-PERP",
- "SECOUSD": "SECO/USD",
- "SHIB-PERP": "SHIB-PERP",
- "SHIBUSD": "SHIB/USD",
- "SHIT-0325": "SHIT-0325",
- "SHIT-PERP": "SHIT-PERP",
- "SKL-PERP": "SKL-PERP",
- "SKLUSD": "SKL/USD",
- "SLNDUSD": "SLND/USD",
- "SLP-PERP": "SLP-PERP",
- "SLPUSD": "SLP/USD",
- "SLRSUSD": "SLRS/USD",
- "SLV-0325": "SLV-0325",
- "SLVUSD": "SLV/USD",
- "SNX-PERP": "SNX-PERP",
- "SNXUSD": "SNX/USD",
- "SNYUSD": "SNY/USD",
- "SOL-0325": "SOL-0325",
- "SOL-PERP": "SOL-PERP",
- "SOLBTC": "SOL/BTC",
- "SOLUSD": "SOL/USD",
- "SOLUSDT": "SOL/USDT",
- "SOS-PERP": "SOS-PERP",
- "SOSUSD": "SOS/USD",
- "SPELL-PERP": "SPELL-PERP",
- "SPELLUSD": "SPELL/USD",
- "SPY-0325": "SPY-0325",
- "SPYUSD": "SPY/USD",
- "SQ-0325": "SQ-0325",
- "SQUSD": "SQ/USD",
- "SRM-PERP": "SRM-PERP",
- "SRMUSD": "SRM/USD",
- "SRMUSDT": "SRM/USDT",
- "SRN-PERP": "SRN-PERP",
- "STARSUSD": "STARS/USD",
- "STEP-PERP": "STEP-PERP",
- "STEPUSD": "STEP/USD",
- "STETHUSD": "STETH/USD",
- "STMX-PERP": "STMX-PERP",
- "STMXUSD": "STMX/USD",
- "STORJ-PERP": "STORJ-PERP",
- "STORJUSD": "STORJ/USD",
- "STSOLUSD": "STSOL/USD",
- "STX-PERP": "STX-PERP",
- "SUNUSD": "SUN/USD",
- "SUSHI-0325": "SUSHI-0325",
- "SUSHI-PERP": "SUSHI-PERP",
- "SUSHIBEARUSD": "SUSHIBEAR/USD",
- "SUSHIBTC": "SUSHI/BTC",
- "SUSHIBULLUSD": "SUSHIBULL/USD",
- "SUSHIUSD": "SUSHI/USD",
- "SUSHIUSDT": "SUSHI/USDT",
- "SXP-0325": "SXP-0325",
- "SXP-PERP": "SXP-PERP",
- "SXPBEARUSD": "SXPBEAR/USD",
- "SXPBTC": "SXP/BTC",
- "SXPBULLUSD": "SXPBULL/USD",
- "SXPHALFUSD": "SXPHALF/USD",
- "SXPHALFUSDT": "SXPHALF/USDT",
- "SXPHEDGEUSD": "SXPHEDGE/USD",
- "SXPUSD": "SXP/USD",
- "SXPUSDT": "SXP/USDT",
- "THETA-0325": "THETA-0325",
- "THETA-PERP": "THETA-PERP",
- "THETABEARUSD": "THETABEAR/USD",
- "THETABULLUSD": "THETABULL/USD",
- "THETAHALFUSD": "THETAHALF/USD",
- "THETAHEDGEUSD": "THETAHEDGE/USD",
- "TLM-PERP": "TLM-PERP",
- "TLMUSD": "TLM/USD",
- "TLRY-0325": "TLRY-0325",
- "TLRYUSD": "TLRY/USD",
- "TOMO-PERP": "TOMO-PERP",
- "TOMOBEAR2021USD": "TOMOBEAR2021/USD",
- "TOMOBULLUSD": "TOMOBULL/USD",
- "TOMOHALFUSD": "TOMOHALF/USD",
- "TOMOHEDGEUSD": "TOMOHEDGE/USD",
- "TOMOUSD": "TOMO/USD",
- "TOMOUSDT": "TOMO/USDT",
- "TONCOIN-PERP": "TONCOIN-PERP",
- "TONCOINUSD": "TONCOIN/USD",
- "TRU-PERP": "TRU-PERP",
- "TRUMP2024": "TRUMP2024",
- "TRUUSD": "TRU/USD",
- "TRUUSDT": "TRU/USDT",
- "TRX-0325": "TRX-0325",
- "TRX-PERP": "TRX-PERP",
- "TRXBEARUSD": "TRXBEAR/USD",
- "TRXBTC": "TRX/BTC",
- "TRXBULLUSD": "TRXBULL/USD",
- "TRXHALFUSD": "TRXHALF/USD",
- "TRXHEDGEUSD": "TRXHEDGE/USD",
- "TRXUSD": "TRX/USD",
- "TRXUSDT": "TRX/USDT",
- "TRYB-PERP": "TRYB-PERP",
- "TRYBBEARUSD": "TRYBBEAR/USD",
- "TRYBBULLUSD": "TRYBBULL/USD",
- "TRYBHALFUSD": "TRYBHALF/USD",
- "TRYBHEDGEUSD": "TRYBHEDGE/USD",
- "TRYBUSD": "TRYB/USD",
- "TSLA-0325": "TSLA-0325",
- "TSLABTC": "TSLA/BTC",
- "TSLADOGE": "TSLA/DOGE",
- "TSLAUSD": "TSLA/USD",
- "TSM-0325": "TSM-0325",
- "TSMUSD": "TSM/USD",
- "TULIP-PERP": "TULIP-PERP",
- "TULIPUSD": "TULIP/USD",
- "TWTR-0325": "TWTR-0325",
- "TWTRUSD": "TWTR/USD",
- "UBER-0325": "UBER-0325",
- "UBERUSD": "UBER/USD",
- "UBXTUSD": "UBXT/USD",
- "UBXTUSDT": "UBXT/USDT",
- "UMEEUSD": "UMEE/USD",
- "UNI-0325": "UNI-0325",
- "UNI-PERP": "UNI-PERP",
- "UNIBTC": "UNI/BTC",
- "UNISWAP-0325": "UNISWAP-0325",
- "UNISWAP-PERP": "UNISWAP-PERP",
- "UNISWAPBEARUSD": "UNISWAPBEAR/USD",
- "UNISWAPBULLUSD": "UNISWAPBULL/USD",
- "UNIUSD": "UNI/USD",
- "UNIUSDT": "UNI/USDT",
- "USDT-0325": "USDT-0325",
- "USDT-PERP": "USDT-PERP",
- "USDTBEARUSD": "USDTBEAR/USD",
- "USDTBULLUSD": "USDTBULL/USD",
- "USDTHALFUSD": "USDTHALF/USD",
- "USDTHEDGEUSD": "USDTHEDGE/USD",
- "USDTUSD": "USDT/USD",
- "USO-0325": "USO-0325",
- "USOUSD": "USO/USD",
- "UST-PERP": "UST-PERP",
- "USTUSD": "UST/USD",
- "USTUSDT": "UST/USDT",
- "VET-PERP": "VET-PERP",
- "VETBEARUSD": "VETBEAR/USD",
- "VETBEARUSDT": "VETBEAR/USDT",
- "VETBULLUSD": "VETBULL/USD",
- "VETBULLUSDT": "VETBULL/USDT",
- "VETHEDGEUSD": "VETHEDGE/USD",
- "VGXUSD": "VGX/USD",
- "WAVES-0325": "WAVES-0325",
- "WAVES-PERP": "WAVES-PERP",
- "WAVESUSD": "WAVES/USD",
- "WBTCBTC": "WBTC/BTC",
- "WBTCUSD": "WBTC/USD",
- "WNDRUSD": "WNDR/USD",
- "WRXUSD": "WRX/USD",
- "WRXUSDT": "WRX/USDT",
- "WSB-0325": "WSB-0325",
- "XAUT-0325": "XAUT-0325",
- "XAUT-PERP": "XAUT-PERP",
- "XAUTBEARUSD": "XAUTBEAR/USD",
- "XAUTBULLUSD": "XAUTBULL/USD",
- "XAUTHALFUSD": "XAUTHALF/USD",
- "XAUTHEDGEUSD": "XAUTHEDGE/USD",
- "XAUTUSD": "XAUT/USD",
- "XAUTUSDT": "XAUT/USDT",
- "XEM-PERP": "XEM-PERP",
- "XLM-PERP": "XLM-PERP",
- "XLMBEARUSD": "XLMBEAR/USD",
- "XLMBULLUSD": "XLMBULL/USD",
- "XMR-PERP": "XMR-PERP",
- "XRP-0325": "XRP-0325",
- "XRP-PERP": "XRP-PERP",
- "XRPBEARUSD": "XRPBEAR/USD",
- "XRPBEARUSDT": "XRPBEAR/USDT",
- "XRPBTC": "XRP/BTC",
- "XRPBULLUSD": "XRPBULL/USD",
- "XRPBULLUSDT": "XRPBULL/USDT",
- "XRPHALFUSD": "XRPHALF/USD",
- "XRPHEDGEUSD": "XRPHEDGE/USD",
- "XRPUSD": "XRP/USD",
- "XRPUSDT": "XRP/USDT",
- "XTZ-0325": "XTZ-0325",
- "XTZ-PERP": "XTZ-PERP",
- "XTZBEARUSD": "XTZBEAR/USD",
- "XTZBEARUSDT": "XTZBEAR/USDT",
- "XTZBULLUSD": "XTZBULL/USD",
- "XTZBULLUSDT": "XTZBULL/USDT",
- "XTZHALFUSD": "XTZHALF/USD",
- "XTZHEDGEUSD": "XTZHEDGE/USD",
- "YFI-0325": "YFI-0325",
- "YFI-PERP": "YFI-PERP",
- "YFIBTC": "YFI/BTC",
- "YFII-PERP": "YFII-PERP",
- "YFIIUSD": "YFII/USD",
- "YFIUSD": "YFI/USD",
- "YFIUSDT": "YFI/USDT",
- "YGGUSD": "YGG/USD",
- "ZEC-PERP": "ZEC-PERP",
- "ZECBEARUSD": "ZECBEAR/USD",
- "ZECBULLUSD": "ZECBULL/USD",
- "ZIL-PERP": "ZIL-PERP",
- "ZM-0325": "ZM-0325",
- "ZMUSD": "ZM/USD",
- "ZRX-PERP": "ZRX-PERP",
- "ZRXUSD": "ZRX/USD",
- "GMTUSD": "GMT/USD",
- "GMT-PERP": "GMT-PERP",
+ "MATICBTC": "MATIC/BTC",
+ "MATICBULLUSD": "MATICBULL/USD",
+ "MATICHALFUSD": "MATICHALF/USD",
+ "MATICHEDGEUSD": "MATICHEDGE/USD",
+ "MATICUSD": "MATIC/USD",
+ "MBSUSD": "MBS/USD",
+ "MCB-PERP": "MCB-PERP",
+ "MCBUSD": "MCB/USD",
+ "MEDIA-PERP": "MEDIA-PERP",
+ "MEDIAUSD": "MEDIA/USD",
+ "MER-PERP": "MER-PERP",
+ "MERUSD": "MER/USD",
+ "MID-0325": "MID-0325",
+ "MID-PERP": "MID-PERP",
+ "MIDBEARUSD": "MIDBEAR/USD",
+ "MIDBULLUSD": "MIDBULL/USD",
+ "MIDHALFUSD": "MIDHALF/USD",
+ "MIDHEDGEUSD": "MIDHEDGE/USD",
+ "MINA-PERP": "MINA-PERP",
+ "MKR-PERP": "MKR-PERP",
+ "MKRBEARUSD": "MKRBEAR/USD",
+ "MKRBULLUSD": "MKRBULL/USD",
+ "MKRUSD": "MKR/USD",
+ "MKRUSDT": "MKR/USDT",
+ "MNGO-PERP": "MNGO-PERP",
+ "MNGOUSD": "MNGO/USD",
+ "MOBUSD": "MOB/USD",
+ "MOBUSDT": "MOB/USDT",
+ "MRNA-0325": "MRNA-0325",
+ "MRNAUSD": "MRNA/USD",
+ "MSOLUSD": "MSOL/USD",
+ "MSTR-0325": "MSTR-0325",
+ "MSTRUSD": "MSTR/USD",
+ "MTA-PERP": "MTA-PERP",
+ "MTAUSD": "MTA/USD",
+ "MTAUSDT": "MTA/USDT",
+ "MTL-PERP": "MTL-PERP",
+ "MTLUSD": "MTL/USD",
+ "MVDA10-PERP": "MVDA10-PERP",
+ "MVDA25-PERP": "MVDA25-PERP",
+ "NEAR-PERP": "NEAR-PERP",
+ "NEO-PERP": "NEO-PERP",
+ "NEXOUSD": "NEXO/USD",
+ "NFLX-0325": "NFLX-0325",
+ "NFLXUSD": "NFLX/USD",
+ "NIO-0325": "NIO-0325",
+ "NIOUSD": "NIO/USD",
+ "NOK-0325": "NOK-0325",
+ "NOKUSD": "NOK/USD",
+ "NVDA-0325": "NVDA-0325",
+ "NVDAUSD": "NVDA/USD",
+ "OKB-0325": "OKB-0325",
+ "OKB-PERP": "OKB-PERP",
+ "OKBBEARUSD": "OKBBEAR/USD",
+ "OKBBULLUSD": "OKBBULL/USD",
+ "OKBHALFUSD": "OKBHALF/USD",
+ "OKBHEDGEUSD": "OKBHEDGE/USD",
+ "OKBUSD": "OKB/USD",
+ "OMG-0325": "OMG-0325",
+ "OMG-PERP": "OMG-PERP",
+ "OMGUSD": "OMG/USD",
+ "ONE-PERP": "ONE-PERP",
+ "ONT-PERP": "ONT-PERP",
+ "ORBS-PERP": "ORBS-PERP",
+ "ORBSUSD": "ORBS/USD",
+ "OXY-PERP": "OXY-PERP",
+ "OXYUSD": "OXY/USD",
+ "OXYUSDT": "OXY/USDT",
+ "PAXG-PERP": "PAXG-PERP",
+ "PAXGBEARUSD": "PAXGBEAR/USD",
+ "PAXGBULLUSD": "PAXGBULL/USD",
+ "PAXGHALFUSD": "PAXGHALF/USD",
+ "PAXGHEDGEUSD": "PAXGHEDGE/USD",
+ "PAXGUSD": "PAXG/USD",
+ "PAXGUSDT": "PAXG/USDT",
+ "PENN-0325": "PENN-0325",
+ "PENNUSD": "PENN/USD",
+ "PEOPLE-PERP": "PEOPLE-PERP",
+ "PEOPLEUSD": "PEOPLE/USD",
+ "PERP-PERP": "PERP-PERP",
+ "PERPUSD": "PERP/USD",
+ "PFE-0325": "PFE-0325",
+ "PFEUSD": "PFE/USD",
+ "POLIS-PERP": "POLIS-PERP",
+ "POLISUSD": "POLIS/USD",
+ "PORTUSD": "PORT/USD",
+ "PRISMUSD": "PRISM/USD",
+ "PRIV-0325": "PRIV-0325",
+ "PRIV-PERP": "PRIV-PERP",
+ "PRIVBEARUSD": "PRIVBEAR/USD",
+ "PRIVBULLUSD": "PRIVBULL/USD",
+ "PRIVHALFUSD": "PRIVHALF/USD",
+ "PRIVHEDGEUSD": "PRIVHEDGE/USD",
+ "PROM-PERP": "PROM-PERP",
+ "PROMUSD": "PROM/USD",
+ "PSGUSD": "PSG/USD",
+ "PSYUSD": "PSY/USD",
+ "PTUUSD": "PTU/USD",
+ "PUNDIX-PERP": "PUNDIX-PERP",
+ "PUNDIXUSD": "PUNDIX/USD",
+ "PYPL-0325": "PYPL-0325",
+ "PYPLUSD": "PYPL/USD",
+ "QIUSD": "QI/USD",
+ "QTUM-PERP": "QTUM-PERP",
+ "RAMP-PERP": "RAMP-PERP",
+ "RAMPUSD": "RAMP/USD",
+ "RAY-PERP": "RAY-PERP",
+ "RAYUSD": "RAY/USD",
+ "REALUSD": "REAL/USD",
+ "REEF-0325": "REEF-0325",
+ "REEF-PERP": "REEF-PERP",
+ "REEFUSD": "REEF/USD",
+ "REN-PERP": "REN-PERP",
+ "RENUSD": "REN/USD",
+ "RNDR-PERP": "RNDR-PERP",
+ "RNDRUSD": "RNDR/USD",
+ "RON-PERP": "RON-PERP",
+ "ROOK-PERP": "ROOK-PERP",
+ "ROOKUSD": "ROOK/USD",
+ "ROOKUSDT": "ROOK/USDT",
+ "ROSE-PERP": "ROSE-PERP",
+ "RSR-PERP": "RSR-PERP",
+ "RSRUSD": "RSR/USD",
+ "RUNE-PERP": "RUNE-PERP",
+ "RUNEUSD": "RUNE/USD",
+ "RUNEUSDT": "RUNE/USDT",
+ "SAND-PERP": "SAND-PERP",
+ "SANDUSD": "SAND/USD",
+ "SC-PERP": "SC-PERP",
+ "SCRT-PERP": "SCRT-PERP",
+ "SECO-PERP": "SECO-PERP",
+ "SECOUSD": "SECO/USD",
+ "SHIB-PERP": "SHIB-PERP",
+ "SHIBUSD": "SHIB/USD",
+ "SHIT-0325": "SHIT-0325",
+ "SHIT-PERP": "SHIT-PERP",
+ "SKL-PERP": "SKL-PERP",
+ "SKLUSD": "SKL/USD",
+ "SLNDUSD": "SLND/USD",
+ "SLP-PERP": "SLP-PERP",
+ "SLPUSD": "SLP/USD",
+ "SLRSUSD": "SLRS/USD",
+ "SLV-0325": "SLV-0325",
+ "SLVUSD": "SLV/USD",
+ "SNX-PERP": "SNX-PERP",
+ "SNXUSD": "SNX/USD",
+ "SNYUSD": "SNY/USD",
+ "SOL-0325": "SOL-0325",
+ "SOL-PERP": "SOL-PERP",
+ "SOLBTC": "SOL/BTC",
+ "SOLUSD": "SOL/USD",
+ "SOLUSDT": "SOL/USDT",
+ "SOS-PERP": "SOS-PERP",
+ "SOSUSD": "SOS/USD",
+ "SPELL-PERP": "SPELL-PERP",
+ "SPELLUSD": "SPELL/USD",
+ "SPY-0325": "SPY-0325",
+ "SPYUSD": "SPY/USD",
+ "SQ-0325": "SQ-0325",
+ "SQUSD": "SQ/USD",
+ "SRM-PERP": "SRM-PERP",
+ "SRMUSD": "SRM/USD",
+ "SRMUSDT": "SRM/USDT",
+ "SRN-PERP": "SRN-PERP",
+ "STARSUSD": "STARS/USD",
+ "STEP-PERP": "STEP-PERP",
+ "STEPUSD": "STEP/USD",
+ "STETHUSD": "STETH/USD",
+ "STMX-PERP": "STMX-PERP",
+ "STMXUSD": "STMX/USD",
+ "STORJ-PERP": "STORJ-PERP",
+ "STORJUSD": "STORJ/USD",
+ "STSOLUSD": "STSOL/USD",
+ "STX-PERP": "STX-PERP",
+ "SUNUSD": "SUN/USD",
+ "SUSHI-0325": "SUSHI-0325",
+ "SUSHI-PERP": "SUSHI-PERP",
+ "SUSHIBEARUSD": "SUSHIBEAR/USD",
+ "SUSHIBTC": "SUSHI/BTC",
+ "SUSHIBULLUSD": "SUSHIBULL/USD",
+ "SUSHIUSD": "SUSHI/USD",
+ "SUSHIUSDT": "SUSHI/USDT",
+ "SXP-0325": "SXP-0325",
+ "SXP-PERP": "SXP-PERP",
+ "SXPBEARUSD": "SXPBEAR/USD",
+ "SXPBTC": "SXP/BTC",
+ "SXPBULLUSD": "SXPBULL/USD",
+ "SXPHALFUSD": "SXPHALF/USD",
+ "SXPHALFUSDT": "SXPHALF/USDT",
+ "SXPHEDGEUSD": "SXPHEDGE/USD",
+ "SXPUSD": "SXP/USD",
+ "SXPUSDT": "SXP/USDT",
+ "THETA-0325": "THETA-0325",
+ "THETA-PERP": "THETA-PERP",
+ "THETABEARUSD": "THETABEAR/USD",
+ "THETABULLUSD": "THETABULL/USD",
+ "THETAHALFUSD": "THETAHALF/USD",
+ "THETAHEDGEUSD": "THETAHEDGE/USD",
+ "TLM-PERP": "TLM-PERP",
+ "TLMUSD": "TLM/USD",
+ "TLRY-0325": "TLRY-0325",
+ "TLRYUSD": "TLRY/USD",
+ "TOMO-PERP": "TOMO-PERP",
+ "TOMOBEAR2021USD": "TOMOBEAR2021/USD",
+ "TOMOBULLUSD": "TOMOBULL/USD",
+ "TOMOHALFUSD": "TOMOHALF/USD",
+ "TOMOHEDGEUSD": "TOMOHEDGE/USD",
+ "TOMOUSD": "TOMO/USD",
+ "TOMOUSDT": "TOMO/USDT",
+ "TONCOIN-PERP": "TONCOIN-PERP",
+ "TONCOINUSD": "TONCOIN/USD",
+ "TRU-PERP": "TRU-PERP",
+ "TRUMP2024": "TRUMP2024",
+ "TRUUSD": "TRU/USD",
+ "TRUUSDT": "TRU/USDT",
+ "TRX-0325": "TRX-0325",
+ "TRX-PERP": "TRX-PERP",
+ "TRXBEARUSD": "TRXBEAR/USD",
+ "TRXBTC": "TRX/BTC",
+ "TRXBULLUSD": "TRXBULL/USD",
+ "TRXHALFUSD": "TRXHALF/USD",
+ "TRXHEDGEUSD": "TRXHEDGE/USD",
+ "TRXUSD": "TRX/USD",
+ "TRXUSDT": "TRX/USDT",
+ "TRYB-PERP": "TRYB-PERP",
+ "TRYBBEARUSD": "TRYBBEAR/USD",
+ "TRYBBULLUSD": "TRYBBULL/USD",
+ "TRYBHALFUSD": "TRYBHALF/USD",
+ "TRYBHEDGEUSD": "TRYBHEDGE/USD",
+ "TRYBUSD": "TRYB/USD",
+ "TSLA-0325": "TSLA-0325",
+ "TSLABTC": "TSLA/BTC",
+ "TSLADOGE": "TSLA/DOGE",
+ "TSLAUSD": "TSLA/USD",
+ "TSM-0325": "TSM-0325",
+ "TSMUSD": "TSM/USD",
+ "TULIP-PERP": "TULIP-PERP",
+ "TULIPUSD": "TULIP/USD",
+ "TWTR-0325": "TWTR-0325",
+ "TWTRUSD": "TWTR/USD",
+ "UBER-0325": "UBER-0325",
+ "UBERUSD": "UBER/USD",
+ "UBXTUSD": "UBXT/USD",
+ "UBXTUSDT": "UBXT/USDT",
+ "UMEEUSD": "UMEE/USD",
+ "UNI-0325": "UNI-0325",
+ "UNI-PERP": "UNI-PERP",
+ "UNIBTC": "UNI/BTC",
+ "UNISWAP-0325": "UNISWAP-0325",
+ "UNISWAP-PERP": "UNISWAP-PERP",
+ "UNISWAPBEARUSD": "UNISWAPBEAR/USD",
+ "UNISWAPBULLUSD": "UNISWAPBULL/USD",
+ "UNIUSD": "UNI/USD",
+ "UNIUSDT": "UNI/USDT",
+ "USDT-0325": "USDT-0325",
+ "USDT-PERP": "USDT-PERP",
+ "USDTBEARUSD": "USDTBEAR/USD",
+ "USDTBULLUSD": "USDTBULL/USD",
+ "USDTHALFUSD": "USDTHALF/USD",
+ "USDTHEDGEUSD": "USDTHEDGE/USD",
+ "USDTUSD": "USDT/USD",
+ "USO-0325": "USO-0325",
+ "USOUSD": "USO/USD",
+ "UST-PERP": "UST-PERP",
+ "USTUSD": "UST/USD",
+ "USTUSDT": "UST/USDT",
+ "VET-PERP": "VET-PERP",
+ "VETBEARUSD": "VETBEAR/USD",
+ "VETBEARUSDT": "VETBEAR/USDT",
+ "VETBULLUSD": "VETBULL/USD",
+ "VETBULLUSDT": "VETBULL/USDT",
+ "VETHEDGEUSD": "VETHEDGE/USD",
+ "VGXUSD": "VGX/USD",
+ "WAVES-0325": "WAVES-0325",
+ "WAVES-PERP": "WAVES-PERP",
+ "WAVESUSD": "WAVES/USD",
+ "WBTCBTC": "WBTC/BTC",
+ "WBTCUSD": "WBTC/USD",
+ "WNDRUSD": "WNDR/USD",
+ "WRXUSD": "WRX/USD",
+ "WRXUSDT": "WRX/USDT",
+ "WSB-0325": "WSB-0325",
+ "XAUT-0325": "XAUT-0325",
+ "XAUT-PERP": "XAUT-PERP",
+ "XAUTBEARUSD": "XAUTBEAR/USD",
+ "XAUTBULLUSD": "XAUTBULL/USD",
+ "XAUTHALFUSD": "XAUTHALF/USD",
+ "XAUTHEDGEUSD": "XAUTHEDGE/USD",
+ "XAUTUSD": "XAUT/USD",
+ "XAUTUSDT": "XAUT/USDT",
+ "XEM-PERP": "XEM-PERP",
+ "XLM-PERP": "XLM-PERP",
+ "XLMBEARUSD": "XLMBEAR/USD",
+ "XLMBULLUSD": "XLMBULL/USD",
+ "XMR-PERP": "XMR-PERP",
+ "XRP-0325": "XRP-0325",
+ "XRP-PERP": "XRP-PERP",
+ "XRPBEARUSD": "XRPBEAR/USD",
+ "XRPBEARUSDT": "XRPBEAR/USDT",
+ "XRPBTC": "XRP/BTC",
+ "XRPBULLUSD": "XRPBULL/USD",
+ "XRPBULLUSDT": "XRPBULL/USDT",
+ "XRPHALFUSD": "XRPHALF/USD",
+ "XRPHEDGEUSD": "XRPHEDGE/USD",
+ "XRPUSD": "XRP/USD",
+ "XRPUSDT": "XRP/USDT",
+ "XTZ-0325": "XTZ-0325",
+ "XTZ-PERP": "XTZ-PERP",
+ "XTZBEARUSD": "XTZBEAR/USD",
+ "XTZBEARUSDT": "XTZBEAR/USDT",
+ "XTZBULLUSD": "XTZBULL/USD",
+ "XTZBULLUSDT": "XTZBULL/USDT",
+ "XTZHALFUSD": "XTZHALF/USD",
+ "XTZHEDGEUSD": "XTZHEDGE/USD",
+ "YFI-0325": "YFI-0325",
+ "YFI-PERP": "YFI-PERP",
+ "YFIBTC": "YFI/BTC",
+ "YFII-PERP": "YFII-PERP",
+ "YFIIUSD": "YFII/USD",
+ "YFIUSD": "YFI/USD",
+ "YFIUSDT": "YFI/USDT",
+ "YGGUSD": "YGG/USD",
+ "ZEC-PERP": "ZEC-PERP",
+ "ZECBEARUSD": "ZECBEAR/USD",
+ "ZECBULLUSD": "ZECBULL/USD",
+ "ZIL-PERP": "ZIL-PERP",
+ "ZM-0325": "ZM-0325",
+ "ZMUSD": "ZM/USD",
+ "ZRX-PERP": "ZRX-PERP",
+ "ZRXUSD": "ZRX/USD",
+ "GMTUSD": "GMT/USD",
+ "GMT-PERP": "GMT-PERP",
}
diff --git a/pkg/exchange/ftx/websocket_messages_test.go b/pkg/exchange/ftx/websocket_messages_test.go
index bbe0f6e6f..5a9635e5a 100644
--- a/pkg/exchange/ftx/websocket_messages_test.go
+++ b/pkg/exchange/ftx/websocket_messages_test.go
@@ -182,6 +182,7 @@ func Test_insertAt(t *testing.T) {
func Test_newLoginRequest(t *testing.T) {
// From API doc: https://docs.ftx.com/?javascript#authentication-2
r := newLoginRequest("", "Y2QTHI23f23f23jfjas23f23To0RfUwX3H42fvN-", time.Unix(0, 1557246346499*int64(time.Millisecond)), "")
+ // pragma: allowlist nextline secret
expectedSignature := "d10b5a67a1a941ae9463a60b285ae845cdeac1b11edc7da9977bef0228b96de9"
assert.Equal(t, expectedSignature, r.Login.Signature)
jsonStr, err := json.Marshal(r)
diff --git a/pkg/exchange/kucoin/convert.go b/pkg/exchange/kucoin/convert.go
index 450c5b9fd..d86f84db9 100644
--- a/pkg/exchange/kucoin/convert.go
+++ b/pkg/exchange/kucoin/convert.go
@@ -245,4 +245,3 @@ func toGlobalTrade(fill kucoinapi.Fill) types.Trade {
}
return trade
}
-
diff --git a/pkg/exchange/kucoin/exchange.go b/pkg/exchange/kucoin/exchange.go
index 84e8a8d1b..28da3a04e 100644
--- a/pkg/exchange/kucoin/exchange.go
+++ b/pkg/exchange/kucoin/exchange.go
@@ -44,7 +44,8 @@ func New(key, secret, passphrase string) *Exchange {
}
return &Exchange{
- key: key,
+ key: key,
+ // pragma: allowlist nextline secret
secret: secret,
passphrase: passphrase,
client: client,
diff --git a/pkg/exchange/kucoin/generate_symbol_map.go b/pkg/exchange/kucoin/generate_symbol_map.go
index b67806641..249a5ec17 100644
--- a/pkg/exchange/kucoin/generate_symbol_map.go
+++ b/pkg/exchange/kucoin/generate_symbol_map.go
@@ -53,7 +53,7 @@ func main() {
defer resp.Body.Close()
r := &ApiResponse{}
- if err := json.NewDecoder(resp.Body).Decode(r) ; err != nil {
+ if err := json.NewDecoder(resp.Body).Decode(r); err != nil {
log.Fatal(err)
}
diff --git a/pkg/exchange/kucoin/kucoinapi/bullet.go b/pkg/exchange/kucoin/kucoinapi/bullet.go
index 213ca8c95..0226fad9b 100644
--- a/pkg/exchange/kucoin/kucoinapi/bullet.go
+++ b/pkg/exchange/kucoin/kucoinapi/bullet.go
@@ -61,7 +61,6 @@ type GetPublicBulletRequest struct {
client requestgen.APIClient
}
-
//go:generate requestgen -type GetPrivateBulletRequest -method "POST" -url "/api/v1/bullet-private" -responseType .APIResponse -responseDataField Data -responseDataType .Bullet
type GetPrivateBulletRequest struct {
client requestgen.AuthenticatedAPIClient
diff --git a/pkg/exchange/kucoin/kucoinapi/client.go b/pkg/exchange/kucoin/kucoinapi/client.go
index 0e084310d..6df47191c 100644
--- a/pkg/exchange/kucoin/kucoinapi/client.go
+++ b/pkg/exchange/kucoin/kucoinapi/client.go
@@ -58,6 +58,7 @@ func NewClient() *RestClient {
func (c *RestClient) Auth(key, secret, passphrase string) {
c.Key = key
+ // pragma: allowlist nextline secret
c.Secret = secret
c.Passphrase = passphrase
}
diff --git a/pkg/exchange/kucoin/stream.go b/pkg/exchange/kucoin/stream.go
index 77e06a2d6..f6ad67f97 100644
--- a/pkg/exchange/kucoin/stream.go
+++ b/pkg/exchange/kucoin/stream.go
@@ -9,9 +9,9 @@ import (
"github.com/c9s/bbgo/pkg/depth"
"github.com/c9s/bbgo/pkg/exchange/kucoin/kucoinapi"
+ "github.com/c9s/bbgo/pkg/fixedpoint"
"github.com/c9s/bbgo/pkg/types"
"github.com/c9s/bbgo/pkg/util"
- "github.com/c9s/bbgo/pkg/fixedpoint"
)
const readTimeout = 30 * time.Second
@@ -20,8 +20,8 @@ const readTimeout = 30 * time.Second
type Stream struct {
types.StandardStream
- client *kucoinapi.RestClient
- exchange *Exchange
+ client *kucoinapi.RestClient
+ exchange *Exchange
bullet *kucoinapi.Bullet
candleEventCallbacks []func(candle *WebSocketCandleEvent, e *WebSocketEvent)
@@ -125,8 +125,8 @@ func (s *Stream) handlePrivateOrderEvent(e *WebSocketPrivateOrderEvent) {
IsBuyer: e.Side == "buy",
IsMaker: e.Liquidity == "maker",
Time: types.Time(e.Ts.Time()),
- Fee: fixedpoint.Zero, // not supported
- FeeCurrency: "", // not supported
+ Fee: fixedpoint.Zero, // not supported
+ FeeCurrency: "", // not supported
})
}
diff --git a/pkg/exchange/kucoin/symbols.go b/pkg/exchange/kucoin/symbols.go
index dccc5ebe7..ddd85b7fb 100644
--- a/pkg/exchange/kucoin/symbols.go
+++ b/pkg/exchange/kucoin/symbols.go
@@ -2,1109 +2,1109 @@
package kucoin
var symbolMap = map[string]string{
- "1EARTHUSDT": "1EARTH-USDT",
- "1INCHUSDT": "1INCH-USDT",
- "2CRZBTC": "2CRZ-BTC",
- "2CRZUSDT": "2CRZ-USDT",
- "AAVE3LUSDT": "AAVE3L-USDT",
- "AAVE3SUSDT": "AAVE3S-USDT",
- "AAVEBTC": "AAVE-BTC",
- "AAVEKCS": "AAVE-KCS",
- "AAVEUSDT": "AAVE-USDT",
- "AAVEUST": "AAVE-UST",
- "ABBCBTC": "ABBC-BTC",
- "ABBCUSDT": "ABBC-USDT",
- "ACEUSDT": "ACE-USDT",
- "ACOINUSDT": "ACOIN-USDT",
- "ACTBTC": "ACT-BTC",
- "ACTETH": "ACT-ETH",
- "ADA3LUSDT": "ADA3L-USDT",
- "ADA3SUSDT": "ADA3S-USDT",
- "ADABTC": "ADA-BTC",
- "ADAKCS": "ADA-KCS",
- "ADAUSDC": "ADA-USDC",
- "ADAUSDT": "ADA-USDT",
- "ADBBTC": "ADB-BTC",
- "ADBETH": "ADB-ETH",
- "ADXUSDT": "ADX-USDT",
- "AERGOBTC": "AERGO-BTC",
- "AERGOUSDT": "AERGO-USDT",
- "AGIXBTC": "AGIX-BTC",
- "AGIXETH": "AGIX-ETH",
- "AGIXUSDT": "AGIX-USDT",
- "AGLDUSDT": "AGLD-USDT",
- "AIONBTC": "AION-BTC",
- "AIONETH": "AION-ETH",
- "AIOZUSDT": "AIOZ-USDT",
- "AIUSDT": "AI-USDT",
- "AKROBTC": "AKRO-BTC",
- "AKROUSDT": "AKRO-USDT",
- "ALBTETH": "ALBT-ETH",
- "ALBTUSDT": "ALBT-USDT",
- "ALEPHUSDT": "ALEPH-USDT",
- "ALGOBTC": "ALGO-BTC",
- "ALGOETH": "ALGO-ETH",
- "ALGOKCS": "ALGO-KCS",
- "ALGOUSDT": "ALGO-USDT",
- "ALICEBTC": "ALICE-BTC",
- "ALICEETH": "ALICE-ETH",
- "ALICEUSDT": "ALICE-USDT",
- "ALPACAUSDT": "ALPACA-USDT",
- "ALPHABTC": "ALPHA-BTC",
- "ALPHAUSDT": "ALPHA-USDT",
- "AMBBTC": "AMB-BTC",
- "AMBETH": "AMB-ETH",
- "AMPLBTC": "AMPL-BTC",
- "AMPLETH": "AMPL-ETH",
- "AMPLUSDT": "AMPL-USDT",
- "ANCUSDT": "ANC-USDT",
- "ANCUST": "ANC-UST",
- "ANKRBTC": "ANKR-BTC",
- "ANKRUSDT": "ANKR-USDT",
- "ANTBTC": "ANT-BTC",
- "ANTUSDT": "ANT-USDT",
- "AOABTC": "AOA-BTC",
- "AOAUSDT": "AOA-USDT",
- "API3USDT": "API3-USDT",
- "APLBTC": "APL-BTC",
- "APLUSDT": "APL-USDT",
- "ARBTC": "AR-BTC",
- "ARKERUSDT": "ARKER-USDT",
- "ARPAUSDT": "ARPA-USDT",
- "ARRRBTC": "ARRR-BTC",
- "ARRRUSDT": "ARRR-USDT",
- "ARUSDT": "AR-USDT",
- "ARXUSDT": "ARX-USDT",
- "ASDUSDT": "ASD-USDT",
- "ATABTC": "ATA-BTC",
- "ATAUSDT": "ATA-USDT",
- "ATOM3LUSDT": "ATOM3L-USDT",
- "ATOM3SUSDT": "ATOM3S-USDT",
- "ATOMBTC": "ATOM-BTC",
- "ATOMETH": "ATOM-ETH",
- "ATOMKCS": "ATOM-KCS",
- "ATOMUSDT": "ATOM-USDT",
- "ATOMUST": "ATOM-UST",
- "AUDIOBTC": "AUDIO-BTC",
- "AUDIOUSDT": "AUDIO-USDT",
- "AURYUSDT": "AURY-USDT",
- "AVABTC": "AVA-BTC",
- "AVAETH": "AVA-ETH",
- "AVAUSDT": "AVA-USDT",
- "AVAX3LUSDT": "AVAX3L-USDT",
- "AVAX3SUSDT": "AVAX3S-USDT",
- "AVAXBTC": "AVAX-BTC",
- "AVAXUSDT": "AVAX-USDT",
- "AXCUSDT": "AXC-USDT",
- "AXPRBTC": "AXPR-BTC",
- "AXPRETH": "AXPR-ETH",
- "AXS3LUSDT": "AXS3L-USDT",
- "AXS3SUSDT": "AXS3S-USDT",
- "AXSUSDT": "AXS-USDT",
- "BADGERBTC": "BADGER-BTC",
- "BADGERUSDT": "BADGER-USDT",
- "BAKEBTC": "BAKE-BTC",
- "BAKEETH": "BAKE-ETH",
- "BAKEUSDT": "BAKE-USDT",
- "BALBTC": "BAL-BTC",
- "BALETH": "BAL-ETH",
- "BALUSDT": "BAL-USDT",
- "BANDBTC": "BAND-BTC",
- "BANDUSDT": "BAND-USDT",
- "BASICUSDT": "BASIC-USDT",
- "BATUSDT": "BAT-USDT",
- "BAXBTC": "BAX-BTC",
- "BAXETH": "BAX-ETH",
- "BAXUSDT": "BAX-USDT",
- "BCDBTC": "BCD-BTC",
- "BCDETH": "BCD-ETH",
- "BCH3LUSDT": "BCH3L-USDT",
- "BCH3SUSDT": "BCH3S-USDT",
- "BCHBTC": "BCH-BTC",
- "BCHKCS": "BCH-KCS",
- "BCHSVBTC": "BCHSV-BTC",
- "BCHSVETH": "BCHSV-ETH",
- "BCHSVKCS": "BCHSV-KCS",
- "BCHSVUSDC": "BCHSV-USDC",
- "BCHSVUSDT": "BCHSV-USDT",
- "BCHUSDC": "BCH-USDC",
- "BCHUSDT": "BCH-USDT",
- "BEPROBTC": "BEPRO-BTC",
- "BEPROUSDT": "BEPRO-USDT",
- "BLOKUSDT": "BLOK-USDT",
- "BMONUSDT": "BMON-USDT",
- "BNB3LUSDT": "BNB3L-USDT",
- "BNB3SUSDT": "BNB3S-USDT",
- "BNBBTC": "BNB-BTC",
- "BNBKCS": "BNB-KCS",
- "BNBUSDT": "BNB-USDT",
- "BNSBTC": "BNS-BTC",
- "BNSUSDT": "BNS-USDT",
- "BNTBTC": "BNT-BTC",
- "BNTETH": "BNT-ETH",
- "BNTUSDT": "BNT-USDT",
- "BOAUSDT": "BOA-USDT",
- "BOLTBTC": "BOLT-BTC",
- "BOLTUSDT": "BOLT-USDT",
- "BONDLYETH": "BONDLY-ETH",
- "BONDLYUSDT": "BONDLY-USDT",
- "BONDUSDT": "BOND-USDT",
- "BOSONETH": "BOSON-ETH",
- "BOSONUSDT": "BOSON-USDT",
- "BTC3LUSDT": "BTC3L-USDT",
- "BTC3SUSDT": "BTC3S-USDT",
- "BTCDAI": "BTC-DAI",
- "BTCPAX": "BTC-PAX",
- "BTCTUSD": "BTC-TUSD",
- "BTCUSDC": "BTC-USDC",
- "BTCUSDT": "BTC-USDT",
- "BTCUST": "BTC-UST",
- "BTTBTC": "BTT-BTC",
- "BTTETH": "BTT-ETH",
- "BTTTRX": "BTT-TRX",
- "BTTUSDT": "BTT-USDT",
- "BURGERBTC": "BURGER-BTC",
- "BURGERUSDT": "BURGER-USDT",
- "BURPUSDT": "BURP-USDT",
- "BUXBTC": "BUX-BTC",
- "BUXUSDT": "BUX-USDT",
- "BUYBTC": "BUY-BTC",
- "BUYUSDT": "BUY-USDT",
- "C98USDT": "C98-USDT",
- "CAKEUSDT": "CAKE-USDT",
- "CAPPBTC": "CAPP-BTC",
- "CAPPETH": "CAPP-ETH",
- "CARDUSDT": "CARD-USDT",
- "CARRBTC": "CARR-BTC",
- "CARRUSDT": "CARR-USDT",
- "CASBTC": "CAS-BTC",
- "CASUSDT": "CAS-USDT",
- "CBCBTC": "CBC-BTC",
- "CBCUSDT": "CBC-USDT",
- "CELOBTC": "CELO-BTC",
- "CELOUSDT": "CELO-USDT",
- "CEREUSDT": "CERE-USDT",
- "CEURBTC": "CEUR-BTC",
- "CEURUSDT": "CEUR-USDT",
- "CFGBTC": "CFG-BTC",
- "CFGUSDT": "CFG-USDT",
- "CGGUSDT": "CGG-USDT",
- "CHMBUSDT": "CHMB-USDT",
- "CHRBTC": "CHR-BTC",
- "CHRUSDT": "CHR-USDT",
- "CHSBBTC": "CHSB-BTC",
- "CHSBETH": "CHSB-ETH",
- "CHZBTC": "CHZ-BTC",
- "CHZUSDT": "CHZ-USDT",
- "CIRUSETH": "CIRUS-ETH",
- "CIRUSUSDT": "CIRUS-USDT",
- "CIX100USDT": "CIX100-USDT",
- "CKBBTC": "CKB-BTC",
- "CKBUSDT": "CKB-USDT",
- "CLVUSDT": "CLV-USDT",
- "COMBUSDT": "COMB-USDT",
- "COMPUSDT": "COMP-USDT",
- "COTIBTC": "COTI-BTC",
- "COTIUSDT": "COTI-USDT",
- "COVBTC": "COV-BTC",
- "COVETH": "COV-ETH",
- "COVUSDT": "COV-USDT",
- "CPCBTC": "CPC-BTC",
- "CPCETH": "CPC-ETH",
- "CPOOLUSDT": "CPOOL-USDT",
- "CQTUSDT": "CQT-USDT",
- "CREAMBTC": "CREAM-BTC",
- "CREAMUSDT": "CREAM-USDT",
- "CREDIUSDT": "CREDI-USDT",
- "CROBTC": "CRO-BTC",
- "CROUSDT": "CRO-USDT",
- "CRPTBTC": "CRPT-BTC",
- "CRPTETH": "CRPT-ETH",
- "CRPTUSDT": "CRPT-USDT",
- "CRVUSDT": "CRV-USDT",
- "CSBTC": "CS-BTC",
- "CSETH": "CS-ETH",
- "CSPBTC": "CSP-BTC",
- "CSPETH": "CSP-ETH",
- "CTIETH": "CTI-ETH",
- "CTIUSDT": "CTI-USDT",
- "CTSIBTC": "CTSI-BTC",
- "CTSIUSDT": "CTSI-USDT",
- "CUDOSBTC": "CUDOS-BTC",
- "CUDOSUSDT": "CUDOS-USDT",
- "CUSDBTC": "CUSD-BTC",
- "CUSDUSDT": "CUSD-USDT",
- "CVBTC": "CV-BTC",
- "CVCBTC": "CVC-BTC",
- "CVETH": "CV-ETH",
- "CWARBTC": "CWAR-BTC",
- "CWARUSDT": "CWAR-USDT",
- "CWSUSDT": "CWS-USDT",
- "CXOBTC": "CXO-BTC",
- "CXOETH": "CXO-ETH",
- "DACCBTC": "DACC-BTC",
- "DACCETH": "DACC-ETH",
- "DAGBTC": "DAG-BTC",
- "DAGETH": "DAG-ETH",
- "DAGUSDT": "DAG-USDT",
- "DAOUSDT": "DAO-USDT",
- "DAPPTBTC": "DAPPT-BTC",
- "DAPPTUSDT": "DAPPT-USDT",
- "DAPPXUSDT": "DAPPX-USDT",
- "DASHBTC": "DASH-BTC",
- "DASHETH": "DASH-ETH",
- "DASHKCS": "DASH-KCS",
- "DASHUSDT": "DASH-USDT",
- "DATABTC": "DATA-BTC",
- "DATAUSDT": "DATA-USDT",
- "DATXBTC": "DATX-BTC",
- "DATXETH": "DATX-ETH",
- "DCRBTC": "DCR-BTC",
- "DCRETH": "DCR-ETH",
- "DEGOETH": "DEGO-ETH",
- "DEGOUSDT": "DEGO-USDT",
- "DENTBTC": "DENT-BTC",
- "DENTETH": "DENT-ETH",
- "DEROBTC": "DERO-BTC",
- "DEROUSDT": "DERO-USDT",
- "DEXEBTC": "DEXE-BTC",
- "DEXEETH": "DEXE-ETH",
- "DEXEUSDT": "DEXE-USDT",
- "DFIBTC": "DFI-BTC",
- "DFIUSDT": "DFI-USDT",
- "DFYNUSDT": "DFYN-USDT",
- "DGBBTC": "DGB-BTC",
- "DGBETH": "DGB-ETH",
- "DGBUSDT": "DGB-USDT",
- "DGTXBTC": "DGTX-BTC",
- "DGTXETH": "DGTX-ETH",
- "DIABTC": "DIA-BTC",
- "DIAUSDT": "DIA-USDT",
- "DINOUSDT": "DINO-USDT",
- "DIVIUSDT": "DIVI-USDT",
- "DMGUSDT": "DMG-USDT",
- "DMTRUSDT": "DMTR-USDT",
- "DOCKBTC": "DOCK-BTC",
- "DOCKETH": "DOCK-ETH",
- "DODOUSDT": "DODO-USDT",
- "DOGE3LUSDT": "DOGE3L-USDT",
- "DOGE3SUSDT": "DOGE3S-USDT",
- "DOGEBTC": "DOGE-BTC",
- "DOGEKCS": "DOGE-KCS",
- "DOGEUSDC": "DOGE-USDC",
- "DOGEUSDT": "DOGE-USDT",
- "DORABTC": "DORA-BTC",
- "DORAUSDT": "DORA-USDT",
- "DOT3LUSDT": "DOT3L-USDT",
- "DOT3SUSDT": "DOT3S-USDT",
- "DOTBTC": "DOT-BTC",
- "DOTKCS": "DOT-KCS",
- "DOTUSDT": "DOT-USDT",
- "DOTUST": "DOT-UST",
- "DPETUSDT": "DPET-USDT",
- "DPIUSDT": "DPI-USDT",
- "DPRUSDT": "DPR-USDT",
- "DREAMSUSDT": "DREAMS-USDT",
- "DRGNBTC": "DRGN-BTC",
- "DRGNETH": "DRGN-ETH",
- "DSLABTC": "DSLA-BTC",
- "DSLAUSDT": "DSLA-USDT",
- "DVPNUSDT": "DVPN-USDT",
- "DYDXUSDT": "DYDX-USDT",
- "DYPETH": "DYP-ETH",
- "DYPUSDT": "DYP-USDT",
- "EDGBTC": "EDG-BTC",
- "EDGUSDT": "EDG-USDT",
- "EFXBTC": "EFX-BTC",
- "EFXUSDT": "EFX-USDT",
- "EGLDBTC": "EGLD-BTC",
- "EGLDUSDT": "EGLD-USDT",
- "ELABTC": "ELA-BTC",
- "ELAETH": "ELA-ETH",
- "ELAUSDT": "ELA-USDT",
- "ELFBTC": "ELF-BTC",
- "ELFETH": "ELF-ETH",
- "ELONUSDT": "ELON-USDT",
- "ENJBTC": "ENJ-BTC",
- "ENJETH": "ENJ-ETH",
- "ENJUSDT": "ENJ-USDT",
- "ENQBTC": "ENQ-BTC",
- "ENQUSDT": "ENQ-USDT",
- "ENSUSDT": "ENS-USDT",
- "EOS3LUSDT": "EOS3L-USDT",
- "EOS3SUSDT": "EOS3S-USDT",
- "EOSBTC": "EOS-BTC",
- "EOSCUSDT": "EOSC-USDT",
- "EOSETH": "EOS-ETH",
- "EOSKCS": "EOS-KCS",
- "EOSUSDC": "EOS-USDC",
- "EOSUSDT": "EOS-USDT",
- "EPIKUSDT": "EPIK-USDT",
- "EPSBTC": "EPS-BTC",
- "EPSUSDT": "EPS-USDT",
- "EQXBTC": "EQX-BTC",
- "EQXUSDT": "EQX-USDT",
- "EQZBTC": "EQZ-BTC",
- "EQZUSDT": "EQZ-USDT",
- "ERGBTC": "ERG-BTC",
- "ERGUSDT": "ERG-USDT",
- "ERNBTC": "ERN-BTC",
- "ERNUSDT": "ERN-USDT",
- "ERSDLUSDT": "ERSDL-USDT",
- "ETCBTC": "ETC-BTC",
- "ETCETH": "ETC-ETH",
- "ETCUSDT": "ETC-USDT",
- "ETH2ETH": "ETH2-ETH",
- "ETH3LUSDT": "ETH3L-USDT",
- "ETH3SUSDT": "ETH3S-USDT",
- "ETHBTC": "ETH-BTC",
- "ETHDAI": "ETH-DAI",
- "ETHOBTC": "ETHO-BTC",
- "ETHOUSDT": "ETHO-USDT",
- "ETHPAX": "ETH-PAX",
- "ETHTUSD": "ETH-TUSD",
- "ETHUSDC": "ETH-USDC",
- "ETHUSDT": "ETH-USDT",
- "ETHUST": "ETH-UST",
- "ETNBTC": "ETN-BTC",
- "ETNETH": "ETN-ETH",
- "ETNUSDT": "ETN-USDT",
- "EWTBTC": "EWT-BTC",
- "EWTKCS": "EWT-KCS",
- "EWTUSDT": "EWT-USDT",
- "EXRDUSDT": "EXRD-USDT",
- "FALCONSUSDT": "FALCONS-USDT",
- "FCLETH": "FCL-ETH",
- "FCLUSDT": "FCL-USDT",
- "FEARUSDT": "FEAR-USDT",
- "FETBTC": "FET-BTC",
- "FETETH": "FET-ETH",
- "FILUSDT": "FIL-USDT",
- "FKXBTC": "FKX-BTC",
- "FKXETH": "FKX-ETH",
- "FKXUSDT": "FKX-USDT",
- "FLAMEUSDT": "FLAME-USDT",
- "FLOWBTC": "FLOW-BTC",
- "FLOWUSDT": "FLOW-USDT",
- "FLUXBTC": "FLUX-BTC",
- "FLUXUSDT": "FLUX-USDT",
- "FLYUSDT": "FLY-USDT",
- "FORESTPLUSBTC": "FORESTPLUS-BTC",
+ "1EARTHUSDT": "1EARTH-USDT",
+ "1INCHUSDT": "1INCH-USDT",
+ "2CRZBTC": "2CRZ-BTC",
+ "2CRZUSDT": "2CRZ-USDT",
+ "AAVE3LUSDT": "AAVE3L-USDT",
+ "AAVE3SUSDT": "AAVE3S-USDT",
+ "AAVEBTC": "AAVE-BTC",
+ "AAVEKCS": "AAVE-KCS",
+ "AAVEUSDT": "AAVE-USDT",
+ "AAVEUST": "AAVE-UST",
+ "ABBCBTC": "ABBC-BTC",
+ "ABBCUSDT": "ABBC-USDT",
+ "ACEUSDT": "ACE-USDT",
+ "ACOINUSDT": "ACOIN-USDT",
+ "ACTBTC": "ACT-BTC",
+ "ACTETH": "ACT-ETH",
+ "ADA3LUSDT": "ADA3L-USDT",
+ "ADA3SUSDT": "ADA3S-USDT",
+ "ADABTC": "ADA-BTC",
+ "ADAKCS": "ADA-KCS",
+ "ADAUSDC": "ADA-USDC",
+ "ADAUSDT": "ADA-USDT",
+ "ADBBTC": "ADB-BTC",
+ "ADBETH": "ADB-ETH",
+ "ADXUSDT": "ADX-USDT",
+ "AERGOBTC": "AERGO-BTC",
+ "AERGOUSDT": "AERGO-USDT",
+ "AGIXBTC": "AGIX-BTC",
+ "AGIXETH": "AGIX-ETH",
+ "AGIXUSDT": "AGIX-USDT",
+ "AGLDUSDT": "AGLD-USDT",
+ "AIONBTC": "AION-BTC",
+ "AIONETH": "AION-ETH",
+ "AIOZUSDT": "AIOZ-USDT",
+ "AIUSDT": "AI-USDT",
+ "AKROBTC": "AKRO-BTC",
+ "AKROUSDT": "AKRO-USDT",
+ "ALBTETH": "ALBT-ETH",
+ "ALBTUSDT": "ALBT-USDT",
+ "ALEPHUSDT": "ALEPH-USDT",
+ "ALGOBTC": "ALGO-BTC",
+ "ALGOETH": "ALGO-ETH",
+ "ALGOKCS": "ALGO-KCS",
+ "ALGOUSDT": "ALGO-USDT",
+ "ALICEBTC": "ALICE-BTC",
+ "ALICEETH": "ALICE-ETH",
+ "ALICEUSDT": "ALICE-USDT",
+ "ALPACAUSDT": "ALPACA-USDT",
+ "ALPHABTC": "ALPHA-BTC",
+ "ALPHAUSDT": "ALPHA-USDT",
+ "AMBBTC": "AMB-BTC",
+ "AMBETH": "AMB-ETH",
+ "AMPLBTC": "AMPL-BTC",
+ "AMPLETH": "AMPL-ETH",
+ "AMPLUSDT": "AMPL-USDT",
+ "ANCUSDT": "ANC-USDT",
+ "ANCUST": "ANC-UST",
+ "ANKRBTC": "ANKR-BTC",
+ "ANKRUSDT": "ANKR-USDT",
+ "ANTBTC": "ANT-BTC",
+ "ANTUSDT": "ANT-USDT",
+ "AOABTC": "AOA-BTC",
+ "AOAUSDT": "AOA-USDT",
+ "API3USDT": "API3-USDT",
+ "APLBTC": "APL-BTC",
+ "APLUSDT": "APL-USDT",
+ "ARBTC": "AR-BTC",
+ "ARKERUSDT": "ARKER-USDT",
+ "ARPAUSDT": "ARPA-USDT",
+ "ARRRBTC": "ARRR-BTC",
+ "ARRRUSDT": "ARRR-USDT",
+ "ARUSDT": "AR-USDT",
+ "ARXUSDT": "ARX-USDT",
+ "ASDUSDT": "ASD-USDT",
+ "ATABTC": "ATA-BTC",
+ "ATAUSDT": "ATA-USDT",
+ "ATOM3LUSDT": "ATOM3L-USDT",
+ "ATOM3SUSDT": "ATOM3S-USDT",
+ "ATOMBTC": "ATOM-BTC",
+ "ATOMETH": "ATOM-ETH",
+ "ATOMKCS": "ATOM-KCS",
+ "ATOMUSDT": "ATOM-USDT",
+ "ATOMUST": "ATOM-UST",
+ "AUDIOBTC": "AUDIO-BTC",
+ "AUDIOUSDT": "AUDIO-USDT",
+ "AURYUSDT": "AURY-USDT",
+ "AVABTC": "AVA-BTC",
+ "AVAETH": "AVA-ETH",
+ "AVAUSDT": "AVA-USDT",
+ "AVAX3LUSDT": "AVAX3L-USDT",
+ "AVAX3SUSDT": "AVAX3S-USDT",
+ "AVAXBTC": "AVAX-BTC",
+ "AVAXUSDT": "AVAX-USDT",
+ "AXCUSDT": "AXC-USDT",
+ "AXPRBTC": "AXPR-BTC",
+ "AXPRETH": "AXPR-ETH",
+ "AXS3LUSDT": "AXS3L-USDT",
+ "AXS3SUSDT": "AXS3S-USDT",
+ "AXSUSDT": "AXS-USDT",
+ "BADGERBTC": "BADGER-BTC",
+ "BADGERUSDT": "BADGER-USDT",
+ "BAKEBTC": "BAKE-BTC",
+ "BAKEETH": "BAKE-ETH",
+ "BAKEUSDT": "BAKE-USDT",
+ "BALBTC": "BAL-BTC",
+ "BALETH": "BAL-ETH",
+ "BALUSDT": "BAL-USDT",
+ "BANDBTC": "BAND-BTC",
+ "BANDUSDT": "BAND-USDT",
+ "BASICUSDT": "BASIC-USDT",
+ "BATUSDT": "BAT-USDT",
+ "BAXBTC": "BAX-BTC",
+ "BAXETH": "BAX-ETH",
+ "BAXUSDT": "BAX-USDT",
+ "BCDBTC": "BCD-BTC",
+ "BCDETH": "BCD-ETH",
+ "BCH3LUSDT": "BCH3L-USDT",
+ "BCH3SUSDT": "BCH3S-USDT",
+ "BCHBTC": "BCH-BTC",
+ "BCHKCS": "BCH-KCS",
+ "BCHSVBTC": "BCHSV-BTC",
+ "BCHSVETH": "BCHSV-ETH",
+ "BCHSVKCS": "BCHSV-KCS",
+ "BCHSVUSDC": "BCHSV-USDC",
+ "BCHSVUSDT": "BCHSV-USDT",
+ "BCHUSDC": "BCH-USDC",
+ "BCHUSDT": "BCH-USDT",
+ "BEPROBTC": "BEPRO-BTC",
+ "BEPROUSDT": "BEPRO-USDT",
+ "BLOKUSDT": "BLOK-USDT",
+ "BMONUSDT": "BMON-USDT",
+ "BNB3LUSDT": "BNB3L-USDT",
+ "BNB3SUSDT": "BNB3S-USDT",
+ "BNBBTC": "BNB-BTC",
+ "BNBKCS": "BNB-KCS",
+ "BNBUSDT": "BNB-USDT",
+ "BNSBTC": "BNS-BTC",
+ "BNSUSDT": "BNS-USDT",
+ "BNTBTC": "BNT-BTC",
+ "BNTETH": "BNT-ETH",
+ "BNTUSDT": "BNT-USDT",
+ "BOAUSDT": "BOA-USDT",
+ "BOLTBTC": "BOLT-BTC",
+ "BOLTUSDT": "BOLT-USDT",
+ "BONDLYETH": "BONDLY-ETH",
+ "BONDLYUSDT": "BONDLY-USDT",
+ "BONDUSDT": "BOND-USDT",
+ "BOSONETH": "BOSON-ETH",
+ "BOSONUSDT": "BOSON-USDT",
+ "BTC3LUSDT": "BTC3L-USDT",
+ "BTC3SUSDT": "BTC3S-USDT",
+ "BTCDAI": "BTC-DAI",
+ "BTCPAX": "BTC-PAX",
+ "BTCTUSD": "BTC-TUSD",
+ "BTCUSDC": "BTC-USDC",
+ "BTCUSDT": "BTC-USDT",
+ "BTCUST": "BTC-UST",
+ "BTTBTC": "BTT-BTC",
+ "BTTETH": "BTT-ETH",
+ "BTTTRX": "BTT-TRX",
+ "BTTUSDT": "BTT-USDT",
+ "BURGERBTC": "BURGER-BTC",
+ "BURGERUSDT": "BURGER-USDT",
+ "BURPUSDT": "BURP-USDT",
+ "BUXBTC": "BUX-BTC",
+ "BUXUSDT": "BUX-USDT",
+ "BUYBTC": "BUY-BTC",
+ "BUYUSDT": "BUY-USDT",
+ "C98USDT": "C98-USDT",
+ "CAKEUSDT": "CAKE-USDT",
+ "CAPPBTC": "CAPP-BTC",
+ "CAPPETH": "CAPP-ETH",
+ "CARDUSDT": "CARD-USDT",
+ "CARRBTC": "CARR-BTC",
+ "CARRUSDT": "CARR-USDT",
+ "CASBTC": "CAS-BTC",
+ "CASUSDT": "CAS-USDT",
+ "CBCBTC": "CBC-BTC",
+ "CBCUSDT": "CBC-USDT",
+ "CELOBTC": "CELO-BTC",
+ "CELOUSDT": "CELO-USDT",
+ "CEREUSDT": "CERE-USDT",
+ "CEURBTC": "CEUR-BTC",
+ "CEURUSDT": "CEUR-USDT",
+ "CFGBTC": "CFG-BTC",
+ "CFGUSDT": "CFG-USDT",
+ "CGGUSDT": "CGG-USDT",
+ "CHMBUSDT": "CHMB-USDT",
+ "CHRBTC": "CHR-BTC",
+ "CHRUSDT": "CHR-USDT",
+ "CHSBBTC": "CHSB-BTC",
+ "CHSBETH": "CHSB-ETH",
+ "CHZBTC": "CHZ-BTC",
+ "CHZUSDT": "CHZ-USDT",
+ "CIRUSETH": "CIRUS-ETH",
+ "CIRUSUSDT": "CIRUS-USDT",
+ "CIX100USDT": "CIX100-USDT",
+ "CKBBTC": "CKB-BTC",
+ "CKBUSDT": "CKB-USDT",
+ "CLVUSDT": "CLV-USDT",
+ "COMBUSDT": "COMB-USDT",
+ "COMPUSDT": "COMP-USDT",
+ "COTIBTC": "COTI-BTC",
+ "COTIUSDT": "COTI-USDT",
+ "COVBTC": "COV-BTC",
+ "COVETH": "COV-ETH",
+ "COVUSDT": "COV-USDT",
+ "CPCBTC": "CPC-BTC",
+ "CPCETH": "CPC-ETH",
+ "CPOOLUSDT": "CPOOL-USDT",
+ "CQTUSDT": "CQT-USDT",
+ "CREAMBTC": "CREAM-BTC",
+ "CREAMUSDT": "CREAM-USDT",
+ "CREDIUSDT": "CREDI-USDT",
+ "CROBTC": "CRO-BTC",
+ "CROUSDT": "CRO-USDT",
+ "CRPTBTC": "CRPT-BTC",
+ "CRPTETH": "CRPT-ETH",
+ "CRPTUSDT": "CRPT-USDT",
+ "CRVUSDT": "CRV-USDT",
+ "CSBTC": "CS-BTC",
+ "CSETH": "CS-ETH",
+ "CSPBTC": "CSP-BTC",
+ "CSPETH": "CSP-ETH",
+ "CTIETH": "CTI-ETH",
+ "CTIUSDT": "CTI-USDT",
+ "CTSIBTC": "CTSI-BTC",
+ "CTSIUSDT": "CTSI-USDT",
+ "CUDOSBTC": "CUDOS-BTC",
+ "CUDOSUSDT": "CUDOS-USDT",
+ "CUSDBTC": "CUSD-BTC",
+ "CUSDUSDT": "CUSD-USDT",
+ "CVBTC": "CV-BTC",
+ "CVCBTC": "CVC-BTC",
+ "CVETH": "CV-ETH",
+ "CWARBTC": "CWAR-BTC",
+ "CWARUSDT": "CWAR-USDT",
+ "CWSUSDT": "CWS-USDT",
+ "CXOBTC": "CXO-BTC",
+ "CXOETH": "CXO-ETH",
+ "DACCBTC": "DACC-BTC",
+ "DACCETH": "DACC-ETH",
+ "DAGBTC": "DAG-BTC",
+ "DAGETH": "DAG-ETH",
+ "DAGUSDT": "DAG-USDT",
+ "DAOUSDT": "DAO-USDT",
+ "DAPPTBTC": "DAPPT-BTC",
+ "DAPPTUSDT": "DAPPT-USDT",
+ "DAPPXUSDT": "DAPPX-USDT",
+ "DASHBTC": "DASH-BTC",
+ "DASHETH": "DASH-ETH",
+ "DASHKCS": "DASH-KCS",
+ "DASHUSDT": "DASH-USDT",
+ "DATABTC": "DATA-BTC",
+ "DATAUSDT": "DATA-USDT",
+ "DATXBTC": "DATX-BTC",
+ "DATXETH": "DATX-ETH",
+ "DCRBTC": "DCR-BTC",
+ "DCRETH": "DCR-ETH",
+ "DEGOETH": "DEGO-ETH",
+ "DEGOUSDT": "DEGO-USDT",
+ "DENTBTC": "DENT-BTC",
+ "DENTETH": "DENT-ETH",
+ "DEROBTC": "DERO-BTC",
+ "DEROUSDT": "DERO-USDT",
+ "DEXEBTC": "DEXE-BTC",
+ "DEXEETH": "DEXE-ETH",
+ "DEXEUSDT": "DEXE-USDT",
+ "DFIBTC": "DFI-BTC",
+ "DFIUSDT": "DFI-USDT",
+ "DFYNUSDT": "DFYN-USDT",
+ "DGBBTC": "DGB-BTC",
+ "DGBETH": "DGB-ETH",
+ "DGBUSDT": "DGB-USDT",
+ "DGTXBTC": "DGTX-BTC",
+ "DGTXETH": "DGTX-ETH",
+ "DIABTC": "DIA-BTC",
+ "DIAUSDT": "DIA-USDT",
+ "DINOUSDT": "DINO-USDT",
+ "DIVIUSDT": "DIVI-USDT",
+ "DMGUSDT": "DMG-USDT",
+ "DMTRUSDT": "DMTR-USDT",
+ "DOCKBTC": "DOCK-BTC",
+ "DOCKETH": "DOCK-ETH",
+ "DODOUSDT": "DODO-USDT",
+ "DOGE3LUSDT": "DOGE3L-USDT",
+ "DOGE3SUSDT": "DOGE3S-USDT",
+ "DOGEBTC": "DOGE-BTC",
+ "DOGEKCS": "DOGE-KCS",
+ "DOGEUSDC": "DOGE-USDC",
+ "DOGEUSDT": "DOGE-USDT",
+ "DORABTC": "DORA-BTC",
+ "DORAUSDT": "DORA-USDT",
+ "DOT3LUSDT": "DOT3L-USDT",
+ "DOT3SUSDT": "DOT3S-USDT",
+ "DOTBTC": "DOT-BTC",
+ "DOTKCS": "DOT-KCS",
+ "DOTUSDT": "DOT-USDT",
+ "DOTUST": "DOT-UST",
+ "DPETUSDT": "DPET-USDT",
+ "DPIUSDT": "DPI-USDT",
+ "DPRUSDT": "DPR-USDT",
+ "DREAMSUSDT": "DREAMS-USDT",
+ "DRGNBTC": "DRGN-BTC",
+ "DRGNETH": "DRGN-ETH",
+ "DSLABTC": "DSLA-BTC",
+ "DSLAUSDT": "DSLA-USDT",
+ "DVPNUSDT": "DVPN-USDT",
+ "DYDXUSDT": "DYDX-USDT",
+ "DYPETH": "DYP-ETH",
+ "DYPUSDT": "DYP-USDT",
+ "EDGBTC": "EDG-BTC",
+ "EDGUSDT": "EDG-USDT",
+ "EFXBTC": "EFX-BTC",
+ "EFXUSDT": "EFX-USDT",
+ "EGLDBTC": "EGLD-BTC",
+ "EGLDUSDT": "EGLD-USDT",
+ "ELABTC": "ELA-BTC",
+ "ELAETH": "ELA-ETH",
+ "ELAUSDT": "ELA-USDT",
+ "ELFBTC": "ELF-BTC",
+ "ELFETH": "ELF-ETH",
+ "ELONUSDT": "ELON-USDT",
+ "ENJBTC": "ENJ-BTC",
+ "ENJETH": "ENJ-ETH",
+ "ENJUSDT": "ENJ-USDT",
+ "ENQBTC": "ENQ-BTC",
+ "ENQUSDT": "ENQ-USDT",
+ "ENSUSDT": "ENS-USDT",
+ "EOS3LUSDT": "EOS3L-USDT",
+ "EOS3SUSDT": "EOS3S-USDT",
+ "EOSBTC": "EOS-BTC",
+ "EOSCUSDT": "EOSC-USDT",
+ "EOSETH": "EOS-ETH",
+ "EOSKCS": "EOS-KCS",
+ "EOSUSDC": "EOS-USDC",
+ "EOSUSDT": "EOS-USDT",
+ "EPIKUSDT": "EPIK-USDT",
+ "EPSBTC": "EPS-BTC",
+ "EPSUSDT": "EPS-USDT",
+ "EQXBTC": "EQX-BTC",
+ "EQXUSDT": "EQX-USDT",
+ "EQZBTC": "EQZ-BTC",
+ "EQZUSDT": "EQZ-USDT",
+ "ERGBTC": "ERG-BTC",
+ "ERGUSDT": "ERG-USDT",
+ "ERNBTC": "ERN-BTC",
+ "ERNUSDT": "ERN-USDT",
+ "ERSDLUSDT": "ERSDL-USDT",
+ "ETCBTC": "ETC-BTC",
+ "ETCETH": "ETC-ETH",
+ "ETCUSDT": "ETC-USDT",
+ "ETH2ETH": "ETH2-ETH",
+ "ETH3LUSDT": "ETH3L-USDT",
+ "ETH3SUSDT": "ETH3S-USDT",
+ "ETHBTC": "ETH-BTC",
+ "ETHDAI": "ETH-DAI",
+ "ETHOBTC": "ETHO-BTC",
+ "ETHOUSDT": "ETHO-USDT",
+ "ETHPAX": "ETH-PAX",
+ "ETHTUSD": "ETH-TUSD",
+ "ETHUSDC": "ETH-USDC",
+ "ETHUSDT": "ETH-USDT",
+ "ETHUST": "ETH-UST",
+ "ETNBTC": "ETN-BTC",
+ "ETNETH": "ETN-ETH",
+ "ETNUSDT": "ETN-USDT",
+ "EWTBTC": "EWT-BTC",
+ "EWTKCS": "EWT-KCS",
+ "EWTUSDT": "EWT-USDT",
+ "EXRDUSDT": "EXRD-USDT",
+ "FALCONSUSDT": "FALCONS-USDT",
+ "FCLETH": "FCL-ETH",
+ "FCLUSDT": "FCL-USDT",
+ "FEARUSDT": "FEAR-USDT",
+ "FETBTC": "FET-BTC",
+ "FETETH": "FET-ETH",
+ "FILUSDT": "FIL-USDT",
+ "FKXBTC": "FKX-BTC",
+ "FKXETH": "FKX-ETH",
+ "FKXUSDT": "FKX-USDT",
+ "FLAMEUSDT": "FLAME-USDT",
+ "FLOWBTC": "FLOW-BTC",
+ "FLOWUSDT": "FLOW-USDT",
+ "FLUXBTC": "FLUX-BTC",
+ "FLUXUSDT": "FLUX-USDT",
+ "FLYUSDT": "FLY-USDT",
+ "FORESTPLUSBTC": "FORESTPLUS-BTC",
"FORESTPLUSUSDT": "FORESTPLUS-USDT",
- "FORMETH": "FORM-ETH",
- "FORMUSDT": "FORM-USDT",
- "FORTHUSDT": "FORTH-USDT",
- "FRMUSDT": "FRM-USDT",
- "FRONTBTC": "FRONT-BTC",
- "FRONTUSDT": "FRONT-USDT",
- "FTGUSDT": "FTG-USDT",
- "FTM3LUSDT": "FTM3L-USDT",
- "FTM3SUSDT": "FTM3S-USDT",
- "FTMBTC": "FTM-BTC",
- "FTMETH": "FTM-ETH",
- "FTMUSDT": "FTM-USDT",
- "FTTBTC": "FTT-BTC",
- "FTTUSDT": "FTT-USDT",
- "FXBTC": "FX-BTC",
- "FXETH": "FX-ETH",
- "FXSBTC": "FXS-BTC",
- "FXSUSDT": "FXS-USDT",
- "GAFIUSDT": "GAFI-USDT",
- "GALAX3LUSDT": "GALAX3L-USDT",
- "GALAX3SUSDT": "GALAX3S-USDT",
- "GALAXUSDT": "GALAX-USDT",
- "GASBTC": "GAS-BTC",
- "GASUSDT": "GAS-USDT",
- "GEEQUSDT": "GEEQ-USDT",
- "GENSUSDT": "GENS-USDT",
- "GHSTBTC": "GHST-BTC",
- "GHSTUSDT": "GHST-USDT",
- "GHXUSDT": "GHX-USDT",
- "GLCHUSDT": "GLCH-USDT",
- "GLMBTC": "GLM-BTC",
- "GLMUSDT": "GLM-USDT",
- "GLQBTC": "GLQ-BTC",
- "GLQUSDT": "GLQ-USDT",
- "GMBBTC": "GMB-BTC",
- "GMBETH": "GMB-ETH",
- "GMBUSDT": "GMB-USDT",
- "GMEEUSDT": "GMEE-USDT",
- "GOBTC": "GO-BTC",
- "GODSUSDT": "GODS-USDT",
- "GOETH": "GO-ETH",
- "GOM2BTC": "GOM2-BTC",
- "GOM2USDT": "GOM2-USDT",
- "GOUSDT": "GO-USDT",
- "GOVIBTC": "GOVI-BTC",
- "GOVIUSDT": "GOVI-USDT",
- "GRINBTC": "GRIN-BTC",
- "GRINETH": "GRIN-ETH",
- "GRINUSDT": "GRIN-USDT",
- "GRTKCS": "GRT-KCS",
- "GRTUSDT": "GRT-USDT",
- "GSPIUSDT": "GSPI-USDT",
- "GTCBTC": "GTC-BTC",
- "GTCUSDT": "GTC-USDT",
- "H3RO3SUSDT": "H3RO3S-USDT",
- "HAIBTC": "HAI-BTC",
- "HAIUSDT": "HAI-USDT",
- "HAKAUSDT": "HAKA-USDT",
- "HAPIUSDT": "HAPI-USDT",
- "HARDUSDT": "HARD-USDT",
- "HBARBTC": "HBAR-BTC",
- "HBARUSDT": "HBAR-USDT",
- "HEARTBTC": "HEART-BTC",
- "HEARTUSDT": "HEART-USDT",
- "HEGICBTC": "HEGIC-BTC",
- "HEGICUSDT": "HEGIC-USDT",
- "HEROUSDT": "HERO-USDT",
- "HORDUSDT": "HORD-USDT",
- "HOTCROSSUSDT": "HOTCROSS-USDT",
- "HPBBTC": "HPB-BTC",
- "HPBETH": "HPB-ETH",
- "HTRBTC": "HTR-BTC",
- "HTRUSDT": "HTR-USDT",
- "HTUSDT": "HT-USDT",
- "HYDRAUSDT": "HYDRA-USDT",
- "HYVEBTC": "HYVE-BTC",
- "HYVEUSDT": "HYVE-USDT",
- "ICPBTC": "ICP-BTC",
- "ICPUSDT": "ICP-USDT",
- "IDEAUSDT": "IDEA-USDT",
- "ILAUSDT": "ILA-USDT",
- "ILVUSDT": "ILV-USDT",
- "IMXUSDT": "IMX-USDT",
- "INJBTC": "INJ-BTC",
- "INJUSDT": "INJ-USDT",
- "IOIUSDT": "IOI-USDT",
- "IOSTBTC": "IOST-BTC",
- "IOSTETH": "IOST-ETH",
- "IOSTUSDT": "IOST-USDT",
- "IOTXBTC": "IOTX-BTC",
- "IOTXETH": "IOTX-ETH",
- "IOTXUSDT": "IOTX-USDT",
- "ISPUSDT": "ISP-USDT",
- "IXSUSDT": "IXS-USDT",
- "JARBTC": "JAR-BTC",
- "JARUSDT": "JAR-USDT",
- "JASMYUSDT": "JASMY-USDT",
- "JSTUSDT": "JST-USDT",
- "JUPETH": "JUP-ETH",
- "JUPUSDT": "JUP-USDT",
- "KAIBTC": "KAI-BTC",
- "KAIETH": "KAI-ETH",
- "KAIUSDT": "KAI-USDT",
- "KARUSDT": "KAR-USDT",
- "KATBTC": "KAT-BTC",
- "KATUSDT": "KAT-USDT",
- "KAVAUSDT": "KAVA-USDT",
- "KCSBTC": "KCS-BTC",
- "KCSETH": "KCS-ETH",
- "KCSUSDT": "KCS-USDT",
- "KDABTC": "KDA-BTC",
- "KDAUSDT": "KDA-USDT",
- "KDONUSDT": "KDON-USDT",
- "KEEPBTC": "KEEP-BTC",
- "KEEPUSDT": "KEEP-USDT",
- "KEYBTC": "KEY-BTC",
- "KEYETH": "KEY-ETH",
- "KINUSDT": "KIN-USDT",
- "KLAYBTC": "KLAY-BTC",
- "KLAYUSDT": "KLAY-USDT",
- "KLVBTC": "KLV-BTC",
- "KLVTRX": "KLV-TRX",
- "KLVUSDT": "KLV-USDT",
- "KMAUSDT": "KMA-USDT",
- "KMDBTC": "KMD-BTC",
- "KMDUSDT": "KMD-USDT",
- "KNCBTC": "KNC-BTC",
- "KNCETH": "KNC-ETH",
- "KOKUSDT": "KOK-USDT",
- "KOLETH": "KOL-ETH",
- "KOLUSDT": "KOL-USDT",
- "KONOUSDT": "KONO-USDT",
- "KRLBTC": "KRL-BTC",
- "KRLUSDT": "KRL-USDT",
- "KSMBTC": "KSM-BTC",
- "KSMUSDT": "KSM-USDT",
- "LABSETH": "LABS-ETH",
- "LABSUSDT": "LABS-USDT",
- "LACEETH": "LACE-ETH",
- "LACEUSDT": "LACE-USDT",
- "LAYERBTC": "LAYER-BTC",
- "LAYERUSDT": "LAYER-USDT",
- "LIKEUSDT": "LIKE-USDT",
- "LINABTC": "LINA-BTC",
- "LINAUSDT": "LINA-USDT",
- "LINK3LUSDT": "LINK3L-USDT",
- "LINK3SUSDT": "LINK3S-USDT",
- "LINKBTC": "LINK-BTC",
- "LINKKCS": "LINK-KCS",
- "LINKUSDC": "LINK-USDC",
- "LINKUSDT": "LINK-USDT",
- "LITBTC": "LIT-BTC",
- "LITHETH": "LITH-ETH",
- "LITHUSDT": "LITH-USDT",
- "LITUSDT": "LIT-USDT",
- "LNCHXUSDT": "LNCHX-USDT",
- "LOCGUSDT": "LOCG-USDT",
- "LOCUSDT": "LOC-USDT",
- "LOKIBTC": "LOKI-BTC",
- "LOKIETH": "LOKI-ETH",
- "LOKIUSDT": "LOKI-USDT",
- "LONUSDT": "LON-USDT",
- "LOOMBTC": "LOOM-BTC",
- "LOOMETH": "LOOM-ETH",
- "LPOOLBTC": "LPOOL-BTC",
- "LPOOLUSDT": "LPOOL-USDT",
- "LPTUSDT": "LPT-USDT",
- "LRCBTC": "LRC-BTC",
- "LRCETH": "LRC-ETH",
- "LRCUSDT": "LRC-USDT",
- "LSKBTC": "LSK-BTC",
- "LSKETH": "LSK-ETH",
- "LSSUSDT": "LSS-USDT",
- "LTC3LUSDT": "LTC3L-USDT",
- "LTC3SUSDT": "LTC3S-USDT",
- "LTCBTC": "LTC-BTC",
- "LTCETH": "LTC-ETH",
- "LTCKCS": "LTC-KCS",
- "LTCUSDC": "LTC-USDC",
- "LTCUSDT": "LTC-USDT",
- "LTOBTC": "LTO-BTC",
- "LTOUSDT": "LTO-USDT",
- "LTXBTC": "LTX-BTC",
- "LTXUSDT": "LTX-USDT",
- "LUNA3LUSDT": "LUNA3L-USDT",
- "LUNA3SUSDT": "LUNA3S-USDT",
- "LUNABTC": "LUNA-BTC",
- "LUNAETH": "LUNA-ETH",
- "LUNAKCS": "LUNA-KCS",
- "LUNAUSDT": "LUNA-USDT",
- "LUNAUST": "LUNA-UST",
- "LYMBTC": "LYM-BTC",
- "LYMETH": "LYM-ETH",
- "LYMUSDT": "LYM-USDT",
- "LYXEETH": "LYXE-ETH",
- "LYXEUSDT": "LYXE-USDT",
- "MAHABTC": "MAHA-BTC",
- "MAHAUSDT": "MAHA-USDT",
- "MAKIBTC": "MAKI-BTC",
- "MAKIUSDT": "MAKI-USDT",
- "MANA3LUSDT": "MANA3L-USDT",
- "MANA3SUSDT": "MANA3S-USDT",
- "MANABTC": "MANA-BTC",
- "MANAETH": "MANA-ETH",
- "MANAUSDT": "MANA-USDT",
- "MANBTC": "MAN-BTC",
- "MANUSDT": "MAN-USDT",
- "MAPBTC": "MAP-BTC",
- "MAPUSDT": "MAP-USDT",
- "MARSHUSDT": "MARSH-USDT",
- "MASKUSDT": "MASK-USDT",
- "MATIC3LUSDT": "MATIC3L-USDT",
- "MATIC3SUSDT": "MATIC3S-USDT",
- "MATICBTC": "MATIC-BTC",
- "MATICUSDT": "MATIC-USDT",
- "MATICUST": "MATIC-UST",
- "MATTERUSDT": "MATTER-USDT",
- "MEMUSDT": "MEM-USDT",
- "MFTBTC": "MFT-BTC",
- "MFTUSDT": "MFT-USDT",
- "MHCBTC": "MHC-BTC",
- "MHCETH": "MHC-ETH",
- "MHCUSDT": "MHC-USDT",
- "MIRKCS": "MIR-KCS",
- "MIRUSDT": "MIR-USDT",
- "MIRUST": "MIR-UST",
- "MITXBTC": "MITX-BTC",
- "MITXUSDT": "MITX-USDT",
- "MKRBTC": "MKR-BTC",
- "MKRDAI": "MKR-DAI",
- "MKRETH": "MKR-ETH",
- "MKRUSDT": "MKR-USDT",
- "MLKBTC": "MLK-BTC",
- "MLKUSDT": "MLK-USDT",
- "MLNBTC": "MLN-BTC",
- "MLNUSDT": "MLN-USDT",
- "MNETUSDT": "MNET-USDT",
- "MNSTUSDT": "MNST-USDT",
- "MNWUSDT": "MNW-USDT",
- "MODEFIBTC": "MODEFI-BTC",
- "MODEFIUSDT": "MODEFI-USDT",
- "MONIUSDT": "MONI-USDT",
- "MOVRETH": "MOVR-ETH",
- "MOVRUSDT": "MOVR-USDT",
- "MSWAPBTC": "MSWAP-BTC",
- "MSWAPUSDT": "MSWAP-USDT",
- "MTLBTC": "MTL-BTC",
- "MTLUSDT": "MTL-USDT",
- "MTRGUSDT": "MTRG-USDT",
- "MTVBTC": "MTV-BTC",
- "MTVETH": "MTV-ETH",
- "MTVUSDT": "MTV-USDT",
- "MVPBTC": "MVP-BTC",
- "MVPETH": "MVP-ETH",
- "MXCUSDT": "MXC-USDT",
- "MXWUSDT": "MXW-USDT",
- "NAKAUSDT": "NAKA-USDT",
- "NANOBTC": "NANO-BTC",
- "NANOETH": "NANO-ETH",
- "NANOKCS": "NANO-KCS",
- "NANOUSDT": "NANO-USDT",
- "NDAUUSDT": "NDAU-USDT",
- "NEAR3LUSDT": "NEAR3L-USDT",
- "NEAR3SUSDT": "NEAR3S-USDT",
- "NEARBTC": "NEAR-BTC",
- "NEARUSDT": "NEAR-USDT",
- "NEOBTC": "NEO-BTC",
- "NEOETH": "NEO-ETH",
- "NEOKCS": "NEO-KCS",
- "NEOUSDT": "NEO-USDT",
- "NFTBUSDT": "NFTB-USDT",
- "NFTTRX": "NFT-TRX",
- "NFTUSDT": "NFT-USDT",
- "NGCUSDT": "NGC-USDT",
- "NGLBTC": "NGL-BTC",
- "NGLUSDT": "NGL-USDT",
- "NGMUSDT": "NGM-USDT",
- "NIFUSDT": "NIF-USDT",
- "NIMBTC": "NIM-BTC",
- "NIMETH": "NIM-ETH",
- "NIMUSDT": "NIM-USDT",
- "NKNBTC": "NKN-BTC",
- "NKNUSDT": "NKN-USDT",
- "NMRBTC": "NMR-BTC",
- "NMRUSDT": "NMR-USDT",
- "NOIABTC": "NOIA-BTC",
- "NOIAUSDT": "NOIA-USDT",
- "NORDBTC": "NORD-BTC",
- "NORDUSDT": "NORD-USDT",
- "NRGBTC": "NRG-BTC",
- "NRGETH": "NRG-ETH",
- "NTVRKUSDC": "NTVRK-USDC",
- "NTVRKUSDT": "NTVRK-USDT",
- "NUBTC": "NU-BTC",
- "NULSBTC": "NULS-BTC",
- "NULSETH": "NULS-ETH",
- "NUMUSDT": "NUM-USDT",
- "NUUSDT": "NU-USDT",
- "NWCBTC": "NWC-BTC",
- "NWCUSDT": "NWC-USDT",
- "OCEANBTC": "OCEAN-BTC",
- "OCEANETH": "OCEAN-ETH",
- "ODDZUSDT": "ODDZ-USDT",
- "OGNBTC": "OGN-BTC",
- "OGNUSDT": "OGN-USDT",
- "OLTBTC": "OLT-BTC",
- "OLTETH": "OLT-ETH",
- "OMBTC": "OM-BTC",
- "OMGBTC": "OMG-BTC",
- "OMGETH": "OMG-ETH",
- "OMGUSDT": "OMG-USDT",
- "OMUSDT": "OM-USDT",
- "ONEBTC": "ONE-BTC",
- "ONEUSDT": "ONE-USDT",
- "ONTBTC": "ONT-BTC",
- "ONTETH": "ONT-ETH",
- "ONTUSDT": "ONT-USDT",
- "OOEUSDT": "OOE-USDT",
- "OPCTBTC": "OPCT-BTC",
- "OPCTETH": "OPCT-ETH",
- "OPCTUSDT": "OPCT-USDT",
- "OPULUSDT": "OPUL-USDT",
- "ORAIUSDT": "ORAI-USDT",
- "ORBSBTC": "ORBS-BTC",
- "ORBSUSDT": "ORBS-USDT",
- "ORNUSDT": "ORN-USDT",
- "OUSDBTC": "OUSD-BTC",
- "OUSDUSDT": "OUSD-USDT",
- "OXTBTC": "OXT-BTC",
- "OXTETH": "OXT-ETH",
- "OXTUSDT": "OXT-USDT",
- "PAXGBTC": "PAXG-BTC",
- "PAXGUSDT": "PAXG-USDT",
- "PBRUSDT": "PBR-USDT",
- "PBXUSDT": "PBX-USDT",
- "PCXBTC": "PCX-BTC",
- "PCXUSDT": "PCX-USDT",
- "PDEXBTC": "PDEX-BTC",
- "PDEXUSDT": "PDEX-USDT",
- "PELUSDT": "PEL-USDT",
- "PERPBTC": "PERP-BTC",
- "PERPUSDT": "PERP-USDT",
- "PHAETH": "PHA-ETH",
- "PHAUSDT": "PHA-USDT",
- "PHNXBTC": "PHNX-BTC",
- "PHNXUSDT": "PHNX-USDT",
- "PIVXBTC": "PIVX-BTC",
- "PIVXETH": "PIVX-ETH",
- "PIVXUSDT": "PIVX-USDT",
- "PLAYBTC": "PLAY-BTC",
- "PLAYETH": "PLAY-ETH",
- "PLUUSDT": "PLU-USDT",
- "PMONUSDT": "PMON-USDT",
- "PNTBTC": "PNT-BTC",
- "PNTUSDT": "PNT-USDT",
- "POLCUSDT": "POLC-USDT",
- "POLKBTC": "POLK-BTC",
- "POLKUSDT": "POLK-USDT",
- "POLSBTC": "POLS-BTC",
- "POLSUSDT": "POLS-USDT",
- "POLUSDT": "POL-USDT",
- "POLXUSDT": "POLX-USDT",
- "PONDBTC": "POND-BTC",
- "PONDUSDT": "POND-USDT",
- "POWRBTC": "POWR-BTC",
- "POWRETH": "POWR-ETH",
- "PPTBTC": "PPT-BTC",
- "PPTETH": "PPT-ETH",
- "PREBTC": "PRE-BTC",
- "PREUSDT": "PRE-USDT",
- "PROMBTC": "PROM-BTC",
- "PROMUSDT": "PROM-USDT",
- "PRQUSDT": "PRQ-USDT",
- "PUNDIXBTC": "PUNDIX-BTC",
- "PUNDIXUSDT": "PUNDIX-USDT",
- "PUSHBTC": "PUSH-BTC",
- "PUSHUSDT": "PUSH-USDT",
- "PYRBTC": "PYR-BTC",
- "PYRUSDT": "PYR-USDT",
- "QIBTC": "QI-BTC",
- "QIUSDT": "QI-USDT",
- "QKCBTC": "QKC-BTC",
- "QKCETH": "QKC-ETH",
- "QNTUSDT": "QNT-USDT",
- "QRDOETH": "QRDO-ETH",
- "QRDOUSDT": "QRDO-USDT",
- "QTUMBTC": "QTUM-BTC",
- "QUICKBTC": "QUICK-BTC",
- "QUICKUSDT": "QUICK-USDT",
- "RBTCBTC": "RBTC-BTC",
- "REAPUSDT": "REAP-USDT",
- "REEFBTC": "REEF-BTC",
- "REEFUSDT": "REEF-USDT",
- "RENUSDT": "REN-USDT",
- "REPBTC": "REP-BTC",
- "REPETH": "REP-ETH",
- "REPUSDT": "REP-USDT",
- "REQBTC": "REQ-BTC",
- "REQETH": "REQ-ETH",
- "REQUSDT": "REQ-USDT",
- "REVVBTC": "REVV-BTC",
- "REVVUSDT": "REVV-USDT",
- "RFOXUSDT": "RFOX-USDT",
- "RFUELUSDT": "RFUEL-USDT",
- "RIFBTC": "RIF-BTC",
- "RLCBTC": "RLC-BTC",
- "RLCUSDT": "RLC-USDT",
- "RLYUSDT": "RLY-USDT",
- "RMRKUSDT": "RMRK-USDT",
- "RNDRBTC": "RNDR-BTC",
- "RNDRUSDT": "RNDR-USDT",
- "ROOBEEBTC": "ROOBEE-BTC",
- "ROSEUSDT": "ROSE-USDT",
- "ROSNUSDT": "ROSN-USDT",
- "ROUTEUSDT": "ROUTE-USDT",
- "RSRBTC": "RSR-BTC",
- "RSRUSDT": "RSR-USDT",
- "RUNEBTC": "RUNE-BTC",
- "RUNEUSDT": "RUNE-USDT",
- "RUSDT": "R-USDT",
- "SAND3LUSDT": "SAND3L-USDT",
- "SAND3SUSDT": "SAND3S-USDT",
- "SANDUSDT": "SAND-USDT",
- "SCLPBTC": "SCLP-BTC",
- "SCLPUSDT": "SCLP-USDT",
- "SDAOETH": "SDAO-ETH",
- "SDAOUSDT": "SDAO-USDT",
- "SDNETH": "SDN-ETH",
- "SDNUSDT": "SDN-USDT",
- "SENSOBTC": "SENSO-BTC",
- "SENSOUSDT": "SENSO-USDT",
- "SFPBTC": "SFP-BTC",
- "SFPUSDT": "SFP-USDT",
- "SFUNDUSDT": "SFUND-USDT",
- "SHABTC": "SHA-BTC",
- "SHAUSDT": "SHA-USDT",
- "SHFTBTC": "SHFT-BTC",
- "SHFTUSDT": "SHFT-USDT",
- "SHIBDOGE": "SHIB-DOGE",
- "SHIBUSDT": "SHIB-USDT",
- "SHILLUSDT": "SHILL-USDT",
- "SHRBTC": "SHR-BTC",
- "SHRUSDT": "SHR-USDT",
- "SKEYUSDT": "SKEY-USDT",
- "SKLBTC": "SKL-BTC",
- "SKLUSDT": "SKL-USDT",
- "SKUBTC": "SKU-BTC",
- "SKUUSDT": "SKU-USDT",
- "SLIMUSDT": "SLIM-USDT",
- "SLPUSDT": "SLP-USDT",
- "SNTBTC": "SNT-BTC",
- "SNTETH": "SNT-ETH",
- "SNTVTBTC": "SNTVT-BTC",
- "SNTVTETH": "SNTVT-ETH",
- "SNXBTC": "SNX-BTC",
- "SNXETH": "SNX-ETH",
- "SNXUSDT": "SNX-USDT",
- "SNXUST": "SNX-UST",
- "SOL3LUSDT": "SOL3L-USDT",
- "SOL3SUSDT": "SOL3S-USDT",
- "SOLRUSDT": "SOLR-USDT",
- "SOLUSDT": "SOL-USDT",
- "SOLUST": "SOL-UST",
- "SOLVEBTC": "SOLVE-BTC",
- "SOLVEUSDT": "SOLVE-USDT",
- "SOULBTC": "SOUL-BTC",
- "SOULETH": "SOUL-ETH",
- "SOULUSDT": "SOUL-USDT",
- "SOVUSDT": "SOV-USDT",
- "SPIUSDT": "SPI-USDT",
- "SRKBTC": "SRK-BTC",
- "SRKUSDT": "SRK-USDT",
- "SRMBTC": "SRM-BTC",
- "SRMUSDT": "SRM-USDT",
- "STCBTC": "STC-BTC",
- "STCUSDT": "STC-USDT",
- "STMXUSDT": "STMX-USDT",
- "STNDETH": "STND-ETH",
- "STNDUSDT": "STND-USDT",
- "STORJBTC": "STORJ-BTC",
- "STORJETH": "STORJ-ETH",
- "STORJUSDT": "STORJ-USDT",
- "STRKBTC": "STRK-BTC",
- "STRKETH": "STRK-ETH",
- "STRONGUSDT": "STRONG-USDT",
- "STXBTC": "STX-BTC",
- "STXUSDT": "STX-USDT",
- "SUKUBTC": "SUKU-BTC",
- "SUKUUSDT": "SUKU-USDT",
- "SUNUSDT": "SUN-USDT",
- "SUPERBTC": "SUPER-BTC",
- "SUPERUSDT": "SUPER-USDT",
- "SUSDBTC": "SUSD-BTC",
- "SUSDETH": "SUSD-ETH",
- "SUSDUSDT": "SUSD-USDT",
- "SUSHI3LUSDT": "SUSHI3L-USDT",
- "SUSHI3SUSDT": "SUSHI3S-USDT",
- "SUSHIUSDT": "SUSHI-USDT",
- "SUTERBTC": "SUTER-BTC",
- "SUTERUSDT": "SUTER-USDT",
- "SWASHUSDT": "SWASH-USDT",
- "SWINGBYBTC": "SWINGBY-BTC",
- "SWINGBYUSDT": "SWINGBY-USDT",
- "SWPUSDT": "SWP-USDT",
- "SXPBTC": "SXP-BTC",
- "SXPUSDT": "SXP-USDT",
- "SYLOUSDT": "SYLO-USDT",
- "TARAETH": "TARA-ETH",
- "TARAUSDT": "TARA-USDT",
- "TCPUSDT": "TCP-USDT",
- "TELBTC": "TEL-BTC",
- "TELETH": "TEL-ETH",
- "TELUSDT": "TEL-USDT",
- "THETAUSDT": "THETA-USDT",
- "TIDALUSDT": "TIDAL-USDT",
- "TIMEBTC": "TIME-BTC",
- "TIMEETH": "TIME-ETH",
- "TKOBTC": "TKO-BTC",
- "TKOUSDT": "TKO-USDT",
- "TKYBTC": "TKY-BTC",
- "TKYETH": "TKY-ETH",
- "TKYUSDT": "TKY-USDT",
- "TLMBTC": "TLM-BTC",
- "TLMETH": "TLM-ETH",
- "TLMUSDT": "TLM-USDT",
- "TLOSBTC": "TLOS-BTC",
- "TLOSUSDT": "TLOS-USDT",
- "TOKOBTC": "TOKO-BTC",
- "TOKOKCS": "TOKO-KCS",
- "TOKOUSDT": "TOKO-USDT",
- "TOMOBTC": "TOMO-BTC",
- "TOMOETH": "TOMO-ETH",
- "TOMOUSDT": "TOMO-USDT",
- "TONEBTC": "TONE-BTC",
- "TONEETH": "TONE-ETH",
- "TONEUSDT": "TONE-USDT",
- "TOWERBTC": "TOWER-BTC",
- "TOWERUSDT": "TOWER-USDT",
- "TRACBTC": "TRAC-BTC",
- "TRACETH": "TRAC-ETH",
- "TRADEBTC": "TRADE-BTC",
- "TRADEUSDT": "TRADE-USDT",
- "TRBBTC": "TRB-BTC",
- "TRBUSDT": "TRB-USDT",
- "TRIASBTC": "TRIAS-BTC",
- "TRIASUSDT": "TRIAS-USDT",
- "TRIBEUSDT": "TRIBE-USDT",
- "TRUBTC": "TRU-BTC",
- "TRUUSDT": "TRU-USDT",
- "TRVLUSDT": "TRVL-USDT",
- "TRXBTC": "TRX-BTC",
- "TRXETH": "TRX-ETH",
- "TRXKCS": "TRX-KCS",
- "TRXUSDT": "TRX-USDT",
- "TVKBTC": "TVK-BTC",
- "TVKUSDT": "TVK-USDT",
- "TWTBTC": "TWT-BTC",
- "TWTUSDT": "TWT-USDT",
- "TXAUSDC": "TXA-USDC",
- "TXAUSDT": "TXA-USDT",
- "UBXETH": "UBX-ETH",
- "UBXTUSDT": "UBXT-USDT",
- "UBXUSDT": "UBX-USDT",
- "UDOOETH": "UDOO-ETH",
- "UFOUSDT": "UFO-USDT",
- "UMAUSDT": "UMA-USDT",
- "UMBUSDT": "UMB-USDT",
- "UNBUSDT": "UNB-USDT",
- "UNFIUSDT": "UNFI-USDT",
- "UNI3LUSDT": "UNI3L-USDT",
- "UNI3SUSDT": "UNI3S-USDT",
- "UNICUSDT": "UNIC-USDT",
- "UNIKCS": "UNI-KCS",
- "UNIUSDT": "UNI-USDT",
- "UNOBTC": "UNO-BTC",
- "UNOUSDT": "UNO-USDT",
- "UOSBTC": "UOS-BTC",
- "UOSUSDT": "UOS-USDT",
- "UQCBTC": "UQC-BTC",
- "UQCETH": "UQC-ETH",
- "USDCUSDT": "USDC-USDT",
- "USDCUST": "USDC-UST",
- "USDJUSDT": "USDJ-USDT",
- "USDNUSDT": "USDN-USDT",
- "USDTDAI": "USDT-DAI",
- "USDTPAX": "USDT-PAX",
- "USDTTUSD": "USDT-TUSD",
- "USDTUSDC": "USDT-USDC",
- "USDTUST": "USDT-UST",
- "UTKBTC": "UTK-BTC",
- "UTKETH": "UTK-ETH",
- "VAIUSDT": "VAI-USDT",
- "VEEDBTC": "VEED-BTC",
- "VEEDUSDT": "VEED-USDT",
- "VEGAETH": "VEGA-ETH",
- "VEGAUSDT": "VEGA-USDT",
- "VELOUSDT": "VELO-USDT",
- "VET3LUSDT": "VET3L-USDT",
- "VET3SUSDT": "VET3S-USDT",
- "VETBTC": "VET-BTC",
- "VETETH": "VET-ETH",
- "VETKCS": "VET-KCS",
- "VETUSDT": "VET-USDT",
- "VIDBTC": "VID-BTC",
- "VIDTBTC": "VIDT-BTC",
- "VIDTUSDT": "VIDT-USDT",
- "VIDUSDT": "VID-USDT",
- "VLXBTC": "VLX-BTC",
- "VLXUSDT": "VLX-USDT",
- "VRABTC": "VRA-BTC",
- "VRAUSDT": "VRA-USDT",
- "VRUSDT": "VR-USDT",
- "VSYSBTC": "VSYS-BTC",
- "VSYSUSDT": "VSYS-USDT",
- "VXVUSDT": "VXV-USDT",
- "WANBTC": "WAN-BTC",
- "WANETH": "WAN-ETH",
- "WAVESBTC": "WAVES-BTC",
- "WAVESUSDT": "WAVES-USDT",
- "WAXBTC": "WAX-BTC",
- "WAXETH": "WAX-ETH",
- "WAXUSDT": "WAX-USDT",
- "WBTCBTC": "WBTC-BTC",
- "WBTCETH": "WBTC-ETH",
- "WESTBTC": "WEST-BTC",
- "WESTUSDT": "WEST-USDT",
- "WILDUSDT": "WILD-USDT",
- "WINBTC": "WIN-BTC",
- "WINTRX": "WIN-TRX",
- "WINUSDT": "WIN-USDT",
- "WNCGBTC": "WNCG-BTC",
- "WNCGUSDT": "WNCG-USDT",
- "WNXMBTC": "WNXM-BTC",
- "WNXMUSDT": "WNXM-USDT",
- "WOMUSDT": "WOM-USDT",
- "WOOUSDT": "WOO-USDT",
- "WRXBTC": "WRX-BTC",
- "WRXUSDT": "WRX-USDT",
- "WSIENNAUSDT": "WSIENNA-USDT",
- "WTCBTC": "WTC-BTC",
- "WXTBTC": "WXT-BTC",
- "WXTUSDT": "WXT-USDT",
- "XAVAUSDT": "XAVA-USDT",
- "XCADUSDT": "XCAD-USDT",
- "XCHUSDT": "XCH-USDT",
- "XCURBTC": "XCUR-BTC",
- "XCURUSDT": "XCUR-USDT",
- "XDBBTC": "XDB-BTC",
- "XDBUSDT": "XDB-USDT",
- "XDCBTC": "XDC-BTC",
- "XDCETH": "XDC-ETH",
- "XDCUSDT": "XDC-USDT",
- "XECUSDT": "XEC-USDT",
- "XEDBTC": "XED-BTC",
- "XEDUSDT": "XED-USDT",
- "XEMBTC": "XEM-BTC",
- "XEMUSDT": "XEM-USDT",
- "XHVBTC": "XHV-BTC",
- "XHVUSDT": "XHV-USDT",
- "XLMBTC": "XLM-BTC",
- "XLMETH": "XLM-ETH",
- "XLMKCS": "XLM-KCS",
- "XLMUSDT": "XLM-USDT",
- "XMRBTC": "XMR-BTC",
- "XMRETH": "XMR-ETH",
- "XMRUSDT": "XMR-USDT",
- "XNLUSDT": "XNL-USDT",
- "XPRBTC": "XPR-BTC",
- "XPRTUSDT": "XPRT-USDT",
- "XPRUSDT": "XPR-USDT",
- "XRP3LUSDT": "XRP3L-USDT",
- "XRP3SUSDT": "XRP3S-USDT",
- "XRPBTC": "XRP-BTC",
- "XRPETH": "XRP-ETH",
- "XRPKCS": "XRP-KCS",
- "XRPPAX": "XRP-PAX",
- "XRPTUSD": "XRP-TUSD",
- "XRPUSDC": "XRP-USDC",
- "XRPUSDT": "XRP-USDT",
- "XSRUSDT": "XSR-USDT",
- "XTAGUSDT": "XTAG-USDT",
- "XTMUSDT": "XTM-USDT",
- "XTZBTC": "XTZ-BTC",
- "XTZKCS": "XTZ-KCS",
- "XTZUSDT": "XTZ-USDT",
- "XVSBTC": "XVS-BTC",
- "XVSUSDT": "XVS-USDT",
- "XYMBTC": "XYM-BTC",
- "XYMUSDT": "XYM-USDT",
- "XYOBTC": "XYO-BTC",
- "XYOETH": "XYO-ETH",
- "XYOUSDT": "XYO-USDT",
- "YFDAIBTC": "YFDAI-BTC",
- "YFDAIUSDT": "YFDAI-USDT",
- "YFIUSDT": "YFI-USDT",
- "YFIUST": "YFI-UST",
- "YGGUSDT": "YGG-USDT",
- "YLDUSDT": "YLD-USDT",
- "YOPETH": "YOP-ETH",
- "YOPUSDT": "YOP-USDT",
- "ZCXBTC": "ZCX-BTC",
- "ZCXUSDT": "ZCX-USDT",
- "ZECBTC": "ZEC-BTC",
- "ZECKCS": "ZEC-KCS",
- "ZECUSDT": "ZEC-USDT",
- "ZEEUSDT": "ZEE-USDT",
- "ZENUSDT": "ZEN-USDT",
- "ZILBTC": "ZIL-BTC",
- "ZILETH": "ZIL-ETH",
- "ZILUSDT": "ZIL-USDT",
- "ZKTUSDT": "ZKT-USDT",
- "ZORTUSDT": "ZORT-USDT",
- "ZRXBTC": "ZRX-BTC",
- "ZRXETH": "ZRX-ETH",
+ "FORMETH": "FORM-ETH",
+ "FORMUSDT": "FORM-USDT",
+ "FORTHUSDT": "FORTH-USDT",
+ "FRMUSDT": "FRM-USDT",
+ "FRONTBTC": "FRONT-BTC",
+ "FRONTUSDT": "FRONT-USDT",
+ "FTGUSDT": "FTG-USDT",
+ "FTM3LUSDT": "FTM3L-USDT",
+ "FTM3SUSDT": "FTM3S-USDT",
+ "FTMBTC": "FTM-BTC",
+ "FTMETH": "FTM-ETH",
+ "FTMUSDT": "FTM-USDT",
+ "FTTBTC": "FTT-BTC",
+ "FTTUSDT": "FTT-USDT",
+ "FXBTC": "FX-BTC",
+ "FXETH": "FX-ETH",
+ "FXSBTC": "FXS-BTC",
+ "FXSUSDT": "FXS-USDT",
+ "GAFIUSDT": "GAFI-USDT",
+ "GALAX3LUSDT": "GALAX3L-USDT",
+ "GALAX3SUSDT": "GALAX3S-USDT",
+ "GALAXUSDT": "GALAX-USDT",
+ "GASBTC": "GAS-BTC",
+ "GASUSDT": "GAS-USDT",
+ "GEEQUSDT": "GEEQ-USDT",
+ "GENSUSDT": "GENS-USDT",
+ "GHSTBTC": "GHST-BTC",
+ "GHSTUSDT": "GHST-USDT",
+ "GHXUSDT": "GHX-USDT",
+ "GLCHUSDT": "GLCH-USDT",
+ "GLMBTC": "GLM-BTC",
+ "GLMUSDT": "GLM-USDT",
+ "GLQBTC": "GLQ-BTC",
+ "GLQUSDT": "GLQ-USDT",
+ "GMBBTC": "GMB-BTC",
+ "GMBETH": "GMB-ETH",
+ "GMBUSDT": "GMB-USDT",
+ "GMEEUSDT": "GMEE-USDT",
+ "GOBTC": "GO-BTC",
+ "GODSUSDT": "GODS-USDT",
+ "GOETH": "GO-ETH",
+ "GOM2BTC": "GOM2-BTC",
+ "GOM2USDT": "GOM2-USDT",
+ "GOUSDT": "GO-USDT",
+ "GOVIBTC": "GOVI-BTC",
+ "GOVIUSDT": "GOVI-USDT",
+ "GRINBTC": "GRIN-BTC",
+ "GRINETH": "GRIN-ETH",
+ "GRINUSDT": "GRIN-USDT",
+ "GRTKCS": "GRT-KCS",
+ "GRTUSDT": "GRT-USDT",
+ "GSPIUSDT": "GSPI-USDT",
+ "GTCBTC": "GTC-BTC",
+ "GTCUSDT": "GTC-USDT",
+ "H3RO3SUSDT": "H3RO3S-USDT",
+ "HAIBTC": "HAI-BTC",
+ "HAIUSDT": "HAI-USDT",
+ "HAKAUSDT": "HAKA-USDT",
+ "HAPIUSDT": "HAPI-USDT",
+ "HARDUSDT": "HARD-USDT",
+ "HBARBTC": "HBAR-BTC",
+ "HBARUSDT": "HBAR-USDT",
+ "HEARTBTC": "HEART-BTC",
+ "HEARTUSDT": "HEART-USDT",
+ "HEGICBTC": "HEGIC-BTC",
+ "HEGICUSDT": "HEGIC-USDT",
+ "HEROUSDT": "HERO-USDT",
+ "HORDUSDT": "HORD-USDT",
+ "HOTCROSSUSDT": "HOTCROSS-USDT",
+ "HPBBTC": "HPB-BTC",
+ "HPBETH": "HPB-ETH",
+ "HTRBTC": "HTR-BTC",
+ "HTRUSDT": "HTR-USDT",
+ "HTUSDT": "HT-USDT",
+ "HYDRAUSDT": "HYDRA-USDT",
+ "HYVEBTC": "HYVE-BTC",
+ "HYVEUSDT": "HYVE-USDT",
+ "ICPBTC": "ICP-BTC",
+ "ICPUSDT": "ICP-USDT",
+ "IDEAUSDT": "IDEA-USDT",
+ "ILAUSDT": "ILA-USDT",
+ "ILVUSDT": "ILV-USDT",
+ "IMXUSDT": "IMX-USDT",
+ "INJBTC": "INJ-BTC",
+ "INJUSDT": "INJ-USDT",
+ "IOIUSDT": "IOI-USDT",
+ "IOSTBTC": "IOST-BTC",
+ "IOSTETH": "IOST-ETH",
+ "IOSTUSDT": "IOST-USDT",
+ "IOTXBTC": "IOTX-BTC",
+ "IOTXETH": "IOTX-ETH",
+ "IOTXUSDT": "IOTX-USDT",
+ "ISPUSDT": "ISP-USDT",
+ "IXSUSDT": "IXS-USDT",
+ "JARBTC": "JAR-BTC",
+ "JARUSDT": "JAR-USDT",
+ "JASMYUSDT": "JASMY-USDT",
+ "JSTUSDT": "JST-USDT",
+ "JUPETH": "JUP-ETH",
+ "JUPUSDT": "JUP-USDT",
+ "KAIBTC": "KAI-BTC",
+ "KAIETH": "KAI-ETH",
+ "KAIUSDT": "KAI-USDT",
+ "KARUSDT": "KAR-USDT",
+ "KATBTC": "KAT-BTC",
+ "KATUSDT": "KAT-USDT",
+ "KAVAUSDT": "KAVA-USDT",
+ "KCSBTC": "KCS-BTC",
+ "KCSETH": "KCS-ETH",
+ "KCSUSDT": "KCS-USDT",
+ "KDABTC": "KDA-BTC",
+ "KDAUSDT": "KDA-USDT",
+ "KDONUSDT": "KDON-USDT",
+ "KEEPBTC": "KEEP-BTC",
+ "KEEPUSDT": "KEEP-USDT",
+ "KEYBTC": "KEY-BTC",
+ "KEYETH": "KEY-ETH",
+ "KINUSDT": "KIN-USDT",
+ "KLAYBTC": "KLAY-BTC",
+ "KLAYUSDT": "KLAY-USDT",
+ "KLVBTC": "KLV-BTC",
+ "KLVTRX": "KLV-TRX",
+ "KLVUSDT": "KLV-USDT",
+ "KMAUSDT": "KMA-USDT",
+ "KMDBTC": "KMD-BTC",
+ "KMDUSDT": "KMD-USDT",
+ "KNCBTC": "KNC-BTC",
+ "KNCETH": "KNC-ETH",
+ "KOKUSDT": "KOK-USDT",
+ "KOLETH": "KOL-ETH",
+ "KOLUSDT": "KOL-USDT",
+ "KONOUSDT": "KONO-USDT",
+ "KRLBTC": "KRL-BTC",
+ "KRLUSDT": "KRL-USDT",
+ "KSMBTC": "KSM-BTC",
+ "KSMUSDT": "KSM-USDT",
+ "LABSETH": "LABS-ETH",
+ "LABSUSDT": "LABS-USDT",
+ "LACEETH": "LACE-ETH",
+ "LACEUSDT": "LACE-USDT",
+ "LAYERBTC": "LAYER-BTC",
+ "LAYERUSDT": "LAYER-USDT",
+ "LIKEUSDT": "LIKE-USDT",
+ "LINABTC": "LINA-BTC",
+ "LINAUSDT": "LINA-USDT",
+ "LINK3LUSDT": "LINK3L-USDT",
+ "LINK3SUSDT": "LINK3S-USDT",
+ "LINKBTC": "LINK-BTC",
+ "LINKKCS": "LINK-KCS",
+ "LINKUSDC": "LINK-USDC",
+ "LINKUSDT": "LINK-USDT",
+ "LITBTC": "LIT-BTC",
+ "LITHETH": "LITH-ETH",
+ "LITHUSDT": "LITH-USDT",
+ "LITUSDT": "LIT-USDT",
+ "LNCHXUSDT": "LNCHX-USDT",
+ "LOCGUSDT": "LOCG-USDT",
+ "LOCUSDT": "LOC-USDT",
+ "LOKIBTC": "LOKI-BTC",
+ "LOKIETH": "LOKI-ETH",
+ "LOKIUSDT": "LOKI-USDT",
+ "LONUSDT": "LON-USDT",
+ "LOOMBTC": "LOOM-BTC",
+ "LOOMETH": "LOOM-ETH",
+ "LPOOLBTC": "LPOOL-BTC",
+ "LPOOLUSDT": "LPOOL-USDT",
+ "LPTUSDT": "LPT-USDT",
+ "LRCBTC": "LRC-BTC",
+ "LRCETH": "LRC-ETH",
+ "LRCUSDT": "LRC-USDT",
+ "LSKBTC": "LSK-BTC",
+ "LSKETH": "LSK-ETH",
+ "LSSUSDT": "LSS-USDT",
+ "LTC3LUSDT": "LTC3L-USDT",
+ "LTC3SUSDT": "LTC3S-USDT",
+ "LTCBTC": "LTC-BTC",
+ "LTCETH": "LTC-ETH",
+ "LTCKCS": "LTC-KCS",
+ "LTCUSDC": "LTC-USDC",
+ "LTCUSDT": "LTC-USDT",
+ "LTOBTC": "LTO-BTC",
+ "LTOUSDT": "LTO-USDT",
+ "LTXBTC": "LTX-BTC",
+ "LTXUSDT": "LTX-USDT",
+ "LUNA3LUSDT": "LUNA3L-USDT",
+ "LUNA3SUSDT": "LUNA3S-USDT",
+ "LUNABTC": "LUNA-BTC",
+ "LUNAETH": "LUNA-ETH",
+ "LUNAKCS": "LUNA-KCS",
+ "LUNAUSDT": "LUNA-USDT",
+ "LUNAUST": "LUNA-UST",
+ "LYMBTC": "LYM-BTC",
+ "LYMETH": "LYM-ETH",
+ "LYMUSDT": "LYM-USDT",
+ "LYXEETH": "LYXE-ETH",
+ "LYXEUSDT": "LYXE-USDT",
+ "MAHABTC": "MAHA-BTC",
+ "MAHAUSDT": "MAHA-USDT",
+ "MAKIBTC": "MAKI-BTC",
+ "MAKIUSDT": "MAKI-USDT",
+ "MANA3LUSDT": "MANA3L-USDT",
+ "MANA3SUSDT": "MANA3S-USDT",
+ "MANABTC": "MANA-BTC",
+ "MANAETH": "MANA-ETH",
+ "MANAUSDT": "MANA-USDT",
+ "MANBTC": "MAN-BTC",
+ "MANUSDT": "MAN-USDT",
+ "MAPBTC": "MAP-BTC",
+ "MAPUSDT": "MAP-USDT",
+ "MARSHUSDT": "MARSH-USDT",
+ "MASKUSDT": "MASK-USDT",
+ "MATIC3LUSDT": "MATIC3L-USDT",
+ "MATIC3SUSDT": "MATIC3S-USDT",
+ "MATICBTC": "MATIC-BTC",
+ "MATICUSDT": "MATIC-USDT",
+ "MATICUST": "MATIC-UST",
+ "MATTERUSDT": "MATTER-USDT",
+ "MEMUSDT": "MEM-USDT",
+ "MFTBTC": "MFT-BTC",
+ "MFTUSDT": "MFT-USDT",
+ "MHCBTC": "MHC-BTC",
+ "MHCETH": "MHC-ETH",
+ "MHCUSDT": "MHC-USDT",
+ "MIRKCS": "MIR-KCS",
+ "MIRUSDT": "MIR-USDT",
+ "MIRUST": "MIR-UST",
+ "MITXBTC": "MITX-BTC",
+ "MITXUSDT": "MITX-USDT",
+ "MKRBTC": "MKR-BTC",
+ "MKRDAI": "MKR-DAI",
+ "MKRETH": "MKR-ETH",
+ "MKRUSDT": "MKR-USDT",
+ "MLKBTC": "MLK-BTC",
+ "MLKUSDT": "MLK-USDT",
+ "MLNBTC": "MLN-BTC",
+ "MLNUSDT": "MLN-USDT",
+ "MNETUSDT": "MNET-USDT",
+ "MNSTUSDT": "MNST-USDT",
+ "MNWUSDT": "MNW-USDT",
+ "MODEFIBTC": "MODEFI-BTC",
+ "MODEFIUSDT": "MODEFI-USDT",
+ "MONIUSDT": "MONI-USDT",
+ "MOVRETH": "MOVR-ETH",
+ "MOVRUSDT": "MOVR-USDT",
+ "MSWAPBTC": "MSWAP-BTC",
+ "MSWAPUSDT": "MSWAP-USDT",
+ "MTLBTC": "MTL-BTC",
+ "MTLUSDT": "MTL-USDT",
+ "MTRGUSDT": "MTRG-USDT",
+ "MTVBTC": "MTV-BTC",
+ "MTVETH": "MTV-ETH",
+ "MTVUSDT": "MTV-USDT",
+ "MVPBTC": "MVP-BTC",
+ "MVPETH": "MVP-ETH",
+ "MXCUSDT": "MXC-USDT",
+ "MXWUSDT": "MXW-USDT",
+ "NAKAUSDT": "NAKA-USDT",
+ "NANOBTC": "NANO-BTC",
+ "NANOETH": "NANO-ETH",
+ "NANOKCS": "NANO-KCS",
+ "NANOUSDT": "NANO-USDT",
+ "NDAUUSDT": "NDAU-USDT",
+ "NEAR3LUSDT": "NEAR3L-USDT",
+ "NEAR3SUSDT": "NEAR3S-USDT",
+ "NEARBTC": "NEAR-BTC",
+ "NEARUSDT": "NEAR-USDT",
+ "NEOBTC": "NEO-BTC",
+ "NEOETH": "NEO-ETH",
+ "NEOKCS": "NEO-KCS",
+ "NEOUSDT": "NEO-USDT",
+ "NFTBUSDT": "NFTB-USDT",
+ "NFTTRX": "NFT-TRX",
+ "NFTUSDT": "NFT-USDT",
+ "NGCUSDT": "NGC-USDT",
+ "NGLBTC": "NGL-BTC",
+ "NGLUSDT": "NGL-USDT",
+ "NGMUSDT": "NGM-USDT",
+ "NIFUSDT": "NIF-USDT",
+ "NIMBTC": "NIM-BTC",
+ "NIMETH": "NIM-ETH",
+ "NIMUSDT": "NIM-USDT",
+ "NKNBTC": "NKN-BTC",
+ "NKNUSDT": "NKN-USDT",
+ "NMRBTC": "NMR-BTC",
+ "NMRUSDT": "NMR-USDT",
+ "NOIABTC": "NOIA-BTC",
+ "NOIAUSDT": "NOIA-USDT",
+ "NORDBTC": "NORD-BTC",
+ "NORDUSDT": "NORD-USDT",
+ "NRGBTC": "NRG-BTC",
+ "NRGETH": "NRG-ETH",
+ "NTVRKUSDC": "NTVRK-USDC",
+ "NTVRKUSDT": "NTVRK-USDT",
+ "NUBTC": "NU-BTC",
+ "NULSBTC": "NULS-BTC",
+ "NULSETH": "NULS-ETH",
+ "NUMUSDT": "NUM-USDT",
+ "NUUSDT": "NU-USDT",
+ "NWCBTC": "NWC-BTC",
+ "NWCUSDT": "NWC-USDT",
+ "OCEANBTC": "OCEAN-BTC",
+ "OCEANETH": "OCEAN-ETH",
+ "ODDZUSDT": "ODDZ-USDT",
+ "OGNBTC": "OGN-BTC",
+ "OGNUSDT": "OGN-USDT",
+ "OLTBTC": "OLT-BTC",
+ "OLTETH": "OLT-ETH",
+ "OMBTC": "OM-BTC",
+ "OMGBTC": "OMG-BTC",
+ "OMGETH": "OMG-ETH",
+ "OMGUSDT": "OMG-USDT",
+ "OMUSDT": "OM-USDT",
+ "ONEBTC": "ONE-BTC",
+ "ONEUSDT": "ONE-USDT",
+ "ONTBTC": "ONT-BTC",
+ "ONTETH": "ONT-ETH",
+ "ONTUSDT": "ONT-USDT",
+ "OOEUSDT": "OOE-USDT",
+ "OPCTBTC": "OPCT-BTC",
+ "OPCTETH": "OPCT-ETH",
+ "OPCTUSDT": "OPCT-USDT",
+ "OPULUSDT": "OPUL-USDT",
+ "ORAIUSDT": "ORAI-USDT",
+ "ORBSBTC": "ORBS-BTC",
+ "ORBSUSDT": "ORBS-USDT",
+ "ORNUSDT": "ORN-USDT",
+ "OUSDBTC": "OUSD-BTC",
+ "OUSDUSDT": "OUSD-USDT",
+ "OXTBTC": "OXT-BTC",
+ "OXTETH": "OXT-ETH",
+ "OXTUSDT": "OXT-USDT",
+ "PAXGBTC": "PAXG-BTC",
+ "PAXGUSDT": "PAXG-USDT",
+ "PBRUSDT": "PBR-USDT",
+ "PBXUSDT": "PBX-USDT",
+ "PCXBTC": "PCX-BTC",
+ "PCXUSDT": "PCX-USDT",
+ "PDEXBTC": "PDEX-BTC",
+ "PDEXUSDT": "PDEX-USDT",
+ "PELUSDT": "PEL-USDT",
+ "PERPBTC": "PERP-BTC",
+ "PERPUSDT": "PERP-USDT",
+ "PHAETH": "PHA-ETH",
+ "PHAUSDT": "PHA-USDT",
+ "PHNXBTC": "PHNX-BTC",
+ "PHNXUSDT": "PHNX-USDT",
+ "PIVXBTC": "PIVX-BTC",
+ "PIVXETH": "PIVX-ETH",
+ "PIVXUSDT": "PIVX-USDT",
+ "PLAYBTC": "PLAY-BTC",
+ "PLAYETH": "PLAY-ETH",
+ "PLUUSDT": "PLU-USDT",
+ "PMONUSDT": "PMON-USDT",
+ "PNTBTC": "PNT-BTC",
+ "PNTUSDT": "PNT-USDT",
+ "POLCUSDT": "POLC-USDT",
+ "POLKBTC": "POLK-BTC",
+ "POLKUSDT": "POLK-USDT",
+ "POLSBTC": "POLS-BTC",
+ "POLSUSDT": "POLS-USDT",
+ "POLUSDT": "POL-USDT",
+ "POLXUSDT": "POLX-USDT",
+ "PONDBTC": "POND-BTC",
+ "PONDUSDT": "POND-USDT",
+ "POWRBTC": "POWR-BTC",
+ "POWRETH": "POWR-ETH",
+ "PPTBTC": "PPT-BTC",
+ "PPTETH": "PPT-ETH",
+ "PREBTC": "PRE-BTC",
+ "PREUSDT": "PRE-USDT",
+ "PROMBTC": "PROM-BTC",
+ "PROMUSDT": "PROM-USDT",
+ "PRQUSDT": "PRQ-USDT",
+ "PUNDIXBTC": "PUNDIX-BTC",
+ "PUNDIXUSDT": "PUNDIX-USDT",
+ "PUSHBTC": "PUSH-BTC",
+ "PUSHUSDT": "PUSH-USDT",
+ "PYRBTC": "PYR-BTC",
+ "PYRUSDT": "PYR-USDT",
+ "QIBTC": "QI-BTC",
+ "QIUSDT": "QI-USDT",
+ "QKCBTC": "QKC-BTC",
+ "QKCETH": "QKC-ETH",
+ "QNTUSDT": "QNT-USDT",
+ "QRDOETH": "QRDO-ETH",
+ "QRDOUSDT": "QRDO-USDT",
+ "QTUMBTC": "QTUM-BTC",
+ "QUICKBTC": "QUICK-BTC",
+ "QUICKUSDT": "QUICK-USDT",
+ "RBTCBTC": "RBTC-BTC",
+ "REAPUSDT": "REAP-USDT",
+ "REEFBTC": "REEF-BTC",
+ "REEFUSDT": "REEF-USDT",
+ "RENUSDT": "REN-USDT",
+ "REPBTC": "REP-BTC",
+ "REPETH": "REP-ETH",
+ "REPUSDT": "REP-USDT",
+ "REQBTC": "REQ-BTC",
+ "REQETH": "REQ-ETH",
+ "REQUSDT": "REQ-USDT",
+ "REVVBTC": "REVV-BTC",
+ "REVVUSDT": "REVV-USDT",
+ "RFOXUSDT": "RFOX-USDT",
+ "RFUELUSDT": "RFUEL-USDT",
+ "RIFBTC": "RIF-BTC",
+ "RLCBTC": "RLC-BTC",
+ "RLCUSDT": "RLC-USDT",
+ "RLYUSDT": "RLY-USDT",
+ "RMRKUSDT": "RMRK-USDT",
+ "RNDRBTC": "RNDR-BTC",
+ "RNDRUSDT": "RNDR-USDT",
+ "ROOBEEBTC": "ROOBEE-BTC",
+ "ROSEUSDT": "ROSE-USDT",
+ "ROSNUSDT": "ROSN-USDT",
+ "ROUTEUSDT": "ROUTE-USDT",
+ "RSRBTC": "RSR-BTC",
+ "RSRUSDT": "RSR-USDT",
+ "RUNEBTC": "RUNE-BTC",
+ "RUNEUSDT": "RUNE-USDT",
+ "RUSDT": "R-USDT",
+ "SAND3LUSDT": "SAND3L-USDT",
+ "SAND3SUSDT": "SAND3S-USDT",
+ "SANDUSDT": "SAND-USDT",
+ "SCLPBTC": "SCLP-BTC",
+ "SCLPUSDT": "SCLP-USDT",
+ "SDAOETH": "SDAO-ETH",
+ "SDAOUSDT": "SDAO-USDT",
+ "SDNETH": "SDN-ETH",
+ "SDNUSDT": "SDN-USDT",
+ "SENSOBTC": "SENSO-BTC",
+ "SENSOUSDT": "SENSO-USDT",
+ "SFPBTC": "SFP-BTC",
+ "SFPUSDT": "SFP-USDT",
+ "SFUNDUSDT": "SFUND-USDT",
+ "SHABTC": "SHA-BTC",
+ "SHAUSDT": "SHA-USDT",
+ "SHFTBTC": "SHFT-BTC",
+ "SHFTUSDT": "SHFT-USDT",
+ "SHIBDOGE": "SHIB-DOGE",
+ "SHIBUSDT": "SHIB-USDT",
+ "SHILLUSDT": "SHILL-USDT",
+ "SHRBTC": "SHR-BTC",
+ "SHRUSDT": "SHR-USDT",
+ "SKEYUSDT": "SKEY-USDT",
+ "SKLBTC": "SKL-BTC",
+ "SKLUSDT": "SKL-USDT",
+ "SKUBTC": "SKU-BTC",
+ "SKUUSDT": "SKU-USDT",
+ "SLIMUSDT": "SLIM-USDT",
+ "SLPUSDT": "SLP-USDT",
+ "SNTBTC": "SNT-BTC",
+ "SNTETH": "SNT-ETH",
+ "SNTVTBTC": "SNTVT-BTC",
+ "SNTVTETH": "SNTVT-ETH",
+ "SNXBTC": "SNX-BTC",
+ "SNXETH": "SNX-ETH",
+ "SNXUSDT": "SNX-USDT",
+ "SNXUST": "SNX-UST",
+ "SOL3LUSDT": "SOL3L-USDT",
+ "SOL3SUSDT": "SOL3S-USDT",
+ "SOLRUSDT": "SOLR-USDT",
+ "SOLUSDT": "SOL-USDT",
+ "SOLUST": "SOL-UST",
+ "SOLVEBTC": "SOLVE-BTC",
+ "SOLVEUSDT": "SOLVE-USDT",
+ "SOULBTC": "SOUL-BTC",
+ "SOULETH": "SOUL-ETH",
+ "SOULUSDT": "SOUL-USDT",
+ "SOVUSDT": "SOV-USDT",
+ "SPIUSDT": "SPI-USDT",
+ "SRKBTC": "SRK-BTC",
+ "SRKUSDT": "SRK-USDT",
+ "SRMBTC": "SRM-BTC",
+ "SRMUSDT": "SRM-USDT",
+ "STCBTC": "STC-BTC",
+ "STCUSDT": "STC-USDT",
+ "STMXUSDT": "STMX-USDT",
+ "STNDETH": "STND-ETH",
+ "STNDUSDT": "STND-USDT",
+ "STORJBTC": "STORJ-BTC",
+ "STORJETH": "STORJ-ETH",
+ "STORJUSDT": "STORJ-USDT",
+ "STRKBTC": "STRK-BTC",
+ "STRKETH": "STRK-ETH",
+ "STRONGUSDT": "STRONG-USDT",
+ "STXBTC": "STX-BTC",
+ "STXUSDT": "STX-USDT",
+ "SUKUBTC": "SUKU-BTC",
+ "SUKUUSDT": "SUKU-USDT",
+ "SUNUSDT": "SUN-USDT",
+ "SUPERBTC": "SUPER-BTC",
+ "SUPERUSDT": "SUPER-USDT",
+ "SUSDBTC": "SUSD-BTC",
+ "SUSDETH": "SUSD-ETH",
+ "SUSDUSDT": "SUSD-USDT",
+ "SUSHI3LUSDT": "SUSHI3L-USDT",
+ "SUSHI3SUSDT": "SUSHI3S-USDT",
+ "SUSHIUSDT": "SUSHI-USDT",
+ "SUTERBTC": "SUTER-BTC",
+ "SUTERUSDT": "SUTER-USDT",
+ "SWASHUSDT": "SWASH-USDT",
+ "SWINGBYBTC": "SWINGBY-BTC",
+ "SWINGBYUSDT": "SWINGBY-USDT",
+ "SWPUSDT": "SWP-USDT",
+ "SXPBTC": "SXP-BTC",
+ "SXPUSDT": "SXP-USDT",
+ "SYLOUSDT": "SYLO-USDT",
+ "TARAETH": "TARA-ETH",
+ "TARAUSDT": "TARA-USDT",
+ "TCPUSDT": "TCP-USDT",
+ "TELBTC": "TEL-BTC",
+ "TELETH": "TEL-ETH",
+ "TELUSDT": "TEL-USDT",
+ "THETAUSDT": "THETA-USDT",
+ "TIDALUSDT": "TIDAL-USDT",
+ "TIMEBTC": "TIME-BTC",
+ "TIMEETH": "TIME-ETH",
+ "TKOBTC": "TKO-BTC",
+ "TKOUSDT": "TKO-USDT",
+ "TKYBTC": "TKY-BTC",
+ "TKYETH": "TKY-ETH",
+ "TKYUSDT": "TKY-USDT",
+ "TLMBTC": "TLM-BTC",
+ "TLMETH": "TLM-ETH",
+ "TLMUSDT": "TLM-USDT",
+ "TLOSBTC": "TLOS-BTC",
+ "TLOSUSDT": "TLOS-USDT",
+ "TOKOBTC": "TOKO-BTC",
+ "TOKOKCS": "TOKO-KCS",
+ "TOKOUSDT": "TOKO-USDT",
+ "TOMOBTC": "TOMO-BTC",
+ "TOMOETH": "TOMO-ETH",
+ "TOMOUSDT": "TOMO-USDT",
+ "TONEBTC": "TONE-BTC",
+ "TONEETH": "TONE-ETH",
+ "TONEUSDT": "TONE-USDT",
+ "TOWERBTC": "TOWER-BTC",
+ "TOWERUSDT": "TOWER-USDT",
+ "TRACBTC": "TRAC-BTC",
+ "TRACETH": "TRAC-ETH",
+ "TRADEBTC": "TRADE-BTC",
+ "TRADEUSDT": "TRADE-USDT",
+ "TRBBTC": "TRB-BTC",
+ "TRBUSDT": "TRB-USDT",
+ "TRIASBTC": "TRIAS-BTC",
+ "TRIASUSDT": "TRIAS-USDT",
+ "TRIBEUSDT": "TRIBE-USDT",
+ "TRUBTC": "TRU-BTC",
+ "TRUUSDT": "TRU-USDT",
+ "TRVLUSDT": "TRVL-USDT",
+ "TRXBTC": "TRX-BTC",
+ "TRXETH": "TRX-ETH",
+ "TRXKCS": "TRX-KCS",
+ "TRXUSDT": "TRX-USDT",
+ "TVKBTC": "TVK-BTC",
+ "TVKUSDT": "TVK-USDT",
+ "TWTBTC": "TWT-BTC",
+ "TWTUSDT": "TWT-USDT",
+ "TXAUSDC": "TXA-USDC",
+ "TXAUSDT": "TXA-USDT",
+ "UBXETH": "UBX-ETH",
+ "UBXTUSDT": "UBXT-USDT",
+ "UBXUSDT": "UBX-USDT",
+ "UDOOETH": "UDOO-ETH",
+ "UFOUSDT": "UFO-USDT",
+ "UMAUSDT": "UMA-USDT",
+ "UMBUSDT": "UMB-USDT",
+ "UNBUSDT": "UNB-USDT",
+ "UNFIUSDT": "UNFI-USDT",
+ "UNI3LUSDT": "UNI3L-USDT",
+ "UNI3SUSDT": "UNI3S-USDT",
+ "UNICUSDT": "UNIC-USDT",
+ "UNIKCS": "UNI-KCS",
+ "UNIUSDT": "UNI-USDT",
+ "UNOBTC": "UNO-BTC",
+ "UNOUSDT": "UNO-USDT",
+ "UOSBTC": "UOS-BTC",
+ "UOSUSDT": "UOS-USDT",
+ "UQCBTC": "UQC-BTC",
+ "UQCETH": "UQC-ETH",
+ "USDCUSDT": "USDC-USDT",
+ "USDCUST": "USDC-UST",
+ "USDJUSDT": "USDJ-USDT",
+ "USDNUSDT": "USDN-USDT",
+ "USDTDAI": "USDT-DAI",
+ "USDTPAX": "USDT-PAX",
+ "USDTTUSD": "USDT-TUSD",
+ "USDTUSDC": "USDT-USDC",
+ "USDTUST": "USDT-UST",
+ "UTKBTC": "UTK-BTC",
+ "UTKETH": "UTK-ETH",
+ "VAIUSDT": "VAI-USDT",
+ "VEEDBTC": "VEED-BTC",
+ "VEEDUSDT": "VEED-USDT",
+ "VEGAETH": "VEGA-ETH",
+ "VEGAUSDT": "VEGA-USDT",
+ "VELOUSDT": "VELO-USDT",
+ "VET3LUSDT": "VET3L-USDT",
+ "VET3SUSDT": "VET3S-USDT",
+ "VETBTC": "VET-BTC",
+ "VETETH": "VET-ETH",
+ "VETKCS": "VET-KCS",
+ "VETUSDT": "VET-USDT",
+ "VIDBTC": "VID-BTC",
+ "VIDTBTC": "VIDT-BTC",
+ "VIDTUSDT": "VIDT-USDT",
+ "VIDUSDT": "VID-USDT",
+ "VLXBTC": "VLX-BTC",
+ "VLXUSDT": "VLX-USDT",
+ "VRABTC": "VRA-BTC",
+ "VRAUSDT": "VRA-USDT",
+ "VRUSDT": "VR-USDT",
+ "VSYSBTC": "VSYS-BTC",
+ "VSYSUSDT": "VSYS-USDT",
+ "VXVUSDT": "VXV-USDT",
+ "WANBTC": "WAN-BTC",
+ "WANETH": "WAN-ETH",
+ "WAVESBTC": "WAVES-BTC",
+ "WAVESUSDT": "WAVES-USDT",
+ "WAXBTC": "WAX-BTC",
+ "WAXETH": "WAX-ETH",
+ "WAXUSDT": "WAX-USDT",
+ "WBTCBTC": "WBTC-BTC",
+ "WBTCETH": "WBTC-ETH",
+ "WESTBTC": "WEST-BTC",
+ "WESTUSDT": "WEST-USDT",
+ "WILDUSDT": "WILD-USDT",
+ "WINBTC": "WIN-BTC",
+ "WINTRX": "WIN-TRX",
+ "WINUSDT": "WIN-USDT",
+ "WNCGBTC": "WNCG-BTC",
+ "WNCGUSDT": "WNCG-USDT",
+ "WNXMBTC": "WNXM-BTC",
+ "WNXMUSDT": "WNXM-USDT",
+ "WOMUSDT": "WOM-USDT",
+ "WOOUSDT": "WOO-USDT",
+ "WRXBTC": "WRX-BTC",
+ "WRXUSDT": "WRX-USDT",
+ "WSIENNAUSDT": "WSIENNA-USDT",
+ "WTCBTC": "WTC-BTC",
+ "WXTBTC": "WXT-BTC",
+ "WXTUSDT": "WXT-USDT",
+ "XAVAUSDT": "XAVA-USDT",
+ "XCADUSDT": "XCAD-USDT",
+ "XCHUSDT": "XCH-USDT",
+ "XCURBTC": "XCUR-BTC",
+ "XCURUSDT": "XCUR-USDT",
+ "XDBBTC": "XDB-BTC",
+ "XDBUSDT": "XDB-USDT",
+ "XDCBTC": "XDC-BTC",
+ "XDCETH": "XDC-ETH",
+ "XDCUSDT": "XDC-USDT",
+ "XECUSDT": "XEC-USDT",
+ "XEDBTC": "XED-BTC",
+ "XEDUSDT": "XED-USDT",
+ "XEMBTC": "XEM-BTC",
+ "XEMUSDT": "XEM-USDT",
+ "XHVBTC": "XHV-BTC",
+ "XHVUSDT": "XHV-USDT",
+ "XLMBTC": "XLM-BTC",
+ "XLMETH": "XLM-ETH",
+ "XLMKCS": "XLM-KCS",
+ "XLMUSDT": "XLM-USDT",
+ "XMRBTC": "XMR-BTC",
+ "XMRETH": "XMR-ETH",
+ "XMRUSDT": "XMR-USDT",
+ "XNLUSDT": "XNL-USDT",
+ "XPRBTC": "XPR-BTC",
+ "XPRTUSDT": "XPRT-USDT",
+ "XPRUSDT": "XPR-USDT",
+ "XRP3LUSDT": "XRP3L-USDT",
+ "XRP3SUSDT": "XRP3S-USDT",
+ "XRPBTC": "XRP-BTC",
+ "XRPETH": "XRP-ETH",
+ "XRPKCS": "XRP-KCS",
+ "XRPPAX": "XRP-PAX",
+ "XRPTUSD": "XRP-TUSD",
+ "XRPUSDC": "XRP-USDC",
+ "XRPUSDT": "XRP-USDT",
+ "XSRUSDT": "XSR-USDT",
+ "XTAGUSDT": "XTAG-USDT",
+ "XTMUSDT": "XTM-USDT",
+ "XTZBTC": "XTZ-BTC",
+ "XTZKCS": "XTZ-KCS",
+ "XTZUSDT": "XTZ-USDT",
+ "XVSBTC": "XVS-BTC",
+ "XVSUSDT": "XVS-USDT",
+ "XYMBTC": "XYM-BTC",
+ "XYMUSDT": "XYM-USDT",
+ "XYOBTC": "XYO-BTC",
+ "XYOETH": "XYO-ETH",
+ "XYOUSDT": "XYO-USDT",
+ "YFDAIBTC": "YFDAI-BTC",
+ "YFDAIUSDT": "YFDAI-USDT",
+ "YFIUSDT": "YFI-USDT",
+ "YFIUST": "YFI-UST",
+ "YGGUSDT": "YGG-USDT",
+ "YLDUSDT": "YLD-USDT",
+ "YOPETH": "YOP-ETH",
+ "YOPUSDT": "YOP-USDT",
+ "ZCXBTC": "ZCX-BTC",
+ "ZCXUSDT": "ZCX-USDT",
+ "ZECBTC": "ZEC-BTC",
+ "ZECKCS": "ZEC-KCS",
+ "ZECUSDT": "ZEC-USDT",
+ "ZEEUSDT": "ZEE-USDT",
+ "ZENUSDT": "ZEN-USDT",
+ "ZILBTC": "ZIL-BTC",
+ "ZILETH": "ZIL-ETH",
+ "ZILUSDT": "ZIL-USDT",
+ "ZKTUSDT": "ZKT-USDT",
+ "ZORTUSDT": "ZORT-USDT",
+ "ZRXBTC": "ZRX-BTC",
+ "ZRXETH": "ZRX-ETH",
}
func toLocalSymbol(symbol string) string {
diff --git a/pkg/exchange/max/exchange.go b/pkg/exchange/max/exchange.go
index 2972719ff..f7493975e 100644
--- a/pkg/exchange/max/exchange.go
+++ b/pkg/exchange/max/exchange.go
@@ -47,8 +47,9 @@ func New(key, secret string) *Exchange {
client := maxapi.NewRestClient(baseURL)
client.Auth(key, secret)
return &Exchange{
- client: client,
- key: key,
+ client: client,
+ key: key,
+ // pragma: allowlist nextline secret
secret: secret,
v3order: &v3.OrderService{Client: client},
v3margin: &v3.MarginService{Client: client},
diff --git a/pkg/exchange/max/maxapi/account_test.go b/pkg/exchange/max/maxapi/account_test.go
index f828eb1c4..e082586be 100644
--- a/pkg/exchange/max/maxapi/account_test.go
+++ b/pkg/exchange/max/maxapi/account_test.go
@@ -110,4 +110,3 @@ func TestAccountService_NewGetDepositHistoryRequest(t *testing.T) {
assert.NotEmpty(t, deposits)
t.Logf("deposits: %+v", deposits)
}
-
diff --git a/pkg/exchange/max/maxapi/order_test.go b/pkg/exchange/max/maxapi/order_test.go
index 778912916..0bfb887da 100644
--- a/pkg/exchange/max/maxapi/order_test.go
+++ b/pkg/exchange/max/maxapi/order_test.go
@@ -22,5 +22,3 @@ func integrationTestConfigured(t *testing.T, prefix string) (key, secret string,
}
return key, secret, ok
}
-
-
diff --git a/pkg/exchange/max/maxapi/restapi.go b/pkg/exchange/max/maxapi/restapi.go
index cd3f1743a..c9f1a0a3e 100644
--- a/pkg/exchange/max/maxapi/restapi.go
+++ b/pkg/exchange/max/maxapi/restapi.go
@@ -130,7 +130,9 @@ func NewRestClient(baseURL string) *RestClient {
// Auth sets api key and secret for usage is requests that requires authentication.
func (c *RestClient) Auth(key string, secret string) *RestClient {
+ // pragma: allowlist nextline secret
c.APIKey = key
+ // pragma: allowlist nextline secret
c.APISecret = secret
return c
}
diff --git a/pkg/exchange/max/maxapi/v3/margin.go b/pkg/exchange/max/maxapi/v3/margin.go
index 0b1e7995b..e69422a26 100644
--- a/pkg/exchange/max/maxapi/v3/margin.go
+++ b/pkg/exchange/max/maxapi/v3/margin.go
@@ -158,4 +158,3 @@ type MarginRepayRequest struct {
currency string `param:"currency,slug,required"`
amount string `param:"amount"`
}
-
diff --git a/pkg/exchange/max/maxapi/websocket.go b/pkg/exchange/max/maxapi/websocket.go
index c0af3c597..241adda6a 100644
--- a/pkg/exchange/max/maxapi/websocket.go
+++ b/pkg/exchange/max/maxapi/websocket.go
@@ -28,4 +28,3 @@ type WebsocketCommand struct {
Action string `json:"action"`
Subscriptions []Subscription `json:"subscriptions,omitempty"`
}
-
diff --git a/pkg/exchange/max/maxapi/withdrawal.go b/pkg/exchange/max/maxapi/withdrawal.go
index b5f30ee0e..7e3581539 100644
--- a/pkg/exchange/max/maxapi/withdrawal.go
+++ b/pkg/exchange/max/maxapi/withdrawal.go
@@ -56,8 +56,8 @@ type WithdrawalAddress struct {
//go:generate GetRequest -url "v2/withdraw_addresses" -type GetWithdrawalAddressesRequest -responseType []WithdrawalAddress
type GetWithdrawalAddressesRequest struct {
- client requestgen.AuthenticatedAPIClient
- currency string `param:"currency,required"`
+ client requestgen.AuthenticatedAPIClient
+ currency string `param:"currency,required"`
}
type WithdrawalService struct {
diff --git a/pkg/exchange/max/stream.go b/pkg/exchange/max/stream.go
index b5a96212f..8a80bc7ad 100644
--- a/pkg/exchange/max/stream.go
+++ b/pkg/exchange/max/stream.go
@@ -44,7 +44,8 @@ func NewStream(key, secret string) *Stream {
stream := &Stream{
StandardStream: types.NewStandardStream(),
key: key,
- secret: secret,
+ // pragma: allowlist nextline secret
+ secret: secret,
}
stream.SetEndpointCreator(stream.getEndpoint)
stream.SetParser(max.ParseMessage)
@@ -116,7 +117,9 @@ func (s *Stream) handleConnect() {
nonce := time.Now().UnixNano() / int64(time.Millisecond)
auth := &max.AuthMessage{
- Action: "auth",
+ // pragma: allowlist nextline secret
+ Action: "auth",
+ // pragma: allowlist nextline secret
APIKey: s.key,
Nonce: nonce,
Signature: signPayload(fmt.Sprintf("%d", nonce), s.secret),
diff --git a/pkg/exchange/max/ticker_test.go b/pkg/exchange/max/ticker_test.go
index 68defb2f6..6ef459e1a 100644
--- a/pkg/exchange/max/ticker_test.go
+++ b/pkg/exchange/max/ticker_test.go
@@ -31,7 +31,6 @@ func TestExchange_QueryTickers_SomeSymbols(t *testing.T) {
return
}
-
e := New(key, secret)
got, err := e.QueryTickers(context.Background(), "BTCUSDT", "ETHUSDT")
if assert.NoError(t, err) {
diff --git a/pkg/exchange/okex/exchange.go b/pkg/exchange/okex/exchange.go
index b11ccf504..ab8dcddd2 100644
--- a/pkg/exchange/okex/exchange.go
+++ b/pkg/exchange/okex/exchange.go
@@ -38,7 +38,8 @@ func New(key, secret, passphrase string) *Exchange {
}
return &Exchange{
- key: key,
+ key: key,
+ // pragma: allowlist nextline secret
secret: secret,
passphrase: passphrase,
client: client,
@@ -275,7 +276,7 @@ func (e *Exchange) NewStream() types.Stream {
}
func (e *Exchange) QueryKLines(ctx context.Context, symbol string, interval types.Interval, options types.KLineQueryOptions) ([]types.KLine, error) {
- if err := marketDataLimiter.Wait(ctx) ; err != nil {
+ if err := marketDataLimiter.Wait(ctx); err != nil {
return nil, err
}
diff --git a/pkg/exchange/okex/gensymbols.go b/pkg/exchange/okex/gensymbols.go
index 4838f8f59..be27065e1 100644
--- a/pkg/exchange/okex/gensymbols.go
+++ b/pkg/exchange/okex/gensymbols.go
@@ -1,3 +1,4 @@
+//go:build ignore
// +build ignore
package main
diff --git a/pkg/exchange/okex/okexapi/client.go b/pkg/exchange/okex/okexapi/client.go
index 5f23a0094..626e84160 100644
--- a/pkg/exchange/okex/okexapi/client.go
+++ b/pkg/exchange/okex/okexapi/client.go
@@ -91,6 +91,7 @@ func NewClient() *RestClient {
func (c *RestClient) Auth(key, secret, passphrase string) {
c.Key = key
+ // pragma: allowlist nextline secret
c.Secret = secret
c.Passphrase = passphrase
}
diff --git a/pkg/exchange/okex/stream.go b/pkg/exchange/okex/stream.go
index d803a6d30..348f48654 100644
--- a/pkg/exchange/okex/stream.go
+++ b/pkg/exchange/okex/stream.go
@@ -28,9 +28,9 @@ type Stream struct {
client *okexapi.RestClient
// public callbacks
- candleEventCallbacks []func(candle Candle)
- bookEventCallbacks []func(book BookEvent)
- eventCallbacks []func(event WebSocketEvent)
+ candleEventCallbacks []func(candle Candle)
+ bookEventCallbacks []func(book BookEvent)
+ eventCallbacks []func(event WebSocketEvent)
accountEventCallbacks []func(account okexapi.Account)
orderDetailsEventCallbacks []func(orderDetails []okexapi.OrderDetails)
diff --git a/pkg/exchange/okex/symbols.go b/pkg/exchange/okex/symbols.go
index b8f0bce3d..dfbff1156 100644
--- a/pkg/exchange/okex/symbols.go
+++ b/pkg/exchange/okex/symbols.go
@@ -2,516 +2,515 @@
package okex
var spotSymbolMap = map[string]string{
- "1INCHETH": "1INCH-ETH",
- "1INCHUSDT": "1INCH-USDT",
- "AACUSDT": "AAC-USDT",
- "AAVEBTC": "AAVE-BTC",
- "AAVEETH": "AAVE-ETH",
- "AAVEUSDT": "AAVE-USDT",
- "ABTBTC": "ABT-BTC",
- "ABTETH": "ABT-ETH",
- "ABTUSDT": "ABT-USDT",
- "ACTBTC": "ACT-BTC",
- "ACTUSDT": "ACT-USDT",
- "ADABTC": "ADA-BTC",
- "ADAETH": "ADA-ETH",
- "ADAUSDT": "ADA-USDT",
- "AEBTC": "AE-BTC",
- "AEETH": "AE-ETH",
- "AERGOBTC": "AERGO-BTC",
- "AERGOUSDT": "AERGO-USDT",
- "AEUSDT": "AE-USDT",
- "AKITAUSDT": "AKITA-USDT",
- "ALGOBTC": "ALGO-BTC",
- "ALGOUSDK": "ALGO-USDK",
- "ALGOUSDT": "ALGO-USDT",
- "ALPHABTC": "ALPHA-BTC",
- "ALPHAUSDT": "ALPHA-USDT",
- "ALVUSDT": "ALV-USDT",
- "ANCUSDT": "ANC-USDT",
- "ANTBTC": "ANT-BTC",
- "ANTUSDT": "ANT-USDT",
- "ANWUSDT": "ANW-USDT",
- "API3ETH": "API3-ETH",
- "API3USDT": "API3-USDT",
- "APIXUSDT": "APIX-USDT",
- "APMUSDT": "APM-USDT",
- "ARDRBTC": "ARDR-BTC",
- "ARKBTC": "ARK-BTC",
- "ARKUSDT": "ARK-USDT",
- "ASTUSDT": "AST-USDT",
- "ATOMBTC": "ATOM-BTC",
- "ATOMETH": "ATOM-ETH",
- "ATOMUSDT": "ATOM-USDT",
+ "1INCHETH": "1INCH-ETH",
+ "1INCHUSDT": "1INCH-USDT",
+ "AACUSDT": "AAC-USDT",
+ "AAVEBTC": "AAVE-BTC",
+ "AAVEETH": "AAVE-ETH",
+ "AAVEUSDT": "AAVE-USDT",
+ "ABTBTC": "ABT-BTC",
+ "ABTETH": "ABT-ETH",
+ "ABTUSDT": "ABT-USDT",
+ "ACTBTC": "ACT-BTC",
+ "ACTUSDT": "ACT-USDT",
+ "ADABTC": "ADA-BTC",
+ "ADAETH": "ADA-ETH",
+ "ADAUSDT": "ADA-USDT",
+ "AEBTC": "AE-BTC",
+ "AEETH": "AE-ETH",
+ "AERGOBTC": "AERGO-BTC",
+ "AERGOUSDT": "AERGO-USDT",
+ "AEUSDT": "AE-USDT",
+ "AKITAUSDT": "AKITA-USDT",
+ "ALGOBTC": "ALGO-BTC",
+ "ALGOUSDK": "ALGO-USDK",
+ "ALGOUSDT": "ALGO-USDT",
+ "ALPHABTC": "ALPHA-BTC",
+ "ALPHAUSDT": "ALPHA-USDT",
+ "ALVUSDT": "ALV-USDT",
+ "ANCUSDT": "ANC-USDT",
+ "ANTBTC": "ANT-BTC",
+ "ANTUSDT": "ANT-USDT",
+ "ANWUSDT": "ANW-USDT",
+ "API3ETH": "API3-ETH",
+ "API3USDT": "API3-USDT",
+ "APIXUSDT": "APIX-USDT",
+ "APMUSDT": "APM-USDT",
+ "ARDRBTC": "ARDR-BTC",
+ "ARKBTC": "ARK-BTC",
+ "ARKUSDT": "ARK-USDT",
+ "ASTUSDT": "AST-USDT",
+ "ATOMBTC": "ATOM-BTC",
+ "ATOMETH": "ATOM-ETH",
+ "ATOMUSDT": "ATOM-USDT",
"AUCTIONUSDT": "AUCTION-USDT",
- "AVAXBTC": "AVAX-BTC",
- "AVAXETH": "AVAX-ETH",
- "AVAXUSDT": "AVAX-USDT",
- "BADGERBTC": "BADGER-BTC",
- "BADGERUSDT": "BADGER-USDT",
- "BALBTC": "BAL-BTC",
- "BALUSDT": "BAL-USDT",
- "BANDUSDT": "BAND-USDT",
- "BATBTC": "BAT-BTC",
- "BATUSDT": "BAT-USDT",
- "BCDBTC": "BCD-BTC",
- "BCDUSDT": "BCD-USDT",
- "BCHABTC": "BCHA-BTC",
- "BCHAUSDT": "BCHA-USDT",
- "BCHBTC": "BCH-BTC",
- "BCHUSDC": "BCH-USDC",
- "BCHUSDK": "BCH-USDK",
- "BCHUSDT": "BCH-USDT",
- "BCXBTC": "BCX-BTC",
- "BETHETH": "BETH-ETH",
- "BETHUSDT": "BETH-USDT",
- "BHPBTC": "BHP-BTC",
- "BHPUSDT": "BHP-USDT",
- "BLOCUSDT": "BLOC-USDT",
- "BNTBTC": "BNT-BTC",
- "BNTUSDT": "BNT-USDT",
- "BOXUSDT": "BOX-USDT",
- "BSVBTC": "BSV-BTC",
- "BSVUSDC": "BSV-USDC",
- "BSVUSDK": "BSV-USDK",
- "BSVUSDT": "BSV-USDT",
- "BTCDAI": "BTC-DAI",
- "BTCUSDC": "BTC-USDC",
- "BTCUSDK": "BTC-USDK",
- "BTCUSDT": "BTC-USDT",
- "BTGBTC": "BTG-BTC",
- "BTGUSDT": "BTG-USDT",
- "BTMBTC": "BTM-BTC",
- "BTMETH": "BTM-ETH",
- "BTMUSDT": "BTM-USDT",
- "BTTBTC": "BTT-BTC",
- "BTTUSDT": "BTT-USDT",
- "CELOBTC": "CELO-BTC",
- "CELOUSDT": "CELO-USDT",
- "CELRUSDT": "CELR-USDT",
- "CELUSDT": "CEL-USDT",
- "CFXBTC": "CFX-BTC",
- "CFXUSDT": "CFX-USDT",
- "CHATUSDT": "CHAT-USDT",
- "CHZBTC": "CHZ-BTC",
- "CHZUSDT": "CHZ-USDT",
- "CMTBTC": "CMT-BTC",
- "CMTETH": "CMT-ETH",
- "CMTUSDT": "CMT-USDT",
- "CNTMUSDT": "CNTM-USDT",
- "COMPBTC": "COMP-BTC",
- "COMPUSDT": "COMP-USDT",
- "CONVUSDT": "CONV-USDT",
- "COVERUSDT": "COVER-USDT",
- "CROBTC": "CRO-BTC",
- "CROUSDK": "CRO-USDK",
- "CROUSDT": "CRO-USDT",
- "CRVBTC": "CRV-BTC",
- "CRVETH": "CRV-ETH",
- "CRVUSDT": "CRV-USDT",
- "CSPRUSDT": "CSPR-USDT",
- "CTCBTC": "CTC-BTC",
- "CTCUSDT": "CTC-USDT",
- "CTXCBTC": "CTXC-BTC",
- "CTXCETH": "CTXC-ETH",
- "CTXCUSDT": "CTXC-USDT",
- "CVCBTC": "CVC-BTC",
- "CVCUSDT": "CVC-USDT",
- "CVPUSDT": "CVP-USDT",
- "CVTBTC": "CVT-BTC",
- "CVTUSDT": "CVT-USDT",
- "DAIUSDT": "DAI-USDT",
- "DAOUSDT": "DAO-USDT",
- "DASHBTC": "DASH-BTC",
- "DASHETH": "DASH-ETH",
- "DASHUSDT": "DASH-USDT",
- "DCRBTC": "DCR-BTC",
- "DCRUSDT": "DCR-USDT",
- "DEPUSDK": "DEP-USDK",
- "DEPUSDT": "DEP-USDT",
- "DGBBTC": "DGB-BTC",
- "DGBUSDT": "DGB-USDT",
- "DHTETH": "DHT-ETH",
- "DHTUSDT": "DHT-USDT",
- "DIAETH": "DIA-ETH",
- "DIAUSDT": "DIA-USDT",
- "DMDUSDT": "DMD-USDT",
- "DMGUSDT": "DMG-USDT",
- "DNABTC": "DNA-BTC",
- "DNAUSDT": "DNA-USDT",
- "DOGEBTC": "DOGE-BTC",
- "DOGEETH": "DOGE-ETH",
- "DOGEUSDK": "DOGE-USDK",
- "DOGEUSDT": "DOGE-USDT",
- "DORAUSDT": "DORA-USDT",
- "DOTBTC": "DOT-BTC",
- "DOTETH": "DOT-ETH",
- "DOTUSDT": "DOT-USDT",
- "ECUSDK": "EC-USDK",
- "ECUSDT": "EC-USDT",
- "EGLDBTC": "EGLD-BTC",
- "EGLDUSDT": "EGLD-USDT",
- "EGTBTC": "EGT-BTC",
- "EGTETH": "EGT-ETH",
- "EGTUSDT": "EGT-USDT",
- "ELFBTC": "ELF-BTC",
- "ELFUSDT": "ELF-USDT",
- "EMUSDK": "EM-USDK",
- "EMUSDT": "EM-USDT",
- "ENJBTC": "ENJ-BTC",
- "ENJUSDT": "ENJ-USDT",
- "EOSBTC": "EOS-BTC",
- "EOSETH": "EOS-ETH",
- "EOSUSDC": "EOS-USDC",
- "EOSUSDK": "EOS-USDK",
- "EOSUSDT": "EOS-USDT",
- "ETCBTC": "ETC-BTC",
- "ETCETH": "ETC-ETH",
- "ETCOKB": "ETC-OKB",
- "ETCUSDC": "ETC-USDC",
- "ETCUSDK": "ETC-USDK",
- "ETCUSDT": "ETC-USDT",
- "ETHBTC": "ETH-BTC",
- "ETHDAI": "ETH-DAI",
- "ETHUSDC": "ETH-USDC",
- "ETHUSDK": "ETH-USDK",
- "ETHUSDT": "ETH-USDT",
- "ETMUSDT": "ETM-USDT",
- "EXEUSDT": "EXE-USDT",
- "FAIRUSDT": "FAIR-USDT",
- "FILBTC": "FIL-BTC",
- "FILETH": "FIL-ETH",
- "FILUSDT": "FIL-USDT",
- "FLMUSDT": "FLM-USDT",
- "FLOWBTC": "FLOW-BTC",
- "FLOWETH": "FLOW-ETH",
- "FLOWUSDT": "FLOW-USDT",
- "FORTHBTC": "FORTH-BTC",
- "FORTHUSDT": "FORTH-USDT",
- "FRONTETH": "FRONT-ETH",
- "FRONTUSDT": "FRONT-USDT",
- "FSNUSDK": "FSN-USDK",
- "FSNUSDT": "FSN-USDT",
- "FTMUSDK": "FTM-USDK",
- "FTMUSDT": "FTM-USDT",
- "FUNBTC": "FUN-BTC",
- "GALUSDT": "GAL-USDT",
- "GASBTC": "GAS-BTC",
- "GASETH": "GAS-ETH",
- "GASUSDT": "GAS-USDT",
- "GHSTETH": "GHST-ETH",
- "GHSTUSDT": "GHST-USDT",
- "GLMBTC": "GLM-BTC",
- "GLMUSDT": "GLM-USDT",
- "GNXBTC": "GNX-BTC",
- "GRTBTC": "GRT-BTC",
- "GRTUSDT": "GRT-USDT",
- "GTOBTC": "GTO-BTC",
- "GTOUSDT": "GTO-USDT",
- "GUSDBTC": "GUSD-BTC",
- "GUSDUSDT": "GUSD-USDT",
- "HBARBTC": "HBAR-BTC",
- "HBARUSDK": "HBAR-USDK",
- "HBARUSDT": "HBAR-USDT",
- "HCBTC": "HC-BTC",
- "HCUSDT": "HC-USDT",
- "HDAOUSDK": "HDAO-USDK",
- "HDAOUSDT": "HDAO-USDT",
- "HEGICETH": "HEGIC-ETH",
- "HEGICUSDT": "HEGIC-USDT",
- "ICPBTC": "ICP-BTC",
- "ICPUSDT": "ICP-USDT",
- "ICXBTC": "ICX-BTC",
- "ICXUSDT": "ICX-USDT",
- "INTBTC": "INT-BTC",
- "INTETH": "INT-ETH",
- "INTUSDT": "INT-USDT",
- "INXUSDT": "INX-USDT",
- "IOSTBTC": "IOST-BTC",
- "IOSTETH": "IOST-ETH",
- "IOSTUSDT": "IOST-USDT",
- "IOTABTC": "IOTA-BTC",
- "IOTAUSDT": "IOTA-USDT",
- "IQUSDT": "IQ-USDT",
- "ITCUSDT": "ITC-USDT",
- "JFIUSDT": "JFI-USDT",
- "JSTUSDT": "JST-USDT",
- "KANETH": "KAN-ETH",
- "KANUSDT": "KAN-USDT",
- "KCASHBTC": "KCASH-BTC",
- "KCASHETH": "KCASH-ETH",
- "KCASHUSDT": "KCASH-USDT",
- "KINEUSDT": "KINE-USDT",
- "KISHUUSDT": "KISHU-USDT",
- "KLAYBTC": "KLAY-BTC",
- "KLAYUSDT": "KLAY-USDT",
- "KNCBTC": "KNC-BTC",
- "KNCUSDT": "KNC-USDT",
- "KONOUSDT": "KONO-USDT",
- "KP3RUSDT": "KP3R-USDT",
- "KSMBTC": "KSM-BTC",
- "KSMETH": "KSM-ETH",
- "KSMUSDT": "KSM-USDT",
- "LAMBUSDK": "LAMB-USDK",
- "LAMBUSDT": "LAMB-USDT",
- "LATUSDT": "LAT-USDT",
- "LBAUSDT": "LBA-USDT",
- "LEOUSDK": "LEO-USDK",
- "LEOUSDT": "LEO-USDT",
- "LETUSDT": "LET-USDT",
- "LINKBTC": "LINK-BTC",
- "LINKETH": "LINK-ETH",
- "LINKUSDT": "LINK-USDT",
- "LMCHUSDT": "LMCH-USDT",
- "LONETH": "LON-ETH",
- "LONUSDT": "LON-USDT",
- "LOONBTC": "LOON-BTC",
- "LOONUSDT": "LOON-USDT",
- "LPTUSDT": "LPT-USDT",
- "LRCBTC": "LRC-BTC",
- "LRCUSDT": "LRC-USDT",
- "LSKBTC": "LSK-BTC",
- "LSKUSDT": "LSK-USDT",
- "LTCBTC": "LTC-BTC",
- "LTCETH": "LTC-ETH",
- "LTCOKB": "LTC-OKB",
- "LTCUSDC": "LTC-USDC",
- "LTCUSDK": "LTC-USDK",
- "LTCUSDT": "LTC-USDT",
- "LUNABTC": "LUNA-BTC",
- "LUNAUSDT": "LUNA-USDT",
- "MANABTC": "MANA-BTC",
- "MANAETH": "MANA-ETH",
- "MANAUSDT": "MANA-USDT",
- "MASKUSDT": "MASK-USDT",
- "MATICUSDT": "MATIC-USDT",
- "MCOBTC": "MCO-BTC",
- "MCOETH": "MCO-ETH",
- "MCOUSDT": "MCO-USDT",
- "MDAUSDT": "MDA-USDT",
- "MDTUSDT": "MDT-USDT",
- "MEMEUSDT": "MEME-USDT",
- "MIRUSDT": "MIR-USDT",
- "MITHBTC": "MITH-BTC",
- "MITHETH": "MITH-ETH",
- "MITHUSDT": "MITH-USDT",
- "MKRBTC": "MKR-BTC",
- "MKRETH": "MKR-ETH",
- "MKRUSDT": "MKR-USDT",
- "MLNUSDT": "MLN-USDT",
- "MOFBTC": "MOF-BTC",
- "MOFUSDT": "MOF-USDT",
- "MXCUSDT": "MXC-USDT",
- "MXTUSDT": "MXT-USDT",
- "NANOBTC": "NANO-BTC",
- "NANOUSDT": "NANO-USDT",
- "NASBTC": "NAS-BTC",
- "NASUSDT": "NAS-USDT",
- "NDNUSDK": "NDN-USDK",
- "NDNUSDT": "NDN-USDT",
- "NEARBTC": "NEAR-BTC",
- "NEARETH": "NEAR-ETH",
- "NEARUSDT": "NEAR-USDT",
- "NEOBTC": "NEO-BTC",
- "NEOETH": "NEO-ETH",
- "NEOUSDT": "NEO-USDT",
- "NMRUSDT": "NMR-USDT",
- "NUBTC": "NU-BTC",
- "NULSBTC": "NULS-BTC",
- "NULSETH": "NULS-ETH",
- "NULSUSDT": "NULS-USDT",
- "NUUSDT": "NU-USDT",
- "OKBBTC": "OKB-BTC",
- "OKBETH": "OKB-ETH",
- "OKBUSDC": "OKB-USDC",
- "OKBUSDK": "OKB-USDK",
- "OKBUSDT": "OKB-USDT",
- "OKTBTC": "OKT-BTC",
- "OKTETH": "OKT-ETH",
- "OKTUSDT": "OKT-USDT",
- "OMETH": "OM-ETH",
- "OMGBTC": "OMG-BTC",
- "OMGUSDT": "OMG-USDT",
- "OMUSDT": "OM-USDT",
- "ONTBTC": "ONT-BTC",
- "ONTETH": "ONT-ETH",
- "ONTUSDT": "ONT-USDT",
- "ORBSUSDK": "ORBS-USDK",
- "ORBSUSDT": "ORBS-USDT",
- "ORSUSDT": "ORS-USDT",
- "OXTUSDT": "OXT-USDT",
- "PAXBTC": "PAX-BTC",
- "PAXUSDT": "PAX-USDT",
- "PAYBTC": "PAY-BTC",
- "PAYUSDT": "PAY-USDT",
- "PERPUSDT": "PERP-USDT",
- "PHAETH": "PHA-ETH",
- "PHAUSDT": "PHA-USDT",
- "PICKLEUSDT": "PICKLE-USDT",
- "PLGUSDK": "PLG-USDK",
- "PLGUSDT": "PLG-USDT",
- "PMABTC": "PMA-BTC",
- "PMAUSDK": "PMA-USDK",
- "PNKUSDT": "PNK-USDT",
- "POLSETH": "POLS-ETH",
- "POLSUSDT": "POLS-USDT",
- "PPTUSDT": "PPT-USDT",
- "PROPSETH": "PROPS-ETH",
- "PROPSUSDT": "PROPS-USDT",
- "PRQUSDT": "PRQ-USDT",
- "PSTBTC": "PST-BTC",
- "PSTUSDT": "PST-USDT",
- "QTUMBTC": "QTUM-BTC",
- "QTUMETH": "QTUM-ETH",
- "QTUMUSDT": "QTUM-USDT",
- "QUNBTC": "QUN-BTC",
- "QUNUSDT": "QUN-USDT",
- "RENBTC": "REN-BTC",
- "RENUSDT": "REN-USDT",
- "REPETH": "REP-ETH",
- "REPUSDT": "REP-USDT",
- "RFUELETH": "RFUEL-ETH",
- "RFUELUSDT": "RFUEL-USDT",
- "RIOUSDT": "RIO-USDT",
- "RNTUSDT": "RNT-USDT",
- "ROADUSDK": "ROAD-USDK",
- "ROADUSDT": "ROAD-USDT",
- "RSRBTC": "RSR-BTC",
- "RSRETH": "RSR-ETH",
- "RSRUSDT": "RSR-USDT",
- "RVNBTC": "RVN-BTC",
- "RVNUSDT": "RVN-USDT",
- "SANDUSDT": "SAND-USDT",
- "SBTCBTC": "SBTC-BTC",
- "SCBTC": "SC-BTC",
- "SCUSDT": "SC-USDT",
- "SFGUSDT": "SFG-USDT",
- "SHIBUSDT": "SHIB-USDT",
- "SKLUSDT": "SKL-USDT",
- "SNCBTC": "SNC-BTC",
- "SNTBTC": "SNT-BTC",
- "SNTUSDT": "SNT-USDT",
- "SNXETH": "SNX-ETH",
- "SNXUSDT": "SNX-USDT",
- "SOCUSDT": "SOC-USDT",
- "SOLBTC": "SOL-BTC",
- "SOLETH": "SOL-ETH",
- "SOLUSDT": "SOL-USDT",
- "SRMBTC": "SRM-BTC",
- "SRMUSDT": "SRM-USDT",
- "STORJUSDT": "STORJ-USDT",
- "STRKUSDT": "STRK-USDT",
- "STXBTC": "STX-BTC",
- "STXUSDT": "STX-USDT",
- "SUNETH": "SUN-ETH",
- "SUNUSDT": "SUN-USDT",
- "SUSHIETH": "SUSHI-ETH",
- "SUSHIUSDT": "SUSHI-USDT",
- "SWFTCBTC": "SWFTC-BTC",
- "SWFTCETH": "SWFTC-ETH",
- "SWFTCUSDT": "SWFTC-USDT",
- "SWRVUSDT": "SWRV-USDT",
- "TAIUSDT": "TAI-USDT",
- "TCTBTC": "TCT-BTC",
- "TCTUSDT": "TCT-USDT",
- "THETABTC": "THETA-BTC",
- "THETAUSDT": "THETA-USDT",
- "TMTGBTC": "TMTG-BTC",
- "TMTGUSDT": "TMTG-USDT",
- "TOPCUSDT": "TOPC-USDT",
- "TORNETH": "TORN-ETH",
- "TORNUSDT": "TORN-USDT",
- "TRADEETH": "TRADE-ETH",
- "TRADEUSDT": "TRADE-USDT",
- "TRAUSDT": "TRA-USDT",
- "TRBUSDT": "TRB-USDT",
- "TRIOBTC": "TRIO-BTC",
- "TRIOUSDT": "TRIO-USDT",
- "TRUEBTC": "TRUE-BTC",
- "TRUEUSDT": "TRUE-USDT",
- "TRXBTC": "TRX-BTC",
- "TRXETH": "TRX-ETH",
- "TRXUSDC": "TRX-USDC",
- "TRXUSDK": "TRX-USDK",
- "TRXUSDT": "TRX-USDT",
- "TUSDBTC": "TUSD-BTC",
- "TUSDUSDT": "TUSD-USDT",
- "UBTCUSDT": "UBTC-USDT",
- "UMAUSDT": "UMA-USDT",
- "UNIBTC": "UNI-BTC",
- "UNIETH": "UNI-ETH",
- "UNIUSDT": "UNI-USDT",
- "USDCBTC": "USDC-BTC",
- "USDCUSDT": "USDC-USDT",
- "USDTUSDK": "USDT-USDK",
- "UTKUSDT": "UTK-USDT",
- "VALUEETH": "VALUE-ETH",
- "VALUEUSDT": "VALUE-USDT",
- "VELOUSDT": "VELO-USDT",
- "VIBBTC": "VIB-BTC",
- "VIBUSDT": "VIB-USDT",
- "VITEBTC": "VITE-BTC",
- "VRAUSDT": "VRA-USDT",
- "VSYSBTC": "VSYS-BTC",
- "VSYSUSDK": "VSYS-USDK",
- "VSYSUSDT": "VSYS-USDT",
- "WAVESBTC": "WAVES-BTC",
- "WAVESUSDT": "WAVES-USDT",
- "WBTCBTC": "WBTC-BTC",
- "WBTCETH": "WBTC-ETH",
- "WBTCUSDT": "WBTC-USDT",
- "WGRTUSDK": "WGRT-USDK",
- "WGRTUSDT": "WGRT-USDT",
- "WINGUSDT": "WING-USDT",
- "WNXMUSDT": "WNXM-USDT",
- "WTCBTC": "WTC-BTC",
- "WTCUSDT": "WTC-USDT",
- "WXTBTC": "WXT-BTC",
- "WXTUSDK": "WXT-USDK",
- "WXTUSDT": "WXT-USDT",
- "XCHBTC": "XCH-BTC",
- "XCHUSDT": "XCH-USDT",
- "XEMBTC": "XEM-BTC",
- "XEMETH": "XEM-ETH",
- "XEMUSDT": "XEM-USDT",
- "XLMBTC": "XLM-BTC",
- "XLMETH": "XLM-ETH",
- "XLMUSDT": "XLM-USDT",
- "XMRBTC": "XMR-BTC",
- "XMRETH": "XMR-ETH",
- "XMRUSDT": "XMR-USDT",
- "XPOUSDT": "XPO-USDT",
- "XPRUSDT": "XPR-USDT",
- "XRPBTC": "XRP-BTC",
- "XRPETH": "XRP-ETH",
- "XRPOKB": "XRP-OKB",
- "XRPUSDC": "XRP-USDC",
- "XRPUSDK": "XRP-USDK",
- "XRPUSDT": "XRP-USDT",
- "XSRUSDT": "XSR-USDT",
- "XTZBTC": "XTZ-BTC",
- "XTZUSDT": "XTZ-USDT",
- "XUCUSDT": "XUC-USDT",
- "YEEUSDT": "YEE-USDT",
- "YFIBTC": "YFI-BTC",
- "YFIETH": "YFI-ETH",
- "YFIIUSDT": "YFII-USDT",
- "YFIUSDT": "YFI-USDT",
- "YOUBTC": "YOU-BTC",
- "YOUUSDT": "YOU-USDT",
- "YOYOUSDT": "YOYO-USDT",
- "ZECBTC": "ZEC-BTC",
- "ZECETH": "ZEC-ETH",
- "ZECUSDT": "ZEC-USDT",
- "ZENBTC": "ZEN-BTC",
- "ZENUSDT": "ZEN-USDT",
- "ZILBTC": "ZIL-BTC",
- "ZILETH": "ZIL-ETH",
- "ZILUSDT": "ZIL-USDT",
- "ZKSUSDT": "ZKS-USDT",
- "ZRXBTC": "ZRX-BTC",
- "ZRXETH": "ZRX-ETH",
- "ZRXUSDT": "ZRX-USDT",
- "ZYROUSDT": "ZYRO-USDT",
+ "AVAXBTC": "AVAX-BTC",
+ "AVAXETH": "AVAX-ETH",
+ "AVAXUSDT": "AVAX-USDT",
+ "BADGERBTC": "BADGER-BTC",
+ "BADGERUSDT": "BADGER-USDT",
+ "BALBTC": "BAL-BTC",
+ "BALUSDT": "BAL-USDT",
+ "BANDUSDT": "BAND-USDT",
+ "BATBTC": "BAT-BTC",
+ "BATUSDT": "BAT-USDT",
+ "BCDBTC": "BCD-BTC",
+ "BCDUSDT": "BCD-USDT",
+ "BCHABTC": "BCHA-BTC",
+ "BCHAUSDT": "BCHA-USDT",
+ "BCHBTC": "BCH-BTC",
+ "BCHUSDC": "BCH-USDC",
+ "BCHUSDK": "BCH-USDK",
+ "BCHUSDT": "BCH-USDT",
+ "BCXBTC": "BCX-BTC",
+ "BETHETH": "BETH-ETH",
+ "BETHUSDT": "BETH-USDT",
+ "BHPBTC": "BHP-BTC",
+ "BHPUSDT": "BHP-USDT",
+ "BLOCUSDT": "BLOC-USDT",
+ "BNTBTC": "BNT-BTC",
+ "BNTUSDT": "BNT-USDT",
+ "BOXUSDT": "BOX-USDT",
+ "BSVBTC": "BSV-BTC",
+ "BSVUSDC": "BSV-USDC",
+ "BSVUSDK": "BSV-USDK",
+ "BSVUSDT": "BSV-USDT",
+ "BTCDAI": "BTC-DAI",
+ "BTCUSDC": "BTC-USDC",
+ "BTCUSDK": "BTC-USDK",
+ "BTCUSDT": "BTC-USDT",
+ "BTGBTC": "BTG-BTC",
+ "BTGUSDT": "BTG-USDT",
+ "BTMBTC": "BTM-BTC",
+ "BTMETH": "BTM-ETH",
+ "BTMUSDT": "BTM-USDT",
+ "BTTBTC": "BTT-BTC",
+ "BTTUSDT": "BTT-USDT",
+ "CELOBTC": "CELO-BTC",
+ "CELOUSDT": "CELO-USDT",
+ "CELRUSDT": "CELR-USDT",
+ "CELUSDT": "CEL-USDT",
+ "CFXBTC": "CFX-BTC",
+ "CFXUSDT": "CFX-USDT",
+ "CHATUSDT": "CHAT-USDT",
+ "CHZBTC": "CHZ-BTC",
+ "CHZUSDT": "CHZ-USDT",
+ "CMTBTC": "CMT-BTC",
+ "CMTETH": "CMT-ETH",
+ "CMTUSDT": "CMT-USDT",
+ "CNTMUSDT": "CNTM-USDT",
+ "COMPBTC": "COMP-BTC",
+ "COMPUSDT": "COMP-USDT",
+ "CONVUSDT": "CONV-USDT",
+ "COVERUSDT": "COVER-USDT",
+ "CROBTC": "CRO-BTC",
+ "CROUSDK": "CRO-USDK",
+ "CROUSDT": "CRO-USDT",
+ "CRVBTC": "CRV-BTC",
+ "CRVETH": "CRV-ETH",
+ "CRVUSDT": "CRV-USDT",
+ "CSPRUSDT": "CSPR-USDT",
+ "CTCBTC": "CTC-BTC",
+ "CTCUSDT": "CTC-USDT",
+ "CTXCBTC": "CTXC-BTC",
+ "CTXCETH": "CTXC-ETH",
+ "CTXCUSDT": "CTXC-USDT",
+ "CVCBTC": "CVC-BTC",
+ "CVCUSDT": "CVC-USDT",
+ "CVPUSDT": "CVP-USDT",
+ "CVTBTC": "CVT-BTC",
+ "CVTUSDT": "CVT-USDT",
+ "DAIUSDT": "DAI-USDT",
+ "DAOUSDT": "DAO-USDT",
+ "DASHBTC": "DASH-BTC",
+ "DASHETH": "DASH-ETH",
+ "DASHUSDT": "DASH-USDT",
+ "DCRBTC": "DCR-BTC",
+ "DCRUSDT": "DCR-USDT",
+ "DEPUSDK": "DEP-USDK",
+ "DEPUSDT": "DEP-USDT",
+ "DGBBTC": "DGB-BTC",
+ "DGBUSDT": "DGB-USDT",
+ "DHTETH": "DHT-ETH",
+ "DHTUSDT": "DHT-USDT",
+ "DIAETH": "DIA-ETH",
+ "DIAUSDT": "DIA-USDT",
+ "DMDUSDT": "DMD-USDT",
+ "DMGUSDT": "DMG-USDT",
+ "DNABTC": "DNA-BTC",
+ "DNAUSDT": "DNA-USDT",
+ "DOGEBTC": "DOGE-BTC",
+ "DOGEETH": "DOGE-ETH",
+ "DOGEUSDK": "DOGE-USDK",
+ "DOGEUSDT": "DOGE-USDT",
+ "DORAUSDT": "DORA-USDT",
+ "DOTBTC": "DOT-BTC",
+ "DOTETH": "DOT-ETH",
+ "DOTUSDT": "DOT-USDT",
+ "ECUSDK": "EC-USDK",
+ "ECUSDT": "EC-USDT",
+ "EGLDBTC": "EGLD-BTC",
+ "EGLDUSDT": "EGLD-USDT",
+ "EGTBTC": "EGT-BTC",
+ "EGTETH": "EGT-ETH",
+ "EGTUSDT": "EGT-USDT",
+ "ELFBTC": "ELF-BTC",
+ "ELFUSDT": "ELF-USDT",
+ "EMUSDK": "EM-USDK",
+ "EMUSDT": "EM-USDT",
+ "ENJBTC": "ENJ-BTC",
+ "ENJUSDT": "ENJ-USDT",
+ "EOSBTC": "EOS-BTC",
+ "EOSETH": "EOS-ETH",
+ "EOSUSDC": "EOS-USDC",
+ "EOSUSDK": "EOS-USDK",
+ "EOSUSDT": "EOS-USDT",
+ "ETCBTC": "ETC-BTC",
+ "ETCETH": "ETC-ETH",
+ "ETCOKB": "ETC-OKB",
+ "ETCUSDC": "ETC-USDC",
+ "ETCUSDK": "ETC-USDK",
+ "ETCUSDT": "ETC-USDT",
+ "ETHBTC": "ETH-BTC",
+ "ETHDAI": "ETH-DAI",
+ "ETHUSDC": "ETH-USDC",
+ "ETHUSDK": "ETH-USDK",
+ "ETHUSDT": "ETH-USDT",
+ "ETMUSDT": "ETM-USDT",
+ "EXEUSDT": "EXE-USDT",
+ "FAIRUSDT": "FAIR-USDT",
+ "FILBTC": "FIL-BTC",
+ "FILETH": "FIL-ETH",
+ "FILUSDT": "FIL-USDT",
+ "FLMUSDT": "FLM-USDT",
+ "FLOWBTC": "FLOW-BTC",
+ "FLOWETH": "FLOW-ETH",
+ "FLOWUSDT": "FLOW-USDT",
+ "FORTHBTC": "FORTH-BTC",
+ "FORTHUSDT": "FORTH-USDT",
+ "FRONTETH": "FRONT-ETH",
+ "FRONTUSDT": "FRONT-USDT",
+ "FSNUSDK": "FSN-USDK",
+ "FSNUSDT": "FSN-USDT",
+ "FTMUSDK": "FTM-USDK",
+ "FTMUSDT": "FTM-USDT",
+ "FUNBTC": "FUN-BTC",
+ "GALUSDT": "GAL-USDT",
+ "GASBTC": "GAS-BTC",
+ "GASETH": "GAS-ETH",
+ "GASUSDT": "GAS-USDT",
+ "GHSTETH": "GHST-ETH",
+ "GHSTUSDT": "GHST-USDT",
+ "GLMBTC": "GLM-BTC",
+ "GLMUSDT": "GLM-USDT",
+ "GNXBTC": "GNX-BTC",
+ "GRTBTC": "GRT-BTC",
+ "GRTUSDT": "GRT-USDT",
+ "GTOBTC": "GTO-BTC",
+ "GTOUSDT": "GTO-USDT",
+ "GUSDBTC": "GUSD-BTC",
+ "GUSDUSDT": "GUSD-USDT",
+ "HBARBTC": "HBAR-BTC",
+ "HBARUSDK": "HBAR-USDK",
+ "HBARUSDT": "HBAR-USDT",
+ "HCBTC": "HC-BTC",
+ "HCUSDT": "HC-USDT",
+ "HDAOUSDK": "HDAO-USDK",
+ "HDAOUSDT": "HDAO-USDT",
+ "HEGICETH": "HEGIC-ETH",
+ "HEGICUSDT": "HEGIC-USDT",
+ "ICPBTC": "ICP-BTC",
+ "ICPUSDT": "ICP-USDT",
+ "ICXBTC": "ICX-BTC",
+ "ICXUSDT": "ICX-USDT",
+ "INTBTC": "INT-BTC",
+ "INTETH": "INT-ETH",
+ "INTUSDT": "INT-USDT",
+ "INXUSDT": "INX-USDT",
+ "IOSTBTC": "IOST-BTC",
+ "IOSTETH": "IOST-ETH",
+ "IOSTUSDT": "IOST-USDT",
+ "IOTABTC": "IOTA-BTC",
+ "IOTAUSDT": "IOTA-USDT",
+ "IQUSDT": "IQ-USDT",
+ "ITCUSDT": "ITC-USDT",
+ "JFIUSDT": "JFI-USDT",
+ "JSTUSDT": "JST-USDT",
+ "KANETH": "KAN-ETH",
+ "KANUSDT": "KAN-USDT",
+ "KCASHBTC": "KCASH-BTC",
+ "KCASHETH": "KCASH-ETH",
+ "KCASHUSDT": "KCASH-USDT",
+ "KINEUSDT": "KINE-USDT",
+ "KISHUUSDT": "KISHU-USDT",
+ "KLAYBTC": "KLAY-BTC",
+ "KLAYUSDT": "KLAY-USDT",
+ "KNCBTC": "KNC-BTC",
+ "KNCUSDT": "KNC-USDT",
+ "KONOUSDT": "KONO-USDT",
+ "KP3RUSDT": "KP3R-USDT",
+ "KSMBTC": "KSM-BTC",
+ "KSMETH": "KSM-ETH",
+ "KSMUSDT": "KSM-USDT",
+ "LAMBUSDK": "LAMB-USDK",
+ "LAMBUSDT": "LAMB-USDT",
+ "LATUSDT": "LAT-USDT",
+ "LBAUSDT": "LBA-USDT",
+ "LEOUSDK": "LEO-USDK",
+ "LEOUSDT": "LEO-USDT",
+ "LETUSDT": "LET-USDT",
+ "LINKBTC": "LINK-BTC",
+ "LINKETH": "LINK-ETH",
+ "LINKUSDT": "LINK-USDT",
+ "LMCHUSDT": "LMCH-USDT",
+ "LONETH": "LON-ETH",
+ "LONUSDT": "LON-USDT",
+ "LOONBTC": "LOON-BTC",
+ "LOONUSDT": "LOON-USDT",
+ "LPTUSDT": "LPT-USDT",
+ "LRCBTC": "LRC-BTC",
+ "LRCUSDT": "LRC-USDT",
+ "LSKBTC": "LSK-BTC",
+ "LSKUSDT": "LSK-USDT",
+ "LTCBTC": "LTC-BTC",
+ "LTCETH": "LTC-ETH",
+ "LTCOKB": "LTC-OKB",
+ "LTCUSDC": "LTC-USDC",
+ "LTCUSDK": "LTC-USDK",
+ "LTCUSDT": "LTC-USDT",
+ "LUNABTC": "LUNA-BTC",
+ "LUNAUSDT": "LUNA-USDT",
+ "MANABTC": "MANA-BTC",
+ "MANAETH": "MANA-ETH",
+ "MANAUSDT": "MANA-USDT",
+ "MASKUSDT": "MASK-USDT",
+ "MATICUSDT": "MATIC-USDT",
+ "MCOBTC": "MCO-BTC",
+ "MCOETH": "MCO-ETH",
+ "MCOUSDT": "MCO-USDT",
+ "MDAUSDT": "MDA-USDT",
+ "MDTUSDT": "MDT-USDT",
+ "MEMEUSDT": "MEME-USDT",
+ "MIRUSDT": "MIR-USDT",
+ "MITHBTC": "MITH-BTC",
+ "MITHETH": "MITH-ETH",
+ "MITHUSDT": "MITH-USDT",
+ "MKRBTC": "MKR-BTC",
+ "MKRETH": "MKR-ETH",
+ "MKRUSDT": "MKR-USDT",
+ "MLNUSDT": "MLN-USDT",
+ "MOFBTC": "MOF-BTC",
+ "MOFUSDT": "MOF-USDT",
+ "MXCUSDT": "MXC-USDT",
+ "MXTUSDT": "MXT-USDT",
+ "NANOBTC": "NANO-BTC",
+ "NANOUSDT": "NANO-USDT",
+ "NASBTC": "NAS-BTC",
+ "NASUSDT": "NAS-USDT",
+ "NDNUSDK": "NDN-USDK",
+ "NDNUSDT": "NDN-USDT",
+ "NEARBTC": "NEAR-BTC",
+ "NEARETH": "NEAR-ETH",
+ "NEARUSDT": "NEAR-USDT",
+ "NEOBTC": "NEO-BTC",
+ "NEOETH": "NEO-ETH",
+ "NEOUSDT": "NEO-USDT",
+ "NMRUSDT": "NMR-USDT",
+ "NUBTC": "NU-BTC",
+ "NULSBTC": "NULS-BTC",
+ "NULSETH": "NULS-ETH",
+ "NULSUSDT": "NULS-USDT",
+ "NUUSDT": "NU-USDT",
+ "OKBBTC": "OKB-BTC",
+ "OKBETH": "OKB-ETH",
+ "OKBUSDC": "OKB-USDC",
+ "OKBUSDK": "OKB-USDK",
+ "OKBUSDT": "OKB-USDT",
+ "OKTBTC": "OKT-BTC",
+ "OKTETH": "OKT-ETH",
+ "OKTUSDT": "OKT-USDT",
+ "OMETH": "OM-ETH",
+ "OMGBTC": "OMG-BTC",
+ "OMGUSDT": "OMG-USDT",
+ "OMUSDT": "OM-USDT",
+ "ONTBTC": "ONT-BTC",
+ "ONTETH": "ONT-ETH",
+ "ONTUSDT": "ONT-USDT",
+ "ORBSUSDK": "ORBS-USDK",
+ "ORBSUSDT": "ORBS-USDT",
+ "ORSUSDT": "ORS-USDT",
+ "OXTUSDT": "OXT-USDT",
+ "PAXBTC": "PAX-BTC",
+ "PAXUSDT": "PAX-USDT",
+ "PAYBTC": "PAY-BTC",
+ "PAYUSDT": "PAY-USDT",
+ "PERPUSDT": "PERP-USDT",
+ "PHAETH": "PHA-ETH",
+ "PHAUSDT": "PHA-USDT",
+ "PICKLEUSDT": "PICKLE-USDT",
+ "PLGUSDK": "PLG-USDK",
+ "PLGUSDT": "PLG-USDT",
+ "PMABTC": "PMA-BTC",
+ "PMAUSDK": "PMA-USDK",
+ "PNKUSDT": "PNK-USDT",
+ "POLSETH": "POLS-ETH",
+ "POLSUSDT": "POLS-USDT",
+ "PPTUSDT": "PPT-USDT",
+ "PROPSETH": "PROPS-ETH",
+ "PROPSUSDT": "PROPS-USDT",
+ "PRQUSDT": "PRQ-USDT",
+ "PSTBTC": "PST-BTC",
+ "PSTUSDT": "PST-USDT",
+ "QTUMBTC": "QTUM-BTC",
+ "QTUMETH": "QTUM-ETH",
+ "QTUMUSDT": "QTUM-USDT",
+ "QUNBTC": "QUN-BTC",
+ "QUNUSDT": "QUN-USDT",
+ "RENBTC": "REN-BTC",
+ "RENUSDT": "REN-USDT",
+ "REPETH": "REP-ETH",
+ "REPUSDT": "REP-USDT",
+ "RFUELETH": "RFUEL-ETH",
+ "RFUELUSDT": "RFUEL-USDT",
+ "RIOUSDT": "RIO-USDT",
+ "RNTUSDT": "RNT-USDT",
+ "ROADUSDK": "ROAD-USDK",
+ "ROADUSDT": "ROAD-USDT",
+ "RSRBTC": "RSR-BTC",
+ "RSRETH": "RSR-ETH",
+ "RSRUSDT": "RSR-USDT",
+ "RVNBTC": "RVN-BTC",
+ "RVNUSDT": "RVN-USDT",
+ "SANDUSDT": "SAND-USDT",
+ "SBTCBTC": "SBTC-BTC",
+ "SCBTC": "SC-BTC",
+ "SCUSDT": "SC-USDT",
+ "SFGUSDT": "SFG-USDT",
+ "SHIBUSDT": "SHIB-USDT",
+ "SKLUSDT": "SKL-USDT",
+ "SNCBTC": "SNC-BTC",
+ "SNTBTC": "SNT-BTC",
+ "SNTUSDT": "SNT-USDT",
+ "SNXETH": "SNX-ETH",
+ "SNXUSDT": "SNX-USDT",
+ "SOCUSDT": "SOC-USDT",
+ "SOLBTC": "SOL-BTC",
+ "SOLETH": "SOL-ETH",
+ "SOLUSDT": "SOL-USDT",
+ "SRMBTC": "SRM-BTC",
+ "SRMUSDT": "SRM-USDT",
+ "STORJUSDT": "STORJ-USDT",
+ "STRKUSDT": "STRK-USDT",
+ "STXBTC": "STX-BTC",
+ "STXUSDT": "STX-USDT",
+ "SUNETH": "SUN-ETH",
+ "SUNUSDT": "SUN-USDT",
+ "SUSHIETH": "SUSHI-ETH",
+ "SUSHIUSDT": "SUSHI-USDT",
+ "SWFTCBTC": "SWFTC-BTC",
+ "SWFTCETH": "SWFTC-ETH",
+ "SWFTCUSDT": "SWFTC-USDT",
+ "SWRVUSDT": "SWRV-USDT",
+ "TAIUSDT": "TAI-USDT",
+ "TCTBTC": "TCT-BTC",
+ "TCTUSDT": "TCT-USDT",
+ "THETABTC": "THETA-BTC",
+ "THETAUSDT": "THETA-USDT",
+ "TMTGBTC": "TMTG-BTC",
+ "TMTGUSDT": "TMTG-USDT",
+ "TOPCUSDT": "TOPC-USDT",
+ "TORNETH": "TORN-ETH",
+ "TORNUSDT": "TORN-USDT",
+ "TRADEETH": "TRADE-ETH",
+ "TRADEUSDT": "TRADE-USDT",
+ "TRAUSDT": "TRA-USDT",
+ "TRBUSDT": "TRB-USDT",
+ "TRIOBTC": "TRIO-BTC",
+ "TRIOUSDT": "TRIO-USDT",
+ "TRUEBTC": "TRUE-BTC",
+ "TRUEUSDT": "TRUE-USDT",
+ "TRXBTC": "TRX-BTC",
+ "TRXETH": "TRX-ETH",
+ "TRXUSDC": "TRX-USDC",
+ "TRXUSDK": "TRX-USDK",
+ "TRXUSDT": "TRX-USDT",
+ "TUSDBTC": "TUSD-BTC",
+ "TUSDUSDT": "TUSD-USDT",
+ "UBTCUSDT": "UBTC-USDT",
+ "UMAUSDT": "UMA-USDT",
+ "UNIBTC": "UNI-BTC",
+ "UNIETH": "UNI-ETH",
+ "UNIUSDT": "UNI-USDT",
+ "USDCBTC": "USDC-BTC",
+ "USDCUSDT": "USDC-USDT",
+ "USDTUSDK": "USDT-USDK",
+ "UTKUSDT": "UTK-USDT",
+ "VALUEETH": "VALUE-ETH",
+ "VALUEUSDT": "VALUE-USDT",
+ "VELOUSDT": "VELO-USDT",
+ "VIBBTC": "VIB-BTC",
+ "VIBUSDT": "VIB-USDT",
+ "VITEBTC": "VITE-BTC",
+ "VRAUSDT": "VRA-USDT",
+ "VSYSBTC": "VSYS-BTC",
+ "VSYSUSDK": "VSYS-USDK",
+ "VSYSUSDT": "VSYS-USDT",
+ "WAVESBTC": "WAVES-BTC",
+ "WAVESUSDT": "WAVES-USDT",
+ "WBTCBTC": "WBTC-BTC",
+ "WBTCETH": "WBTC-ETH",
+ "WBTCUSDT": "WBTC-USDT",
+ "WGRTUSDK": "WGRT-USDK",
+ "WGRTUSDT": "WGRT-USDT",
+ "WINGUSDT": "WING-USDT",
+ "WNXMUSDT": "WNXM-USDT",
+ "WTCBTC": "WTC-BTC",
+ "WTCUSDT": "WTC-USDT",
+ "WXTBTC": "WXT-BTC",
+ "WXTUSDK": "WXT-USDK",
+ "WXTUSDT": "WXT-USDT",
+ "XCHBTC": "XCH-BTC",
+ "XCHUSDT": "XCH-USDT",
+ "XEMBTC": "XEM-BTC",
+ "XEMETH": "XEM-ETH",
+ "XEMUSDT": "XEM-USDT",
+ "XLMBTC": "XLM-BTC",
+ "XLMETH": "XLM-ETH",
+ "XLMUSDT": "XLM-USDT",
+ "XMRBTC": "XMR-BTC",
+ "XMRETH": "XMR-ETH",
+ "XMRUSDT": "XMR-USDT",
+ "XPOUSDT": "XPO-USDT",
+ "XPRUSDT": "XPR-USDT",
+ "XRPBTC": "XRP-BTC",
+ "XRPETH": "XRP-ETH",
+ "XRPOKB": "XRP-OKB",
+ "XRPUSDC": "XRP-USDC",
+ "XRPUSDK": "XRP-USDK",
+ "XRPUSDT": "XRP-USDT",
+ "XSRUSDT": "XSR-USDT",
+ "XTZBTC": "XTZ-BTC",
+ "XTZUSDT": "XTZ-USDT",
+ "XUCUSDT": "XUC-USDT",
+ "YEEUSDT": "YEE-USDT",
+ "YFIBTC": "YFI-BTC",
+ "YFIETH": "YFI-ETH",
+ "YFIIUSDT": "YFII-USDT",
+ "YFIUSDT": "YFI-USDT",
+ "YOUBTC": "YOU-BTC",
+ "YOUUSDT": "YOU-USDT",
+ "YOYOUSDT": "YOYO-USDT",
+ "ZECBTC": "ZEC-BTC",
+ "ZECETH": "ZEC-ETH",
+ "ZECUSDT": "ZEC-USDT",
+ "ZENBTC": "ZEN-BTC",
+ "ZENUSDT": "ZEN-USDT",
+ "ZILBTC": "ZIL-BTC",
+ "ZILETH": "ZIL-ETH",
+ "ZILUSDT": "ZIL-USDT",
+ "ZKSUSDT": "ZKS-USDT",
+ "ZRXBTC": "ZRX-BTC",
+ "ZRXETH": "ZRX-ETH",
+ "ZRXUSDT": "ZRX-USDT",
+ "ZYROUSDT": "ZYRO-USDT",
}
-
diff --git a/pkg/fixedpoint/convert.go b/pkg/fixedpoint/convert.go
index f70f25885..9d4d83950 100644
--- a/pkg/fixedpoint/convert.go
+++ b/pkg/fixedpoint/convert.go
@@ -349,11 +349,11 @@ func NewFromString(input string) (Value, error) {
}
}
if hasDecimal {
- after := input[dotIndex+1 : len(input)]
+ after := input[dotIndex+1:]
if decimalCount >= 8 {
- after = after[0:8] + "." + after[8:len(after)]
+ after = after[0:8] + "." + after[8:]
} else {
- after = after[0:decimalCount] + strings.Repeat("0", 8-decimalCount) + after[decimalCount:len(after)]
+ after = after[0:decimalCount] + strings.Repeat("0", 8-decimalCount) + after[decimalCount:]
}
input = input[0:dotIndex] + after
v, err := strconv.ParseFloat(input, 64)
@@ -368,7 +368,7 @@ func NewFromString(input string) (Value, error) {
return Value(int64(math.Trunc(v))), nil
} else if hasScientificNotion {
- exp, err := strconv.ParseInt(input[scIndex+1:len(input)], 10, 32)
+ exp, err := strconv.ParseInt(input[scIndex+1:], 10, 32)
if err != nil {
return 0, err
}
diff --git a/pkg/fixedpoint/dec.go b/pkg/fixedpoint/dec.go
index 64f55f70c..f25c20d78 100644
--- a/pkg/fixedpoint/dec.go
+++ b/pkg/fixedpoint/dec.go
@@ -282,7 +282,7 @@ func (dn Value) FormatString(prec int) string {
// decimal within
dec := nd + e
decimals := digits[dec:min(dec+prec, nd)]
- return sign + digits[:dec] + "." + decimals + strings.Repeat("0", max(0, prec - len(decimals)))
+ return sign + digits[:dec] + "." + decimals + strings.Repeat("0", max(0, prec-len(decimals)))
} else if 0 < dn.exp && dn.exp <= digitsMax {
// decimal to the right
if prec > 0 {
@@ -403,7 +403,7 @@ func (dn Value) FormatPercentage(prec int) string {
// decimal within
dec := nd + e
decimals := digits[dec:min(dec+prec, nd)]
- return sign + digits[:dec] + "." + decimals + strings.Repeat("0", max(0, prec - len(decimals))) + "%"
+ return sign + digits[:dec] + "." + decimals + strings.Repeat("0", max(0, prec-len(decimals))) + "%"
} else if 0 < exp && exp <= digitsMax {
// decimal to the right
if prec > 0 {
diff --git a/pkg/fixedpoint/dec_legacy_test.go b/pkg/fixedpoint/dec_legacy_test.go
index 412c2e875..848b77ec6 100644
--- a/pkg/fixedpoint/dec_legacy_test.go
+++ b/pkg/fixedpoint/dec_legacy_test.go
@@ -19,7 +19,7 @@ func TestNumFractionalDigitsLegacy(t *testing.T) {
},
{
name: "zero underflow",
- v: MustNewFromString("1e-100"),
+ v: MustNewFromString("1e-100"),
want: 0,
},
}
diff --git a/pkg/fixedpoint/dec_test.go b/pkg/fixedpoint/dec_test.go
index da23679ad..5f63fe7c5 100644
--- a/pkg/fixedpoint/dec_test.go
+++ b/pkg/fixedpoint/dec_test.go
@@ -1,10 +1,10 @@
package fixedpoint
import (
+ "encoding/json"
+ "github.com/stretchr/testify/assert"
"math/big"
"testing"
- "github.com/stretchr/testify/assert"
- "encoding/json"
)
const Delta = 1e-9
@@ -167,7 +167,6 @@ func TestJson(t *testing.T) {
assert.Equal(t, "0.00000000", p.FormatString(8))
assert.Equal(t, "0.00000000", string(e))
-
_ = json.Unmarshal([]byte("0.00153917575"), &p)
assert.Equal(t, "0.00153917", p.FormatString(8))
diff --git a/pkg/grpc/convert.go b/pkg/grpc/convert.go
index e8354cf1d..928cbd449 100644
--- a/pkg/grpc/convert.go
+++ b/pkg/grpc/convert.go
@@ -97,14 +97,14 @@ func toSide(side pb.Side) types.SideType {
func toSubmitOrders(pbOrders []*pb.SubmitOrder) (submitOrders []types.SubmitOrder) {
for _, pbOrder := range pbOrders {
submitOrders = append(submitOrders, types.SubmitOrder{
- ClientOrderID: pbOrder.ClientOrderId,
- Symbol: pbOrder.Symbol,
- Side: toSide(pbOrder.Side),
- Type: toOrderType(pbOrder.OrderType),
- Price: fixedpoint.MustNewFromString(pbOrder.Price),
- Quantity: fixedpoint.MustNewFromString(pbOrder.Quantity),
- StopPrice: fixedpoint.MustNewFromString(pbOrder.StopPrice),
- TimeInForce: "",
+ ClientOrderID: pbOrder.ClientOrderId,
+ Symbol: pbOrder.Symbol,
+ Side: toSide(pbOrder.Side),
+ Type: toOrderType(pbOrder.OrderType),
+ Price: fixedpoint.MustNewFromString(pbOrder.Price),
+ Quantity: fixedpoint.MustNewFromString(pbOrder.Quantity),
+ StopPrice: fixedpoint.MustNewFromString(pbOrder.StopPrice),
+ TimeInForce: "",
})
}
diff --git a/pkg/indicator/dmi_test.go b/pkg/indicator/dmi_test.go
index c5755e1b5..62d2b0aa7 100644
--- a/pkg/indicator/dmi_test.go
+++ b/pkg/indicator/dmi_test.go
@@ -2,8 +2,8 @@ package indicator
import (
"encoding/json"
- "testing"
"fmt"
+ "testing"
"github.com/c9s/bbgo/pkg/fixedpoint"
"github.com/c9s/bbgo/pkg/types"
@@ -51,27 +51,31 @@ func Test_DMI(t *testing.T) {
return klines
}
- type output struct{dip float64; dim float64; adx float64}
+ type output struct {
+ dip float64
+ dim float64
+ adx float64
+ }
tests := []struct {
- name string
+ name string
klines []types.KLine
- want output
- next output
- total int
+ want output
+ next output
+ total int
}{
{
- name: "test_dmi",
+ name: "test_dmi",
klines: buildKLines(highb, lowb, clozeb),
- want: output{dip: 4.85114, dim: 1.339736, adx: 37.857156},
- next: output{dip: 4.813853, dim: 1.67532, adx: 36.111434},
+ want: output{dip: 4.85114, dim: 1.339736, adx: 37.857156},
+ next: output{dip: 4.813853, dim: 1.67532, adx: 36.111434},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
dmi := &DMI{
IntervalWindow: types.IntervalWindow{Window: 5},
- ADXSmoothing: 14,
+ ADXSmoothing: 14,
}
dmi.calculateAndUpdate(tt.klines)
assert.InDelta(t, dmi.GetDIPlus().Last(), tt.want.dip, Delta)
diff --git a/pkg/interact/auth.go b/pkg/interact/auth.go
index 71212df76..343ff382a 100644
--- a/pkg/interact/auth.go
+++ b/pkg/interact/auth.go
@@ -37,6 +37,7 @@ type AuthInteract struct {
func (it *AuthInteract) Commands(interact *Interact) {
if it.Strict {
// generate a one-time-use otp
+ // pragma: allowlist nextline secret
if it.OneTimePasswordKey == nil {
opts := totp.GenerateOpts{
Issuer: "interact",
@@ -48,7 +49,7 @@ func (it *AuthInteract) Commands(interact *Interact) {
if err != nil {
panic(err)
}
-
+ // pragma: allowlist nextline secret
it.OneTimePasswordKey = key
}
interact.Command("/auth", "authorize", func(reply Reply, session Session) error {
diff --git a/pkg/migrations/mysql/migration_api_test.go b/pkg/migrations/mysql/migration_api_test.go
index 2684076d3..9864095ce 100644
--- a/pkg/migrations/mysql/migration_api_test.go
+++ b/pkg/migrations/mysql/migration_api_test.go
@@ -14,7 +14,7 @@ func TestGetMigrationsMap(t *testing.T) {
func TestMergeMigrationsMap(t *testing.T) {
MergeMigrationsMap(map[int64]*rockhopper.Migration{
- 2: &rockhopper.Migration{},
- 3: &rockhopper.Migration{},
+ 2: {},
+ 3: {},
})
}
diff --git a/pkg/migrations/sqlite3/migration_api_test.go b/pkg/migrations/sqlite3/migration_api_test.go
index d1f4fe1ab..d7f77c875 100644
--- a/pkg/migrations/sqlite3/migration_api_test.go
+++ b/pkg/migrations/sqlite3/migration_api_test.go
@@ -14,7 +14,7 @@ func TestGetMigrationsMap(t *testing.T) {
func TestMergeMigrationsMap(t *testing.T) {
MergeMigrationsMap(map[int64]*rockhopper.Migration{
- 2: &rockhopper.Migration{},
- 3: &rockhopper.Migration{},
+ 2: {},
+ 3: {},
})
}
diff --git a/pkg/server/envvars.go b/pkg/server/envvars.go
index 82f4fbbf9..f11a418f9 100644
--- a/pkg/server/envvars.go
+++ b/pkg/server/envvars.go
@@ -17,11 +17,15 @@ func collectSessionEnvVars(sessions map[string]*bbgo.ExchangeSession) (envVars m
}
if len(session.EnvVarPrefix) > 0 {
+ // pragma: allowlist nextline secret
envVars[session.EnvVarPrefix+"_API_KEY"] = session.Key
+ // pragma: allowlist nextline secret
envVars[session.EnvVarPrefix+"_API_SECRET"] = session.Secret
} else if len(session.Name) > 0 {
sn := strings.ToUpper(session.Name)
+ // pragma: allowlist nextline secret
envVars[sn+"_API_KEY"] = session.Key
+ // pragma: allowlist nextline secret
envVars[sn+"_API_SECRET"] = session.Secret
} else {
err = fmt.Errorf("session %s name or env var prefix is not defined", session.Name)
diff --git a/pkg/service/account.go b/pkg/service/account.go
index 2c599ca08..d92493266 100644
--- a/pkg/service/account.go
+++ b/pkg/service/account.go
@@ -41,22 +41,22 @@ func (s *AccountService) InsertAsset(time time.Time, session string, name types.
price_in_usd,
is_margin, is_isolated, isolated_symbol)
values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);`,
- session,
- name,
- account,
- time,
- v.Currency,
- v.InUSD,
- v.InBTC,
- v.Total,
- v.Available,
- v.Locked,
- v.Borrowed,
- v.NetAsset,
- v.PriceInUSD,
- isMargin,
- isIsolatedMargin,
- isolatedMarginSymbol)
+ session,
+ name,
+ account,
+ time,
+ v.Currency,
+ v.InUSD,
+ v.InBTC,
+ v.Total,
+ v.Available,
+ v.Locked,
+ v.Borrowed,
+ v.NetAsset,
+ v.PriceInUSD,
+ isMargin,
+ isIsolatedMargin,
+ isolatedMarginSymbol)
err = multierr.Append(err, _err) // successful request
diff --git a/pkg/service/persistence_json.go b/pkg/service/persistence_json.go
index c125ea041..3bea74556 100644
--- a/pkg/service/persistence_json.go
+++ b/pkg/service/persistence_json.go
@@ -76,4 +76,3 @@ func (store JsonStore) Save(val interface{}) error {
p := filepath.Join(store.Directory, store.ID) + ".json"
return ioutil.WriteFile(p, data, 0666)
}
-
diff --git a/pkg/service/persistence_redis.go b/pkg/service/persistence_redis.go
index e71629138..6b91d0583 100644
--- a/pkg/service/persistence_redis.go
+++ b/pkg/service/persistence_redis.go
@@ -19,6 +19,7 @@ func NewRedisPersistenceService(config *RedisPersistenceConfig) *RedisPersistenc
client := redis.NewClient(&redis.Options{
Addr: net.JoinHostPort(config.Host, config.Port),
// Username: "", // username is only for redis 6.0
+ // pragma: allowlist nextline secret
Password: config.Password, // no password set
DB: config.DB, // use default DB
})
diff --git a/pkg/service/reward.go b/pkg/service/reward.go
index c90f73abb..739391cbd 100644
--- a/pkg/service/reward.go
+++ b/pkg/service/reward.go
@@ -93,8 +93,6 @@ func (s *RewardService) Sync(ctx context.Context, exchange types.Exchange) error
return <-errC
}
-
-
type CurrencyPositionMap map[string]fixedpoint.Value
func (s *RewardService) AggregateUnspentCurrencyPosition(ctx context.Context, ex types.ExchangeName, since time.Time) (CurrencyPositionMap, error) {
@@ -128,8 +126,8 @@ func (s *RewardService) QueryUnspentSince(ctx context.Context, ex types.Exchange
sql += " ORDER BY created_at ASC"
rows, err := s.DB.NamedQueryContext(ctx, sql, map[string]interface{}{
- "exchange": ex,
- "since": since,
+ "exchange": ex,
+ "since": since,
})
if err != nil {
diff --git a/pkg/service/reward_test.go b/pkg/service/reward_test.go
index b136724c6..2485d8199 100644
--- a/pkg/service/reward_test.go
+++ b/pkg/service/reward_test.go
@@ -74,7 +74,6 @@ func TestRewardService_InsertAndQueryUnspent(t *testing.T) {
assert.Equal(t, types.RewardCommission, rewards[0].Type)
}
-
func TestRewardService_AggregateUnspentCurrencyPosition(t *testing.T) {
db, err := prepareDB(t)
if err != nil {
@@ -126,7 +125,7 @@ func TestRewardService_AggregateUnspentCurrencyPosition(t *testing.T) {
})
assert.NoError(t, err)
- currencyPositions, err := service.AggregateUnspentCurrencyPosition(ctx, types.ExchangeMax, now.Add(-10 * time.Second))
+ currencyPositions, err := service.AggregateUnspentCurrencyPosition(ctx, types.ExchangeMax, now.Add(-10*time.Second))
assert.NoError(t, err)
assert.NotEmpty(t, currencyPositions)
assert.Len(t, currencyPositions, 2)
diff --git a/pkg/service/withdraw_test.go b/pkg/service/withdraw_test.go
index 3be439933..3328a0eee 100644
--- a/pkg/service/withdraw_test.go
+++ b/pkg/service/withdraw_test.go
@@ -7,8 +7,8 @@ import (
"github.com/jmoiron/sqlx"
"github.com/stretchr/testify/assert"
- "github.com/c9s/bbgo/pkg/types"
"github.com/c9s/bbgo/pkg/fixedpoint"
+ "github.com/c9s/bbgo/pkg/types"
)
func TestWithdrawService(t *testing.T) {
diff --git a/pkg/strategy/factorzoo/strategy.go b/pkg/strategy/factorzoo/strategy.go
index f4b049418..5ed9d7a84 100644
--- a/pkg/strategy/factorzoo/strategy.go
+++ b/pkg/strategy/factorzoo/strategy.go
@@ -154,7 +154,7 @@ func (s *Strategy) Run(ctx context.Context, orderExecutor bbgo.OrderExecutor, se
// s.pvDivergence.OnUpdate(func(corr float64) {
// //fmt.Printf("now we've got corr: %f\n", corr)
// })
- windowSize := 360/s.Interval.Minutes()
+ windowSize := 360 / s.Interval.Minutes()
if windowSize == 0 {
windowSize = 3
}
diff --git a/pkg/strategy/wall/strategy.go b/pkg/strategy/wall/strategy.go
index 86fb05b86..fedd99623 100644
--- a/pkg/strategy/wall/strategy.go
+++ b/pkg/strategy/wall/strategy.go
@@ -340,7 +340,6 @@ func (s *Strategy) Run(ctx context.Context, orderExecutor bbgo.OrderExecutor, se
log.WithError(err).Errorf("can not place order")
}
-
if err := s.activeAdjustmentOrders.GracefulCancel(ctx, s.session.Exchange); err != nil {
log.WithError(err).Errorf("graceful cancel order error")
}
diff --git a/pkg/strategy/xmaker/state.go b/pkg/strategy/xmaker/state.go
index 097a8ebe8..1b6169730 100644
--- a/pkg/strategy/xmaker/state.go
+++ b/pkg/strategy/xmaker/state.go
@@ -11,10 +11,10 @@ type State struct {
CoveredPosition fixedpoint.Value `json:"coveredPosition,omitempty"`
// Deprecated:
- Position *types.Position `json:"position,omitempty"`
+ Position *types.Position `json:"position,omitempty"`
// Deprecated:
- ProfitStats ProfitStats `json:"profitStats,omitempty"`
+ ProfitStats ProfitStats `json:"profitStats,omitempty"`
}
type ProfitStats struct {
diff --git a/pkg/types/indicator.go b/pkg/types/indicator.go
index 23e4a942c..0a3765818 100644
--- a/pkg/types/indicator.go
+++ b/pkg/types/indicator.go
@@ -11,40 +11,40 @@ import (
// Super basic Series type that simply holds the float64 data
// with size limit (the only difference compare to float64slice)
type Queue struct {
- arr []float64
- size int
+ arr []float64
+ size int
}
func NewQueue(size int) *Queue {
- return &Queue{
- arr: make([]float64, 0, size),
- size: size,
- }
+ return &Queue{
+ arr: make([]float64, 0, size),
+ size: size,
+ }
}
func (inc *Queue) Last() float64 {
- if len(inc.arr) == 0 {
- return 0
- }
- return inc.arr[len(inc.arr)-1]
+ if len(inc.arr) == 0 {
+ return 0
+ }
+ return inc.arr[len(inc.arr)-1]
}
func (inc *Queue) Index(i int) float64 {
- if len(inc.arr)-i-1 < 0 {
- return 0
- }
- return inc.arr[len(inc.arr)-i-1]
+ if len(inc.arr)-i-1 < 0 {
+ return 0
+ }
+ return inc.arr[len(inc.arr)-i-1]
}
func (inc *Queue) Length() int {
- return len(inc.arr)
+ return len(inc.arr)
}
func (inc *Queue) Update(v float64) {
- inc.arr = append(inc.arr, v)
- if len(inc.arr) > inc.size {
- inc.arr = inc.arr[len(inc.arr)-inc.size:]
- }
+ inc.arr = append(inc.arr, v)
+ if len(inc.arr) > inc.size {
+ inc.arr = inc.arr[len(inc.arr)-inc.size:]
+ }
}
var _ Series = &Queue{}
diff --git a/pkg/types/market_test.go b/pkg/types/market_test.go
index 5ecb70772..d0544e9ba 100644
--- a/pkg/types/market_test.go
+++ b/pkg/types/market_test.go
@@ -91,7 +91,7 @@ func Test_formatPrice(t *testing.T) {
{
name: "no fraction",
args: args{
- price: fixedpoint.NewFromFloat(10.0),
+ price: fixedpoint.NewFromFloat(10.0),
tickSize: fixedpoint.NewFromFloat(0.001),
},
want: "10.000",
@@ -99,7 +99,7 @@ func Test_formatPrice(t *testing.T) {
{
name: "fraction truncate",
args: args{
- price: fixedpoint.NewFromFloat(2.334),
+ price: fixedpoint.NewFromFloat(2.334),
tickSize: fixedpoint.NewFromFloat(0.01),
},
want: "2.33",
@@ -107,7 +107,7 @@ func Test_formatPrice(t *testing.T) {
{
name: "fraction",
args: args{
- price: fixedpoint.NewFromFloat(2.334),
+ price: fixedpoint.NewFromFloat(2.334),
tickSize: fixedpoint.NewFromFloat(0.0001),
},
want: "2.3340",
@@ -115,7 +115,7 @@ func Test_formatPrice(t *testing.T) {
{
name: "more fraction",
args: args{
- price: fixedpoint.MustNewFromString("2.1234567898888"),
+ price: fixedpoint.MustNewFromString("2.1234567898888"),
tickSize: fixedpoint.NewFromFloat(0.0001),
},
want: "2.1234",
@@ -125,7 +125,7 @@ func Test_formatPrice(t *testing.T) {
binanceFormatRE := regexp.MustCompile("^([0-9]{1,20})(.[0-9]{1,20})?$")
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- got := formatPrice(tt.args.price, tt.args.tickSize);
+ got := formatPrice(tt.args.price, tt.args.tickSize)
if got != tt.want {
t.Errorf("formatPrice() = %v, want %v", got, tt.want)
}
@@ -135,10 +135,9 @@ func Test_formatPrice(t *testing.T) {
}
}
-
func Test_formatQuantity(t *testing.T) {
type args struct {
- quantity fixedpoint.Value
+ quantity fixedpoint.Value
tickSize fixedpoint.Value
}
tests := []struct {
@@ -183,7 +182,7 @@ func Test_formatQuantity(t *testing.T) {
binanceFormatRE := regexp.MustCompile("^([0-9]{1,20})(.[0-9]{1,20})?$")
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- got := formatQuantity(tt.args.quantity, tt.args.tickSize);
+ got := formatQuantity(tt.args.quantity, tt.args.tickSize)
if got != tt.want {
t.Errorf("formatQuantity() = %v, want %v", got, tt.want)
}
diff --git a/pkg/types/profit.go b/pkg/types/profit.go
index 0e7a87014..f783f996a 100644
--- a/pkg/types/profit.go
+++ b/pkg/types/profit.go
@@ -227,7 +227,6 @@ func NewProfitStats(market Market) *ProfitStats {
}
}
-
func (s *ProfitStats) Init(market Market) {
s.Symbol = market.Symbol
s.BaseCurrency = market.BaseCurrency
diff --git a/pkg/types/sort_test.go b/pkg/types/sort_test.go
index 02eadbcb3..4e5171ace 100644
--- a/pkg/types/sort_test.go
+++ b/pkg/types/sort_test.go
@@ -8,24 +8,24 @@ import (
)
func TestSortTradesAscending(t *testing.T) {
- var trades = []Trade {
+ var trades = []Trade{
{
- ID: 1,
- Symbol: "BTCUSDT",
- Side: SideTypeBuy,
- IsBuyer: false,
- IsMaker: false,
- Time: Time(time.Unix(2000, 0 )),
+ ID: 1,
+ Symbol: "BTCUSDT",
+ Side: SideTypeBuy,
+ IsBuyer: false,
+ IsMaker: false,
+ Time: Time(time.Unix(2000, 0)),
},
{
- ID: 2,
- Symbol: "BTCUSDT",
- Side: SideTypeBuy,
- IsBuyer: false,
- IsMaker: false,
- Time: Time(time.Unix(1000, 0 )),
+ ID: 2,
+ Symbol: "BTCUSDT",
+ Side: SideTypeBuy,
+ IsBuyer: false,
+ IsMaker: false,
+ Time: Time(time.Unix(1000, 0)),
},
}
trades = SortTradesAscending(trades)
- assert.True(t ,trades[0].Time.Before(trades[1].Time.Time()))
+ assert.True(t, trades[0].Time.Before(trades[1].Time.Time()))
}
diff --git a/pkg/util/exchange_icon.go b/pkg/util/exchange_icon.go
index a5e4c54fa..c7d868219 100644
--- a/pkg/util/exchange_icon.go
+++ b/pkg/util/exchange_icon.go
@@ -1,2 +1 @@
package util
-
diff --git a/pkg/version/dev.go b/pkg/version/dev.go
index 74f7b7979..071b787c9 100644
--- a/pkg/version/dev.go
+++ b/pkg/version/dev.go
@@ -1,3 +1,4 @@
+//go:build !release
// +build !release
package version
@@ -5,4 +6,3 @@ package version
const Version = "v1.35.0-daaa3352-dev"
const VersionGitRef = "daaa3352"
-
diff --git a/pkg/version/version.go b/pkg/version/version.go
index 5131ec14c..8a443c987 100644
--- a/pkg/version/version.go
+++ b/pkg/version/version.go
@@ -1,3 +1,4 @@
+//go:build release
// +build release
package version
@@ -5,4 +6,3 @@ package version
const Version = "v1.35.0-daaa3352"
const VersionGitRef = "daaa3352"
-