From 69bb645fc20d1efdc3d848714891d17c15f8b870 Mon Sep 17 00:00:00 2001 From: Adrian Gallagher Date: Fri, 8 Nov 2024 10:10:49 +1100 Subject: [PATCH 01/10] docs: Migrate development tracking from Trello to GitHub Projects (#1696) * docs: Migrate development tracking from Trello to GitHub Projects * docs: Replace non-template based references and correct templates --- CONTRIBUTORS | 12 +-- README.md | 31 ++++---- backtester/README.md | 4 +- backtester/btcli/README.md | 4 +- backtester/btrpc/README.md | 4 +- backtester/common/README.md | 4 +- backtester/config/README.md | 4 +- .../config/strategyconfigbuilder/README.md | 12 +-- backtester/config/strategyexamples/README.md | 4 +- backtester/data/README.md | 4 +- backtester/data/kline/README.md | 4 +- backtester/data/kline/api/README.md | 4 +- backtester/data/kline/csv/README.md | 4 +- backtester/data/kline/database/README.md | 4 +- backtester/data/kline/live/README.md | 4 +- backtester/engine/README.md | 4 +- backtester/engine/backtest.md | 4 +- backtester/engine/grpcserver.md | 4 +- backtester/engine/live.md | 4 +- backtester/eventhandlers/README.md | 4 +- .../eventhandlers/eventholder/README.md | 4 +- backtester/eventhandlers/exchange/README.md | 4 +- .../eventhandlers/exchange/slippage/README.md | 4 +- backtester/eventhandlers/portfolio/README.md | 4 +- .../portfolio/compliance/README.md | 4 +- .../portfolio/holdings/README.md | 4 +- .../eventhandlers/portfolio/risk/README.md | 4 +- .../eventhandlers/portfolio/size/README.md | 4 +- backtester/eventhandlers/statistics/README.md | 4 +- backtester/eventhandlers/strategies/README.md | 4 +- .../eventhandlers/strategies/base/README.md | 4 +- .../strategies/binancecashandcarry/README.md | 4 +- .../strategies/dollarcostaverage/README.md | 4 +- .../eventhandlers/strategies/rsi/README.md | 4 +- .../strategies/top2bottom2/README.md | 4 +- backtester/eventtypes/README.md | 4 +- backtester/eventtypes/event/README.md | 4 +- backtester/eventtypes/fill/README.md | 4 +- backtester/eventtypes/kline/README.md | 4 +- backtester/eventtypes/order/README.md | 4 +- backtester/eventtypes/signal/README.md | 4 +- backtester/funding/README.md | 4 +- .../funding/trackingcurrencies/README.md | 4 +- backtester/plugins/README.md | 4 +- backtester/plugins/strategies/README.md | 4 +- .../plugins/strategies/example/README.md | 4 +- backtester/report/README.md | 4 +- cmd/apichecker/README.md | 4 +- cmd/dbseed/README.md | 4 +- cmd/documentation/README.md | 4 +- ..._config_strategyconfigbuilder_readme.tmpl} | 2 +- .../communications_templates/smtp.tmpl | 2 +- cmd/documentation/documentation.go | 20 ----- .../exchanges_templates/subscription.tmpl | 6 +- .../root_templates/root_readme.tmpl | 13 +++- .../sub_templates/backtesting-header.tmpl | 2 +- cmd/documentation/sub_templates/header.tmpl | 2 +- cmd/documentation/sub_templates/status.tmpl | 2 +- cmd/exchange_template/readme_file.tmpl | 2 +- cmd/gctcli/README.md | 2 +- common/README.md | 4 +- common/cache/README.md | 4 +- communications/README.md | 4 +- communications/base/README.md | 4 +- communications/slack/README.md | 4 +- communications/smsglobal/README.md | 4 +- communications/smtpservice/README.md | 27 ++++--- communications/telegram/README.md | 4 +- config/README.md | 4 +- core/version.go | 4 +- currency/README.md | 4 +- currency/forexprovider/README.md | 4 +- currency/forexprovider/base/README.md | 4 +- .../currencyconverterapi/README.md | 4 +- .../forexprovider/currencylayer/README.md | 4 +- .../exchangeratesapi.io/README.md | 4 +- currency/forexprovider/fixer.io/README.md | 4 +- .../forexprovider/openexchangerates/README.md | 4 +- database/README.md | 4 +- docs/ADD_NEW_EXCHANGE.md | 4 +- docs/EXCHANGE_API.md | 2 +- docs/FILES.md | 2 +- docs/OHLCV.md | 4 +- docs/README.md | 2 +- engine/apiserver.md | 4 +- engine/communication_manager.md | 4 +- engine/connection_manager.md | 4 +- engine/currency_state_manager.md | 74 +++++++++---------- engine/database_connection.md | 4 +- engine/datahistory_manager.md | 4 +- engine/depositaddress.md | 4 +- engine/event_manager.md | 4 +- engine/exchange_manager.md | 4 +- engine/ntp_manager.md | 4 +- engine/order_manager.md | 4 +- engine/portfolio_manager.md | 4 +- engine/subsystem_types.md | 4 +- engine/sync_manager.md | 4 +- engine/websocketroutine_manager.md | 4 +- engine/withdraw_manager.md | 4 +- exchanges/README.md | 4 +- exchanges/alert/README.md | 4 +- exchanges/alphapoint/README.md | 4 +- exchanges/binance/README.md | 4 +- exchanges/binanceus/README.md | 4 +- exchanges/bitfinex/README.md | 4 +- exchanges/bitflyer/README.md | 4 +- exchanges/bithumb/README.md | 4 +- exchanges/bitmex/README.md | 4 +- exchanges/bitstamp/README.md | 4 +- exchanges/btcmarkets/README.md | 4 +- exchanges/btse/README.md | 4 +- exchanges/bybit/README.md | 4 +- exchanges/coinbasepro/README.md | 4 +- exchanges/coinut/README.md | 4 +- exchanges/deribit/README.md | 4 +- exchanges/exmo/README.md | 4 +- exchanges/gateio/README.md | 4 +- exchanges/gemini/README.md | 4 +- exchanges/hitbtc/README.md | 4 +- exchanges/huobi/README.md | 4 +- exchanges/kraken/README.md | 4 +- exchanges/kucoin/README.md | 4 +- exchanges/lbank/README.md | 4 +- exchanges/mock/README.md | 4 +- exchanges/nonce/README.md | 4 +- exchanges/okx/README.md | 4 +- exchanges/order/README.md | 4 +- exchanges/orderbook/README.md | 4 +- exchanges/poloniex/README.md | 4 +- exchanges/request/README.md | 4 +- exchanges/stats/README.md | 4 +- exchanges/subscription/README.md | 5 +- exchanges/ticker/README.md | 4 +- exchanges/trade/README.md | 4 +- exchanges/validate/README.md | 4 +- exchanges/yobit/README.md | 4 +- gctrpc/README.md | 2 +- gctscript/README.md | 4 +- portfolio/README.md | 4 +- testdata/README.md | 4 +- web/README.md | 4 +- web/src/app/app.component.html | 4 +- 143 files changed, 353 insertions(+), 361 deletions(-) rename cmd/documentation/backtester_templates/{backtester_config_configbuilder_readme.tmpl => backtester_config_strategyconfigbuilder_readme.tmpl} (93%) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index f3f7013a8de..78590bffc2f 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -4,8 +4,8 @@ thrasher- | https://github.com/thrasher- shazbert | https://github.com/shazbert dependabot[bot] | https://github.com/apps/dependabot gloriousCode | https://github.com/gloriousCode -dependabot-preview[bot] | https://github.com/apps/dependabot-preview gbjk | https://github.com/gbjk +dependabot-preview[bot] | https://github.com/apps/dependabot-preview xtda | https://github.com/xtda lrascao | https://github.com/lrascao Beadko | https://github.com/Beadko @@ -14,18 +14,19 @@ vazha | https://github.com/vazha ydm | https://github.com/ydm ermalguni | https://github.com/ermalguni MadCozBadd | https://github.com/MadCozBadd -vadimzhukck | https://github.com/vadimzhukck samuael | https://github.com/samuael -geseq | https://github.com/geseq -marcofranssen | https://github.com/marcofranssen +vadimzhukck | https://github.com/vadimzhukck 140am | https://github.com/140am +marcofranssen | https://github.com/marcofranssen +geseq | https://github.com/geseq TaltaM | https://github.com/TaltaM -dackroyd | https://github.com/dackroyd cranktakular | https://github.com/cranktakular +dackroyd | https://github.com/dackroyd khcchiu | https://github.com/khcchiu yangrq1018 | https://github.com/yangrq1018 woshidama323 | https://github.com/woshidama323 crackcomm | https://github.com/crackcomm +mshogin | https://github.com/mshogin herenow | https://github.com/herenow tk42 | https://github.com/tk42 soxipy | https://github.com/soxipy @@ -38,7 +39,6 @@ gam-phon | https://github.com/gam-phon if1live | https://github.com/if1live lozdog245 | https://github.com/lozdog245 MarkDzulko | https://github.com/MarkDzulko -mshogin | https://github.com/mshogin blombard | https://github.com/blombard cavapoo2 | https://github.com/cavapoo2 CodeLingoTeam | https://github.com/CodeLingoTeam diff --git a/README.md b/README.md index f1a557cd04f..16819ec0f39 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) A cryptocurrency trading bot supporting multiple exchanges written in Golang. @@ -78,9 +78,16 @@ However, we welcome pull requests for any exchange which does not match this cri + Exchange HTTP mock testing. See [mock](/exchanges/mock/README.md). + Exchange multichain deposits and withdrawals for specific exchanges. See [multichain transfer support](/docs/MULTICHAIN_TRANSFER_SUPPORT.md). -## Planned Features +## Development Tracking -Planned features can be found on our [community Trello page](https://trello.com/b/ZAhMhpOy/gocryptotrader). +Our [Kanban board](https://github.com/orgs/thrasher-corp/projects/3) provides updates on: + ++ New feature development ++ Bug fixes in progress ++ Recently completed work ++ Contribution opportunities + +Follow our progress as we continuously improve GoCryptoTrader. ## Contribution @@ -141,12 +148,12 @@ Binaries will be published once the codebase reaches a stable condition. |User|Contribution Amount| |--|--| -| [thrasher-](https://github.com/thrasher-) | 692 | -| [shazbert](https://github.com/shazbert) | 333 | -| [dependabot[bot]](https://github.com/apps/dependabot) | 293 | +| [thrasher-](https://github.com/thrasher-) | 700 | +| [shazbert](https://github.com/shazbert) | 345 | +| [dependabot[bot]](https://github.com/apps/dependabot) | 317 | | [gloriousCode](https://github.com/gloriousCode) | 234 | +| [gbjk](https://github.com/gbjk) | 93 | | [dependabot-preview[bot]](https://github.com/apps/dependabot-preview) | 88 | -| [gbjk](https://github.com/gbjk) | 80 | | [xtda](https://github.com/xtda) | 47 | | [lrascao](https://github.com/lrascao) | 27 | | [Beadko](https://github.com/Beadko) | 17 | @@ -155,11 +162,11 @@ Binaries will be published once the codebase reaches a stable condition. | [ydm](https://github.com/ydm) | 15 | | [ermalguni](https://github.com/ermalguni) | 14 | | [MadCozBadd](https://github.com/MadCozBadd) | 13 | +| [samuael](https://github.com/samuael) | 10 | | [vadimzhukck](https://github.com/vadimzhukck) | 10 | -| [samuael](https://github.com/samuael) | 9 | -| [geseq](https://github.com/geseq) | 8 | -| [marcofranssen](https://github.com/marcofranssen) | 8 | | [140am](https://github.com/140am) | 8 | +| [marcofranssen](https://github.com/marcofranssen) | 8 | +| [geseq](https://github.com/geseq) | 8 | | [TaltaM](https://github.com/TaltaM) | 6 | | [cranktakular](https://github.com/cranktakular) | 6 | | [dackroyd](https://github.com/dackroyd) | 5 | @@ -177,13 +184,9 @@ Binaries will be published once the codebase reaches a stable condition. | [Christian-Achilli](https://github.com/Christian-Achilli) | 2 | | [cornelk](https://github.com/cornelk) | 2 | | [gam-phon](https://github.com/gam-phon) | 2 | -| [herenow](https://github.com/herenow) | 2 | | [if1live](https://github.com/if1live) | 2 | | [lozdog245](https://github.com/lozdog245) | 2 | | [MarkDzulko](https://github.com/MarkDzulko) | 2 | -| [mshogin](https://github.com/mshogin) | 2 | -| [soxipy](https://github.com/soxipy) | 2 | -| [tk42](https://github.com/tk42) | 2 | | [blombard](https://github.com/blombard) | 1 | | [cavapoo2](https://github.com/cavapoo2) | 1 | | [CodeLingoTeam](https://github.com/CodeLingoTeam) | 1 | diff --git a/backtester/README.md b/backtester/README.md index d27ae401ff1..8404c87e1f9 100644 --- a/backtester/README.md +++ b/backtester/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This backtester package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/btcli/README.md b/backtester/btcli/README.md index 843b6fd9730..dbf204aea48 100644 --- a/backtester/btcli/README.md +++ b/backtester/btcli/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/btcli) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This btcli package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/btrpc/README.md b/backtester/btrpc/README.md index 209a76b5cfd..28b45fd58fd 100644 --- a/backtester/btrpc/README.md +++ b/backtester/btrpc/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/btrpc) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This btrpc package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/common/README.md b/backtester/common/README.md index 8bf0a8a40a2..f80aca56c2d 100644 --- a/backtester/common/README.md +++ b/backtester/common/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/common) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This common package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/config/README.md b/backtester/config/README.md index 16b40fe0b31..9ec64fe5003 100644 --- a/backtester/config/README.md +++ b/backtester/config/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/config) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This config package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/config/strategyconfigbuilder/README.md b/backtester/config/strategyconfigbuilder/README.md index ff65b7bad95..718bca4ff8e 100644 --- a/backtester/config/strategyconfigbuilder/README.md +++ b/backtester/config/strategyconfigbuilder/README.md @@ -1,24 +1,24 @@ -# GoCryptoTrader Backtester: Configbuilder package +# GoCryptoTrader Backtester: Strategyconfigbuilder package [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) -[![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/config/configbuilder) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/config/strategyconfigbuilder) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) -This configbuilder package is part of the GoCryptoTrader codebase. +This strategyconfigbuilder package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) -## Configbuilder package overview +## Strategyconfigbuilder package overview ### What does the config builder do? The config builder runs you through the process of creating a strategy config (`.strat`) file. Configs can also be generated via test code under `config_test.go`. diff --git a/backtester/config/strategyexamples/README.md b/backtester/config/strategyexamples/README.md index 1dfecbd407d..386efa6abcf 100644 --- a/backtester/config/strategyexamples/README.md +++ b/backtester/config/strategyexamples/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/config/strategyexamples) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This strategyexamples package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/data/README.md b/backtester/data/README.md index d72a0ff4c01..47f34303f3a 100644 --- a/backtester/data/README.md +++ b/backtester/data/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/data) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This data package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/data/kline/README.md b/backtester/data/kline/README.md index afac6ff9231..d6695664bed 100644 --- a/backtester/data/kline/README.md +++ b/backtester/data/kline/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/data/kline) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This kline package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/data/kline/api/README.md b/backtester/data/kline/api/README.md index 1236bb9b2ed..1ea7fec8210 100644 --- a/backtester/data/kline/api/README.md +++ b/backtester/data/kline/api/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/data/kline/api) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This api package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/data/kline/csv/README.md b/backtester/data/kline/csv/README.md index 742f2c11afd..551e4b23bd6 100644 --- a/backtester/data/kline/csv/README.md +++ b/backtester/data/kline/csv/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/data/kline/csv) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This csv package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/data/kline/database/README.md b/backtester/data/kline/database/README.md index 06ad0272787..df7a6e8cf9a 100644 --- a/backtester/data/kline/database/README.md +++ b/backtester/data/kline/database/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/data/kline/database) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This database package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/data/kline/live/README.md b/backtester/data/kline/live/README.md index a7f855c8b7e..0de7c2c778f 100644 --- a/backtester/data/kline/live/README.md +++ b/backtester/data/kline/live/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/data/kline/live) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This live package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/engine/README.md b/backtester/engine/README.md index 682917a9b67..5a57ed336e6 100644 --- a/backtester/engine/README.md +++ b/backtester/engine/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/engine) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This engine package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/engine/backtest.md b/backtester/engine/backtest.md index df53c655f64..133946f83ca 100644 --- a/backtester/engine/backtest.md +++ b/backtester/engine/backtest.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/backtest) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This backtest package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/engine/grpcserver.md b/backtester/engine/grpcserver.md index bda20f33cc1..2d7661b9b20 100644 --- a/backtester/engine/grpcserver.md +++ b/backtester/engine/grpcserver.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/grpcserver) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This grpcserver package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/engine/live.md b/backtester/engine/live.md index 8f4d1f27424..e86c0eb0a57 100644 --- a/backtester/engine/live.md +++ b/backtester/engine/live.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/live) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This live package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/README.md b/backtester/eventhandlers/README.md index c8b10690a60..a6e06c39057 100644 --- a/backtester/eventhandlers/README.md +++ b/backtester/eventhandlers/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This eventhandlers package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/eventholder/README.md b/backtester/eventhandlers/eventholder/README.md index 2673213f0bd..9c074d0dd34 100644 --- a/backtester/eventhandlers/eventholder/README.md +++ b/backtester/eventhandlers/eventholder/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/eventholder) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This eventholder package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/exchange/README.md b/backtester/eventhandlers/exchange/README.md index 75830b1f97d..9df0dffca85 100644 --- a/backtester/eventhandlers/exchange/README.md +++ b/backtester/eventhandlers/exchange/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/exchange) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This exchange package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/exchange/slippage/README.md b/backtester/eventhandlers/exchange/slippage/README.md index 00280eeee88..754a8e814e0 100644 --- a/backtester/eventhandlers/exchange/slippage/README.md +++ b/backtester/eventhandlers/exchange/slippage/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/exchange/slippage) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This slippage package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/portfolio/README.md b/backtester/eventhandlers/portfolio/README.md index 02692afe596..ff90a19e920 100644 --- a/backtester/eventhandlers/portfolio/README.md +++ b/backtester/eventhandlers/portfolio/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This portfolio package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/portfolio/compliance/README.md b/backtester/eventhandlers/portfolio/compliance/README.md index bf55bd28649..1983927524c 100644 --- a/backtester/eventhandlers/portfolio/compliance/README.md +++ b/backtester/eventhandlers/portfolio/compliance/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio/compliance) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This compliance package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/portfolio/holdings/README.md b/backtester/eventhandlers/portfolio/holdings/README.md index cee53da1e28..0d30a7a0281 100644 --- a/backtester/eventhandlers/portfolio/holdings/README.md +++ b/backtester/eventhandlers/portfolio/holdings/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio/holdings) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This holdings package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/portfolio/risk/README.md b/backtester/eventhandlers/portfolio/risk/README.md index cef97e1dc41..c8b6c9852f5 100644 --- a/backtester/eventhandlers/portfolio/risk/README.md +++ b/backtester/eventhandlers/portfolio/risk/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio/risk) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This risk package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/portfolio/size/README.md b/backtester/eventhandlers/portfolio/size/README.md index a84ab5077e6..a31d2d63a36 100644 --- a/backtester/eventhandlers/portfolio/size/README.md +++ b/backtester/eventhandlers/portfolio/size/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/portfolio/size) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This size package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/statistics/README.md b/backtester/eventhandlers/statistics/README.md index eef42bbe611..929e8e091ca 100644 --- a/backtester/eventhandlers/statistics/README.md +++ b/backtester/eventhandlers/statistics/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/statistics) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This statistics package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/strategies/README.md b/backtester/eventhandlers/strategies/README.md index 65efa1bf880..a0f47402329 100644 --- a/backtester/eventhandlers/strategies/README.md +++ b/backtester/eventhandlers/strategies/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/strategies) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This strategies package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/strategies/base/README.md b/backtester/eventhandlers/strategies/base/README.md index 1bdd297c441..dc5631c4e3e 100644 --- a/backtester/eventhandlers/strategies/base/README.md +++ b/backtester/eventhandlers/strategies/base/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/strategies/base) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This base package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/strategies/binancecashandcarry/README.md b/backtester/eventhandlers/strategies/binancecashandcarry/README.md index 9f74603e5bc..ca7d9b9283c 100644 --- a/backtester/eventhandlers/strategies/binancecashandcarry/README.md +++ b/backtester/eventhandlers/strategies/binancecashandcarry/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/strategies/binancecashandcarry) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This binancecashandcarry package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/strategies/dollarcostaverage/README.md b/backtester/eventhandlers/strategies/dollarcostaverage/README.md index 6ed434e5890..ba9b8a6cf25 100644 --- a/backtester/eventhandlers/strategies/dollarcostaverage/README.md +++ b/backtester/eventhandlers/strategies/dollarcostaverage/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/strategies/dollarcostaverage) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This dollarcostaverage package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/strategies/rsi/README.md b/backtester/eventhandlers/strategies/rsi/README.md index 1ee1e435f12..33200f60627 100644 --- a/backtester/eventhandlers/strategies/rsi/README.md +++ b/backtester/eventhandlers/strategies/rsi/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/strategies/rsi) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This rsi package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventhandlers/strategies/top2bottom2/README.md b/backtester/eventhandlers/strategies/top2bottom2/README.md index 1a139991be5..6ae4e199349 100644 --- a/backtester/eventhandlers/strategies/top2bottom2/README.md +++ b/backtester/eventhandlers/strategies/top2bottom2/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventhandlers/strategies/top2bottom2) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This top2bottom2 package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventtypes/README.md b/backtester/eventtypes/README.md index b8f4e5c1408..f9ab51d8f3c 100644 --- a/backtester/eventtypes/README.md +++ b/backtester/eventtypes/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventtypes) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This eventtypes package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventtypes/event/README.md b/backtester/eventtypes/event/README.md index ed06b112370..479e4a2d1a7 100644 --- a/backtester/eventtypes/event/README.md +++ b/backtester/eventtypes/event/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/event) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This event package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventtypes/fill/README.md b/backtester/eventtypes/fill/README.md index 050528c069c..75e645d69f8 100644 --- a/backtester/eventtypes/fill/README.md +++ b/backtester/eventtypes/fill/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/fill) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This fill package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventtypes/kline/README.md b/backtester/eventtypes/kline/README.md index 89aee7c9940..094687ecb4a 100644 --- a/backtester/eventtypes/kline/README.md +++ b/backtester/eventtypes/kline/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/kline) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This kline package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventtypes/order/README.md b/backtester/eventtypes/order/README.md index 20cd2a6a0c9..85c3dfaf17f 100644 --- a/backtester/eventtypes/order/README.md +++ b/backtester/eventtypes/order/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/order) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This order package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/eventtypes/signal/README.md b/backtester/eventtypes/signal/README.md index 341217bc740..3ac87f20803 100644 --- a/backtester/eventtypes/signal/README.md +++ b/backtester/eventtypes/signal/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/eventtypes/signal) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This signal package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/funding/README.md b/backtester/funding/README.md index 57350aaefef..bf378542950 100644 --- a/backtester/funding/README.md +++ b/backtester/funding/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/funding) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This funding package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/funding/trackingcurrencies/README.md b/backtester/funding/trackingcurrencies/README.md index 4e05107f71d..e9f489af4af 100644 --- a/backtester/funding/trackingcurrencies/README.md +++ b/backtester/funding/trackingcurrencies/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/funding/trackingcurrencies) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This trackingcurrencies package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/plugins/README.md b/backtester/plugins/README.md index 17c0e81cf37..50425f553b9 100644 --- a/backtester/plugins/README.md +++ b/backtester/plugins/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/plugins) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This plugins package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/plugins/strategies/README.md b/backtester/plugins/strategies/README.md index 8f2b589228a..24c4c3c40b1 100644 --- a/backtester/plugins/strategies/README.md +++ b/backtester/plugins/strategies/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/plugins/strategies) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This strategies package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/plugins/strategies/example/README.md b/backtester/plugins/strategies/example/README.md index 5ae90d2c6bf..8fa335db14a 100644 --- a/backtester/plugins/strategies/example/README.md +++ b/backtester/plugins/strategies/example/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/plugins/strategies/example) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This example package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/backtester/report/README.md b/backtester/report/README.md index b9c4d06a409..ccbccd09baf 100644 --- a/backtester/report/README.md +++ b/backtester/report/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/backtester/report) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This report package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/cmd/apichecker/README.md b/cmd/apichecker/README.md index ad15026e226..1f0e01ee1d0 100644 --- a/cmd/apichecker/README.md +++ b/cmd/apichecker/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/cmd/apichecker) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This apichecker package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/cmd/dbseed/README.md b/cmd/dbseed/README.md index 85fef431981..bd333a7d366 100644 --- a/cmd/dbseed/README.md +++ b/cmd/dbseed/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/portfolio) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This dbseed tool is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/cmd/documentation/README.md b/cmd/documentation/README.md index 13beb180b6d..1bb06b63117 100644 --- a/cmd/documentation/README.md +++ b/cmd/documentation/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/cmd/documentation) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This documentation package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/cmd/documentation/backtester_templates/backtester_config_configbuilder_readme.tmpl b/cmd/documentation/backtester_templates/backtester_config_strategyconfigbuilder_readme.tmpl similarity index 93% rename from cmd/documentation/backtester_templates/backtester_config_configbuilder_readme.tmpl rename to cmd/documentation/backtester_templates/backtester_config_strategyconfigbuilder_readme.tmpl index b8f201b9aaf..41989b9a038 100644 --- a/cmd/documentation/backtester_templates/backtester_config_configbuilder_readme.tmpl +++ b/cmd/documentation/backtester_templates/backtester_config_strategyconfigbuilder_readme.tmpl @@ -1,4 +1,4 @@ -{{define "backtester config configbuilder" -}} +{{define "backtester config strategyconfigbuilder" -}} {{template "backtester-header" .}} ## {{.CapitalName}} package overview diff --git a/cmd/documentation/communications_templates/smtp.tmpl b/cmd/documentation/communications_templates/smtp.tmpl index ad1cae7b2d9..9fb4b92c656 100644 --- a/cmd/documentation/communications_templates/smtp.tmpl +++ b/cmd/documentation/communications_templates/smtp.tmpl @@ -1,4 +1,4 @@ -{{define "communications smtp" -}} +{{define "communications smtpservice" -}} {{template "header" .}} ## SMSGlobal Communications package diff --git a/cmd/documentation/documentation.go b/cmd/documentation/documentation.go index 9416108ec98..2c3c283da90 100644 --- a/cmd/documentation/documentation.go +++ b/cmd/documentation/documentation.go @@ -203,11 +203,6 @@ func main() { URL: "https://github.com/gam-phon", Contributions: 2, }, - { - Login: "herenow", - URL: "https://github.com/herenow", - Contributions: 2, - }, { Login: "if1live", URL: "https://github.com/if1live", @@ -223,21 +218,6 @@ func main() { URL: "https://github.com/MarkDzulko", Contributions: 2, }, - { - Login: "mshogin", - URL: "https://github.com/mshogin", - Contributions: 2, - }, - { - Login: "soxipy", - URL: "https://github.com/soxipy", - Contributions: 2, - }, - { - Login: "tk42", - URL: "https://github.com/tk42", - Contributions: 2, - }, { Login: "blombard", URL: "https://github.com/blombard", diff --git a/cmd/documentation/exchanges_templates/subscription.tmpl b/cmd/documentation/exchanges_templates/subscription.tmpl index 4df4403ac79..c9d1bdb25d3 100644 --- a/cmd/documentation/exchanges_templates/subscription.tmpl +++ b/cmd/documentation/exchanges_templates/subscription.tmpl @@ -43,14 +43,16 @@ Example: Assets and pairs should be output in the sequence in AssetPairs since text/template range function uses an sorted order for map keys. -Template functions may modify AssetPairs to update the subscription's pairs, e.g. Filtering out margin pairs already in spot subscription +Template functions may modify AssetPairs to update the subscription's pairs, e.g. Filtering out margin pairs already in spot subscription. We use separators like this because it allows mono-templates to decide at runtime whether to fan out. -See exchanges/subscription/testdata/subscriptions.tmpl for an example mono-template showcasing various features +See exchanges/subscription/testdata/subscriptions.tmpl for an example mono-template showcasing various features. Templates do not need to worry about joining around separators; Trailing separators will be stripped automatically. +Template functions should panic to handle errors. They are caught by text/template and turned into errors for use in `subscription.expandTemplate`. + {{template "contributions"}} {{template "donations" .}} {{end}} diff --git a/cmd/documentation/root_templates/root_readme.tmpl b/cmd/documentation/root_templates/root_readme.tmpl index 4e433c4502d..276fb7aa2b8 100644 --- a/cmd/documentation/root_templates/root_readme.tmpl +++ b/cmd/documentation/root_templates/root_readme.tmpl @@ -4,7 +4,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) A cryptocurrency trading bot supporting multiple exchanges written in Golang. @@ -79,9 +79,16 @@ However, we welcome pull requests for any exchange which does not match this cri + Exchange HTTP mock testing. See [mock](/exchanges/mock/README.md). + Exchange multichain deposits and withdrawals for specific exchanges. See [multichain transfer support](/docs/MULTICHAIN_TRANSFER_SUPPORT.md). -## Planned Features +## Development Tracking -Planned features can be found on our [community Trello page](https://trello.com/b/ZAhMhpOy/gocryptotrader). +Our [Kanban board](https://github.com/orgs/thrasher-corp/projects/3) provides updates on: + ++ New feature development ++ Bug fixes in progress ++ Recently completed work ++ Contribution opportunities + +Follow our progress as we continuously improve GoCryptoTrader. ## Contribution diff --git a/cmd/documentation/sub_templates/backtesting-header.tmpl b/cmd/documentation/sub_templates/backtesting-header.tmpl index ff128898e1b..5902c3fb9e6 100644 --- a/cmd/documentation/sub_templates/backtesting-header.tmpl +++ b/cmd/documentation/sub_templates/backtesting-header.tmpl @@ -9,7 +9,7 @@ This {{.Name}} package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) {{end}} diff --git a/cmd/documentation/sub_templates/header.tmpl b/cmd/documentation/sub_templates/header.tmpl index 82c8ad8e4e0..132b2d0d074 100644 --- a/cmd/documentation/sub_templates/header.tmpl +++ b/cmd/documentation/sub_templates/header.tmpl @@ -9,7 +9,7 @@ This {{.Name}} package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) {{end}} diff --git a/cmd/documentation/sub_templates/status.tmpl b/cmd/documentation/sub_templates/status.tmpl index 694de517a23..885efd2369d 100644 --- a/cmd/documentation/sub_templates/status.tmpl +++ b/cmd/documentation/sub_templates/status.tmpl @@ -2,6 +2,6 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) {{with .}}[![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/{{.}}){{else}}[![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/){{end}} -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) {{end}} diff --git a/cmd/exchange_template/readme_file.tmpl b/cmd/exchange_template/readme_file.tmpl index e2a2ea5ac37..6bbbed4719e 100644 --- a/cmd/exchange_template/readme_file.tmpl +++ b/cmd/exchange_template/readme_file.tmpl @@ -7,7 +7,7 @@ An exchange interface wrapper for the GoCryptoTrader application. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). ## Current {{.CapitalName}} Exchange Features diff --git a/cmd/gctcli/README.md b/cmd/gctcli/README.md index c53e3df4e77..e004de23428 100644 --- a/cmd/gctcli/README.md +++ b/cmd/gctcli/README.md @@ -5,7 +5,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) A cryptocurrency trading bot supporting multiple exchanges written in Golang. diff --git a/common/README.md b/common/README.md index 4a775b9b5a8..94297ae4de3 100644 --- a/common/README.md +++ b/common/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/common) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This common package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/common/cache/README.md b/common/cache/README.md index ec01043cbd7..8d35778d6b7 100644 --- a/common/cache/README.md +++ b/common/cache/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/portfolio) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This cache package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/communications/README.md b/communications/README.md index 8d76d4774a5..6268f8e784d 100644 --- a/communications/README.md +++ b/communications/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/communications/comms) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This comms package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/communications/base/README.md b/communications/base/README.md index c450bdf8389..d118965156b 100644 --- a/communications/base/README.md +++ b/communications/base/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/communications/base) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This base package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/communications/slack/README.md b/communications/slack/README.md index 6667eb06cbd..97e9643246b 100644 --- a/communications/slack/README.md +++ b/communications/slack/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/communications/slack) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This slack package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/communications/smsglobal/README.md b/communications/smsglobal/README.md index 3dd1544ce3e..ec2aa2cc621 100644 --- a/communications/smsglobal/README.md +++ b/communications/smsglobal/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/communications/smsglobal) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This smsglobal package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/communications/smtpservice/README.md b/communications/smtpservice/README.md index 98d96198845..3b2eca5fa5a 100644 --- a/communications/smtpservice/README.md +++ b/communications/smtpservice/README.md @@ -1,20 +1,20 @@ -# GoCryptoTrader package Smtp +# GoCryptoTrader package Smtpservice - + [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) -[![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/communications/smtp) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/communications/smtpservice) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) -This smtp package is part of the GoCryptoTrader codebase. +This smtpservice package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) @@ -44,14 +44,14 @@ s := new(smtpservice.SMTPservice) // Define SMTPservice configuration commsConfig := config.CommunicationsConfig{SMTPservice: config.SMTPConfig{ - Name: "SMTPservice", - Enabled: true, - Verbose: false, - Host: "host", - Port: "port", - AccountName: "name", + Name: "SMTPservice", + Enabled: true, + Verbose: false, + Host: "host", + Port: "port", + AccountName: "name", AccountPassword: "password", - RecipientList: "something@something.com,somethingelse@something.com" + RecipientList: "something@something.com,somethingelse@something.com" }} s.Setup(commsConfig) @@ -79,4 +79,3 @@ When submitting a PR, please abide by our coding guidelines: If this framework helped you in any way, or you would like to support the developers working on it, please donate Bitcoin to: ***bc1qk0jareu4jytc0cfrhr5wgshsq8282awpavfahc*** - diff --git a/communications/telegram/README.md b/communications/telegram/README.md index 99f2c4c2100..b6d25cffe56 100644 --- a/communications/telegram/README.md +++ b/communications/telegram/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/communications/telegram) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This telegram package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/config/README.md b/config/README.md index 0d3aae52633..e5900fba939 100644 --- a/config/README.md +++ b/config/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/config) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This config package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/core/version.go b/core/version.go index 6e86ddfea5f..ef3dd461d9e 100644 --- a/core/version.go +++ b/core/version.go @@ -14,7 +14,7 @@ const ( PrereleaseBlurb = "This version is pre-release and is not intended to be used as a production ready trading framework or bot - use at your own risk." IsRelease = false GitHub = "GitHub: https://github.com/thrasher-corp/gocryptotrader" - Trello = "Trello: https://trello.com/b/ZAhMhpOy/gocryptotrader" + ProjectKanban = "Kanban: https://github.com/orgs/thrasher-corp/projects/3" Slack = "Slack: https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk" Issues = "Issues: https://github.com/thrasher-corp/gocryptotrader/issues" ) @@ -42,7 +42,7 @@ func Version(short bool) string { } versionStr += Copyright + "\n\n" versionStr += GitHub + "\n" - versionStr += Trello + "\n" + versionStr += ProjectKanban + "\n" versionStr += Slack + "\n" versionStr += Issues + "\n" return versionStr diff --git a/currency/README.md b/currency/README.md index b19d4670a69..d9d12272cf1 100644 --- a/currency/README.md +++ b/currency/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/currency) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This currency package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/currency/forexprovider/README.md b/currency/forexprovider/README.md index eca205a78ab..5f13f386342 100644 --- a/currency/forexprovider/README.md +++ b/currency/forexprovider/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/currency/forexprovider) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This forexprovider package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/currency/forexprovider/base/README.md b/currency/forexprovider/base/README.md index d5ce1c3f9f1..bcf7befdbe1 100644 --- a/currency/forexprovider/base/README.md +++ b/currency/forexprovider/base/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/currency/forexprovider/base) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This base package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/currency/forexprovider/currencyconverterapi/README.md b/currency/forexprovider/currencyconverterapi/README.md index b6b4a166e5b..5c448803b58 100644 --- a/currency/forexprovider/currencyconverterapi/README.md +++ b/currency/forexprovider/currencyconverterapi/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/currency/forexprovider/currencyconverterapi) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This currencyconverterapi package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/currency/forexprovider/currencylayer/README.md b/currency/forexprovider/currencylayer/README.md index 7aa1b243c9f..1fb9a00fe38 100644 --- a/currency/forexprovider/currencylayer/README.md +++ b/currency/forexprovider/currencylayer/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/currency/forexprovider/currencylayer) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This currencylayer package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/currency/forexprovider/exchangeratesapi.io/README.md b/currency/forexprovider/exchangeratesapi.io/README.md index 653238b4329..fd78b058df9 100644 --- a/currency/forexprovider/exchangeratesapi.io/README.md +++ b/currency/forexprovider/exchangeratesapi.io/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/currency/forexprovider/exchangeratesapi.io) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This exchangeratesapi.io package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/currency/forexprovider/fixer.io/README.md b/currency/forexprovider/fixer.io/README.md index a9b451ff1f2..8272ccf7e3a 100644 --- a/currency/forexprovider/fixer.io/README.md +++ b/currency/forexprovider/fixer.io/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/currency/forexprovider/fixer.io) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This fixer.io package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/currency/forexprovider/openexchangerates/README.md b/currency/forexprovider/openexchangerates/README.md index 1c91d1c80c4..f4b24070e21 100644 --- a/currency/forexprovider/openexchangerates/README.md +++ b/currency/forexprovider/openexchangerates/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/currency/forexprovider/openexchangerates) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This openexchangerates package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/database/README.md b/database/README.md index 59ac394d938..d50bc5af42f 100644 --- a/database/README.md +++ b/database/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/portfolio) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This database package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/docs/ADD_NEW_EXCHANGE.md b/docs/ADD_NEW_EXCHANGE.md index 365f9ed7696..41e5712d192 100644 --- a/docs/ADD_NEW_EXCHANGE.md +++ b/docs/ADD_NEW_EXCHANGE.md @@ -5,14 +5,14 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) This exchanges package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/docs/EXCHANGE_API.md b/docs/EXCHANGE_API.md index f0ed9a763e4..f25e76f3d3c 100644 --- a/docs/EXCHANGE_API.md +++ b/docs/EXCHANGE_API.md @@ -5,7 +5,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) A cryptocurrency trading bot supporting multiple exchanges written in Golang. diff --git a/docs/FILES.md b/docs/FILES.md index f8317ec6089..5fef73ffa09 100644 --- a/docs/FILES.md +++ b/docs/FILES.md @@ -5,7 +5,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) A cryptocurrency trading bot supporting multiple exchanges written in Golang. diff --git a/docs/OHLCV.md b/docs/OHLCV.md index 3f55f180668..d379e34c2fb 100644 --- a/docs/OHLCV.md +++ b/docs/OHLCV.md @@ -5,14 +5,14 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) This exchanges package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/docs/README.md b/docs/README.md index 256234cb3ab..69303116985 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,7 +5,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) A cryptocurrency trading bot supporting multiple exchanges written in Golang. diff --git a/engine/apiserver.md b/engine/apiserver.md index 6e71865c0c5..05588b1236f 100644 --- a/engine/apiserver.md +++ b/engine/apiserver.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/apiserver) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This apiserver package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/communication_manager.md b/engine/communication_manager.md index 0c350d7107a..5292f60164d 100644 --- a/engine/communication_manager.md +++ b/engine/communication_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/communication_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This communication_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/connection_manager.md b/engine/connection_manager.md index 13e3b689ff7..e63697f581c 100644 --- a/engine/connection_manager.md +++ b/engine/connection_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/connection_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This connection_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/currency_state_manager.md b/engine/currency_state_manager.md index e84b08aa23d..5e938e72fab 100644 --- a/engine/currency_state_manager.md +++ b/engine/currency_state_manager.md @@ -1,22 +1,22 @@ -# GoCryptoTrader package Currency state manager - - - - -[![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) -[![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) -[![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/currency_state_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) -[![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) - - -This currency_state_manager package is part of the GoCryptoTrader codebase. - -## This is still in active development - -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). - -Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) +# GoCryptoTrader package Currency state manager + + + + +[![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) +[![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) +[![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/currency_state_manager) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) +[![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) + + +This currency_state_manager package is part of the GoCryptoTrader codebase. + +## This is still in active development + +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). + +Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) ## Current Features for Currency state manager + The state manager keeps currency states up to date, which include: @@ -27,22 +27,22 @@ Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader + This allows for an internal state check to compliment internal and external strategies. - -## Contribution - -Please feel free to submit any pull requests or suggest any desired features to be added. - -When submitting a PR, please abide by our coding guidelines: - -+ Code must adhere to the official Go [formatting](https://golang.org/doc/effective_go.html#formatting) guidelines (i.e. uses [gofmt](https://golang.org/cmd/gofmt/)). -+ Code must be documented adhering to the official Go [commentary](https://golang.org/doc/effective_go.html#commentary) guidelines. -+ Code must adhere to our [coding style](https://github.com/thrasher-corp/gocryptotrader/blob/master/doc/coding_style.md). -+ Pull requests need to be based on and opened against the `master` branch. - -## Donations - - - -If this framework helped you in any way, or you would like to support the developers working on it, please donate Bitcoin to: - + +## Contribution + +Please feel free to submit any pull requests or suggest any desired features to be added. + +When submitting a PR, please abide by our coding guidelines: + ++ Code must adhere to the official Go [formatting](https://golang.org/doc/effective_go.html#formatting) guidelines (i.e. uses [gofmt](https://golang.org/cmd/gofmt/)). ++ Code must be documented adhering to the official Go [commentary](https://golang.org/doc/effective_go.html#commentary) guidelines. ++ Code must adhere to our [coding style](https://github.com/thrasher-corp/gocryptotrader/blob/master/doc/coding_style.md). ++ Pull requests need to be based on and opened against the `master` branch. + +## Donations + + + +If this framework helped you in any way, or you would like to support the developers working on it, please donate Bitcoin to: + ***bc1qk0jareu4jytc0cfrhr5wgshsq8282awpavfahc*** diff --git a/engine/database_connection.md b/engine/database_connection.md index 9ebd508594c..ae941df5df4 100644 --- a/engine/database_connection.md +++ b/engine/database_connection.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/database_connection) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This database_connection package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/datahistory_manager.md b/engine/datahistory_manager.md index 1141c9ae952..bc60ebc3275 100644 --- a/engine/datahistory_manager.md +++ b/engine/datahistory_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/datahistory_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This datahistory_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/depositaddress.md b/engine/depositaddress.md index 7d00ec0b52b..20cee4f7d7c 100644 --- a/engine/depositaddress.md +++ b/engine/depositaddress.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/depositaddress) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This depositaddress package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/event_manager.md b/engine/event_manager.md index f5db52e3703..c1463284827 100644 --- a/engine/event_manager.md +++ b/engine/event_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/event_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This event_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/exchange_manager.md b/engine/exchange_manager.md index 1b671b9ef75..f44ae370998 100644 --- a/engine/exchange_manager.md +++ b/engine/exchange_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/exchange_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This exchange_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/ntp_manager.md b/engine/ntp_manager.md index 6feb653b5ea..81f90b1907c 100644 --- a/engine/ntp_manager.md +++ b/engine/ntp_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/ntp_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This ntp_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/order_manager.md b/engine/order_manager.md index 3ecac298197..46dd9ca6aeb 100644 --- a/engine/order_manager.md +++ b/engine/order_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/order_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This order_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/portfolio_manager.md b/engine/portfolio_manager.md index 9243699e0c1..37953ee8e73 100644 --- a/engine/portfolio_manager.md +++ b/engine/portfolio_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/portfolio_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This portfolio_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/subsystem_types.md b/engine/subsystem_types.md index 070dcb99f3a..507bde0c4a5 100644 --- a/engine/subsystem_types.md +++ b/engine/subsystem_types.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/subsystem_types) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This subsystem_types package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/sync_manager.md b/engine/sync_manager.md index c9c7f92f889..9ccb98ec724 100644 --- a/engine/sync_manager.md +++ b/engine/sync_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/sync_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This sync_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/websocketroutine_manager.md b/engine/websocketroutine_manager.md index de4585e296e..1beb7ebf6c9 100644 --- a/engine/websocketroutine_manager.md +++ b/engine/websocketroutine_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/websocketroutine_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This websocketroutine_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/engine/withdraw_manager.md b/engine/withdraw_manager.md index e162d523f97..5d34f20e628 100644 --- a/engine/withdraw_manager.md +++ b/engine/withdraw_manager.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/engine/withdraw_manager) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This withdraw_manager package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/README.md b/exchanges/README.md index 8e2de29e454..3efe6a8d279 100644 --- a/exchanges/README.md +++ b/exchanges/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This exchanges package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/alert/README.md b/exchanges/alert/README.md index e1a27f32552..54ba854796e 100644 --- a/exchanges/alert/README.md +++ b/exchanges/alert/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/alert) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This alert package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/alphapoint/README.md b/exchanges/alphapoint/README.md index 2406c681562..26c8efe3a63 100644 --- a/exchanges/alphapoint/README.md +++ b/exchanges/alphapoint/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/alphapoint) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This alphapoint package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/binance/README.md b/exchanges/binance/README.md index 2f562827a1a..162612f70d3 100644 --- a/exchanges/binance/README.md +++ b/exchanges/binance/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/binance) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This binance package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/binanceus/README.md b/exchanges/binanceus/README.md index 4a6e4bfa2e8..0dc93d3e409 100644 --- a/exchanges/binanceus/README.md +++ b/exchanges/binanceus/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/binanceus) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This binanceus package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/bitfinex/README.md b/exchanges/bitfinex/README.md index a8795104e0c..9792b7f75ef 100644 --- a/exchanges/bitfinex/README.md +++ b/exchanges/bitfinex/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/bitfinex) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This bitfinex package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/bitflyer/README.md b/exchanges/bitflyer/README.md index 18ce2ad2b09..c127446b46c 100644 --- a/exchanges/bitflyer/README.md +++ b/exchanges/bitflyer/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/bitflyer) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This bitflyer package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/bithumb/README.md b/exchanges/bithumb/README.md index be053245104..a9593064b65 100644 --- a/exchanges/bithumb/README.md +++ b/exchanges/bithumb/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/bithumb) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This bithumb package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/bitmex/README.md b/exchanges/bitmex/README.md index 73f40772823..d60caf37849 100644 --- a/exchanges/bitmex/README.md +++ b/exchanges/bitmex/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/bitmex) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This bitmex package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/bitstamp/README.md b/exchanges/bitstamp/README.md index c67e749f030..cdf65b96e5f 100644 --- a/exchanges/bitstamp/README.md +++ b/exchanges/bitstamp/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/bitstamp) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This bitstamp package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/btcmarkets/README.md b/exchanges/btcmarkets/README.md index f7f143e5b5c..940d103e960 100644 --- a/exchanges/btcmarkets/README.md +++ b/exchanges/btcmarkets/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/btcmarkets) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This btcmarkets package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/btse/README.md b/exchanges/btse/README.md index 1312f295e66..6c8f671a86f 100644 --- a/exchanges/btse/README.md +++ b/exchanges/btse/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/btse) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This btse package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/bybit/README.md b/exchanges/bybit/README.md index 2bb42dc0502..bffee5e1794 100644 --- a/exchanges/bybit/README.md +++ b/exchanges/bybit/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/bybit) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This bybit package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/coinbasepro/README.md b/exchanges/coinbasepro/README.md index 5158646f585..25be64ecc13 100644 --- a/exchanges/coinbasepro/README.md +++ b/exchanges/coinbasepro/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/coinbasepro) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This coinbasepro package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/coinut/README.md b/exchanges/coinut/README.md index 944a2508057..5a0e4d832ce 100644 --- a/exchanges/coinut/README.md +++ b/exchanges/coinut/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/coinut) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This coinut package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/deribit/README.md b/exchanges/deribit/README.md index c57cbd7ad4d..57e04fdcaee 100644 --- a/exchanges/deribit/README.md +++ b/exchanges/deribit/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/deribit) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This deribit package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/exmo/README.md b/exchanges/exmo/README.md index 2de9d9e5b1b..0337d45b903 100644 --- a/exchanges/exmo/README.md +++ b/exchanges/exmo/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/exmo) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This exmo package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/gateio/README.md b/exchanges/gateio/README.md index b9a4b43ba02..0f2544cfc18 100644 --- a/exchanges/gateio/README.md +++ b/exchanges/gateio/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/gateio) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This gateio package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/gemini/README.md b/exchanges/gemini/README.md index 5b2d6891b4d..1984e823114 100644 --- a/exchanges/gemini/README.md +++ b/exchanges/gemini/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/gemini) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This gemini package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/hitbtc/README.md b/exchanges/hitbtc/README.md index da67c56bf62..ba363a8aeec 100644 --- a/exchanges/hitbtc/README.md +++ b/exchanges/hitbtc/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/hitbtc) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This hitbtc package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/huobi/README.md b/exchanges/huobi/README.md index daa874a58b4..d9286604326 100644 --- a/exchanges/huobi/README.md +++ b/exchanges/huobi/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/huobi) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This huobi package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/kraken/README.md b/exchanges/kraken/README.md index e266b0e088e..3284721a4d5 100644 --- a/exchanges/kraken/README.md +++ b/exchanges/kraken/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/kraken) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This kraken package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/kucoin/README.md b/exchanges/kucoin/README.md index 3e122a4d61c..3439d186f84 100644 --- a/exchanges/kucoin/README.md +++ b/exchanges/kucoin/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/kucoin) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This kucoin package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/lbank/README.md b/exchanges/lbank/README.md index 1ea23d3fb9e..72997abd5e1 100644 --- a/exchanges/lbank/README.md +++ b/exchanges/lbank/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/lbank) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This lbank package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/mock/README.md b/exchanges/mock/README.md index 4943d2af4e0..71bc21e9cf4 100644 --- a/exchanges/mock/README.md +++ b/exchanges/mock/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/mock) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This mock package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/nonce/README.md b/exchanges/nonce/README.md index 692d383be13..6315eca892c 100644 --- a/exchanges/nonce/README.md +++ b/exchanges/nonce/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/nonce) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This nonce package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/okx/README.md b/exchanges/okx/README.md index c1611fc1c12..642d8ad184d 100644 --- a/exchanges/okx/README.md +++ b/exchanges/okx/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/okx) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This okx package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/order/README.md b/exchanges/order/README.md index f3ae045fd9b..318de7b1742 100644 --- a/exchanges/order/README.md +++ b/exchanges/order/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/order) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This order package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/orderbook/README.md b/exchanges/orderbook/README.md index fcc007fa8ef..502b780b459 100644 --- a/exchanges/orderbook/README.md +++ b/exchanges/orderbook/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/orderbook) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This orderbook package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/poloniex/README.md b/exchanges/poloniex/README.md index ea8fdde68cb..1d83fef9a8c 100644 --- a/exchanges/poloniex/README.md +++ b/exchanges/poloniex/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/poloniex) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This poloniex package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/request/README.md b/exchanges/request/README.md index 13f3c4a04b0..67c9d98cf6d 100644 --- a/exchanges/request/README.md +++ b/exchanges/request/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/request) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This request package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/stats/README.md b/exchanges/stats/README.md index 3ce9a3cfc93..95e7e9da2ba 100644 --- a/exchanges/stats/README.md +++ b/exchanges/stats/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/stats) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This stats package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/subscription/README.md b/exchanges/subscription/README.md index e7616b931e9..501eb6cf540 100644 --- a/exchanges/subscription/README.md +++ b/exchanges/subscription/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/subscription) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This subscription package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) @@ -71,6 +71,7 @@ Templates do not need to worry about joining around separators; Trailing separat Template functions should panic to handle errors. They are caught by text/template and turned into errors for use in `subscription.expandTemplate`. + ## Contribution Please feel free to submit any pull requests or suggest any desired features to be added. diff --git a/exchanges/ticker/README.md b/exchanges/ticker/README.md index 1eda916cb42..6c36593acfc 100644 --- a/exchanges/ticker/README.md +++ b/exchanges/ticker/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/ticker) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This ticker package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/trade/README.md b/exchanges/trade/README.md index 8eb1ef15feb..4ad4faef4db 100644 --- a/exchanges/trade/README.md +++ b/exchanges/trade/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/trade) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This trade package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/validate/README.md b/exchanges/validate/README.md index a8e7d657099..5d4f68953b5 100644 --- a/exchanges/validate/README.md +++ b/exchanges/validate/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/validate) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This validate package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/exchanges/yobit/README.md b/exchanges/yobit/README.md index 7f870fb635d..d429afc8ac6 100644 --- a/exchanges/yobit/README.md +++ b/exchanges/yobit/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/exchanges/yobit) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This yobit package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/gctrpc/README.md b/gctrpc/README.md index 451779557be..d697f5b5df3 100644 --- a/gctrpc/README.md +++ b/gctrpc/README.md @@ -5,7 +5,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) A cryptocurrency trading bot supporting multiple exchanges written in Golang. diff --git a/gctscript/README.md b/gctscript/README.md index 1e47fc8da84..bceb07ad56c 100644 --- a/gctscript/README.md +++ b/gctscript/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/portfolio) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This gctscript package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/portfolio/README.md b/portfolio/README.md index ba24c852ace..8f5768d3d0a 100644 --- a/portfolio/README.md +++ b/portfolio/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/portfolio) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This portfolio package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/testdata/README.md b/testdata/README.md index 42a528941dc..4c9c08899c7 100644 --- a/testdata/README.md +++ b/testdata/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This testdata package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/web/README.md b/web/README.md index 2af3545ddb0..19fe644f630 100644 --- a/web/README.md +++ b/web/README.md @@ -6,7 +6,7 @@ [![Build Status](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml/badge.svg?branch=master)](https://github.com/thrasher-corp/gocryptotrader/actions/workflows/tests.yml) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-corp/gocryptotrader/blob/master/LICENSE) [![GoDoc](https://godoc.org/github.com/thrasher-corp/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-corp/gocryptotrader/web) -[![Coverage Status](http://codecov.io/github/thrasher-corp/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-corp/gocryptotrader?branch=master) +[![Coverage Status](https://codecov.io/gh/thrasher-corp/gocryptotrader/graph/badge.svg?token=41784B23TS)](https://codecov.io/gh/thrasher-corp/gocryptotrader) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-corp/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-corp/gocryptotrader) @@ -14,7 +14,7 @@ This web package is part of the GoCryptoTrader codebase. ## This is still in active development -You can track ideas, planned features and what's in progress on this Trello board: [https://trello.com/b/ZAhMhpOy/gocryptotrader](https://trello.com/b/ZAhMhpOy/gocryptotrader). +You can track ideas, planned features and what's in progress on our [GoCryptoTrader Kanban board](https://github.com/orgs/thrasher-corp/projects/3). Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://join.slack.com/t/gocryptotrader/shared_invite/enQtNTQ5NDAxMjA2Mjc5LTc5ZDE1ZTNiOGM3ZGMyMmY1NTAxYWZhODE0MWM5N2JlZDk1NDU0YTViYzk4NTk3OTRiMDQzNGQ1YTc4YmRlMTk) diff --git a/web/src/app/app.component.html b/web/src/app/app.component.html index 30362a3ad17..46a49d94978 100644 --- a/web/src/app/app.component.html +++ b/web/src/app/app.component.html @@ -42,8 +42,8 @@

Help

view_agenda  - -

Trello

+
+

Kanban

From d172f3dfe107dae3f8ea941aad24b23b1a362e9c Mon Sep 17 00:00:00 2001 From: Adrian Gallagher Date: Fri, 8 Nov 2024 10:11:13 +1100 Subject: [PATCH 02/10] gateio: Update contract settlement currencies (#1702) * gateio: Update contract settlement currencies * GateIO: Fix TestGetSettlementFromCurrency race --- exchanges/gateio/gateio.go | 673 ++++++++++++++--------------- exchanges/gateio/gateio_test.go | 668 +++++++++++----------------- exchanges/gateio/gateio_types.go | 15 +- exchanges/gateio/gateio_wrapper.go | 162 +++---- 4 files changed, 643 insertions(+), 875 deletions(-) diff --git a/exchanges/gateio/gateio.go b/exchanges/gateio/gateio.go index 7d932a8d13e..11d0dcd34c8 100644 --- a/exchanges/gateio/gateio.go +++ b/exchanges/gateio/gateio.go @@ -10,6 +10,7 @@ import ( "fmt" "net/http" "net/url" + "slices" "strconv" "strings" "time" @@ -133,42 +134,42 @@ const ( ) var ( - errEmptySettlementCurrency = errors.New("empty settlement currency") - errInvalidOrMissingContractParam = errors.New("invalid or empty contract") - errNoValidResponseFromServer = errors.New("no valid response from server") - errInvalidUnderlying = errors.New("missing underlying") - errInvalidOrderSize = errors.New("invalid order size") - errInvalidOrderID = errors.New("invalid order id") - errInvalidAmount = errors.New("invalid amount") - errInvalidOrEmptySubaccount = errors.New("invalid or empty subaccount") - errInvalidTransferDirection = errors.New("invalid transfer direction") - errInvalidOrderSide = errors.New("invalid order side") - errDifferentAccount = errors.New("account type must be identical for all orders") - errInvalidPrice = errors.New("invalid price") - errNoValidParameterPassed = errors.New("no valid parameter passed") - errInvalidCountdown = errors.New("invalid countdown, Countdown time, in seconds At least 5 seconds, 0 means cancel the countdown") - errInvalidOrderStatus = errors.New("invalid order status") - errInvalidLoanSide = errors.New("invalid loan side, only 'lend' and 'borrow'") - errInvalidLoanID = errors.New("missing loan ID") - errInvalidRepayMode = errors.New("invalid repay mode specified, must be 'all' or 'partial'") - errMissingPreviewID = errors.New("missing required parameter: preview_id") - errChangeHasToBePositive = errors.New("change has to be positive") - errInvalidLeverageValue = errors.New("invalid leverage value") - errInvalidRiskLimit = errors.New("new position risk limit") - errInvalidCountTotalValue = errors.New("invalid \"count_total\" value, supported \"count_total\" values are 0 and 1") - errInvalidTimeInForce = errors.New("invalid time in force value") - errInvalidAutoSizeValue = errors.New("invalid \"auto_size\" value, only \"close_long\" and \"close_short\" are supported") - errTooManyOrderRequest = errors.New("too many order creation request") - errInvalidTimeout = errors.New("invalid timeout, should be in seconds At least 5 seconds, 0 means cancel the countdown") - errNoTickerData = errors.New("no ticker data available") - errNilArgument = errors.New("null argument") - errInvalidTimezone = errors.New("invalid timezone") - errMultipleOrders = errors.New("multiple orders passed") - errMissingWithdrawalID = errors.New("missing withdrawal ID") - errInvalidSubAccountUserID = errors.New("sub-account user id is required") - errCannotParseSettlementCurrency = errors.New("cannot derive settlement currency") - errMissingAPIKey = errors.New("missing API key information") - errInvalidTextValue = errors.New("invalid text value, requires prefix `t-`") + errEmptyOrInvalidSettlementCurrency = errors.New("empty or invalid settlement currency") + errInvalidOrMissingContractParam = errors.New("invalid or empty contract") + errNoValidResponseFromServer = errors.New("no valid response from server") + errInvalidUnderlying = errors.New("missing underlying") + errInvalidOrderSize = errors.New("invalid order size") + errInvalidOrderID = errors.New("invalid order id") + errInvalidAmount = errors.New("invalid amount") + errInvalidOrEmptySubaccount = errors.New("invalid or empty subaccount") + errInvalidTransferDirection = errors.New("invalid transfer direction") + errInvalidOrderSide = errors.New("invalid order side") + errDifferentAccount = errors.New("account type must be identical for all orders") + errInvalidPrice = errors.New("invalid price") + errNoValidParameterPassed = errors.New("no valid parameter passed") + errInvalidCountdown = errors.New("invalid countdown, Countdown time, in seconds At least 5 seconds, 0 means cancel the countdown") + errInvalidOrderStatus = errors.New("invalid order status") + errInvalidLoanSide = errors.New("invalid loan side, only 'lend' and 'borrow'") + errInvalidLoanID = errors.New("missing loan ID") + errInvalidRepayMode = errors.New("invalid repay mode specified, must be 'all' or 'partial'") + errMissingPreviewID = errors.New("missing required parameter: preview_id") + errChangeHasToBePositive = errors.New("change has to be positive") + errInvalidLeverageValue = errors.New("invalid leverage value") + errInvalidRiskLimit = errors.New("new position risk limit") + errInvalidCountTotalValue = errors.New("invalid \"count_total\" value, supported \"count_total\" values are 0 and 1") + errInvalidTimeInForce = errors.New("invalid time in force value") + errInvalidAutoSizeValue = errors.New("invalid \"auto_size\" value, only \"close_long\" and \"close_short\" are supported") + errTooManyOrderRequest = errors.New("too many order creation request") + errInvalidTimeout = errors.New("invalid timeout, should be in seconds At least 5 seconds, 0 means cancel the countdown") + errNoTickerData = errors.New("no ticker data available") + errNilArgument = errors.New("null argument") + errInvalidTimezone = errors.New("invalid timezone") + errMultipleOrders = errors.New("multiple orders passed") + errMissingWithdrawalID = errors.New("missing withdrawal ID") + errInvalidSubAccountUserID = errors.New("sub-account user id is required") + errCannotParseSettlementCurrency = errors.New("cannot derive settlement currency") + errMissingAPIKey = errors.New("missing API key information") + errInvalidTextValue = errors.New("invalid text value, requires prefix `t-`") ) // Gateio is the overarching type across this package @@ -1298,13 +1299,13 @@ func (g *Gateio) GetSubAccountMarginBalances(ctx context.Context, subAccountUser } // GetSubAccountFuturesBalances retrieves sub accounts' futures account balances -func (g *Gateio) GetSubAccountFuturesBalances(ctx context.Context, subAccountUserID, settle string) ([]FuturesSubAccountBalance, error) { +func (g *Gateio) GetSubAccountFuturesBalances(ctx context.Context, subAccountUserID string, settle currency.Code) ([]FuturesSubAccountBalance, error) { params := url.Values{} if subAccountUserID != "" { params.Set("sub_uid", subAccountUserID) } - if settle != "" { - params.Set("settle", settle) + if !settle.IsEmpty() { + params.Set("settle", settle.Item.Lower) } var response []FuturesSubAccountBalance return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, walletEPL, http.MethodGet, walletSubAccountFuturesBalance, params, nil, &response) @@ -1338,14 +1339,14 @@ func (g *Gateio) GetSavedAddresses(ctx context.Context, ccy currency.Code, chain } // GetPersonalTradingFee retrieves personal trading fee -func (g *Gateio) GetPersonalTradingFee(ctx context.Context, currencyPair currency.Pair, settle string) (*PersonalTradingFee, error) { +func (g *Gateio) GetPersonalTradingFee(ctx context.Context, currencyPair currency.Pair, settle currency.Code) (*PersonalTradingFee, error) { params := url.Values{} if currencyPair.IsPopulated() { // specify a currency pair to retrieve precise fee rate params.Set("currency_pair", currencyPair.String()) } - if settle != "" { - params.Set("settle", settle) + if !settle.IsEmpty() { + params.Set("settle", settle.Item.Lower) } var response *PersonalTradingFee return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, walletEPL, http.MethodGet, walletTradingFee, params, nil, &response) @@ -1849,36 +1850,33 @@ func (g *Gateio) GetSingleBorrowLoanDetail(ctx context.Context, loanID string) ( // *********************************Futures*************************************** // GetAllFutureContracts retrieves list all futures contracts -func (g *Gateio) GetAllFutureContracts(ctx context.Context, settle string) ([]FuturesContract, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetAllFutureContracts(ctx context.Context, settle currency.Code) ([]FuturesContract, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } var contracts []FuturesContract - return contracts, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, futuresPath+settle+"/contracts", &contracts) + return contracts, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, futuresPath+settle.Item.Lower+"/contracts", &contracts) } // GetSingleContract returns a single contract info for the specified settle and Currency Pair (contract << in this case) -func (g *Gateio) GetSingleContract(ctx context.Context, settle, contract string) (*FuturesContract, error) { +func (g *Gateio) GetSingleContract(ctx context.Context, settle currency.Code, contract string) (*FuturesContract, error) { if contract == "" { return nil, currency.ErrCurrencyPairEmpty } - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } var futureContract *FuturesContract - return futureContract, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, futuresPath+settle+"/contracts/"+contract, &futureContract) + return futureContract, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, futuresPath+settle.Item.Lower+"/contracts/"+contract, &futureContract) } // GetFuturesOrderbook retrieves futures order book data -func (g *Gateio) GetFuturesOrderbook(ctx context.Context, settle, contract, interval string, limit uint64, withOrderbookID bool) (*Orderbook, error) { +func (g *Gateio) GetFuturesOrderbook(ctx context.Context, settle currency.Code, contract, interval string, limit uint64, withOrderbookID bool) (*Orderbook, error) { if contract == "" { return nil, currency.ErrCurrencyPairEmpty } - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} params.Set("contract", contract) @@ -1892,14 +1890,13 @@ func (g *Gateio) GetFuturesOrderbook(ctx context.Context, settle, contract, inte params.Set("with_id", "true") } var response *Orderbook - return response, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(futuresPath+settle+"/order_book", params), &response) + return response, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(futuresPath+settle.Item.Lower+"/order_book", params), &response) } // GetFuturesTradingHistory retrieves futures trading history -func (g *Gateio) GetFuturesTradingHistory(ctx context.Context, settle string, contract currency.Pair, limit, offset uint64, lastID string, from, to time.Time) ([]TradingHistoryItem, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetFuturesTradingHistory(ctx context.Context, settle currency.Code, contract currency.Pair, limit, offset uint64, lastID string, from, to time.Time) ([]TradingHistoryItem, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsEmpty() { return nil, currency.ErrCurrencyPairEmpty @@ -1923,14 +1920,13 @@ func (g *Gateio) GetFuturesTradingHistory(ctx context.Context, settle string, co } var response []TradingHistoryItem return response, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, - common.EncodeURLValues(futuresPath+settle+"/trades", params), &response) + common.EncodeURLValues(futuresPath+settle.Item.Lower+"/trades", params), &response) } // GetFuturesCandlesticks retrieves specified contract candlesticks. -func (g *Gateio) GetFuturesCandlesticks(ctx context.Context, settle, contract string, from, to time.Time, limit uint64, interval kline.Interval) ([]FuturesCandlestick, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetFuturesCandlesticks(ctx context.Context, settle currency.Code, contract string, from, to time.Time, limit uint64, interval kline.Interval) ([]FuturesCandlestick, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract == "" { return nil, currency.ErrCurrencyPairEmpty @@ -1955,15 +1951,15 @@ func (g *Gateio) GetFuturesCandlesticks(ctx context.Context, settle, contract st } var candlesticks []FuturesCandlestick return candlesticks, g.SendHTTPRequest(ctx, exchange.RestFutures, perpetualSwapDefaultEPL, - common.EncodeURLValues(futuresPath+settle+"/candlesticks", params), + common.EncodeURLValues(futuresPath+settle.Item.Lower+"/candlesticks", params), &candlesticks) } // PremiumIndexKLine retrieves premium Index K-Line // Maximum of 1000 points can be returned in a query. Be sure not to exceed the limit when specifying from, to and interval -func (g *Gateio) PremiumIndexKLine(ctx context.Context, settleCurrency string, contract currency.Pair, from, to time.Time, limit int64, interval kline.Interval) ([]FuturesPremiumIndexKLineResponse, error) { - if settleCurrency == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) PremiumIndexKLine(ctx context.Context, settleCurrency currency.Code, contract currency.Pair, from, to time.Time, limit int64, interval kline.Interval) ([]FuturesPremiumIndexKLineResponse, error) { + if settleCurrency.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsEmpty() { return nil, currency.ErrCurrencyPairEmpty @@ -1985,28 +1981,26 @@ func (g *Gateio) PremiumIndexKLine(ctx context.Context, settleCurrency string, c } params.Set("interval", intervalString) var resp []FuturesPremiumIndexKLineResponse - return resp, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(futuresPath+settleCurrency+"/premium_index", params), &resp) + return resp, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(futuresPath+settleCurrency.Item.Lower+"/premium_index", params), &resp) } // GetFuturesTickers retrieves futures ticker information for a specific settle and contract info. -func (g *Gateio) GetFuturesTickers(ctx context.Context, settle string, contract currency.Pair) ([]FuturesTicker, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetFuturesTickers(ctx context.Context, settle currency.Code, contract currency.Pair) ([]FuturesTicker, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if contract.IsPopulated() { params.Set("contract", contract.String()) } var tickers []FuturesTicker - return tickers, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(futuresPath+settle+"/tickers", params), &tickers) + return tickers, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(futuresPath+settle.Item.Lower+"/tickers", params), &tickers) } // GetFutureFundingRates retrieves funding rate information. -func (g *Gateio) GetFutureFundingRates(ctx context.Context, settle string, contract currency.Pair, limit uint64) ([]FuturesFundingRate, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetFutureFundingRates(ctx context.Context, settle currency.Code, contract currency.Pair, limit uint64) ([]FuturesFundingRate, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, currency.ErrCurrencyPairEmpty @@ -2017,14 +2011,13 @@ func (g *Gateio) GetFutureFundingRates(ctx context.Context, settle string, contr params.Set("limit", strconv.FormatUint(limit, 10)) } var rates []FuturesFundingRate - return rates, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(futuresPath+settle+"/funding_rate", params), &rates) + return rates, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(futuresPath+settle.Item.Lower+"/funding_rate", params), &rates) } // GetFuturesInsuranceBalanceHistory retrieves futures insurance balance history -func (g *Gateio) GetFuturesInsuranceBalanceHistory(ctx context.Context, settle string, limit uint64) ([]InsuranceBalance, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetFuturesInsuranceBalanceHistory(ctx context.Context, settle currency.Code, limit uint64) ([]InsuranceBalance, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if limit > 0 { @@ -2033,15 +2026,14 @@ func (g *Gateio) GetFuturesInsuranceBalanceHistory(ctx context.Context, settle s var balances []InsuranceBalance return balances, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, - common.EncodeURLValues(futuresPath+settle+"/insurance", params), + common.EncodeURLValues(futuresPath+settle.Item.Lower+"/insurance", params), &balances) } // GetFutureStats retrieves futures stats -func (g *Gateio) GetFutureStats(ctx context.Context, settle string, contract currency.Pair, from time.Time, interval kline.Interval, limit uint64) ([]ContractStat, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetFutureStats(ctx context.Context, settle currency.Code, contract currency.Pair, from time.Time, interval kline.Interval, limit uint64) ([]ContractStat, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, currency.ErrCurrencyPairEmpty @@ -2064,15 +2056,14 @@ func (g *Gateio) GetFutureStats(ctx context.Context, settle string, contract cur var stats []ContractStat return stats, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, - common.EncodeURLValues(futuresPath+settle+"/contract_stats", params), + common.EncodeURLValues(futuresPath+settle.Item.Lower+"/contract_stats", params), &stats) } // GetIndexConstituent retrieves index constituents -func (g *Gateio) GetIndexConstituent(ctx context.Context, settle, index string) (*IndexConstituent, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetIndexConstituent(ctx context.Context, settle currency.Code, index string) (*IndexConstituent, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if index == "" { return nil, currency.ErrCurrencyPairEmpty @@ -2081,15 +2072,14 @@ func (g *Gateio) GetIndexConstituent(ctx context.Context, settle, index string) var constituents *IndexConstituent return constituents, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, - futuresPath+settle+"/index_constituents/"+indexString, + futuresPath+settle.Item.Lower+"/index_constituents/"+indexString, &constituents) } // GetLiquidationHistory retrieves liqudiation history -func (g *Gateio) GetLiquidationHistory(ctx context.Context, settle string, contract currency.Pair, from, to time.Time, limit uint64) ([]LiquidationHistory, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetLiquidationHistory(ctx context.Context, settle currency.Code, contract currency.Pair, from, to time.Time, limit uint64) ([]LiquidationHistory, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, errInvalidOrMissingContractParam @@ -2108,24 +2098,23 @@ func (g *Gateio) GetLiquidationHistory(ctx context.Context, settle string, contr var histories []LiquidationHistory return histories, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, - common.EncodeURLValues(futuresPath+settle+"/liq_orders", params), + common.EncodeURLValues(futuresPath+settle.Item.Lower+"/liq_orders", params), &histories) } // QueryFuturesAccount retrieves futures account -func (g *Gateio) QueryFuturesAccount(ctx context.Context, settle string) (*FuturesAccount, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) QueryFuturesAccount(ctx context.Context, settle currency.Code) (*FuturesAccount, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } var response *FuturesAccount - return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, futuresPath+settle+"/accounts", nil, nil, &response) + return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, futuresPath+settle.Item.Lower+"/accounts", nil, nil, &response) } // GetFuturesAccountBooks retrieves account books -func (g *Gateio) GetFuturesAccountBooks(ctx context.Context, settle string, limit uint64, from, to time.Time, changingType string) ([]AccountBookItem, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetFuturesAccountBooks(ctx context.Context, settle currency.Code, limit uint64, from, to time.Time, changingType string) ([]AccountBookItem, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if limit > 0 { @@ -2142,44 +2131,43 @@ func (g *Gateio) GetFuturesAccountBooks(ctx context.Context, settle string, limi } var response []AccountBookItem return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, - http.MethodGet, futuresPath+settle+"/account_book", + http.MethodGet, futuresPath+settle.Item.Lower+"/account_book", params, nil, &response) } // GetAllFuturesPositionsOfUsers list all positions of users. -func (g *Gateio) GetAllFuturesPositionsOfUsers(ctx context.Context, settle string, realPositionsOnly bool) ([]Position, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetAllFuturesPositionsOfUsers(ctx context.Context, settle currency.Code, realPositionsOnly bool) ([]Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if realPositionsOnly { params.Set("holding", "true") } var response []Position - return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, futuresPath+settle+"/positions", params, nil, &response) + return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, futuresPath+settle.Item.Lower+"/positions", params, nil, &response) } // GetSinglePosition returns a single position -func (g *Gateio) GetSinglePosition(ctx context.Context, settle string, contract currency.Pair) (*Position, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetSinglePosition(ctx context.Context, settle currency.Code, contract currency.Pair) (*Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) } var response *Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, - http.MethodPost, futuresPath+settle+positionsPath+contract.String(), + http.MethodPost, futuresPath+settle.Item.Lower+positionsPath+contract.String(), nil, nil, &response) } // UpdateFuturesPositionMargin represents account position margin for a futures contract. -func (g *Gateio) UpdateFuturesPositionMargin(ctx context.Context, settle string, change float64, contract currency.Pair) (*Position, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) UpdateFuturesPositionMargin(ctx context.Context, settle currency.Code, change float64, contract currency.Pair) (*Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2192,14 +2180,14 @@ func (g *Gateio) UpdateFuturesPositionMargin(ctx context.Context, settle string, var response *Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, - http.MethodPost, futuresPath+settle+positionsPath+contract.String()+"/margin", + http.MethodPost, futuresPath+settle.Item.Lower+positionsPath+contract.String()+"/margin", params, nil, &response) } // UpdateFuturesPositionLeverage update position leverage -func (g *Gateio) UpdateFuturesPositionLeverage(ctx context.Context, settle string, contract currency.Pair, leverage, crossLeverageLimit float64) (*Position, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) UpdateFuturesPositionLeverage(ctx context.Context, settle currency.Code, contract currency.Pair, leverage, crossLeverageLimit float64) (*Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2215,13 +2203,13 @@ func (g *Gateio) UpdateFuturesPositionLeverage(ctx context.Context, settle strin var response *Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, - futuresPath+settle+positionsPath+contract.String()+"/leverage", params, nil, &response) + futuresPath+settle.Item.Lower+positionsPath+contract.String()+"/leverage", params, nil, &response) } // UpdateFuturesPositionRiskLimit updates the position risk limit -func (g *Gateio) UpdateFuturesPositionRiskLimit(ctx context.Context, settle string, contract currency.Pair, riskLimit uint64) (*Position, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) UpdateFuturesPositionRiskLimit(ctx context.Context, settle currency.Code, contract currency.Pair, riskLimit uint64) (*Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2230,27 +2218,27 @@ func (g *Gateio) UpdateFuturesPositionRiskLimit(ctx context.Context, settle stri params.Set("risk_limit", strconv.FormatUint(riskLimit, 10)) var response *Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, - http.MethodPost, futuresPath+settle+positionsPath+contract.String()+"/risk_limit", params, nil, &response) + http.MethodPost, futuresPath+settle.Item.Lower+positionsPath+contract.String()+"/risk_limit", params, nil, &response) } // EnableOrDisableDualMode enable or disable dual mode // Before setting dual mode, make sure all positions are closed and no orders are open -func (g *Gateio) EnableOrDisableDualMode(ctx context.Context, settle string, dualMode bool) (*DualModeResponse, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) EnableOrDisableDualMode(ctx context.Context, settle currency.Code, dualMode bool) (*DualModeResponse, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} params.Set("dual_mode", strconv.FormatBool(dualMode)) var response *DualModeResponse return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, - http.MethodGet, futuresPath+settle+"/dual_mode", + http.MethodGet, futuresPath+settle.Item.Lower+"/dual_mode", params, nil, &response) } // RetrivePositionDetailInDualMode retrieve position detail in dual mode -func (g *Gateio) RetrivePositionDetailInDualMode(ctx context.Context, settle string, contract currency.Pair) ([]Position, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) RetrivePositionDetailInDualMode(ctx context.Context, settle currency.Code, contract currency.Pair) ([]Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2258,14 +2246,14 @@ func (g *Gateio) RetrivePositionDetailInDualMode(ctx context.Context, settle str var response []Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - futuresPath+settle+"/dual_comp/positions/"+contract.String(), + futuresPath+settle.Item.Lower+"/dual_comp/positions/"+contract.String(), nil, nil, &response) } // UpdatePositionMarginInDualMode update position margin in dual mode -func (g *Gateio) UpdatePositionMarginInDualMode(ctx context.Context, settle string, contract currency.Pair, change float64, dualSide string) ([]Position, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) UpdatePositionMarginInDualMode(ctx context.Context, settle currency.Code, contract currency.Pair, change float64, dualSide string) ([]Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2279,14 +2267,14 @@ func (g *Gateio) UpdatePositionMarginInDualMode(ctx context.Context, settle stri var response []Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, - futuresPath+settle+"/dual_comp/positions/"+contract.String()+"/margin", + futuresPath+settle.Item.Lower+"/dual_comp/positions/"+contract.String()+"/margin", params, nil, &response) } // UpdatePositionLeverageInDualMode update position leverage in dual mode -func (g *Gateio) UpdatePositionLeverageInDualMode(ctx context.Context, settle string, contract currency.Pair, leverage, crossLeverageLimit float64) (*Position, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) UpdatePositionLeverageInDualMode(ctx context.Context, settle currency.Code, contract currency.Pair, leverage, crossLeverageLimit float64) (*Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2300,13 +2288,13 @@ func (g *Gateio) UpdatePositionLeverageInDualMode(ctx context.Context, settle st params.Set("cross_leverage_limit", strconv.FormatFloat(crossLeverageLimit, 'f', -1, 64)) } var response *Position - return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, futuresPath+settle+"/dual_comp/positions/"+contract.String()+"/leverage", params, nil, &response) + return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, futuresPath+settle.Item.Lower+"/dual_comp/positions/"+contract.String()+"/leverage", params, nil, &response) } // UpdatePositionRiskLimitInDualMode update position risk limit in dual mode -func (g *Gateio) UpdatePositionRiskLimitInDualMode(ctx context.Context, settle string, contract currency.Pair, riskLimit float64) ([]Position, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) UpdatePositionRiskLimitInDualMode(ctx context.Context, settle currency.Code, contract currency.Pair, riskLimit float64) ([]Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2319,7 +2307,7 @@ func (g *Gateio) UpdatePositionRiskLimitInDualMode(ctx context.Context, settle s var response []Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, - futuresPath+settle+"/dual_comp/positions/"+contract.String()+"/risk_limit", params, + futuresPath+settle.Item.Lower+"/dual_comp/positions/"+contract.String()+"/risk_limit", params, nil, &response) } @@ -2352,16 +2340,16 @@ func (g *Gateio) PlaceFuturesOrder(ctx context.Context, arg *OrderCreateParams) if arg.AutoSize != "" && (arg.AutoSize == "close_long" || arg.AutoSize == "close_short") { return nil, errInvalidAutoSizeValue } - arg.Settle = strings.ToLower(arg.Settle) - if arg.Settle == "" { - return nil, errEmptySettlementCurrency + if arg.Settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } + var response *Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, - futuresPath+arg.Settle+ordersPath, + futuresPath+arg.Settle.Item.Lower+ordersPath, nil, &arg, &response) @@ -2369,9 +2357,9 @@ func (g *Gateio) PlaceFuturesOrder(ctx context.Context, arg *OrderCreateParams) // GetFuturesOrders retrieves list of futures orders // Zero-filled order cannot be retrieved 10 minutes after order cancellation -func (g *Gateio) GetFuturesOrders(ctx context.Context, contract currency.Pair, status, lastID, settle string, limit, offset uint64, countTotal int64) ([]Order, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetFuturesOrders(ctx context.Context, contract currency.Pair, status, lastID string, settle currency.Code, limit, offset uint64, countTotal int64) ([]Order, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if !contract.IsEmpty() { @@ -2397,15 +2385,15 @@ func (g *Gateio) GetFuturesOrders(ctx context.Context, contract currency.Pair, s } var response []Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, - http.MethodGet, futuresPath+settle+ordersPath, + http.MethodGet, futuresPath+settle.Item.Lower+ordersPath, params, nil, &response) } // CancelMultipleFuturesOpenOrders ancel all open orders // Zero-filled order cannot be retrieved 10 minutes after order cancellation -func (g *Gateio) CancelMultipleFuturesOpenOrders(ctx context.Context, contract currency.Pair, side, settle string) ([]Order, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) CancelMultipleFuturesOpenOrders(ctx context.Context, contract currency.Pair, side string, settle currency.Code) ([]Order, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2417,7 +2405,7 @@ func (g *Gateio) CancelMultipleFuturesOpenOrders(ctx context.Context, contract c params.Set("contract", contract.String()) var response []Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapCancelOrdersEPL, - http.MethodDelete, futuresPath+settle+ordersPath, params, nil, &response) + http.MethodDelete, futuresPath+settle.Item.Lower+ordersPath, params, nil, &response) } // PlaceBatchFuturesOrders creates a list of futures orders @@ -2428,9 +2416,9 @@ func (g *Gateio) CancelMultipleFuturesOpenOrders(ctx context.Context, contract c // In the returned result, the succeeded field of type bool indicates whether the execution was successful or not // If the execution is successful, the normal order content is included; if the execution fails, the label field is included to indicate the cause of the error // In the rate limiting, each order is counted individually -func (g *Gateio) PlaceBatchFuturesOrders(ctx context.Context, settle string, args []OrderCreateParams) ([]Order, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) PlaceBatchFuturesOrders(ctx context.Context, settle currency.Code, args []OrderCreateParams) ([]Order, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if len(args) > 10 { return nil, errTooManyOrderRequest @@ -2457,20 +2445,20 @@ func (g *Gateio) PlaceBatchFuturesOrders(ctx context.Context, settle string, arg if args[x].AutoSize != "" && (args[x].AutoSize == "close_long" || args[x].AutoSize == "close_short") { return nil, errInvalidAutoSizeValue } - if args[x].Settle != settleBTC && args[x].Settle != settleUSD && args[x].Settle != settleUSDT { - return nil, errEmptySettlementCurrency + if !args[x].Settle.Equal(currency.BTC) && !args[x].Settle.Equal(currency.USDT) { + return nil, errEmptyOrInvalidSettlementCurrency } } var response []Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, - http.MethodPost, futuresPath+settle+"/batch_orders", + http.MethodPost, futuresPath+settle.Item.Lower+"/batch_orders", nil, &args, &response) } // GetSingleFuturesOrder retrieves a single order by its identifier -func (g *Gateio) GetSingleFuturesOrder(ctx context.Context, settle, orderID string) (*Order, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetSingleFuturesOrder(ctx context.Context, settle currency.Code, orderID string) (*Order, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if orderID == "" { return nil, fmt.Errorf("%w, 'order_id' cannot be empty", errInvalidOrderID) @@ -2478,27 +2466,27 @@ func (g *Gateio) GetSingleFuturesOrder(ctx context.Context, settle, orderID stri var response *Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, - http.MethodGet, futuresPath+settle+"/orders/"+orderID, + http.MethodGet, futuresPath+settle.Item.Lower+"/orders/"+orderID, nil, nil, &response) } // CancelSingleFuturesOrder cancel a single order -func (g *Gateio) CancelSingleFuturesOrder(ctx context.Context, settle, orderID string) (*Order, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) CancelSingleFuturesOrder(ctx context.Context, settle currency.Code, orderID string) (*Order, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if orderID == "" { return nil, fmt.Errorf("%w, 'order_id' cannot be empty", errInvalidOrderID) } var response *Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapCancelOrdersEPL, http.MethodDelete, - futuresPath+settle+"/orders/"+orderID, nil, nil, &response) + futuresPath+settle.Item.Lower+"/orders/"+orderID, nil, nil, &response) } // AmendFuturesOrder amends an existing futures order -func (g *Gateio) AmendFuturesOrder(ctx context.Context, settle, orderID string, arg AmendFuturesOrderParam) (*Order, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) AmendFuturesOrder(ctx context.Context, settle currency.Code, orderID string, arg AmendFuturesOrderParam) (*Order, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if orderID == "" { return nil, fmt.Errorf("%w, 'order_id' cannot be empty", errInvalidOrderID) @@ -2508,13 +2496,13 @@ func (g *Gateio) AmendFuturesOrder(ctx context.Context, settle, orderID string, } var response *Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPut, - futuresPath+settle+"/orders/"+orderID, nil, &arg, &response) + futuresPath+settle.Item.Lower+"/orders/"+orderID, nil, &arg, &response) } // GetMyPersonalTradingHistory retrieves my personal trading history -func (g *Gateio) GetMyPersonalTradingHistory(ctx context.Context, settle, lastID, orderID string, contract currency.Pair, limit, offset, countTotal uint64) ([]TradingHistoryItem, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetMyPersonalTradingHistory(ctx context.Context, settle currency.Code, lastID, orderID string, contract currency.Pair, limit, offset, countTotal uint64) ([]TradingHistoryItem, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if contract.IsPopulated() { @@ -2537,13 +2525,13 @@ func (g *Gateio) GetMyPersonalTradingHistory(ctx context.Context, settle, lastID } var response []TradingHistoryItem return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - futuresPath+settle+"/my_trades", params, nil, &response) + futuresPath+settle.Item.Lower+"/my_trades", params, nil, &response) } // GetFuturesPositionCloseHistory lists position close history -func (g *Gateio) GetFuturesPositionCloseHistory(ctx context.Context, settle string, contract currency.Pair, limit, offset uint64, from, to time.Time) ([]PositionCloseHistoryResponse, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetFuturesPositionCloseHistory(ctx context.Context, settle currency.Code, contract currency.Pair, limit, offset uint64, from, to time.Time) ([]PositionCloseHistoryResponse, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if contract.IsPopulated() { @@ -2563,13 +2551,13 @@ func (g *Gateio) GetFuturesPositionCloseHistory(ctx context.Context, settle stri } var response []PositionCloseHistoryResponse return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - futuresPath+settle+"/position_close", params, nil, &response) + futuresPath+settle.Item.Lower+"/position_close", params, nil, &response) } // GetFuturesLiquidationHistory list liquidation history -func (g *Gateio) GetFuturesLiquidationHistory(ctx context.Context, settle string, contract currency.Pair, limit uint64, at time.Time) ([]LiquidationHistoryItem, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetFuturesLiquidationHistory(ctx context.Context, settle currency.Code, contract currency.Pair, limit uint64, at time.Time) ([]LiquidationHistoryItem, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if contract.IsPopulated() { @@ -2584,13 +2572,13 @@ func (g *Gateio) GetFuturesLiquidationHistory(ctx context.Context, settle string var response []LiquidationHistoryItem return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - futuresPath+settle+"/liquidates", params, nil, &response) + futuresPath+settle.Item.Lower+"/liquidates", params, nil, &response) } // CountdownCancelOrders represents a trigger time response -func (g *Gateio) CountdownCancelOrders(ctx context.Context, settle string, arg CountdownParams) (*TriggerTimeResponse, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) CountdownCancelOrders(ctx context.Context, settle currency.Code, arg CountdownParams) (*TriggerTimeResponse, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if arg.Timeout < 0 { return nil, errInvalidTimeout @@ -2598,16 +2586,16 @@ func (g *Gateio) CountdownCancelOrders(ctx context.Context, settle string, arg C var response *TriggerTimeResponse return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, - futuresPath+settle+"/countdown_cancel_all", nil, &arg, &response) + futuresPath+settle.Item.Lower+"/countdown_cancel_all", nil, &arg, &response) } // CreatePriceTriggeredFuturesOrder create a price-triggered order -func (g *Gateio) CreatePriceTriggeredFuturesOrder(ctx context.Context, settle string, arg *FuturesPriceTriggeredOrderParam) (*OrderID, error) { +func (g *Gateio) CreatePriceTriggeredFuturesOrder(ctx context.Context, settle currency.Code, arg *FuturesPriceTriggeredOrderParam) (*OrderID, error) { if arg == nil { return nil, errNilArgument } - if settle == "" { - return nil, errEmptySettlementCurrency + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if arg.Initial.Contract.IsEmpty() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2638,16 +2626,16 @@ func (g *Gateio) CreatePriceTriggeredFuturesOrder(ctx context.Context, settle st } var response *OrderID return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, - futuresPath+settle+priceOrdersPaths, nil, &arg, &response) + futuresPath+settle.Item.Lower+priceOrdersPaths, nil, &arg, &response) } // ListAllFuturesAutoOrders lists all open orders -func (g *Gateio) ListAllFuturesAutoOrders(ctx context.Context, status, settle string, contract currency.Pair, limit, offset uint64) ([]PriceTriggeredOrder, error) { +func (g *Gateio) ListAllFuturesAutoOrders(ctx context.Context, status string, settle currency.Code, contract currency.Pair, limit, offset uint64) ([]PriceTriggeredOrder, error) { if status != statusOpen && status != statusFinished { return nil, fmt.Errorf("%w status: %s", errInvalidOrderStatus, status) } - if settle == "" { - return nil, errEmptySettlementCurrency + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} params.Set("status", status) @@ -2663,15 +2651,14 @@ func (g *Gateio) ListAllFuturesAutoOrders(ctx context.Context, status, settle st var response []PriceTriggeredOrder return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - futuresPath+settle+priceOrdersPaths, + futuresPath+settle.Item.Lower+priceOrdersPaths, params, nil, &response) } // CancelAllFuturesOpenOrders cancels all futures open orders -func (g *Gateio) CancelAllFuturesOpenOrders(ctx context.Context, settle string, contract currency.Pair) ([]PriceTriggeredOrder, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) CancelAllFuturesOpenOrders(ctx context.Context, settle currency.Code, contract currency.Pair) ([]PriceTriggeredOrder, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2680,13 +2667,13 @@ func (g *Gateio) CancelAllFuturesOpenOrders(ctx context.Context, settle string, params.Set("contract", contract.String()) var response []PriceTriggeredOrder return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapCancelOrdersEPL, http.MethodDelete, - futuresPath+settle+priceOrdersPaths, params, nil, &response) + futuresPath+settle.Item.Lower+priceOrdersPaths, params, nil, &response) } // GetSingleFuturesPriceTriggeredOrder retrieves a single price triggered order -func (g *Gateio) GetSingleFuturesPriceTriggeredOrder(ctx context.Context, settle, orderID string) (*PriceTriggeredOrder, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetSingleFuturesPriceTriggeredOrder(ctx context.Context, settle currency.Code, orderID string) (*PriceTriggeredOrder, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if orderID == "" { return nil, errInvalidOrderID @@ -2694,50 +2681,48 @@ func (g *Gateio) GetSingleFuturesPriceTriggeredOrder(ctx context.Context, settle var response *PriceTriggeredOrder return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - futuresPath+settle+"/price_orders/"+orderID, nil, nil, &response) + futuresPath+settle.Item.Lower+"/price_orders/"+orderID, nil, nil, &response) } // CancelFuturesPriceTriggeredOrder cancel a price-triggered order -func (g *Gateio) CancelFuturesPriceTriggeredOrder(ctx context.Context, settle, orderID string) (*PriceTriggeredOrder, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) CancelFuturesPriceTriggeredOrder(ctx context.Context, settle currency.Code, orderID string) (*PriceTriggeredOrder, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if orderID == "" { return nil, errInvalidOrderID } var response *PriceTriggeredOrder return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapCancelOrdersEPL, http.MethodDelete, - futuresPath+settle+"/price_orders/"+orderID, nil, nil, &response) + futuresPath+settle.Item.Lower+"/price_orders/"+orderID, nil, nil, &response) } // *************************************** Delivery *************************************** // GetAllDeliveryContracts retrieves all futures contracts -func (g *Gateio) GetAllDeliveryContracts(ctx context.Context, settle string) ([]DeliveryContract, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetAllDeliveryContracts(ctx context.Context, settle currency.Code) ([]DeliveryContract, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } var contracts []DeliveryContract return contracts, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, - deliveryPath+settle+"/contracts", &contracts) + deliveryPath+settle.Item.Lower+"/contracts", &contracts) } // GetSingleDeliveryContracts retrieves a single delivery contract instance. -func (g *Gateio) GetSingleDeliveryContracts(ctx context.Context, settle string, contract currency.Pair) (*DeliveryContract, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetSingleDeliveryContracts(ctx context.Context, settle currency.Code, contract currency.Pair) (*DeliveryContract, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } var deliveryContract *DeliveryContract return deliveryContract, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, - deliveryPath+settle+"/contracts/"+contract.String(), &deliveryContract) + deliveryPath+settle.Item.Lower+"/contracts/"+contract.String(), &deliveryContract) } // GetDeliveryOrderbook delivery orderbook -func (g *Gateio) GetDeliveryOrderbook(ctx context.Context, settle, interval string, contract currency.Pair, limit uint64, withOrderbookID bool) (*Orderbook, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryOrderbook(ctx context.Context, settle currency.Code, interval string, contract currency.Pair, limit uint64, withOrderbookID bool) (*Orderbook, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, errInvalidOrMissingContractParam @@ -2754,14 +2739,13 @@ func (g *Gateio) GetDeliveryOrderbook(ctx context.Context, settle, interval stri params.Set("with_id", strconv.FormatBool(withOrderbookID)) } var orderbook *Orderbook - return orderbook, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(deliveryPath+settle+"/order_book", params), &orderbook) + return orderbook, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(deliveryPath+settle.Item.Lower+"/order_book", params), &orderbook) } // GetDeliveryTradingHistory retrieves futures trading history -func (g *Gateio) GetDeliveryTradingHistory(ctx context.Context, settle, lastID string, contract currency.Pair, limit uint64, from, to time.Time) ([]DeliveryTradingHistory, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryTradingHistory(ctx context.Context, settle currency.Code, lastID string, contract currency.Pair, limit uint64, from, to time.Time) ([]DeliveryTradingHistory, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, errInvalidOrMissingContractParam @@ -2782,14 +2766,13 @@ func (g *Gateio) GetDeliveryTradingHistory(ctx context.Context, settle, lastID s } var histories []DeliveryTradingHistory return histories, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, - common.EncodeURLValues(deliveryPath+settle+"/trades", params), &histories) + common.EncodeURLValues(deliveryPath+settle.Item.Lower+"/trades", params), &histories) } // GetDeliveryFuturesCandlesticks retrieves specified contract candlesticks -func (g *Gateio) GetDeliveryFuturesCandlesticks(ctx context.Context, settle string, contract currency.Pair, from, to time.Time, limit uint64, interval kline.Interval) ([]FuturesCandlestick, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryFuturesCandlesticks(ctx context.Context, settle currency.Code, contract currency.Pair, from, to time.Time, limit uint64, interval kline.Interval) ([]FuturesCandlestick, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, errInvalidOrMissingContractParam @@ -2815,29 +2798,27 @@ func (g *Gateio) GetDeliveryFuturesCandlesticks(ctx context.Context, settle stri var candlesticks []FuturesCandlestick return candlesticks, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, - common.EncodeURLValues(deliveryPath+settle+"/candlesticks", params), + common.EncodeURLValues(deliveryPath+settle.Item.Lower+"/candlesticks", params), &candlesticks) } // GetDeliveryFutureTickers retrieves futures ticker information for a specific settle and contract info. -func (g *Gateio) GetDeliveryFutureTickers(ctx context.Context, settle string, contract currency.Pair) ([]FuturesTicker, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryFutureTickers(ctx context.Context, settle currency.Code, contract currency.Pair) ([]FuturesTicker, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if contract.IsPopulated() { params.Set("contract", contract.String()) } var tickers []FuturesTicker - return tickers, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(deliveryPath+settle+"/tickers", params), &tickers) + return tickers, g.SendHTTPRequest(ctx, exchange.RestSpot, perpetualSwapDefaultEPL, common.EncodeURLValues(deliveryPath+settle.Item.Lower+"/tickers", params), &tickers) } // GetDeliveryInsuranceBalanceHistory retrieves delivery futures insurance balance history -func (g *Gateio) GetDeliveryInsuranceBalanceHistory(ctx context.Context, settle string, limit uint64) ([]InsuranceBalance, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryInsuranceBalanceHistory(ctx context.Context, settle currency.Code, limit uint64) ([]InsuranceBalance, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if limit > 0 { @@ -2845,24 +2826,23 @@ func (g *Gateio) GetDeliveryInsuranceBalanceHistory(ctx context.Context, settle } var balances []InsuranceBalance return balances, g.SendHTTPRequest(ctx, exchange.RestSpot, spotDefaultEPL, - common.EncodeURLValues(deliveryPath+settle+"/insurance", params), + common.EncodeURLValues(deliveryPath+settle.Item.Lower+"/insurance", params), &balances) } // GetDeliveryFuturesAccounts retrieves futures account -func (g *Gateio) GetDeliveryFuturesAccounts(ctx context.Context, settle string) (*FuturesAccount, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryFuturesAccounts(ctx context.Context, settle currency.Code) (*FuturesAccount, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } var response *FuturesAccount - return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, deliveryPath+settle+"/accounts", nil, nil, &response) + return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, deliveryPath+settle.Item.Lower+"/accounts", nil, nil, &response) } // GetDeliveryAccountBooks retrieves account books -func (g *Gateio) GetDeliveryAccountBooks(ctx context.Context, settle string, limit uint64, from, to time.Time, changingType string) ([]AccountBookItem, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryAccountBooks(ctx context.Context, settle currency.Code, limit uint64, from, to time.Time, changingType string) ([]AccountBookItem, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if limit > 0 { @@ -2880,39 +2860,38 @@ func (g *Gateio) GetDeliveryAccountBooks(ctx context.Context, settle string, lim var response []AccountBookItem return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+"/account_book", + deliveryPath+settle.Item.Lower+"/account_book", params, nil, &response) } // GetAllDeliveryPositionsOfUser retrieves all positions of user -func (g *Gateio) GetAllDeliveryPositionsOfUser(ctx context.Context, settle string) (*Position, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetAllDeliveryPositionsOfUser(ctx context.Context, settle currency.Code) (*Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } var response *Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+"/positions", nil, nil, &response) + deliveryPath+settle.Item.Lower+"/positions", nil, nil, &response) } // GetSingleDeliveryPosition get single position -func (g *Gateio) GetSingleDeliveryPosition(ctx context.Context, settle string, contract currency.Pair) (*Position, error) { - settle = strings.ToLower(settle) - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetSingleDeliveryPosition(ctx context.Context, settle currency.Code, contract currency.Pair) (*Position, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) } var response *Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+positionsPath+contract.String(), + deliveryPath+settle.Item.Lower+positionsPath+contract.String(), nil, nil, &response) } // UpdateDeliveryPositionMargin updates position margin -func (g *Gateio) UpdateDeliveryPositionMargin(ctx context.Context, settle string, change float64, contract currency.Pair) (*Position, error) { - if settle != settleBTC && settle != settleUSDT { - return nil, errEmptySettlementCurrency +func (g *Gateio) UpdateDeliveryPositionMargin(ctx context.Context, settle currency.Code, change float64, contract currency.Pair) (*Position, error) { + if !slices.Contains(settlementCurrencies, settle) { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2924,13 +2903,13 @@ func (g *Gateio) UpdateDeliveryPositionMargin(ctx context.Context, settle string params.Set("change", strconv.FormatFloat(change, 'f', -1, 64)) var response *Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, - deliveryPath+settle+positionsPath+contract.String()+"/margin", params, nil, &response) + deliveryPath+settle.Item.Lower+positionsPath+contract.String()+"/margin", params, nil, &response) } // UpdateDeliveryPositionLeverage updates position leverage -func (g *Gateio) UpdateDeliveryPositionLeverage(ctx context.Context, settle string, contract currency.Pair, leverage float64) (*Position, error) { - if settle != settleBTC && settle != settleUSDT { - return nil, errEmptySettlementCurrency +func (g *Gateio) UpdateDeliveryPositionLeverage(ctx context.Context, settle currency.Code, contract currency.Pair, leverage float64) (*Position, error) { + if !slices.Contains(settlementCurrencies, settle) { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2943,14 +2922,14 @@ func (g *Gateio) UpdateDeliveryPositionLeverage(ctx context.Context, settle stri var response *Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, - deliveryPath+settle+positionsPath+contract.String()+"/leverage", + deliveryPath+settle.Item.Lower+positionsPath+contract.String()+"/leverage", params, nil, &response) } // UpdateDeliveryPositionRiskLimit update position risk limit -func (g *Gateio) UpdateDeliveryPositionRiskLimit(ctx context.Context, settle string, contract currency.Pair, riskLimit uint64) (*Position, error) { - if settle != settleBTC && settle != settleUSDT { - return nil, errEmptySettlementCurrency +func (g *Gateio) UpdateDeliveryPositionRiskLimit(ctx context.Context, settle currency.Code, contract currency.Pair, riskLimit uint64) (*Position, error) { + if !slices.Contains(settlementCurrencies, settle) { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -2959,7 +2938,7 @@ func (g *Gateio) UpdateDeliveryPositionRiskLimit(ctx context.Context, settle str params.Set("risk_limit", strconv.FormatUint(riskLimit, 10)) var response *Position return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, - deliveryPath+settle+positionsPath+contract.String()+"/risk_limit", params, nil, &response) + deliveryPath+settle.Item.Lower+positionsPath+contract.String()+"/risk_limit", params, nil, &response) } // PlaceDeliveryOrder create a futures order @@ -2983,20 +2962,19 @@ func (g *Gateio) PlaceDeliveryOrder(ctx context.Context, arg *OrderCreateParams) if arg.AutoSize != "" && (arg.AutoSize == "close_long" || arg.AutoSize == "close_short") { return nil, errInvalidAutoSizeValue } - arg.Settle = strings.ToLower(arg.Settle) - if arg.Settle == "" { - return nil, errEmptySettlementCurrency + if arg.Settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } var response *Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPlaceOrdersEPL, http.MethodPost, - deliveryPath+arg.Settle+ordersPath, nil, &arg, &response) + deliveryPath+arg.Settle.Item.Lower+ordersPath, nil, &arg, &response) } // GetDeliveryOrders list futures orders // Zero-filled order cannot be retrieved 10 minutes after order cancellation -func (g *Gateio) GetDeliveryOrders(ctx context.Context, contract currency.Pair, status, settle, lastID string, limit, offset uint64, countTotal int64) ([]Order, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryOrders(ctx context.Context, contract currency.Pair, status string, settle currency.Code, lastID string, limit, offset uint64, countTotal int64) ([]Order, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if !contract.IsEmpty() { @@ -3022,14 +3000,14 @@ func (g *Gateio) GetDeliveryOrders(ctx context.Context, contract currency.Pair, } var response []Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+ordersPath, params, nil, &response) + deliveryPath+settle.Item.Lower+ordersPath, params, nil, &response) } // CancelMultipleDeliveryOrders cancel all open orders matched // Zero-filled order cannot be retrieved 10 minutes after order cancellation -func (g *Gateio) CancelMultipleDeliveryOrders(ctx context.Context, contract currency.Pair, side, settle string) ([]Order, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) CancelMultipleDeliveryOrders(ctx context.Context, contract currency.Pair, side string, settle currency.Code) ([]Order, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -3041,40 +3019,40 @@ func (g *Gateio) CancelMultipleDeliveryOrders(ctx context.Context, contract curr params.Set("contract", contract.String()) var response []Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapCancelOrdersEPL, http.MethodDelete, - deliveryPath+settle+ordersPath, params, nil, &response) + deliveryPath+settle.Item.Lower+ordersPath, params, nil, &response) } // GetSingleDeliveryOrder Get a single order // Zero-filled order cannot be retrieved 10 minutes after order cancellation -func (g *Gateio) GetSingleDeliveryOrder(ctx context.Context, settle, orderID string) (*Order, error) { - if settle != settleBTC && settle != settleUSDT { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetSingleDeliveryOrder(ctx context.Context, settle currency.Code, orderID string) (*Order, error) { + if !slices.Contains(settlementCurrencies, settle) { + return nil, errEmptyOrInvalidSettlementCurrency } if orderID == "" { return nil, fmt.Errorf("%w, 'order_id' cannot be empty", errInvalidOrderID) } var response *Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+"/orders/"+orderID, nil, nil, &response) + deliveryPath+settle.Item.Lower+"/orders/"+orderID, nil, nil, &response) } // CancelSingleDeliveryOrder cancel a single order -func (g *Gateio) CancelSingleDeliveryOrder(ctx context.Context, settle, orderID string) (*Order, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) CancelSingleDeliveryOrder(ctx context.Context, settle currency.Code, orderID string) (*Order, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if orderID == "" { return nil, fmt.Errorf("%w, 'order_id' cannot be empty", errInvalidOrderID) } var response *Order return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapCancelOrdersEPL, http.MethodDelete, - deliveryPath+settle+"/orders/"+orderID, nil, nil, &response) + deliveryPath+settle.Item.Lower+"/orders/"+orderID, nil, nil, &response) } // GetDeliveryPersonalTradingHistory retrieves personal trading history -func (g *Gateio) GetDeliveryPersonalTradingHistory(ctx context.Context, settle, orderID string, contract currency.Pair, limit, offset, countTotal uint64, lastID string) ([]TradingHistoryItem, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryPersonalTradingHistory(ctx context.Context, settle currency.Code, orderID string, contract currency.Pair, limit, offset, countTotal uint64, lastID string) ([]TradingHistoryItem, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if contract.IsPopulated() { @@ -3097,13 +3075,13 @@ func (g *Gateio) GetDeliveryPersonalTradingHistory(ctx context.Context, settle, } var response []TradingHistoryItem return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+"/my_trades", params, nil, &response) + deliveryPath+settle.Item.Lower+"/my_trades", params, nil, &response) } // GetDeliveryPositionCloseHistory retrieves position history -func (g *Gateio) GetDeliveryPositionCloseHistory(ctx context.Context, settle string, contract currency.Pair, limit, offset uint64, from, to time.Time) ([]PositionCloseHistoryResponse, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryPositionCloseHistory(ctx context.Context, settle currency.Code, contract currency.Pair, limit, offset uint64, from, to time.Time) ([]PositionCloseHistoryResponse, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if contract.IsPopulated() { @@ -3123,13 +3101,13 @@ func (g *Gateio) GetDeliveryPositionCloseHistory(ctx context.Context, settle str } var response []PositionCloseHistoryResponse return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+"/position_close", params, nil, &response) + deliveryPath+settle.Item.Lower+"/position_close", params, nil, &response) } // GetDeliveryLiquidationHistory lists liquidation history -func (g *Gateio) GetDeliveryLiquidationHistory(ctx context.Context, settle string, contract currency.Pair, limit uint64, at time.Time) ([]LiquidationHistoryItem, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliveryLiquidationHistory(ctx context.Context, settle currency.Code, contract currency.Pair, limit uint64, at time.Time) ([]LiquidationHistoryItem, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if contract.IsPopulated() { @@ -3143,13 +3121,13 @@ func (g *Gateio) GetDeliveryLiquidationHistory(ctx context.Context, settle strin } var response []LiquidationHistoryItem return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+"/liquidates", params, nil, &response) + deliveryPath+settle.Item.Lower+"/liquidates", params, nil, &response) } // GetDeliverySettlementHistory retrieves settlement history -func (g *Gateio) GetDeliverySettlementHistory(ctx context.Context, settle string, contract currency.Pair, limit uint64, at time.Time) ([]SettlementHistoryItem, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetDeliverySettlementHistory(ctx context.Context, settle currency.Code, contract currency.Pair, limit uint64, at time.Time) ([]SettlementHistoryItem, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} if contract.IsPopulated() { @@ -3163,16 +3141,16 @@ func (g *Gateio) GetDeliverySettlementHistory(ctx context.Context, settle string } var response []SettlementHistoryItem return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+"/settlements", params, nil, &response) + deliveryPath+settle.Item.Lower+"/settlements", params, nil, &response) } // GetDeliveryPriceTriggeredOrder creates a price-triggered order -func (g *Gateio) GetDeliveryPriceTriggeredOrder(ctx context.Context, settle string, arg *FuturesPriceTriggeredOrderParam) (*OrderID, error) { +func (g *Gateio) GetDeliveryPriceTriggeredOrder(ctx context.Context, settle currency.Code, arg *FuturesPriceTriggeredOrderParam) (*OrderID, error) { if arg == nil { return nil, errNilArgument } - if settle == "" { - return nil, errEmptySettlementCurrency + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if arg.Initial.Contract.IsEmpty() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -3210,16 +3188,16 @@ func (g *Gateio) GetDeliveryPriceTriggeredOrder(ctx context.Context, settle stri } var response *OrderID return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodPost, - deliveryPath+settle+priceOrdersPaths, nil, &arg, &response) + deliveryPath+settle.Item.Lower+priceOrdersPaths, nil, &arg, &response) } // GetDeliveryAllAutoOrder retrieves all auto orders -func (g *Gateio) GetDeliveryAllAutoOrder(ctx context.Context, status, settle string, contract currency.Pair, limit, offset uint64) ([]PriceTriggeredOrder, error) { +func (g *Gateio) GetDeliveryAllAutoOrder(ctx context.Context, status string, settle currency.Code, contract currency.Pair, limit, offset uint64) ([]PriceTriggeredOrder, error) { if status != statusOpen && status != statusFinished { return nil, fmt.Errorf("%w status %s", errInvalidOrderStatus, status) } - if settle == "" { - return nil, errEmptySettlementCurrency + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } params := url.Values{} params.Set("status", status) @@ -3234,13 +3212,13 @@ func (g *Gateio) GetDeliveryAllAutoOrder(ctx context.Context, status, settle str } var response []PriceTriggeredOrder return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+priceOrdersPaths, params, nil, &response) + deliveryPath+settle.Item.Lower+priceOrdersPaths, params, nil, &response) } // CancelAllDeliveryPriceTriggeredOrder cancels all delivery price triggered orders -func (g *Gateio) CancelAllDeliveryPriceTriggeredOrder(ctx context.Context, settle string, contract currency.Pair) ([]PriceTriggeredOrder, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) CancelAllDeliveryPriceTriggeredOrder(ctx context.Context, settle currency.Code, contract currency.Pair) ([]PriceTriggeredOrder, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if contract.IsInvalid() { return nil, fmt.Errorf("%w, currency pair for contract must not be empty", errInvalidOrMissingContractParam) @@ -3249,33 +3227,33 @@ func (g *Gateio) CancelAllDeliveryPriceTriggeredOrder(ctx context.Context, settl params.Set("contract", contract.String()) var response []PriceTriggeredOrder return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapCancelOrdersEPL, http.MethodDelete, - deliveryPath+settle+priceOrdersPaths, params, nil, &response) + deliveryPath+settle.Item.Lower+priceOrdersPaths, params, nil, &response) } // GetSingleDeliveryPriceTriggeredOrder retrieves a single price triggered order -func (g *Gateio) GetSingleDeliveryPriceTriggeredOrder(ctx context.Context, settle, orderID string) (*PriceTriggeredOrder, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) GetSingleDeliveryPriceTriggeredOrder(ctx context.Context, settle currency.Code, orderID string) (*PriceTriggeredOrder, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if orderID == "" { return nil, errInvalidOrderID } var response *PriceTriggeredOrder return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapPrivateEPL, http.MethodGet, - deliveryPath+settle+"/price_orders/"+orderID, nil, nil, &response) + deliveryPath+settle.Item.Lower+"/price_orders/"+orderID, nil, nil, &response) } // CancelDeliveryPriceTriggeredOrder cancel a price-triggered order -func (g *Gateio) CancelDeliveryPriceTriggeredOrder(ctx context.Context, settle, orderID string) (*PriceTriggeredOrder, error) { - if settle == "" { - return nil, errEmptySettlementCurrency +func (g *Gateio) CancelDeliveryPriceTriggeredOrder(ctx context.Context, settle currency.Code, orderID string) (*PriceTriggeredOrder, error) { + if settle.IsEmpty() { + return nil, errEmptyOrInvalidSettlementCurrency } if orderID == "" { return nil, errInvalidOrderID } var response *PriceTriggeredOrder return response, g.SendAuthenticatedHTTPRequest(ctx, exchange.RestSpot, perpetualSwapCancelOrdersEPL, http.MethodDelete, - deliveryPath+settle+"/price_orders/"+orderID, nil, nil, &response) + deliveryPath+settle.Item.Lower+"/price_orders/"+orderID, nil, nil, &response) } // ********************************** Options *************************************************** @@ -3780,7 +3758,7 @@ func (g *Gateio) IsValidPairString(currencyPair string) bool { func (g *Gateio) GetFee(ctx context.Context, feeBuilder *exchange.FeeBuilder) (fee float64, err error) { switch feeBuilder.FeeType { case exchange.CryptocurrencyTradeFee: - feePairs, err := g.GetPersonalTradingFee(ctx, feeBuilder.Pair, "") + feePairs, err := g.GetPersonalTradingFee(ctx, feeBuilder.Pair, currency.EMPTYCODE) if err != nil { return 0, err } @@ -3826,22 +3804,15 @@ func (g *Gateio) GetUnderlyingFromCurrencyPair(p currency.Pair) (currency.Pair, } return currency.Pair{Base: currency.NewCode(ccies[0]), Delimiter: currency.UnderscoreDelimiter, Quote: currency.NewCode(ccies[1])}, nil } -func (g *Gateio) getSettlementFromCurrency(currencyPair currency.Pair, ignoreUSDSettles bool) (settlement string, err error) { +func getSettlementFromCurrency(currencyPair currency.Pair) (settlement currency.Code, err error) { quote := currencyPair.Quote.Upper().String() + switch { case strings.HasPrefix(quote, currency.USDT.String()): - return currency.USDT.Item.Lower, nil - case strings.HasPrefix(quote, currency.BTC.String()): - return currency.BTC.Item.Lower, nil + return currency.USDT, nil case strings.HasPrefix(quote, currency.USD.String()): - if ignoreUSDSettles { - return currency.BTC.Item.Lower, nil - } - return currency.USD.Item.Lower, nil - case strings.HasPrefix(currencyPair.Base.Upper().String(), currency.BTC.String()): - // some instruments having a BTC base currency uses a BTC settlement - return currency.BTC.Item.Lower, nil + return currency.BTC, nil default: - return "", fmt.Errorf("%w %v", errCannotParseSettlementCurrency, currencyPair) + return currency.EMPTYCODE, fmt.Errorf("%w %v", errCannotParseSettlementCurrency, currencyPair) } } diff --git a/exchanges/gateio/gateio_test.go b/exchanges/gateio/gateio_test.go index 5e8ee348d4d..477e0d1616f 100644 --- a/exchanges/gateio/gateio_test.go +++ b/exchanges/gateio/gateio_test.go @@ -262,26 +262,17 @@ func TestGetTicker(t *testing.T) { func TestGetOrderbook(t *testing.T) { t.Parallel() _, err := g.GetOrderbook(context.Background(), getPair(t, asset.Spot).String(), "0.1", 10, false) - if err != nil { - t.Errorf("%s GetOrderbook() error %v", g.Name, err) - } - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err = g.GetFuturesOrderbook(context.Background(), settle, getPair(t, asset.Futures).String(), "", 10, false); err != nil { - t.Errorf("%s GetOrderbook() error %v", g.Name, err) - } - settle, err = g.getSettlementFromCurrency(getPair(t, asset.DeliveryFutures), false) - if err != nil { - t.Fatal(err) - } - if _, err = g.GetDeliveryOrderbook(context.Background(), settle, "0.1", getPair(t, asset.DeliveryFutures), 10, false); err != nil { - t.Errorf("%s GetOrderbook() error %v", g.Name, err) - } - if _, err = g.GetOptionsOrderbook(context.Background(), getPair(t, asset.Options), "0.1", 10, false); err != nil { - t.Errorf("%s GetOrderbook() error %v", g.Name, err) - } + assert.NoError(t, err, "GetOrderbook should not error") + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + assert.NoError(t, err, "getSettlementFromCurrency should not error") + _, err = g.GetFuturesOrderbook(context.Background(), settle, getPair(t, asset.Futures).String(), "", 10, false) + assert.NoError(t, err, "GetFuturesOrderbook should not error") + settle, err = getSettlementFromCurrency(getPair(t, asset.DeliveryFutures)) + assert.NoError(t, err, "getSettlementFromCurrency should not error") + _, err = g.GetDeliveryOrderbook(context.Background(), settle, "0.1", getPair(t, asset.DeliveryFutures), 10, false) + assert.NoError(t, err, "GetDeliveryOrderbook should not error") + _, err = g.GetOptionsOrderbook(context.Background(), getPair(t, asset.Options), "0.1", 10, false) + assert.NoError(t, err, "GetOptionsOrderbook should not error") } func TestGetMarketTrades(t *testing.T) { @@ -911,9 +902,8 @@ func TestGetSubAccountMarginBalances(t *testing.T) { func TestGetSubAccountFuturesBalances(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetSubAccountFuturesBalances(context.Background(), "", ""); err != nil { - t.Errorf("%s GetSubAccountFuturesBalance() error %v", g.Name, err) - } + _, err := g.GetSubAccountFuturesBalances(context.Background(), "", currency.EMPTYCODE) + assert.Error(t, err, "GetSubAccountFuturesBalances should not error") } func TestGetSubAccountCrossMarginBalances(t *testing.T) { @@ -935,9 +925,8 @@ func TestGetSavedAddresses(t *testing.T) { func TestGetPersonalTradingFee(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetPersonalTradingFee(context.Background(), currency.Pair{Base: currency.BTC, Quote: currency.USDT, Delimiter: currency.UnderscoreDelimiter}, ""); err != nil { - t.Errorf("%s GetPersonalTradingFee() error %v", g.Name, err) - } + _, err := g.GetPersonalTradingFee(context.Background(), currency.Pair{Base: currency.BTC, Quote: currency.USDT, Delimiter: currency.UnderscoreDelimiter}, currency.EMPTYCODE) + assert.NoError(t, err, "GetPersonalTradingFee should not error") } func TestGetUsersTotalBalance(t *testing.T) { @@ -971,205 +960,156 @@ func TestGetOrderbookOfLendingLoans(t *testing.T) { func TestGetAllFutureContracts(t *testing.T) { t.Parallel() - _, err := g.GetAllFutureContracts(context.Background(), settleUSD) - if err != nil { - t.Errorf("%s GetAllFutureContracts() error %v", g.Name, err) - } - if _, err = g.GetAllFutureContracts(context.Background(), settleUSDT); err != nil { - t.Errorf("%s GetAllFutureContracts() error %v", g.Name, err) - } - if _, err = g.GetAllFutureContracts(context.Background(), settleBTC); err != nil { - t.Errorf("%s GetAllFutureContracts() error %v", g.Name, err) + for _, settlementCurrency := range settlementCurrencies { + if _, err := g.GetAllFutureContracts(context.Background(), settlementCurrency); err != nil { + assert.Errorf(t, err, "GetAllFutureContracts %s should not error", settlementCurrency) + } } } + func TestGetSingleContract(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err = g.GetSingleContract(context.Background(), settle, getPair(t, asset.Futures).String()); err != nil { - t.Errorf("%s GetSingleContract() error %s", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetSingleContract(context.Background(), settle, getPair(t, asset.Futures).String()) + assert.NoError(t, err, "GetSingleContract should not error") } func TestGetFuturesOrderbook(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err := g.GetFuturesOrderbook(context.Background(), settle, getPair(t, asset.Futures).String(), "", 0, false); err != nil { - t.Errorf("%s GetFuturesOrderbook() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetFuturesOrderbook(context.Background(), settle, getPair(t, asset.Futures).String(), "", 0, false) + assert.NoError(t, err, "GetFuturesOrderbook should not error") } func TestGetFuturesTradingHistory(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err := g.GetFuturesTradingHistory(context.Background(), settle, getPair(t, asset.Futures), 0, 0, "", time.Time{}, time.Time{}); err != nil { - t.Errorf("%s GetFuturesTradingHistory() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetFuturesTradingHistory(context.Background(), settle, getPair(t, asset.Futures), 0, 0, "", time.Time{}, time.Time{}) + assert.NoError(t, err, "GetFuturesTradingHistory should not error") } func TestGetFuturesCandlesticks(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err := g.GetFuturesCandlesticks(context.Background(), settle, getPair(t, asset.Futures).String(), time.Time{}, time.Time{}, 0, kline.OneWeek); err != nil { - t.Errorf("%s GetFuturesCandlesticks() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetFuturesCandlesticks(context.Background(), settle, getPair(t, asset.Futures).String(), time.Time{}, time.Time{}, 0, kline.OneWeek) + assert.NoError(t, err, "GetFuturesCandlesticks should not error") } func TestPremiumIndexKLine(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Error(err) - } - if _, err := g.PremiumIndexKLine(context.Background(), settle, getPair(t, asset.Futures), time.Time{}, time.Time{}, 0, kline.OneWeek); err != nil { - t.Errorf("%s PremiumIndexKLine() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.PremiumIndexKLine(context.Background(), settle, getPair(t, asset.Futures), time.Time{}, time.Time{}, 0, kline.OneWeek) + assert.NoError(t, err, "PremiumIndexKLine should not error") } func TestGetFutureTickers(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err := g.GetFuturesTickers(context.Background(), settle, getPair(t, asset.Futures)); err != nil { - t.Errorf("%s GetFuturesTickers() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetFuturesTickers(context.Background(), settle, getPair(t, asset.Futures)) + assert.NoError(t, err, "GetFutureTickers should not error") } func TestGetFutureFundingRates(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err := g.GetFutureFundingRates(context.Background(), settle, getPair(t, asset.Futures), 0); err != nil { - t.Errorf("%s GetFutureFundingRates() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetFutureFundingRates(context.Background(), settle, getPair(t, asset.Futures), 0) + assert.NoError(t, err, "GetFutureFundingRates should not error") } func TestGetFuturesInsuranceBalanceHistory(t *testing.T) { t.Parallel() - if _, err := g.GetFuturesInsuranceBalanceHistory(context.Background(), settleUSDT, 0); err != nil { - t.Errorf("%s GetFuturesInsuranceBalanceHistory() error %v", g.Name, err) - } + _, err := g.GetFuturesInsuranceBalanceHistory(context.Background(), currency.USDT, 0) + assert.NoError(t, err, "GetFuturesInsuranceBalanceHistory should not error") } func TestGetFutureStats(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Error(err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") _, err = g.GetFutureStats(context.Background(), settle, getPair(t, asset.Futures), time.Time{}, 0, 0) - if err != nil { - t.Errorf("%s GetFutureStats() error %v", g.Name, err) - } + assert.NoError(t, err, "GetFutureStats should not error") } func TestGetIndexConstituent(t *testing.T) { t.Parallel() - if _, err := g.GetIndexConstituent(context.Background(), settleUSDT, currency.Pair{Base: currency.BTC, Quote: currency.USDT, Delimiter: currency.UnderscoreDelimiter}.String()); err != nil { - t.Errorf("%s GetIndexConstituent() error %v", g.Name, err) - } + _, err := g.GetIndexConstituent(context.Background(), currency.USDT, currency.Pair{Base: currency.BTC, Quote: currency.USDT, Delimiter: currency.UnderscoreDelimiter}.String()) + assert.NoError(t, err, "GetIndexConstituent should not error") } func TestGetLiquidationHistory(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Error(err) - } - if _, err := g.GetLiquidationHistory(context.Background(), settle, getPair(t, asset.Futures), time.Time{}, time.Time{}, 0); err != nil { - t.Errorf("%s GetLiquidationHistory() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetLiquidationHistory(context.Background(), settle, getPair(t, asset.Futures), time.Time{}, time.Time{}, 0) + assert.NoError(t, err, "GetLiquidationHistory should not error") } func TestQueryFuturesAccount(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.QueryFuturesAccount(context.Background(), settleUSDT); err != nil { - t.Errorf("%s QueryFuturesAccount() error %v", g.Name, err) - } + _, err := g.QueryFuturesAccount(context.Background(), currency.USDT) + assert.NoError(t, err, "QueryFuturesAccount should not error") } func TestGetFuturesAccountBooks(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetFuturesAccountBooks(context.Background(), settleUSDT, 0, time.Time{}, time.Time{}, "dnw"); err != nil { - t.Errorf("%s GetFuturesAccountBooks() error %v", g.Name, err) - } + _, err := g.GetFuturesAccountBooks(context.Background(), currency.USDT, 0, time.Time{}, time.Time{}, "dnw") + assert.NoError(t, err, "GetFuturesAccountBooks should not error") } -func TestGetAllPositionsOfUsers(t *testing.T) { +func TestGetAllFuturesPositionsOfUsers(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetAllFuturesPositionsOfUsers(context.Background(), settleUSDT, true); err != nil { - t.Errorf("%s GetAllPositionsOfUsers() error %v", g.Name, err) - } + _, err := g.GetAllFuturesPositionsOfUsers(context.Background(), currency.USDT, true) + assert.NoError(t, err, "GetAllPositionsOfUsers should not error") } func TestGetSinglePosition(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetSinglePosition(context.Background(), settleUSDT, currency.Pair{Quote: currency.BTC, Base: currency.USDT}); err != nil { - t.Errorf("%s GetSinglePosition() error %v", g.Name, err) - } + _, err := g.GetSinglePosition(context.Background(), currency.USDT, currency.Pair{Quote: currency.BTC, Base: currency.USDT}) + assert.NoError(t, err, "GetSinglePosition should not error") } -func TestUpdatePositionMargin(t *testing.T) { +func TestUpdateFuturesPositionMargin(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err := g.UpdateFuturesPositionMargin(context.Background(), settle, 0.01, getPair(t, asset.Futures)); err != nil { - t.Errorf("%s UpdatePositionMargin() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.UpdateFuturesPositionMargin(context.Background(), settle, 0.01, getPair(t, asset.Futures)) + assert.NoError(t, err, "UpdateFuturesPositionMargin should not error") } -func TestUpdatePositionLeverage(t *testing.T) { +func TestUpdateFuturesPositionLeverage(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err := g.UpdateFuturesPositionLeverage(context.Background(), settle, getPair(t, asset.Futures), 1, 0); err != nil { - t.Errorf("%s UpdatePositionLeverage() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.UpdateFuturesPositionLeverage(context.Background(), settle, getPair(t, asset.Futures), 1, 0) + assert.NoError(t, err, "UpdateFuturesPositionLeverage should not error") } -func TestUpdatePositionRiskLimit(t *testing.T) { +func TestUpdateFuturesPositionRiskLimit(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err := g.UpdateFuturesPositionRiskLimit(context.Background(), settle, getPair(t, asset.Futures), 10); err != nil { - t.Errorf("%s UpdatePositionRiskLimit() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.UpdateFuturesPositionRiskLimit(context.Background(), settle, getPair(t, asset.Futures), 10) + assert.NoError(t, err, "UpdateFuturesPositionRiskLimit should not error") } -func TestCreateDeliveryOrder(t *testing.T) { +func TestPlaceDeliveryOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.DeliveryFutures), false) - if err != nil { - t.Fatal(err) - } - if _, err := g.PlaceDeliveryOrder(context.Background(), &OrderCreateParams{ + settle, err := getSettlementFromCurrency(getPair(t, asset.DeliveryFutures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.PlaceDeliveryOrder(context.Background(), &OrderCreateParams{ Contract: getPair(t, asset.DeliveryFutures), Size: 6024, Iceberg: 0, @@ -1177,96 +1117,80 @@ func TestCreateDeliveryOrder(t *testing.T) { Text: "t-my-custom-id", Settle: settle, TimeInForce: gtcTIF, - }); err != nil { - t.Errorf("%s CreateDeliveryOrder() error %v", g.Name, err) - } + }) + assert.NoError(t, err, "CreateDeliveryOrder should not error") } func TestGetDeliveryOrders(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.DeliveryFutures), false) - if err != nil { - t.Fatal(err) - } - if _, err := g.GetDeliveryOrders(context.Background(), getPair(t, asset.DeliveryFutures), "open", settle, "", 0, 0, 1); err != nil { - t.Errorf("%s GetDeliveryOrders() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.DeliveryFutures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetDeliveryOrders(context.Background(), getPair(t, asset.DeliveryFutures), "open", settle, "", 0, 0, 1) + assert.NoError(t, err, "GetDeliveryOrders should not error") } -func TestCancelAllDeliveryOrders(t *testing.T) { +func TestCancelMultipleDeliveryOrders(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.DeliveryFutures), false) - if err != nil { - t.Fatal(err) - } - if _, err := g.CancelMultipleDeliveryOrders(context.Background(), getPair(t, asset.DeliveryFutures), "ask", settle); err != nil { - t.Errorf("%s CancelAllDeliveryOrders() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.DeliveryFutures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.CancelMultipleDeliveryOrders(context.Background(), getPair(t, asset.DeliveryFutures), "ask", settle) + assert.NoError(t, err, "CancelMultipleDeliveryOrders should not error") } func TestGetSingleDeliveryOrder(t *testing.T) { t.Parallel() + _, err := g.GetSingleDeliveryOrder(context.Background(), currency.USD, "123456") + assert.ErrorIs(t, err, errEmptyOrInvalidSettlementCurrency, "GetSingleDeliveryOrder should return errEmptyOrInvalidSettlementCurrency") sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetSingleDeliveryOrder(context.Background(), settleUSDT, "123456"); err != nil { - t.Errorf("%s GetSingleDeliveryOrder() error %v", g.Name, err) - } - if _, err := g.GetSingleDeliveryOrder(context.Background(), settleBTC, "123456"); err != nil { - t.Errorf("%s GetSingleDeliveryOrder() error %v", g.Name, err) - } - if _, err := g.GetSingleDeliveryOrder(context.Background(), settleUSD, "123456"); !errors.Is(err, errEmptySettlementCurrency) { - t.Errorf("%s GetSingleDeliveryOrder() expected %v, but found %v", g.Name, errEmptySettlementCurrency, err) + for _, settle := range settlementCurrencies { + _, err := g.GetSingleDeliveryOrder(context.Background(), settle, "123456") + assert.NoErrorf(t, err, "GetSingleDeliveryOrder %s should not error", settle) } } func TestCancelSingleDeliveryOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - if _, err := g.CancelSingleDeliveryOrder(context.Background(), settleUSDT, "123456"); err != nil { - t.Errorf("%s CancelSingleDeliveryOrder() error %v", g.Name, err) - } - if _, err := g.CancelSingleDeliveryOrder(context.Background(), settleBTC, "123456"); err != nil { - t.Errorf("%s CancelSingleDeliveryOrder() error %v", g.Name, err) + for _, settle := range settlementCurrencies { + _, err := g.CancelSingleDeliveryOrder(context.Background(), settle, "123456") + assert.NoErrorf(t, err, "CancelSingleDeliveryOrder %s should not error", settle) } } func TestGetDeliveryPersonalTradingHistory(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetDeliveryPersonalTradingHistory(context.Background(), settleUSDT, "", getPair(t, asset.DeliveryFutures), 0, 0, 1, ""); err != nil { - t.Errorf("%s GetDeliveryPersonalTradingHistory() error %v", g.Name, err) - } + _, err := g.GetDeliveryPersonalTradingHistory(context.Background(), currency.USDT, "", getPair(t, asset.DeliveryFutures), 0, 0, 1, "") + assert.NoError(t, err, "GetDeliveryPersonalTradingHistory should not error") } func TestGetDeliveryPositionCloseHistory(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetDeliveryPositionCloseHistory(context.Background(), settleUSDT, getPair(t, asset.DeliveryFutures), 0, 0, time.Time{}, time.Time{}); err != nil { - t.Errorf("%s GetDeliveryPositionCloseHistory() error %v", g.Name, err) - } + _, err := g.GetDeliveryPositionCloseHistory(context.Background(), currency.USDT, getPair(t, asset.DeliveryFutures), 0, 0, time.Time{}, time.Time{}) + assert.NoError(t, err, "GetDeliveryPositionCloseHistory should not error") } func TestGetDeliveryLiquidationHistory(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetDeliveryLiquidationHistory(context.Background(), settleUSDT, getPair(t, asset.DeliveryFutures), 0, time.Now()); err != nil { - t.Errorf("%s GetDeliveryLiquidationHistory() error %v", g.Name, err) - } + _, err := g.GetDeliveryLiquidationHistory(context.Background(), currency.USDT, getPair(t, asset.DeliveryFutures), 0, time.Now()) + assert.NoError(t, err, "GetDeliveryLiquidationHistory should not error") } func TestGetDeliverySettlementHistory(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetDeliverySettlementHistory(context.Background(), settleUSDT, getPair(t, asset.DeliveryFutures), 0, time.Now()); err != nil { - t.Errorf("%s GetDeliverySettlementHistory() error %v", g.Name, err) - } + _, err := g.GetDeliverySettlementHistory(context.Background(), currency.USDT, getPair(t, asset.DeliveryFutures), 0, time.Now()) + assert.NoError(t, err, "GetDeliverySettlementHistory should not error") } func TestGetDeliveryPriceTriggeredOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetDeliveryPriceTriggeredOrder(context.Background(), settleUSDT, &FuturesPriceTriggeredOrderParam{ + _, err := g.GetDeliveryPriceTriggeredOrder(context.Background(), currency.USDT, &FuturesPriceTriggeredOrderParam{ Initial: FuturesInitial{ Price: 1234., Size: 12, @@ -1277,110 +1201,88 @@ func TestGetDeliveryPriceTriggeredOrder(t *testing.T) { OrderType: "close-short-position", Price: 123400, }, - }); err != nil { - t.Errorf("%s GetDeliveryPriceTriggeredOrder() error %v", g.Name, err) - } + }) + assert.NoError(t, err, "GetDeliveryPriceTriggeredOrder should not error") } func TestGetDeliveryAllAutoOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetDeliveryAllAutoOrder(context.Background(), "open", settleUSDT, getPair(t, asset.DeliveryFutures), 0, 1); err != nil { - t.Errorf("%s GetDeliveryAllAutoOrder() error %v", g.Name, err) - } + _, err := g.GetDeliveryAllAutoOrder(context.Background(), "open", currency.USDT, getPair(t, asset.DeliveryFutures), 0, 1) + assert.NoError(t, err, "GetDeliveryAllAutoOrder should not error") } func TestCancelAllDeliveryPriceTriggeredOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.DeliveryFutures), false) - if err != nil { - t.Fatal(err) - } - if _, err := g.CancelAllDeliveryPriceTriggeredOrder(context.Background(), settle, getPair(t, asset.DeliveryFutures)); err != nil { - t.Errorf("%s CancelAllDeliveryPriceTriggeredOrder() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.DeliveryFutures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.CancelAllDeliveryPriceTriggeredOrder(context.Background(), settle, getPair(t, asset.DeliveryFutures)) + assert.NoError(t, err, "CancelAllDeliveryPriceTriggeredOrder should not error") } func TestGetSingleDeliveryPriceTriggeredOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetSingleDeliveryPriceTriggeredOrder(context.Background(), settleBTC, "12345"); err != nil { - t.Errorf("%s GetSingleDeliveryPriceTriggeredOrder() error %v", g.Name, err) - } + _, err := g.GetSingleDeliveryPriceTriggeredOrder(context.Background(), currency.BTC, "12345") + assert.NoError(t, err, "GetSingleDeliveryPriceTriggeredOrder should not error") } func TestCancelDeliveryPriceTriggeredOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - if _, err := g.CancelDeliveryPriceTriggeredOrder(context.Background(), settleUSDT, "12345"); err != nil { - t.Errorf("%s CancelDeliveryPriceTriggeredOrder() error %v", g.Name, err) - } + _, err := g.CancelDeliveryPriceTriggeredOrder(context.Background(), currency.USDT, "12345") + assert.NoError(t, err, "CancelDeliveryPriceTriggeredOrder should not error") } func TestEnableOrDisableDualMode(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.EnableOrDisableDualMode(context.Background(), settleBTC, true); err != nil { - t.Errorf("%s EnableOrDisableDualMode() error %v", g.Name, err) - } + _, err := g.EnableOrDisableDualMode(context.Background(), currency.BTC, true) + assert.NoError(t, err, "EnableOrDisableDualMode should not error") } func TestRetrivePositionDetailInDualMode(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err = g.RetrivePositionDetailInDualMode(context.Background(), settle, getPair(t, asset.Futures)); err != nil { - t.Errorf("%s RetrivePositionDetailInDualMode() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.RetrivePositionDetailInDualMode(context.Background(), settle, getPair(t, asset.Futures)) + assert.NoError(t, err, "RetrivePositionDetailInDualMode should not error") } func TestUpdatePositionMarginInDualMode(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err = g.UpdatePositionMarginInDualMode(context.Background(), settle, getPair(t, asset.Futures), 0.001, "dual_long"); err != nil { - t.Errorf("%s UpdatePositionMarginInDualMode() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.UpdatePositionMarginInDualMode(context.Background(), settle, getPair(t, asset.Futures), 0.001, "dual_long") + assert.NoError(t, err, "UpdatePositionMarginInDualMode should not error") } func TestUpdatePositionLeverageInDualMode(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err = g.UpdatePositionLeverageInDualMode(context.Background(), settle, getPair(t, asset.Futures), 0.001, 0.001); err != nil { - t.Errorf("%s UpdatePositionLeverageInDualMode() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.UpdatePositionLeverageInDualMode(context.Background(), settle, getPair(t, asset.Futures), 0.001, 0.001) + assert.NoError(t, err, "UpdatePositionLeverageInDualMode should not error") } -func TestUpdatePositionRiskLimitinDualMode(t *testing.T) { +func TestUpdatePositionRiskLimitInDualMode(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err = g.UpdatePositionRiskLimitInDualMode(context.Background(), settle, getPair(t, asset.Futures), 10); err != nil { - t.Errorf("%s UpdatePositionRiskLimitinDualMode() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.UpdatePositionRiskLimitInDualMode(context.Background(), settle, getPair(t, asset.Futures), 10) + assert.NoError(t, err, "UpdatePositionRiskLimitInDualMode should not error") } -func TestCreateFuturesOrder(t *testing.T) { +func TestPlaceFuturesOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err := g.PlaceFuturesOrder(context.Background(), &OrderCreateParams{ + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.PlaceFuturesOrder(context.Background(), &OrderCreateParams{ Contract: getPair(t, asset.Futures), Size: 6024, Iceberg: 0, @@ -1388,51 +1290,44 @@ func TestCreateFuturesOrder(t *testing.T) { TimeInForce: "gtc", Text: "t-my-custom-id", Settle: settle, - }); err != nil { - t.Errorf("%s CreateFuturesOrder() error %v", g.Name, err) - } + }) + assert.NoError(t, err, "PlaceFuturesOrder should not error") } func TestGetFuturesOrders(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetFuturesOrders(context.Background(), currency.NewPair(currency.BTC, currency.USD), "open", "", settleBTC, 0, 0, 1); err != nil { - t.Errorf("%s GetFuturesOrders() error %v", g.Name, err) - } + _, err := g.GetFuturesOrders(context.Background(), currency.NewPair(currency.BTC, currency.USD), "open", "", currency.BTC, 0, 0, 1) + assert.NoError(t, err, "GetFuturesOrders should not error") } func TestCancelMultipleFuturesOpenOrders(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - if _, err := g.CancelMultipleFuturesOpenOrders(context.Background(), getPair(t, asset.Futures), "ask", settleUSDT); err != nil { - t.Errorf("%s CancelAllOpenOrdersMatched() error %v", g.Name, err) - } + _, err := g.CancelMultipleFuturesOpenOrders(context.Background(), getPair(t, asset.Futures), "ask", currency.USDT) + assert.NoError(t, err, "CancelMultipleFuturesOpenOrders should not error") } func TestGetSingleFuturesPriceTriggeredOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetSingleFuturesPriceTriggeredOrder(context.Background(), settleBTC, "12345"); err != nil { - t.Errorf("%s GetSingleFuturesPriceTriggeredOrder() error %v", g.Name, err) - } + _, err := g.GetSingleFuturesPriceTriggeredOrder(context.Background(), currency.BTC, "12345") + assert.NoError(t, err, "GetSingleFuturesPriceTriggeredOrder should not error") } func TestCancelFuturesPriceTriggeredOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - if _, err := g.CancelFuturesPriceTriggeredOrder(context.Background(), settleUSDT, "12345"); err != nil { - t.Errorf("%s CancelFuturesPriceTriggeredOrder() error %v", g.Name, err) - } + _, err := g.CancelFuturesPriceTriggeredOrder(context.Background(), currency.USDT, "12345") + assert.NoError(t, err, "CancelFuturesPriceTriggeredOrder should not error") } -func TestCreateBatchFuturesOrders(t *testing.T) { +func TestPlaceBatchFuturesOrders(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), true) - if err != nil { - t.Fatal(err) - } - if _, err := g.PlaceBatchFuturesOrders(context.Background(), settleBTC, []OrderCreateParams{ + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.PlaceBatchFuturesOrders(context.Background(), currency.BTC, []OrderCreateParams{ { Contract: getPair(t, asset.Futures), Size: 6024, @@ -1449,79 +1344,69 @@ func TestCreateBatchFuturesOrders(t *testing.T) { Price: "376225", TimeInForce: "gtc", Text: "t-my-custom-id", - Settle: settleBTC, + Settle: currency.BTC, }, - }); err != nil { - t.Errorf("%s CreateBatchFuturesOrders() error %v", g.Name, err) - } + }) + assert.NoError(t, err, "PlaceBatchFuturesOrders should not error") } func TestGetSingleFuturesOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetSingleFuturesOrder(context.Background(), settleBTC, "12345"); err != nil { - t.Errorf("%s GetSingleFuturesOrder() error %v", g.Name, err) - } + _, err := g.GetSingleFuturesOrder(context.Background(), currency.BTC, "12345") + assert.NoError(t, err, "GetSingleFuturesOrder should not error") } func TestCancelSingleFuturesOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - if _, err := g.CancelSingleFuturesOrder(context.Background(), settleBTC, "12345"); err != nil { - t.Errorf("%s CancelSingleFuturesOrder() error %v", g.Name, err) - } + _, err := g.CancelSingleFuturesOrder(context.Background(), currency.BTC, "12345") + assert.NoError(t, err, "CancelSingleFuturesOrder should not error") } func TestAmendFuturesOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - if _, err := g.AmendFuturesOrder(context.Background(), settleBTC, "1234", AmendFuturesOrderParam{ + _, err := g.AmendFuturesOrder(context.Background(), currency.BTC, "1234", AmendFuturesOrderParam{ Price: 12345.990, - }); err != nil { - t.Errorf("%s AmendFuturesOrder() error %v", g.Name, err) - } + }) + assert.NoError(t, err, "AmendFuturesOrder should not error") } func TestGetMyPersonalTradingHistory(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetMyPersonalTradingHistory(context.Background(), settleBTC, "", "", getPair(t, asset.Futures), 0, 0, 0); err != nil { - t.Errorf("%s GetMyPersonalTradingHistory() error %v", g.Name, err) - } + _, err := g.GetMyPersonalTradingHistory(context.Background(), currency.BTC, "", "", getPair(t, asset.Futures), 0, 0, 0) + assert.NoError(t, err, "GetMyPersonalTradingHistory should not error") } -func TestGetPositionCloseHistory(t *testing.T) { +func TestGetFuturesPositionCloseHistory(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetFuturesPositionCloseHistory(context.Background(), settleBTC, getPair(t, asset.Futures), 0, 0, time.Time{}, time.Time{}); err != nil { - t.Errorf("%s GetPositionCloseHistory() error %v", g.Name, err) - } + _, err := g.GetFuturesPositionCloseHistory(context.Background(), currency.BTC, getPair(t, asset.Futures), 0, 0, time.Time{}, time.Time{}) + assert.NoError(t, err, "GetFuturesPositionCloseHistory should not error") } func TestGetFuturesLiquidationHistory(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetFuturesLiquidationHistory(context.Background(), settleBTC, getPair(t, asset.Futures), 0, time.Time{}); err != nil { - t.Errorf("%s GetFuturesLiquidationHistory() error %v", g.Name, err) - } + _, err := g.GetFuturesLiquidationHistory(context.Background(), currency.BTC, getPair(t, asset.Futures), 0, time.Time{}) + assert.NoError(t, err, "GetFuturesLiquidationHistory should not error") } func TestCountdownCancelOrders(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - if _, err := g.CountdownCancelOrders(context.Background(), settleBTC, CountdownParams{ + _, err := g.CountdownCancelOrders(context.Background(), currency.BTC, CountdownParams{ Timeout: 8, - }); err != nil { - t.Errorf("%s CountdownCancelOrders() error %v", g.Name, err) - } + }) + assert.NoError(t, err, "CountdownCancelOrders should not error") } func TestCreatePriceTriggeredFuturesOrder(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), false) - if err != nil { - t.Fatal(err) - } - if _, err := g.CreatePriceTriggeredFuturesOrder(context.Background(), settle, &FuturesPriceTriggeredOrderParam{ + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.CreatePriceTriggeredFuturesOrder(context.Background(), settle, &FuturesPriceTriggeredOrderParam{ Initial: FuturesInitial{ Price: 1234., Size: 2, @@ -1531,10 +1416,9 @@ func TestCreatePriceTriggeredFuturesOrder(t *testing.T) { Rule: 1, OrderType: "close-short-position", }, - }); err != nil { - t.Errorf("%s CreatePriceTriggeredFuturesOrder() error %v", g.Name, err) - } - if _, err := g.CreatePriceTriggeredFuturesOrder(context.Background(), settle, &FuturesPriceTriggeredOrderParam{ + }) + assert.NoError(t, err, "CreatePriceTriggeredFuturesOrder should not error") + _, err = g.CreatePriceTriggeredFuturesOrder(context.Background(), settle, &FuturesPriceTriggeredOrderParam{ Initial: FuturesInitial{ Price: 1234., Size: 1, @@ -1543,152 +1427,124 @@ func TestCreatePriceTriggeredFuturesOrder(t *testing.T) { Trigger: FuturesTrigger{ Rule: 1, }, - }); err != nil { - t.Errorf("%s CreatePriceTriggeredFuturesOrder() error %v", g.Name, err) - } + }) + assert.NoError(t, err, "CreatePriceTriggeredFuturesOrder should not error") } func TestListAllFuturesAutoOrders(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.ListAllFuturesAutoOrders(context.Background(), "open", settleBTC, currency.EMPTYPAIR, 0, 0); err != nil { - t.Errorf("%s ListAllFuturesAutoOrders() error %v", g.Name, err) - } + _, err := g.ListAllFuturesAutoOrders(context.Background(), "open", currency.BTC, currency.EMPTYPAIR, 0, 0) + assert.NoError(t, err, "ListAllFuturesAutoOrders should not error") } func TestCancelAllFuturesOpenOrders(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.Futures), false) - if err != nil { - t.Fatal(err) - } - if _, err := g.CancelAllFuturesOpenOrders(context.Background(), settle, getPair(t, asset.Futures)); err != nil { - t.Errorf("%s CancelAllFuturesOpenOrders() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.Futures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.CancelAllFuturesOpenOrders(context.Background(), settle, getPair(t, asset.Futures)) + assert.NoError(t, err, "CancelAllFuturesOpenOrders should not error") } func TestGetAllDeliveryContracts(t *testing.T) { t.Parallel() - if _, err := g.GetAllDeliveryContracts(context.Background(), settleUSDT); err != nil { - t.Errorf("%s GetAllDeliveryContracts() error %v", g.Name, err) - } + _, err := g.GetAllDeliveryContracts(context.Background(), currency.USDT) + assert.NoError(t, err, "GetAllDeliveryContracts should not error") } func TestGetSingleDeliveryContracts(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.DeliveryFutures), false) - if err != nil { - t.Skip(err) - } - if _, err := g.GetSingleDeliveryContracts(context.Background(), settle, getPair(t, asset.DeliveryFutures)); err != nil { - t.Errorf("%s GetSingleDeliveryContracts() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.DeliveryFutures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetSingleDeliveryContracts(context.Background(), settle, getPair(t, asset.DeliveryFutures)) + assert.NoError(t, err, "GetSingleDeliveryContracts should not error") } func TestGetDeliveryOrderbook(t *testing.T) { t.Parallel() - if _, err := g.GetDeliveryOrderbook(context.Background(), settleUSDT, "0", getPair(t, asset.DeliveryFutures), 0, false); err != nil { - t.Errorf("%s GetDeliveryOrderbook() error %v", g.Name, err) - } + _, err := g.GetDeliveryOrderbook(context.Background(), currency.USDT, "0", getPair(t, asset.DeliveryFutures), 0, false) + assert.NoError(t, err, "GetDeliveryOrderbook should not error") } func TestGetDeliveryTradingHistory(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.DeliveryFutures), false) - if err != nil { - t.Skip(err) - } - if _, err := g.GetDeliveryTradingHistory(context.Background(), settle, "", getPair(t, asset.DeliveryFutures), 0, time.Time{}, time.Time{}); err != nil { - t.Errorf("%s GetDeliveryTradingHistory() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.DeliveryFutures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetDeliveryTradingHistory(context.Background(), settle, "", getPair(t, asset.DeliveryFutures), 0, time.Time{}, time.Time{}) + assert.NoError(t, err, "GetDeliveryTradingHistory should not error") } + func TestGetDeliveryFuturesCandlesticks(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.DeliveryFutures), false) - if err != nil { - t.Skip(err) - } - if _, err := g.GetDeliveryFuturesCandlesticks(context.Background(), settle, getPair(t, asset.DeliveryFutures), time.Time{}, time.Time{}, 0, kline.OneWeek); err != nil { - t.Errorf("%s GetFuturesCandlesticks() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.DeliveryFutures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetDeliveryFuturesCandlesticks(context.Background(), settle, getPair(t, asset.DeliveryFutures), time.Time{}, time.Time{}, 0, kline.OneWeek) + assert.NoError(t, err, "GetDeliveryFuturesCandlesticks should not error") } func TestGetDeliveryFutureTickers(t *testing.T) { t.Parallel() - settle, err := g.getSettlementFromCurrency(getPair(t, asset.DeliveryFutures), false) - if err != nil { - t.Skip(err) - } - if _, err := g.GetDeliveryFutureTickers(context.Background(), settle, getPair(t, asset.DeliveryFutures)); err != nil { - t.Errorf("%s GetDeliveryFutureTickers() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.DeliveryFutures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.GetDeliveryFutureTickers(context.Background(), settle, getPair(t, asset.DeliveryFutures)) + assert.NoError(t, err, "GetDeliveryFutureTickers should not error") } func TestGetDeliveryInsuranceBalanceHistory(t *testing.T) { t.Parallel() - if _, err := g.GetDeliveryInsuranceBalanceHistory(context.Background(), settleBTC, 0); err != nil { - t.Errorf("%s GetDeliveryInsuranceBalanceHistory() error %v", g.Name, err) - } + _, err := g.GetDeliveryInsuranceBalanceHistory(context.Background(), currency.BTC, 0) + assert.NoError(t, err, "GetDeliveryInsuranceBalanceHistory should not error") } func TestQueryDeliveryFuturesAccounts(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetDeliveryFuturesAccounts(context.Background(), settleUSDT); err != nil { - t.Errorf("%s QueryDeliveryFuturesAccounts() error %v", g.Name, err) - } + _, err := g.GetDeliveryFuturesAccounts(context.Background(), currency.USDT) + assert.NoError(t, err, "GetDeliveryFuturesAccounts should not error") } func TestGetDeliveryAccountBooks(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetDeliveryAccountBooks(context.Background(), settleUSDT, 0, time.Time{}, time.Now(), "dnw"); err != nil { - t.Errorf("%s GetDeliveryAccountBooks() error %v", g.Name, err) - } + _, err := g.GetDeliveryAccountBooks(context.Background(), currency.USDT, 0, time.Time{}, time.Now(), "dnw") + assert.NoError(t, err, "GetDeliveryAccountBooks should not error") } func TestGetAllDeliveryPositionsOfUser(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetAllDeliveryPositionsOfUser(context.Background(), settleUSDT); err != nil { - t.Errorf("%s GetAllDeliveryPositionsOfUser() error %v", g.Name, err) - } + _, err := g.GetAllDeliveryPositionsOfUser(context.Background(), currency.USDT) + assert.NoError(t, err, "GetAllDeliveryPositionsOfUser should not error") } func TestGetSingleDeliveryPosition(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g) - if _, err := g.GetSingleDeliveryPosition(context.Background(), settleUSDT, getPair(t, asset.DeliveryFutures)); err != nil { - t.Errorf("%s GetSingleDeliveryPosition() error %v", g.Name, err) - } + _, err := g.GetSingleDeliveryPosition(context.Background(), currency.USDT, getPair(t, asset.DeliveryFutures)) + assert.NoError(t, err, "GetSingleDeliveryPosition should not error") } func TestUpdateDeliveryPositionMargin(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - settle, err := g.getSettlementFromCurrency(getPair(t, asset.DeliveryFutures), false) - if err != nil { - t.Fatal(err) - } - if _, err := g.UpdateDeliveryPositionMargin(context.Background(), settle, 0.001, getPair(t, asset.DeliveryFutures)); err != nil { - t.Errorf("%s UpdateDeliveryPositionMargin() error %v", g.Name, err) - } + settle, err := getSettlementFromCurrency(getPair(t, asset.DeliveryFutures)) + require.NoError(t, err, "getSettlementFromCurrency must not error") + _, err = g.UpdateDeliveryPositionMargin(context.Background(), settle, 0.001, getPair(t, asset.DeliveryFutures)) + assert.NoError(t, err, "UpdateDeliveryPositionMargin should not error") } func TestUpdateDeliveryPositionLeverage(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - if _, err := g.UpdateDeliveryPositionLeverage(context.Background(), "usdt", getPair(t, asset.DeliveryFutures), 0.001); err != nil { - t.Errorf("%s UpdateDeliveryPositionLeverage() error %v", g.Name, err) - } + _, err := g.UpdateDeliveryPositionLeverage(context.Background(), currency.USDT, getPair(t, asset.DeliveryFutures), 0.001) + assert.NoError(t, err, "UpdateDeliveryPositionLeverage should not error") } func TestUpdateDeliveryPositionRiskLimit(t *testing.T) { t.Parallel() sharedtestvalues.SkipTestIfCredentialsUnset(t, g, canManipulateRealOrders) - if _, err := g.UpdateDeliveryPositionRiskLimit(context.Background(), "usdt", getPair(t, asset.DeliveryFutures), 30); err != nil { - t.Errorf("%s UpdateDeliveryPositionRiskLimit() error %v", g.Name, err) - } + _, err := g.UpdateDeliveryPositionRiskLimit(context.Background(), currency.USDT, getPair(t, asset.DeliveryFutures), 30) + assert.NoError(t, err, "UpdateDeliveryPositionRiskLimit should not error") } func TestGetAllOptionsUnderlyings(t *testing.T) { @@ -3148,42 +3004,20 @@ func TestUnlockSubAccount(t *testing.T) { } } -func TestSettlement(t *testing.T) { - availablePairs, err := g.GetAvailablePairs(asset.Futures) - if err != nil { - t.Fatal(err) - } - for x := range availablePairs { - t.Run(strconv.Itoa(x), func(t *testing.T) { - _, err = g.getSettlementFromCurrency(availablePairs[x], true) - if err != nil { - t.Fatal(err) - } - }) - } - availablePairs, err = g.GetAvailablePairs(asset.DeliveryFutures) - if err != nil { - t.Fatal(err) - } - for x := range availablePairs { - t.Run(strconv.Itoa(x), func(t *testing.T) { - _, err = g.getSettlementFromCurrency(availablePairs[x], false) - if err != nil { - t.Fatal(err) - } - }) - } - availablePairs, err = g.GetAvailablePairs(asset.Options) - if err != nil { - t.Fatal(err) - } - for x := range availablePairs { - t.Run(strconv.Itoa(x), func(t *testing.T) { - _, err := g.getSettlementFromCurrency(availablePairs[x], false) - if err != nil { - t.Fatal(err) - } - }) +func TestGetSettlementFromCurrency(t *testing.T) { + t.Parallel() + g := new(Gateio) //nolint:govet // Intentional shadow to avoid future copy/paste mistakes + require.NoError(t, testexch.Setup(g), "Setup must not error") + for _, assetType := range []asset.Item{asset.Futures, asset.DeliveryFutures, asset.Options} { + availPairs, err := g.GetAvailablePairs(assetType) + require.NoErrorf(t, err, "GetAvailablePairs for asset %s must not error", assetType) + for x := range availPairs { + t.Run(strconv.Itoa(x), func(t *testing.T) { + t.Parallel() + _, err = getSettlementFromCurrency(availPairs[x]) + assert.NoErrorf(t, err, "getSettlementFromCurrency should not error for pair %s and asset %s", availPairs[x], assetType) + }) + } } } diff --git a/exchanges/gateio/gateio_types.go b/exchanges/gateio/gateio_types.go index 582498668e8..c821677829e 100644 --- a/exchanges/gateio/gateio_types.go +++ b/exchanges/gateio/gateio_types.go @@ -11,20 +11,13 @@ import ( ) const ( - // Settles - settleBTC = "btc" - settleUSD = "usd" - settleUSDT = "usdt" - - // types.Time time in force variables - + // Order time in force variables gtcTIF = "gtc" // good-'til-canceled iocTIF = "ioc" // immediate-or-cancel pocTIF = "poc" fokTIF = "fok" // fill-or-kill - // frequently used order Status - + // Frequently used order Status statusOpen = "open" statusLoaned = "loaned" statusFinished = "finished" @@ -34,6 +27,8 @@ const ( sideBorrow = "borrow" ) +var settlementCurrencies = []currency.Code{currency.BTC, currency.USDT} + // WithdrawalFees the large list of predefined withdrawal fees // Prone to change var WithdrawalFees = map[currency.Code]float64{ @@ -1827,7 +1822,7 @@ type OrderCreateParams struct { ClosePosition bool `json:"close,omitempty"` // Size needs to be zero if true ReduceOnly bool `json:"reduce_only,omitempty"` AutoSize string `json:"auto_size,omitempty"` - Settle string `json:"-"` // Used in URL. + Settle currency.Code `json:"-"` // Used in URL. } // Order represents future order response diff --git a/exchanges/gateio/gateio_wrapper.go b/exchanges/gateio/gateio_wrapper.go index 6c3377067d6..02d2b760fa6 100644 --- a/exchanges/gateio/gateio_wrapper.go +++ b/exchanges/gateio/gateio_wrapper.go @@ -336,8 +336,8 @@ func (g *Gateio) UpdateTicker(ctx context.Context, p currency.Pair, a asset.Item AssetType: a, } case asset.Futures: - var settle string - settle, err = g.getSettlementFromCurrency(fPair, true) + var settle currency.Code + settle, err = getSettlementFromCurrency(fPair) if err != nil { return nil, err } @@ -403,8 +403,8 @@ func (g *Gateio) UpdateTicker(ctx context.Context, p currency.Pair, a asset.Item } return ticker.GetTicker(g.Name, fPair, a) case asset.DeliveryFutures: - var settle string - settle, err = g.getSettlementFromCurrency(fPair, false) + var settle currency.Code + settle, err = getSettlementFromCurrency(fPair) if err != nil { return nil, err } @@ -498,11 +498,11 @@ func (g *Gateio) FetchTradablePairs(ctx context.Context, a asset.Item) (currency } return pairs, nil case asset.Futures: - btcContracts, err := g.GetAllFutureContracts(ctx, settleBTC) + btcContracts, err := g.GetAllFutureContracts(ctx, currency.BTC) if err != nil { return nil, err } - usdtContracts, err := g.GetAllFutureContracts(ctx, settleUSDT) + usdtContracts, err := g.GetAllFutureContracts(ctx, currency.USDT) if err != nil { return nil, err } @@ -524,11 +524,11 @@ func (g *Gateio) FetchTradablePairs(ctx context.Context, a asset.Item) (currency } return pairs, nil case asset.DeliveryFutures: - btcContracts, err := g.GetAllDeliveryContracts(ctx, settleBTC) + btcContracts, err := g.GetAllDeliveryContracts(ctx, currency.BTC) if err != nil { return nil, err } - usdtContracts, err := g.GetAllDeliveryContracts(ctx, settleUSDT) + usdtContracts, err := g.GetAllDeliveryContracts(ctx, currency.USDT) if err != nil { return nil, err } @@ -636,13 +636,10 @@ func (g *Gateio) UpdateTickers(ctx context.Context, a asset.Item) error { case asset.Futures, asset.DeliveryFutures: var tickers []FuturesTicker var ticks []FuturesTicker - for _, settle := range []string{settleBTC, settleUSDT, settleUSD} { + for _, settle := range settlementCurrencies { if a == asset.Futures { ticks, err = g.GetFuturesTickers(ctx, settle, currency.EMPTYPAIR) } else { - if settle == settleUSD { - continue - } ticks, err = g.GetDeliveryFutureTickers(ctx, settle, currency.EMPTYPAIR) } if err != nil { @@ -733,15 +730,15 @@ func (g *Gateio) UpdateOrderbook(ctx context.Context, p currency.Pair, a asset.I } orderbookNew, err = g.GetOrderbook(ctx, p.String(), "", 0, true) case asset.Futures: - var settle string - settle, err = g.getSettlementFromCurrency(p, true) + var settle currency.Code + settle, err = getSettlementFromCurrency(p) if err != nil { return nil, err } orderbookNew, err = g.GetFuturesOrderbook(ctx, settle, p.String(), "", 0, true) case asset.DeliveryFutures: - var settle string - settle, err = g.getSettlementFromCurrency(p.Upper(), false) + var settle currency.Code + settle, err = getSettlementFromCurrency(p.Upper()) if err != nil { return nil, err } @@ -833,22 +830,18 @@ func (g *Gateio) UpdateAccountInfo(ctx context.Context, a asset.Item) (account.H Currencies: currencies, }) case asset.Futures, asset.DeliveryFutures: - currencies := make([]account.Balance, 0, 3) - settles := []currency.Code{currency.BTC, currency.USDT, currency.USD} - for x := range settles { + currencies := make([]account.Balance, 0, 2) + for x := range settlementCurrencies { var balance *FuturesAccount if a == asset.Futures { - if settles[x].Equal(currency.USD) { - continue - } - balance, err = g.QueryFuturesAccount(ctx, settles[x].String()) + balance, err = g.QueryFuturesAccount(ctx, settlementCurrencies[x]) } else { - balance, err = g.GetDeliveryFuturesAccounts(ctx, settles[x].String()) + balance, err = g.GetDeliveryFuturesAccounts(ctx, settlementCurrencies[x]) } if err != nil { if strings.Contains(err.Error(), unfundedFuturesAccount) { if g.Verbose { - log.Warnf(log.ExchangeSys, "%s %v for settlement: %v", g.Name, err, settles[x]) + log.Warnf(log.ExchangeSys, "%s %v for settlement: %v", g.Name, err, settlementCurrencies[x]) } continue } @@ -972,8 +965,8 @@ func (g *Gateio) GetRecentTrades(ctx context.Context, p currency.Pair, a asset.I } } case asset.Futures: - var settle string - settle, err = g.getSettlementFromCurrency(p, true) + var settle currency.Code + settle, err = getSettlementFromCurrency(p) if err != nil { return nil, err } @@ -995,8 +988,8 @@ func (g *Gateio) GetRecentTrades(ctx context.Context, p currency.Pair, a asset.I } } case asset.DeliveryFutures: - var settle string - settle, err = g.getSettlementFromCurrency(p, false) + var settle currency.Code + settle, err = getSettlementFromCurrency(p) if err != nil { return nil, err } @@ -1122,7 +1115,7 @@ func (g *Gateio) SubmitOrder(ctx context.Context, s *order.Submit) (*order.Submi // * iceberg orders // * auto_size (close_long, close_short) // * stp_act (self trade prevention) - settle, err := g.getSettlementFromCurrency(s.Pair, true) + settle, err := getSettlementFromCurrency(s.Pair) if err != nil { return nil, err } @@ -1168,7 +1161,7 @@ func (g *Gateio) SubmitOrder(ctx context.Context, s *order.Submit) (*order.Submi response.AverageExecutedPrice = fOrder.FillPrice.Float64() return response, nil case asset.DeliveryFutures: - settle, err := g.getSettlementFromCurrency(s.Pair, false) + settle, err := getSettlementFromCurrency(s.Pair) if err != nil { return nil, err } @@ -1260,8 +1253,8 @@ func (g *Gateio) CancelOrder(ctx context.Context, o *order.Cancel) error { case asset.Spot, asset.Margin, asset.CrossMargin: _, err = g.CancelSingleSpotOrder(ctx, o.OrderID, fPair.String(), o.AssetType == asset.CrossMargin) case asset.Futures, asset.DeliveryFutures: - var settle string - settle, err = g.getSettlementFromCurrency(fPair, true) + var settle currency.Code + settle, err = getSettlementFromCurrency(fPair) if err != nil { return err } @@ -1338,7 +1331,7 @@ func (g *Gateio) CancelBatchOrders(ctx context.Context, o []order.Cancel) (*orde } case asset.Futures: for a := range o { - cancel, err := g.CancelMultipleFuturesOpenOrders(ctx, o[a].Pair, o[a].Side.Lower(), o[a].Pair.Quote.String()) + cancel, err := g.CancelMultipleFuturesOpenOrders(ctx, o[a].Pair, o[a].Side.Lower(), o[a].Pair.Quote) if err != nil { return nil, err } @@ -1348,7 +1341,7 @@ func (g *Gateio) CancelBatchOrders(ctx context.Context, o []order.Cancel) (*orde } case asset.DeliveryFutures: for a := range o { - settle, err := g.getSettlementFromCurrency(o[a].Pair, false) + settle, err := getSettlementFromCurrency(o[a].Pair) if err != nil { return nil, err } @@ -1401,8 +1394,8 @@ func (g *Gateio) CancelAllOrders(ctx context.Context, o *order.Cancel) (order.Ca if o.Pair.IsEmpty() { return cancelAllOrdersResponse, currency.ErrCurrencyPairEmpty } - var settle string - settle, err = g.getSettlementFromCurrency(o.Pair, true) + var settle currency.Code + settle, err = getSettlementFromCurrency(o.Pair) if err != nil { return cancelAllOrdersResponse, err } @@ -1418,8 +1411,8 @@ func (g *Gateio) CancelAllOrders(ctx context.Context, o *order.Cancel) (order.Ca if o.Pair.IsEmpty() { return cancelAllOrdersResponse, currency.ErrCurrencyPairEmpty } - var settle string - settle, err = g.getSettlementFromCurrency(o.Pair, false) + var settle currency.Code + settle, err = getSettlementFromCurrency(o.Pair) if err != nil { return cancelAllOrdersResponse, err } @@ -1501,8 +1494,8 @@ func (g *Gateio) GetOrderInfo(ctx context.Context, orderID string, pair currency LastUpdated: spotOrder.UpdateTimeMs.Time(), }, nil case asset.Futures, asset.DeliveryFutures: - var settle string - settle, err = g.getSettlementFromCurrency(pair, a == asset.Futures) + var settle currency.Code + settle, err = getSettlementFromCurrency(pair) if err != nil { return nil, err } @@ -1715,19 +1708,19 @@ func (g *Gateio) GetActiveOrders(ctx context.Context, req *order.MultiOrderReque } } case asset.Futures, asset.DeliveryFutures: - settlements := map[string]bool{} + settlements := map[currency.Code]bool{} if len(req.Pairs) == 0 { - settlements["btc"] = true - settlements["usdt"] = true - settlements["usd"] = true + for x := range settlementCurrencies { + settlements[settlementCurrencies[x]] = true + } } else { for x := range req.Pairs { - var s string - s, err = g.getSettlementFromCurrency(req.Pairs[x], req.AssetType == asset.Futures) + var settle currency.Code + settle, err = getSettlementFromCurrency(req.Pairs[x]) if err != nil { return nil, err } - settlements[s] = true + settlements[settle] = true } } @@ -1773,7 +1766,7 @@ func (g *Gateio) GetActiveOrders(ctx context.Context, req *order.MultiOrderReque AssetType: req.AssetType, Side: side, Type: order.Limit, - SettlementCurrency: currency.NewCode(settlement), + SettlementCurrency: settlement, ReduceOnly: futuresOrders[x].IsReduceOnly, PostOnly: futuresOrders[x].TimeInForce == "poc", AverageExecutedPrice: futuresOrders[x].FillPrice.Float64(), @@ -1865,18 +1858,11 @@ func (g *Gateio) GetOrderHistory(ctx context.Context, req *order.MultiOrderReque case asset.Futures, asset.DeliveryFutures: for x := range req.Pairs { fPair := req.Pairs[x].Format(format) - var settle string - if req.AssetType == asset.Futures { - settle, err = g.getSettlementFromCurrency(fPair, true) - } else { - settle, err = g.getSettlementFromCurrency(fPair, false) - } + var settle currency.Code + settle, err = getSettlementFromCurrency(fPair) if err != nil { return nil, err } - if req.AssetType == asset.Futures && settle == settleUSD { - settle = settleBTC - } var futuresOrder []TradingHistoryItem if req.AssetType == asset.Futures { futuresOrder, err = g.GetMyPersonalTradingHistory(ctx, settle, "", req.FromOrderID, fPair, 0, 0, 0) @@ -1954,18 +1940,11 @@ func (g *Gateio) GetHistoricCandles(ctx context.Context, pair currency.Pair, a a } } case asset.Futures, asset.DeliveryFutures: - var settlement string - if req.Asset == asset.Futures { - settlement, err = g.getSettlementFromCurrency(req.RequestFormatted, true) - } else { - settlement, err = g.getSettlementFromCurrency(req.RequestFormatted, false) - } + var settlement currency.Code + settlement, err = getSettlementFromCurrency(req.RequestFormatted) if err != nil { return nil, err } - if req.Asset == asset.Futures && settlement == settleUSD { - settlement = settleBTC - } var candles []FuturesCandlestick if a == asset.Futures { candles, err = g.GetFuturesCandlesticks(ctx, settlement, req.RequestFormatted.String(), start, end, 0, interval) @@ -2018,18 +1997,11 @@ func (g *Gateio) GetHistoricCandlesExtended(ctx context.Context, pair currency.P }) } case asset.Futures, asset.DeliveryFutures: - var settle string - if req.Asset == asset.Futures { - settle, err = g.getSettlementFromCurrency(req.RequestFormatted, true) - } else { - settle, err = g.getSettlementFromCurrency(req.RequestFormatted, false) - } + var settle currency.Code + settle, err = getSettlementFromCurrency(req.RequestFormatted) if err != nil { return nil, err } - if req.Asset == asset.Futures && settle == settleUSD { - settle = settleBTC - } var candles []FuturesCandlestick if a == asset.Futures { candles, err = g.GetFuturesCandlesticks(ctx, settle, req.RequestFormatted.String(), req.RangeHolder.Ranges[b].Start.Time, req.RangeHolder.Ranges[b].End.Time, 0, interval) @@ -2099,10 +2071,9 @@ func (g *Gateio) GetFuturesContractDetails(ctx context.Context, item asset.Item) } switch item { case asset.Futures: - settlePairs := []string{"btc", "usdt", "usd"} var resp []futures.Contract - for k := range settlePairs { - contracts, err := g.GetAllFutureContracts(ctx, settlePairs[k]) + for k := range settlementCurrencies { + contracts, err := g.GetAllFutureContracts(ctx, settlementCurrencies[k]) if err != nil { return nil, err } @@ -2113,12 +2084,11 @@ func (g *Gateio) GetFuturesContractDetails(ctx context.Context, item asset.Item) if err != nil { return nil, err } - settlePair := currency.NewCode(settlePairs[k]) contractSettlementType := futures.Linear switch { - case name.Base.Equal(currency.BTC) && settlePair.Equal(currency.BTC): + case name.Base.Equal(currency.BTC) && settlementCurrencies[k].Equal(currency.BTC): contractSettlementType = futures.Inverse - case !name.Base.Equal(settlePair) && !settlePair.Equal(currency.USDT): + case !name.Base.Equal(settlementCurrencies[k]) && !settlementCurrencies[k].Equal(currency.USDT): contractSettlementType = futures.Quanto } c := futures.Contract{ @@ -2129,7 +2099,7 @@ func (g *Gateio) GetFuturesContractDetails(ctx context.Context, item asset.Item) IsActive: !contracts[j].InDelisting, Type: futures.Perpetual, SettlementType: contractSettlementType, - SettlementCurrencies: currency.Currencies{settlePair}, + SettlementCurrencies: currency.Currencies{settlementCurrencies[k]}, Multiplier: contracts[j].QuantoMultiplier.Float64(), MaxLeverage: contracts[j].LeverageMax.Float64(), } @@ -2145,10 +2115,9 @@ func (g *Gateio) GetFuturesContractDetails(ctx context.Context, item asset.Item) } return resp, nil case asset.DeliveryFutures: - settlePairs := []string{"btc", "usdt"} var resp []futures.Contract - for k := range settlePairs { - contracts, err := g.GetAllDeliveryContracts(ctx, settlePairs[k]) + for k := range settlementCurrencies { + contracts, err := g.GetAllDeliveryContracts(ctx, settlementCurrencies[k]) if err != nil { return nil, err } @@ -2194,7 +2163,7 @@ func (g *Gateio) GetFuturesContractDetails(ctx context.Context, item asset.Item) SettlementType: futures.Linear, IsActive: !contracts[j].InDelisting, Type: ct, - SettlementCurrencies: currency.Currencies{currency.NewCode(settlePairs[k])}, + SettlementCurrencies: currency.Currencies{settlementCurrencies[k]}, MarginCurrency: currency.Code{}, Multiplier: contracts[j].QuantoMultiplier.Float64(), MaxLeverage: contracts[j].LeverageMax.Float64(), @@ -2297,7 +2266,7 @@ func (g *Gateio) GetHistoricalFundingRates(ctx context.Context, r *fundingrate.H return nil, err } - records, err := g.GetFutureFundingRates(ctx, r.PaymentCurrency.String(), fPair, 1000) + records, err := g.GetFutureFundingRates(ctx, r.PaymentCurrency, fPair, 1000) if err != nil { return nil, err } @@ -2354,8 +2323,8 @@ func (g *Gateio) GetLatestFundingRates(ctx context.Context, r *fundingrate.Lates if err != nil { return nil, err } - var settle string - settle, err = g.getSettlementFromCurrency(fPair, true) + var settle currency.Code + settle, err = getSettlementFromCurrency(fPair) if err != nil { return nil, err } @@ -2368,14 +2337,13 @@ func (g *Gateio) GetLatestFundingRates(ctx context.Context, r *fundingrate.Lates } var resp []fundingrate.LatestRateResponse - settleCurrencies := []string{"btc", "usdt", "usd"} pairs, err := g.GetEnabledPairs(asset.Futures) if err != nil { return nil, err } - for i := range settleCurrencies { - contracts, err := g.GetAllFutureContracts(ctx, settleCurrencies[i]) + for i := range settlementCurrencies { + contracts, err := g.GetAllFutureContracts(ctx, settlementCurrencies[i]) if err != nil { return nil, err } @@ -2450,7 +2418,7 @@ func (g *Gateio) GetOpenInterest(ctx context.Context, k ...key.PairAsset) ([]fut } switch k[0].Asset { case asset.DeliveryFutures: - contractResp, err := g.GetSingleDeliveryContracts(ctx, "usdt", p) + contractResp, err := g.GetSingleDeliveryContracts(ctx, currency.USDT, p) if err != nil { return nil, err } @@ -2467,7 +2435,7 @@ func (g *Gateio) GetOpenInterest(ctx context.Context, k ...key.PairAsset) ([]fut }, }, nil case asset.Futures: - for _, s := range []string{"usd", "usdt", "btc"} { + for _, s := range settlementCurrencies { contractResp, err := g.GetSingleContract(ctx, s, p.String()) if err != nil { continue @@ -2491,7 +2459,7 @@ func (g *Gateio) GetOpenInterest(ctx context.Context, k ...key.PairAsset) ([]fut for _, a := range g.GetAssetTypes(true) { switch a { case asset.DeliveryFutures: - contractResp, err := g.GetAllDeliveryContracts(ctx, "usdt") + contractResp, err := g.GetAllDeliveryContracts(ctx, currency.USDT) if err != nil { return nil, err } @@ -2526,7 +2494,7 @@ func (g *Gateio) GetOpenInterest(ctx context.Context, k ...key.PairAsset) ([]fut }) } case asset.Futures: - for _, s := range []string{"usd", "usdt", "btc"} { + for _, s := range settlementCurrencies { contractResp, err := g.GetAllFutureContracts(ctx, s) if err != nil { return nil, err From d4c4bf1bcd133bb86ade7ad4c8cea730866db6c9 Mon Sep 17 00:00:00 2001 From: Ryan O'Hara-Reid Date: Fri, 8 Nov 2024 15:35:18 +1100 Subject: [PATCH 03/10] bybit: Add OrderbookLastUpdated field and ensure timestamp usage is correct (#1680) * bybit: Add time field for orderbook and handle correct timings * use UpdateID as this is the localised ID for this pair, rm check result.UpdateID == 1 just use snapshot * general quick fixes across from #1672 which can be used straight away * fix test * glorious: nits * thrasher: nits * thrasher: nits thanks @thrasher- --------- Co-authored-by: Ryan O'Hara-Reid --- exchanges/bybit/bybit_test.go | 29 +++++++------ exchanges/bybit/bybit_types.go | 5 ++- exchanges/bybit/bybit_websocket.go | 69 +++++++++++++++--------------- 3 files changed, 54 insertions(+), 49 deletions(-) diff --git a/exchanges/bybit/bybit_test.go b/exchanges/bybit/bybit_test.go index 74bbfac34c0..60d5d4ecef2 100644 --- a/exchanges/bybit/bybit_test.go +++ b/exchanges/bybit/bybit_test.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "maps" "slices" "testing" "time" @@ -3178,16 +3179,16 @@ func TestWsOptionsConnect(t *testing.T) { } var pushDataMap = map[string]string{ - "Orderbook Snapshot": `{"topic":"orderbook.50.BTCUSDT","ts":1690719970602,"type":"snapshot","data":{"s":"BTCUSDT","b":[["29328.25","3.911681"],["29328.21","0.117584"],["29328.19","0.511493"],["29328.16","0.013639"],["29328","0.1646"],["29327.99","1"],["29327.98","0.681309"],["29327.53","0.001"],["29327.46","0.000048"],["29327","0.046517"],["29326.99","0.077528"],["29326.55","0.026808"],["29326.48","0.03"],["29326","0.1646"],["29325.99","0.00075"],["29325.93","0.409862"],["29325.92","0.745"],["29325.87","0.511533"],["29325.85","0.00018"],["29325.42","0.001023"],["29325.41","0.68199"],["29325.36","0.006309"],["29325.35","0.0153"],["29324.97","0.903728"],["29324.96","1.506212"],["29324.49","0.016966"],["29324.38","0.0341"],["29324.17","1.4535"],["29324","0.1646"],["29323.99","0.00075"],["29323.92","0.050492"],["29323.77","1.023141"],["29323.72","0.12"],["29323.48","0.0153"],["29323.26","0.001362"],["29322.78","0.464948"],["29322.77","0.745"],["29322.76","0.0153"],["29322.73","0.013633"],["29322.67","0.53"],["29322.62","0.01"],["29322.04","0.97036"],["29322","0.1656"],["29321.99","0.00075"],["29321.56","0.0341"],["29321.52","0.613945"],["29321.51","0.13"],["29321.4","0.002"],["29321.18","0.196788"],["29321.13","0.34104"]],"a":[["29328.26","1.256884"],["29328.36","0.013639"],["29328.97","0.51148"],["29329","0.002046"],["29329.2","0.035597"],["29329.27","0.001"],["29329.44","0.03523"],["29329.99","0.791676"],["29330","0.546264"],["29330.28","0.001"],["29330.35","0.767184"],["29330.5","0.002725"],["29330.51","0.0341"],["29330.79","0.03"],["29330.81","0.158412"],["29330.93","0.68199"],["29330.95","0.282036"],["29331","0.041"],["29331.13","0.0003"],["29331.19","0.01"],["29331.53","0.050164"],["29331.54","0.008573"],["29331.99","0.26305"],["29332.11","0.008124"],["29332.21","0.8721"],["29332.22","1.4535"],["29332.41","0.157"],["29332.58","0.001023"],["29332.59","0.0153"],["29332.84","0.679527"],["29332.85","1.022812"],["29332.98","0.200071"],["29333.01","1.13254"],["29333.24","0.0153"],["29333.25","0.001362"],["29333.35","0.625"],["29333.37","0.01"],["29333.56","0.0341"],["29333.68","0.21795"],["29333.85","0.182562"],["29333.98","0.0003"],["29333.99","0.00105"],["29334.16","0.009132"],["29334.29","0.0003"],["29334.48","0.029675"],["29334.7","0.00086"],["29334.99","0.006838"],["29335","0.002177"],["29335.18","0.013622"],["29335.32","0.034099"]],"u":51668654,"seq":10194901787}}`, - "Orderbook Update": `{"topic":"orderbook.50.ACAUSDT","ts":1690719548494,"type":"snapshot","data":{"s":"ACAUSDT","b":[["0.0657","5363.66"],["0.0646","7910.21"],["0.0645","1435.73"],["0.0644","1552.8"],["0.0642","6904.01"],["0.064","3232.64"],["0.0639","106"],["0.0637","100"],["0.0636","25.62"],["0.0635","209.43"],["0.0631","237.47"],["0.063","258.13"],["0.0627","318.97"],["0.0625","10066.99"],["0.0624","16.1"],["0.0623","41.72"],["0.0622","1624.59"],["0.0621","402.57"],["0.0616","10.65"],["0.0613","652"],["0.061","1081.97"],["0.0604","413.91"],["0.06","1471.82"],["0.0597","15000"],["0.0595","15000"],["0.0593","608.77"],["0.0591","430.79"],["0.059","444"],["0.0586","4536.97"],["0.0584","1533.58"],["0.0583","3764.43"],["0.0581","3072.34"],["0.058","2654.9"],["0.0579","1022.23"],["0.0576","1931.71"],["0.0574","2545.88"],["0.0573","821.27"],["0.0571","2957"],["0.0568","1483.57"],["0.0561","392.24"],["0.0555","900.9"],["0.055","322.15"],["0.0549","182"],["0.0545","30"],["0.0536","24.24"],["0.0535","1869.15"],["0.053","40"],["0.0529","189"],["0.0525","701.66"],["0.0521","1122.64"]],"a":[["0.0661","3320.27"],["0.0662","8667.02"],["0.0663","6087.91"],["0.0664","6060.61"],["0.0684","591.31"],["0.0689","155.77"],["0.069","1148.02"],["0.0694","2421.86"],["0.0699","155.77"],["0.07","445.87"],["0.0701","142.65"],["0.071","2131.4"],["0.0718","1447.83"],["0.072","420.62"],["0.0743","1399.15"],["0.0745","1481.62"],["0.0747","32.97"],["0.0748","900.38"],["0.0749","209.44"],["0.075","124.49"],["0.0757","41.9"],["0.0762","657.43"],["0.077","48.77"],["0.0779","96.26"],["0.078","12305.94"],["0.079","29.77"],["0.0797","512.26"],["0.0799","743.29"],["0.08","5050.7"],["0.0814","11.71"],["0.0815","75.93"],["0.0817","403"],["0.082","817.43"],["0.0825","768.47"],["0.0828","388.77"],["0.083","150.53"],["0.0835","18"],["0.084","10776.95"],["0.0841","1465.17"],["0.0848","15000"],["0.085","16976.73"],["0.0853","798.45"],["0.0856","5239.19"],["0.0857","5134.18"],["0.0858","3885.13"],["0.0859","3691.71"],["0.086","16847.35"],["0.0862","898.68"],["0.0863","994.24"],["0.0865","1251.56"]],"u":4694899,"seq":12206894097}}`, + "Orderbook Snapshot": `{"topic":"orderbook.50.BTCUSDT","ts":1731035685326,"type":"snapshot","data":{"s":"BTCUSDT","b":[["75848.74","0.067669"],["75848.63","0.004772"],["75848.61","0.00659"],["75848.05","0.000329"],["75847.68","0.00159"],["75846.88","0.00159"],["75845.97","0.026366"],["75845.87","0.013185"],["75845.41","0.077259"],["75845.4","0.132228"],["75844.61","0.00159"],["75844.44","0.026367"],["75844.2","0.013185"],["75844","0.00039"],["75843.13","0.00159"],["75843.07","0.013185"],["75842.33","0.00159"],["75841.99","0.006"],["75841.75","0.019538"],["75841.74","0.04"],["75841.71","0.031817"],["75841.36","0.017336"],["75841.33","0.000072"],["75841.16","0.001872"],["75841.11","0.172641"],["75841.04","0.029772"],["75841","0.000065"],["75840.93","0.015244"],["75840.86","0.00159"],["75840.79","0.000072"],["75840.38","0.043333"],["75840.32","0.092539"],["75840.3","0.132228"],["75840.2","0.054966"],["75840.06","0.00159"],["75840","0.20726"],["75839.64","0.003744"],["75839.29","0.006592"],["75838.58","0.00159"],["75838.52","0.049778"],["75838.14","0.003955"],["75838","0.000065"],["75837.78","0.00159"],["75837.75","0.000587"],["75837.53","0.322245"],["75837.52","0.593323"],["75837.37","0.00384"],["75837.29","0.044335"],["75837.24","0.119228"],["75837.13","0.152844"]],"a":[["75848.75","0.747137"],["75848.89","0.060306"],["75848.9","0.1"],["75851.43","0.00159"],["75851.44","0.080754"],["75852.23","0.00159"],["75852.54","0.131067"],["75852.65","0.003955"],["75853.71","0.00159"],["75853.86","0.003955"],["75854.43","0.015684"],["75854.5","0.130389"],["75854.51","0.00159"],["75855.21","0.031168"],["75855.23","0.271494"],["75855.73","0.042698"],["75855.98","0.00159"],["75856.04","0.01346"],["75856.33","0.001872"],["75856.78","0.00159"],["75857.15","0.000072"],["75857.17","0.015127"],["75857.8","0.043322"],["75857.81","0.045305"],["75857.85","0.003792"],["75858.09","0.026344"],["75858.26","0.00159"],["75859.06","0.031618"],["75859.07","0.025"],["75859.1","0.006592"],["75859.98","0.013183"],["75860.12","0.00384"],["75860.54","0.00159"],["75860.74","0.051204"],["75860.75","0.065861"],["75861.18","0.031222"],["75861.33","0.00159"],["75861.64","0.003888"],["75861.96","0.042213"],["75862.28","0.000777"],["75862.79","0.013184"],["75862.81","0.00159"],["75862.84","0.027959"],["75863.16","0.003888"],["75863.51","0.043628"],["75863.52","0.002525"],["75863.61","0.00159"],["75864.2","0.003955"],["75864.76","0.000072"],["75864.81","0.002018"]],"u":2876700,"seq":47474967795},"cts":1731035685323}`, + "Orderbook Update": `{"topic":"orderbook.50.BTCUSDT","ts":1731035685345,"type":"delta","data":{"s":"BTCUSDT","b":[["75848.62","0.014895"],["75837.13","0"]],"a":[["75848.89","0.088149"],["75851.44","0.078379"],["75852.65","0"],["75855.23","0.260219"],["75857.74","0.049778"]],"u":2876701,"seq":47474967823},"cts":1731035685342}`, "Public Trade": `{"topic":"publicTrade.ATOM2SUSDT","ts":1690720953113,"type":"snapshot","data":[{"i":"2200000000067341890","T":1690720953111,"p":"3.6279","v":"1.3637","S":"Sell","s":"ATOM2SUSDT","BT":false}]}`, "Public Kline": `{ "topic": "kline.5.BTCUSDT", "data": [ { "start": 1672324800000, "end": 1672325099999, "interval": "5", "open": "16649.5", "close": "16677", "high": "16677", "low": "16608", "volume": "2.081", "turnover": "34666.4005", "confirm": false, "timestamp": 1672324988882 } ], "ts": 1672324988882,"type": "snapshot"}`, "Public Liquidiation": `{ "data": { "price": "0.03803", "side": "Buy", "size": "1637", "symbol": "GALAUSDT", "updatedTime": 1673251091822 }, "topic": "liquidation.GALAUSDT", "ts": 1673251091822, "type": "snapshot" }`, - "Public LT Kline": `{ "type": "snapshot", "topic": "kline_lt.5.EOS3LUSDT", "data": [ { "start": 1672325100000, "end": 1672325399999, "interval": "5", "open": "0.416039541212402799", "close": "0.41477848043290448", "high": "0.416039541212402799", "low": "0.409734237314911206", "confirm": false, "timestamp": 1672325322393 } ], "ts": 1672325322393 }`, - "Public LT Ticker": `{ "topic": "tickers_lt.EOS3LUSDT", "ts": 1672325446847, "type": "snapshot", "data": { "symbol": "EOS3LUSDT", "lastPrice": "0.41477848043290448", "highPrice24h": "0.435285472510871305", "lowPrice24h": "0.394601507960931382", "prevPrice24h": "0.431502290172376349", "price24hPcnt": "-0.0388" } }`, - "Public LT Navigation": `{ "topic": "lt.EOS3LUSDT", "ts": 1672325564669, "type": "snapshot", "data": { "symbol": "EOS3LUSDT", "time": 1672325564554, "nav": "0.413517419653406162", "basketPosition": "1.261060779498318641", "leverage": "2.656197506416192150", "basketLoan": "-0.684866519289629374", "circulation": "72767.309468460367138199", "basket": "91764.000000292013277472" } }`, + "Public LT Kline": `{ "type": "snapshot", "topic": "kline_lt.5.BTCUSDT", "data": [ { "start": 1672325100000, "end": 1672325399999, "interval": "5", "open": "0.416039541212402799", "close": "0.41477848043290448", "high": "0.416039541212402799", "low": "0.409734237314911206", "confirm": false, "timestamp": 1672325322393 } ], "ts": 1672325322393 }`, + "Public LT Ticker": `{ "topic": "tickers_lt.BTCUSDT", "ts": 1672325446847, "type": "snapshot", "data": { "symbol": "BTCUSDT", "lastPrice": "0.41477848043290448", "highPrice24h": "0.435285472510871305", "lowPrice24h": "0.394601507960931382", "prevPrice24h": "0.431502290172376349", "price24hPcnt": "-0.0388" } }`, + "Public LT Navigation": `{ "topic": "lt.EOS3LUSDT", "ts": 1672325564669, "type": "snapshot", "data": { "symbol": "BTCUSDT", "time": 1672325564554, "nav": "0.413517419653406162", "basketPosition": "1.261060779498318641", "leverage": "2.656197506416192150", "basketLoan": "-0.684866519289629374", "circulation": "72767.309468460367138199", "basket": "91764.000000292013277472" } }`, "Private Position": `{"id": "59232430b58efe-5fc5-4470-9337-4ce293b68edd", "topic": "position", "creationTime": 1672364174455, "data": [ { "positionIdx": 0, "tradeMode": 0, "riskId": 41, "riskLimitValue": "200000", "symbol": "XRPUSDT", "side": "Buy", "size": "75", "entryPrice": "0.3615", "leverage": "10", "positionValue": "27.1125", "positionBalance": "0", "markPrice": "0.3374", "positionIM": "2.72589075", "positionMM": "0.28576575", "takeProfit": "0", "stopLoss": "0", "trailingStop": "0", "unrealisedPnl": "-1.8075", "cumRealisedPnl": "0.64782276", "createdTime": "1672121182216", "updatedTime": "1672364174449", "tpslMode": "Full", "liqPrice": "", "bustPrice": "", "category": "linear","positionStatus":"Normal","adlRankIndicator":2}]}`, - "Private Order": `{ "id": "5923240c6880ab-c59f-420b-9adb-3639adc9dd90", "topic": "order", "creationTime": 1672364262474, "data": [ { "symbol": "ETH-30DEC22-1400-C", "orderId": "5cf98598-39a7-459e-97bf-76ca765ee020", "side": "Sell", "orderType": "Market", "cancelType": "UNKNOWN", "price": "72.5", "qty": "1", "orderIv": "", "timeInForce": "IOC", "orderStatus": "Filled", "orderLinkId": "", "lastPriceOnCreated": "", "reduceOnly": false, "leavesQty": "", "leavesValue": "", "cumExecQty": "1", "cumExecValue": "75", "avgPrice": "75", "blockTradeId": "", "positionIdx": 0, "cumExecFee": "0.358635", "createdTime": "1672364262444", "updatedTime": "1672364262457", "rejectReason": "EC_NoError", "stopOrderType": "", "tpslMode": "", "triggerPrice": "", "takeProfit": "", "stopLoss": "", "tpTriggerBy": "", "slTriggerBy": "", "tpLimitPrice": "", "slLimitPrice": "", "triggerDirection": 0, "triggerBy": "", "closeOnTrigger": false, "category": "option", "placeType": "price", "smpType": "None", "smpGroup": 0, "smpOrderId": "" } ] }`, + "Private Order": `{ "id": "5923240c6880ab-c59f-420b-9adb-3639adc9dd90", "topic": "order", "creationTime": 1672364262474, "data": [ { "symbol": "BTCUSDT", "orderId": "5cf98598-39a7-459e-97bf-76ca765ee020", "side": "Sell", "orderType": "Market", "cancelType": "UNKNOWN", "price": "72.5", "qty": "1", "orderIv": "", "timeInForce": "IOC", "orderStatus": "Filled", "orderLinkId": "", "lastPriceOnCreated": "", "reduceOnly": false, "leavesQty": "", "leavesValue": "", "cumExecQty": "1", "cumExecValue": "75", "avgPrice": "75", "blockTradeId": "", "positionIdx": 0, "cumExecFee": "0.358635", "createdTime": "1672364262444", "updatedTime": "1672364262457", "rejectReason": "EC_NoError", "stopOrderType": "", "tpslMode": "", "triggerPrice": "", "takeProfit": "", "stopLoss": "", "tpTriggerBy": "", "slTriggerBy": "", "tpLimitPrice": "", "slLimitPrice": "", "triggerDirection": 0, "triggerBy": "", "closeOnTrigger": false, "category": "option", "placeType": "price", "smpType": "None", "smpGroup": 0, "smpOrderId": "" } ] }`, "Private Wallet": `{ "id": "5923242c464be9-25ca-483d-a743-c60101fc656f", "topic": "wallet", "creationTime": 1672364262482, "data": [ { "accountIMRate": "0.016", "accountMMRate": "0.003", "totalEquity": "12837.78330098", "totalWalletBalance": "12840.4045924", "totalMarginBalance": "12837.78330188", "totalAvailableBalance": "12632.05767702", "totalPerpUPL": "-2.62129051", "totalInitialMargin": "205.72562486", "totalMaintenanceMargin": "39.42876721", "coin": [ { "coin": "USDC", "equity": "200.62572554", "usdValue": "200.62572554", "walletBalance": "201.34882644", "availableToWithdraw": "0", "availableToBorrow": "1500000", "borrowAmount": "0", "accruedInterest": "0", "totalOrderIM": "0", "totalPositionIM": "202.99874213", "totalPositionMM": "39.14289747", "unrealisedPnl": "74.2768991", "cumRealisedPnl": "-209.1544627", "bonus": "0" }, { "coin": "BTC", "equity": "0.06488393", "usdValue": "1023.08402268", "walletBalance": "0.06488393", "availableToWithdraw": "0.06488393", "availableToBorrow": "2.5", "borrowAmount": "0", "accruedInterest": "0", "totalOrderIM": "0", "totalPositionIM": "0", "totalPositionMM": "0", "unrealisedPnl": "0", "cumRealisedPnl": "0", "bonus": "0" }, { "coin": "ETH", "equity": "0", "usdValue": "0", "walletBalance": "0", "availableToWithdraw": "0", "availableToBorrow": "26", "borrowAmount": "0", "accruedInterest": "0", "totalOrderIM": "0", "totalPositionIM": "0", "totalPositionMM": "0", "unrealisedPnl": "0", "cumRealisedPnl": "0", "bonus": "0" }, { "coin": "USDT", "equity": "11726.64664904", "usdValue": "11613.58597018", "walletBalance": "11728.54414904", "availableToWithdraw": "11723.92075829", "availableToBorrow": "2500000", "borrowAmount": "0", "accruedInterest": "0", "totalOrderIM": "0", "totalPositionIM": "2.72589075", "totalPositionMM": "0.28576575", "unrealisedPnl": "-1.8975", "cumRealisedPnl": "0.64782276", "bonus": "0" }, { "coin": "EOS3L", "equity": "215.0570412", "usdValue": "0", "walletBalance": "215.0570412", "availableToWithdraw": "215.0570412", "availableToBorrow": "0", "borrowAmount": "0", "accruedInterest": "", "totalOrderIM": "0", "totalPositionIM": "0", "totalPositionMM": "0", "unrealisedPnl": "0", "cumRealisedPnl": "0", "bonus": "0" }, { "coin": "BIT", "equity": "1.82", "usdValue": "0.48758257", "walletBalance": "1.82", "availableToWithdraw": "1.82", "availableToBorrow": "0", "borrowAmount": "0", "accruedInterest": "", "totalOrderIM": "0", "totalPositionIM": "0", "totalPositionMM": "0", "unrealisedPnl": "0", "cumRealisedPnl": "0", "bonus": "0" } ], "accountType": "UNIFIED", "accountLTV": "0.017" } ] }`, "Private Greek": `{ "id": "592324fa945a30-2603-49a5-b865-21668c29f2a6", "topic": "greeks", "creationTime": 1672364262482, "data": [ { "baseCoin": "ETH", "totalDelta": "0.06999986", "totalGamma": "-0.00000001", "totalVega": "-0.00000024", "totalTheta": "0.00001314" } ] }`, "Execution": `{"id": "592324803b2785-26fa-4214-9963-bdd4727f07be", "topic": "execution", "creationTime": 1672364174455, "data": [ { "category": "linear", "symbol": "XRPUSDT", "execFee": "0.005061", "execId": "7e2ae69c-4edf-5800-a352-893d52b446aa", "execPrice": "0.3374", "execQty": "25", "execType": "Trade", "execValue": "8.435", "isMaker": false, "feeRate": "0.0006", "tradeIv": "", "markIv": "", "blockTradeId": "", "markPrice": "0.3391", "indexPrice": "", "underlyingPrice": "", "leavesQty": "0", "orderId": "f6e324ff-99c2-4e89-9739-3086e47f9381", "orderLinkId": "", "orderPrice": "0.3207", "orderQty":"25","orderType":"Market","stopOrderType":"UNKNOWN","side":"Sell","execTime":"1672364174443","isLeverage": "0","closedSize": "","seq":4688002127}]}`, @@ -3195,11 +3196,13 @@ var pushDataMap = map[string]string{ func TestPushData(t *testing.T) { t.Parallel() - for x := range pushDataMap { - err := b.wsHandleData(asset.Spot, []byte(pushDataMap[x])) - if err != nil { - t.Errorf("%s: %v", x, err) - } + + keys := slices.Collect(maps.Keys(pushDataMap)) + slices.Sort(keys) + + for x := range keys { + err := b.wsHandleData(asset.Spot, []byte(pushDataMap[keys[x]])) + assert.NoError(t, err, "wsHandleData should not error") } } @@ -3474,12 +3477,12 @@ func TestFetchTradablePairs(t *testing.T) { func TestDeltaUpdateOrderbook(t *testing.T) { t.Parallel() - data := `{"topic":"orderbook.50.WEMIXUSDT","ts":1697573183768,"type":"snapshot","data":{"s":"WEMIXUSDT","b":[["0.9511","260.703"],["0.9677","0"]],"a":[],"u":3119516,"seq":14126848493}}` + data := `{"topic":"orderbook.50.WEMIXUSDT","ts":1697573183768,"type":"snapshot","data":{"s":"WEMIXUSDT","b":[["0.9511","260.703"],["0.9677","0"]],"a":[],"u":3119516,"seq":14126848493},"cts":1728966699481}` err := b.wsHandleData(asset.Spot, []byte(data)) if err != nil { t.Fatal(err) } - update := `{"topic":"orderbook.50.WEMIXUSDT","ts":1697573183768,"type":"delta","data":{"s":"WEMIXUSDT","b":[["0.9511","260.703"],["0.9677","0"]],"a":[],"u":3119516,"seq":14126848493}}` + update := `{"topic":"orderbook.50.WEMIXUSDT","ts":1697573183768,"type":"delta","data":{"s":"WEMIXUSDT","b":[["0.9511","260.703"],["0.9677","0"]],"a":[],"u":3119516,"seq":14126848493},"cts":1728966699481}` var wsResponse WebsocketResponse err = json.Unmarshal([]byte(update), &wsResponse) if err != nil { diff --git a/exchanges/bybit/bybit_types.go b/exchanges/bybit/bybit_types.go index 3b4708699df..656a4d2ffa7 100644 --- a/exchanges/bybit/bybit_types.go +++ b/exchanges/bybit/bybit_types.go @@ -1775,7 +1775,7 @@ type SubscriptionResponse struct { type WebsocketResponse struct { Topic string `json:"topic"` Type string `json:"type"` - Timestamp types.Time `json:"ts"` + PushTimestamp types.Time `json:"ts"` // The timestamp (ms) that the system generates the data Data json.RawMessage `json:"data"` CrossSequence int64 `json:"cs"` @@ -1784,6 +1784,9 @@ type WebsocketResponse struct { // for subscription response checks. RequestID string `json:"req_id"` + + // The timestamp from the match engine when orderbook data is produced. It can be correlated with T from public trade channel + OrderbookLastUpdated types.Time `json:"cts"` } // WebsocketPublicTrades represents diff --git a/exchanges/bybit/bybit_websocket.go b/exchanges/bybit/bybit_websocket.go index 6106827c280..9d1b84268c1 100644 --- a/exchanges/bybit/bybit_websocket.go +++ b/exchanges/bybit/bybit_websocket.go @@ -363,7 +363,7 @@ func (by *Bybit) wsProcessOrder(assetType asset.Item, resp *WebsocketResponse) e } execution := make([]order.Detail, len(result)) for x := range result { - cp, err := currency.NewPairFromString(result[x].Symbol) + cp, err := by.MatchSymbolWithAvailablePairs(result[x].Symbol, assetType, hasPotentialDelimiter(assetType)) if err != nil { return err } @@ -404,7 +404,7 @@ func (by *Bybit) wsProcessExecution(assetType asset.Item, resp *WebsocketRespons } executions := make([]fill.Data, len(result)) for x := range result { - cp, err := currency.NewPairFromString(result[x].Symbol) + cp, err := by.MatchSymbolWithAvailablePairs(result[x].Symbol, assetType, hasPotentialDelimiter(assetType)) if err != nil { return err } @@ -455,7 +455,7 @@ func (by *Bybit) wsProcessLeverageTokenTicker(assetType asset.Item, resp *Websoc if err != nil { return err } - cp, err := currency.NewPairFromString(result.Symbol) + cp, err := by.MatchSymbolWithAvailablePairs(result.Symbol, assetType, hasPotentialDelimiter(assetType)) if err != nil { return err } @@ -466,7 +466,7 @@ func (by *Bybit) wsProcessLeverageTokenTicker(assetType asset.Item, resp *Websoc Pair: cp, ExchangeName: by.Name, AssetType: assetType, - LastUpdated: resp.Timestamp.Time(), + LastUpdated: resp.PushTimestamp.Time(), } return nil } @@ -477,7 +477,7 @@ func (by *Bybit) wsProcessLeverageTokenKline(assetType asset.Item, resp *Websock if err != nil { return err } - cp, err := currency.NewPairFromString(topicSplit[2]) + cp, err := by.MatchSymbolWithAvailablePairs(topicSplit[2], assetType, hasPotentialDelimiter(assetType)) if err != nil { return err } @@ -521,7 +521,7 @@ func (by *Bybit) wsProcessKline(assetType asset.Item, resp *WebsocketResponse, t if err != nil { return err } - cp, err := currency.NewPairFromString(topicSplit[2]) + cp, err := by.MatchSymbolWithAvailablePairs(topicSplit[2], assetType, hasPotentialDelimiter(assetType)) if err != nil { return err } @@ -556,7 +556,7 @@ func (by *Bybit) wsProcessPublicTicker(assetType asset.Item, resp *WebsocketResp return err } - p, err := by.MatchSymbolWithAvailablePairs(tickResp.Symbol, assetType, true) + p, err := by.MatchSymbolWithAvailablePairs(tickResp.Symbol, assetType, hasPotentialDelimiter(assetType)) if err != nil { return err } @@ -582,7 +582,7 @@ func (by *Bybit) wsProcessPublicTicker(assetType asset.Item, resp *WebsocketResp } updateTicker(tick, tickResp) - tick.LastUpdated = resp.Timestamp.Time() + tick.LastUpdated = resp.PushTimestamp.Time() if err = ticker.ProcessTicker(tick); err == nil { by.Websocket.DataHandler <- tick @@ -657,7 +657,7 @@ func (by *Bybit) wsProcessPublicTrade(assetType asset.Item, resp *WebsocketRespo } tradeDatas := make([]trade.Data, len(result)) for x := range result { - cp, err := currency.NewPairFromString(result[x].Symbol) + cp, err := by.MatchSymbolWithAvailablePairs(result[x].Symbol, assetType, hasPotentialDelimiter(assetType)) if err != nil { return err } @@ -685,7 +685,7 @@ func (by *Bybit) wsProcessOrderbook(assetType asset.Item, resp *WebsocketRespons if err != nil { return err } - cp, err := currency.NewPairFromString(result.Symbol) + cp, err := by.MatchSymbolWithAvailablePairs(result.Symbol, assetType, hasPotentialDelimiter(assetType)) if err != nil { return err } @@ -714,33 +714,27 @@ func (by *Bybit) wsProcessOrderbook(assetType asset.Item, resp *WebsocketRespons if len(asks) == 0 && len(bids) == 0 { return nil } - if resp.Type == "snapshot" || result.UpdateID == 1 { - err = by.Websocket.Orderbook.LoadSnapshot(&orderbook.Base{ - Pair: cp, - Exchange: by.Name, - Asset: assetType, - LastUpdated: resp.Timestamp.Time(), - LastUpdateID: result.Sequence, - Asks: asks, - Bids: bids, - }) - if err != nil { - return err - } - } else { - err = by.Websocket.Orderbook.Update(&orderbook.Update{ - Pair: cp, - Asks: asks, - Bids: bids, - Asset: assetType, - UpdateID: result.Sequence, - UpdateTime: resp.Timestamp.Time(), + if resp.Type == "snapshot" { + return by.Websocket.Orderbook.LoadSnapshot(&orderbook.Base{ + Pair: cp, + Exchange: by.Name, + Asset: assetType, + LastUpdated: resp.OrderbookLastUpdated.Time(), + LastUpdateID: result.UpdateID, + UpdatePushedAt: resp.PushTimestamp.Time(), + Asks: asks, + Bids: bids, }) - if err != nil { - return err - } } - return nil + return by.Websocket.Orderbook.Update(&orderbook.Update{ + Pair: cp, + Asks: asks, + Bids: bids, + Asset: assetType, + UpdateID: result.UpdateID, + UpdateTime: resp.OrderbookLastUpdated.Time(), + UpdatePushedAt: resp.PushTimestamp.Time(), + }) } // channelName converts global channel names to exchange specific names @@ -778,3 +772,8 @@ const subTplText = ` {{- $.AssetSeparator }} {{- end }} ` + +// hasPotentialDelimiter returns if the asset has a potential delimiter on the pairs being returned. +func hasPotentialDelimiter(a asset.Item) bool { + return a == asset.Options || a == asset.USDCMarginedFutures +} From a2a7fed273686ec660a4d835bb2222451f8a7883 Mon Sep 17 00:00:00 2001 From: Gareth Kirwan Date: Mon, 11 Nov 2024 04:19:25 +0100 Subject: [PATCH 04/10] Huobi: Add subscription configuration (#1604) * Huobi: Update test config format * Huobi: Add subscription configuration * Huobi: Add subscription documentation * Huobi: Clarify OB sub Levels usage * Huobi: Enable websocket for tests * Subscriptions: Rename ErrPrivateChannelName Rename ErrPrivateChannelName to ErrUseConstChannelName --- .../exchanges_templates/huobi.tmpl | 20 +- exchanges/huobi/README.md | 20 +- exchanges/huobi/huobi_test.go | 64 +++++++ exchanges/huobi/huobi_websocket.go | 175 ++++++++++-------- exchanges/huobi/huobi_wrapper.go | 3 +- exchanges/kraken/kraken_test.go | 4 +- exchanges/kraken/kraken_websocket.go | 2 +- exchanges/subscription/subscription.go | 3 +- testdata/configtest.json | 16 +- 9 files changed, 209 insertions(+), 98 deletions(-) diff --git a/cmd/documentation/exchanges_templates/huobi.tmpl b/cmd/documentation/exchanges_templates/huobi.tmpl index 844129ec014..d4966962f6a 100644 --- a/cmd/documentation/exchanges_templates/huobi.tmpl +++ b/cmd/documentation/exchanges_templates/huobi.tmpl @@ -92,12 +92,24 @@ if err != nil { } ``` -### How to do Websocket public/private calls +### Subscriptions -```go - // Exchanges will be abstracted out in further updates and examples will be - // supplied then +All subscriptions are for spot only. + +Default Public Subscriptions: +- Ticker +- Candles ( Interval: 1min ) +- Orderbook ( Level: 0 - No aggregation ) + - Configure Level: 1-5 for depth aggregation, for example: +```json + {"enabled": true, "channel": "orderbook", "asset": "spot", "levels": 1} ``` +- Trades + +Default Authenticated Subscriptions: +- Account Trades +- Account Orders +- Account Updates ### Please click GoDocs chevron above to view current GoDoc information for this package {{template "contributions"}} diff --git a/exchanges/huobi/README.md b/exchanges/huobi/README.md index d9286604326..7c3a465596b 100644 --- a/exchanges/huobi/README.md +++ b/exchanges/huobi/README.md @@ -110,12 +110,24 @@ if err != nil { } ``` -### How to do Websocket public/private calls +### Subscriptions -```go - // Exchanges will be abstracted out in further updates and examples will be - // supplied then +All subscriptions are for spot only. + +Default Public Subscriptions: +- Ticker +- Candles ( Interval: 1min ) +- Orderbook ( Level: 0 - No aggregation ) + - Configure Level: 1-5 for depth aggregation, for example: +```json + {"enabled": true, "channel": "orderbook", "asset": "spot", "levels": 1} ``` +- Trades + +Default Authenticated Subscriptions: +- Account Trades +- Account Orders +- Account Updates ### Please click GoDocs chevron above to view current GoDoc information for this package diff --git a/exchanges/huobi/huobi_test.go b/exchanges/huobi/huobi_test.go index 09fec32114b..bb0c17da0c0 100644 --- a/exchanges/huobi/huobi_test.go +++ b/exchanges/huobi/huobi_test.go @@ -25,8 +25,10 @@ import ( "github.com/thrasher-corp/gocryptotrader/exchanges/order" "github.com/thrasher-corp/gocryptotrader/exchanges/sharedtestvalues" "github.com/thrasher-corp/gocryptotrader/exchanges/stream" + "github.com/thrasher-corp/gocryptotrader/exchanges/subscription" "github.com/thrasher-corp/gocryptotrader/exchanges/ticker" testexch "github.com/thrasher-corp/gocryptotrader/internal/testing/exchange" + testsubs "github.com/thrasher-corp/gocryptotrader/internal/testing/subscriptions" "github.com/thrasher-corp/gocryptotrader/portfolio/withdraw" ) @@ -2927,3 +2929,65 @@ func TestGetCurrencyTradeURL(t *testing.T) { } } } + +func TestGenerateSubscriptions(t *testing.T) { + t.Parallel() + + h := new(HUOBI) + require.NoError(t, testexch.Setup(h), "Test instance Setup must not error") + subs, err := h.generateSubscriptions() + require.NoError(t, err, "generateSubscriptions must not error") + exp := subscription.List{} + for _, s := range h.Features.Subscriptions { + if s.Authenticated && !h.Websocket.CanUseAuthenticatedEndpoints() { + continue + } + for _, a := range h.GetAssetTypes(true) { + if s.Asset != asset.All && s.Asset != a { + continue + } + pairs, err := h.GetEnabledPairs(a) + require.NoErrorf(t, err, "GetEnabledPairs %s must not error", a) + pairs = common.SortStrings(pairs).Format(currency.PairFormat{Uppercase: false, Delimiter: ""}) + s := s.Clone() //nolint:govet // Intentional lexical scope shadow + s.Asset = a + for i, p := range pairs { + s := s.Clone() //nolint:govet // Intentional lexical scope shadow + s.QualifiedChannel = channelName(s, p) + switch s.Channel { + case subscription.OrderbookChannel: + s.QualifiedChannel += ".step0" + case subscription.CandlesChannel: + s.QualifiedChannel += ".1min" + } + s.Pairs = pairs[i : i+1] + exp = append(exp, s) + } + } + } + testsubs.EqualLists(t, exp, subs) +} + +// TestSubscribe exercises live public subscriptions +func TestSubscribe(t *testing.T) { + t.Parallel() + h := new(HUOBI) + require.NoError(t, testexch.Setup(h), "Test instance Setup must not error") + subs, err := h.Features.Subscriptions.ExpandTemplates(h) + require.NoError(t, err, "ExpandTemplates must not error") + testexch.SetupWs(t, h) + err = h.Subscribe(subs) + require.NoError(t, err, "Subscribe must not error") + got := h.Websocket.GetSubscriptions() + require.Equal(t, 4, len(got), "Must get correct number of subscriptions") + for _, s := range got { + assert.Equal(t, subscription.SubscribedState, s.State()) + } +} + +func TestChannelName(t *testing.T) { + p := currency.NewPair(currency.BTC, currency.USD) + assert.Equal(t, "market.BTCUSD.kline", channelName(&subscription.Subscription{Channel: subscription.CandlesChannel}, p)) + assert.Panics(t, func() { channelName(&subscription.Subscription{Channel: wsOrderbookChannel}, p) }) + assert.Panics(t, func() { channelName(&subscription.Subscription{Channel: subscription.MyAccountChannel}, p) }, "Should panic on V2 endpoints until implemented") +} diff --git a/exchanges/huobi/huobi_websocket.go b/exchanges/huobi/huobi_websocket.go index 999f025137c..0ff45913cce 100644 --- a/exchanges/huobi/huobi_websocket.go +++ b/exchanges/huobi/huobi_websocket.go @@ -9,6 +9,7 @@ import ( "net/url" "strconv" "strings" + "text/template" "time" "github.com/gorilla/websocket" @@ -17,6 +18,7 @@ import ( "github.com/thrasher-corp/gocryptotrader/currency" "github.com/thrasher-corp/gocryptotrader/exchanges/account" "github.com/thrasher-corp/gocryptotrader/exchanges/asset" + "github.com/thrasher-corp/gocryptotrader/exchanges/kline" "github.com/thrasher-corp/gocryptotrader/exchanges/order" "github.com/thrasher-corp/gocryptotrader/exchanges/orderbook" "github.com/thrasher-corp/gocryptotrader/exchanges/request" @@ -31,11 +33,13 @@ const ( baseWSURL = "wss://api.huobi.pro" futuresWSURL = "wss://api.hbdm.com/" - wsMarketURL = baseWSURL + "/ws" - wsMarketKline = "market.%s.kline.1min" - wsMarketDepth = "market.%s.depth.step0" - wsMarketTrade = "market.%s.trade.detail" - wsMarketTicker = "market.%s.detail" + wsMarketURL = baseWSURL + "/ws" + wsCandlesChannel = "market.%s.kline" + wsOrderbookChannel = "market.%s.depth" + wsTradesChannel = "market.%s.trade.detail" + wsMarketDetailChannel = "market.%s.detail" + wsMyOrdersChannel = "orders.%s" + wsMyTradesChannel = "orders.%s.update" wsAccountsOrdersEndPoint = "/ws/v1" wsAccountsList = "accounts.list" @@ -56,6 +60,28 @@ const ( loginDelay = 50 * time.Millisecond ) +var defaultSubscriptions = subscription.List{ + {Enabled: true, Asset: asset.Spot, Channel: subscription.TickerChannel}, + {Enabled: true, Asset: asset.Spot, Channel: subscription.CandlesChannel, Interval: kline.OneMin}, + {Enabled: true, Asset: asset.Spot, Channel: subscription.OrderbookChannel, Levels: 0}, // Aggregation Levels; 0 is no depth aggregation + {Enabled: true, Asset: asset.Spot, Channel: subscription.AllTradesChannel}, + {Enabled: true, Asset: asset.Spot, Channel: subscription.MyOrdersChannel, Authenticated: true}, + {Enabled: true, Asset: asset.Spot, Channel: subscription.MyTradesChannel, Authenticated: true}, + {Enabled: true, Channel: subscription.MyAccountChannel, Authenticated: true}, +} + +var subscriptionNames = map[string]string{ + subscription.TickerChannel: wsMarketDetailChannel, + subscription.CandlesChannel: wsCandlesChannel, + subscription.OrderbookChannel: wsOrderbookChannel, + subscription.AllTradesChannel: wsTradesChannel, + /* TODO: Pending upcoming V2 support, these are dropped from the translation table so that the sub conf will be correct and not need upgrading, but will error on usage + subscription.MyTradesChannel: wsMyOrdersChannel, + subscription.MyOrdersChannel: wsMyTradesChannel, + subscription.MyAccountChannel: wsMyAccountChannel, + */ +} + // Instantiates a communications channel between websocket connections var comms = make(chan WsMessage) @@ -514,101 +540,66 @@ func (h *HUOBI) WsProcessOrderbook(update *WsDepth, symbol string) error { return h.Websocket.Orderbook.LoadSnapshot(&newOrderBook) } -// GenerateDefaultSubscriptions Adds default subscriptions to websocket to be handled by ManageSubscriptions() -func (h *HUOBI) GenerateDefaultSubscriptions() (subscription.List, error) { - var channels = []string{wsMarketKline, - wsMarketDepth, - wsMarketTrade, - wsMarketTicker} - var subscriptions subscription.List - if h.Websocket.CanUseAuthenticatedEndpoints() { - channels = append(channels, "orders.%v", "orders.%v.update") - subscriptions = append(subscriptions, &subscription.Subscription{ - Channel: "accounts", - }) - } - enabledCurrencies, err := h.GetEnabledPairs(asset.Spot) - if err != nil { - return nil, err - } - for i := range channels { - for j := range enabledCurrencies { - enabledCurrencies[j].Delimiter = "" - channel := fmt.Sprintf(channels[i], - enabledCurrencies[j].Lower().String()) - subscriptions = append(subscriptions, &subscription.Subscription{ - Channel: channel, - Pairs: currency.Pairs{enabledCurrencies[j]}, - }) - } - } - return subscriptions, nil +// generateSubscriptions returns a list of subscriptions from the configured subscriptions feature +func (h *HUOBI) generateSubscriptions() (subscription.List, error) { + return h.Features.Subscriptions.ExpandTemplates(h) +} + +// GetSubscriptionTemplate returns a subscription channel template +func (h *HUOBI) GetSubscriptionTemplate(_ *subscription.Subscription) (*template.Template, error) { + return template.New("master.tmpl").Funcs(template.FuncMap{ + "channelName": channelName, + "interval": h.FormatExchangeKlineInterval, + }).Parse(subTplText) } // Subscribe sends a websocket message to receive data from the channel -func (h *HUOBI) Subscribe(channelsToSubscribe subscription.List) error { +func (h *HUOBI) Subscribe(subs subscription.List) error { + ctx := context.Background() + var errs error var creds *account.Credentials - if h.Websocket.CanUseAuthenticatedEndpoints() { - var err error - creds, err = h.GetCredentials(context.TODO()) - if err != nil { - return err + if len(subs.Private()) > 0 { + if creds, errs = h.GetCredentials(ctx); errs != nil { + return errs } } - var errs error - for i := range channelsToSubscribe { + for _, s := range subs { var err error - if (strings.Contains(channelsToSubscribe[i].Channel, "orders.") || - strings.Contains(channelsToSubscribe[i].Channel, "accounts")) && creds != nil { - err = h.wsAuthenticatedSubscribe(creds, - "sub", - wsAccountsOrdersEndPoint+channelsToSubscribe[i].Channel, - channelsToSubscribe[i].Channel) + if s.Authenticated { + if err = h.wsAuthenticatedSubscribe(creds, "sub", wsAccountsOrdersEndPoint+"/"+s.QualifiedChannel, s.QualifiedChannel); err == nil { + err = h.Websocket.AddSuccessfulSubscriptions(h.Websocket.Conn, s) + } } else { - err = h.Websocket.Conn.SendJSONMessage(context.TODO(), request.Unset, WsRequest{ - Subscribe: channelsToSubscribe[i].Channel, - }) - } - if err == nil { - err = h.Websocket.AddSuccessfulSubscriptions(h.Websocket.Conn, channelsToSubscribe[i]) - } - if err != nil { - errs = common.AppendError(errs, err) + if err = h.Websocket.Conn.SendJSONMessage(ctx, request.Unset, WsRequest{Subscribe: s.QualifiedChannel}); err == nil { + err = h.Websocket.AddSuccessfulSubscriptions(h.Websocket.AuthConn, s) + } } + errs = common.AppendError(errs, err) } return nil } // Unsubscribe sends a websocket message to stop receiving data from the channel -func (h *HUOBI) Unsubscribe(channelsToUnsubscribe subscription.List) error { +func (h *HUOBI) Unsubscribe(subs subscription.List) error { + ctx := context.Background() + var errs error var creds *account.Credentials - if h.Websocket.CanUseAuthenticatedEndpoints() { - var err error - creds, err = h.GetCredentials(context.TODO()) - if err != nil { - return err + if len(subs.Private()) > 0 { + if creds, errs = h.GetCredentials(ctx); errs != nil { + return errs } } - var errs error - for i := range channelsToUnsubscribe { + for _, s := range subs { var err error - if (strings.Contains(channelsToUnsubscribe[i].Channel, "orders.") || - strings.Contains(channelsToUnsubscribe[i].Channel, "accounts")) && creds != nil { - err = h.wsAuthenticatedSubscribe(creds, - "unsub", - wsAccountsOrdersEndPoint+channelsToUnsubscribe[i].Channel, - channelsToUnsubscribe[i].Channel) + if s.Authenticated { + err = h.wsAuthenticatedSubscribe(creds, "unsub", wsAccountsOrdersEndPoint+"/"+s.QualifiedChannel, s.QualifiedChannel) } else { - err = h.Websocket.Conn.SendJSONMessage(context.TODO(), request.Unset, WsRequest{ - Unsubscribe: channelsToUnsubscribe[i].Channel, - }) + err = h.Websocket.Conn.SendJSONMessage(ctx, request.Unset, WsRequest{Unsubscribe: s.QualifiedChannel}) } if err == nil { - err = h.Websocket.RemoveSubscriptions(h.Websocket.Conn, channelsToUnsubscribe[i]) - } - if err != nil { - errs = common.AppendError(errs, err) + err = h.Websocket.RemoveSubscriptions(h.Websocket.Conn, s) } + errs = common.AppendError(errs, err) } return errs } @@ -810,3 +801,31 @@ func (h *HUOBI) wsGetOrderDetails(ctx context.Context, orderID string) (*WsAuthe } return &response, nil } + +// channelName converts global channel Names used in config of channel input into exchange channel names +// returns the name unchanged if no match is found +func channelName(s *subscription.Subscription, p currency.Pair) string { + if n, ok := subscriptionNames[s.Channel]; ok { + return fmt.Sprintf(n, p) + } + if s.Authenticated { + panic(fmt.Errorf("%w: Private endpoints not currently supported", common.ErrNotYetImplemented)) + } + panic(subscription.ErrUseConstChannelName) +} + +const subTplText = ` +{{- if $.S.Asset }} + {{ range $asset, $pairs := $.AssetPairs }} + {{- range $p := $pairs }} + {{- channelName $.S $p -}} + {{- if eq $.S.Channel "candles" -}} . {{- interval $.S.Interval }}{{ end }} + {{- if eq $.S.Channel "orderbook" -}} .step {{- $.S.Levels }}{{ end }} + {{ $.PairSeparator }} + {{- end }} + {{ $.AssetSeparator }} + {{- end }} +{{- else -}} + {{ channelName $.S nil }} +{{- end }} +` diff --git a/exchanges/huobi/huobi_wrapper.go b/exchanges/huobi/huobi_wrapper.go index f0deb80ad87..9a62d91a0e2 100644 --- a/exchanges/huobi/huobi_wrapper.go +++ b/exchanges/huobi/huobi_wrapper.go @@ -162,6 +162,7 @@ func (h *HUOBI) SetDefaults() { GlobalResultLimit: 2000, }, }, + Subscriptions: defaultSubscriptions.Clone(), } h.Requester, err = request.New(h.Name, @@ -213,7 +214,7 @@ func (h *HUOBI) Setup(exch *config.Exchange) error { Connector: h.WsConnect, Subscriber: h.Subscribe, Unsubscriber: h.Unsubscribe, - GenerateSubscriptions: h.GenerateDefaultSubscriptions, + GenerateSubscriptions: h.generateSubscriptions, Features: &h.Features.Supports.WebsocketCapabilities, }) if err != nil { diff --git a/exchanges/kraken/kraken_test.go b/exchanges/kraken/kraken_test.go index 7f8f8e05628..2babae23b81 100644 --- a/exchanges/kraken/kraken_test.go +++ b/exchanges/kraken/kraken_test.go @@ -1001,7 +1001,7 @@ func TestWsSubscribe(t *testing.T) { Channel: c, Pairs: currency.Pairs{spotTestPair}, }}) - assert.ErrorIs(t, err, subscription.ErrPrivateChannelName, "Must error when trying to use a private channel name") + assert.ErrorIs(t, err, subscription.ErrUseConstChannelName, "Must error when trying to use a private channel name") assert.ErrorContains(t, err, c+" => subscription.CandlesChannel", "Must error when trying to use a private channel name") } } @@ -1703,6 +1703,6 @@ func TestEnforceStandardChannelNames(t *testing.T) { } for _, n := range []string{krakenWsOrderbook, krakenWsOHLC, krakenWsTrade, krakenWsOwnTrades, krakenWsOpenOrders, krakenWsOrderbook + "-5"} { err := enforceStandardChannelNames(&subscription.Subscription{Channel: n}) - assert.ErrorIsf(t, err, subscription.ErrPrivateChannelName, "Private channel names should not be allowed for %s", n) + assert.ErrorIsf(t, err, subscription.ErrUseConstChannelName, "Private channel names should not be allowed for %s", n) } } diff --git a/exchanges/kraken/kraken_websocket.go b/exchanges/kraken/kraken_websocket.go index b572af6a335..22088590463 100644 --- a/exchanges/kraken/kraken_websocket.go +++ b/exchanges/kraken/kraken_websocket.go @@ -1237,7 +1237,7 @@ func channelName(s *subscription.Subscription) string { func enforceStandardChannelNames(s *subscription.Subscription) error { name := strings.Split(s.Channel, "-") // Protect against attempted usage of book-N as a channel name if n, ok := reverseChannelNames[name[0]]; ok && n != s.Channel { - return fmt.Errorf("%w: %s => subscription.%s%sChannel", subscription.ErrPrivateChannelName, s.Channel, bytes.ToUpper([]byte{n[0]}), n[1:]) + return fmt.Errorf("%w: %s => subscription.%s%sChannel", subscription.ErrUseConstChannelName, s.Channel, bytes.ToUpper([]byte{n[0]}), n[1:]) } return nil } diff --git a/exchanges/subscription/subscription.go b/exchanges/subscription/subscription.go index a2a47055542..db76b370521 100644 --- a/exchanges/subscription/subscription.go +++ b/exchanges/subscription/subscription.go @@ -32,6 +32,7 @@ const ( MyTradesChannel = "myTrades" MyOrdersChannel = "myOrders" MyWalletChannel = "myWallet" + MyAccountChannel = "myAccount" ) // Public errors @@ -42,7 +43,7 @@ var ( ErrInStateAlready = errors.New("subscription already in state") ErrInvalidState = errors.New("invalid subscription state") ErrDuplicate = errors.New("duplicate subscription") - ErrPrivateChannelName = errors.New("must use standard channel name constants") + ErrUseConstChannelName = errors.New("must use standard channel name constants") ) // State tracks the status of a subscription channel diff --git a/testdata/configtest.json b/testdata/configtest.json index d9c80bf88ae..8846ee0e4a9 100644 --- a/testdata/configtest.json +++ b/testdata/configtest.json @@ -1794,11 +1794,6 @@ "delimiter": "-" }, "useGlobalFormat": true, - "assetTypes": [ - "spot", - "coinmarginedfutures", - "futures" - ], "pairs": { "coinmarginedfutures": { "assetEnabled": true, @@ -1826,6 +1821,7 @@ } }, "spot": { + "assetEnabled": true, "enabled": "BTC-USDT", "available": "PROPY-ETH,IOTA-BTC,UGAS-ETH,PAI-USDT,BSV-HUSD,MTX-ETH,BCH-BTC,LTC-HT,SOC-USDT,WXT-BTC,SALT-BTC,RCN-ETH,PNT-ETH,TT-USDT,AIDOC-ETH,BIX-BTC,OCN-USDT,QTUM-ETH,KCASH-ETH,SNT-USDT,LUN-BTC,QASH-BTC,ITC-BTC,NAS-BTC,XMR-BTC,TNT-ETH,UC-ETH,FAIR-BTC,PC-ETH,YEE-BTC,PAY-ETH,XMX-BTC,CRE-USDT,BAT-ETH,BHT-USDT,CKB-HT,LAMB-HT,AE-USDT,QUN-ETH,LYM-BTC,BCH-HT,BHT-BTC,RUFF-ETH,CNN-BTC,FOR-USDT,GTC-ETH,TRX-ETH,ELA-USDT,ACT-ETH,SMT-ETH,BUT-ETH,BCH-USDT,ICX-BTC,MEET-BTC,NCC-BTC,APPC-BTC,GVE-ETH,TNB-BTC,STEEM-ETH,18C-ETH,LBA-BTC,EKO-BTC,REQ-BTC,SOC-BTC,BOX-ETH,ELF-BTC,ZRX-ETH,LET-USDT,HT-BTC,TUSD-HUSD,EGCC-BTC,WTC-BTC,ATP-USDT,DOCK-USDT,PAI-BTC,ONT-ETH,IRIS-BTC,BTT-ETH,SC-BTC,XZC-BTC,LBA-USDT,HT-USDT,VET-ETH,KMD-ETH,SHE-ETH,PORTAL-BTC,ONE-BTC,BIX-USDT,RCCC-BTC,SKM-USDT,XTZ-ETH,SWFTC-BTC,RSR-BTC,LINK-ETH,DATX-BTC,HPT-HT,GET-ETH,BLZ-ETH,CTXC-USDT,CNNS-USDT,PVT-HT,ITC-USDT,LTC-BTC,NCASH-BTC,HOT-ETH,ADA-USDT,ADX-BTC,NODE-USDT,TRIO-BTC,GXC-ETH,SNT-BTC,FOR-BTC,DBC-BTC,UUU-USDT,CVCOIN-ETH,RSR-USDT,CRO-USDT,OCN-BTC,NEW-USDT,EGT-USDT,MANA-BTC,CMT-USDT,WXT-HT,XRP-BTC,MT-ETH,PAX-HUSD,LSK-ETH,IOTA-USDT,SRN-ETH,ZIL-ETH,ELF-USDT,LXT-ETH,LAMB-BTC,CRE-HT,CKB-BTC,XVG-BTC,BSV-BTC,BFT-BTC,WPR-ETH,HT-HUSD,POWR-BTC,MANA-ETH,ENG-ETH,ZJLT-ETH,SNC-ETH,ATOM-ETH,WICC-USDT,KAN-ETH,DGD-BTC,VSYS-HT,BCD-BTC,BTM-ETH,DOGE-USDT,MEX-BTC,BTG-BTC,DAC-ETH,DAT-BTC,GRS-ETH,ADX-ETH,EM-HT,GXC-USDT,CVC-BTC,OMG-ETH,SSP-ETH,OGO-HT,CMT-ETH,POLY-ETH,XZC-USDT,THETA-USDT,XEM-USDT,LOL-USDT,BCH-HUSD,GSC-BTC,DOGE-ETH,MDS-BTC,BTS-ETH,CTXC-BTC,MCO-BTC,BCX-BTC,ZLA-ETH,EKT-USDT,MAN-BTC,BLZ-BTC,ATOM-USDT,LOL-BTC,HPT-USDT,EM-BTC,EOS-USDT,WAN-BTC,GNT-BTC,CRO-BTC,MANA-USDT,SEELE-USDT,FSN-BTC,VIDY-HT,USDC-HUSD,LTC-HUSD,XRP-USDT,VSYS-BTC,STORJ-BTC,LOOM-ETH,SKM-BTC,LINK-USDT,TT-HT,QSP-ETH,ETN-BTC,FSN-HT,NODE-BTC,HC-USDT,PHX-BTC,XLM-BTC,RCCC-ETH,LTC-USDT,UUU-BTC,SEELE-ETH,PVT-BTC,HC-ETH,REN-ETH,KAN-USDT,EOS-ETH,BSV-USDT,BTS-USDT,KMD-BTC,OGO-USDT,THETA-ETH,MUSK-BTC,CNNS-HT,ETC-BTC,COVA-BTC,BTT-TRX,XMR-USDT,MTN-ETH,QUN-BTC,NAS-USDT,ELA-ETH,HIT-ETH,BTT-USDT,EKT-ETH,TOS-BTC,GAS-ETH,DCR-USDT,ONT-BTC,NEW-HT,NEXO-BTC,ETH-USDT,WXT-USDT,FOR-HT,ADA-BTC,EVX-ETH,VET-BTC,ZEC-USDT,NANO-ETH,IOST-HT,BCV-ETH,REN-USDT,NULS-ETH,ACT-USDT,LET-ETH,BTM-USDT,MEET-ETH,AKRO-HT,ARDR-BTC,DCR-ETH,NANO-USDT,BTC-HUSD,ALGO-BTC,IIC-ETH,BHD-BTC,KNC-ETH,ATP-BTC,ZRX-BTC,ABT-BTC,18C-BTC,XMR-ETH,WAXP-BTC,CVNT-BTC,MX-USDT,OST-ETH,NKN-BTC,TOPC-BTC,GNX-BTC,FTT-USDT,ONE-HT,DGB-ETH,NULS-USDT,DASH-BTC,UIP-BTC,KCASH-HT,WICC-ETH,EKO-ETH,EGT-HT,IRIS-USDT,STK-ETH,MXC-BTC,NAS-ETH,OMG-USDT,SMT-BTC,BUT-BTC,HIT-USDT,BAT-BTC,IRIS-ETH,NKN-HT,PC-BTC,TOP-USDT,GTC-BTC,LSK-BTC,ITC-ETH,DTA-BTC,HOT-BTC,BTT-BTC,FAIR-ETH,DOCK-ETH,QTUM-BTC,ZEN-BTC,ZIL-BTC,RCN-BTC,FTI-BTC,BHD-USDT,VIDY-USDT,LUN-ETH,DBC-ETH,TOPC-ETH,IIC-BTC,STEEM-USDT,IOTA-ETH,KCASH-BTC,RUFF-BTC,APPC-ETH,MT-BTC,SOC-ETH,GT-HT,PROPY-BTC,AIDOC-BTC,ACT-BTC,LYM-ETH,CHAT-BTC,SWFTC-ETH,ETH-BTC,UIP-USDT,UGAS-BTC,XRP-HUSD,ALGO-USDT,TNT-BTC,ONT-USDT,YEE-ETH,AKRO-BTC,TRX-USDT,OCN-ETH,SRN-BTC,DASH-USDT,XMX-ETH,NANO-BTC,QASH-ETH,EOS-HT,GT-BTC,XTZ-USDT,ARPA-USDT,SALT-ETH,BKBT-ETH,MTX-BTC,SMT-USDT,GXC-BTC,VIDY-BTC,FTT-HT,LAMB-ETH,TRX-BTC,TRIO-ETH,BFT-ETH,LINK-BTC,AE-ETH,NULS-BTC,BHD-HT,AST-ETH,NEO-USDT,EDU-BTC,CVCOIN-BTC,GVE-BTC,GET-BTC,ZRX-USDT,ELF-ETH,DATX-ETH,ADA-ETH,TOP-HT,NCASH-ETH,QTUM-USDT,ETC-HT,ZIL-USDT,TNB-ETH,BIX-ETH,SHE-BTC,PNT-BTC,BTC-USDT,PORTAL-ETH,WAVES-USDT,XZC-ETH,HT-ETH,POLY-BTC,MCO-ETH,MUSK-ETH,PAI-ETH,LXT-USDT,UTK-BTC,RTE-BTC,NCC-ETH,HB10-USDT,BOX-BTC,RDN-ETH,ARPA-BTC,LBA-ETH,CNN-ETH,AAC-ETH,XTZ-BTC,IDT-BTC,AKRO-USDT,IOST-BTC,GT-USDT,WAN-ETH,ETN-ETH,PVT-USDT,NEO-BTC,WAVES-ETH,ONE-USDT,ZEC-BTC,SKM-HT,IOST-ETH,NPXS-ETH,CVC-ETH,CMT-BTC,COVA-ETH,ARDR-ETH,RDN-BTC,DCR-BTC,REN-BTC,YCC-ETH,MX-HT,NEXO-ETH,XLM-ETH,YCC-BTC,ENG-BTC,CNNS-BTC,ZLA-BTC,QSP-BTC,MAN-ETH,UUU-ETH,ETH-HUSD,RTE-ETH,ATP-HT,BTM-BTC,DAC-BTC,TOS-ETH,LAMB-USDT,DASH-HT,NPXS-BTC,NEW-BTC,FTT-BTC,EOS-HUSD,GRS-BTC,POWR-ETH,VET-USDT,AAC-BTC,MX-BTC,MTN-BTC,XVG-ETH,GNX-ETH,SSP-BTC,WAVES-BTC,EGT-BTC,CTXC-ETH,IDT-ETH,STK-BTC,WICC-BTC,UTK-ETH,CRO-HT,LXT-BTC,GSC-ETH,OMG-BTC,XRP-HT,DGB-BTC,IOST-USDT,CVNT-ETH,GAS-BTC,HIT-BTC,CKB-USDT,ARPA-HT,RUFF-USDT,HC-BTC,WTC-ETH,MDS-USDT,ABT-ETH,ALGO-ETH,BIFI-BTC,KNC-BTC,TT-BTC,LET-BTC,NKN-USDT,PAY-BTC,DTA-USDT,AE-BTC,UC-BTC,VSYS-USDT,USDT-HUSD,EOS-BTC,STEEM-BTC,DOGE-BTC,NODE-HT,MDS-ETH,CRE-BTC,GNT-USDT,UIP-ETH,AST-BTC,XEM-BTC,ZEN-ETH,EDU-ETH,MEX-ETH,EKT-BTC,CVC-USDT,WAXP-ETH,REQ-ETH,OST-BTC,STORJ-USDT,SBTC-BTC,DGD-ETH,SC-ETH,WTC-USDT,THETA-BTC,DTA-ETH,BCV-BTC,SNC-BTC,RSR-HT,KAN-BTC,ELA-BTC,ATOM-BTC,BKBT-BTC,FSN-USDT,EM-USDT,WPR-BTC,TOP-BTC,BTS-BTC,EGCC-ETH,MTL-BTC,GNT-ETH,SEELE-BTC,EVX-BTC,FTI-ETH,BAT-USDT,MT-HT,LOL-HT,ICX-ETH,LOOM-BTC,ZJLT-BTC,XLM-USDT,OGO-BTC,DOCK-BTC,CHAT-ETH,DAT-ETH,ETC-USDT,HPT-BTC,BHT-HT" } @@ -1860,7 +1856,7 @@ }, "enabled": { "autoPairUpdates": true, - "websocketAPI": false + "websocketAPI": true } }, "bankAccounts": [ @@ -1877,7 +1873,13 @@ "iban": "", "supportedCurrencies": "" } - ] + ], + "orderbook": { + "verificationBypass": false, + "websocketBufferLimit": 5, + "websocketBufferEnabled": false, + "publishPeriod": 10000000000 + } }, { "name": "Kraken", From 4de4e3dc14eb83eeed0a109cff3374bf02048d90 Mon Sep 17 00:00:00 2001 From: Ryan O'Hara-Reid Date: Mon, 11 Nov 2024 14:46:14 +1100 Subject: [PATCH 05/10] stream/buffer: Improve orderbook verification conditions and fix TestUpdateByIDAndAction test (#1682) * don't need to verify if checksum available; don't retroactively verify snapshots * glorious: nits + allow checksum/validation to be done on updateByIDAndAction * possible slice manipulation issue fix for test * thrasher: nit * this should fix it now * for subsystem usage disallow deploying a book twice * reverts strict policy using deploy, it's used in a bunch of tests I don't want to touch just yet, left a note * rm unused variable * glorious: nits --------- Co-authored-by: Ryan O'Hara-Reid --- exchanges/orderbook/orderbook.go | 19 +- exchanges/orderbook/orderbook_test.go | 27 +- exchanges/stream/buffer/buffer.go | 61 +- exchanges/stream/buffer/buffer_test.go | 824 +++++++++---------------- 4 files changed, 347 insertions(+), 584 deletions(-) diff --git a/exchanges/orderbook/orderbook.go b/exchanges/orderbook/orderbook.go index 540180be627..5773864ffcd 100644 --- a/exchanges/orderbook/orderbook.go +++ b/exchanges/orderbook/orderbook.go @@ -79,8 +79,7 @@ func (s *Service) Update(b *Base) error { return s.Mux.Publish(book, m1.ID) } -// DeployDepth used for subsystem deployment creates a depth item in the struct -// then returns a ptr to that Depth item +// DeployDepth used for subsystem deployment creates a depth item in the struct then returns a ptr to that Depth item func (s *Service) DeployDepth(exchange string, p currency.Pair, a asset.Item) (*Depth, error) { if exchange == "" { return nil, errExchangeNameUnset @@ -112,13 +111,15 @@ func (s *Service) DeployDepth(exchange string, p currency.Pair, a asset.Item) (* s.books[strings.ToLower(exchange)] = m1 } book, ok := m1.m[mapKey] - if !ok { - book = NewDepth(m1.ID) - book.exchange = exchange - book.pair = p - book.asset = a - m1.m[mapKey] = book - } + if ok { + // Maybe in future we should return an error here and be more strict. + return book, nil + } + book = NewDepth(m1.ID) + book.exchange = exchange + book.pair = p + book.asset = a + m1.m[mapKey] = book return book, nil } diff --git a/exchanges/orderbook/orderbook_test.go b/exchanges/orderbook/orderbook_test.go index 33b7d5a23b6..127393b600c 100644 --- a/exchanges/orderbook/orderbook_test.go +++ b/exchanges/orderbook/orderbook_test.go @@ -10,6 +10,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/require" "github.com/thrasher-corp/gocryptotrader/currency" "github.com/thrasher-corp/gocryptotrader/dispatch" "github.com/thrasher-corp/gocryptotrader/exchanges/asset" @@ -321,28 +322,18 @@ func TestBaseGetDepth(t *testing.T) { func TestDeployDepth(t *testing.T) { c, err := currency.NewPairFromStrings("BTC", "USD") - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) _, err = DeployDepth("", c, asset.Spot) - if !errors.Is(err, errExchangeNameUnset) { - t.Fatalf("expecting %s error but received %v", errExchangeNameUnset, err) - } + require.ErrorIs(t, err, errExchangeNameUnset) _, err = DeployDepth("test", currency.EMPTYPAIR, asset.Spot) - if !errors.Is(err, errPairNotSet) { - t.Fatalf("expecting %s error but received %v", errPairNotSet, err) - } + require.ErrorIs(t, err, errPairNotSet) _, err = DeployDepth("test", c, asset.Empty) - if !errors.Is(err, errAssetTypeNotSet) { - t.Fatalf("expecting %s error but received %v", errAssetTypeNotSet, err) - } + require.ErrorIs(t, err, errAssetTypeNotSet) d, err := DeployDepth("test", c, asset.Spot) - if err != nil { - t.Fatal(err) - } - if d == nil { - t.Fatal("depth ptr shall not be nill") - } + require.NoError(t, err) + require.NotNil(t, d) + _, err = DeployDepth("test", c, asset.Spot) + require.NoError(t, err) } func TestCreateNewOrderbook(t *testing.T) { diff --git a/exchanges/stream/buffer/buffer.go b/exchanges/stream/buffer/buffer.go index 27d707b5b5a..8294c3fb5d2 100644 --- a/exchanges/stream/buffer/buffer.go +++ b/exchanges/stream/buffer/buffer.go @@ -170,20 +170,6 @@ func (w *Orderbook) Update(u *orderbook.Update) error { } } - var ret *orderbook.Base - if book.ob.VerifyOrderbook() { - // This is used here so as to not retrieve book if verification is off. - // On every update, this will retrieve and verify orderbook depth. - ret, err = book.ob.Retrieve() - if err != nil { - return err - } - err = ret.Verify() - if err != nil { - return book.ob.Invalidate(err) - } - } - // Publish all state changes, disregarding verbosity or sync requirements. book.ob.Publish() @@ -240,15 +226,17 @@ func (w *Orderbook) processBufferUpdate(o *orderbookHolder, u *orderbook.Update) return true, nil } -// processObUpdate processes updates either by its corresponding id or by -// price level +// processObUpdate processes updates either by its corresponding id or by price level func (w *Orderbook) processObUpdate(o *orderbookHolder, u *orderbook.Update) error { + // Both update methods require post processing to ensure the orderbook is in a valid state. if w.updateEntriesByID { - return o.updateByIDAndAction(u) - } - err := o.updateByPrice(u) - if err != nil { - return err + if err := o.updateByIDAndAction(u); err != nil { + return err + } + } else { + if err := o.updateByPrice(u); err != nil { + return err + } } if w.checksum != nil { compare, err := o.ob.Retrieve() @@ -260,6 +248,15 @@ func (w *Orderbook) processObUpdate(o *orderbookHolder, u *orderbook.Update) err return o.ob.Invalidate(err) } o.updateID = u.UpdateID + } else if o.ob.VerifyOrderbook() { + compare, err := o.ob.Retrieve() + if err != nil { + return err + } + err = compare.Verify() + if err != nil { + return o.ob.Invalidate(err) + } } return nil } @@ -277,24 +274,24 @@ func (o *orderbookHolder) updateByIDAndAction(updts *orderbook.Update) error { case orderbook.Amend: err := o.ob.UpdateBidAskByID(updts) if err != nil { - return fmt.Errorf("%v %w", errAmendFailure, err) + return fmt.Errorf("%w %w", errAmendFailure, err) } case orderbook.Delete: // edge case for Bitfinex as their streaming endpoint duplicates deletes bypassErr := o.ob.GetName() == "Bitfinex" && o.ob.IsFundingRate() err := o.ob.DeleteBidAskByID(updts, bypassErr) if err != nil { - return fmt.Errorf("%v %w", errDeleteFailure, err) + return fmt.Errorf("%w %w", errDeleteFailure, err) } case orderbook.Insert: err := o.ob.InsertBidAskByID(updts) if err != nil { - return fmt.Errorf("%v %w", errInsertFailure, err) + return fmt.Errorf("%w %w", errInsertFailure, err) } case orderbook.UpdateInsert: err := o.ob.UpdateInsertByID(updts) if err != nil { - return fmt.Errorf("%v %w", errUpdateInsertFailure, err) + return fmt.Errorf("%w %w", errUpdateInsertFailure, err) } default: return fmt.Errorf("%w [%d]", errInvalidAction, updts.Action) @@ -338,20 +335,6 @@ func (w *Orderbook) LoadSnapshot(book *orderbook.Base) error { return err } - if holder.ob.VerifyOrderbook() { - // This is used here so as to not retrieve book if verification is off. - // Checks to see if orderbook snapshot that was deployed has not been - // altered in any way - book, err = holder.ob.Retrieve() - if err != nil { - return err - } - err = book.Verify() - if err != nil { - return holder.ob.Invalidate(err) - } - } - holder.ob.Publish() w.dataHandler <- holder.ob return nil diff --git a/exchanges/stream/buffer/buffer_test.go b/exchanges/stream/buffer/buffer_test.go index 47f0b6d7201..4b3b9a8898d 100644 --- a/exchanges/stream/buffer/buffer_test.go +++ b/exchanges/stream/buffer/buffer_test.go @@ -3,10 +3,14 @@ package buffer import ( "errors" "math/rand" - "strings" + "slices" + "strconv" "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/thrasher-corp/gocryptotrader/common" "github.com/thrasher-corp/gocryptotrader/common/key" "github.com/thrasher-corp/gocryptotrader/config" "github.com/thrasher-corp/gocryptotrader/currency" @@ -23,15 +27,17 @@ var ( {{Price: 4000, Amount: 0, ID: 6000}}, {{Price: 5000, Amount: 1, ID: 5000}}, } - - cp, _ = currency.NewPairFromString("BTCUSD") + offset = common.Counter{} ) -const ( - exchangeName = "exchangeTest" -) +const exchangeName = "exchangeTest" + +// getExclusivePair returns a currency pair with a unique ID for testing as books are centralised and changes will affect other tests +func getExclusivePair() (currency.Pair, error) { + return currency.NewPairFromStrings(currency.BTC.String(), currency.USDT.String()+strconv.FormatInt(offset.IncrementAndGet(), 10)) +} -func createSnapshot() (holder *Orderbook, asks, bids orderbook.Tranches, err error) { +func createSnapshot(pair currency.Pair, bookVerifiy ...bool) (holder *Orderbook, asks, bids orderbook.Tranches, err error) { asks = orderbook.Tranches{{Price: 4000, Amount: 1, ID: 6}} bids = orderbook.Tranches{{Price: 4000, Amount: 1, ID: 6}} @@ -40,9 +46,10 @@ func createSnapshot() (holder *Orderbook, asks, bids orderbook.Tranches, err err Asks: asks, Bids: bids, Asset: asset.Spot, - Pair: cp, + Pair: pair, PriceDuplication: true, LastUpdated: time.Now(), + VerifyOrderbook: len(bookVerifiy) > 0 && bookVerifiy[0], } newBook := make(map[key.PairAsset]*orderbookHolder) @@ -79,10 +86,12 @@ func bidAskGenerator() []orderbook.Tranche { } func BenchmarkUpdateBidsByPrice(b *testing.B) { - ob, _, _, err := createSnapshot() - if err != nil { - b.Error(err) - } + cp, err := getExclusivePair() + require.NoError(b, err) + + ob, _, _, err := createSnapshot(cp) + require.NoError(b, err) + b.ResetTimer() for i := 0; i < b.N; i++ { bidAsks := bidAskGenerator() @@ -94,18 +103,17 @@ func BenchmarkUpdateBidsByPrice(b *testing.B) { Asset: asset.Spot, } holder := ob.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] - err = holder.updateByPrice(update) - if err != nil { - b.Fatal(err) - } + require.NoError(b, holder.updateByPrice(update)) } } func BenchmarkUpdateAsksByPrice(b *testing.B) { - ob, _, _, err := createSnapshot() - if err != nil { - b.Error(err) - } + cp, err := getExclusivePair() + require.NoError(b, err) + + ob, _, _, err := createSnapshot(cp) + require.NoError(b, err) + b.ResetTimer() for i := 0; i < b.N; i++ { bidAsks := bidAskGenerator() @@ -117,10 +125,7 @@ func BenchmarkUpdateAsksByPrice(b *testing.B) { Asset: asset.Spot, } holder := ob.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] - err = holder.updateByPrice(update) - if err != nil { - b.Fatal(err) - } + require.NoError(b, holder.updateByPrice(update)) } } @@ -128,10 +133,12 @@ func BenchmarkUpdateAsksByPrice(b *testing.B) { // process calls // 890016 1688 ns/op 416 B/op 3 allocs/op func BenchmarkBufferPerformance(b *testing.B) { - holder, asks, bids, err := createSnapshot() - if err != nil { - b.Fatal(err) - } + cp, err := getExclusivePair() + require.NoError(b, err) + + holder, asks, bids, err := createSnapshot(cp) + require.NoError(b, err) + holder.bufferEnabled = true update := &orderbook.Update{ Bids: bids, @@ -145,10 +152,7 @@ func BenchmarkBufferPerformance(b *testing.B) { randomIndex := rand.Intn(4) //nolint:gosec // no need to import crypo/rand for testing update.Asks = itemArray[randomIndex] update.Bids = itemArray[randomIndex] - err = holder.Update(update) - if err != nil { - b.Fatal(err) - } + require.NoError(b, holder.Update(update)) } } @@ -156,10 +160,12 @@ func BenchmarkBufferPerformance(b *testing.B) { // // 613964 2093 ns/op 440 B/op 4 allocs/op func BenchmarkBufferSortingPerformance(b *testing.B) { - holder, asks, bids, err := createSnapshot() - if err != nil { - b.Fatal(err) - } + cp, err := getExclusivePair() + require.NoError(b, err) + + holder, asks, bids, err := createSnapshot(cp) + require.NoError(b, err) + holder.bufferEnabled = true holder.sortBuffer = true update := &orderbook.Update{ @@ -174,20 +180,19 @@ func BenchmarkBufferSortingPerformance(b *testing.B) { randomIndex := rand.Intn(4) //nolint:gosec // no need to import crypo/rand for testing update.Asks = itemArray[randomIndex] update.Bids = itemArray[randomIndex] - err = holder.Update(update) - if err != nil { - b.Fatal(err) - } + require.NoError(b, holder.Update(update)) } } // BenchmarkBufferSortingPerformance benchmark // 914500 1599 ns/op 440 B/op 4 allocs/op func BenchmarkBufferSortingByIDPerformance(b *testing.B) { - holder, asks, bids, err := createSnapshot() - if err != nil { - b.Fatal(err) - } + cp, err := getExclusivePair() + require.NoError(b, err) + + holder, asks, bids, err := createSnapshot(cp) + require.NoError(b, err) + holder.bufferEnabled = true holder.sortBuffer = true holder.sortBufferByUpdateIDs = true @@ -203,10 +208,7 @@ func BenchmarkBufferSortingByIDPerformance(b *testing.B) { randomIndex := rand.Intn(4) //nolint:gosec // no need to import crypo/rand for testing update.Asks = itemArray[randomIndex] update.Bids = itemArray[randomIndex] - err = holder.Update(update) - if err != nil { - b.Fatal(err) - } + require.NoError(b, holder.Update(update)) } } @@ -216,10 +218,12 @@ func BenchmarkBufferSortingByIDPerformance(b *testing.B) { // 1225924 1028 ns/op 240 B/op 2 allocs/op CURRENT func BenchmarkNoBufferPerformance(b *testing.B) { - obl, asks, bids, err := createSnapshot() - if err != nil { - b.Fatal(err) - } + cp, err := getExclusivePair() + require.NoError(b, err) + + obl, asks, bids, err := createSnapshot(cp) + require.NoError(b, err) + update := &orderbook.Update{ Bids: bids, Asks: asks, @@ -233,18 +237,17 @@ func BenchmarkNoBufferPerformance(b *testing.B) { randomIndex := rand.Intn(4) //nolint:gosec // no need to import crypo/rand for testing update.Asks = itemArray[randomIndex] update.Bids = itemArray[randomIndex] - err = obl.Update(update) - if err != nil { - b.Fatal(err) - } + require.NoError(b, obl.Update(update)) } } func TestUpdates(t *testing.T) { - holder, _, _, err := createSnapshot() - if err != nil { - t.Error(err) - } + t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + + holder, _, _, err := createSnapshot(cp) + require.NoError(t, err) book := holder.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] err = book.updateByPrice(&orderbook.Update{ @@ -254,9 +257,7 @@ func TestUpdates(t *testing.T) { UpdateTime: time.Now(), Asset: asset.Spot, }) - if err != nil { - t.Error(err) - } + assert.NoError(t, err) err = book.updateByPrice(&orderbook.Update{ Bids: itemArray[0], @@ -265,26 +266,22 @@ func TestUpdates(t *testing.T) { UpdateTime: time.Now(), Asset: asset.Spot, }) - if err != nil { - t.Error(err) - } + assert.NoError(t, err) askLen, err := book.ob.GetAskLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - - if askLen != 3 { - t.Error("Did not update") - } + require.NoError(t, err) + assert.Equal(t, 3, askLen) } // TestHittingTheBuffer logic test func TestHittingTheBuffer(t *testing.T) { - holder, _, _, err := createSnapshot() - if err != nil { - t.Fatal(err) - } + t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + + holder, _, _, err := createSnapshot(cp) + require.NoError(t, err) + holder.bufferEnabled = true holder.obBufferLimit = 5 for i := range itemArray { @@ -297,37 +294,28 @@ func TestHittingTheBuffer(t *testing.T) { UpdateTime: time.Now(), Asset: asset.Spot, }) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) } book := holder.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] askLen, err := book.ob.GetAskLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - - if askLen != 3 { - t.Errorf("expected 3 entries, received: %v", askLen) - } + require.NoError(t, err) + assert.Equal(t, 3, askLen) bidLen, err := book.ob.GetBidLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - - if bidLen != 3 { - t.Errorf("expected 3 entries, received: %v", bidLen) - } + require.NoError(t, err) + assert.Equal(t, 3, bidLen) } // TestInsertWithIDs logic test func TestInsertWithIDs(t *testing.T) { - holder, _, _, err := createSnapshot() - if err != nil { - t.Fatal(err) - } + t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + + holder, _, _, err := createSnapshot(cp) + require.NoError(t, err) + holder.bufferEnabled = true holder.updateEntriesByID = true holder.obBufferLimit = 5 @@ -345,35 +333,44 @@ func TestInsertWithIDs(t *testing.T) { Asset: asset.Spot, Action: orderbook.UpdateInsert, }) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) } book := holder.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] askLen, err := book.ob.GetAskLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - if askLen != 6 { - t.Errorf("expected 6 entries, received: %v", askLen) - } + require.NoError(t, err) + assert.Equal(t, 6, askLen) bidLen, err := book.ob.GetBidLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - if bidLen != 6 { - t.Errorf("expected 6 entries, received: %v", bidLen) - } + require.NoError(t, err) + assert.Equal(t, 6, bidLen) + + cp, err = getExclusivePair() + require.NoError(t, err) + + holder, _, _, err = createSnapshot(cp, true) + require.NoError(t, err) + + holder.checksum = nil + holder.updateIDProgression = false + err = holder.Update(&orderbook.Update{ + UpdateTime: time.Now(), + Asset: asset.Spot, + Asks: []orderbook.Tranche{{Price: 999999}}, + Pair: cp, + }) + require.NoError(t, err) } // TestSortIDs logic test func TestSortIDs(t *testing.T) { - holder, _, _, err := createSnapshot() - if err != nil { - t.Fatal(err) - } + t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + + holder, _, _, err := createSnapshot(cp) + require.NoError(t, err) + holder.bufferEnabled = true holder.sortBufferByUpdateIDs = true holder.sortBuffer = true @@ -389,39 +386,30 @@ func TestSortIDs(t *testing.T) { Asset: asset.Spot, UpdateTime: time.Now(), }) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) } book := holder.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] askLen, err := book.ob.GetAskLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - if askLen != 3 { - t.Errorf("expected 3 entries, received: %v", askLen) - } + require.NoError(t, err) + assert.Equal(t, 3, askLen) bidLen, err := book.ob.GetBidLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - if bidLen != 3 { - t.Errorf("expected 3 entries, received: %v", bidLen) - } + require.NoError(t, err) + assert.Equal(t, 3, bidLen) } // TestOutOfOrderIDs logic test func TestOutOfOrderIDs(t *testing.T) { - holder, _, _, err := createSnapshot() - if err != nil { - t.Fatal(err) - } + t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + + holder, _, _, err := createSnapshot(cp) + require.NoError(t, err) + outOFOrderIDs := []int64{2, 1, 5, 3, 4, 6, 7} - if itemArray[0][0].Price != 1000 { - t.Errorf("expected sorted price to be 3000, received: %v", - itemArray[1][0].Price) - } + assert.Equal(t, 1000., itemArray[0][0].Price) + holder.bufferEnabled = true holder.sortBuffer = true holder.obBufferLimit = 5 @@ -434,30 +422,24 @@ func TestOutOfOrderIDs(t *testing.T) { Asset: asset.Spot, UpdateTime: time.Now(), }) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) } book := holder.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] cpy, err := book.ob.Retrieve() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) // Index 1 since index 0 is price 7000 - if cpy.Asks[1].Price != 2000 { - t.Errorf("expected sorted price to be 2000, received: %v", cpy.Asks[1].Price) - } + assert.Equal(t, 2000., cpy.Asks[1].Price) } func TestOrderbookLastUpdateID(t *testing.T) { - holder, _, _, err := createSnapshot() - if err != nil { - t.Fatal(err) - } - if exp := float64(1000); itemArray[0][0].Price != exp { - t.Errorf("expected sorted price to be %f, received: %v", - exp, itemArray[1][0].Price) - } + t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + + holder, _, _, err := createSnapshot(cp) + require.NoError(t, err) + + assert.Equal(t, 1000., itemArray[0][0].Price) holder.checksum = func(*orderbook.Base, uint32) error { return errors.New("testerino") } @@ -469,14 +451,13 @@ func TestOrderbookLastUpdateID(t *testing.T) { Asset: asset.Spot, UpdateTime: time.Now(), }) - if !errors.Is(err, orderbook.ErrOrderbookInvalid) { - t.Fatalf("received: %v but expected: %v", err, orderbook.ErrOrderbookInvalid) - } + require.ErrorIs(t, err, orderbook.ErrOrderbookInvalid) - holder, _, _, err = createSnapshot() - if err != nil { - t.Fatal(err) - } + cp, err = getExclusivePair() + require.NoError(t, err) + + holder, _, _, err = createSnapshot(cp) + require.NoError(t, err) holder.checksum = func(*orderbook.Base, uint32) error { return nil } holder.updateIDProgression = true @@ -490,9 +471,7 @@ func TestOrderbookLastUpdateID(t *testing.T) { Asset: asset.Spot, UpdateTime: time.Now(), }) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) } // out of order @@ -502,63 +481,57 @@ func TestOrderbookLastUpdateID(t *testing.T) { UpdateID: 1, Asset: asset.Spot, }) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) ob, err := holder.GetOrderbook(cp, asset.Spot) - if err != nil { - t.Fatal(err) - } - if exp := len(itemArray); ob.LastUpdateID != int64(exp) { - t.Errorf("expected last update id to be %d, received: %v", exp, ob.LastUpdateID) - } + require.NoError(t, err) + assert.Equal(t, int64(len(itemArray)), ob.LastUpdateID) } // TestRunUpdateWithoutSnapshot logic test func TestRunUpdateWithoutSnapshot(t *testing.T) { t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + var holder Orderbook - asks := []orderbook.Tranche{ - {Price: 4000, Amount: 1, ID: 8}, - } - bids := []orderbook.Tranche{ - {Price: 5999, Amount: 1, ID: 8}, - {Price: 4000, Amount: 1, ID: 9}, - } + asks := []orderbook.Tranche{{Price: 4000, Amount: 1, ID: 8}} + bids := []orderbook.Tranche{{Price: 5999, Amount: 1, ID: 8}, {Price: 4000, Amount: 1, ID: 9}} holder.exchangeName = exchangeName - err := holder.Update(&orderbook.Update{ + err = holder.Update(&orderbook.Update{ Bids: bids, Asks: asks, Pair: cp, UpdateTime: time.Now(), Asset: asset.Spot, }) - if !errors.Is(err, errDepthNotFound) { - t.Fatalf("expected %v but received %v", errDepthNotFound, err) - } + require.ErrorIs(t, err, errDepthNotFound) } // TestRunUpdateWithoutAnyUpdates logic test func TestRunUpdateWithoutAnyUpdates(t *testing.T) { t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + var obl Orderbook obl.exchangeName = exchangeName - err := obl.Update(&orderbook.Update{ + err = obl.Update(&orderbook.Update{ Bids: []orderbook.Tranche{}, Asks: []orderbook.Tranche{}, Pair: cp, UpdateTime: time.Now(), Asset: asset.Spot, }) - if !errors.Is(err, errUpdateNoTargets) { - t.Fatalf("expected %v but received %v", errUpdateNoTargets, err) - } + require.ErrorIs(t, err, errUpdateNoTargets) } // TestRunSnapshotWithNoData logic test func TestRunSnapshotWithNoData(t *testing.T) { t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + var obl Orderbook obl.ob = make(map[key.PairAsset]*orderbookHolder) obl.dataHandler = make(chan interface{}, 1) @@ -568,55 +541,50 @@ func TestRunSnapshotWithNoData(t *testing.T) { snapShot1.Exchange = "test" obl.exchangeName = "test" snapShot1.LastUpdated = time.Now() - err := obl.LoadSnapshot(&snapShot1) - if err != nil { - t.Fatal(err) - } + require.NoError(t, obl.LoadSnapshot(&snapShot1)) } // TestLoadSnapshot logic test func TestLoadSnapshot(t *testing.T) { t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + var obl Orderbook obl.dataHandler = make(chan interface{}, 100) obl.ob = make(map[key.PairAsset]*orderbookHolder) var snapShot1 orderbook.Base snapShot1.Exchange = "SnapshotWithOverride" - asks := []orderbook.Tranche{ - {Price: 4000, Amount: 1, ID: 8}, - } - bids := []orderbook.Tranche{ - {Price: 4000, Amount: 1, ID: 9}, - } + asks := []orderbook.Tranche{{Price: 4000, Amount: 1, ID: 8}} + bids := []orderbook.Tranche{{Price: 4000, Amount: 1, ID: 9}} snapShot1.Asks = asks snapShot1.Bids = bids snapShot1.Asset = asset.Spot snapShot1.Pair = cp snapShot1.LastUpdated = time.Now() - err := obl.LoadSnapshot(&snapShot1) - if err != nil { - t.Error(err) - } + require.NoError(t, obl.LoadSnapshot(&snapShot1)) } // TestFlushBuffer logic test func TestFlushBuffer(t *testing.T) { - obl, _, _, err := createSnapshot() - if err != nil { - t.Fatal(err) - } - if obl.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] == nil { - t.Error("expected ob to have ask entries") - } + t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + + obl, _, _, err := createSnapshot(cp) + require.NoError(t, err) + + assert.NotEmpty(t, obl.ob) obl.FlushBuffer() - if obl.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] != nil { - t.Error("expected ob be flushed") - } + assert.Empty(t, obl.ob) } // TestInsertingSnapShots logic test func TestInsertingSnapShots(t *testing.T) { t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + var holder Orderbook holder.dataHandler = make(chan interface{}, 100) holder.ob = make(map[key.PairAsset]*orderbookHolder) @@ -655,10 +623,8 @@ func TestInsertingSnapShots(t *testing.T) { snapShot1.Asset = asset.Spot snapShot1.Pair = cp snapShot1.LastUpdated = time.Now() - err := holder.LoadSnapshot(&snapShot1) - if err != nil { - t.Fatal(err) - } + require.NoError(t, holder.LoadSnapshot(&snapShot1)) + var snapShot2 orderbook.Base snapShot2.Exchange = "WSORDERBOOKTEST2" asks = []orderbook.Tranche{ @@ -694,15 +660,12 @@ func TestInsertingSnapShots(t *testing.T) { snapShot2.Bids = bids snapShot2.Bids.SortBids() snapShot2.Asset = asset.Spot - snapShot2.Pair, err = currency.NewPairFromString("LTCUSD") - if err != nil { - t.Fatal(err) - } + snapShot2.Pair, err = getExclusivePair() + require.NoError(t, err) + snapShot2.LastUpdated = time.Now() - err = holder.LoadSnapshot(&snapShot2) - if err != nil { - t.Fatal(err) - } + require.NoError(t, holder.LoadSnapshot(&snapShot2)) + var snapShot3 orderbook.Base snapShot3.Exchange = "WSORDERBOOKTEST3" asks = []orderbook.Tranche{ @@ -738,67 +701,46 @@ func TestInsertingSnapShots(t *testing.T) { snapShot3.Bids = bids snapShot3.Bids.SortBids() snapShot3.Asset = asset.Futures - snapShot3.Pair, err = currency.NewPairFromString("LTCUSD") - if err != nil { - t.Fatal(err) - } + snapShot3.Pair, err = getExclusivePair() + require.NoError(t, err) + snapShot3.LastUpdated = time.Now() - err = holder.LoadSnapshot(&snapShot3) - if err != nil { - t.Fatal(err) - } + require.NoError(t, holder.LoadSnapshot(&snapShot3)) + ob, err := holder.GetOrderbook(snapShot1.Pair, snapShot1.Asset) - if err != nil { - t.Fatal(err) - } - if ob.Asks[0] != snapShot1.Asks[0] { - t.Errorf("loaded data mismatch. Expected %v, received %v", - snapShot1.Asks[0], - ob.Asks[0]) - } + require.NoError(t, err) + assert.Equal(t, snapShot1.Asks[0], ob.Asks[0]) + ob, err = holder.GetOrderbook(snapShot2.Pair, snapShot2.Asset) - if err != nil { - t.Fatal(err) - } - if ob.Asks[0] != snapShot2.Asks[0] { - t.Errorf("loaded data mismatch. Expected %v, received %v", - snapShot2.Asks[0], - ob.Asks[0]) - } + require.NoError(t, err) + assert.Equal(t, snapShot2.Asks[0], ob.Asks[0]) + ob, err = holder.GetOrderbook(snapShot3.Pair, snapShot3.Asset) - if err != nil { - t.Fatal(err) - } - if ob.Asks[0] != snapShot3.Asks[0] { - t.Errorf("loaded data mismatch. Expected %v, received %v", - snapShot3.Asks[0], - ob.Asks[0]) - } + require.NoError(t, err) + assert.Equal(t, snapShot3.Asks[0], ob.Asks[0]) } func TestGetOrderbook(t *testing.T) { - holder, _, _, err := createSnapshot() - if err != nil { - t.Fatal(err) - } + t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + + holder, _, _, err := createSnapshot(cp) + require.NoError(t, err) + ob, err := holder.GetOrderbook(cp, asset.Spot) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) + bufferOb := holder.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] b, err := bufferOb.ob.Retrieve() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + askLen, err := bufferOb.ob.GetAskLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) bidLen, err := bufferOb.ob.GetBidLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) + if askLen != len(ob.Asks) || bidLen != len(ob.Bids) || b.Asset != ob.Asset || @@ -814,27 +756,19 @@ func TestSetup(t *testing.T) { t.Parallel() w := Orderbook{} err := w.Setup(nil, nil, nil) - if !errors.Is(err, errExchangeConfigNil) { - t.Fatalf("expected error %v but received %v", errExchangeConfigNil, err) - } + require.ErrorIs(t, err, errExchangeConfigNil) exchangeConfig := &config.Exchange{} err = w.Setup(exchangeConfig, nil, nil) - if !errors.Is(err, errBufferConfigNil) { - t.Fatalf("expected error %v but received %v", errBufferConfigNil, err) - } + require.ErrorIs(t, err, errBufferConfigNil) bufferConf := &Config{} err = w.Setup(exchangeConfig, bufferConf, nil) - if !errors.Is(err, errUnsetDataHandler) { - t.Fatalf("expected error %v but received %v", errUnsetDataHandler, err) - } + require.ErrorIs(t, err, errUnsetDataHandler) exchangeConfig.Orderbook.WebsocketBufferEnabled = true err = w.Setup(exchangeConfig, bufferConf, make(chan interface{})) - if !errors.Is(err, errIssueBufferEnabledButNoLimit) { - t.Fatalf("expected error %v but received %v", errIssueBufferEnabledButNoLimit, err) - } + require.ErrorIs(t, err, errIssueBufferEnabledButNoLimit) exchangeConfig.Orderbook.WebsocketBufferLimit = 1337 exchangeConfig.Orderbook.WebsocketBufferEnabled = true @@ -843,9 +777,8 @@ func TestSetup(t *testing.T) { bufferConf.SortBufferByUpdateIDs = true bufferConf.UpdateEntriesByID = true err = w.Setup(exchangeConfig, bufferConf, make(chan interface{})) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) + if w.obBufferLimit != 1337 || !w.bufferEnabled || !w.sortBuffer || @@ -860,22 +793,18 @@ func TestValidate(t *testing.T) { t.Parallel() w := Orderbook{} err := w.validate(nil) - if !errors.Is(err, errUpdateIsNil) { - t.Fatalf("expected error %v but received %v", errUpdateIsNil, err) - } - + require.ErrorIs(t, err, errUpdateIsNil) err = w.validate(&orderbook.Update{}) - if !errors.Is(err, errUpdateNoTargets) { - t.Fatalf("expected error %v but received %v", errUpdateNoTargets, err) - } + require.ErrorIs(t, err, errUpdateNoTargets) } func TestEnsureMultipleUpdatesViaPrice(t *testing.T) { t.Parallel() - holder, _, _, err := createSnapshot() - if err != nil { - t.Error(err) - } + cp, err := getExclusivePair() + require.NoError(t, err) + + holder, _, _, err := createSnapshot(cp) + require.NoError(t, err) asks := bidAskGenerator() book := holder.ob[key.PairAsset{Base: cp.Base.Item, Quote: cp.Quote.Item, Asset: asset.Spot}] @@ -886,18 +815,11 @@ func TestEnsureMultipleUpdatesViaPrice(t *testing.T) { UpdateTime: time.Now(), Asset: asset.Spot, }) - if err != nil { - t.Error(err) - } + require.NoError(t, err) askLen, err := book.ob.GetAskLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - - if askLen <= 3 { - t.Errorf("Insufficient updates") - } + require.NoError(t, err) + assert.LessOrEqual(t, 3, askLen) } func deploySliceOrdered(size int) orderbook.Tranches { @@ -910,272 +832,149 @@ func deploySliceOrdered(size int) orderbook.Tranches { func TestUpdateByIDAndAction(t *testing.T) { t.Parallel() - holder := orderbookHolder{} + cp, err := getExclusivePair() + require.NoError(t, err) asks := deploySliceOrdered(100) - //nolint: gocritic - bids := append(asks[:0:0], asks...) + bids := slices.Clone(asks) bids.Reverse() book, err := orderbook.DeployDepth("test", cp, asset.Spot) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) - err = book.LoadSnapshot(append(bids[:0:0], bids...), append(asks[:0:0], asks...), 0, time.Now(), time.Now(), true) - if err != nil { - t.Fatal(err) - } + err = book.LoadSnapshot(slices.Clone(bids), slices.Clone(asks), 0, time.Now(), time.Now(), true) + require.NoError(t, err) ob, err := book.Retrieve() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - - err = ob.Verify() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) - holder.ob = book + require.NoError(t, ob.Verify()) + holder := orderbookHolder{ob: book} err = holder.updateByIDAndAction(&orderbook.Update{}) - if !errors.Is(err, errInvalidAction) { - t.Fatalf("received: '%v' but expected: '%v'", err, errInvalidAction) - } + require.ErrorIs(t, err, errInvalidAction) err = holder.updateByIDAndAction(&orderbook.Update{ Action: orderbook.Amend, - Bids: []orderbook.Tranche{ - { - Price: 100, - ID: 6969, - }, - }, + Bids: []orderbook.Tranche{{Price: 100, ID: 6969}}, }) - if !strings.Contains(err.Error(), errAmendFailure.Error()) { - t.Fatalf("received: '%v' but expected: '%v'", err, errAmendFailure) - } + require.ErrorIs(t, err, errAmendFailure) + + err = book.LoadSnapshot(slices.Clone(bids), slices.Clone(asks), 0, time.Now(), time.Now(), true) + require.NoError(t, err) - err = book.LoadSnapshot(append(bids[:0:0], bids...), append(asks[:0:0], asks...), 0, time.Now(), time.Now(), true) - if err != nil { - t.Fatal(err) - } // append to slice err = holder.updateByIDAndAction(&orderbook.Update{ - Action: orderbook.UpdateInsert, - Bids: []orderbook.Tranche{ - { - Price: 0, - ID: 1337, - Amount: 1, - }, - }, - Asks: []orderbook.Tranche{ - { - Price: 100, - ID: 1337, - Amount: 1, - }, - }, + Action: orderbook.UpdateInsert, + Bids: []orderbook.Tranche{{Price: 0, ID: 1337, Amount: 1}}, + Asks: []orderbook.Tranche{{Price: 100, ID: 1337, Amount: 1}}, UpdateTime: time.Now(), }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) cpy, err := book.Retrieve() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - - if cpy.Bids[len(cpy.Bids)-1].Price != 0 { - t.Fatal("did not append bid item") - } - if cpy.Asks[len(cpy.Asks)-1].Price != 100 { - t.Fatal("did not append ask item") - } + require.NoError(t, err) + require.Equal(t, 0., cpy.Bids[len(cpy.Bids)-1].Price) + require.Equal(t, 100., cpy.Asks[len(cpy.Asks)-1].Price) // Change amount err = holder.updateByIDAndAction(&orderbook.Update{ - Action: orderbook.UpdateInsert, - Bids: []orderbook.Tranche{ - { - Price: 0, - ID: 1337, - Amount: 100, - }, - }, - Asks: []orderbook.Tranche{ - { - Price: 100, - ID: 1337, - Amount: 100, - }, - }, + Action: orderbook.UpdateInsert, + Bids: []orderbook.Tranche{{Price: 0, ID: 1337, Amount: 100}}, + Asks: []orderbook.Tranche{{Price: 100, ID: 1337, Amount: 100}}, UpdateTime: time.Now(), }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) cpy, err = book.Retrieve() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - - if cpy.Bids[len(cpy.Bids)-1].Amount != 100 { - t.Fatal("did not update bid amount", cpy.Bids[len(cpy.Bids)-1].Amount) - } - - if cpy.Asks[len(cpy.Asks)-1].Amount != 100 { - t.Fatal("did not update ask amount") - } + require.NoError(t, err) + require.Equal(t, 100., cpy.Bids[len(cpy.Bids)-1].Amount) + require.Equal(t, 100., cpy.Asks[len(cpy.Asks)-1].Amount) // Change price level err = holder.updateByIDAndAction(&orderbook.Update{ - Action: orderbook.UpdateInsert, - Bids: []orderbook.Tranche{ - { - Price: 100, - ID: 1337, - Amount: 99, - }, - }, - Asks: []orderbook.Tranche{ - { - Price: 0, - ID: 1337, - Amount: 99, - }, - }, + Action: orderbook.UpdateInsert, + Bids: []orderbook.Tranche{{Price: 100, ID: 1337, Amount: 99}}, + Asks: []orderbook.Tranche{{Price: 0, ID: 1337, Amount: 99}}, UpdateTime: time.Now(), }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) cpy, err = book.Retrieve() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) - if cpy.Bids[0].Amount != 99 && cpy.Bids[0].Price != 100 { - t.Fatal("did not adjust bid item placement and details") - } - - if cpy.Asks[0].Amount != 99 && cpy.Asks[0].Amount != 0 { - t.Fatal("did not adjust ask item placement and details") - } + require.Equal(t, 99., cpy.Bids[0].Amount) + require.Equal(t, 100., cpy.Bids[0].Price) + require.Equal(t, 99., cpy.Asks[0].Amount) + require.Equal(t, 0., cpy.Asks[0].Price) - err = book.LoadSnapshot(append(bids[:0:0], bids...), append(asks[:0:0], asks...), 0, time.Now(), time.Now(), true) //nolint:gocritic - if err != nil { - t.Fatal(err) - } + err = book.LoadSnapshot(slices.Clone(bids), slices.Clone(asks), 0, time.Now(), time.Now(), true) + require.NoError(t, err) // Delete - not found err = holder.updateByIDAndAction(&orderbook.Update{ Action: orderbook.Delete, - Asks: []orderbook.Tranche{ - { - Price: 0, - ID: 1337, - Amount: 99, - }, - }, + Asks: []orderbook.Tranche{{Price: 0, ID: 1337, Amount: 99}}, }) - if !strings.Contains(err.Error(), errDeleteFailure.Error()) { - t.Fatalf("received: '%v' but expected: '%v'", err, errDeleteFailure) - } + require.ErrorIs(t, err, errDeleteFailure) + + err = book.LoadSnapshot(slices.Clone(bids), slices.Clone(asks), 0, time.Now(), time.Now(), true) + require.NoError(t, err) - err = book.LoadSnapshot(append(bids[:0:0], bids...), append(asks[:0:0], asks...), 0, time.Now(), time.Now(), true) //nolint:gocritic - if err != nil { - t.Fatal(err) - } // Delete - found err = holder.updateByIDAndAction(&orderbook.Update{ - Action: orderbook.Delete, - Asks: []orderbook.Tranche{ - asks[0], - }, + Action: orderbook.Delete, + Asks: []orderbook.Tranche{asks[0]}, UpdateTime: time.Now(), }) - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } + require.NoError(t, err) askLen, err := book.GetAskLength() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - - if askLen != 99 { - t.Fatal("element not deleted") - } + require.NoError(t, err) + require.Equal(t, 99, askLen) // Apply update err = holder.updateByIDAndAction(&orderbook.Update{ Action: orderbook.Amend, - Asks: []orderbook.Tranche{ - {ID: 123456}, - }, + Asks: []orderbook.Tranche{{ID: 123456}}, }) - if !strings.Contains(err.Error(), errAmendFailure.Error()) { - t.Fatalf("received: '%v' but expected: '%v'", err, errAmendFailure) - } + require.ErrorIs(t, err, errAmendFailure) - err = book.LoadSnapshot(bids, bids, 0, time.Now(), time.Now(), true) - if err != nil { - t.Fatal(err) - } + err = book.LoadSnapshot(slices.Clone(bids), slices.Clone(bids), 0, time.Now(), time.Now(), true) + require.NoError(t, err) ob, err = book.Retrieve() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - if len(ob.Asks) == 0 || len(ob.Bids) == 0 { - t.Fatal("expected a valid orderbook") - } + require.NoError(t, err) + require.NotEmpty(t, ob.Asks) + require.NotEmpty(t, ob.Bids) update := ob.Asks[0] update.Amount = 1337 err = holder.updateByIDAndAction(&orderbook.Update{ - Action: orderbook.Amend, - Asks: []orderbook.Tranche{ - update, - }, + Action: orderbook.Amend, + Asks: []orderbook.Tranche{update}, UpdateTime: time.Now(), }) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) ob, err = book.Retrieve() - if !errors.Is(err, nil) { - t.Fatalf("received: '%v' but expected: '%v'", err, nil) - } - - if ob.Asks[0].Amount != 1337 { - t.Fatal("element not updated") - } + require.NoError(t, err) + require.Equal(t, 1337., ob.Asks[0].Amount) } func TestFlushOrderbook(t *testing.T) { t.Parallel() + cp, err := getExclusivePair() + require.NoError(t, err) + w := &Orderbook{} - err := w.Setup(&config.Exchange{Name: "test"}, &Config{}, make(chan interface{}, 2)) - if err != nil { - t.Fatal(err) - } + err = w.Setup(&config.Exchange{Name: "test"}, &Config{}, make(chan interface{}, 2)) + require.NoError(t, err) var snapShot1 orderbook.Base snapShot1.Exchange = "Snapshooooot" - asks := []orderbook.Tranche{ - {Price: 4000, Amount: 1, ID: 8}, - } - bids := []orderbook.Tranche{ - {Price: 4000, Amount: 1, ID: 9}, - } + asks := []orderbook.Tranche{{Price: 4000, Amount: 1, ID: 8}} + bids := []orderbook.Tranche{{Price: 4000, Amount: 1, ID: 9}} snapShot1.Asks = asks snapShot1.Bids = bids snapShot1.Asset = asset.Spot @@ -1188,22 +987,11 @@ func TestFlushOrderbook(t *testing.T) { } _, err = w.GetOrderbook(cp, asset.Spot) - if !errors.Is(err, errDepthNotFound) { - t.Fatalf("expected: %v but received: %v", errDepthNotFound, err) - } - - err = w.LoadSnapshot(&snapShot1) - if err != nil { - t.Fatal(err) - } + require.ErrorIs(t, err, errDepthNotFound) - err = w.FlushOrderbook(cp, asset.Spot) - if err != nil { - t.Fatal(err) - } + require.NoError(t, w.LoadSnapshot(&snapShot1)) + require.NoError(t, w.FlushOrderbook(cp, asset.Spot)) _, err = w.GetOrderbook(cp, asset.Spot) - if !errors.Is(err, orderbook.ErrOrderbookInvalid) { - t.Fatalf("received: '%v' but expected: '%v'", err, orderbook.ErrOrderbookInvalid) - } + require.ErrorIs(t, err, orderbook.ErrOrderbookInvalid) } From 56fa304e19b0258b7009fe18d7da127b87cf8238 Mon Sep 17 00:00:00 2001 From: Gareth Kirwan Date: Mon, 11 Nov 2024 05:12:18 +0100 Subject: [PATCH 06/10] Huobi: Fix invalid contract type error when autoUpdatePairs is false (#1707) We were relying on autoUpdatePairs to fetch contract types before we need them. If the user disables it in config, we'll get them upfront. --- exchanges/huobi/huobi_test.go | 16 ++++++++++++++++ exchanges/huobi/huobi_wrapper.go | 11 +++++++++++ 2 files changed, 27 insertions(+) diff --git a/exchanges/huobi/huobi_test.go b/exchanges/huobi/huobi_test.go index bb0c17da0c0..a3a9edfacf9 100644 --- a/exchanges/huobi/huobi_test.go +++ b/exchanges/huobi/huobi_test.go @@ -2991,3 +2991,19 @@ func TestChannelName(t *testing.T) { assert.Panics(t, func() { channelName(&subscription.Subscription{Channel: wsOrderbookChannel}, p) }) assert.Panics(t, func() { channelName(&subscription.Subscription{Channel: subscription.MyAccountChannel}, p) }, "Should panic on V2 endpoints until implemented") } + +func TestBootstrap(t *testing.T) { + t.Parallel() + h := new(HUOBI) + require.NoError(t, testexch.Setup(h), "Test Instance Setup must not fail") + + c, err := h.Bootstrap(context.Background()) + require.NoError(t, err) + assert.True(t, c, "Bootstrap should return true to continue") + + h.futureContractCodes = nil + h.Features.Enabled.AutoPairUpdates = false + _, err = h.Bootstrap(context.Background()) + require.NoError(t, err) + require.NotNil(t, h.futureContractCodes) +} diff --git a/exchanges/huobi/huobi_wrapper.go b/exchanges/huobi/huobi_wrapper.go index 9a62d91a0e2..1e16dea2a03 100644 --- a/exchanges/huobi/huobi_wrapper.go +++ b/exchanges/huobi/huobi_wrapper.go @@ -187,6 +187,17 @@ func (h *HUOBI) SetDefaults() { h.WebsocketOrderbookBufferLimit = exchange.DefaultWebsocketOrderbookBufferLimit } +// Bootstrap ensures that future contract expiry codes are loaded if AutoPairUpdates is not enabled +func (h *HUOBI) Bootstrap(_ context.Context) (continueBootstrap bool, err error) { + continueBootstrap = true + + if !h.GetEnabledFeatures().AutoPairUpdates && h.SupportsAsset(asset.Futures) { + _, err = h.FetchTradablePairs(context.Background(), asset.Futures) + } + + return +} + // Setup sets user configuration func (h *HUOBI) Setup(exch *config.Exchange) error { err := exch.Validate() From fb0fd2e51498a8dc446bb5bb07cef70562cf2276 Mon Sep 17 00:00:00 2001 From: Gareth Kirwan Date: Mon, 11 Nov 2024 06:18:27 +0100 Subject: [PATCH 07/10] Huobi: Fix GetAvailableTransferChains returning unavailable chains (#1709) --- exchanges/huobi/huobi_test.go | 10 +++------- exchanges/huobi/huobi_types.go | 2 +- exchanges/huobi/huobi_wrapper.go | 19 +++++++++++-------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/exchanges/huobi/huobi_test.go b/exchanges/huobi/huobi_test.go index a3a9edfacf9..15dec4ba245 100644 --- a/exchanges/huobi/huobi_test.go +++ b/exchanges/huobi/huobi_test.go @@ -2625,13 +2625,9 @@ func TestGetHistoricTrades(t *testing.T) { func TestGetAvailableTransferChains(t *testing.T) { t.Parallel() - r, err := h.GetAvailableTransferChains(context.Background(), currency.USDT) - if err != nil { - t.Error(err) - } - if len(r) < 2 { - t.Error("expected more than one result") - } + c, err := h.GetAvailableTransferChains(context.Background(), currency.USDT) + require.NoError(t, err) + require.Greater(t, len(c), 2, "Must get more than 2 chains") } func TestFormatFuturesPair(t *testing.T) { diff --git a/exchanges/huobi/huobi_types.go b/exchanges/huobi/huobi_types.go index dd37bd396c6..948e23d3e24 100644 --- a/exchanges/huobi/huobi_types.go +++ b/exchanges/huobi/huobi_types.go @@ -35,7 +35,7 @@ type CurrenciesChainData struct { Currency string `json:"currency"` AssetType uint8 `json:"assetType"` InstStatus string `json:"instStatus"` - ChainData []struct { + ChainData []*struct { Chain string `json:"chain"` DisplayName string `json:"displayName"` BaseChain string `json:"baseChain"` diff --git a/exchanges/huobi/huobi_wrapper.go b/exchanges/huobi/huobi_wrapper.go index 1e16dea2a03..76c461cb196 100644 --- a/exchanges/huobi/huobi_wrapper.go +++ b/exchanges/huobi/huobi_wrapper.go @@ -2116,21 +2116,24 @@ func compatibleVars(side, orderPriceType string, status int64) (OrderVars, error return resp, nil } -// GetAvailableTransferChains returns the available transfer blockchains for the specific -// cryptocurrency +// GetAvailableTransferChains returns the available transfer blockchains for the specific cryptocurrency func (h *HUOBI) GetAvailableTransferChains(ctx context.Context, cryptocurrency currency.Code) ([]string, error) { - chains, err := h.GetCurrenciesIncludingChains(ctx, cryptocurrency) + resp, err := h.GetCurrenciesIncludingChains(ctx, cryptocurrency) if err != nil { return nil, err } - if len(chains) == 0 { - return nil, errors.New("chain data isn't populated") + if len(resp) == 0 { + return nil, errors.New("no chains returned from currencies API") } - availableChains := make([]string, len(chains[0].ChainData)) - for x := range chains[0].ChainData { - availableChains[x] = chains[0].ChainData[x].Chain + chains := resp[0].ChainData + + availableChains := make([]string, 0, len(chains)) + for _, c := range chains { + if c.DepositStatus == "allowed" || c.WithdrawStatus == "allowed" { + availableChains = append(availableChains, c.Chain) + } } return availableChains, nil } From 3f31cea97969370b5c898b7058115cc8de488c3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 16:50:25 +1100 Subject: [PATCH 08/10] build(deps): Bump golang.org/x/net from 0.30.0 to 0.31.0 (#1712) Bumps [golang.org/x/net](https://github.com/golang/net) from 0.30.0 to 0.31.0. - [Commits](https://github.com/golang/net/compare/v0.30.0...v0.31.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index d0cc3285208..1a1f57ceba6 100644 --- a/go.mod +++ b/go.mod @@ -24,9 +24,9 @@ require ( github.com/thrasher-corp/sqlboiler v1.0.1-0.20191001234224-71e17f37a85e github.com/urfave/cli/v2 v2.27.5 github.com/volatiletech/null v8.0.0+incompatible - golang.org/x/crypto v0.28.0 - golang.org/x/net v0.30.0 - golang.org/x/text v0.19.0 + golang.org/x/crypto v0.29.0 + golang.org/x/net v0.31.0 + golang.org/x/text v0.20.0 golang.org/x/time v0.7.0 google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38 google.golang.org/grpc v1.67.1 @@ -65,7 +65,7 @@ require ( go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.9.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/sys v0.26.0 // indirect + golang.org/x/sys v0.27.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index 5855f98a686..acbc703d1e7 100644 --- a/go.sum +++ b/go.sum @@ -266,8 +266,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= @@ -288,8 +288,8 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= @@ -310,13 +310,13 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190927073244-c990c680b611/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= From 60f541479c8fc4143ecb275e84bd776c93cc53d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 17:03:22 +1100 Subject: [PATCH 09/10] build(deps): Bump golang.org/x/time from 0.7.0 to 0.8.0 (#1710) Bumps [golang.org/x/time](https://github.com/golang/time) from 0.7.0 to 0.8.0. - [Commits](https://github.com/golang/time/compare/v0.7.0...v0.8.0) --- updated-dependencies: - dependency-name: golang.org/x/time dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 1a1f57ceba6..2f41b4a85d9 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( golang.org/x/crypto v0.29.0 golang.org/x/net v0.31.0 golang.org/x/text v0.20.0 - golang.org/x/time v0.7.0 + golang.org/x/time v0.8.0 google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38 google.golang.org/grpc v1.67.1 google.golang.org/protobuf v1.35.1 diff --git a/go.sum b/go.sum index acbc703d1e7..1e788d0457a 100644 --- a/go.sum +++ b/go.sum @@ -318,8 +318,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= -golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= +golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= From 72a2a16415858a975c18b275940cc09ab961a205 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 17:24:59 +1100 Subject: [PATCH 10/10] build(deps): Bump google.golang.org/grpc from 1.67.1 to 1.68.0 (#1713) Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.67.1 to 1.68.0. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.67.1...v1.68.0) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 2f41b4a85d9..2f251831137 100644 --- a/go.mod +++ b/go.mod @@ -29,7 +29,7 @@ require ( golang.org/x/text v0.20.0 golang.org/x/time v0.8.0 google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38 - google.golang.org/grpc v1.67.1 + google.golang.org/grpc v1.68.0 google.golang.org/protobuf v1.35.1 ) diff --git a/go.sum b/go.sum index 1e788d0457a..4f1da921738 100644 --- a/go.sum +++ b/go.sum @@ -85,8 +85,8 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -351,8 +351,8 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=