diff --git a/CHANGELOG.md b/CHANGELOG.md index 2914babd6..8c5c10912 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 *It is strongly advised to perform an update of your tentacles after updating OctoBot. (start.py tentacles --install --all)* +## [1.0.6] - 2024-01-09 +### Added +- [TradingModes] Improved documentation and added links to full guides +- [InstantMAEvaluator] Add trigger threshold to avoid triggering at each price update +### Updated +- [CCXT] update to ccxt 4.2.10 +- [ChatGPT] update to openai 1.7.0 +- [DailyTradingMode] Enable futures position increase: add warning +### Fixed +- [DailyTradingMode] handle invalid MAX_CURRENCY_RATIO +- [TradingView] Fix SIGNAL=CANCEL docs typo +- [Exchanges] MEXC orders synchronization issues +- [Exchanges] HTX renamed Huobi into HTX +### Removed +- [Exchanges] Bittrex + ## [1.0.5] - 2023-12-19 ### Added - [GPTEvaluator] Settings to limit used tokens and disable re-evaluation @@ -47,7 +63,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [Webhook] Support Ngrok custom domains ### Updated - [ChatGPT] Default GPT Trading profile now uses the DCA trading mode -- [TradingView] Revamped docs on https://www.octobot.cloud/guides/octobot-interfaces/tradingview +- [TradingView] Revamped docs on https://www.octobot.cloud/en/guides/octobot-interfaces/tradingview - [DCATrading] Improved error messages - [WebInterface] Do not select duplicated profiles by default - [DataCollector] Make errors clearer diff --git a/README.md b/README.md index 8cea016b9..69b34c931 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# OctoBot [1.0.5](https://octobot.click/gh-changelog) +# OctoBot [1.0.6](https://octobot.click/gh-changelog) [![PyPI](https://img.shields.io/pypi/v/OctoBot.svg?logo=pypi)](https://octobot.click/gh-pypi) [![Downloads](https://pepy.tech/badge/octobot/month)](https://pepy.tech/project/octobot) [![Dockerhub](https://img.shields.io/docker/pulls/drakkarsoftware/octobot.svg?logo=docker)](https://octobot.click/gh-dockerhub) @@ -31,11 +31,11 @@ We are looking forward to receiving your feedback on our new OctoBot based syste ## What is Octobot ?
@@ -44,22 +44,22 @@ We are looking forward to receiving your feedback on our new OctoBot based syste [Octobot](https://www.octobot.cloud/?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=readme_what_is_octobot) is a powerful open-source cryptocurrency trading robot. OctoBot is highly customizable using its configuration and tentacles system. -You can build your own bot using the infinite [configuration](https://www.octobot.cloud/guides/octobot-configuration/profile-configuration?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=configuration) possibilities such as **technical analysis**, **social media processing** or even **external statistics management** like google trends. +You can build your own bot using the infinite [configuration](https://www.octobot.cloud/en/guides/octobot-configuration/profile-configuration?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=configuration) possibilities such as **technical analysis**, **social media processing** or even **external statistics management** like google trends. OctoBot is **AI ready**: Python being the main language for OctoBot, it's easy to integrate machine-learning libraries such as [Tensorflow](https://github.com/tensorflow/tensorflow) or any other libraries and take advantage of all the available data and create a very powerful trading strategy. Octobot's main feature is **evolution**, you can : - Share your configurations with other octobot users. -- [Install](https://www.octobot.cloud/guides/octobot-advanced-usage/tentacle-manager?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=install_tentacles), [modify](https://www.octobot.cloud/guides/octobot-tentacles-development/create-a-tentacle?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=modify_tentacles) and even [create](https://www.octobot.cloud/guides/octobot-tentacles-development/create-a-tentacle?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=create_tentacles) new tentacles to build your ideal cryptocurrency trading robot. -- [Contribute](https://www.octobot.cloud/guides/octobot-developers-environment/setup-your-environment?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=contribute) to improve OctoBot core repositories and tentacles. +- [Install](https://www.octobot.cloud/en/guides/octobot-advanced-usage/tentacle-manager?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=install_tentacles), [modify](https://www.octobot.cloud/en/guides/octobot-tentacles-development/create-a-tentacle?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=modify_tentacles) and even [create](https://www.octobot.cloud/en/guides/octobot-tentacles-development/create-a-tentacle?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=create_tentacles) new tentacles to build your ideal cryptocurrency trading robot. +- [Contribute](https://www.octobot.cloud/en/guides/octobot-developers-environment/setup-your-environment?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=contribute) to improve OctoBot core repositories and tentacles. -Looking for more info ? Check out our Octobot guides at [octobot.cloud/guides](https://www.octobot.cloud/guides/?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=checkout_guides) +Looking for more info ? Check out our Octobot guides at [octobot.cloud/guides](https://www.octobot.cloud/en/guides/?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=checkout_guides) ## Installation OctoBot's installation is **very simple**, you can either: - [Deploy your OctoBot on OctoBot Cloud](https://octobot.cloud/?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=readme_deploy_on_cloud). With OctoBot cloud, experience hassle-free installation, updates, and maintenance - leave it all to us! Your robot will also benefit from cloud only features. -- [Download and install](https://www.octobot.cloud/guides/octobot-installation/local?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=readme_local_installation) OctoBot on your computer or server and enjoy all features for free. -- Install OctoBot [using docker](https://www.octobot.cloud/guides/octobot-installation/with-docker?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=readme_docker_installation). +- [Download and install](https://www.octobot.cloud/en/guides/octobot-installation/local?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=readme_local_installation) OctoBot on your computer or server and enjoy all features for free. +- Install OctoBot [using docker](https://www.octobot.cloud/en/guides/octobot-installation/with-docker?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=readme_docker_installation). Docker install in one line summary: ``` @@ -68,18 +68,18 @@ OctoBot's installation is **very simple**, you can either: Your OctoBot will be accessible on [http://localhost](http://localhost). ## Exchanges -[![Binance supported exchange partnership](../assets/binance-logo.png)](https://www.octobot.cloud/guides/octobot-partner-exchanges/binance?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=binance) -[![Okx supported exchange partnership](../assets/okex-logo.png)](https://www.octobot.cloud/guides/octobot-partner-exchanges/okx?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=okx) -[![Kucoin supported exchange partnership](../assets/kucoin-logo.png)](https://www.octobot.cloud/guides/octobot-partner-exchanges/kucoin?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=kucoin) -[![Crypto.com supported exchange partnership](../assets/cryptocom-logo.png)](https://www.octobot.cloud/guides/octobot-partner-exchanges/crypto-com?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=crypto-com) -[![Huobi supported exchange partnership](../assets/huobi-logo.png)](https://www.octobot.cloud/guides/octobot-partner-exchanges/huobi?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=huobi) -[![Hollaex supported exchange partnership](../assets/hollaex-logo.png)](https://www.octobot.cloud/guides/octobot-partner-exchanges/hollaex?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=hollaex) -[![Coinbase supported exchange](../assets/coinbasepro-logo.png)](https://www.octobot.cloud/guides/octobot-supported-exchanges/coinbase?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=coinbase) -[![GateIO supported exchange partnership](../assets/gateio-logo.png)](https://www.octobot.cloud/guides/octobot-partner-exchanges/gateio?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=gateio) -[![Ascendex supported exchange partnership](../assets/ascendex-logo.png)](https://www.octobot.cloud/guides/octobot-partner-exchanges/ascendex?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=ascendex) +[![Binance supported exchange partnership](../assets/binance-logo.png)](https://www.octobot.cloud/en/guides/octobot-partner-exchanges/binance?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=binance) +[![Okx supported exchange partnership](../assets/okex-logo.png)](https://www.octobot.cloud/en/guides/octobot-partner-exchanges/okx?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=okx) +[![Kucoin supported exchange partnership](../assets/kucoin-logo.png)](https://www.octobot.cloud/en/guides/octobot-partner-exchanges/kucoin?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=kucoin) +[![Crypto.com supported exchange partnership](../assets/cryptocom-logo.png)](https://www.octobot.cloud/en/guides/octobot-partner-exchanges/crypto-com?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=crypto-com) +[![Huobi supported exchange partnership](../assets/huobi-logo.png)](https://www.octobot.cloud/en/guides/octobot-partner-exchanges/huobi?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=huobi) +[![Hollaex supported exchange partnership](../assets/hollaex-logo.png)](https://www.octobot.cloud/en/guides/octobot-partner-exchanges/hollaex?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=hollaex) +[![Coinbase supported exchange](../assets/coinbasepro-logo.png)](https://www.octobot.cloud/en/guides/octobot-supported-exchanges/coinbase?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=coinbase) +[![GateIO supported exchange partnership](../assets/gateio-logo.png)](https://www.octobot.cloud/en/guides/octobot-partner-exchanges/gateio?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=gateio) +[![Ascendex supported exchange partnership](../assets/ascendex-logo.png)](https://www.octobot.cloud/en/guides/octobot-partner-exchanges/ascendex?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=ascendex) -Octobot supports many [exchanges](https://www.octobot.cloud/guides/exchanges?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=exchanges) thanks to the [ccxt library](https://github.com/ccxt/ccxt). -To activate trading on an exchange, just configure OctoBot with your API keys as described [on the exchange setup guides](https://www.octobot.cloud/guides/octobot-configuration/exchanges?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=exchanges_setup_guides). +Octobot supports many [exchanges](https://www.octobot.cloud/en/guides/exchanges?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=exchanges) thanks to the [ccxt library](https://github.com/ccxt/ccxt). +To activate trading on an exchange, just configure OctoBot with your API keys as described [on the exchange setup guides](https://www.octobot.cloud/en/guides/octobot-configuration/exchanges?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=exchanges_setup_guides). ### Paper trading @@ -88,7 +88,7 @@ To trade on any exchange, just enable the exchange in your OctoBot. This you to No exchange credential is required. ### Real trading -To use your real exchange account with OctoBot, enter your exchange API keys as described [on the exchange guides](https://www.octobot.cloud/guides/exchanges?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=exchanges_guides). +To use your real exchange account with OctoBot, enter your exchange API keys as described [on the exchange guides](https://www.octobot.cloud/en/guides/exchanges?utm_source=github&utm_medium=dk&utm_campaign=regular_open_source_content&utm_content=exchanges_guides). ## Testing trading strategies diff --git a/additional_tests/exchanges_tests/__init__.py b/additional_tests/exchanges_tests/__init__.py index 4a4ced08e..65ad3e142 100644 --- a/additional_tests/exchanges_tests/__init__.py +++ b/additional_tests/exchanges_tests/__init__.py @@ -26,7 +26,6 @@ import octobot_trading.api as trading_api import octobot_trading.exchanges as exchanges import octobot_trading.constants as trading_constants -import octobot_trading.enums as enums import octobot_trading.errors as errors import octobot_trading.exchange_channel as exchange_channel import octobot_trading.personal_data as personal_data diff --git a/additional_tests/exchanges_tests/abstract_authenticated_exchange_tester.py b/additional_tests/exchanges_tests/abstract_authenticated_exchange_tester.py index d688b41e5..fbb31fc2b 100644 --- a/additional_tests/exchanges_tests/abstract_authenticated_exchange_tester.py +++ b/additional_tests/exchanges_tests/abstract_authenticated_exchange_tester.py @@ -69,6 +69,7 @@ class AbstractAuthenticatedExchangeTester: IGNORE_EXCHANGE_TRADE_ID = False # set True when trade.exchange_trade_id can't be set MAX_TRADE_USD_VALUE = decimal.Decimal(8000) MIN_TRADE_USD_VALUE = decimal.Decimal("0.1") + IS_ACCOUNT_ID_AVAILABLE = True # set False when get_account_id is not available and should be checked # Implement all "test_[name]" methods, call super() to run the test, pass to ignore it. # Override the "inner_test_[name]" method to override a test content. @@ -109,6 +110,19 @@ def check_portfolio_content(self, portfolio): at_least_one_value = True assert at_least_one_value + async def test_get_account_id(self): + async with self.local_exchange_manager(): + await self.inner_test_get_account_id() + + async def inner_test_get_account_id(self): + if self.IS_ACCOUNT_ID_AVAILABLE: + account_id = await self.exchange_manager.exchange.get_account_id() + assert account_id + assert isinstance(account_id, str) + else: + with pytest.raises(NotImplementedError): + await self.exchange_manager.exchange.get_account_id() + async def test_create_and_cancel_limit_orders(self): async with self.local_exchange_manager(): await self.inner_test_create_and_cancel_limit_orders() @@ -486,7 +500,7 @@ def check_raw_closed_orders(self, closed_orders): assert len(closed_orders) - len(incomplete_fees_orders) >= 2 def check_parsed_closed_order( - self, order: personal_data.Order, incomplete_fee_orders: list, allow_incomplete_fees: bool + self, order: personal_data.Order, incomplete_fee_orders: list, allow_incomplete_fees: bool ): assert order.symbol assert order.timestamp diff --git a/additional_tests/exchanges_tests/test_ascendex.py b/additional_tests/exchanges_tests/test_ascendex.py index a684fead7..4b2cf6fb1 100644 --- a/additional_tests/exchanges_tests/test_ascendex.py +++ b/additional_tests/exchanges_tests/test_ascendex.py @@ -39,6 +39,10 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() diff --git a/additional_tests/exchanges_tests/test_binance.py b/additional_tests/exchanges_tests/test_binance.py index 9d5fdcff2..c5d2cf152 100644 --- a/additional_tests/exchanges_tests/test_binance.py +++ b/additional_tests/exchanges_tests/test_binance.py @@ -38,6 +38,9 @@ async def test_get_portfolio(self): async def test_get_portfolio_with_market_filter(self): await super().test_get_portfolio_with_market_filter() + async def test_get_account_id(self): + await super().test_get_account_id() + async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() diff --git a/additional_tests/exchanges_tests/test_binance_futures.py b/additional_tests/exchanges_tests/test_binance_futures.py index 9828f4a33..c108e140d 100644 --- a/additional_tests/exchanges_tests/test_binance_futures.py +++ b/additional_tests/exchanges_tests/test_binance_futures.py @@ -34,6 +34,7 @@ class TestBinanceFuturesAuthenticatedExchange( INVERSE_SYMBOL = f"{ORDER_CURRENCY}/USD:{ORDER_CURRENCY}" ORDER_SIZE = 10 # % of portfolio to include in test orders DUPLICATE_TRADES_RATIO = 0.1 # allow 10% duplicate in trades (due to trade id set to order id) + IS_ACCOUNT_ID_AVAILABLE = False # set False when get_account_id is not available and should be checked async def _set_account_types(self, account_types): # todo remove this and use both types when exchange-side multi portfolio is enabled @@ -46,6 +47,9 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + await super().test_get_account_id() + async def test_get_empty_linear_and_inverse_positions(self): await super().test_get_empty_linear_and_inverse_positions() diff --git a/additional_tests/exchanges_tests/test_bingx.py b/additional_tests/exchanges_tests/test_bingx.py index 01c5dea2a..3d74fec20 100644 --- a/additional_tests/exchanges_tests/test_bingx.py +++ b/additional_tests/exchanges_tests/test_bingx.py @@ -39,6 +39,10 @@ async def test_get_portfolio(self): async def test_get_portfolio_with_market_filter(self): await super().test_get_portfolio_with_market_filter() + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() diff --git a/additional_tests/exchanges_tests/test_bitget.py b/additional_tests/exchanges_tests/test_bitget.py index 218239c05..ffb860bc5 100644 --- a/additional_tests/exchanges_tests/test_bitget.py +++ b/additional_tests/exchanges_tests/test_bitget.py @@ -41,10 +41,16 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_create_and_cancel_limit_orders(self): + # KYC needed 8th jan 2024 ccxt 4.2.10 await super().test_create_and_cancel_limit_orders() async def test_create_and_fill_market_orders(self): + # KYC needed 8th jan 2024 ccxt 4.2.10 await super().test_create_and_fill_market_orders() async def test_get_my_recent_trades(self): diff --git a/additional_tests/exchanges_tests/test_bybit.py b/additional_tests/exchanges_tests/test_bybit.py index 9d720e348..3698f9863 100644 --- a/additional_tests/exchanges_tests/test_bybit.py +++ b/additional_tests/exchanges_tests/test_bybit.py @@ -43,6 +43,10 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() diff --git a/additional_tests/exchanges_tests/test_bybit_futures.py b/additional_tests/exchanges_tests/test_bybit_futures.py index e017f34f6..df4bddfa1 100644 --- a/additional_tests/exchanges_tests/test_bybit_futures.py +++ b/additional_tests/exchanges_tests/test_bybit_futures.py @@ -44,6 +44,10 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_get_empty_linear_and_inverse_positions(self): await super().test_get_empty_linear_and_inverse_positions() diff --git a/additional_tests/exchanges_tests/test_coinbase.py b/additional_tests/exchanges_tests/test_coinbase.py index 802754c97..6cb7ed0ee 100644 --- a/additional_tests/exchanges_tests/test_coinbase.py +++ b/additional_tests/exchanges_tests/test_coinbase.py @@ -39,6 +39,10 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() diff --git a/additional_tests/exchanges_tests/test_cryptocom.py b/additional_tests/exchanges_tests/test_cryptocom.py index a62a97822..5815b0993 100644 --- a/additional_tests/exchanges_tests/test_cryptocom.py +++ b/additional_tests/exchanges_tests/test_cryptocom.py @@ -39,6 +39,10 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() diff --git a/additional_tests/exchanges_tests/test_hollaex.py b/additional_tests/exchanges_tests/test_hollaex.py index 60406dafe..63719dd54 100644 --- a/additional_tests/exchanges_tests/test_hollaex.py +++ b/additional_tests/exchanges_tests/test_hollaex.py @@ -42,6 +42,10 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() diff --git a/additional_tests/exchanges_tests/test_huobi.py b/additional_tests/exchanges_tests/test_htx.py similarity index 94% rename from additional_tests/exchanges_tests/test_huobi.py rename to additional_tests/exchanges_tests/test_htx.py index 231c1fa9f..8ff2cecf7 100644 --- a/additional_tests/exchanges_tests/test_huobi.py +++ b/additional_tests/exchanges_tests/test_htx.py @@ -21,13 +21,11 @@ pytestmark = pytest.mark.asyncio -# 17/08/23 (untested with ccxt 4.0.65: -class _TestHuobiAuthenticatedExchange( +class TestHTXAuthenticatedExchange( abstract_authenticated_exchange_tester.AbstractAuthenticatedExchangeTester ): - # PASSED the 6th of aug 2023 # enter exchange name as a class variable here - EXCHANGE_NAME = "huobi" + EXCHANGE_NAME = "htx" ORDER_CURRENCY = "BTC" SETTLEMENT_CURRENCY = "USDT" SYMBOL = f"{ORDER_CURRENCY}/{SETTLEMENT_CURRENCY}" @@ -41,6 +39,10 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() diff --git a/additional_tests/exchanges_tests/test_kucoin.py b/additional_tests/exchanges_tests/test_kucoin.py index ffc79eab2..63725ec16 100644 --- a/additional_tests/exchanges_tests/test_kucoin.py +++ b/additional_tests/exchanges_tests/test_kucoin.py @@ -40,6 +40,9 @@ async def test_get_portfolio_with_market_filter(self): async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() + async def test_get_account_id(self): + await super().test_get_account_id() + async def test_create_and_fill_market_orders(self): await super().test_create_and_fill_market_orders() diff --git a/additional_tests/exchanges_tests/test_kucoin_futures.py b/additional_tests/exchanges_tests/test_kucoin_futures.py index 598590678..a50e6c085 100644 --- a/additional_tests/exchanges_tests/test_kucoin_futures.py +++ b/additional_tests/exchanges_tests/test_kucoin_futures.py @@ -31,7 +31,7 @@ class TestKucoinFuturesAuthenticatedExchange( SETTLEMENT_CURRENCY = "USDT" SYMBOL = f"{ORDER_CURRENCY}/{SETTLEMENT_CURRENCY}:{SETTLEMENT_CURRENCY}" INVERSE_SYMBOL = f"{ORDER_CURRENCY}/USD:{ORDER_CURRENCY}" - ORDER_SIZE = 60 # % of portfolio to include in test orders + ORDER_SIZE = 90 # % of portfolio to include in test orders SUPPORTS_GET_LEVERAGE = False SUPPORTS_SET_LEVERAGE = False @@ -42,6 +42,9 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + await super().test_get_account_id() + async def test_get_empty_linear_and_inverse_positions(self): await super().test_get_empty_linear_and_inverse_positions() diff --git a/additional_tests/exchanges_tests/test_mexc.py b/additional_tests/exchanges_tests/test_mexc.py index 27da287cf..39bda1bdf 100644 --- a/additional_tests/exchanges_tests/test_mexc.py +++ b/additional_tests/exchanges_tests/test_mexc.py @@ -41,6 +41,10 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() diff --git a/additional_tests/exchanges_tests/test_okx.py b/additional_tests/exchanges_tests/test_okx.py index a387cf294..24ff343b5 100644 --- a/additional_tests/exchanges_tests/test_okx.py +++ b/additional_tests/exchanges_tests/test_okx.py @@ -40,6 +40,9 @@ async def test_get_portfolio_with_market_filter(self): async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() + async def test_get_account_id(self): + await super().test_get_account_id() + async def test_create_and_fill_market_orders(self): await super().test_create_and_fill_market_orders() diff --git a/additional_tests/exchanges_tests/test_okx_futures.py b/additional_tests/exchanges_tests/test_okx_futures.py index c95152535..56256dc89 100644 --- a/additional_tests/exchanges_tests/test_okx_futures.py +++ b/additional_tests/exchanges_tests/test_okx_futures.py @@ -41,6 +41,9 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + await super().test_get_account_id() + async def test_get_empty_linear_and_inverse_positions(self): await super().test_get_empty_linear_and_inverse_positions() diff --git a/additional_tests/exchanges_tests/test_phemex.py b/additional_tests/exchanges_tests/test_phemex.py index a6c1be6be..47e694958 100644 --- a/additional_tests/exchanges_tests/test_phemex.py +++ b/additional_tests/exchanges_tests/test_phemex.py @@ -21,8 +21,6 @@ pytestmark = pytest.mark.asyncio -# 17/08/23 (untested with ccxt 4.0.65: -# ccxt.base.errors.ExchangeError: phemex {"msg":"Please try again later","code":10500}? class TestPemexAuthenticatedExchange( abstract_authenticated_exchange_tester.AbstractAuthenticatedExchangeTester ): @@ -40,11 +38,14 @@ async def test_get_portfolio_with_market_filter(self): # pass if not implemented pass + async def test_get_account_id(self): + # pass if not implemented + pass + async def test_create_and_cancel_limit_orders(self): await super().test_create_and_cancel_limit_orders() async def test_create_and_fill_market_orders(self): - # 08 dec 2022: did not run so far, testnet is bugged: order are apparently accepted but never show up await super().test_create_and_fill_market_orders() async def test_get_my_recent_trades(self): diff --git a/octobot/__init__.py b/octobot/__init__.py index 181734bb6..c25b9213e 100644 --- a/octobot/__init__.py +++ b/octobot/__init__.py @@ -16,5 +16,5 @@ PROJECT_NAME = "OctoBot" AUTHOR = "Drakkar-Software" -VERSION = "1.0.5" # major.minor.revision +VERSION = "1.0.6" # major.minor.revision LONG_VERSION = f"{VERSION}" diff --git a/octobot/community/__init__.py b/octobot/community/__init__.py index 9a5df7627..e91abdd76 100644 --- a/octobot/community/__init__.py +++ b/octobot/community/__init__.py @@ -74,7 +74,6 @@ from octobot.community.feeds import ( AbstractFeed, CommunityWSFeed, - CommunityMQTTFeed, community_feed_factory, ) from octobot.community.errors_upload import ( @@ -126,6 +125,5 @@ "upsert_historical_bot_portfolio_query", "AbstractFeed", "CommunityWSFeed", - "CommunityMQTTFeed", "community_feed_factory", ] diff --git a/octobot/community/feeds/__init__.py b/octobot/community/feeds/__init__.py index e1bd2c4f8..599c6b2fe 100644 --- a/octobot/community/feeds/__init__.py +++ b/octobot/community/feeds/__init__.py @@ -22,10 +22,6 @@ from octobot.community.feeds.community_ws_feed import ( CommunityWSFeed, ) -from octobot.community.feeds import community_mqtt_feed -from octobot.community.feeds.community_mqtt_feed import ( - CommunityMQTTFeed, -) from octobot.community.feeds import community_supabase_feed from octobot.community.feeds.community_supabase_feed import ( CommunitySupabaseFeed, @@ -38,7 +34,6 @@ __all__ = [ "AbstractFeed", "CommunityWSFeed", - "CommunityMQTTFeed", "CommunitySupabaseFeed", "community_feed_factory", ] diff --git a/octobot/community/feeds/community_mqtt_feed.py b/octobot/community/feeds/community_mqtt_feed.py deleted file mode 100644 index 4b440565d..000000000 --- a/octobot/community/feeds/community_mqtt_feed.py +++ /dev/null @@ -1,355 +0,0 @@ -# This file is part of OctoBot (https://github.com/Drakkar-Software/OctoBot) -# Copyright (c) 2023 Drakkar-Software, All rights reserved. -# -# OctoBot is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either -# version 3.0 of the License, or (at your option) any later version. -# -# OctoBot is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with OctoBot. If not, see