From e87f0b71597fb33ff6b86eb44c19174e461dd9eb Mon Sep 17 00:00:00 2001 From: marcvanduyn Date: Sun, 27 Apr 2025 23:40:21 +0200 Subject: [PATCH 1/3] Fix stop losses bug when using 100% of the portfolio value --- .gitignore | 4 +- README.md | 200 +- examples/backtest_example/run_backtest.py | 9 +- examples/test.py | 16 + investing_algorithm_framework/__init__.py | 6 +- investing_algorithm_framework/app/app.py | 76 +- .../domain/__init__.py | 15 +- .../domain/data_provider.py | 172 + .../domain/exceptions.py | 16 + .../models/backtesting/backtest_report.py | 132 +- .../domain/models/order/order.py | 22 + .../domain/models/trading_data_types.py | 1 + .../domain/order_executor.py | 64 + .../domain/portfolio_provider.py | 60 + .../domain/singleton.py | 9 - .../domain/utils/__init__.py | 7 +- .../domain/utils/backtesting.py | 194 +- .../download_data.py | 85 + .../infrastructure/__init__.py | 5 +- .../infrastructure/data_providers/__init__.py | 18 + .../infrastructure/data_providers/ccxt.py | 312 + .../market_service/ccxt_market_service.py | 2 +- .../services/__init__.py | 3 +- .../services/market_credential_service.py | 9 +- .../market_data_source_service/__init__.py | 4 +- .../data_provider_service.py | 200 + .../services/trade_service/trade_service.py | 28 +- investing_algorithm_framework/test.py | 16 + poetry.lock | 56 +- pyproject.toml | 2 +- tests/app/test_add_market.py | 75 + .../test_pretty_print_backtest_orders.py | 33 + .../test_pretty_print_backtest_positions.py | 65 + .../test_pretty_print_backtest_trades.py | 33 + tests/domain/models/test_backtest_report.py | 110 + .../report.json | 18158 ++++++++++++++++ tests/services/test_trade_service.py | 270 + 37 files changed, 20261 insertions(+), 226 deletions(-) create mode 100644 examples/test.py create mode 100644 investing_algorithm_framework/domain/data_provider.py create mode 100644 investing_algorithm_framework/domain/order_executor.py create mode 100644 investing_algorithm_framework/domain/portfolio_provider.py delete mode 100644 investing_algorithm_framework/domain/singleton.py create mode 100644 investing_algorithm_framework/download_data.py create mode 100644 investing_algorithm_framework/infrastructure/data_providers/__init__.py create mode 100644 investing_algorithm_framework/infrastructure/data_providers/ccxt.py create mode 100644 investing_algorithm_framework/services/market_data_source_service/data_provider_service.py create mode 100644 investing_algorithm_framework/test.py create mode 100644 tests/app/test_add_market.py create mode 100644 tests/domain/backtesting/test_pretty_print_backtest_orders.py create mode 100644 tests/domain/backtesting/test_pretty_print_backtest_positions.py create mode 100644 tests/domain/backtesting/test_pretty_print_backtest_trades.py create mode 100644 tests/resources/backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21/report.json diff --git a/.gitignore b/.gitignore index a3226460..f0ddd7c3 100644 --- a/.gitignore +++ b/.gitignore @@ -151,4 +151,6 @@ bumpversion.egg-info/ **/backtest_reports/ **/backtest_reports/* **/databases/ -.vscode/ \ No newline at end of file +.vscode/ +.logs +venv \ No newline at end of file diff --git a/README.md b/README.md index 292cf419..d6af6b91 100644 --- a/README.md +++ b/README.md @@ -1,28 +1,13 @@ -
-
-

Investing Algorithm Framework

-
-
- -
- Rapidly build and deploy quantitative strategies and trading bots -
-
- -

- View Docs - Getting Started -

+

Investing Algorithm Framework

Rapidly build, backtest, and deploy quantitative strategies and trading bots

📖 View Documentation | 🚀 Getting Started
--- - -[![Build](https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/publish.yml/badge.svg)](https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/publish.yml) -[![Tests](https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml) -[![Downloads](https://pepy.tech/badge/investing-algorithm-framework)](https://pepy.tech/badge/investing-algorithm-framework) -[![Current Version](https://img.shields.io/pypi/v/investing_algorithm_framework.svg)](https://img.shields.io/pypi/v/investing_algorithm_framework.svg) -
-[![GitHub stars](https://img.shields.io/github/stars/coding-kitties/investing-algorithm-framework.svg?style=social&label=Star&maxAge=1)](https://github.com/SeaQL/sea-orm/stargazers/) If you like what we do, consider starring, sharing and contributing! +
+ + +
+ +> If you like what we do, consider starring, sharing and contributing! ## Sponsors @@ -34,66 +19,54 @@ -## Features and planned features: - -- [x] **Based on Python 3.10+**: Windows, macOS and Linux. -- [x] **Documentation**: [Documentation](https://investing-algorithm-framework.com) -- [x] **Persistence of portfolios, orders, positions and trades**: Persistence is achieved through sqlite. -- [x] **Limit orders**: Create limit orders for buying and selling. -- [x] **Trade models**: Models and functionality for trades, trades stop losses (fixed and trailing) and take profits (fixed and trailing). -- [x] **Market data sources**: Market data sources for OHLCV data and ticker data, and extendible with custom data and events. -- [x] **Polars and Pandas dataframes support** Out of the box dataframes support for fast data processing ([pola.rs](https://pola.rs/), [pandas](https://pandas.pydata.org/)). -- [x] **Azure Functions support**: Stateless running for cloud function deployments in Azure. -- [x] **Live trading**: Live trading. -- [x] **Backtesting and performance analysis reports** [example](./examples/backtest_example) -- [x] **Backtesting multiple algorithms with different backtest date ranges** [example](./examples/backtests_example) -- [x] **Backtesting and results evaluation**: Compare multiple backtests and run experiments. Save and load backtests. Save strategies as part of the backtest. [docs](https://investing-algorithm-framework.com/Getting%20Started/backtesting) -- [x] **Order execution**: Currently support for a wide range of crypto exchanges through [ccxt](https://github.com/ccxt/ccxt) (Support for traditional asset brokers is planned). -- [x] **Web API**: Rest API for interacting with your deployed trading bot -- [x] **PyIndicators**: Works natively with [PyIndicators](https://github.com/coding-kitties/PyIndicators) for technical analysis on your Pandas and Polars dataframes. -- [ ] **Builtin WebUI (Planned)**: Builtin web UI to manage your bot and evaluate your backtests. -- [ ] **Manageable via Telegram (Planned)**: Manage the bot with Telegram. -- [ ] **Performance status report via Web UI and telegram(Planned)**: Provide a performance status of your current trades. -- [ ] **CI/CD integration (Planned)**: Tools for continuous integration and deployment (version tracking, comparison of backtests, automatic deployments). -- [ ] **Tracing and replaying of strategies in backtests (Planned)**: Tracing and replaying of strategies in backtests for specific dates and date ranges so you can evaluate your strategy step by step. -- [ ] **AWS Lambda support (Planned)**: Stateless running for cloud function deployments in AWS. -- [ ] **Azure App services support (Planned)**: deployments in Azure app services with Web UI. - -## Quickstart - -1. First install the framework using `pip`. The Investing Algorithm Framework is hosted on [PyPi](https://pypi.org/project/investing-algorithm-framework/). + +## 🌟 Features + +- [x] Python 3.10+: Cross-platform support for Windows, macOS, and Linux. +- [x] Backtesting: Simulate strategies with detailed performance reports. +- [x] Live Trading: Execute trades in real-time with support for multiple exchanges via ccxt. +- [x] Portfolio Management: Manage portfolios, trades, and positions with persistence via SQLite. +- [x] Market Data Sources: Fetch OHLCV, ticker, and custom data with support for Polars and Pandas. +- [x] Azure Functions Support: Deploy stateless trading bots to Azure. +- [x] Web API: Interact with your bot via REST API. +- [x] PyIndicators Integration: Perform technical analysis directly on your dataframes. +- [x] Extensibility: Add custom strategies, data providers, order executors so you can connect your trading bot to your favorite exchange or broker. + +## 🚀 Quickstart + +Installation +Install the framework via [PyPI](https://pypi.org/project/investing-algorithm-framework/): + +1. First install the framework using `pip`. The Investing Algorithm Framework is hosted on [PyPi]. ```bash -$ pip install investing-algorithm-framework +pip install investing-algorithm-framework ``` -2. Next, just run: +Run the following command to set up your project: ```bash -$ investing-algorithm-framewor init +investing-algorithm-framewor init ``` -or if you want the web version: +For a web-enabled version: ```bash -$ investing-algorithm-framework init --web +investing-algorithm-framework init --web ``` -> You can always change the app to the web version by changing the `app.py` file. -The command will create the file `app.py` and an example script called `strategy.py`. +This will create: -From there, you start building your trading bot in the `strategy.py`. +* app.py: The entry point for your bot. +* strategy.py: A sample strategy file to get started. -More information can be found on our [docs](https://investing-algorithm-framework.com/) - -> Make sure you leave the `app.py` file as is, as it is the entry point for the framework. -> You can change the `bot.py` file to your liking and add other files to the working directory. -> The framework will automatically pick up the files in the working directory. -``` +> Note: Keep the app.py file as is. You can modify strategy.py and add additional files to build your bot. +> You can always change the app to the web version by changing the `app.py` file. -## Example implementation +--- -The following algorithm connects to binance and buys BTC every 2 hours. +## 📈 Example: A Simple Trading Bot +The following example connects to Binance and buys BTC every 2 hours. ```python import logging.config @@ -157,7 +130,7 @@ if __name__ == "__main__": > You can find more examples [here](./examples) folder. -## Backtesting and experiments +## 🔍 Backtesting The framework also supports backtesting and performing backtest experiments. After a backtest, you can print a report that shows the performance of your trading bot. @@ -270,45 +243,38 @@ Take profits overview ╰────────────────────┴───────────────┴──────────┴──────────┴─────────────────────────────────────┴──────────────┴────────────────┴─────────────────────────────────┴──────────────┴─────────────┴───────────────╯ ``` -### Backtest experiments +## 🌐 Deployment to Azure -The framework also supports backtest experiments. Backtest experiments allows you to -compare multiple algorithms and evaluate their performance. Ideally, -you would do this by parameterizing your strategy and creating a factory function that -creates the algorithm with the different parameters. You can find an example of this -in the [backtest experiments example](./examples/backtest_experiment). +Prerequisites -## Broker/Exchange configuration +Ensure Azure Functions Core Tools are installed: -The framework has by default support for [ccxt](https://github.com/ccxt/ccxt). -This should allow you to connect to a lot of brokers/exchanges. +```bash +npm install -g azure-functions-core-tools@4 --unsafe-perm true +``` +Deploying to Azure +Use the provided deployment script: + +This script: -```python -from investing_algorithm_framework import PortfolioConfiguration, \ - MarketCredential, create_app -app = create_app() -app.add_market_credential( - MarketCredential( - market="", - api_key="", - secret_key="", - ) -) -app.add_portfolio_configuration( - PortfolioConfiguration( - market="", - initial_balance=400, - trading_symbol="EUR" - ) -) ``` +investing-algorithm-framework deploy +``` + +This script: + +* Creates Azure resources (e.g., storage accounts, function apps). +* Sets environment variables for the Azure Function. +* Deploys your bot to Azure. -## Performance +## 📚 Documentation +Comprehensive documentation is available at [investing-algorithm-framework.com](https://investing-algorithm-framework.com). -We are continuously working on improving the performance of the framework. If -you have any suggestions, please let us know. +## 🛠️ Development -## Installation for local development +Local Development + +Clone the repository and install dependencies using Poetry: The framework is built with poetry. To install the framework for local development, you can run the following commands: @@ -329,11 +295,11 @@ To run the tests, you can run the following command: python -m unittest discover -s tests ``` -## Disclaimer +## ⚠️ Disclaimer + If you use this framework for your investments, do not risk money -which you are afraid to lose, until you have clear understanding how -the framework works. We can't stress this enough: +which you are afraid to lose, until you have clear understanding how the framework works. We can't stress this enough: BEFORE YOU START USING MONEY WITH THE FRAMEWORK, MAKE SURE THAT YOU TESTED YOUR COMPONENTS THOROUGHLY. USE THE SOFTWARE AT YOUR OWN RISK. @@ -342,6 +308,8 @@ THE AUTHORS AND ALL AFFILIATES ASSUME NO RESPONSIBILITY FOR YOUR INVESTMENT RESU Also, make sure that you read the source code of any plugin you use or implementation of an algorithm made with this framework. +We welcome contributions! Check out the project board and issues to get started. + ## Documentation All the documentation can be found online @@ -354,17 +322,7 @@ contributing page at the website. If you'd like to chat with investing-algorithm-framework users and developers, [join us on Slack](https://inv-algo-framework.slack.com) or [join us on reddit](https://www.reddit.com/r/InvestingBots/) -## Acknowledgements - -We want to thank all contributors to this project. A full list of all the people that contributed to the project can be -found [here](https://github.com/investing-algorithms/investing-algorithm-framework/blob/master/AUTHORS.md) - -### [Bugs / Issues](https://github.com/investing-algorithms/investing-algorithm-framework/issues?q=is%3Aissue) - -If you discover a bug in the framework, please [search our issue tracker](https://github.com/investing-algorithms/investing-algorithm-framework/issues?q=is%3Aissue) -first. If it hasn't been reported, please [create a new issue](https://github.com/investing-algorithms/investing-algorithm-framework/issues/new). - -### Contributing +## 🤝 Contributing The investing algorithm framework is a community driven project. We welcome you to participate, contribute and together help build the future trading bots developed in python. @@ -376,4 +334,20 @@ You can pick up a task by assigning yourself to it. **Note** before starting any major new feature work, *please open an issue describing what you are planning to do*. This will ensure that interested parties can give valuable feedback on the feature, and let others know that you are working on it. -**Important:** Always create your feature or hotfix against the `develop` branch, not `main`. \ No newline at end of file +**Important:** Always create your feature or hotfix against the `develop` branch, not `main`. + +## 📬 Support + +* Slack Community +* Reddit Community + + +## 🏆 Acknowledgements + +We want to thank all contributors to this project. A full list of all the people that contributed to the project can be +found [here](https://github.com/investing-algorithms/investing-algorithm-framework/blob/master/AUTHORS.md) + +### [Bugs / Issues](https://github.com/investing-algorithms/investing-algorithm-framework/issues?q=is%3Aissue) + +If you discover a bug in the framework, please [search our issue tracker](https://github.com/investing-algorithms/investing-algorithm-framework/issues?q=is%3Aissue) +first. If it hasn't been reported, please [create a new issue](https://github.com/investing-algorithms/investing-algorithm-framework/issues/new). diff --git a/examples/backtest_example/run_backtest.py b/examples/backtest_example/run_backtest.py index 4bd4ff18..404bce95 100644 --- a/examples/backtest_example/run_backtest.py +++ b/examples/backtest_example/run_backtest.py @@ -174,18 +174,15 @@ def _is_buy_signal(self, data): app = create_app(name="GoldenCrossStrategy") +app.add_market( + market="BINANCE", trading_symbol="EUR", initial_balance=400, +) app.add_strategy(CrossOverStrategy) app.add_market_data_source(bitvavo_btc_eur_ohlcv_2h) app.add_market_data_source(bitvavo_dot_eur_ohlcv_2h) app.add_market_data_source(bitvavo_btc_eur_ticker) app.add_market_data_source(bitvavo_dot_eur_ticker) -# Add a portfolio configuration of 400 euro initial balance -app.add_portfolio_configuration( - PortfolioConfiguration( - market="BINANCE", trading_symbol="EUR", initial_balance=400, - ) -) if __name__ == "__main__": end_date = datetime(2023, 12, 2) diff --git a/examples/test.py b/examples/test.py new file mode 100644 index 00000000..c4da331d --- /dev/null +++ b/examples/test.py @@ -0,0 +1,16 @@ +from investing_algorithm_framework import download + + +if __name__ == "__main__": + data = download( + symbol="BTC/USDT", + market="binance", + data_type="ohlcv", + start_date="2023-01-01", + end_date="2023-10-01", + window_size=200, + pandas=True, + save=True, + storage_dir="./data" + ) + print(data) diff --git a/investing_algorithm_framework/__init__.py b/investing_algorithm_framework/__init__.py index bf5c8c01..bfa3c84a 100644 --- a/investing_algorithm_framework/__init__.py +++ b/investing_algorithm_framework/__init__.py @@ -18,6 +18,7 @@ CCXTTickerMarketDataSource, CSVOHLCVMarketDataSource, \ CSVTickerMarketDataSource, AzureBlobStorageStateHandler from .create_app import create_app +from .download_data import download __all__ = [ "Algorithm", @@ -75,5 +76,6 @@ "MarketDataType", "TradeRiskType", "Context", - "APPLICATION_DIRECTORY" -] + "APPLICATION_DIRECTORY", + "download" +] \ No newline at end of file diff --git a/investing_algorithm_framework/app/app.py b/investing_algorithm_framework/app/app.py index a7b0d319..c70ac815 100644 --- a/investing_algorithm_framework/app/app.py +++ b/investing_algorithm_framework/app/app.py @@ -19,7 +19,7 @@ BACKTESTING_START_DATE, BACKTESTING_END_DATE, BacktestReport, \ APP_MODE, MarketCredential, AppMode, BacktestDateRange, \ DATABASE_DIRECTORY_NAME, BACKTESTING_INITIAL_AMOUNT, \ - MarketDataSource, APPLICATION_DIRECTORY + MarketDataSource, APPLICATION_DIRECTORY, PortfolioConfiguration from investing_algorithm_framework.infrastructure import setup_sqlalchemy, \ create_all_tables from investing_algorithm_framework.services import OrderBacktestService, \ @@ -292,11 +292,11 @@ def initialize(self): market_data_source_service=market_data_source_service ) ) - - # Initialize all market credentials - self._market_credential_service = self.container.\ - market_credential_service() - self._market_credential_service.initialize() + else: + # Initialize all market credentials + self._market_credential_service = self.container.\ + market_credential_service() + self._market_credential_service.initialize() # Add all market data sources of the strategies to the market data # source service @@ -540,6 +540,16 @@ def reset(self): self.algorithm.reset() def add_portfolio_configuration(self, portfolio_configuration): + """ + Function to add a portfolio configuration to the app. The portfolio + configuration should be an instance of PortfolioConfiguration. + + Args: + portfolio_configuration: Instance of PortfolioConfiguration + + Returns: + None + """ portfolio_configuration_service = self.container \ .portfolio_configuration_service() portfolio_configuration_service.add(portfolio_configuration) @@ -628,7 +638,21 @@ def _create_resources_if_not_exists(self): ) def get_portfolio_configurations(self): - return self.algorithm.get_portfolio_configurations() + portfolio_configuration_service = self.container \ + .portfolio_configuration_service() + return portfolio_configuration_service.get_all() + + def get_market_credentials(self): + """ + Function to get all market credentials from the app. This method + should be called when you want to get all market credentials. + + Returns: + List of MarketCredential instances + """ + market_credential_service = self.container \ + .market_credential_service() + return market_credential_service.get_all() def run_backtest( self, @@ -958,3 +982,41 @@ def add_state_handler(self, state_handler): ) self._state_handler = state_handler + + def add_market( + self, + market, + trading_symbol, + api_key=None, + secret_key=None, + initial_balance=None + ): + """ + Function to add a market to the app. This function is a utility + function to add a portfolio configuration and market credential + to the app. + + Args: + market: String representing the market name + trading_symbol: Trading symbol for the portfolio + api_key: API key for the market + secret_key: Secret key for the market + initial_balance: Initial balance for the market + + Returns: + None + """ + + portfolio_configuration = PortfolioConfiguration( + market=market, + trading_symbol=trading_symbol, + initial_balance=initial_balance + ) + + self.add_portfolio_configuration(portfolio_configuration) + market_credential = MarketCredential( + market=market, + api_key=api_key, + secret_key=secret_key + ) + self.add_market_credential(market_credential) diff --git a/investing_algorithm_framework/domain/__init__.py b/investing_algorithm_framework/domain/__init__.py index bf98e24f..192475cb 100644 --- a/investing_algorithm_framework/domain/__init__.py +++ b/investing_algorithm_framework/domain/__init__.py @@ -12,7 +12,7 @@ from .data_structures import PeekableQueue from .decimal_parsing import parse_decimal_to_string, parse_string_to_decimal from .exceptions import OperationalException, ApiException, \ - PermissionDeniedApiException, ImproperlyConfigured + PermissionDeniedApiException, ImproperlyConfigured, NetworkError from .models import OrderStatus, OrderSide, OrderType, TimeInterval, \ TimeUnit, TimeFrame, TradingTimeFrame, TradingDataType, \ PortfolioConfiguration, Portfolio, Position, Order, TradeStatus, \ @@ -24,7 +24,6 @@ OHLCVMarketDataSource, BacktestMarketDataSource, MarketDataSource, \ MarketService, MarketCredentialService, AbstractPortfolioSyncService, \ RoundingService, StateHandler -from .singleton import Singleton from .stateless_actions import StatelessActions from .strategy import Strategy from .utils import random_string, append_dict_as_row_to_csv, \ @@ -32,8 +31,10 @@ load_backtest_report, convert_polars_to_pandas, \ csv_to_list, StoppableThread, pretty_print_backtest_reports_evaluation, \ pretty_print_backtest, load_csv_into_dict, load_backtest_reports, \ - get_backtest_report + get_backtest_report, pretty_print_positions, pretty_print_trades, \ + pretty_print_orders from .metrics import get_price_efficiency_ratio +from .data_provider import DataProvider __all__ = [ "OrderStatus", @@ -55,7 +56,6 @@ "SQLALCHEMY_DATABASE_URI", "TradingDataType", "TradingTimeFrame", - "Singleton", "random_string", "append_dict_as_row_to_csv", "add_column_headers_to_csv", @@ -128,5 +128,10 @@ "TradeTakeProfit", "TradeStopLoss", "StateHandler", - "APPLICATION_DIRECTORY" + "APPLICATION_DIRECTORY", + "pretty_print_positions", + "pretty_print_trades", + "pretty_print_orders", + "DataProvider", + "NetworkError" ] diff --git a/investing_algorithm_framework/domain/data_provider.py b/investing_algorithm_framework/domain/data_provider.py new file mode 100644 index 00000000..fb17a41f --- /dev/null +++ b/investing_algorithm_framework/domain/data_provider.py @@ -0,0 +1,172 @@ +from typing import Optional, List +from abc import ABC, abstractmethod +from datetime import datetime +from investing_algorithm_framework.domain import TradingDataType, TimeFrame + + +class DataProvider(ABC): + """ + Abstract base class for data providers. The DataProvider class + is responsible for fetching and preparing data for trading + algorithms. + + Attributes: + data_type (str): The type of data to be + fetched (e.g., OHLCV, TICKER, CUSTOM_DATA). + symbols (Optional[List[str]]): A list supported symbols that the + data provider can provide data for. The framework will use this + list when searching for a data provider for a specific symbol. + Example: ["AAPL/USD", "GOOGL/USD", "MSFT/USD"] + markets (Optional[List[str]]): A list supported markets that the + data provider can provide data for. The framework will use this + list when searching for a data provider for a specific market. + Example: ["BINANCE", "COINBASE", "KRAKEN"] + priority (int): The priority of the data provider. The lower the + number, the higher the priority. The framework will use this + priority when searching for a data provider for a specific symbol. + Example: 0 is the highest priority, 1 is the second highest + priority, etc. This is useful when multiple data providers + support the same symbol or market. The framework will use the + data provider with the highest priority. + time_frame (Optional[str]): The time frame for the data. This is + useful for data providers that support multiple time frames. + Example: "1m", "5m", "1h", "1d" + window_size (Optional[int]): The window size for the data. This is + useful for data providers that support multiple window sizes. + Example: 100, 200, 500 + storage_path (Optional[str]): The path to the storage location + for the data. This is useful for data providers that support + saving data to a file + """ + + def __init__( + self, + data_type: str, + symbol: str = None, + markets: list = None, + priority: int = 0, + time_frame = None, + window_size = None, + storage_path = None, + market_credentials: List = None, + ): + """ + Initializes the DataProvider with data type, symbols, and markets. + """ + self._data_type = None + self._time_frame = None + + if data_type is not None: + self._data_type = TradingDataType.from_value(data_type) + + if time_frame is not None: + self.time_frame = TimeFrame.from_value(time_frame) + + self.symbol = symbol + self.markets = markets + self.priority = priority + self.window_size = window_size + self.storage_path = storage_path + self.market_credentials = market_credentials + + @property + def data_type(self): + return self._data_type + + @data_type.setter + def data_type(self, value): + self._data_type = TradingDataType.from_value(value) + + @property + def time_frame(self): + return self._time_frame + + @time_frame.setter + def time_frame(self, value): + self._time_frame = TimeFrame.from_value(value) + + def get_credential(self, market: str): + """ + Returns the credentials for the given market. + """ + if self.market_credentials is None: + return None + for credential in self.market_credentials: + if credential.market == market: + return credential + return None + + @property + def config(self): + return self._config + + @config.setter + def config(self, value): + self._config = value + + @abstractmethod + def has_data( + self, + data_type: str = None, + symbol: str = None, + market: str = None, + time_frame: str = None, + start_date: datetime = None, + end_date: datetime = None, + window_size = None, + ) -> None: + """ + Checks if the data provider has data for the given parameters. + """ + raise NotImplementedError("Subclasses should implement this method.") + + @abstractmethod + def get_data( + self, + data_type: str = None, + date: datetime = None, + symbol: str = None, + market: str = None, + time_frame: str = None, + start_date: datetime = None, + end_date: datetime = None, + storage_path = None, + window_size = None, + pandas = False, + ): + """ + Fetches data for a given symbol and date range. + """ + raise NotImplementedError("Subclasses should implement this method.") + + @abstractmethod + def pre_pare_backtest_data( + self, + backtest_start_date, + backtest_end_date, + symbol: str = None, + market: str = None, + time_frame: str = None, + window_size = None, + ) -> None: + """ + Prepares backtest data for a given symbol and date range. + """ + raise NotImplementedError("Subclasses should implement this method.") + + @abstractmethod + def get_backtest_data( + self, + date: datetime = None, + symbol: str = None, + market: str = None, + time_frame: str = None, + backtest_start_date: datetime = None, + backtest_end_date: datetime = None, + window_size = None, + pandas = False, + ) -> None: + """ + Fetches backtest data for a given symbol and date range. + """ + raise NotImplementedError("Subclasses should implement this method.") diff --git a/investing_algorithm_framework/domain/exceptions.py b/investing_algorithm_framework/domain/exceptions.py index de3275b6..2ea339a7 100644 --- a/investing_algorithm_framework/domain/exceptions.py +++ b/investing_algorithm_framework/domain/exceptions.py @@ -60,3 +60,19 @@ def to_response(self): "status": "error", "message": self.error_message } + +class NetworkError(Exception): + """ + Class NetworkError: Exception class indicating a problem occurred + during making a netwok request + """ + + def __init__(self, message) -> None: + super(NetworkError, self).__init__(message) + self.error_message = message + + def to_response(self): + return { + "status": "error", + "message": self.error_message + } diff --git a/investing_algorithm_framework/domain/models/backtesting/backtest_report.py b/investing_algorithm_framework/domain/models/backtesting/backtest_report.py index 563ae8bb..f478c0ab 100644 --- a/investing_algorithm_framework/domain/models/backtesting/backtest_report.py +++ b/investing_algorithm_framework/domain/models/backtesting/backtest_report.py @@ -1,3 +1,4 @@ +from typing import List, Set, Dict from datetime import datetime from logging import getLogger @@ -10,8 +11,11 @@ .backtesting.backtest_date_range import BacktestDateRange from investing_algorithm_framework.domain.models.base_model import BaseModel from investing_algorithm_framework.domain.models.position import Position -from investing_algorithm_framework.domain.models.trade import Trade +from investing_algorithm_framework.domain.models.trade import Trade, \ + TradeStatus from investing_algorithm_framework.domain.models.order import Order +from investing_algorithm_framework.domain.models.order import OrderSide, \ + OrderStatus logger = getLogger(__name__) @@ -381,6 +385,12 @@ def to_dict(self): """ Convert the backtest report to a dictionary. So it can be saved to a file. + + Args: + None + + Returns: + dict: The backtest report as a dictionary """ # Convert context to a dictionary @@ -597,3 +607,123 @@ def get_trace(self, symbol, strategy_id=None): ) return None + + def get_orders( + self, + target_symbol=None, + order_side=None, + order_status=None, + created_at_lt=None, + ) -> List[Order]: + """ + Get the orders of a backtest report + + Args: + target_symbol (str): The target_symbol + order_side (str): The order side + status (str): The order status + created_at_lt (datetime): The created_at date to filter the orders + + Returns: + list: The orders of the backtest report + """ + selection = self.orders + + if created_at_lt is not None: + selection = [ + order for order in selection + if order.created_at < created_at_lt + ] + + + if target_symbol is not None: + selection = [ + order for order in selection + if order.target_symbol == target_symbol + ] + + if order_side is not None: + order_side = OrderSide.from_value(order_side) + selection = [ + order for order in selection + if order.order_side == order_side.value + ] + + if order_status is not None: + status = OrderStatus.from_value(order_status) + selection = [ + order for order in selection + if order.status == status.value + ] + + return selection + + def get_trades(self, target_symbol=None, trade_status=None) -> List[Trade]: + """ + Get the trades of a backtest report + + Args: + target_symbol (str): The target_symbol + trade_status (str): The trade_status + + Returns: + list: The trades of the backtest report + """ + selection = self.trades + + if target_symbol is not None: + selection = [ + trade for trade in selection + if trade.target_symbol == target_symbol + ] + + if trade_status is not None: + trade_status = TradeStatus.from_value(trade_status) + selection = [ + trade for trade in selection + if trade.status == trade_status.value + ] + + return selection + + def get_symbols(self) -> Set[str]: + """ + Get all the unique symbols of the backtest. The unique + symbols are all the assets that are being traded in + the backtest. + + Args: + None + + Returns: + set: The unique symbols of the backtest + """ + unique_symbols = set() + + + for order in self.orders: + if order.target_symbol not in self.symbols: + unique_symbols.add(order.target_symbol) + + return unique_symbols + + def get_positions(self, symbol=None) -> List[Position]: + """ + Get the positions of the backtest report + + Args: + symbol (str): The symbol + + Returns: + list: The positions of the backtest report + """ + + selection = self.positions + + if symbol is not None: + selection = [ + position for position in selection + if position.symbol == symbol + ] + + return selection diff --git a/investing_algorithm_framework/domain/models/order/order.py b/investing_algorithm_framework/domain/models/order/order.py index 8213a38d..046a6606 100644 --- a/investing_algorithm_framework/domain/models/order/order.py +++ b/investing_algorithm_framework/domain/models/order/order.py @@ -201,6 +201,17 @@ def available_amount(self, available_amount): self.set_available_amount(available_amount) def to_dict(self, datetime_format=None): + """ + Convert the Order object to a dictionary + + Args: + datetime_format (str): The format to use for the datetime fields. + If None, the datetime fields will be returned as is. + Defaults to None. + + Returns: + dict: A dictionary representation of the Order object. + """ if datetime_format is not None: created_at = self.created_at.strftime(datetime_format) \ @@ -212,6 +223,7 @@ def to_dict(self, datetime_format=None): updated_at = self.updated_at return { + "id": self.id, "external_id": self.external_id, "target_symbol": self.target_symbol, "trading_symbol": self.trading_symbol, @@ -330,3 +342,13 @@ def __repr__(self): created_at=self.get_created_at(), updated_at=self.get_updated_at(), ) + + def get_size(self): + """ + Get the size of the order + + Returns: + float: The size of the order + """ + return self.get_amount() * self.get_price() \ + if self.get_price() is not None else 0 diff --git a/investing_algorithm_framework/domain/models/trading_data_types.py b/investing_algorithm_framework/domain/models/trading_data_types.py index 20e5039e..5e02e5e2 100644 --- a/investing_algorithm_framework/domain/models/trading_data_types.py +++ b/investing_algorithm_framework/domain/models/trading_data_types.py @@ -5,6 +5,7 @@ class TradingDataType(Enum): TICKER = 'TICKER' ORDER_BOOK = 'ORDER_BOOK' OHLCV = "OHLCV" + CUSTOM = "CUSTOM" @staticmethod def from_value(value): diff --git a/investing_algorithm_framework/domain/order_executor.py b/investing_algorithm_framework/domain/order_executor.py new file mode 100644 index 00000000..689136ed --- /dev/null +++ b/investing_algorithm_framework/domain/order_executor.py @@ -0,0 +1,64 @@ +from abc import ABC, abstractmethod + + +class OrderExecutor(ABC): + """ + Abstract base class for order executors. The OrderExecutor class is + responsible for executing orders in a trading algorithm. + + Attributes: + market (str): The market in which the order will be executed + + """ + + @property + def market_credentials(self): + """ + Returns the market credentials for the order executor. + + Returns: + dict: A dictionary containing the market credentials. + """ + return self._market_credentials + + @market_credentials.setter + def market_credentials(self, credentials): + """ + Sets the market credentials for the order executor. + + Args: + value (dict): A dictionary containing the market credentials. + """ + self._market_credentials = value + + + @abstractmethod + def execute_order(self, order): + """ + Executes an order. + + Args: + order: The order to be executed + + + Returns: + Order: Instance of the executed order. + """ + raise NotImplementedError( + "Subclasses must implement this method." + ) + + @abstractmethod + def cancel_order(self, order): + """ + Cancels an order. + + Args: + order: The order to be canceled + + Returns: + Order: Instance of the canceled order. + """ + raise NotImplementedError( + "Subclasses must implement this method." + ) diff --git a/investing_algorithm_framework/domain/portfolio_provider.py b/investing_algorithm_framework/domain/portfolio_provider.py new file mode 100644 index 00000000..677f79b7 --- /dev/null +++ b/investing_algorithm_framework/domain/portfolio_provider.py @@ -0,0 +1,60 @@ +from abc import ABC, abstractmethod + + +class PortfolioProvider(ABC): + """ + Abstract base class for portfolio providers. The PortfolioProvider class + is responsible for managing and providing access to trading portfolios. + + Attributes: + portfolio_id (str): The unique identifier for the portfolio. + user_id (str): The unique identifier for the user associated with the portfolio. + balance (float): The current balance of the portfolio. + assets (dict): A dictionary containing the assets in the portfolio and their quantities. + """ + + @abstractmethod + def get_order(self, order_id: str): + """ + Fetches an order by its ID. + + Args: + order_id (str): The unique identifier for the order. + + Returns: + Order: The order object. + """ + pass + + @abstractmethod + def get_orders(self): + """ + Fetches all orders in the portfolio. + + Returns: + List[Order]: A list of order objects. + """ + pass + + @abstractmethod + def get_position(self, position_id: str): + """ + Fetches a position by its ID. + + Args: + position_id (str): The unique identifier for the position. + + Returns: + Position: The position object. + """ + pass + + @abstractmethod + def get_positions(self): + """ + Fetches all positions in the portfolio. + + Returns: + List[Position]: A list of position objects. + """ + pass diff --git a/investing_algorithm_framework/domain/singleton.py b/investing_algorithm_framework/domain/singleton.py deleted file mode 100644 index 67c7a4e7..00000000 --- a/investing_algorithm_framework/domain/singleton.py +++ /dev/null @@ -1,9 +0,0 @@ -class Singleton(type): - _instances = {} - - def __call__(cls, *args, **kwargs): - if cls not in cls._instances: - cls._instances[cls] = \ - super(Singleton, cls).__call__(*args, **kwargs) - - return cls._instances[cls] diff --git a/investing_algorithm_framework/domain/utils/__init__.py b/investing_algorithm_framework/domain/utils/__init__.py index 0459913d..d7316e2e 100644 --- a/investing_algorithm_framework/domain/utils/__init__.py +++ b/investing_algorithm_framework/domain/utils/__init__.py @@ -1,6 +1,6 @@ from .backtesting import pretty_print_backtest, load_backtest_report, \ pretty_print_backtest_reports_evaluation, load_backtest_reports, \ - get_backtest_report + get_backtest_report, pretty_print_positions, pretty_print_trades, pretty_print_orders from .csv import get_total_amount_of_rows, append_dict_as_row_to_csv, \ add_column_headers_to_csv, csv_to_list, load_csv_into_dict from .random import random_string @@ -22,5 +22,8 @@ 'load_backtest_report', 'load_backtest_reports', 'convert_polars_to_pandas', - 'get_backtest_report' + 'get_backtest_report', + 'pretty_print_positions', + 'pretty_print_trades', + 'pretty_print_orders', ] diff --git a/investing_algorithm_framework/domain/utils/backtesting.py b/investing_algorithm_framework/domain/utils/backtesting.py index 882189f1..7ecb80cf 100644 --- a/investing_algorithm_framework/domain/utils/backtesting.py +++ b/investing_algorithm_framework/domain/utils/backtesting.py @@ -548,13 +548,165 @@ def pretty_print_percentage_positive_trades( print(f"{COLOR_YELLOW}Most positive trades:{COLOR_RESET} {COLOR_GREEN}Algorithm {percentages.name} {float(percentages.percentage_positive_trades):.{precision}f}%{COLOR_RESET}") +def pretty_print_orders( + backtest_report, + target_symbol = None, + order_status = None, + amount_precesion=4, + price_precision=2, + time_precision=1, + percentage_precision=2 +) -> None: + """ + Pretty print the orders of the backtest report to the console. + + Args: + backtest_report: The backtest report + target_symbol: The target symbol of the orders + order_status: The status of the orders + amount_precesion: The precision of the amount + price_precision: The precision of the price + time_precision: The precision of the time + percentage_precision: The precision of the percentage + + Returns: + None + """ + + selection = backtest_report.get_orders( + target_symbol=target_symbol, + order_status=order_status + ) + + print(f"{COLOR_YELLOW}Orders overview{COLOR_RESET}") + orders_table = {} + orders_table["Pair (Order id)"] = [ + f"{order.target_symbol}/{order.trading_symbol} ({order.id})" + for order in selection + ] + orders_table["Status"] = [ + order.status for order in selection + ] + orders_table["Side"] = [ + order.order_side for order in selection + ] + orders_table["Size"] = [ + f"{float(order.get_size()):.{amount_precesion}f} {order.trading_symbol}" + for order in selection + ] + orders_table["Price"] = [ + f"{float(order.price):.{amount_precesion}f} {order.trading_symbol}" + for order in selection + ] + orders_table["Amount"] = [ + f"{float(order.amount):.{amount_precesion}f} {order.target_symbol}" + for order in selection + ] + orders_table["Filled"] = [ + f"{float(order.filled):.{amount_precesion}f} {order.target_symbol}" + for order in selection + ] + orders_table["Created at"] = [ + order.created_at.strftime("%Y-%m-%d %H:%M") for order in selection if order.created_at is not None + ] + print(tabulate(orders_table, headers="keys", tablefmt="rounded_grid")) + + +def pretty_print_positions( + backtest_report, + symbol = None, + amount_precesion=4, + price_precision=2, + time_precision=1, + percentage_precision=2 +) -> None: + """ + Pretty print the positions of the backtest report to the console. + + Args: + backtest_report: The backtest report + target_symbol: The target symbol of the orders + order_status: The status of the orders + amount_precesion: The precision of the amount + price_precision: The precision of the price + time_precision: The precision of the time + percentage_precision: The precision of the percentage + + Returns: + None + """ + selection = backtest_report.get_positions(symbol=symbol) + + print(f"{COLOR_YELLOW}Positions overview{COLOR_RESET}") + position_table = {} + position_table["Position"] = [ + position.symbol for position in selection + ] + position_table["Amount"] = [ + f"{float(position.amount):.{amount_precesion}f}" for position in + selection + ] + position_table["Pending buy amount"] = [ + f"{float(position.amount_pending_buy):.{amount_precesion}f}" + for position in selection + ] + position_table["Pending sell amount"] = [ + f"{float(position.amount_pending_sell):.{amount_precesion}f}" + for position in selection + ] + position_table[f"Cost ({backtest_report.trading_symbol})"] = [ + f"{float(position.cost):.{price_precision}f}" + for position in selection + ] + position_table[f"Value ({backtest_report.trading_symbol})"] = [ + f"{float(position.value):.{price_precision}f} {backtest_report.trading_symbol}" + for position in selection + ] + position_table["Percentage of portfolio"] = [ + f"{float(position.percentage_of_portfolio):.{percentage_precision}f}%" + for position in selection + ] + position_table[f"Growth ({backtest_report.trading_symbol})"] = [ + f"{float(position.growth):.{price_precision}f} {backtest_report.trading_symbol}" + for position in selection + ] + position_table["Growth_rate"] = [ + f"{float(position.growth_rate):.{percentage_precision}f}%" + for position in selection + ] + print( + tabulate(position_table, headers="keys", tablefmt="rounded_grid") + ) + + def pretty_print_trades( backtest_report, + target_symbol = None, + status = None, amount_precesion=4, price_precision=2, time_precision=1, percentage_precision=2 ): + """ + Pretty print the trades of the backtest report to the console. + + Args: + backtest_report: The backtest report + target_symbol: The target symbol of the trades + status: The status of the trades + amount_precesion: The precision of the amount + price_precision: The precision of the price + time_precision: The precision of the time + percentage_precision: The precision of the percentage + + Returns: + None + """ + selection = backtest_report.get_trades( + target_symbol=target_symbol, + trade_status=status + ) def get_status(trade): status = "OPEN" @@ -620,43 +772,43 @@ def get_high_water_mark(trade): trades_table = {} trades_table["Pair (Trade id)"] = [ f"{trade.target_symbol}/{trade.trading_symbol} ({trade.id})" - for trade in backtest_report.trades + for trade in selection ] trades_table["Status"] = [ - get_status(trade) for trade in backtest_report.trades + get_status(trade) for trade in selection ] trades_table["Amount (remaining)"] = [ f"{float(trade.amount):.{amount_precesion}f} ({float(trade.remaining):.{amount_precesion}f}) {trade.target_symbol}" - for trade in backtest_report.trades + for trade in selection ] trades_table[f"Net gain ({backtest_report.trading_symbol})"] = [ f"{float(trade.net_gain):.{price_precision}f}" - for trade in backtest_report.trades + for trade in selection ] trades_table["Open date"] = [ - trade.opened_at.strftime("%Y-%m-%d %H:%M") for trade in backtest_report.trades if trade.opened_at is not None + trade.opened_at.strftime("%Y-%m-%d %H:%M") for trade in selection if trade.opened_at is not None ] trades_table["Close date"] = [ - trade.closed_at.strftime("%Y-%m-%d %H:%M") for trade in backtest_report.trades if trade.closed_at is not None + trade.closed_at.strftime("%Y-%m-%d %H:%M") for trade in selection if trade.closed_at is not None ] trades_table["Duration"] = [ - f"{trade.duration:.{time_precision}f} hours" for trade in backtest_report.trades + f"{trade.duration:.{time_precision}f} hours" for trade in selection ] # Add (unrealized) to the net gain if the trade is still open trades_table[f"Net gain ({backtest_report.trading_symbol})"] = [ f"{float(trade.net_gain_absolute):.{price_precision}f} ({float(trade.net_gain_percentage):.{percentage_precision}f}%)" + (" (unrealized)" if not TradeStatus.CLOSED.equals(trade.status) else "") - for trade in backtest_report.trades + for trade in selection ] trades_table[f"Open price ({backtest_report.trading_symbol})"] = [ - f"{trade.open_price:.{price_precision}f}" for trade in backtest_report.trades + f"{trade.open_price:.{price_precision}f}" for trade in selection ] trades_table[ f"Close price's ({backtest_report.trading_symbol})" ] = [ - get_close_prices(trade) for trade in backtest_report.trades + get_close_prices(trade) for trade in selection ] trades_table["High water mark"] = [ - get_high_water_mark(trade) for trade in backtest_report.trades + get_high_water_mark(trade) for trade in selection ] print(tabulate(trades_table, headers="keys", tablefmt="rounded_grid")) @@ -885,12 +1037,26 @@ def load_backtest_report(file_path: str) -> BacktestReport: """ Load a backtest report from a file. - param file_path: The file path - :return: The backtest report + Args: + file_path (str): The path to the backtest report file or folder + + Returns: + BacktestReport: The backtest report """ + if not os.path.exists(file_path): + raise OperationalException( + "Backtest rerport file or folder does not exist" + ) + + if os.path.isdir(file_path): + file_path = os.path.join(file_path, "report.json") + return load_backtest_report(file_path) + if not os.path.isfile(file_path): - raise OperationalException("File does not exist") + raise OperationalException( + f"Backtest report file {file_path} does not exist" + ) if not file_path.endswith(".json"): raise OperationalException("File is not a json file") diff --git a/investing_algorithm_framework/download_data.py b/investing_algorithm_framework/download_data.py new file mode 100644 index 00000000..24616004 --- /dev/null +++ b/investing_algorithm_framework/download_data.py @@ -0,0 +1,85 @@ +from dateutil import parser +from datetime import datetime +from investing_algorithm_framework.services import DataProviderService, \ + ConfigurationService, MarketCredentialService +from investing_algorithm_framework.infrastructure import \ + get_default_data_providers + + +def download( + symbol: str, + market = None, + date = None, + time_frame: str = None, + data_type: str = "ohlcv", + start_date: str = None, + end_date: str = None, + window_size: int = 200, + pandas: bool = True, + save: bool = True, + storage_path: str = None, +): + """ + Download market data from the specified source. This function + uses the MarketDataSourceService to get the data provider + for the given set of parameters. + + Args: + symbol (str): The symbol to download data for. + market (str): The market to download data from. + data_type (str): The type of data to + download (e.g., "ohlcv", "ticker"). + start_date (str): The start date for the data download. + end_date (str): The end date for the data download. + window_size (int): The size of the data window. + pandas (bool): Whether to return the data as a pandas DataFrame. + save (bool): Whether to save the downloaded data. + storage_path (str): The directory to save the downloaded data. + + Returns:w + None + """ + configuration_service = ConfigurationService() + market_credential_service = MarketCredentialService() + data_provider_service = DataProviderService( + default_data_providers=get_default_data_providers(), + configuration_service=configuration_service, + market_credentials_service=market_credential_service + ) + + if start_date is not None and isinstance(start_date, str): + start_date = parser.parse(start_date) + + if end_date is not None and isinstance(end_date, str): + end_date = parser.parse(end_date) + + if date is not None and isinstance(date, str): + date = parser.parse(date) + + return data_provider_service.get_data( + symbol=symbol, + market=market, + data_type=data_type, + time_frame=time_frame, + date=date, + start_date=start_date, + end_date=end_date, + window_size=window_size, + pandas=pandas, + save=save, + storage_path=storage_path + ) + +if __name__ == "__main__": + # Example usage + data = download( + symbol="DOT/EUR", + market="bitvavo", + data_type="ohlcv", + window_size=200, + pandas=False, + save=False, + storage_path="./data", + time_frame="1d", + ) + print(len(data)) diff --git a/investing_algorithm_framework/infrastructure/__init__.py b/investing_algorithm_framework/infrastructure/__init__.py index 592a60b1..f449d741 100644 --- a/investing_algorithm_framework/infrastructure/__init__.py +++ b/investing_algorithm_framework/infrastructure/__init__.py @@ -13,6 +13,7 @@ SQLOrderMetadataRepository from .services import PerformanceService, CCXTMarketService, \ AzureBlobStorageStateHandler +from .data_providers import CCXTDataProvider, get_default_data_providers __all__ = [ "create_all_tables", @@ -45,5 +46,7 @@ "SQLTradeStopLoss", "SQLTradeTakeProfitRepository", "SQLTradeStopLossRepository", - "SQLOrderMetadataRepository" + "SQLOrderMetadataRepository", + "CCXTDataProvider", + "get_default_data_providers" ] diff --git a/investing_algorithm_framework/infrastructure/data_providers/__init__.py b/investing_algorithm_framework/infrastructure/data_providers/__init__.py new file mode 100644 index 00000000..be4b42d0 --- /dev/null +++ b/investing_algorithm_framework/infrastructure/data_providers/__init__.py @@ -0,0 +1,18 @@ +from .ccxt import CCXTDataProvider + + +def get_default_data_providers(): + """ + Function to get the default data providers. + + Returns: + list: List of default data providers. + """ + return [ + CCXTDataProvider(), + ] + +__all__ = [ + 'CCXTDataProvider', + 'get_default_data_providers', +] diff --git a/investing_algorithm_framework/infrastructure/data_providers/ccxt.py b/investing_algorithm_framework/infrastructure/data_providers/ccxt.py new file mode 100644 index 00000000..f1092cdb --- /dev/null +++ b/investing_algorithm_framework/infrastructure/data_providers/ccxt.py @@ -0,0 +1,312 @@ +from time import sleep +import logging +from datetime import datetime, timedelta, timezone + +import ccxt +import polars as pl +from dateutil import parser + +from investing_algorithm_framework.domain import OperationalException, \ + DATETIME_FORMAT, DataProvider, TradingDataType, convert_polars_to_pandas, \ + NetworkError, TimeFrame + +logger = logging.getLogger("investing_algorithm_framework") + + + +class CCXTDataProvider(DataProvider): + """ + """ + backtest_data_directory = None + backtest_data_end_date = None + total_minutes_time_frame = None + column_names = ["Datetime", "Open", "High", "Low", "Close", "Volume"] + + def __init__( + self, + data_type: str = None, + market=None, + symbol=None, + time_frame=None, + window_size=None, + priority = 1 + ): + super().__init__( + data_type=data_type, + symbol=symbol, + time_frame=time_frame, + window_size=window_size, + priority=priority + ) + + self.market = market + self.data = None + self._start_date_data_source = None + self._end_date_data_source = None + self.backtest_end_index = self.window_size + self.backtest_start_index = 0 + self.window_cache = {} + + def initialize_exchange(self, market, market_credential): + """ + Initializes the exchange for the given market. + + Args: + market (str): The market to initialize the exchange for. + market_credential (MarketCredential): MarketCredential - the market + + Returns: + Instance of the exchange class. + """ + + market = market.lower() + if not hasattr(ccxt, market): + raise OperationalException( + f"No exchange found for market id {market}" + ) + + exchange_class = getattr(ccxt, market) + + if exchange_class is None: + raise OperationalException( + f"No exchange found for market id {market}" + ) + + if market_credential is not None: + exchange = exchange_class({ + 'apiKey': market_credential.api_key, + 'secret': market_credential.secret_key, + }) + else: + exchange = exchange_class({}) + + return exchange + + def pre_pare_backtest_data( + self, + backtest_start_date, + backtest_end_date, + symbol: str = None, + market: str = None, + time_frame: str = None, + window_size=None + ) -> None: + pass + + def get_backtest_data( + self, + date: datetime = None, + symbol: str = None, + market: str = None, + time_frame: str = None, + backtest_start_date: datetime = None, + backtest_end_date: datetime = None, + window_size=None, + pandas=False + ) -> None: + pass + + def has_data( + self, + data_type: str = None, + symbol: str = None, + market: str = None, + time_frame: str = None, + start_date: datetime = None, + end_date: datetime = None, + window_size=None, + ) -> bool: + + if TradingDataType.CUSTOM.equals(data_type): + raise OperationalException( + "Custom data type is not supported for CCXTOHLCVDataProvider" + ) + + if market is None: + market = "binance" + + # Check if ccxt has an exchange for the given market + try: + market = market.lower() + exchange_class = getattr(ccxt, market) + exchange = exchange_class() + symbols = exchange.load_markets() + symbols = list(symbols.keys()) + return symbol in symbols + + except ccxt.NetworkError as e: + raise NetworkError( + "Network error occurred, make sure you have " + "an active internet connection" + ) + except Exception as e: + return False + + def get_data( + self, + data_type: str = None, + date: datetime = None, + symbol: str = None, + market: str = None, + time_frame: str = None, + start_date: datetime = None, + end_date: datetime = None, + storage_path=None, + window_size=None, + pandas=False, + ): + + if market is None: + market = self.market + + if market is None: + raise OperationalException( + "Market is not set. Please set the market before calling get_data." + ) + + if symbol is None: + symbol = self.symbol + + if symbol is None: + raise OperationalException( + "Symbol is not set. Please set the symbol before calling get_data." + ) + + if data_type is None: + data_type = self.data_type + + if TradingDataType.OHLCV.equals(data_type): + + if time_frame is None: + time_frame = self.time_frame + + if time_frame is None: + raise OperationalException( + "Time frame is not set. Please set the time frame " + "before requesting ohlcv data." + ) + + if end_date is None and window_size is None: + raise OperationalException( + "A window size is required or a start and end date " + "to retrieve ohlcv data." + ) + + if end_date is None: + end_date = datetime.now(tz=timezone.utc) + + + if start_date is None: + + if date is not None: + start_date = date + else: + start_date = self.create_start_date( + end_date=end_date, + time_frame=time_frame, + window_size=window_size + ) + + data = self.get_ohlcv( + symbol=symbol, + time_frame=time_frame, + from_timestamp=start_date, + market=market, + to_timestamp=end_date + ) + + if pandas: + data = convert_polars_to_pandas(data) + + return data + + raise OperationalException( + f"Data type {data_type} is not supported for CCXTDataProvider" + ) + + def get_ohlcv( + self, symbol, time_frame, from_timestamp, market, to_timestamp=None + ) -> pl.DataFrame: + """ + Function to retrieve ohlcv data for a symbol, time frame and market + + Args: + symbol (str): The symbol to retrieve ohlcv data for + time_frame: The time frame to retrieve ohlcv data for + from_timestamp: The start date to retrieve ohlcv data from + market: The market to retrieve ohlcv data from + to_timestamp: The end date to retrieve ohlcv data to + + Returns: + DataFrame: The ohlcv data for the symbol, time frame and market + in polars DataFrame format + """ + + market_credential = self.get_credential(market) + exchange = self.initialize_exchange(market, market_credential) + + if from_timestamp > to_timestamp: + raise OperationalException( + "OHLCV data start date must be before end date" + ) + + if self.config is not None and "DATETIME_FORMAT" in self.config: + datetime_format = self.config["DATETIME_FORMAT"] + else: + datetime_format = DATETIME_FORMAT + + if not exchange.has['fetchOHLCV']: + raise OperationalException( + f"Market service {market} does not support " + f"functionality get_ohclvs" + ) + + from_time_stamp = exchange.parse8601( + from_timestamp.strftime(datetime_format) + ) + + if to_timestamp is None: + to_timestamp = exchange.milliseconds() + else: + to_timestamp = exchange.parse8601( + to_timestamp.strftime(datetime_format) + ) + data = [] + + while from_time_stamp < to_timestamp: + ohlcv = exchange.fetch_ohlcv(symbol, time_frame, from_time_stamp) + + if len(ohlcv) > 0: + from_time_stamp = \ + ohlcv[-1][0] + exchange.parse_timeframe(time_frame) * 1000 + else: + from_time_stamp = to_timestamp + + for candle in ohlcv: + datetime_stamp = parser.parse(exchange.iso8601(candle[0])) + + to_timestamp_datetime = parser.parse( + exchange.iso8601(to_timestamp), + ) + + if datetime_stamp <= to_timestamp_datetime: + datetime_stamp = datetime_stamp \ + .strftime(datetime_format) + + data.append( + [datetime_stamp] + + [float(value) for value in candle[1:]] + ) + + sleep(exchange.rateLimit / 1000) + + # Predefined column names + col_names = ["Datetime", "Open", "High", "Low", "Close", "Volume"] + + # Combine the Series into a DataFrame with given column names + df = pl.DataFrame(data, schema=col_names, orient="row") + return df + + def create_start_date(self, end_date, time_frame, window_size): + minutes = TimeFrame.from_value(time_frame).amount_of_minutes + return end_date - timedelta(minutes=window_size * minutes) \ No newline at end of file diff --git a/investing_algorithm_framework/infrastructure/services/market_service/ccxt_market_service.py b/investing_algorithm_framework/infrastructure/services/market_service/ccxt_market_service.py index 989714ad..5ce324f9 100644 --- a/investing_algorithm_framework/infrastructure/services/market_service/ccxt_market_service.py +++ b/investing_algorithm_framework/infrastructure/services/market_service/ccxt_market_service.py @@ -364,7 +364,7 @@ def get_ohlcv( Function to retrieve ohlcv data for a symbol, time frame and market Args: - symbol: The symbol to retrieve ohlcv data for + symbol (str): The symbol to retrieve ohlcv data for time_frame: The time frame to retrieve ohlcv data for from_timestamp: The start date to retrieve ohlcv data from market: The market to retrieve ohlcv data from diff --git a/investing_algorithm_framework/services/__init__.py b/investing_algorithm_framework/services/__init__.py index fd9c838f..3ad70f49 100644 --- a/investing_algorithm_framework/services/__init__.py +++ b/investing_algorithm_framework/services/__init__.py @@ -2,7 +2,7 @@ from .configuration_service import ConfigurationService from .market_credential_service import MarketCredentialService from .market_data_source_service import MarketDataSourceService, \ - BacktestMarketDataSourceService + BacktestMarketDataSourceService, DataProviderService from .order_service import OrderService, OrderBacktestService from .portfolios import PortfolioService, BacktestPortfolioService, \ PortfolioConfigurationService, PortfolioSyncService, \ @@ -31,4 +31,5 @@ "BacktestMarketDataSourceService", "BacktestPortfolioService", "TradeService", + "DataProviderService" ] diff --git a/investing_algorithm_framework/services/market_credential_service.py b/investing_algorithm_framework/services/market_credential_service.py index 014e2be0..2a63331a 100644 --- a/investing_algorithm_framework/services/market_credential_service.py +++ b/investing_algorithm_framework/services/market_credential_service.py @@ -4,7 +4,14 @@ class MarketCredentialService: - _market_credentials = {} + """ + Service to manage market credentials. + + This service is responsible for adding, retrieving, and + initializing market credentials. + """ + def __init__(self): + self._market_credentials = {} def add(self, market_data_credential: MarketCredential): self._market_credentials[market_data_credential.market.upper()] \ diff --git a/investing_algorithm_framework/services/market_data_source_service/__init__.py b/investing_algorithm_framework/services/market_data_source_service/__init__.py index 2cbe4133..d93c469b 100644 --- a/investing_algorithm_framework/services/market_data_source_service/__init__.py +++ b/investing_algorithm_framework/services/market_data_source_service/__init__.py @@ -1,8 +1,10 @@ from .backtest_market_data_source_service import \ BacktestMarketDataSourceService from .market_data_source_service import MarketDataSourceService +from .data_provider_service import DataProviderService __all__ = [ "MarketDataSourceService", - "BacktestMarketDataSourceService" + "BacktestMarketDataSourceService", + "DataProviderService" ] diff --git a/investing_algorithm_framework/services/market_data_source_service/data_provider_service.py b/investing_algorithm_framework/services/market_data_source_service/data_provider_service.py new file mode 100644 index 00000000..74419f0e --- /dev/null +++ b/investing_algorithm_framework/services/market_data_source_service/data_provider_service.py @@ -0,0 +1,200 @@ +import logging +from datetime import datetime +from typing import List, Optional + +from investing_algorithm_framework.domain import DataProvider, \ + OperationalException, NetworkError + +logger = logging.getLogger("investing_algorithm_framework") + + +class DataProviderIndex: + """ + Class to index data providers. Given a list of data providers, each data + provider will be indexed given that it has support for the given query + params + """ + + def __init__(self, data_providers: List[DataProvider] = []): + self.data_providers: List[DataProvider] = data_providers + + def register_data_provider(self, data_provider: DataProvider) -> None: + """ + Register a new data provider. + + Args: + data_provider (DataProvider): The data provider to register. + """ + self.data_providers.append(data_provider) + + def find_data_provider( + self, + symbol: Optional[str] = None, + market: Optional[str] = None, + data_type: Optional[str] = None, + time_frame: Optional[str] = None, + ): + number_of_network_errors = 0 + matching_providers = [] + + try: + for provider in self.data_providers: + if provider.has_data( + symbol=symbol, + market=market, + data_type=data_type, + time_frame=time_frame, + ): + matching_providers.append(provider) + except NetworkError as e: + number_of_network_errors += 1 + except Exception as e: + pass + + if len(matching_providers) == 0 and number_of_network_errors > 0: + raise NetworkError( + "Network error occurred, make sure you have " + "an active internet connection" + ) + + # Sort by priority (lower priority number is better) + matching_providers.sort(key=lambda p: p.priority) + return matching_providers[0] if matching_providers else None + +class DataProviderService: + data_providers: List[DataProvider] = [] + default_data_providers: List[DataProvider] = [ + # Add default data providers here + ] + data_provider_index: DataProviderIndex = None + + def __init__( + self, + configuration_service, + market_credentials_service, + default_data_providers: List[DataProvider] = [] + ): + """ + Initialize the DataProviderService with a list of data providers. + + Args: + default_data_providers (List[DataProvider]): A list of default + data providers to use. + """ + self.default_data_providers = default_data_providers + self.data_provider_index = DataProviderIndex(default_data_providers) + self.configuration_service = configuration_service + self.market_credentials_service = market_credentials_service + + def _initialize_data_providers(self): + """ + Initialize all data providers. + + This function will call the load_markets and load_symbols + methods of all data providers to load the markets and + symbols for each data provider. It will also create a + DataProviderIndex to index the data providers by symbol + and market. + """ + pass + + # if len(self.data_providers) == 0: + # logger.info( + # "No custom data providers found, using default data providers" + # ) + + # for provider in self.default_data_providers: + # provider.load_markets() + # provider.load_symbols() + + # Create all indexes + # self.data_provider_index = DataProviderIndex(self.data_providers) + + def get_data( + self, + symbol: str, + data_type = None, + date: datetime = None, + market: str = None, + time_frame: str = None, + start_date: datetime = None, + end_date: datetime = None, + storage_path = None, + window_size = None, + pandas = False, + save: bool = False, + ): + """ + Function to get data from the data provider. + + Args: + date (datetime): The date to get data for. + symbol (str): The symbol to get data for. + market (str): The market to get data from. + time_frame (str): The time frame to get data for. + start_date (datetime): The start date for the data. + end_date (datetime): The end date for the data. + storage_path (str): The path to store the data. + window_size (int): The size of the data window. + pandas (bool): Whether to return the data as a pandas DataFrame. + + Returns: + DataFrame: The data for the given symbol and market. + """ + + data_provider = self.data_provider_index.find_data_provider( + symbol=symbol + ) + data_provider.config = self.configuration_service.get_config() + + if data_provider is None: + self._throw_no_data_provider_exception( + { + "symbol": symbol, + "market": market, + "data_type": data_type, + "time_frame": time_frame, + } + ) + + return data_provider.get_data( + data_type=data_type, + date=date, + symbol=symbol, + market=market, + time_frame=time_frame, + start_date=start_date, + end_date=end_date, + storage_path=storage_path, + window_size=window_size, + pandas=pandas, + ) + + def _throw_no_data_provider_exception(self, params): + """ + Raise an exception if no data provider is found for the given params + """ + non_null_params = {k: v for k, v in params.items() if v is not None} + if len(non_null_params) == 0: + raise OperationalException( + "No data provider found for the given parameters" + ) + + params = ", ".join( + [f"{k}: {v}" for k, v in non_null_params.items()] + ) + + raise OperationalException( + f"No data provider found for the given parameters: {params}" + ) + + def add_data_provider(self, data_provider: DataProvider, priority: int = 0): + """ + Add a data provider to the service. + + Args: + data_provider (DataProvider): The data provider to add. + priority (int): The priority of the data provider. + """ + self.data_providers.append(data_provider) + self.data_providers.sort(key=lambda x: x.priority, reverse=True) \ No newline at end of file diff --git a/investing_algorithm_framework/services/trade_service/trade_service.py b/investing_algorithm_framework/services/trade_service/trade_service.py index 27688f28..6e2246cf 100644 --- a/investing_algorithm_framework/services/trade_service/trade_service.py +++ b/investing_algorithm_framework/services/trade_service/trade_service.py @@ -807,10 +807,18 @@ def get_triggered_stop_loss_orders(self): order_amount += stop_loss_sell_amount else: stop_loss.sold_amount += available_amount - stop_loss.active = True - stop_loss.sold_amount += stop_loss_sell_amount - available_amount = 0 + + # Deactivate stop loss if the filled amount is equal + # to the amount of the trade, meaning that there is + # nothing left to sell + if trade.filled_amount == trade.amount: + stop_loss.active = False + else: + stop_loss.active = True + order_amount += available_amount + stop_loss_sell_amount = available_amount + available_amount = 0 stop_loss_metadata.append({ "stop_loss_id": stop_loss.id, @@ -910,10 +918,18 @@ def get_triggered_take_profit_orders(self): order_amount += take_profit_sell_amount else: take_profit.sold_amount += available_amount - take_profit.active = True - take_profit.sold_amount += take_profit_sell_amount - available_amount = 0 + + # Deactivate take profit if the filled amount is equal + # to the amount of the trade, meaning that there is + # nothing left to sell + if trade.filled_amount == trade.amount: + take_profit.active = False + else: + take_profit.active = True + order_amount += available_amount + take_profit_sell_amount = available_amount + available_amount = 0 take_profit_metadata.append({ "take_profit_id": take_profit.id, diff --git a/investing_algorithm_framework/test.py b/investing_algorithm_framework/test.py new file mode 100644 index 00000000..d37eb535 --- /dev/null +++ b/investing_algorithm_framework/test.py @@ -0,0 +1,16 @@ +from investing_algorithm_framework import download + + +if __name__ == "__main__": + data = download( + symbol="BTC/USDT", + market="binance", + data_type="ohlcv", + start_date="2023-01-01", + end_date="2023-10-01", + window_size=200, + pandas=True, + save=True, + storage_path="./data" + ) + print(data) diff --git a/poetry.lock b/poetry.lock index a1567f47..927eec6b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1133,7 +1133,6 @@ files = [ [package.dependencies] blinker = ">=1.9" click = ">=8.1.3" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} itsdangerous = ">=2.2" Jinja2 = ">=3.1.2" Werkzeug = ">=3.1" @@ -1472,29 +1471,6 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] -[[package]] -name = "importlib-metadata" -version = "8.6.1" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.9" -files = [ - {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, - {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, -] - -[package.dependencies] -zipp = ">=3.20" - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -perf = ["ipython"] -test = ["flufl.flake8", "importlib_resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] -type = ["pytest-mypy"] - [[package]] name = "ipykernel" version = "6.29.5" @@ -1550,7 +1526,6 @@ prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5" -typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] @@ -1757,7 +1732,6 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" @@ -1850,7 +1824,6 @@ files = [ ] [package.dependencies] -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jupyter-server = ">=1.1.2" [[package]] @@ -1922,7 +1895,6 @@ files = [ [package.dependencies] async-lru = ">=1.0.0" httpx = ">=0.25.0" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} ipykernel = ">=6.5.0" jinja2 = ">=3.0.3" jupyter-core = "*" @@ -1967,7 +1939,6 @@ files = [ [package.dependencies] babel = ">=2.10" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jinja2 = ">=3.0.3" json5 = ">=0.9.0" jsonschema = ">=4.18.0" @@ -2315,7 +2286,6 @@ files = [ beautifulsoup4 = "*" bleach = {version = "!=5.0.0", extras = ["css"]} defusedxml = "*" -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" @@ -3104,9 +3074,6 @@ files = [ {file = "python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84"}, ] -[package.dependencies] -typing_extensions = {version = "*", markers = "python_version < \"3.10\""} - [package.extras] dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec", "mypy", "orjson", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] @@ -4175,26 +4142,7 @@ idna = ">=2.0" multidict = ">=4.0" propcache = ">=0.2.0" -[[package]] -name = "zipp" -version = "3.21.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.9" -files = [ - {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, - {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] -type = ["pytest-mypy"] - [metadata] lock-version = "2.0" -python-versions = ">=3.9" -content-hash = "5c5e39354b0eaf4eb06a27adf1067896418239943e15288b97002a6b913b2555" +python-versions = ">=3.10" +content-hash = "e38fb639b36e8633765caf21b5fba93ccc97d36c50c392caef8b18b5e08e333b" diff --git a/pyproject.toml b/pyproject.toml index 049bff5e..5703678f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ exclude = ["tests", "static", "examples", "docs"] [tool.poetry.dependencies] python = ">=3.10" wrapt = ">=1.16.0" -Flask = ">=2.3.2" +Flask = "^3.1.0" Flask-Migrate = ">=2.6.0" Flask-Cors = ">=3.0.9,<5.0.0" SQLAlchemy = ">=2.0.18" diff --git a/tests/app/test_add_market.py b/tests/app/test_add_market.py new file mode 100644 index 00000000..616d62ed --- /dev/null +++ b/tests/app/test_add_market.py @@ -0,0 +1,75 @@ +import os +from unittest import TestCase + +from investing_algorithm_framework import create_app, RESOURCE_DIRECTORY + + +class Test(TestCase): + + def setUp(self) -> None: + self.resource_dir = os.path.abspath( + os.path.join( + os.path.join( + os.path.join( + os.path.realpath(__file__), + os.pardir + ), + os.pardir + ), + "resources" + ) + ) + + def test_add(self): + app = create_app(config={RESOURCE_DIRECTORY: self.resource_dir}) + app.add_market( + market="binance", trading_symbol="EUR", + ) + + # Check that a binance portfolio configuration was created + portfolio_configurations = app.get_portfolio_configurations() + self.assertEqual(len(portfolio_configurations), 1) + self.assertEqual( + portfolio_configurations[0].market, "BINANCE" + ) + self.assertEqual( + portfolio_configurations[0].trading_symbol, "EUR" + ) + self.assertIsNone( + portfolio_configurations[0].initial_balance + ) + + # Check that a binance market credential was created + market_credentials = app.get_market_credentials() + self.assertEqual(len(market_credentials), 1) + + def test_add_with_api_key(self): + app = create_app(config={RESOURCE_DIRECTORY: self.resource_dir}) + app.add_market( + market="binance", + trading_symbol="EUR", + api_key="api_key", + secret_key="secret_key" + ) + + potfolio_configurations = app.get_portfolio_configurations()[0] + self.assertEqual( + potfolio_configurations.market, "BINANCE" + ) + self.assertEqual( + potfolio_configurations.trading_symbol, "EUR" + ) + self.assertIsNone( + potfolio_configurations.initial_balance + ) + + market_credential = app.get_market_credentials()[0] + self.assertEqual( + market_credential.market, "BINANCE" + ) + self.assertEqual( + market_credential.api_key, "api_key" + ) + self.assertEqual( + market_credential.secret_key, "secret_key" + ) diff --git a/tests/domain/backtesting/test_pretty_print_backtest_orders.py b/tests/domain/backtesting/test_pretty_print_backtest_orders.py new file mode 100644 index 00000000..44244b0f --- /dev/null +++ b/tests/domain/backtesting/test_pretty_print_backtest_orders.py @@ -0,0 +1,33 @@ +import os +from unittest import TestCase + +from investing_algorithm_framework.domain import pretty_print_orders, \ + load_backtest_report + + +class Test(TestCase): + + def setUp(self): + self.resource_dir = os.path.abspath( + os.path.join( + os.path.join( + os.path.join( + os.path.join( + os.path.realpath(__file__), + os.pardir + ), + os.pardir + ), + os.pardir + ), + "resources" + ) + ) + + def test_pretty_print(self): + path = os.path.join( + self.resource_dir, + "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21" + ) + report = load_backtest_report(path) + pretty_print_orders(report) diff --git a/tests/domain/backtesting/test_pretty_print_backtest_positions.py b/tests/domain/backtesting/test_pretty_print_backtest_positions.py new file mode 100644 index 00000000..b7d56de5 --- /dev/null +++ b/tests/domain/backtesting/test_pretty_print_backtest_positions.py @@ -0,0 +1,65 @@ +import os +from unittest import TestCase + +from investing_algorithm_framework.domain import pretty_print_positions, \ + load_backtest_report + + +class Test(TestCase): + + def setUp(self): + self.resource_dir = os.path.abspath( + os.path.join( + os.path.join( + os.path.join( + os.path.join( + os.path.realpath(__file__), + os.pardir + ), + os.pardir + ), + os.pardir + ), + "resources" + ) + ) + + def test_pretty_print(self): + path = os.path.join( + self.resource_dir, + "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21" + ) + report = load_backtest_report(path) + import os +from unittest import TestCase + +from investing_algorithm_framework.domain import pretty_print_positions, \ + load_backtest_report + + +class Test(TestCase): + + def setUp(self): + self.resource_dir = os.path.abspath( + os.path.join( + os.path.join( + os.path.join( + os.path.join( + os.path.realpath(__file__), + os.pardir + ), + os.pardir + ), + os.pardir + ), + "resources" + ) + ) + + def test_pretty_print(self): + path = os.path.join( + self.resource_dir, + "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21" + ) + report = load_backtest_report(path) + pretty_print_positions(report) diff --git a/tests/domain/backtesting/test_pretty_print_backtest_trades.py b/tests/domain/backtesting/test_pretty_print_backtest_trades.py new file mode 100644 index 00000000..5ec489b6 --- /dev/null +++ b/tests/domain/backtesting/test_pretty_print_backtest_trades.py @@ -0,0 +1,33 @@ +import os +from unittest import TestCase + +from investing_algorithm_framework.domain import pretty_print_trades, \ + load_backtest_report + + +class Test(TestCase): + + def setUp(self): + self.resource_dir = os.path.abspath( + os.path.join( + os.path.join( + os.path.join( + os.path.join( + os.path.realpath(__file__), + os.pardir + ), + os.pardir + ), + os.pardir + ), + "resources" + ) + ) + + def test_pretty_print(self): + path = os.path.join( + self.resource_dir, + "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21" + ) + report = load_backtest_report(path) + pretty_print_trades(report) diff --git a/tests/domain/models/test_backtest_report.py b/tests/domain/models/test_backtest_report.py index ac380ecb..7d52f377 100644 --- a/tests/domain/models/test_backtest_report.py +++ b/tests/domain/models/test_backtest_report.py @@ -51,3 +51,113 @@ def test_backtest_reports_evaluation(self): self.assertEqual(42, report.number_of_orders) self.assertEqual(2173, report.number_of_runs) self.assertEqual("EUR", report.trading_symbol) + + def test_get_orders(self): + path = os.path.join( + self.resource_dir, + "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21" + ) + report = load_backtest_report(path) + self.assertEqual( + len(report.get_orders()), + 305 + ) + self.assertEqual( + len(report.get_orders(order_status="OPEN")), + 0 + ) + self.assertEqual( + len(report.get_orders(order_status="CLOSED")), + 305 + ) + self.assertEqual( + len(report.get_orders(target_symbol="BTC")), + 55 + ) + self.assertEqual( + len(report.get_orders(target_symbol="SOL")), + 97 + ) + self.assertEqual( + len(report.get_orders(target_symbol="ETH")), + 55 + ) + self.assertEqual( + len(report.get_orders(target_symbol="DOT")), + 98 + ) + self.assertEqual( + len(report.get_orders(order_status="CLOSED", target_symbol="BTC")), + 55 + ) + + def test_get_trades(self): + path = os.path.join( + self.resource_dir, + "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21" + ) + report = load_backtest_report(path) + + self.assertEqual( + len(report.get_trades(trade_status="OPEN")), + 4 + ) + self.assertEqual( + len(report.get_trades(trade_status="CLOSED")), + 114 + ) + self.assertEqual( + len(report.get_trades(target_symbol="BTC")), + 23 + ) + self.assertEqual( + len(report.get_trades(target_symbol="SOL")), + 37 + ) + self.assertEqual( + len(report.get_trades(target_symbol="ETH")), + 19 + ) + self.assertEqual( + len(report.get_trades(target_symbol="DOT")), + 39 + ) + + def test_get_symbols(self): + path = os.path.join( + self.resource_dir, + "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21" + ) + report = load_backtest_report(path) + + self.assertEqual( + report.get_symbols(), + {'SOL', 'ETH', 'DOT', 'BTC'} + ) + + def test_get_positions(self): + path = os.path.join( + self.resource_dir, + "backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21" + ) + report = load_backtest_report(path) + + self.assertEqual( + len(report.get_positions()), 5 + ) + self.assertEqual( + len(report.get_positions(symbol="BTC")), + 1 + ) + self.assertEqual( + len(report.get_positions(symbol="SOL")), + 1 + ) + self.assertEqual( + len(report.get_positions(symbol="ETH")), + 1 + ) + self.assertEqual( + len(report.get_positions(symbol="DOT")), + 1 + ) diff --git a/tests/resources/backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21/report.json b/tests/resources/backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21/report.json new file mode 100644 index 00000000..fa9f42d4 --- /dev/null +++ b/tests/resources/backtest_reports_for_testing/test_algorithm_backtest_created-at_2025-04-21-21-21/report.json @@ -0,0 +1,18158 @@ +{ + "name": "test_algorithm", + "context": {}, + "strategy_identifiers": [ + "Strategy" + ], + "backtest_date_range_identifier": null, + "backtest_start_date": "2023-01-01 00:00:00", + "backtest_end_date": "2024-12-31 00:00:00", + "number_of_runs": 8761, + "symbols": [], + "market": null, + "number_of_days": 730, + "number_of_orders": 305, + "number_of_positions": 5, + "market_data_file": null, + "percentage_positive_trades": 42.98245614035088, + "percentage_negative_trades": 57.01754385964912, + "number_of_trades_closed": 8, + "number_of_trades_open": 8, + "total_cost": 23600.0, + "growth_rate": 181.6631356101855, + "growth": 1816.631356101855, + "initial_unallocated": 1000.0, + "trading_symbol": "EUR", + "total_net_gain_percentage": 51.82856316299769, + "total_net_gain": 518.2856316299768, + "total_value": 2816.631356101855, + "average_trade_duration": 402.0701754385965, + "average_trade_size": 200.0, + "positions": [ + { + "symbol": "EUR", + "amount": 2174.8884004533033, + "cost": 2174.8884004533033, + "price": 1, + "value": 2174.8884004533033, + "growth": 0.0, + "growth_rate": 0.0, + "amount_pending_buy": 0.0, + "amount_pending_sell": 0.0, + "percentage_of_portfolio": 77.21594079898665 + }, + { + "symbol": "SOL", + "amount": 0.8066467693796886, + "cost": 100.00000000000011, + "price": 181.54, + "value": 146.43865451318865, + "growth": 46.43865451318854, + "growth_rate": 46.43865451318849, + "amount_pending_buy": 0, + "amount_pending_sell": 0, + "percentage_of_portfolio": 5.199070662759928 + }, + { + "symbol": "ETH", + "amount": 0.033535665179918836, + "cost": 100.00000000000009, + "price": 3202.7, + "value": 107.40467487172604, + "growth": 7.404674871725959, + "growth_rate": 7.404674871725953, + "amount_pending_buy": 0, + "amount_pending_sell": 0, + "percentage_of_portfolio": 3.8132315270526322 + }, + { + "symbol": "DOT", + "amount": 30.593202190473278, + "cost": 200.0000000000001, + "price": 6.3644, + "value": 194.70737602104813, + "growth": -5.29262397895198, + "growth_rate": -2.6463119894759886, + "amount_pending_buy": 0, + "amount_pending_sell": 0, + "percentage_of_portfolio": 6.912774566655329 + }, + { + "symbol": "BTC", + "amount": 0.0021805732727133965, + "cost": 200.0, + "price": 88597.0, + "value": 193.19225024258878, + "growth": -6.807749757411216, + "growth_rate": -3.403874878705608, + "amount_pending_buy": 0, + "amount_pending_sell": 0, + "percentage_of_portfolio": 6.858982444545454 + } + ], + "trades": [ + { + "id": 1, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20.093, + "amount": 9.953715224207436, + "created_at": "2023-01-18 14:00:00", + "updated_at": "2023-01-18 16:00:00", + "cost": 0.0, + "filled": 9.953715224207436, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 22.909, + "amount": 2.488428806051859, + "created_at": "2023-01-21 00:00:00", + "updated_at": "2023-01-21 02:00:00", + "cost": 0.0, + "filled": 2.488428806051859, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 22.041, + "amount": 2.488428806051859, + "created_at": "2023-01-24 20:00:00", + "updated_at": "2023-01-24 22:00:00", + "cost": 0.0, + "filled": 2.488428806051859, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.925, + "amount": 0.0, + "created_at": "2023-02-10 20:00:00", + "updated_at": "2023-02-10 22:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.878, + "amount": -4.976857612103718, + "created_at": "2023-02-10 22:00:00", + "updated_at": "2023-02-11 00:00:00", + "cost": 0.0, + "filled": -4.976857612103718, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 21.225, + "amount": 9.953715224207436, + "created_at": "2023-03-01 06:00:00", + "updated_at": "2023-03-01 08:00:00", + "cost": 0.0, + "filled": 9.953715224207436, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 9.953715224207436, + "remaining": 0.0, + "open_price": 20.093, + "last_reported_price": 21.225, + "opened_at": "2023-01-18 14:00:00", + "closed_at": "2023-03-01 06:00:00", + "updated_at": "2023-03-01 06:00:00", + "net_gain": 29.169362464539915, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 1, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 20.093, + "sell_percentage": 100.0, + "high_water_mark": 24.277, + "stop_loss_price": 19.08835, + "sell_amount": 9.953715224207436, + "sold_amount": 9.953715224207436, + "active": false, + "sell_prices": "18.925,18.878" + } + ], + "take_profits": [ + { + "trade_id": 1, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 20.093, + "sell_percentage": 25.0, + "high_water_mark": 23.63, + "take_profit_price": 22.102300000000003, + "sell_amount": 2.488428806051859, + "sold_amount": 2.488428806051859, + "active": false, + "sell_prices": "22.041" + }, + { + "trade_id": 1, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 20.093, + "sell_percentage": 25.0, + "high_water_mark": 23.438, + "take_profit_price": 23.106949999999998, + "sell_amount": 2.488428806051859, + "sold_amount": 2.488428806051859, + "active": false, + "sell_prices": "22.909" + } + ] + }, + { + "id": 2, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1400.1, + "amount": 0.14284693950432112, + "created_at": "2023-01-18 22:00:00", + "updated_at": "2023-01-19 00:00:00", + "cost": 0.0, + "filled": 0.14284693950432112, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1519.8, + "amount": 0.14284693950432112, + "created_at": "2023-02-02 00:00:00", + "updated_at": "2023-02-02 02:00:00", + "cost": 0.0, + "filled": 0.14284693950432112, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.14284693950432112, + "remaining": 0.0, + "open_price": 1400.1, + "last_reported_price": 1519.8, + "opened_at": "2023-01-18 22:00:00", + "closed_at": "2023-02-02 00:00:00", + "updated_at": "2023-02-02 00:00:00", + "net_gain": 17.09877865866727, + "cost": 199.99999999999997, + "stop_losses": [ + { + "trade_id": 2, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1400.1, + "sell_percentage": 100.0, + "high_water_mark": 1533.1, + "stop_loss_price": 1330.0949999999998, + "sell_amount": 0.14284693950432112, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 2, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1400.1, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1540.1100000000001, + "sell_amount": 0.03571173487608028, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 2, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1400.1, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1610.1149999999998, + "sell_amount": 0.03571173487608028, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 3, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.2382, + "amount": 38.18105456072697, + "created_at": "2023-01-18 22:00:00", + "updated_at": "2023-01-19 00:00:00", + "cost": 0.0, + "filled": 38.18105456072697, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.7342, + "amount": 9.545263640181743, + "created_at": "2023-01-21 00:00:00", + "updated_at": "2023-01-21 02:00:00", + "cost": 0.0, + "filled": 9.545263640181743, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.9936, + "amount": 9.545263640181743, + "created_at": "2023-01-24 10:00:00", + "updated_at": "2023-01-24 12:00:00", + "cost": 0.0, + "filled": 9.545263640181743, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.8053, + "amount": 19.09052728036348, + "created_at": "2023-02-23 00:00:00", + "updated_at": "2023-02-23 02:00:00", + "cost": 0.0, + "filled": 19.09052728036348, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 38.18105456072697, + "remaining": 0.0, + "open_price": 5.2382, + "last_reported_price": 6.8053, + "opened_at": "2023-01-18 22:00:00", + "closed_at": "2023-02-23 00:00:00", + "updated_at": "2023-02-23 00:00:00", + "net_gain": 41.861708220381054, + "cost": 200.00000000000003, + "stop_losses": [ + { + "trade_id": 3, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 5.2382, + "sell_percentage": 100.0, + "high_water_mark": 7.2108, + "stop_loss_price": 4.97629, + "sell_amount": 38.18105456072697, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 3, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 5.2382, + "sell_percentage": 25.0, + "high_water_mark": 5.7636, + "take_profit_price": 5.762020000000001, + "sell_amount": 9.545263640181743, + "sold_amount": 9.545263640181743, + "active": false, + "sell_prices": "5.7342" + }, + { + "trade_id": 3, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 5.2382, + "sell_percentage": 25.0, + "high_water_mark": 6.1556, + "take_profit_price": 6.023929999999999, + "sell_amount": 9.545263640181743, + "sold_amount": 9.545263640181743, + "active": false, + "sell_prices": "5.9936" + } + ] + }, + { + "id": 4, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20665.0, + "amount": 0.009678199854827003, + "created_at": "2023-01-25 00:00:00", + "updated_at": "2023-01-25 02:00:00", + "cost": 0.0, + "filled": 0.009678199854827003, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 22724.0, + "amount": 0.0024195499637067507, + "created_at": "2023-02-19 00:00:00", + "updated_at": "2023-02-19 02:00:00", + "cost": 0.0, + "filled": 0.0024195499637067507, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19257.0, + "amount": 0.0, + "created_at": "2023-03-09 00:00:00", + "updated_at": "2023-03-09 02:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19257.0, + "amount": -0.007258649891120253, + "created_at": "2023-03-09 02:00:00", + "updated_at": "2023-03-10 00:00:00", + "cost": 0.0, + "filled": -0.007258649891120253, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 25263.0, + "amount": 0.014517299782240506, + "created_at": "2023-05-17 18:00:00", + "updated_at": "2023-05-18 00:00:00", + "cost": 0.0, + "filled": 0.014517299782240506, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.009678199854827003, + "remaining": 0.0, + "open_price": 20665.0, + "last_reported_price": 25260.0, + "opened_at": "2023-01-25 00:00:00", + "closed_at": "2023-05-17 18:00:00", + "updated_at": "2023-05-17 18:00:00", + "net_gain": 81.95257682071139, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 4, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 20665.0, + "sell_percentage": 100.0, + "high_water_mark": 23250.0, + "stop_loss_price": 19631.75, + "sell_amount": 0.009678199854827003, + "sold_amount": 0.009678199854827003, + "active": false, + "sell_prices": "19257.0,19257.0" + } + ], + "take_profits": [ + { + "trade_id": 4, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 20665.0, + "sell_percentage": 25.0, + "high_water_mark": 23029.0, + "take_profit_price": 22731.500000000004, + "sell_amount": 0.0024195499637067507, + "sold_amount": 0.0024195499637067507, + "active": false, + "sell_prices": "22724.0" + }, + { + "trade_id": 4, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 20665.0, + "sell_percentage": 25.0, + "high_water_mark": 27706.0, + "take_profit_price": 23764.749999999996, + "sell_amount": 0.0024195499637067507, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 5, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1508.4, + "amount": 0.13259082471492972, + "created_at": "2023-02-09 02:00:00", + "updated_at": "2023-02-09 04:00:00", + "cost": 0.0, + "filled": 0.13259082471492972, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1427.0, + "amount": 0.13259082471492972, + "created_at": "2023-02-10 14:00:00", + "updated_at": "2023-02-10 16:00:00", + "cost": 0.0, + "filled": 0.13259082471492972, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.13259082471492972, + "remaining": 0.0, + "open_price": 1508.4, + "last_reported_price": 1427.0, + "opened_at": "2023-02-09 02:00:00", + "closed_at": "2023-02-10 14:00:00", + "updated_at": "2023-02-10 14:00:00", + "net_gain": -10.792893131795296, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 5, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1508.4, + "sell_percentage": 100.0, + "high_water_mark": 1520.9, + "stop_loss_price": 1432.98, + "sell_amount": 0.13259082471492972, + "sold_amount": 0.13259082471492972, + "active": false, + "sell_prices": "1427.0" + } + ], + "take_profits": [ + { + "trade_id": 5, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1508.4, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1659.2400000000002, + "sell_amount": 0.03314770617873243, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 5, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1508.4, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1734.66, + "sell_amount": 0.03314770617873243, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 6, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1431.0, + "amount": 0.13976240391334732, + "created_at": "2023-02-10 16:00:00", + "updated_at": "2023-02-10 18:00:00", + "cost": 0.0, + "filled": 0.13976240391334732, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1570.1, + "amount": 0.03494060097833683, + "created_at": "2023-02-16 06:00:00", + "updated_at": "2023-02-16 08:00:00", + "cost": 0.0, + "filled": 0.03494060097833683, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1353.8, + "amount": 0.0, + "created_at": "2023-03-09 20:00:00", + "updated_at": "2023-03-09 22:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1351.4, + "amount": -0.10482180293501048, + "created_at": "2023-03-10 00:00:00", + "updated_at": "2023-03-10 02:00:00", + "cost": 0.0, + "filled": -0.10482180293501048, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1632.1, + "amount": 0.03494060097833683, + "created_at": "2023-03-14 16:00:00", + "updated_at": "2023-03-14 18:00:00", + "cost": 0.0, + "filled": 0.03494060097833683, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1678.9, + "amount": 0.1747030048916841, + "created_at": "2023-05-22 08:00:00", + "updated_at": "2023-05-22 10:00:00", + "cost": 0.0, + "filled": 0.1747030048916841, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.13976240391334732, + "remaining": 0.0, + "open_price": 1431.0, + "last_reported_price": 1678.9, + "opened_at": "2023-02-10 16:00:00", + "closed_at": "2023-05-22 08:00:00", + "updated_at": "2023-05-22 08:00:00", + "net_gain": 63.53948287910552, + "cost": 200.00000000000003, + "stop_losses": [ + { + "trade_id": 6, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1431.0, + "sell_percentage": 100.0, + "high_water_mark": 1613.7, + "stop_loss_price": 1359.45, + "sell_amount": 0.13976240391334732, + "sold_amount": 0.13976240391334732, + "active": false, + "sell_prices": "1353.8,1351.4" + } + ], + "take_profits": [ + { + "trade_id": 6, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1431.0, + "sell_percentage": 25.0, + "high_water_mark": 1581.0, + "take_profit_price": 1574.1000000000001, + "sell_amount": 0.03494060097833683, + "sold_amount": 0.03494060097833683, + "active": false, + "sell_prices": "1570.1" + }, + { + "trade_id": 6, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1431.0, + "sell_percentage": 25.0, + "high_water_mark": 1650.3, + "take_profit_price": 1645.6499999999999, + "sell_amount": 0.03494060097833683, + "sold_amount": 0.03494060097833683, + "active": false, + "sell_prices": "1632.1" + } + ] + }, + { + "id": 7, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.659, + "amount": 30.034539720678783, + "created_at": "2023-02-24 06:00:00", + "updated_at": "2023-02-24 08:00:00", + "cost": 0.0, + "filled": 30.034539720678783, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.2828, + "amount": 30.034539720678783, + "created_at": "2023-02-24 16:00:00", + "updated_at": "2023-02-24 18:00:00", + "cost": 0.0, + "filled": 30.034539720678783, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 30.034539720678783, + "remaining": 0.0, + "open_price": 6.659, + "last_reported_price": 6.2828, + "opened_at": "2023-02-24 06:00:00", + "closed_at": "2023-02-24 16:00:00", + "updated_at": "2023-02-24 16:00:00", + "net_gain": -11.298993842919344, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 7, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.659, + "sell_percentage": 100.0, + "high_water_mark": 6.659, + "stop_loss_price": 6.3260499999999995, + "sell_amount": 30.034539720678783, + "sold_amount": 30.034539720678783, + "active": false, + "sell_prices": "6.2828" + } + ], + "take_profits": [ + { + "trade_id": 7, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.659, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.3249, + "sell_amount": 7.508634930169696, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 7, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.659, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.657849999999999, + "sell_amount": 7.508634930169696, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 8, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.2952, + "amount": 31.770237641377555, + "created_at": "2023-02-24 18:00:00", + "updated_at": "2023-02-24 20:00:00", + "cost": 0.0, + "filled": 31.770237641377555, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.9771, + "amount": 31.770237641377555, + "created_at": "2023-02-28 20:00:00", + "updated_at": "2023-02-28 22:00:00", + "cost": 0.0, + "filled": 31.770237641377555, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 31.770237641377555, + "remaining": 0.0, + "open_price": 6.2952, + "last_reported_price": 5.9771, + "opened_at": "2023-02-24 18:00:00", + "closed_at": "2023-02-28 20:00:00", + "updated_at": "2023-02-28 20:00:00", + "net_gain": -10.106112593722202, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 8, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.2952, + "sell_percentage": 100.0, + "high_water_mark": 6.3697, + "stop_loss_price": 5.98044, + "sell_amount": 31.770237641377555, + "sold_amount": 31.770237641377555, + "active": false, + "sell_prices": "5.9771" + } + ], + "take_profits": [ + { + "trade_id": 8, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.2952, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.924720000000001, + "sell_amount": 7.942559410344389, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 8, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.2952, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.2394799999999995, + "sell_amount": 7.942559410344389, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 9, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.9328, + "amount": 33.7108953613808, + "created_at": "2023-03-02 12:00:00", + "updated_at": "2023-03-02 14:00:00", + "cost": 0.0, + "filled": 33.7108953613808, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.4991, + "amount": 33.7108953613808, + "created_at": "2023-03-03 00:00:00", + "updated_at": "2023-03-03 02:00:00", + "cost": 0.0, + "filled": 33.7108953613808, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 33.7108953613808, + "remaining": 0.0, + "open_price": 5.9328, + "last_reported_price": 5.4991, + "opened_at": "2023-03-02 12:00:00", + "closed_at": "2023-03-03 00:00:00", + "updated_at": "2023-03-03 00:00:00", + "net_gain": -14.620415318230869, + "cost": 200.00000000000003, + "stop_losses": [ + { + "trade_id": 9, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 5.9328, + "sell_percentage": 100.0, + "high_water_mark": 5.9747, + "stop_loss_price": 5.63616, + "sell_amount": 33.7108953613808, + "sold_amount": 33.7108953613808, + "active": false, + "sell_prices": "5.4991" + } + ], + "take_profits": [ + { + "trade_id": 9, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 5.9328, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.526080000000001, + "sell_amount": 8.4277238403452, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 9, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 5.9328, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.8227199999999995, + "sell_amount": 8.4277238403452, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 10, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.6899, + "amount": 35.1500026362502, + "created_at": "2023-03-03 02:00:00", + "updated_at": "2023-03-03 04:00:00", + "cost": 0.0, + "filled": 35.1500026362502, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.373, + "amount": 35.1500026362502, + "created_at": "2023-03-08 04:00:00", + "updated_at": "2023-03-08 06:00:00", + "cost": 0.0, + "filled": 35.1500026362502, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 35.1500026362502, + "remaining": 0.0, + "open_price": 5.6899, + "last_reported_price": 5.373, + "opened_at": "2023-03-03 02:00:00", + "closed_at": "2023-03-08 04:00:00", + "updated_at": "2023-03-08 04:00:00", + "net_gain": -11.139035835427677, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 10, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 5.6899, + "sell_percentage": 100.0, + "high_water_mark": 5.7238, + "stop_loss_price": 5.405404999999999, + "sell_amount": 35.1500026362502, + "sold_amount": 35.1500026362502, + "active": false, + "sell_prices": "5.373" + } + ], + "take_profits": [ + { + "trade_id": 10, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 5.6899, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.25889, + "sell_amount": 8.78750065906255, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 10, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 5.6899, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.543384999999999, + "sell_amount": 8.78750065906255, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 11, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.949, + "amount": 40.4122044857547, + "created_at": "2023-03-10 08:00:00", + "updated_at": "2023-03-10 10:00:00", + "cost": 0.0, + "filled": 40.4122044857547, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.368, + "amount": 10.103051121438675, + "created_at": "2023-03-13 08:00:00", + "updated_at": "2023-03-13 10:00:00", + "cost": 0.0, + "filled": 10.103051121438675, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.672, + "amount": 10.103051121438675, + "created_at": "2023-03-15 14:00:00", + "updated_at": "2023-03-15 16:00:00", + "cost": 0.0, + "filled": 10.103051121438675, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.9208, + "amount": 20.20610224287735, + "created_at": "2023-05-17 02:00:00", + "updated_at": "2023-05-17 04:00:00", + "cost": 0.0, + "filled": 20.20610224287735, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 40.4122044857547, + "remaining": 0.0, + "open_price": 4.949, + "last_reported_price": 4.9208, + "opened_at": "2023-03-10 08:00:00", + "closed_at": "2023-05-17 02:00:00", + "updated_at": "2023-05-17 02:00:00", + "net_gain": 10.967872297433829, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 11, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 4.949, + "sell_percentage": 100.0, + "high_water_mark": 6.3395, + "stop_loss_price": 4.701549999999999, + "sell_amount": 40.4122044857547, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 11, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 4.949, + "sell_percentage": 25.0, + "high_water_mark": 5.5707, + "take_profit_price": 5.4439, + "sell_amount": 10.103051121438675, + "sold_amount": 10.103051121438675, + "active": false, + "sell_prices": "5.368" + }, + { + "trade_id": 11, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 4.949, + "sell_percentage": 25.0, + "high_water_mark": 6.0689, + "take_profit_price": 5.691349999999999, + "sell_amount": 10.103051121438675, + "sold_amount": 10.103051121438675, + "active": false, + "sell_prices": "5.672" + } + ] + }, + { + "id": 12, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.062, + "amount": 11.07297087808659, + "created_at": "2023-03-15 16:00:00", + "updated_at": "2023-03-15 18:00:00", + "cost": 0.0, + "filled": 11.07297087808659, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20.505, + "amount": 2.7682427195216475, + "created_at": "2023-03-18 14:00:00", + "updated_at": "2023-03-18 16:00:00", + "cost": 0.0, + "filled": 2.7682427195216475, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.438, + "amount": 2.7682427195216475, + "created_at": "2023-03-22 18:00:00", + "updated_at": "2023-03-22 20:00:00", + "cost": 0.0, + "filled": 2.7682427195216475, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.38, + "amount": 5.536485439043294, + "created_at": "2023-03-31 18:00:00", + "updated_at": "2023-03-31 20:00:00", + "cost": 0.0, + "filled": 5.536485439043294, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 11.07297087808659, + "remaining": 0.0, + "open_price": 18.062, + "last_reported_price": 19.38, + "opened_at": "2023-03-15 16:00:00", + "closed_at": "2023-03-31 18:00:00", + "updated_at": "2023-03-31 18:00:00", + "net_gain": 17.869006754512206, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 12, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 18.062, + "sell_percentage": 100.0, + "high_water_mark": 21.866, + "stop_loss_price": 17.1589, + "sell_amount": 11.07297087808659, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 12, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 18.062, + "sell_percentage": 25.0, + "high_water_mark": 21.866, + "take_profit_price": 19.8682, + "sell_amount": 2.7682427195216475, + "sold_amount": 2.7682427195216475, + "active": false, + "sell_prices": "19.438" + }, + { + "trade_id": 12, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 18.062, + "sell_percentage": 25.0, + "high_water_mark": 21.227, + "take_profit_price": 20.7713, + "sell_amount": 2.7682427195216475, + "sold_amount": 2.7682427195216475, + "active": false, + "sell_prices": "20.505" + } + ] + }, + { + "id": 13, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20.701, + "amount": 9.661369015989566, + "created_at": "2023-04-20 08:00:00", + "updated_at": "2023-04-20 10:00:00", + "cost": 0.0, + "filled": 9.661369015989566, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.327, + "amount": 9.661369015989566, + "created_at": "2023-04-21 18:00:00", + "updated_at": "2023-04-21 20:00:00", + "cost": 0.0, + "filled": 9.661369015989566, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 9.661369015989566, + "remaining": 0.0, + "open_price": 20.701, + "last_reported_price": 19.327, + "opened_at": "2023-04-20 08:00:00", + "closed_at": "2023-04-21 18:00:00", + "updated_at": "2023-04-21 18:00:00", + "net_gain": -13.274721027969633, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 13, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 20.701, + "sell_percentage": 100.0, + "high_water_mark": 20.899, + "stop_loss_price": 19.66595, + "sell_amount": 9.661369015989566, + "sold_amount": 9.661369015989566, + "active": false, + "sell_prices": "19.327" + } + ], + "take_profits": [ + { + "trade_id": 13, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 20.701, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 22.771100000000004, + "sell_amount": 2.4153422539973914, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 13, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 20.701, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 23.80615, + "sell_amount": 2.4153422539973914, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 14, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.382, + "amount": 10.318852543597151, + "created_at": "2023-04-22 00:00:00", + "updated_at": "2023-04-22 02:00:00", + "cost": 0.0, + "filled": 10.318852543597151, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.992, + "amount": 10.318852543597151, + "created_at": "2023-04-25 22:00:00", + "updated_at": "2023-04-26 00:00:00", + "cost": 0.0, + "filled": 10.318852543597151, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 10.318852543597151, + "remaining": 0.0, + "open_price": 19.382, + "last_reported_price": 19.992, + "opened_at": "2023-04-22 00:00:00", + "closed_at": "2023-04-25 22:00:00", + "updated_at": "2023-04-25 22:00:00", + "net_gain": 6.294500051594241, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 14, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 19.382, + "sell_percentage": 100.0, + "high_water_mark": 20.193, + "stop_loss_price": 18.4129, + "sell_amount": 10.318852543597151, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 14, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 19.382, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 21.320200000000003, + "sell_amount": 2.5797131358992877, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 14, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 19.382, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 22.2893, + "sell_amount": 2.5797131358992877, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 15, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20.202, + "amount": 9.900009900009898, + "created_at": "2023-05-01 10:00:00", + "updated_at": "2023-05-01 12:00:00", + "cost": 0.0, + "filled": 9.900009900009898, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20.186, + "amount": 9.900009900009898, + "created_at": "2023-05-04 00:00:00", + "updated_at": "2023-05-04 02:00:00", + "cost": 0.0, + "filled": 9.900009900009898, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 9.900009900009898, + "remaining": 0.0, + "open_price": 20.202, + "last_reported_price": 20.186, + "opened_at": "2023-05-01 10:00:00", + "closed_at": "2023-05-04 00:00:00", + "updated_at": "2023-05-04 00:00:00", + "net_gain": -0.15840015840015553, + "cost": 199.99999999999997, + "stop_losses": [ + { + "trade_id": 15, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 20.202, + "sell_percentage": 100.0, + "high_water_mark": 20.297, + "stop_loss_price": 19.1919, + "sell_amount": 9.900009900009898, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 15, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 20.202, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 22.222200000000004, + "sell_amount": 2.4750024750024746, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 15, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 20.202, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 23.2323, + "sell_amount": 2.4750024750024746, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 16, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.929, + "amount": 10.035626473982639, + "created_at": "2023-05-06 22:00:00", + "updated_at": "2023-05-07 00:00:00", + "cost": 0.0, + "filled": 10.035626473982639, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.75, + "amount": 10.035626473982639, + "created_at": "2023-05-08 16:00:00", + "updated_at": "2023-05-08 18:00:00", + "cost": 0.0, + "filled": 10.035626473982639, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 10.035626473982639, + "remaining": 0.0, + "open_price": 19.929, + "last_reported_price": 18.75, + "opened_at": "2023-05-06 22:00:00", + "closed_at": "2023-05-08 16:00:00", + "updated_at": "2023-05-08 16:00:00", + "net_gain": -11.832003612825531, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 16, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 19.929, + "sell_percentage": 100.0, + "high_water_mark": 20.55, + "stop_loss_price": 18.93255, + "sell_amount": 10.035626473982639, + "sold_amount": 10.035626473982639, + "active": false, + "sell_prices": "18.75" + } + ], + "take_profits": [ + { + "trade_id": 16, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 19.929, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 21.9219, + "sell_amount": 2.5089066184956597, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 16, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 19.929, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 22.918349999999997, + "sell_amount": 2.5089066184956597, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 17, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.768, + "amount": 10.656436487638533, + "created_at": "2023-05-08 22:00:00", + "updated_at": "2023-05-09 00:00:00", + "cost": 0.0, + "filled": 10.656436487638533, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.314, + "amount": 10.656436487638533, + "created_at": "2023-05-17 02:00:00", + "updated_at": "2023-05-17 04:00:00", + "cost": 0.0, + "filled": 10.656436487638533, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 10.656436487638533, + "remaining": 0.0, + "open_price": 18.768, + "last_reported_price": 19.314, + "opened_at": "2023-05-08 22:00:00", + "closed_at": "2023-05-17 02:00:00", + "updated_at": "2023-05-17 02:00:00", + "net_gain": 5.818414322250646, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 17, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 18.768, + "sell_percentage": 100.0, + "high_water_mark": 19.71, + "stop_loss_price": 17.8296, + "sell_amount": 10.656436487638533, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 17, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 18.768, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 20.644800000000004, + "sell_amount": 2.6641091219096333, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 17, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 18.768, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 21.583199999999998, + "sell_amount": 2.6641091219096333, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 18, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.673, + "amount": 10.710651743158571, + "created_at": "2023-05-20 04:00:00", + "updated_at": "2023-05-20 06:00:00", + "cost": 0.0, + "filled": 10.710651743158571, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.534, + "amount": 10.710651743158571, + "created_at": "2023-06-02 06:00:00", + "updated_at": "2023-06-02 08:00:00", + "cost": 0.0, + "filled": 10.710651743158571, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 10.710651743158571, + "remaining": 0.0, + "open_price": 18.673, + "last_reported_price": 19.534, + "opened_at": "2023-05-20 04:00:00", + "closed_at": "2023-06-02 06:00:00", + "updated_at": "2023-06-02 06:00:00", + "net_gain": 9.221871150859528, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 18, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 18.673, + "sell_percentage": 100.0, + "high_water_mark": 19.882, + "stop_loss_price": 17.739349999999998, + "sell_amount": 10.710651743158571, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 18, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 18.673, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 20.5403, + "sell_amount": 2.677662935789643, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 18, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 18.673, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 21.473949999999995, + "sell_amount": 2.677662935789643, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 19, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 24763.0, + "amount": 0.008076565844203045, + "created_at": "2023-05-21 20:00:00", + "updated_at": "2023-05-22 00:00:00", + "cost": 0.0, + "filled": 0.008076565844203045, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 25281.0, + "amount": 0.008076565844203045, + "created_at": "2023-06-06 20:00:00", + "updated_at": "2023-06-07 00:00:00", + "cost": 0.0, + "filled": 0.008076565844203045, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.008076565844203045, + "remaining": 0.0, + "open_price": 24763.0, + "last_reported_price": 25443.0, + "opened_at": "2023-05-21 20:00:00", + "closed_at": "2023-06-06 20:00:00", + "updated_at": "2023-06-06 20:00:00", + "net_gain": 4.183661107297183, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 19, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 24763.0, + "sell_percentage": 100.0, + "high_water_mark": 26162.0, + "stop_loss_price": 23524.85, + "sell_amount": 0.008076565844203045, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 19, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 24763.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 27239.300000000003, + "sell_amount": 0.0020191414610507613, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 19, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 24763.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 28477.449999999997, + "sell_amount": 0.0020191414610507613, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 20, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.8614, + "amount": 41.140412226930515, + "created_at": "2023-05-24 18:00:00", + "updated_at": "2023-05-24 20:00:00", + "cost": 0.0, + "filled": 41.140412226930515, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.5918, + "amount": 41.140412226930515, + "created_at": "2023-06-09 18:00:00", + "updated_at": "2023-06-09 20:00:00", + "cost": 0.0, + "filled": 41.140412226930515, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 41.140412226930515, + "remaining": 0.0, + "open_price": 4.8614, + "last_reported_price": 4.5918, + "opened_at": "2023-05-24 18:00:00", + "closed_at": "2023-06-09 18:00:00", + "updated_at": "2023-06-09 18:00:00", + "net_gain": -11.09145513638046, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 20, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 4.8614, + "sell_percentage": 100.0, + "high_water_mark": 5.1407, + "stop_loss_price": 4.618329999999999, + "sell_amount": 41.140412226930515, + "sold_amount": 41.140412226930515, + "active": false, + "sell_prices": "4.5918" + } + ], + "take_profits": [ + { + "trade_id": 20, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 4.8614, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.34754, + "sell_amount": 10.285103056732629, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 20, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 4.8614, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.590609999999999, + "sell_amount": 10.285103056732629, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 21, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1676.2, + "amount": 0.11931750387781888, + "created_at": "2023-05-24 20:00:00", + "updated_at": "2023-05-24 22:00:00", + "cost": 0.0, + "filled": 0.11931750387781888, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1528.6, + "amount": 0.11931750387781888, + "created_at": "2023-06-14 20:00:00", + "updated_at": "2023-06-14 22:00:00", + "cost": 0.0, + "filled": 0.11931750387781888, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.11931750387781888, + "remaining": 0.0, + "open_price": 1676.2, + "last_reported_price": 1528.6, + "opened_at": "2023-05-24 20:00:00", + "closed_at": "2023-06-14 20:00:00", + "updated_at": "2023-06-14 20:00:00", + "net_gain": -17.611263572366084, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 21, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1676.2, + "sell_percentage": 100.0, + "high_water_mark": 1785.3, + "stop_loss_price": 1592.3899999999999, + "sell_amount": 0.11931750387781888, + "sold_amount": 0.11931750387781888, + "active": false, + "sell_prices": "1528.6" + } + ], + "take_profits": [ + { + "trade_id": 21, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1676.2, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1843.8200000000002, + "sell_amount": 0.02982937596945472, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 21, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1676.2, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1927.6299999999999, + "sell_amount": 0.02982937596945472, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 22, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.4817, + "amount": 44.625923198786175, + "created_at": "2023-06-10 02:00:00", + "updated_at": "2023-06-10 04:00:00", + "cost": 0.0, + "filled": 44.625923198786175, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.9831, + "amount": 44.625923198786175, + "created_at": "2023-06-10 04:00:00", + "updated_at": "2023-06-10 06:00:00", + "cost": 0.0, + "filled": 44.625923198786175, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 44.625923198786175, + "remaining": 0.0, + "open_price": 4.4817, + "last_reported_price": 3.9831, + "opened_at": "2023-06-10 02:00:00", + "closed_at": "2023-06-10 04:00:00", + "updated_at": "2023-06-10 04:00:00", + "net_gain": -22.250485306914783, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 22, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 4.4817, + "sell_percentage": 100.0, + "high_water_mark": 4.4817, + "stop_loss_price": 4.2576149999999995, + "sell_amount": 44.625923198786175, + "sold_amount": 44.625923198786175, + "active": false, + "sell_prices": "3.9831" + } + ], + "take_profits": [ + { + "trade_id": 22, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 4.4817, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.92987, + "sell_amount": 11.156480799696544, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 22, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 4.4817, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.153955, + "sell_amount": 11.156480799696544, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 23, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 23806.0, + "amount": 0.008401243384020835, + "created_at": "2023-06-10 04:00:00", + "updated_at": "2023-06-14 00:00:00", + "cost": 0.0, + "filled": 0.008401243384020835, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 27316.0, + "amount": 0.002100310846005209, + "created_at": "2023-07-12 00:00:00", + "updated_at": "2023-07-12 02:00:00", + "cost": 0.0, + "filled": 0.002100310846005209, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 26495.0, + "amount": 0.006300932538015626, + "created_at": "2023-08-07 22:00:00", + "updated_at": "2023-08-08 00:00:00", + "cost": 0.0, + "filled": 0.006300932538015626, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.008401243384020835, + "remaining": 0.0, + "open_price": 23806.0, + "last_reported_price": 26495.0, + "opened_at": "2023-06-10 04:00:00", + "closed_at": "2023-08-07 22:00:00", + "updated_at": "2023-08-07 22:00:00", + "net_gain": 24.315298664202295, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 23, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 23806.0, + "sell_percentage": 100.0, + "high_water_mark": 28521.0, + "stop_loss_price": 22615.7, + "sell_amount": 0.008401243384020835, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 23, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 23806.0, + "sell_percentage": 25.0, + "high_water_mark": 28521.0, + "take_profit_price": 26186.600000000002, + "sell_amount": 0.002100310846005209, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 23, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 23806.0, + "sell_percentage": 25.0, + "high_water_mark": 28521.0, + "take_profit_price": 27376.899999999998, + "sell_amount": 0.002100310846005209, + "sold_amount": 0.002100310846005209, + "active": false, + "sell_prices": "27316.0" + } + ] + }, + { + "id": 24, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1525.4, + "amount": 0.13111315064901008, + "created_at": "2023-06-14 22:00:00", + "updated_at": "2023-06-15 00:00:00", + "cost": 0.0, + "filled": 0.13111315064901008, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1746.3, + "amount": 0.03277828766225252, + "created_at": "2023-06-23 18:00:00", + "updated_at": "2023-06-23 20:00:00", + "cost": 0.0, + "filled": 0.03277828766225252, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1676.7, + "amount": 0.03277828766225252, + "created_at": "2023-06-28 20:00:00", + "updated_at": "2023-06-28 22:00:00", + "cost": 0.0, + "filled": 0.03277828766225252, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1773.7, + "amount": 0.06555657532450504, + "created_at": "2023-07-13 16:00:00", + "updated_at": "2023-07-13 18:00:00", + "cost": 0.0, + "filled": 0.06555657532450504, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.13111315064901008, + "remaining": 0.0, + "open_price": 1525.4, + "last_reported_price": 1773.7, + "opened_at": "2023-06-14 22:00:00", + "closed_at": "2023-07-13 16:00:00", + "updated_at": "2023-07-13 16:00:00", + "net_gain": 28.477776320964978, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 24, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1525.4, + "sell_percentage": 100.0, + "high_water_mark": 1806.4, + "stop_loss_price": 1449.13, + "sell_amount": 0.13111315064901008, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 24, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1525.4, + "sell_percentage": 25.0, + "high_water_mark": 1765.6, + "take_profit_price": 1677.9400000000003, + "sell_amount": 0.03277828766225252, + "sold_amount": 0.03277828766225252, + "active": false, + "sell_prices": "1676.7" + }, + { + "trade_id": 24, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1525.4, + "sell_percentage": 25.0, + "high_water_mark": 1765.6, + "take_profit_price": 1754.21, + "sell_amount": 0.03277828766225252, + "sold_amount": 0.03277828766225252, + "active": false, + "sell_prices": "1746.3" + } + ] + }, + { + "id": 25, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.0214, + "amount": 49.73392350922565, + "created_at": "2023-06-15 12:00:00", + "updated_at": "2023-06-15 14:00:00", + "cost": 0.0, + "filled": 49.73392350922565, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.2511, + "amount": 49.73392350922565, + "created_at": "2023-06-20 18:00:00", + "updated_at": "2023-06-20 20:00:00", + "cost": 0.0, + "filled": 49.73392350922565, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 49.73392350922565, + "remaining": 0.0, + "open_price": 4.0214, + "last_reported_price": 4.2511, + "opened_at": "2023-06-15 12:00:00", + "closed_at": "2023-06-20 18:00:00", + "updated_at": "2023-06-20 18:00:00", + "net_gain": 11.423882230069154, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 25, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 4.0214, + "sell_percentage": 100.0, + "high_water_mark": 4.2511, + "stop_loss_price": 3.82033, + "sell_amount": 49.73392350922565, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 25, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 4.0214, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.42354, + "sell_amount": 12.433480877306412, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 25, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 4.0214, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.62461, + "sell_amount": 12.433480877306412, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 26, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 16.835, + "amount": 11.88001188001188, + "created_at": "2023-07-01 20:00:00", + "updated_at": "2023-07-01 22:00:00", + "cost": 0.0, + "filled": 11.88001188001188, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.04, + "amount": 2.97000297000297, + "created_at": "2023-07-06 22:00:00", + "updated_at": "2023-07-07 00:00:00", + "cost": 0.0, + "filled": 2.97000297000297, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.312, + "amount": 2.97000297000297, + "created_at": "2023-07-09 20:00:00", + "updated_at": "2023-07-09 22:00:00", + "cost": 0.0, + "filled": 2.97000297000297, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.303, + "amount": 5.940005940005941, + "created_at": "2023-09-27 12:00:00", + "updated_at": "2023-09-27 14:00:00", + "cost": 0.0, + "filled": 5.940005940005941, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 11.88001188001188, + "remaining": 0.0, + "open_price": 16.835, + "last_reported_price": 18.303, + "opened_at": "2023-07-01 20:00:00", + "closed_at": "2023-09-27 12:00:00", + "updated_at": "2023-09-27 12:00:00", + "net_gain": 19.655479655479667, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 26, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 16.835, + "sell_percentage": 100.0, + "high_water_mark": 25.804, + "stop_loss_price": 15.99325, + "sell_amount": 11.88001188001188, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 26, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 16.835, + "sell_percentage": 25.0, + "high_water_mark": 19.181, + "take_profit_price": 18.518500000000003, + "sell_amount": 2.97000297000297, + "sold_amount": 2.97000297000297, + "active": false, + "sell_prices": "18.04" + }, + { + "trade_id": 26, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 16.835, + "sell_percentage": 25.0, + "high_water_mark": 20.31, + "take_profit_price": 19.36025, + "sell_amount": 2.97000297000297, + "sold_amount": 2.97000297000297, + "active": false, + "sell_prices": "19.312" + } + ] + }, + { + "id": 27, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.7709, + "amount": 41.92081158691232, + "created_at": "2023-07-06 00:00:00", + "updated_at": "2023-07-06 02:00:00", + "cost": 0.0, + "filled": 41.92081158691232, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.517, + "amount": 41.92081158691232, + "created_at": "2023-08-04 18:00:00", + "updated_at": "2023-08-04 20:00:00", + "cost": 0.0, + "filled": 41.92081158691232, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 41.92081158691232, + "remaining": 0.0, + "open_price": 4.7709, + "last_reported_price": 4.517, + "opened_at": "2023-07-06 00:00:00", + "closed_at": "2023-08-04 18:00:00", + "updated_at": "2023-08-04 18:00:00", + "net_gain": -10.643694061917017, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 27, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 4.7709, + "sell_percentage": 100.0, + "high_water_mark": 5.0803, + "stop_loss_price": 4.532355, + "sell_amount": 41.92081158691232, + "sold_amount": 41.92081158691232, + "active": false, + "sell_prices": "4.517" + } + ], + "take_profits": [ + { + "trade_id": 27, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 4.7709, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.247990000000001, + "sell_amount": 10.48020289672808, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 27, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 4.7709, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.486535, + "sell_amount": 10.48020289672808, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 28, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1722.9, + "amount": 0.11608334784375181, + "created_at": "2023-07-15 02:00:00", + "updated_at": "2023-07-15 04:00:00", + "cost": 0.0, + "filled": 0.11608334784375181, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1711.9, + "amount": 0.11608334784375181, + "created_at": "2023-07-20 08:00:00", + "updated_at": "2023-07-20 10:00:00", + "cost": 0.0, + "filled": 0.11608334784375181, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.11608334784375181, + "remaining": 0.0, + "open_price": 1722.9, + "last_reported_price": 1711.9, + "opened_at": "2023-07-15 02:00:00", + "closed_at": "2023-07-20 08:00:00", + "updated_at": "2023-07-20 08:00:00", + "net_gain": -1.2769168262812798, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 28, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1722.9, + "sell_percentage": 100.0, + "high_water_mark": 1732.1, + "stop_loss_price": 1636.755, + "sell_amount": 0.11608334784375181, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 28, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1722.9, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1895.1900000000003, + "sell_amount": 0.029020836960937952, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 28, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1722.9, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1981.335, + "sell_amount": 0.029020836960937952, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 29, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1689.2, + "amount": 0.11839924224484963, + "created_at": "2023-07-30 20:00:00", + "updated_at": "2023-07-30 22:00:00", + "cost": 0.0, + "filled": 0.11839924224484963, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1598.7, + "amount": 0.11839924224484963, + "created_at": "2023-08-17 14:00:00", + "updated_at": "2023-08-17 16:00:00", + "cost": 0.0, + "filled": 0.11839924224484963, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.11839924224484963, + "remaining": 0.0, + "open_price": 1689.2, + "last_reported_price": 1598.7, + "opened_at": "2023-07-30 20:00:00", + "closed_at": "2023-08-17 14:00:00", + "updated_at": "2023-08-17 14:00:00", + "net_gain": -10.71513142315888, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 29, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1689.2, + "sell_percentage": 100.0, + "high_water_mark": 1699.3, + "stop_loss_price": 1604.74, + "sell_amount": 0.11839924224484963, + "sold_amount": 0.11839924224484963, + "active": false, + "sell_prices": "1598.7" + } + ], + "take_profits": [ + { + "trade_id": 29, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1689.2, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1858.1200000000001, + "sell_amount": 0.029599810561212407, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 29, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1689.2, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1942.58, + "sell_amount": 0.029599810561212407, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 30, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.5056, + "amount": 44.38920454545454, + "created_at": "2023-08-05 00:00:00", + "updated_at": "2023-08-05 02:00:00", + "cost": 0.0, + "filled": 44.38920454545454, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.2353, + "amount": 44.38920454545454, + "created_at": "2023-08-16 20:00:00", + "updated_at": "2023-08-16 22:00:00", + "cost": 0.0, + "filled": 44.38920454545454, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 44.38920454545454, + "remaining": 0.0, + "open_price": 4.5056, + "last_reported_price": 4.2353, + "opened_at": "2023-08-05 00:00:00", + "closed_at": "2023-08-16 20:00:00", + "updated_at": "2023-08-16 20:00:00", + "net_gain": -11.998401988636402, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 30, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 4.5056, + "sell_percentage": 100.0, + "high_water_mark": 4.6292, + "stop_loss_price": 4.28032, + "sell_amount": 44.38920454545454, + "sold_amount": 44.38920454545454, + "active": false, + "sell_prices": "4.2353" + } + ], + "take_profits": [ + { + "trade_id": 30, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 4.5056, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.956160000000001, + "sell_amount": 11.097301136363635, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 30, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 4.5056, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.18144, + "sell_amount": 11.097301136363635, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 31, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 26726.0, + "amount": 0.0074833495472573525, + "created_at": "2023-08-10 14:00:00", + "updated_at": "2023-08-11 00:00:00", + "cost": 0.0, + "filled": 0.0074833495472573525, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 26836.0, + "amount": 0.0074833495472573525, + "created_at": "2023-08-14 06:00:00", + "updated_at": "2023-08-15 00:00:00", + "cost": 0.0, + "filled": 0.0074833495472573525, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.0074833495472573525, + "remaining": 0.0, + "open_price": 26726.0, + "last_reported_price": 26959.0, + "opened_at": "2023-08-10 14:00:00", + "closed_at": "2023-08-14 06:00:00", + "updated_at": "2023-08-14 06:00:00", + "net_gain": 0.8231684501983239, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 31, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 26726.0, + "sell_percentage": 100.0, + "high_water_mark": 26959.0, + "stop_loss_price": 25389.699999999997, + "sell_amount": 0.0074833495472573525, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 31, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 26726.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 29398.600000000002, + "sell_amount": 0.0018708373868143381, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 31, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 26726.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 30734.899999999998, + "sell_amount": 0.0018708373868143381, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 32, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 26144.0, + "amount": 0.007649938800489596, + "created_at": "2023-08-17 10:00:00", + "updated_at": "2023-08-18 00:00:00", + "cost": 0.0, + "filled": 0.007649938800489596, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 23988.0, + "amount": 0.007649938800489596, + "created_at": "2023-08-18 00:00:00", + "updated_at": "2023-08-18 02:00:00", + "cost": 0.0, + "filled": 0.007649938800489596, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.007649938800489596, + "remaining": 0.0, + "open_price": 26144.0, + "last_reported_price": 23988.0, + "opened_at": "2023-08-17 10:00:00", + "closed_at": "2023-08-18 00:00:00", + "updated_at": "2023-08-18 00:00:00", + "net_gain": -16.493268053855587, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 32, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 26144.0, + "sell_percentage": 100.0, + "high_water_mark": 26144.0, + "stop_loss_price": 24836.8, + "sell_amount": 0.007649938800489596, + "sold_amount": 0.007649938800489596, + "active": false, + "sell_prices": "23988.0" + } + ], + "take_profits": [ + { + "trade_id": 32, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 26144.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 28758.4, + "sell_amount": 0.001912484700122399, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 32, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 26144.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 30065.6, + "sell_amount": 0.001912484700122399, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 33, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 24267.0, + "amount": 0.008241645032348456, + "created_at": "2023-08-18 02:00:00", + "updated_at": "2023-08-19 00:00:00", + "cost": 0.0, + "filled": 0.008241645032348456, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 29090.0, + "amount": 0.008241645032348456, + "created_at": "2023-10-23 04:00:00", + "updated_at": "2023-10-24 00:00:00", + "cost": 0.0, + "filled": 0.008241645032348456, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.008241645032348456, + "remaining": 0.0, + "open_price": 24267.0, + "last_reported_price": 31026.0, + "opened_at": "2023-08-18 02:00:00", + "closed_at": "2023-10-23 04:00:00", + "updated_at": "2023-10-23 04:00:00", + "net_gain": 39.74945399101662, + "cost": 199.99999999999997, + "stop_losses": [ + { + "trade_id": 33, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 24267.0, + "sell_percentage": 100.0, + "high_water_mark": 31026.0, + "stop_loss_price": 23053.649999999998, + "sell_amount": 0.008241645032348456, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 33, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 24267.0, + "sell_percentage": 25.0, + "high_water_mark": 31026.0, + "take_profit_price": 27923.4, + "sell_amount": 0.002060411258087114, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 33, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 24267.0, + "sell_percentage": 25.0, + "high_water_mark": 31026.0, + "take_profit_price": 27907.05, + "sell_amount": 0.002060411258087114, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 34, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1523.8, + "amount": 0.131250820317627, + "created_at": "2023-08-22 02:00:00", + "updated_at": "2023-08-22 04:00:00", + "cost": 0.0, + "filled": 0.131250820317627, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1523.0, + "amount": 0.131250820317627, + "created_at": "2023-09-05 10:00:00", + "updated_at": "2023-09-05 12:00:00", + "cost": 0.0, + "filled": 0.131250820317627, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.131250820317627, + "remaining": 0.0, + "open_price": 1523.8, + "last_reported_price": 1523.0, + "opened_at": "2023-08-22 02:00:00", + "closed_at": "2023-09-05 10:00:00", + "updated_at": "2023-09-05 10:00:00", + "net_gain": -0.10500065625407728, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 34, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1523.8, + "sell_percentage": 100.0, + "high_water_mark": 1595.0, + "stop_loss_price": 1447.61, + "sell_amount": 0.131250820317627, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 34, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1523.8, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1676.18, + "sell_amount": 0.03281270507940675, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 34, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1523.8, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1752.37, + "sell_amount": 0.03281270507940675, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 35, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.1688, + "amount": 47.975436576472845, + "created_at": "2023-08-30 18:00:00", + "updated_at": "2023-08-30 20:00:00", + "cost": 0.0, + "filled": 47.975436576472845, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.9375, + "amount": 47.975436576472845, + "created_at": "2023-08-31 20:00:00", + "updated_at": "2023-08-31 22:00:00", + "cost": 0.0, + "filled": 47.975436576472845, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 47.975436576472845, + "remaining": 0.0, + "open_price": 4.1688, + "last_reported_price": 3.9375, + "opened_at": "2023-08-30 18:00:00", + "closed_at": "2023-08-31 20:00:00", + "updated_at": "2023-08-31 20:00:00", + "net_gain": -11.096718480138179, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 35, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 4.1688, + "sell_percentage": 100.0, + "high_water_mark": 4.1688, + "stop_loss_price": 3.9603599999999997, + "sell_amount": 47.975436576472845, + "sold_amount": 47.975436576472845, + "active": false, + "sell_prices": "3.9375" + } + ], + "take_profits": [ + { + "trade_id": 35, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 4.1688, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.585680000000001, + "sell_amount": 11.993859144118211, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 35, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 4.1688, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.7941199999999995, + "sell_amount": 11.993859144118211, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 36, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.9374, + "amount": 50.794940823893945, + "created_at": "2023-08-31 22:00:00", + "updated_at": "2023-09-01 00:00:00", + "cost": 0.0, + "filled": 50.794940823893945, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.982, + "amount": 50.794940823893945, + "created_at": "2023-09-06 22:00:00", + "updated_at": "2023-09-07 00:00:00", + "cost": 0.0, + "filled": 50.794940823893945, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 50.794940823893945, + "remaining": 0.0, + "open_price": 3.9374, + "last_reported_price": 3.982, + "opened_at": "2023-08-31 22:00:00", + "closed_at": "2023-09-06 22:00:00", + "updated_at": "2023-09-06 22:00:00", + "net_gain": 2.265454360745707, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 36, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 3.9374, + "sell_percentage": 100.0, + "high_water_mark": 4.0, + "stop_loss_price": 3.7405299999999997, + "sell_amount": 50.794940823893945, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 36, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 3.9374, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.33114, + "sell_amount": 12.698735205973486, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 36, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 3.9374, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.528009999999999, + "sell_amount": 12.698735205973486, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 37, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1514.1, + "amount": 0.13209167162010435, + "created_at": "2023-09-10 14:00:00", + "updated_at": "2023-09-10 16:00:00", + "cost": 0.0, + "filled": 0.13209167162010435, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1432.3, + "amount": 0.13209167162010435, + "created_at": "2023-09-11 18:00:00", + "updated_at": "2023-09-11 20:00:00", + "cost": 0.0, + "filled": 0.13209167162010435, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.13209167162010435, + "remaining": 0.0, + "open_price": 1514.1, + "last_reported_price": 1432.3, + "opened_at": "2023-09-10 14:00:00", + "closed_at": "2023-09-11 18:00:00", + "updated_at": "2023-09-11 18:00:00", + "net_gain": -10.80509873852452, + "cost": 199.99999999999997, + "stop_losses": [ + { + "trade_id": 37, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1514.1, + "sell_percentage": 100.0, + "high_water_mark": 1515.0, + "stop_loss_price": 1438.3949999999998, + "sell_amount": 0.13209167162010435, + "sold_amount": 0.13209167162010435, + "active": false, + "sell_prices": "1432.3" + } + ], + "take_profits": [ + { + "trade_id": 37, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1514.1, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1665.51, + "sell_amount": 0.03302291790502609, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 37, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1514.1, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1741.2149999999997, + "sell_amount": 0.03302291790502609, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 38, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1436.6, + "amount": 0.13921759710427398, + "created_at": "2023-09-11 20:00:00", + "updated_at": "2023-09-11 22:00:00", + "cost": 0.0, + "filled": 0.13921759710427398, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1501.0, + "amount": 0.13921759710427398, + "created_at": "2023-09-25 18:00:00", + "updated_at": "2023-09-25 20:00:00", + "cost": 0.0, + "filled": 0.13921759710427398, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.13921759710427398, + "remaining": 0.0, + "open_price": 1436.6, + "last_reported_price": 1501.0, + "opened_at": "2023-09-11 20:00:00", + "closed_at": "2023-09-25 18:00:00", + "updated_at": "2023-09-25 18:00:00", + "net_gain": 8.965613253515272, + "cost": 199.99999999999997, + "stop_losses": [ + { + "trade_id": 38, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1436.6, + "sell_percentage": 100.0, + "high_water_mark": 1553.5, + "stop_loss_price": 1364.7699999999998, + "sell_amount": 0.13921759710427398, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 38, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1436.6, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1580.26, + "sell_amount": 0.034804399276068494, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 38, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1436.6, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 1652.0899999999997, + "sell_amount": 0.034804399276068494, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 39, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.6825, + "amount": 54.31093007467753, + "created_at": "2023-09-11 20:00:00", + "updated_at": "2023-09-11 22:00:00", + "cost": 0.0, + "filled": 54.31093007467753, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.8753, + "amount": 54.31093007467753, + "created_at": "2023-09-18 04:00:00", + "updated_at": "2023-09-18 06:00:00", + "cost": 0.0, + "filled": 54.31093007467753, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 54.31093007467753, + "remaining": 0.0, + "open_price": 3.6825, + "last_reported_price": 3.8753, + "opened_at": "2023-09-11 20:00:00", + "closed_at": "2023-09-18 04:00:00", + "updated_at": "2023-09-18 04:00:00", + "net_gain": 10.47114731839784, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 39, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 3.6825, + "sell_percentage": 100.0, + "high_water_mark": 3.961, + "stop_loss_price": 3.498375, + "sell_amount": 54.31093007467753, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 39, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 3.6825, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.050750000000001, + "sell_amount": 13.577732518669382, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 39, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 3.6825, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.234875, + "sell_amount": 13.577732518669382, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 40, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.7907, + "amount": 52.76070382778906, + "created_at": "2023-09-26 20:00:00", + "updated_at": "2023-09-26 22:00:00", + "cost": 0.0, + "filled": 52.76070382778906, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.8512, + "amount": 52.76070382778906, + "created_at": "2023-09-27 10:00:00", + "updated_at": "2023-09-27 12:00:00", + "cost": 0.0, + "filled": 52.76070382778906, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 52.76070382778906, + "remaining": 0.0, + "open_price": 3.7907, + "last_reported_price": 3.8512, + "opened_at": "2023-09-26 20:00:00", + "closed_at": "2023-09-27 10:00:00", + "updated_at": "2023-09-27 10:00:00", + "net_gain": 3.1920225815812273, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 40, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 3.7907, + "sell_percentage": 100.0, + "high_water_mark": 3.8512, + "stop_loss_price": 3.601165, + "sell_amount": 52.76070382778906, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 40, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 3.7907, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.169770000000001, + "sell_amount": 13.190175956947265, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 40, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 3.7907, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.359305, + "sell_amount": 13.190175956947265, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 41, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.7961, + "amount": 52.68565106293301, + "created_at": "2023-10-08 08:00:00", + "updated_at": "2023-10-08 10:00:00", + "cost": 0.0, + "filled": 52.68565106293301, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.6022, + "amount": 52.68565106293301, + "created_at": "2023-10-10 12:00:00", + "updated_at": "2023-10-10 14:00:00", + "cost": 0.0, + "filled": 52.68565106293301, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 52.68565106293301, + "remaining": 0.0, + "open_price": 3.7961, + "last_reported_price": 3.6022, + "opened_at": "2023-10-08 08:00:00", + "closed_at": "2023-10-10 12:00:00", + "updated_at": "2023-10-10 12:00:00", + "net_gain": -10.215747741102717, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 41, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 3.7961, + "sell_percentage": 100.0, + "high_water_mark": 3.8158, + "stop_loss_price": 3.606295, + "sell_amount": 52.68565106293301, + "sold_amount": 52.68565106293301, + "active": false, + "sell_prices": "3.6022" + } + ], + "take_profits": [ + { + "trade_id": 41, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 3.7961, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.1757100000000005, + "sell_amount": 13.171412765733253, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 41, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 3.7961, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.365514999999999, + "sell_amount": 13.171412765733253, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 42, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.5918, + "amount": 55.682387660782894, + "created_at": "2023-10-10 16:00:00", + "updated_at": "2023-10-10 18:00:00", + "cost": 0.0, + "filled": 55.682387660782894, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.9162, + "amount": 13.920596915195723, + "created_at": "2023-10-24 14:00:00", + "updated_at": "2023-10-24 16:00:00", + "cost": 0.0, + "filled": 13.920596915195723, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.0548, + "amount": 13.920596915195723, + "created_at": "2023-10-26 04:00:00", + "updated_at": "2023-10-26 06:00:00", + "cost": 0.0, + "filled": 13.920596915195723, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.1533, + "amount": 27.841193830391447, + "created_at": "2023-12-04 02:00:00", + "updated_at": "2023-12-04 04:00:00", + "cost": 0.0, + "filled": 27.841193830391447, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 55.682387660782894, + "remaining": 0.0, + "open_price": 3.5918, + "last_reported_price": 5.1533, + "opened_at": "2023-10-10 16:00:00", + "closed_at": "2023-12-04 02:00:00", + "updated_at": "2023-12-04 02:00:00", + "net_gain": 54.43510217718134, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 42, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 3.5918, + "sell_percentage": 100.0, + "high_water_mark": 5.4373, + "stop_loss_price": 3.41221, + "sell_amount": 55.682387660782894, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 42, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 3.5918, + "sell_percentage": 25.0, + "high_water_mark": 4.0884, + "take_profit_price": 3.9509800000000004, + "sell_amount": 13.920596915195723, + "sold_amount": 13.920596915195723, + "active": false, + "sell_prices": "3.9162" + }, + { + "trade_id": 42, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 3.5918, + "sell_percentage": 25.0, + "high_water_mark": 4.1389, + "take_profit_price": 4.13057, + "sell_amount": 13.920596915195723, + "sold_amount": 13.920596915195723, + "active": false, + "sell_prices": "4.0548" + } + ] + }, + { + "id": 43, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 32166.0, + "amount": 0.0062177454455014615, + "created_at": "2023-10-27 06:00:00", + "updated_at": "2023-10-28 00:00:00", + "cost": 0.0, + "filled": 0.0062177454455014615, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 38124.0, + "amount": 0.0015544363613753654, + "created_at": "2024-01-14 00:00:00", + "updated_at": "2024-01-14 02:00:00", + "cost": 0.0, + "filled": 0.0015544363613753654, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 36308.0, + "amount": 0.0015544363613753654, + "created_at": "2024-01-22 00:00:00", + "updated_at": "2024-01-22 02:00:00", + "cost": 0.0, + "filled": 0.0015544363613753654, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 39943.0, + "amount": 0.0031088727227507303, + "created_at": "2024-01-31 18:00:00", + "updated_at": "2024-02-02 00:00:00", + "cost": 0.0, + "filled": 0.0031088727227507303, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.0062177454455014615, + "remaining": 0.0, + "open_price": 32166.0, + "last_reported_price": 39424.0, + "opened_at": "2023-10-27 06:00:00", + "closed_at": "2024-01-31 18:00:00", + "updated_at": "2024-01-31 18:00:00", + "net_gain": 39.87751041472363, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 43, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 32166.0, + "sell_percentage": 100.0, + "high_water_mark": 42906.0, + "stop_loss_price": 30557.699999999997, + "sell_amount": 0.0062177454455014615, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 43, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 32166.0, + "sell_percentage": 25.0, + "high_water_mark": 42906.0, + "take_profit_price": 38615.4, + "sell_amount": 0.0015544363613753654, + "sold_amount": 0.0015544363613753654, + "active": false, + "sell_prices": "38124.0" + }, + { + "trade_id": 43, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 32166.0, + "sell_percentage": 25.0, + "high_water_mark": 42906.0, + "take_profit_price": 36990.899999999994, + "sell_amount": 0.0015544363613753654, + "sold_amount": 0.0015544363613753654, + "active": false, + "sell_prices": "36308.0" + } + ] + }, + { + "id": 44, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 37.256, + "amount": 5.368262830148164, + "created_at": "2023-11-06 04:00:00", + "updated_at": "2023-11-06 06:00:00", + "cost": 0.0, + "filled": 5.368262830148164, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 40.949, + "amount": 1.342065707537041, + "created_at": "2023-11-07 20:00:00", + "updated_at": "2023-11-07 22:00:00", + "cost": 0.0, + "filled": 1.342065707537041, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 42.529, + "amount": 1.342065707537041, + "created_at": "2023-11-09 16:00:00", + "updated_at": "2023-11-09 18:00:00", + "cost": 0.0, + "filled": 1.342065707537041, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 52.522, + "amount": 2.6841314150740816, + "created_at": "2023-11-15 00:00:00", + "updated_at": "2023-11-15 02:00:00", + "cost": 0.0, + "filled": 2.6841314150740816, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 5.368262830148164, + "remaining": 0.0, + "open_price": 37.256, + "last_reported_price": 52.522, + "opened_at": "2023-11-06 04:00:00", + "closed_at": "2023-11-15 00:00:00", + "updated_at": "2023-11-15 00:00:00", + "net_gain": 53.00891131629803, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 44, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 37.256, + "sell_percentage": 100.0, + "high_water_mark": 57.497, + "stop_loss_price": 35.3932, + "sell_amount": 5.368262830148164, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 44, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 37.256, + "sell_percentage": 25.0, + "high_water_mark": 41.02, + "take_profit_price": 40.9816, + "sell_amount": 1.342065707537041, + "sold_amount": 1.342065707537041, + "active": false, + "sell_prices": "40.949" + }, + { + "trade_id": 44, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 37.256, + "sell_percentage": 25.0, + "high_water_mark": 44.366, + "take_profit_price": 42.8444, + "sell_amount": 1.342065707537041, + "sold_amount": 1.342065707537041, + "active": false, + "sell_prices": "42.529" + } + ] + }, + { + "id": 45, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 53.294, + "amount": 3.7527676661537885, + "created_at": "2023-11-16 22:00:00", + "updated_at": "2023-11-17 00:00:00", + "cost": 0.0, + "filled": 3.7527676661537885, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 50.557, + "amount": 3.7527676661537885, + "created_at": "2023-11-17 14:00:00", + "updated_at": "2023-11-17 16:00:00", + "cost": 0.0, + "filled": 3.7527676661537885, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 3.7527676661537885, + "remaining": 0.0, + "open_price": 53.294, + "last_reported_price": 50.557, + "opened_at": "2023-11-16 22:00:00", + "closed_at": "2023-11-17 14:00:00", + "updated_at": "2023-11-17 14:00:00", + "net_gain": -10.271325102262892, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 45, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 53.294, + "sell_percentage": 100.0, + "high_water_mark": 55.712, + "stop_loss_price": 50.62929999999999, + "sell_amount": 3.7527676661537885, + "sold_amount": 3.7527676661537885, + "active": false, + "sell_prices": "50.557" + } + ], + "take_profits": [ + { + "trade_id": 45, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 53.294, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 58.623400000000004, + "sell_amount": 0.9381919165384471, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 45, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 53.294, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 61.28809999999999, + "sell_amount": 0.9381919165384471, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 46, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1823.4, + "amount": 0.10968520346605243, + "created_at": "2023-11-17 04:00:00", + "updated_at": "2023-11-17 06:00:00", + "cost": 0.0, + "filled": 0.10968520346605243, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1844.4, + "amount": 0.10968520346605243, + "created_at": "2023-11-22 08:00:00", + "updated_at": "2023-11-22 10:00:00", + "cost": 0.0, + "filled": 0.10968520346605243, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.10968520346605243, + "remaining": 0.0, + "open_price": 1823.4, + "last_reported_price": 1844.4, + "opened_at": "2023-11-17 04:00:00", + "closed_at": "2023-11-22 08:00:00", + "updated_at": "2023-11-22 08:00:00", + "net_gain": 2.303389272787115, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 46, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1823.4, + "sell_percentage": 100.0, + "high_water_mark": 1880.8, + "stop_loss_price": 1732.23, + "sell_amount": 0.10968520346605243, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 46, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1823.4, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 2005.7400000000002, + "sell_amount": 0.027421300866513107, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 46, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1823.4, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 2096.91, + "sell_amount": 0.027421300866513107, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 47, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1825.9, + "amount": 0.10953502382386768, + "created_at": "2023-11-28 04:00:00", + "updated_at": "2023-11-28 06:00:00", + "cost": 0.0, + "filled": 0.10953502382386768, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2090.2, + "amount": 0.02738375595596692, + "created_at": "2023-12-06 10:00:00", + "updated_at": "2023-12-06 12:00:00", + "cost": 0.0, + "filled": 0.02738375595596692, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2008.0, + "amount": 0.02738375595596692, + "created_at": "2023-12-13 02:00:00", + "updated_at": "2023-12-13 04:00:00", + "cost": 0.0, + "filled": 0.02738375595596692, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2415.6, + "amount": 0.05476751191193383, + "created_at": "2024-02-12 18:00:00", + "updated_at": "2024-02-12 20:00:00", + "cost": 0.0, + "filled": 0.05476751191193383, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.10953502382386768, + "remaining": 0.0, + "open_price": 1825.9, + "last_reported_price": 2415.6, + "opened_at": "2023-11-28 04:00:00", + "closed_at": "2024-02-12 18:00:00", + "updated_at": "2024-02-12 18:00:00", + "net_gain": 44.52051043321101, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 47, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 1825.9, + "sell_percentage": 100.0, + "high_water_mark": 2441.4, + "stop_loss_price": 1734.605, + "sell_amount": 0.10953502382386768, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 47, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 1825.9, + "sell_percentage": 25.0, + "high_water_mark": 2216.9, + "take_profit_price": 2008.4900000000002, + "sell_amount": 0.02738375595596692, + "sold_amount": 0.02738375595596692, + "active": false, + "sell_prices": "2008.0" + }, + { + "trade_id": 47, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 1825.9, + "sell_percentage": 25.0, + "high_water_mark": 2126.8, + "take_profit_price": 2099.785, + "sell_amount": 0.02738375595596692, + "sold_amount": 0.02738375595596692, + "active": false, + "sell_prices": "2090.2" + } + ] + }, + { + "id": 48, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.1178, + "amount": 32.69149040504757, + "created_at": "2023-12-11 16:00:00", + "updated_at": "2023-12-11 18:00:00", + "cost": 0.0, + "filled": 32.69149040504757, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.5683, + "amount": 8.172872601261892, + "created_at": "2023-12-12 08:00:00", + "updated_at": "2023-12-12 10:00:00", + "cost": 0.0, + "filled": 8.172872601261892, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.9062, + "amount": 8.172872601261892, + "created_at": "2023-12-23 02:00:00", + "updated_at": "2023-12-23 04:00:00", + "cost": 0.0, + "filled": 8.172872601261892, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 7.154, + "amount": 16.34574520252378, + "created_at": "2024-01-10 20:00:00", + "updated_at": "2024-01-10 22:00:00", + "cost": 0.0, + "filled": 16.34574520252378, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 32.69149040504757, + "remaining": 0.0, + "open_price": 6.1178, + "last_reported_price": 7.154, + "opened_at": "2023-12-11 16:00:00", + "closed_at": "2024-01-10 20:00:00", + "updated_at": "2024-01-10 20:00:00", + "net_gain": 27.062833044558488, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 48, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.1178, + "sell_percentage": 100.0, + "high_water_mark": 8.5499, + "stop_loss_price": 5.811909999999999, + "sell_amount": 32.69149040504757, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 48, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.1178, + "sell_percentage": 25.0, + "high_water_mark": 6.7463, + "take_profit_price": 6.72958, + "sell_amount": 8.172872601261892, + "sold_amount": 8.172872601261892, + "active": false, + "sell_prices": "6.5683" + }, + { + "trade_id": 48, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.1178, + "sell_percentage": 25.0, + "high_water_mark": 7.6665, + "take_profit_price": 7.035469999999999, + "sell_amount": 8.172872601261892, + "sold_amount": 8.172872601261892, + "active": false, + "sell_prices": "6.9062" + } + ] + }, + { + "id": 49, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 96.554, + "amount": 2.071379746048843, + "created_at": "2023-12-26 18:00:00", + "updated_at": "2023-12-26 20:00:00", + "cost": 0.0, + "filled": 2.071379746048843, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 91.259, + "amount": 2.071379746048843, + "created_at": "2023-12-28 12:00:00", + "updated_at": "2023-12-28 14:00:00", + "cost": 0.0, + "filled": 2.071379746048843, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 2.071379746048843, + "remaining": 0.0, + "open_price": 96.554, + "last_reported_price": 91.259, + "opened_at": "2023-12-26 18:00:00", + "closed_at": "2023-12-28 12:00:00", + "updated_at": "2023-12-28 12:00:00", + "net_gain": -10.967955755328632, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 49, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 96.554, + "sell_percentage": 100.0, + "high_water_mark": 101.99, + "stop_loss_price": 91.7263, + "sell_amount": 2.071379746048843, + "sold_amount": 2.071379746048843, + "active": false, + "sell_prices": "91.259" + } + ], + "take_profits": [ + { + "trade_id": 49, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 96.554, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 106.20940000000002, + "sell_amount": 0.5178449365122108, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 49, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 96.554, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 111.0371, + "sell_amount": 0.5178449365122108, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 50, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 89.873, + "amount": 2.2253624559100063, + "created_at": "2023-12-28 14:00:00", + "updated_at": "2023-12-28 16:00:00", + "cost": 0.0, + "filled": 2.2253624559100063, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 94.87, + "amount": 2.2253624559100063, + "created_at": "2023-12-31 08:00:00", + "updated_at": "2023-12-31 10:00:00", + "cost": 0.0, + "filled": 2.2253624559100063, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 2.2253624559100063, + "remaining": 0.0, + "open_price": 89.873, + "last_reported_price": 94.87, + "opened_at": "2023-12-28 14:00:00", + "closed_at": "2023-12-31 08:00:00", + "updated_at": "2023-12-31 08:00:00", + "net_gain": 11.120136192182315, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 50, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 89.873, + "sell_percentage": 100.0, + "high_water_mark": 98.665, + "stop_loss_price": 85.37935, + "sell_amount": 2.2253624559100063, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 50, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 89.873, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 98.86030000000001, + "sell_amount": 0.5563406139775016, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 50, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 89.873, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 103.35395, + "sell_amount": 0.5563406139775016, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 51, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 86.393, + "amount": 2.3150023728774323, + "created_at": "2024-01-06 12:00:00", + "updated_at": "2024-01-06 14:00:00", + "cost": 0.0, + "filled": 2.3150023728774323, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 81.861, + "amount": 2.3150023728774323, + "created_at": "2024-01-07 22:00:00", + "updated_at": "2024-01-08 00:00:00", + "cost": 0.0, + "filled": 2.3150023728774323, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 2.3150023728774323, + "remaining": 0.0, + "open_price": 86.393, + "last_reported_price": 81.861, + "opened_at": "2024-01-06 12:00:00", + "closed_at": "2024-01-07 22:00:00", + "updated_at": "2024-01-07 22:00:00", + "net_gain": -10.491590753880502, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 51, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 86.393, + "sell_percentage": 100.0, + "high_water_mark": 88.559, + "stop_loss_price": 82.07334999999999, + "sell_amount": 2.3150023728774323, + "sold_amount": 2.3150023728774323, + "active": false, + "sell_prices": "81.861" + } + ], + "take_profits": [ + { + "trade_id": 51, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 86.393, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 95.0323, + "sell_amount": 0.5787505932193581, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 51, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 86.393, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 99.35194999999999, + "sell_amount": 0.5787505932193581, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 52, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 86.621, + "amount": 2.30890892508745, + "created_at": "2024-01-10 14:00:00", + "updated_at": "2024-01-10 16:00:00", + "cost": 0.0, + "filled": 2.30890892508745, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 92.13, + "amount": 0.5772272312718625, + "created_at": "2024-01-11 14:00:00", + "updated_at": "2024-01-11 16:00:00", + "cost": 0.0, + "filled": 0.5772272312718625, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 81.895, + "amount": 0.0, + "created_at": "2024-01-22 02:00:00", + "updated_at": "2024-01-22 04:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 81.77, + "amount": -1.7316816938155872, + "created_at": "2024-01-22 06:00:00", + "updated_at": "2024-01-22 08:00:00", + "cost": 0.0, + "filled": -1.7316816938155872, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 98.385, + "amount": 0.5772272312718625, + "created_at": "2024-02-09 22:00:00", + "updated_at": "2024-02-10 00:00:00", + "cost": 0.0, + "filled": 0.5772272312718625, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 101.59, + "amount": 2.8861361563593118, + "created_at": "2024-02-12 16:00:00", + "updated_at": "2024-02-12 18:00:00", + "cost": 0.0, + "filled": 2.8861361563593118, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 2.30890892508745, + "remaining": 0.0, + "open_price": 86.621, + "last_reported_price": 101.59, + "opened_at": "2024-01-10 14:00:00", + "closed_at": "2024-02-12 16:00:00", + "updated_at": "2024-02-12 16:00:00", + "net_gain": 61.57340598700084, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 52, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 86.621, + "sell_percentage": 100.0, + "high_water_mark": 96.696, + "stop_loss_price": 82.28994999999999, + "sell_amount": 2.30890892508745, + "sold_amount": 2.30890892508745, + "active": false, + "sell_prices": "81.895,81.77" + } + ], + "take_profits": [ + { + "trade_id": 52, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 86.621, + "sell_percentage": 25.0, + "high_water_mark": 96.696, + "take_profit_price": 95.2831, + "sell_amount": 0.5772272312718625, + "sold_amount": 0.5772272312718625, + "active": false, + "sell_prices": "92.13" + }, + { + "trade_id": 52, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 86.621, + "sell_percentage": 25.0, + "high_water_mark": 100.75, + "take_profit_price": 99.61414999999998, + "sell_amount": 0.5772272312718625, + "sold_amount": 0.5772272312718625, + "active": false, + "sell_prices": "98.385" + } + ] + }, + { + "id": 53, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 7.1314, + "amount": 28.04498415458395, + "created_at": "2024-01-12 16:00:00", + "updated_at": "2024-01-12 18:00:00", + "cost": 0.0, + "filled": 28.04498415458395, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.6965, + "amount": 28.04498415458395, + "created_at": "2024-01-14 22:00:00", + "updated_at": "2024-01-15 00:00:00", + "cost": 0.0, + "filled": 28.04498415458395, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 28.04498415458395, + "remaining": 0.0, + "open_price": 7.1314, + "last_reported_price": 6.6965, + "opened_at": "2024-01-12 16:00:00", + "closed_at": "2024-01-14 22:00:00", + "updated_at": "2024-01-14 22:00:00", + "net_gain": -12.196763608828576, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 53, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 7.1314, + "sell_percentage": 100.0, + "high_water_mark": 7.1314, + "stop_loss_price": 6.77483, + "sell_amount": 28.04498415458395, + "sold_amount": 28.04498415458395, + "active": false, + "sell_prices": "6.6965" + } + ], + "take_profits": [ + { + "trade_id": 53, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 7.1314, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.844540000000001, + "sell_amount": 7.011246038645988, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 53, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 7.1314, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 8.20111, + "sell_amount": 7.011246038645988, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 54, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.6732, + "amount": 29.970628783791884, + "created_at": "2024-01-18 00:00:00", + "updated_at": "2024-01-18 02:00:00", + "cost": 0.0, + "filled": 29.970628783791884, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.3326, + "amount": 29.970628783791884, + "created_at": "2024-01-18 18:00:00", + "updated_at": "2024-01-18 20:00:00", + "cost": 0.0, + "filled": 29.970628783791884, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 29.970628783791884, + "remaining": 0.0, + "open_price": 6.6732, + "last_reported_price": 6.3326, + "opened_at": "2024-01-18 00:00:00", + "closed_at": "2024-01-18 18:00:00", + "updated_at": "2024-01-18 18:00:00", + "net_gain": -10.207996163759503, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 54, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.6732, + "sell_percentage": 100.0, + "high_water_mark": 6.7359, + "stop_loss_price": 6.3395399999999995, + "sell_amount": 29.970628783791884, + "sold_amount": 29.970628783791884, + "active": false, + "sell_prices": "6.3326" + } + ], + "take_profits": [ + { + "trade_id": 54, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.6732, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.34052, + "sell_amount": 7.492657195947971, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 54, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.6732, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.674179999999999, + "sell_amount": 7.492657195947971, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 55, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.2689, + "amount": 31.903523744197546, + "created_at": "2024-01-31 00:00:00", + "updated_at": "2024-01-31 02:00:00", + "cost": 0.0, + "filled": 31.903523744197546, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.3388, + "amount": 31.903523744197546, + "created_at": "2024-02-05 04:00:00", + "updated_at": "2024-02-05 06:00:00", + "cost": 0.0, + "filled": 31.903523744197546, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 31.903523744197546, + "remaining": 0.0, + "open_price": 6.2689, + "last_reported_price": 6.3388, + "opened_at": "2024-01-31 00:00:00", + "closed_at": "2024-02-05 04:00:00", + "updated_at": "2024-02-05 04:00:00", + "net_gain": 2.2300563097194015, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 55, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.2689, + "sell_percentage": 100.0, + "high_water_mark": 6.4674, + "stop_loss_price": 5.955455, + "sell_amount": 31.903523744197546, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 55, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.2689, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.895790000000001, + "sell_amount": 7.9758809360493865, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 55, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.2689, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.209235, + "sell_amount": 7.9758809360493865, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 56, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.5282, + "amount": 30.636316289329372, + "created_at": "2024-02-12 08:00:00", + "updated_at": "2024-02-12 10:00:00", + "cost": 0.0, + "filled": 30.636316289329372, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 7.15, + "amount": 7.659079072332343, + "created_at": "2024-02-14 10:00:00", + "updated_at": "2024-02-14 12:00:00", + "cost": 0.0, + "filled": 7.659079072332343, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.9413, + "amount": 22.97723721699703, + "created_at": "2024-02-22 10:00:00", + "updated_at": "2024-02-22 12:00:00", + "cost": 0.0, + "filled": 22.97723721699703, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 30.636316289329372, + "remaining": 0.0, + "open_price": 6.5282, + "last_reported_price": 6.9413, + "opened_at": "2024-02-12 08:00:00", + "closed_at": "2024-02-22 10:00:00", + "updated_at": "2024-02-22 10:00:00", + "net_gain": 14.25431206151773, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 56, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.5282, + "sell_percentage": 100.0, + "high_water_mark": 7.4364, + "stop_loss_price": 6.20179, + "sell_amount": 30.636316289329372, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 56, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.5282, + "sell_percentage": 25.0, + "high_water_mark": 7.1943, + "take_profit_price": 7.18102, + "sell_amount": 7.659079072332343, + "sold_amount": 7.659079072332343, + "active": false, + "sell_prices": "7.15" + }, + { + "trade_id": 56, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.5282, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.507429999999999, + "sell_amount": 7.659079072332343, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 57, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 105.36, + "amount": 1.8982536066818527, + "created_at": "2024-02-15 16:00:00", + "updated_at": "2024-02-15 18:00:00", + "cost": 0.0, + "filled": 1.8982536066818527, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 99.18, + "amount": 1.8982536066818527, + "created_at": "2024-02-17 12:00:00", + "updated_at": "2024-02-17 14:00:00", + "cost": 0.0, + "filled": 1.8982536066818527, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.8982536066818527, + "remaining": 0.0, + "open_price": 105.36, + "last_reported_price": 99.18, + "opened_at": "2024-02-15 16:00:00", + "closed_at": "2024-02-17 12:00:00", + "updated_at": "2024-02-17 12:00:00", + "net_gain": -11.73120728929382, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 57, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 105.36, + "sell_percentage": 100.0, + "high_water_mark": 105.94, + "stop_loss_price": 100.092, + "sell_amount": 1.8982536066818527, + "sold_amount": 1.8982536066818527, + "active": false, + "sell_prices": "99.18" + } + ], + "take_profits": [ + { + "trade_id": 57, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 105.36, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 115.89600000000002, + "sell_amount": 0.4745634016704632, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 57, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 105.36, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 121.16399999999999, + "sell_amount": 0.4745634016704632, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 58, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 47291.0, + "amount": 0.004229134507623015, + "created_at": "2024-02-17 14:00:00", + "updated_at": "2024-02-20 00:00:00", + "cost": 0.0, + "filled": 0.004229134507623015, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 49225.0, + "amount": 0.004229134507623015, + "created_at": "2024-02-26 16:00:00", + "updated_at": "2024-02-27 00:00:00", + "cost": 0.0, + "filled": 0.004229134507623015, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.004229134507623015, + "remaining": 0.0, + "open_price": 47291.0, + "last_reported_price": 50030.0, + "opened_at": "2024-02-17 14:00:00", + "closed_at": "2024-02-26 16:00:00", + "updated_at": "2024-02-26 16:00:00", + "net_gain": 8.179146137742919, + "cost": 199.99999999999997, + "stop_losses": [ + { + "trade_id": 58, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 47291.0, + "sell_percentage": 100.0, + "high_water_mark": 50030.0, + "stop_loss_price": 44926.45, + "sell_amount": 0.004229134507623015, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 58, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 47291.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 52020.100000000006, + "sell_amount": 0.0010572836269057537, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 58, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 47291.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 54384.649999999994, + "sell_amount": 0.0010572836269057537, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 59, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 98.693, + "amount": 2.0264861742980758, + "created_at": "2024-02-20 14:00:00", + "updated_at": "2024-02-20 16:00:00", + "cost": 0.0, + "filled": 2.0264861742980758, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 92.708, + "amount": 2.0264861742980758, + "created_at": "2024-02-23 14:00:00", + "updated_at": "2024-02-23 16:00:00", + "cost": 0.0, + "filled": 2.0264861742980758, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 2.0264861742980758, + "remaining": 0.0, + "open_price": 98.693, + "last_reported_price": 92.708, + "opened_at": "2024-02-20 14:00:00", + "closed_at": "2024-02-23 14:00:00", + "updated_at": "2024-02-23 14:00:00", + "net_gain": -12.128519753174004, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 59, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 98.693, + "sell_percentage": 100.0, + "high_water_mark": 100.21, + "stop_loss_price": 93.75835, + "sell_amount": 2.0264861742980758, + "sold_amount": 2.0264861742980758, + "active": false, + "sell_prices": "92.708" + } + ], + "take_profits": [ + { + "trade_id": 59, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 98.693, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 108.56230000000001, + "sell_amount": 0.5066215435745189, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 59, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 98.693, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 113.49694999999998, + "sell_amount": 0.5066215435745189, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 60, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 93.697, + "amount": 2.1345400599805755, + "created_at": "2024-02-23 18:00:00", + "updated_at": "2024-02-23 20:00:00", + "cost": 0.0, + "filled": 2.1345400599805755, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 100.9, + "amount": 2.1345400599805755, + "created_at": "2024-02-26 16:00:00", + "updated_at": "2024-02-26 18:00:00", + "cost": 0.0, + "filled": 2.1345400599805755, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 2.1345400599805755, + "remaining": 0.0, + "open_price": 93.697, + "last_reported_price": 100.9, + "opened_at": "2024-02-23 18:00:00", + "closed_at": "2024-02-26 16:00:00", + "updated_at": "2024-02-26 16:00:00", + "net_gain": 15.375092052040088, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 60, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 93.697, + "sell_percentage": 100.0, + "high_water_mark": 100.9, + "stop_loss_price": 89.01215, + "sell_amount": 2.1345400599805755, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 60, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 93.697, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 103.06670000000001, + "sell_amount": 0.5336350149951439, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 60, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 93.697, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 107.75155, + "sell_amount": 0.5336350149951439, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 61, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 118.08, + "amount": 1.6937669376693767, + "created_at": "2024-03-02 14:00:00", + "updated_at": "2024-03-02 16:00:00", + "cost": 0.0, + "filled": 1.6937669376693767, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 109.13, + "amount": 1.6937669376693767, + "created_at": "2024-03-05 18:00:00", + "updated_at": "2024-03-05 20:00:00", + "cost": 0.0, + "filled": 1.6937669376693767, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.6937669376693767, + "remaining": 0.0, + "open_price": 118.08, + "last_reported_price": 109.13, + "opened_at": "2024-03-02 14:00:00", + "closed_at": "2024-03-05 18:00:00", + "updated_at": "2024-03-05 18:00:00", + "net_gain": -15.159214092140928, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 61, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 118.08, + "sell_percentage": 100.0, + "high_water_mark": 127.71, + "stop_loss_price": 112.17599999999999, + "sell_amount": 1.6937669376693767, + "sold_amount": 1.6937669376693767, + "active": false, + "sell_prices": "109.13" + } + ], + "take_profits": [ + { + "trade_id": 61, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 118.08, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 129.888, + "sell_amount": 0.4234417344173442, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 61, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 118.08, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 135.792, + "sell_amount": 0.4234417344173442, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 62, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 9.4198, + "amount": 21.231873288180214, + "created_at": "2024-03-08 04:00:00", + "updated_at": "2024-03-08 06:00:00", + "cost": 0.0, + "filled": 21.231873288180214, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 10.252, + "amount": 5.3079683220450535, + "created_at": "2024-03-14 00:00:00", + "updated_at": "2024-03-14 02:00:00", + "cost": 0.0, + "filled": 5.3079683220450535, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 10.705, + "amount": 5.3079683220450535, + "created_at": "2024-03-14 10:00:00", + "updated_at": "2024-03-14 12:00:00", + "cost": 0.0, + "filled": 5.3079683220450535, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 8.8945, + "amount": 0.0, + "created_at": "2024-03-16 22:00:00", + "updated_at": "2024-03-17 00:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 8.9008, + "amount": -10.615936644090109, + "created_at": "2024-03-17 00:00:00", + "updated_at": "2024-03-17 02:00:00", + "cost": 0.0, + "filled": -10.615936644090109, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.5783, + "amount": 21.231873288180218, + "created_at": "2024-06-04 16:00:00", + "updated_at": "2024-06-04 18:00:00", + "cost": 0.0, + "filled": 21.231873288180218, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 21.231873288180214, + "remaining": 0.0, + "open_price": 9.4198, + "last_reported_price": 6.5783, + "opened_at": "2024-03-08 04:00:00", + "closed_at": "2024-06-04 16:00:00", + "updated_at": "2024-06-04 16:00:00", + "net_gain": -43.58160470498315, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 62, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 9.4198, + "sell_percentage": 100.0, + "high_water_mark": 10.874, + "stop_loss_price": 8.94881, + "sell_amount": 21.231873288180214, + "sold_amount": 21.231873288180214, + "active": false, + "sell_prices": "8.8945,8.9008" + } + ], + "take_profits": [ + { + "trade_id": 62, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 9.4198, + "sell_percentage": 25.0, + "high_water_mark": 10.388, + "take_profit_price": 10.361780000000001, + "sell_amount": 5.3079683220450535, + "sold_amount": 5.3079683220450535, + "active": false, + "sell_prices": "10.252" + }, + { + "trade_id": 62, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 9.4198, + "sell_percentage": 25.0, + "high_water_mark": 10.874, + "take_profit_price": 10.83277, + "sell_amount": 5.3079683220450535, + "sold_amount": 5.3079683220450535, + "active": false, + "sell_prices": "10.705" + } + ] + }, + { + "id": 63, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 63699.0, + "amount": 0.0031397667153330506, + "created_at": "2024-03-14 18:00:00", + "updated_at": "2024-03-15 00:00:00", + "cost": 0.0, + "filled": 0.0031397667153330506, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59842.0, + "amount": 0.0031397667153330506, + "created_at": "2024-03-16 00:00:00", + "updated_at": "2024-03-16 02:00:00", + "cost": 0.0, + "filled": 0.0031397667153330506, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.0031397667153330506, + "remaining": 0.0, + "open_price": 63699.0, + "last_reported_price": 59842.0, + "opened_at": "2024-03-14 18:00:00", + "closed_at": "2024-03-16 00:00:00", + "updated_at": "2024-03-16 00:00:00", + "net_gain": -12.110080221039595, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 63, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 63699.0, + "sell_percentage": 100.0, + "high_water_mark": 63859.0, + "stop_loss_price": 60514.049999999996, + "sell_amount": 0.0031397667153330506, + "sold_amount": 0.0031397667153330506, + "active": false, + "sell_prices": "59842.0" + } + ], + "take_profits": [ + { + "trade_id": 63, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 63699.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 70068.90000000001, + "sell_amount": 0.0007849416788332627, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 63, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 63699.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 73253.84999999999, + "sell_amount": 0.0007849416788332627, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 64, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59842.0, + "amount": 0.00334213428695565, + "created_at": "2024-03-16 22:00:00", + "updated_at": "2024-03-17 00:00:00", + "cost": 0.0, + "filled": 0.00334213428695565, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 64924.0, + "amount": 0.0008355335717389125, + "created_at": "2024-04-01 00:00:00", + "updated_at": "2024-04-01 02:00:00", + "cost": 0.0, + "filled": 0.0008355335717389125, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 65147.0, + "amount": 0.0025066007152167373, + "created_at": "2024-04-10 20:00:00", + "updated_at": "2024-04-11 00:00:00", + "cost": 0.0, + "filled": 0.0025066007152167373, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.00334213428695565, + "remaining": 0.0, + "open_price": 59842.0, + "last_reported_price": 65720.0, + "opened_at": "2024-03-16 22:00:00", + "closed_at": "2024-04-10 20:00:00", + "updated_at": "2024-04-10 20:00:00", + "net_gain": 17.543698405801926, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 64, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 59842.0, + "sell_percentage": 100.0, + "high_water_mark": 66064.0, + "stop_loss_price": 56849.899999999994, + "sell_amount": 0.00334213428695565, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 64, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 59842.0, + "sell_percentage": 25.0, + "high_water_mark": 66064.0, + "take_profit_price": 65826.20000000001, + "sell_amount": 0.0008355335717389125, + "sold_amount": 0.0008355335717389125, + "active": false, + "sell_prices": "64924.0" + }, + { + "trade_id": 64, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 59842.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 68818.29999999999, + "sell_amount": 0.0008355335717389125, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 65, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 171.55, + "amount": 1.1658408627222383, + "created_at": "2024-03-19 06:00:00", + "updated_at": "2024-03-19 08:00:00", + "cost": 0.0, + "filled": 1.1658408627222383, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 159.18, + "amount": 1.1658408627222383, + "created_at": "2024-03-19 20:00:00", + "updated_at": "2024-03-19 22:00:00", + "cost": 0.0, + "filled": 1.1658408627222383, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.1658408627222383, + "remaining": 0.0, + "open_price": 171.55, + "last_reported_price": 159.18, + "opened_at": "2024-03-19 06:00:00", + "closed_at": "2024-03-19 20:00:00", + "updated_at": "2024-03-19 20:00:00", + "net_gain": -14.421451471874093, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 65, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 171.55, + "sell_percentage": 100.0, + "high_water_mark": 171.55, + "stop_loss_price": 162.9725, + "sell_amount": 1.1658408627222383, + "sold_amount": 1.1658408627222383, + "active": false, + "sell_prices": "159.18" + } + ], + "take_profits": [ + { + "trade_id": 65, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 171.55, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 188.70500000000004, + "sell_amount": 0.2914602156805596, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 65, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 171.55, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 197.2825, + "sell_amount": 0.2914602156805596, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 66, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 156.14, + "amount": 1.2809017548354042, + "created_at": "2024-03-19 22:00:00", + "updated_at": "2024-03-20 00:00:00", + "cost": 0.0, + "filled": 1.2809017548354042, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 170.75, + "amount": 0.32022543870885106, + "created_at": "2024-03-21 14:00:00", + "updated_at": "2024-03-21 16:00:00", + "cost": 0.0, + "filled": 0.32022543870885106, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 178.96, + "amount": 0.32022543870885106, + "created_at": "2024-03-26 06:00:00", + "updated_at": "2024-03-26 08:00:00", + "cost": 0.0, + "filled": 0.32022543870885106, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 168.55, + "amount": 0.6404508774177022, + "created_at": "2024-04-08 10:00:00", + "updated_at": "2024-04-08 12:00:00", + "cost": 0.0, + "filled": 0.6404508774177022, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.2809017548354042, + "remaining": 0.0, + "open_price": 156.14, + "last_reported_price": 168.55, + "opened_at": "2024-03-19 22:00:00", + "closed_at": "2024-04-08 10:00:00", + "updated_at": "2024-04-08 10:00:00", + "net_gain": 19.934033559626023, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 66, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 156.14, + "sell_percentage": 100.0, + "high_water_mark": 188.32, + "stop_loss_price": 148.33299999999997, + "sell_amount": 1.2809017548354042, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 66, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 156.14, + "sell_percentage": 25.0, + "high_water_mark": 175.62, + "take_profit_price": 171.754, + "sell_amount": 0.32022543870885106, + "sold_amount": 0.32022543870885106, + "active": false, + "sell_prices": "170.75" + }, + { + "trade_id": 66, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 156.14, + "sell_percentage": 25.0, + "high_water_mark": 179.58, + "take_profit_price": 179.56099999999998, + "sell_amount": 0.32022543870885106, + "sold_amount": 0.32022543870885106, + "active": false, + "sell_prices": "178.96" + } + ] + }, + { + "id": 67, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3085.6, + "amount": 0.06481721545242417, + "created_at": "2024-03-22 12:00:00", + "updated_at": "2024-03-22 14:00:00", + "cost": 0.0, + "filled": 0.06481721545242417, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3390.5, + "amount": 0.01620430386310604, + "created_at": "2024-04-08 20:00:00", + "updated_at": "2024-04-08 22:00:00", + "cost": 0.0, + "filled": 0.01620430386310604, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2914.8, + "amount": 0.0, + "created_at": "2024-04-13 18:00:00", + "updated_at": "2024-04-13 20:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2813.8, + "amount": -0.04861291158931813, + "created_at": "2024-04-13 20:00:00", + "updated_at": "2024-04-13 22:00:00", + "cost": 0.0, + "filled": -0.04861291158931813, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3487.0, + "amount": 0.01620430386310604, + "created_at": "2024-05-23 12:00:00", + "updated_at": "2024-05-23 14:00:00", + "cost": 0.0, + "filled": 0.01620430386310604, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3320.9, + "amount": 0.08102151931553023, + "created_at": "2024-06-19 02:00:00", + "updated_at": "2024-06-19 04:00:00", + "cost": 0.0, + "filled": 0.08102151931553023, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.06481721545242417, + "remaining": 0.0, + "open_price": 3085.6, + "last_reported_price": 3320.9, + "opened_at": "2024-03-22 12:00:00", + "closed_at": "2024-06-19 02:00:00", + "updated_at": "2024-06-19 02:00:00", + "net_gain": 43.72245268343276, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 67, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 3085.6, + "sell_percentage": 100.0, + "high_water_mark": 3405.2, + "stop_loss_price": 2931.3199999999997, + "sell_amount": 0.06481721545242417, + "sold_amount": 0.06481721545242417, + "active": false, + "sell_prices": "2914.8,2813.8" + } + ], + "take_profits": [ + { + "trade_id": 67, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 3085.6, + "sell_percentage": 25.0, + "high_water_mark": 3405.2, + "take_profit_price": 3394.1600000000003, + "sell_amount": 0.01620430386310604, + "sold_amount": 0.01620430386310604, + "active": false, + "sell_prices": "3390.5" + }, + { + "trade_id": 67, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 3085.6, + "sell_percentage": 25.0, + "high_water_mark": 3609.9, + "take_profit_price": 3548.4399999999996, + "sell_amount": 0.01620430386310604, + "sold_amount": 0.01620430386310604, + "active": false, + "sell_prices": "3487.0" + } + ] + }, + { + "id": 68, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 63368.0, + "amount": 0.0031561671506122966, + "created_at": "2024-04-12 20:00:00", + "updated_at": "2024-04-13 00:00:00", + "cost": 0.0, + "filled": 0.0031561671506122966, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59799.0, + "amount": 0.0031561671506122966, + "created_at": "2024-04-15 00:00:00", + "updated_at": "2024-04-15 02:00:00", + "cost": 0.0, + "filled": 0.0031561671506122966, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.0031561671506122966, + "remaining": 0.0, + "open_price": 63368.0, + "last_reported_price": 59799.0, + "opened_at": "2024-04-12 20:00:00", + "closed_at": "2024-04-15 00:00:00", + "updated_at": "2024-04-15 00:00:00", + "net_gain": -11.264360560535266, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 68, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 63368.0, + "sell_percentage": 100.0, + "high_water_mark": 63368.0, + "stop_loss_price": 60199.6, + "sell_amount": 0.0031561671506122966, + "sold_amount": 0.0031561671506122966, + "active": false, + "sell_prices": "59799.0" + } + ], + "take_profits": [ + { + "trade_id": 68, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 63368.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 69704.8, + "sell_amount": 0.0007890417876530741, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 68, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 63368.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 72873.2, + "sell_amount": 0.0007890417876530741, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 69, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 138.32, + "amount": 1.4459224985540775, + "created_at": "2024-04-13 00:00:00", + "updated_at": "2024-04-13 02:00:00", + "cost": 0.0, + "filled": 1.4459224985540775, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 131.04, + "amount": 1.4459224985540775, + "created_at": "2024-04-13 16:00:00", + "updated_at": "2024-04-13 18:00:00", + "cost": 0.0, + "filled": 1.4459224985540775, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.4459224985540775, + "remaining": 0.0, + "open_price": 138.32, + "last_reported_price": 131.04, + "opened_at": "2024-04-13 00:00:00", + "closed_at": "2024-04-13 16:00:00", + "updated_at": "2024-04-13 16:00:00", + "net_gain": -10.5263157894737, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 69, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 138.32, + "sell_percentage": 100.0, + "high_water_mark": 145.28, + "stop_loss_price": 131.404, + "sell_amount": 1.4459224985540775, + "sold_amount": 1.4459224985540775, + "active": false, + "sell_prices": "131.04" + } + ], + "take_profits": [ + { + "trade_id": 69, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 138.32, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 152.15200000000002, + "sell_amount": 0.3614806246385194, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 69, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 138.32, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 159.06799999999998, + "sell_amount": 0.3614806246385194, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 70, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 126.46, + "amount": 1.5815277558121146, + "created_at": "2024-04-13 18:00:00", + "updated_at": "2024-04-13 20:00:00", + "cost": 0.0, + "filled": 1.5815277558121146, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 135.03, + "amount": 0.39538193895302864, + "created_at": "2024-04-15 14:00:00", + "updated_at": "2024-04-15 16:00:00", + "cost": 0.0, + "filled": 0.39538193895302864, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 120.12, + "amount": 0.0, + "created_at": "2024-04-16 14:00:00", + "updated_at": "2024-04-16 16:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 142.24, + "amount": 1.186145816859086, + "created_at": "2024-04-20 18:00:00", + "updated_at": "2024-04-20 20:00:00", + "cost": 0.0, + "filled": 1.186145816859086, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.5815277558121146, + "remaining": 0.0, + "open_price": 126.46, + "last_reported_price": 142.24, + "opened_at": "2024-04-13 18:00:00", + "closed_at": "2024-04-20 18:00:00", + "updated_at": "2024-04-20 18:00:00", + "net_gain": 22.105804206863844, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 70, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 126.46, + "sell_percentage": 100.0, + "high_water_mark": 145.19, + "stop_loss_price": 120.13699999999999, + "sell_amount": 1.5815277558121146, + "sold_amount": 2.7676735726712005, + "active": false, + "sell_prices": "120.12" + } + ], + "take_profits": [ + { + "trade_id": 70, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 126.46, + "sell_percentage": 25.0, + "high_water_mark": 145.19, + "take_profit_price": 139.106, + "sell_amount": 0.39538193895302864, + "sold_amount": 0.39538193895302864, + "active": false, + "sell_prices": "135.03" + }, + { + "trade_id": 70, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 126.46, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 145.42899999999997, + "sell_amount": 0.39538193895302864, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 71, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59777.0, + "amount": 0.0033457684393663114, + "created_at": "2024-04-24 18:00:00", + "updated_at": "2024-04-25 00:00:00", + "cost": 0.0, + "filled": 0.0033457684393663114, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 54414.0, + "amount": 0.0033457684393663114, + "created_at": "2024-05-01 00:00:00", + "updated_at": "2024-05-01 02:00:00", + "cost": 0.0, + "filled": 0.0033457684393663114, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.0033457684393663114, + "remaining": 0.0, + "open_price": 59777.0, + "last_reported_price": 54414.0, + "opened_at": "2024-04-24 18:00:00", + "closed_at": "2024-05-01 00:00:00", + "updated_at": "2024-05-01 00:00:00", + "net_gain": -17.943356140321526, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 71, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 59777.0, + "sell_percentage": 100.0, + "high_water_mark": 60159.0, + "stop_loss_price": 56788.149999999994, + "sell_amount": 0.0033457684393663114, + "sold_amount": 0.0033457684393663114, + "active": false, + "sell_prices": "54414.0" + } + ], + "take_profits": [ + { + "trade_id": 71, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 59777.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 65754.70000000001, + "sell_amount": 0.0008364421098415778, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 71, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 59777.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 68743.54999999999, + "sell_amount": 0.0008364421098415778, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 72, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 125.94, + "amount": 1.588057805304113, + "created_at": "2024-04-29 06:00:00", + "updated_at": "2024-04-29 08:00:00", + "cost": 0.0, + "filled": 1.588057805304113, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 119.23, + "amount": 1.588057805304113, + "created_at": "2024-04-30 12:00:00", + "updated_at": "2024-04-30 14:00:00", + "cost": 0.0, + "filled": 1.588057805304113, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.588057805304113, + "remaining": 0.0, + "open_price": 125.94, + "last_reported_price": 119.23, + "opened_at": "2024-04-29 06:00:00", + "closed_at": "2024-04-30 12:00:00", + "updated_at": "2024-04-30 12:00:00", + "net_gain": -10.655867873590608, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 72, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 125.94, + "sell_percentage": 100.0, + "high_water_mark": 128.47, + "stop_loss_price": 119.64299999999999, + "sell_amount": 1.588057805304113, + "sold_amount": 1.588057805304113, + "active": false, + "sell_prices": "119.23" + } + ], + "take_profits": [ + { + "trade_id": 72, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 125.94, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 138.53400000000002, + "sell_amount": 0.39701445132602825, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 72, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 125.94, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 144.831, + "sell_amount": 0.39701445132602825, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 73, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 119.37, + "amount": 1.6754628466113763, + "created_at": "2024-04-30 14:00:00", + "updated_at": "2024-04-30 16:00:00", + "cost": 0.0, + "filled": 1.6754628466113763, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 112.86, + "amount": 1.6754628466113763, + "created_at": "2024-05-01 06:00:00", + "updated_at": "2024-05-01 08:00:00", + "cost": 0.0, + "filled": 1.6754628466113763, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.6754628466113763, + "remaining": 0.0, + "open_price": 119.37, + "last_reported_price": 112.86, + "opened_at": "2024-04-30 14:00:00", + "closed_at": "2024-05-01 06:00:00", + "updated_at": "2024-05-01 06:00:00", + "net_gain": -10.907263131440061, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 73, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 119.37, + "sell_percentage": 100.0, + "high_water_mark": 119.37, + "stop_loss_price": 113.4015, + "sell_amount": 1.6754628466113763, + "sold_amount": 1.6754628466113763, + "active": false, + "sell_prices": "112.86" + } + ], + "take_profits": [ + { + "trade_id": 73, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 119.37, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 131.30700000000002, + "sell_amount": 0.4188657116528441, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 73, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 119.37, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 137.2755, + "sell_amount": 0.4188657116528441, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 74, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56464.0, + "amount": 0.0035420799093227543, + "created_at": "2024-05-01 02:00:00", + "updated_at": "2024-05-02 00:00:00", + "cost": 0.0, + "filled": 0.0035420799093227543, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 63795.0, + "amount": 0.0035420799093227543, + "created_at": "2024-05-24 18:00:00", + "updated_at": "2024-05-25 00:00:00", + "cost": 0.0, + "filled": 0.0035420799093227543, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.0035420799093227543, + "remaining": 0.0, + "open_price": 56464.0, + "last_reported_price": 63267.0, + "opened_at": "2024-05-01 02:00:00", + "closed_at": "2024-05-24 18:00:00", + "updated_at": "2024-05-24 18:00:00", + "net_gain": 25.96698781524512, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 74, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 56464.0, + "sell_percentage": 100.0, + "high_water_mark": 64262.0, + "stop_loss_price": 53640.799999999996, + "sell_amount": 0.0035420799093227543, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 74, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 56464.0, + "sell_percentage": 25.0, + "high_water_mark": 64262.0, + "take_profit_price": 62110.4, + "sell_amount": 0.0008855199773306886, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 74, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 56464.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 64933.6, + "sell_amount": 0.0008855199773306886, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 75, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 137.07, + "amount": 1.4591084847158386, + "created_at": "2024-05-08 04:00:00", + "updated_at": "2024-05-08 06:00:00", + "cost": 0.0, + "filled": 1.4591084847158386, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 130.08, + "amount": 1.4591084847158386, + "created_at": "2024-05-13 02:00:00", + "updated_at": "2024-05-13 04:00:00", + "cost": 0.0, + "filled": 1.4591084847158386, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.4591084847158386, + "remaining": 0.0, + "open_price": 137.07, + "last_reported_price": 130.08, + "opened_at": "2024-05-08 04:00:00", + "closed_at": "2024-05-13 02:00:00", + "updated_at": "2024-05-13 02:00:00", + "net_gain": -10.199168308163678, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 75, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 137.07, + "sell_percentage": 100.0, + "high_water_mark": 143.8, + "stop_loss_price": 130.2165, + "sell_amount": 1.4591084847158386, + "sold_amount": 1.4591084847158386, + "active": false, + "sell_prices": "130.08" + } + ], + "take_profits": [ + { + "trade_id": 75, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 137.07, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 150.77700000000002, + "sell_amount": 0.36477712117895966, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 75, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 137.07, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 157.63049999999998, + "sell_amount": 0.36477712117895966, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 76, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 157.94, + "amount": 1.2663036596175763, + "created_at": "2024-05-23 12:00:00", + "updated_at": "2024-05-23 14:00:00", + "cost": 0.0, + "filled": 1.2663036596175763, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 149.35, + "amount": 1.2663036596175763, + "created_at": "2024-05-26 16:00:00", + "updated_at": "2024-05-26 18:00:00", + "cost": 0.0, + "filled": 1.2663036596175763, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.2663036596175763, + "remaining": 0.0, + "open_price": 157.94, + "last_reported_price": 149.35, + "opened_at": "2024-05-23 12:00:00", + "closed_at": "2024-05-26 16:00:00", + "updated_at": "2024-05-26 16:00:00", + "net_gain": -10.877548436114978, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 76, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 157.94, + "sell_percentage": 100.0, + "high_water_mark": 165.65, + "stop_loss_price": 150.04299999999998, + "sell_amount": 1.2663036596175763, + "sold_amount": 1.2663036596175763, + "active": false, + "sell_prices": "149.35" + } + ], + "take_profits": [ + { + "trade_id": 76, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 157.94, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 173.734, + "sell_amount": 0.3165759149043941, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 76, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 157.94, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 181.63099999999997, + "sell_amount": 0.3165759149043941, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 77, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 63175.0, + "amount": 0.0031658092599920855, + "created_at": "2024-05-26 22:00:00", + "updated_at": "2024-05-27 00:00:00", + "cost": 0.0, + "filled": 0.0031658092599920855, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59983.0, + "amount": 0.0031658092599920855, + "created_at": "2024-06-21 00:00:00", + "updated_at": "2024-06-21 02:00:00", + "cost": 0.0, + "filled": 0.0031658092599920855, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.0031658092599920855, + "remaining": 0.0, + "open_price": 63175.0, + "last_reported_price": 59983.0, + "opened_at": "2024-05-26 22:00:00", + "closed_at": "2024-06-21 00:00:00", + "updated_at": "2024-06-21 00:00:00", + "net_gain": -10.10526315789474, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 77, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 63175.0, + "sell_percentage": 100.0, + "high_water_mark": 65315.0, + "stop_loss_price": 60016.25, + "sell_amount": 0.0031658092599920855, + "sold_amount": 0.0031658092599920855, + "active": false, + "sell_prices": "59983.0" + } + ], + "take_profits": [ + { + "trade_id": 77, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 63175.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 69492.5, + "sell_amount": 0.0007914523149980214, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 77, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 63175.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 72651.25, + "sell_amount": 0.0007914523149980214, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 78, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 155.25, + "amount": 1.288244766505636, + "created_at": "2024-06-06 18:00:00", + "updated_at": "2024-06-06 20:00:00", + "cost": 0.0, + "filled": 1.288244766505636, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 147.38, + "amount": 1.288244766505636, + "created_at": "2024-06-08 20:00:00", + "updated_at": "2024-06-08 22:00:00", + "cost": 0.0, + "filled": 1.288244766505636, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.288244766505636, + "remaining": 0.0, + "open_price": 155.25, + "last_reported_price": 147.38, + "opened_at": "2024-06-06 18:00:00", + "closed_at": "2024-06-08 20:00:00", + "updated_at": "2024-06-08 20:00:00", + "net_gain": -10.13848631239938, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 78, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 155.25, + "sell_percentage": 100.0, + "high_water_mark": 158.2, + "stop_loss_price": 147.48749999999998, + "sell_amount": 1.288244766505636, + "sold_amount": 1.288244766505636, + "active": false, + "sell_prices": "147.38" + } + ], + "take_profits": [ + { + "trade_id": 78, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 155.25, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 170.775, + "sell_amount": 0.322061191626409, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 78, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 155.25, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 178.5375, + "sell_amount": 0.322061191626409, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 79, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.5391, + "amount": 30.58524873453533, + "created_at": "2024-06-06 20:00:00", + "updated_at": "2024-06-06 22:00:00", + "cost": 0.0, + "filled": 30.58524873453533, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.1132, + "amount": 30.58524873453533, + "created_at": "2024-06-07 18:00:00", + "updated_at": "2024-06-07 20:00:00", + "cost": 0.0, + "filled": 30.58524873453533, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 30.58524873453533, + "remaining": 0.0, + "open_price": 6.5391, + "last_reported_price": 6.1132, + "opened_at": "2024-06-06 20:00:00", + "closed_at": "2024-06-07 18:00:00", + "updated_at": "2024-06-07 18:00:00", + "net_gain": -13.026257436038634, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 79, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.5391, + "sell_percentage": 100.0, + "high_water_mark": 6.6653, + "stop_loss_price": 6.2121450000000005, + "sell_amount": 30.58524873453533, + "sold_amount": 30.58524873453533, + "active": false, + "sell_prices": "6.1132" + } + ], + "take_profits": [ + { + "trade_id": 79, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.5391, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.193010000000001, + "sell_amount": 7.646312183633833, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 79, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.5391, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.519965, + "sell_amount": 7.646312183633833, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 80, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.1479, + "amount": 32.53143349761707, + "created_at": "2024-06-07 20:00:00", + "updated_at": "2024-06-07 22:00:00", + "cost": 0.0, + "filled": 32.53143349761707, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.818, + "amount": 32.53143349761707, + "created_at": "2024-06-11 12:00:00", + "updated_at": "2024-06-11 14:00:00", + "cost": 0.0, + "filled": 32.53143349761707, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 32.53143349761707, + "remaining": 0.0, + "open_price": 6.1479, + "last_reported_price": 5.818, + "opened_at": "2024-06-07 20:00:00", + "closed_at": "2024-06-11 12:00:00", + "updated_at": "2024-06-11 12:00:00", + "net_gain": -10.732119910863872, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 80, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.1479, + "sell_percentage": 100.0, + "high_water_mark": 6.1822, + "stop_loss_price": 5.840504999999999, + "sell_amount": 32.53143349761707, + "sold_amount": 32.53143349761707, + "active": false, + "sell_prices": "5.818" + } + ], + "take_profits": [ + { + "trade_id": 80, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.1479, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.76269, + "sell_amount": 8.132858374404268, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 80, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.1479, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.070085, + "sell_amount": 8.132858374404268, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 81, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 138.45, + "amount": 1.444564824846515, + "created_at": "2024-06-13 16:00:00", + "updated_at": "2024-06-13 18:00:00", + "cost": 0.0, + "filled": 1.444564824846515, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 131.52, + "amount": 1.444564824846515, + "created_at": "2024-06-17 14:00:00", + "updated_at": "2024-06-17 16:00:00", + "cost": 0.0, + "filled": 1.444564824846515, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.444564824846515, + "remaining": 0.0, + "open_price": 138.45, + "last_reported_price": 131.52, + "opened_at": "2024-06-13 16:00:00", + "closed_at": "2024-06-17 14:00:00", + "updated_at": "2024-06-17 14:00:00", + "net_gain": -10.010834236186327, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 81, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 138.45, + "sell_percentage": 100.0, + "high_water_mark": 141.35, + "stop_loss_price": 131.52749999999997, + "sell_amount": 1.444564824846515, + "sold_amount": 1.444564824846515, + "active": false, + "sell_prices": "131.52" + } + ], + "take_profits": [ + { + "trade_id": 81, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 138.45, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 152.295, + "sell_amount": 0.36114120621162876, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 81, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 138.45, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 159.21749999999997, + "sell_amount": 0.36114120621162876, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 82, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.9848, + "amount": 33.4179922470258, + "created_at": "2024-06-13 20:00:00", + "updated_at": "2024-06-13 22:00:00", + "cost": 0.0, + "filled": 33.4179922470258, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.68, + "amount": 33.4179922470258, + "created_at": "2024-06-17 14:00:00", + "updated_at": "2024-06-17 16:00:00", + "cost": 0.0, + "filled": 33.4179922470258, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 33.4179922470258, + "remaining": 0.0, + "open_price": 5.9848, + "last_reported_price": 5.68, + "opened_at": "2024-06-13 20:00:00", + "closed_at": "2024-06-17 14:00:00", + "updated_at": "2024-06-17 14:00:00", + "net_gain": -10.185804036893472, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 82, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 5.9848, + "sell_percentage": 100.0, + "high_water_mark": 6.0187, + "stop_loss_price": 5.68556, + "sell_amount": 33.4179922470258, + "sold_amount": 33.4179922470258, + "active": false, + "sell_prices": "5.68" + } + ], + "take_profits": [ + { + "trade_id": 82, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 5.9848, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.58328, + "sell_amount": 8.35449806175645, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 82, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 5.9848, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.8825199999999995, + "sell_amount": 8.35449806175645, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 83, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.6638, + "amount": 35.31198135527384, + "created_at": "2024-06-17 22:00:00", + "updated_at": "2024-06-18 00:00:00", + "cost": 0.0, + "filled": 35.31198135527384, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.2606, + "amount": 35.31198135527384, + "created_at": "2024-06-18 00:00:00", + "updated_at": "2024-06-18 02:00:00", + "cost": 0.0, + "filled": 35.31198135527384, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 35.31198135527384, + "remaining": 0.0, + "open_price": 5.6638, + "last_reported_price": 5.2606, + "opened_at": "2024-06-17 22:00:00", + "closed_at": "2024-06-18 00:00:00", + "updated_at": "2024-06-18 00:00:00", + "net_gain": -14.237790882446404, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 83, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 5.6638, + "sell_percentage": 100.0, + "high_water_mark": 5.6638, + "stop_loss_price": 5.38061, + "sell_amount": 35.31198135527384, + "sold_amount": 35.31198135527384, + "active": false, + "sell_prices": "5.2606" + } + ], + "take_profits": [ + { + "trade_id": 83, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 5.6638, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.230180000000001, + "sell_amount": 8.82799533881846, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 83, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 5.6638, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.51337, + "sell_amount": 8.82799533881846, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 84, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 123.81, + "amount": 1.61537840239076, + "created_at": "2024-06-18 00:00:00", + "updated_at": "2024-06-18 02:00:00", + "cost": 0.0, + "filled": 1.61537840239076, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 115.7, + "amount": 1.61537840239076, + "created_at": "2024-06-24 04:00:00", + "updated_at": "2024-06-24 06:00:00", + "cost": 0.0, + "filled": 1.61537840239076, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.61537840239076, + "remaining": 0.0, + "open_price": 123.81, + "last_reported_price": 115.7, + "opened_at": "2024-06-18 00:00:00", + "closed_at": "2024-06-24 04:00:00", + "updated_at": "2024-06-24 04:00:00", + "net_gain": -13.100718843389046, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 84, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 123.81, + "sell_percentage": 100.0, + "high_water_mark": 130.61, + "stop_loss_price": 117.6195, + "sell_amount": 1.61537840239076, + "sold_amount": 1.61537840239076, + "active": false, + "sell_prices": "115.7" + } + ], + "take_profits": [ + { + "trade_id": 84, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 123.81, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 136.191, + "sell_amount": 0.40384460059769, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 84, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 123.81, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 142.3815, + "sell_amount": 0.40384460059769, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 85, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.38, + "amount": 37.17472118959108, + "created_at": "2024-06-18 02:00:00", + "updated_at": "2024-06-18 04:00:00", + "cost": 0.0, + "filled": 37.17472118959108, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.8961, + "amount": 9.29368029739777, + "created_at": "2024-06-27 20:00:00", + "updated_at": "2024-06-27 22:00:00", + "cost": 0.0, + "filled": 9.29368029739777, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.0064, + "amount": 0.0, + "created_at": "2024-07-05 00:00:00", + "updated_at": "2024-07-05 02:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.6771, + "amount": -27.88104089219331, + "created_at": "2024-07-05 02:00:00", + "updated_at": "2024-07-05 04:00:00", + "cost": 0.0, + "filled": -27.88104089219331, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.8953, + "amount": 55.76208178438662, + "created_at": "2024-07-16 16:00:00", + "updated_at": "2024-07-16 18:00:00", + "cost": 0.0, + "filled": 55.76208178438662, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 37.17472118959108, + "remaining": 0.0, + "open_price": 5.38, + "last_reported_price": 5.8953, + "opened_at": "2024-06-18 02:00:00", + "closed_at": "2024-07-16 16:00:00", + "updated_at": "2024-07-16 16:00:00", + "net_gain": 53.128252788104085, + "cost": 200.00000000000003, + "stop_losses": [ + { + "trade_id": 85, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 5.38, + "sell_percentage": 100.0, + "high_water_mark": 6.1002, + "stop_loss_price": 5.111, + "sell_amount": 37.17472118959108, + "sold_amount": 37.17472118959108, + "active": false, + "sell_prices": "5.0064,4.6771" + } + ], + "take_profits": [ + { + "trade_id": 85, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 5.38, + "sell_percentage": 25.0, + "high_water_mark": 5.9237, + "take_profit_price": 5.918, + "sell_amount": 9.29368029739777, + "sold_amount": 9.29368029739777, + "active": false, + "sell_prices": "5.8961" + }, + { + "trade_id": 85, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 5.38, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.186999999999999, + "sell_amount": 9.29368029739777, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 86, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59657.0, + "amount": 0.003352498449469467, + "created_at": "2024-06-21 10:00:00", + "updated_at": "2024-06-23 00:00:00", + "cost": 0.0, + "filled": 0.003352498449469467, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56158.0, + "amount": 0.003352498449469467, + "created_at": "2024-06-24 00:00:00", + "updated_at": "2024-06-24 02:00:00", + "cost": 0.0, + "filled": 0.003352498449469467, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.003352498449469467, + "remaining": 0.0, + "open_price": 59657.0, + "last_reported_price": 56158.0, + "opened_at": "2024-06-21 10:00:00", + "closed_at": "2024-06-24 00:00:00", + "updated_at": "2024-06-24 00:00:00", + "net_gain": -11.730392074693668, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 86, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 59657.0, + "sell_percentage": 100.0, + "high_water_mark": 59657.0, + "stop_loss_price": 56674.149999999994, + "sell_amount": 0.003352498449469467, + "sold_amount": 0.003352498449469467, + "active": false, + "sell_prices": "56158.0" + } + ], + "take_profits": [ + { + "trade_id": 86, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 59657.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 65622.70000000001, + "sell_amount": 0.0008381246123673668, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 86, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 59657.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 68605.54999999999, + "sell_amount": 0.0008381246123673668, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 87, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56798.0, + "amount": 0.003521250748265784, + "created_at": "2024-06-27 04:00:00", + "updated_at": "2024-06-28 00:00:00", + "cost": 0.0, + "filled": 0.003521250748265784, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 52808.0, + "amount": 0.003521250748265784, + "created_at": "2024-07-04 00:00:00", + "updated_at": "2024-07-04 02:00:00", + "cost": 0.0, + "filled": 0.003521250748265784, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.003521250748265784, + "remaining": 0.0, + "open_price": 56798.0, + "last_reported_price": 52808.0, + "opened_at": "2024-06-27 04:00:00", + "closed_at": "2024-07-04 00:00:00", + "updated_at": "2024-07-04 00:00:00", + "net_gain": -14.049790485580473, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 87, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 56798.0, + "sell_percentage": 100.0, + "high_water_mark": 58548.0, + "stop_loss_price": 53958.1, + "sell_amount": 0.003521250748265784, + "sold_amount": 0.003521250748265784, + "active": false, + "sell_prices": "52808.0" + } + ], + "take_profits": [ + { + "trade_id": 87, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 56798.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 62477.8, + "sell_amount": 0.000880312687066446, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 87, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 56798.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 65317.7, + "sell_amount": 0.000880312687066446, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 88, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 131.77, + "amount": 1.517796159975715, + "created_at": "2024-06-28 16:00:00", + "updated_at": "2024-06-28 18:00:00", + "cost": 0.0, + "filled": 1.517796159975715, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 132.85, + "amount": 1.517796159975715, + "created_at": "2024-06-30 12:00:00", + "updated_at": "2024-06-30 14:00:00", + "cost": 0.0, + "filled": 1.517796159975715, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.517796159975715, + "remaining": 0.0, + "open_price": 131.77, + "last_reported_price": 132.85, + "opened_at": "2024-06-28 16:00:00", + "closed_at": "2024-06-30 12:00:00", + "updated_at": "2024-06-30 12:00:00", + "net_gain": 1.6392198527737207, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 88, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 131.77, + "sell_percentage": 100.0, + "high_water_mark": 133.18, + "stop_loss_price": 125.1815, + "sell_amount": 1.517796159975715, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 88, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 131.77, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 144.94700000000003, + "sell_amount": 0.37944903999392876, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 88, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 131.77, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 151.5355, + "sell_amount": 0.37944903999392876, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 89, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3158.6, + "amount": 0.06331919204710948, + "created_at": "2024-06-29 04:00:00", + "updated_at": "2024-06-29 06:00:00", + "cost": 0.0, + "filled": 0.06331919204710948, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2979.0, + "amount": 0.06331919204710948, + "created_at": "2024-07-04 00:00:00", + "updated_at": "2024-07-04 02:00:00", + "cost": 0.0, + "filled": 0.06331919204710948, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.06331919204710948, + "remaining": 0.0, + "open_price": 3158.6, + "last_reported_price": 2979.0, + "opened_at": "2024-06-29 04:00:00", + "closed_at": "2024-07-04 00:00:00", + "updated_at": "2024-07-04 00:00:00", + "net_gain": -11.372126891660855, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 89, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 3158.6, + "sell_percentage": 100.0, + "high_water_mark": 3269.5, + "stop_loss_price": 3000.6699999999996, + "sell_amount": 0.06331919204710948, + "sold_amount": 0.06331919204710948, + "active": false, + "sell_prices": "2979.0" + } + ], + "take_profits": [ + { + "trade_id": 89, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 3158.6, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 3474.46, + "sell_amount": 0.01582979801177737, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 89, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 3158.6, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 3632.3899999999994, + "sell_amount": 0.01582979801177737, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 90, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 131.1, + "amount": 1.5255530129672006, + "created_at": "2024-07-03 14:00:00", + "updated_at": "2024-07-03 16:00:00", + "cost": 0.0, + "filled": 1.5255530129672006, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 124.46, + "amount": 1.5255530129672006, + "created_at": "2024-07-04 06:00:00", + "updated_at": "2024-07-04 08:00:00", + "cost": 0.0, + "filled": 1.5255530129672006, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.5255530129672006, + "remaining": 0.0, + "open_price": 131.1, + "last_reported_price": 124.46, + "opened_at": "2024-07-03 14:00:00", + "closed_at": "2024-07-04 06:00:00", + "updated_at": "2024-07-04 06:00:00", + "net_gain": -10.129672006102226, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 90, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 131.1, + "sell_percentage": 100.0, + "high_water_mark": 131.7, + "stop_loss_price": 124.54499999999999, + "sell_amount": 1.5255530129672006, + "sold_amount": 1.5255530129672006, + "active": false, + "sell_prices": "124.46" + } + ], + "take_profits": [ + { + "trade_id": 90, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 131.1, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 144.21, + "sell_amount": 0.38138825324180015, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 90, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 131.1, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 150.765, + "sell_amount": 0.38138825324180015, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 91, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 54815.0, + "amount": 0.003648636322174587, + "created_at": "2024-07-04 02:00:00", + "updated_at": "2024-07-05 00:00:00", + "cost": 0.0, + "filled": 0.003648636322174587, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 51604.0, + "amount": 0.003648636322174587, + "created_at": "2024-07-07 00:00:00", + "updated_at": "2024-07-07 02:00:00", + "cost": 0.0, + "filled": 0.003648636322174587, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.003648636322174587, + "remaining": 0.0, + "open_price": 54815.0, + "last_reported_price": 51604.0, + "opened_at": "2024-07-04 02:00:00", + "closed_at": "2024-07-07 00:00:00", + "updated_at": "2024-07-07 00:00:00", + "net_gain": -11.715771230502611, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 91, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 54815.0, + "sell_percentage": 100.0, + "high_water_mark": 54815.0, + "stop_loss_price": 52074.25, + "sell_amount": 0.003648636322174587, + "sold_amount": 0.003648636322174587, + "active": false, + "sell_prices": "51604.0" + } + ], + "take_profits": [ + { + "trade_id": 91, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 54815.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 60296.50000000001, + "sell_amount": 0.0009121590805436468, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 91, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 54815.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 63037.24999999999, + "sell_amount": 0.0009121590805436468, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 92, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2865.5, + "amount": 0.06979584714709475, + "created_at": "2024-07-05 00:00:00", + "updated_at": "2024-07-05 02:00:00", + "cost": 0.0, + "filled": 0.06979584714709475, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2701.3, + "amount": 0.06979584714709475, + "created_at": "2024-07-05 02:00:00", + "updated_at": "2024-07-05 04:00:00", + "cost": 0.0, + "filled": 0.06979584714709475, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.06979584714709475, + "remaining": 0.0, + "open_price": 2865.5, + "last_reported_price": 2701.3, + "opened_at": "2024-07-05 00:00:00", + "closed_at": "2024-07-05 02:00:00", + "updated_at": "2024-07-05 02:00:00", + "net_gain": -11.460478101552951, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 92, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 2865.5, + "sell_percentage": 100.0, + "high_water_mark": 2865.5, + "stop_loss_price": 2722.225, + "sell_amount": 0.06979584714709475, + "sold_amount": 0.06979584714709475, + "active": false, + "sell_prices": "2701.3" + } + ], + "take_profits": [ + { + "trade_id": 92, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 2865.5, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 3152.05, + "sell_amount": 0.017448961786773687, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 92, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 2865.5, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 3295.325, + "sell_amount": 0.017448961786773687, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 93, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2682.6, + "amount": 0.07455453664355477, + "created_at": "2024-07-05 04:00:00", + "updated_at": "2024-07-05 06:00:00", + "cost": 0.0, + "filled": 0.07455453664355477, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2942.9, + "amount": 0.018638634160888692, + "created_at": "2024-07-14 10:00:00", + "updated_at": "2024-07-14 12:00:00", + "cost": 0.0, + "filled": 0.018638634160888692, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3078.3, + "amount": 0.018638634160888692, + "created_at": "2024-07-24 20:00:00", + "updated_at": "2024-07-24 22:00:00", + "cost": 0.0, + "filled": 0.018638634160888692, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2480.2, + "amount": 0.0, + "created_at": "2024-08-04 16:00:00", + "updated_at": "2024-08-04 18:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2505.7, + "amount": -0.037277268321777385, + "created_at": "2024-08-04 20:00:00", + "updated_at": "2024-08-04 22:00:00", + "cost": 0.0, + "filled": -0.037277268321777385, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2155.1, + "amount": 0.07455453664355477, + "created_at": "2024-09-19 00:00:00", + "updated_at": "2024-09-19 02:00:00", + "cost": 0.0, + "filled": 0.07455453664355477, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.07455453664355477, + "remaining": 0.0, + "open_price": 2682.6, + "last_reported_price": 2155.1, + "opened_at": "2024-07-05 04:00:00", + "closed_at": "2024-09-19 00:00:00", + "updated_at": "2024-09-19 00:00:00", + "net_gain": -20.506225303809735, + "cost": 200.00000000000003, + "stop_losses": [ + { + "trade_id": 93, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 2682.6, + "sell_percentage": 100.0, + "high_water_mark": 3242.1, + "stop_loss_price": 2548.47, + "sell_amount": 0.07455453664355477, + "sold_amount": 0.07455453664355477, + "active": false, + "sell_prices": "2480.2,2505.7" + } + ], + "take_profits": [ + { + "trade_id": 93, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 2682.6, + "sell_percentage": 25.0, + "high_water_mark": 2952.7, + "take_profit_price": 2950.86, + "sell_amount": 0.018638634160888692, + "sold_amount": 0.018638634160888692, + "active": false, + "sell_prices": "2942.9" + }, + { + "trade_id": 93, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 2682.6, + "sell_percentage": 25.0, + "high_water_mark": 3242.1, + "take_profit_price": 3084.99, + "sell_amount": 0.018638634160888692, + "sold_amount": 0.018638634160888692, + "active": false, + "sell_prices": "3078.3" + } + ] + }, + { + "id": 94, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 124.19, + "amount": 1.610435622835977, + "created_at": "2024-07-07 20:00:00", + "updated_at": "2024-07-07 22:00:00", + "cost": 0.0, + "filled": 1.610435622835977, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 129.72, + "amount": 1.610435622835977, + "created_at": "2024-07-08 10:00:00", + "updated_at": "2024-07-08 12:00:00", + "cost": 0.0, + "filled": 1.610435622835977, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.610435622835977, + "remaining": 0.0, + "open_price": 124.19, + "last_reported_price": 129.72, + "opened_at": "2024-07-07 20:00:00", + "closed_at": "2024-07-08 10:00:00", + "updated_at": "2024-07-08 10:00:00", + "net_gain": 8.905708994282946, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 94, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 124.19, + "sell_percentage": 100.0, + "high_water_mark": 129.72, + "stop_loss_price": 117.98049999999999, + "sell_amount": 1.610435622835977, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 94, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 124.19, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 136.609, + "sell_amount": 0.40260890570899427, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 94, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 124.19, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 142.8185, + "sell_amount": 0.40260890570899427, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 95, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 51604.0, + "amount": 0.0038756685528253624, + "created_at": "2024-07-07 22:00:00", + "updated_at": "2024-07-08 00:00:00", + "cost": 0.0, + "filled": 0.0038756685528253624, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 58587.0, + "amount": 0.0009689171382063406, + "created_at": "2024-07-17 00:00:00", + "updated_at": "2024-07-17 02:00:00", + "cost": 0.0, + "filled": 0.0009689171382063406, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 61320.0, + "amount": 0.002906751414619022, + "created_at": "2024-07-19 16:00:00", + "updated_at": "2024-07-20 00:00:00", + "cost": 0.0, + "filled": 0.002906751414619022, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.0038756685528253624, + "remaining": 0.0, + "open_price": 51604.0, + "last_reported_price": 61202.0, + "opened_at": "2024-07-07 22:00:00", + "closed_at": "2024-07-19 16:00:00", + "updated_at": "2024-07-19 16:00:00", + "net_gain": 35.007945120533286, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 95, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 51604.0, + "sell_percentage": 100.0, + "high_water_mark": 61202.0, + "stop_loss_price": 49023.799999999996, + "sell_amount": 0.0038756685528253624, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 95, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 51604.0, + "sell_percentage": 25.0, + "high_water_mark": 61202.0, + "take_profit_price": 56764.4, + "sell_amount": 0.0009689171382063406, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 95, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 51604.0, + "sell_percentage": 25.0, + "high_water_mark": 59664.0, + "take_profit_price": 59344.6, + "sell_amount": 0.0009689171382063406, + "sold_amount": 0.0009689171382063406, + "active": false, + "sell_prices": "58587.0" + } + ] + }, + { + "id": 96, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.5746, + "amount": 35.87701359738815, + "created_at": "2024-07-18 16:00:00", + "updated_at": "2024-07-18 18:00:00", + "cost": 0.0, + "filled": 35.87701359738815, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.884, + "amount": 35.87701359738815, + "created_at": "2024-07-21 22:00:00", + "updated_at": "2024-07-22 00:00:00", + "cost": 0.0, + "filled": 35.87701359738815, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 35.87701359738815, + "remaining": 0.0, + "open_price": 5.5746, + "last_reported_price": 5.884, + "opened_at": "2024-07-18 16:00:00", + "closed_at": "2024-07-21 22:00:00", + "updated_at": "2024-07-21 22:00:00", + "net_gain": 11.100348007031897, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 96, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 5.5746, + "sell_percentage": 100.0, + "high_water_mark": 5.884, + "stop_loss_price": 5.29587, + "sell_amount": 35.87701359738815, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 96, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 5.5746, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.132060000000001, + "sell_amount": 8.969253399347037, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 96, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 5.5746, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.4107899999999995, + "sell_amount": 8.969253399347037, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 97, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 158.52, + "amount": 1.2616704516780217, + "created_at": "2024-07-25 20:00:00", + "updated_at": "2024-07-25 22:00:00", + "cost": 0.0, + "filled": 1.2616704516780217, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 172.49, + "amount": 0.31541761291950543, + "created_at": "2024-07-29 14:00:00", + "updated_at": "2024-07-29 16:00:00", + "cost": 0.0, + "filled": 0.31541761291950543, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 150.3, + "amount": 0.0, + "created_at": "2024-08-01 16:00:00", + "updated_at": "2024-08-01 18:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 150.31, + "amount": -0.9462528387585163, + "created_at": "2024-08-02 04:00:00", + "updated_at": "2024-08-02 06:00:00", + "cost": 0.0, + "filled": -0.9462528387585163, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 123.38, + "amount": 1.8925056775170326, + "created_at": "2024-09-13 16:00:00", + "updated_at": "2024-09-13 18:00:00", + "cost": 0.0, + "filled": 1.8925056775170326, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.2616704516780217, + "remaining": 0.0, + "open_price": 158.52, + "last_reported_price": 123.38, + "opened_at": "2024-07-25 20:00:00", + "closed_at": "2024-09-13 16:00:00", + "updated_at": "2024-09-13 16:00:00", + "net_gain": -54.32752964925562, + "cost": 200.00000000000003, + "stop_losses": [ + { + "trade_id": 97, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 158.52, + "sell_percentage": 100.0, + "high_water_mark": 177.55, + "stop_loss_price": 150.594, + "sell_amount": 1.2616704516780217, + "sold_amount": 1.2616704516780217, + "active": false, + "sell_prices": "150.3,150.31" + } + ], + "take_profits": [ + { + "trade_id": 97, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 158.52, + "sell_percentage": 25.0, + "high_water_mark": 177.55, + "take_profit_price": 174.372, + "sell_amount": 0.31541761291950543, + "sold_amount": 0.31541761291950543, + "active": false, + "sell_prices": "172.49" + }, + { + "trade_id": 97, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 158.52, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 182.298, + "sell_amount": 0.31541761291950543, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 98, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.253, + "amount": 38.07348181991243, + "created_at": "2024-07-28 16:00:00", + "updated_at": "2024-07-28 18:00:00", + "cost": 0.0, + "filled": 38.07348181991243, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.3928, + "amount": 38.07348181991243, + "created_at": "2024-07-29 06:00:00", + "updated_at": "2024-07-29 08:00:00", + "cost": 0.0, + "filled": 38.07348181991243, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 38.07348181991243, + "remaining": 0.0, + "open_price": 5.253, + "last_reported_price": 5.3928, + "opened_at": "2024-07-28 16:00:00", + "closed_at": "2024-07-29 06:00:00", + "updated_at": "2024-07-29 06:00:00", + "net_gain": 5.322672758423778, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 98, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 5.253, + "sell_percentage": 100.0, + "high_water_mark": 5.3928, + "stop_loss_price": 4.99035, + "sell_amount": 38.07348181991243, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 98, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 5.253, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.778300000000001, + "sell_amount": 9.518370454978108, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 98, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 5.253, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.04095, + "sell_amount": 9.518370454978108, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 99, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 61476.0, + "amount": 0.0032533021016331576, + "created_at": "2024-07-30 08:00:00", + "updated_at": "2024-07-31 00:00:00", + "cost": 0.0, + "filled": 0.0032533021016331576, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56362.0, + "amount": 0.0032533021016331576, + "created_at": "2024-08-02 00:00:00", + "updated_at": "2024-08-02 02:00:00", + "cost": 0.0, + "filled": 0.0032533021016331576, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.0032533021016331576, + "remaining": 0.0, + "open_price": 61476.0, + "last_reported_price": 56362.0, + "opened_at": "2024-07-30 08:00:00", + "closed_at": "2024-08-02 00:00:00", + "updated_at": "2024-08-02 00:00:00", + "net_gain": -16.637386947751963, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 99, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 61476.0, + "sell_percentage": 100.0, + "high_water_mark": 61476.0, + "stop_loss_price": 58402.2, + "sell_amount": 0.0032533021016331576, + "sold_amount": 0.0032533021016331576, + "active": false, + "sell_prices": "56362.0" + } + ], + "take_profits": [ + { + "trade_id": 99, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 61476.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 67623.6, + "sell_amount": 0.0008133255254082894, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 99, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 61476.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 70697.4, + "sell_amount": 0.0008133255254082894, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 100, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.0767, + "amount": 39.3956704158213, + "created_at": "2024-07-31 00:00:00", + "updated_at": "2024-07-31 02:00:00", + "cost": 0.0, + "filled": 39.3956704158213, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.7876, + "amount": 39.3956704158213, + "created_at": "2024-08-01 14:00:00", + "updated_at": "2024-08-01 16:00:00", + "cost": 0.0, + "filled": 39.3956704158213, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 39.3956704158213, + "remaining": 0.0, + "open_price": 5.0767, + "last_reported_price": 4.7876, + "opened_at": "2024-07-31 00:00:00", + "closed_at": "2024-08-01 14:00:00", + "updated_at": "2024-08-01 14:00:00", + "net_gain": -11.389288317213897, + "cost": 199.99999999999997, + "stop_losses": [ + { + "trade_id": 100, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 5.0767, + "sell_percentage": 100.0, + "high_water_mark": 5.1195, + "stop_loss_price": 4.822864999999999, + "sell_amount": 39.3956704158213, + "sold_amount": 39.3956704158213, + "active": false, + "sell_prices": "4.7876" + } + ], + "take_profits": [ + { + "trade_id": 100, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 5.0767, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.58437, + "sell_amount": 9.848917603955325, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 100, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 5.0767, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.838204999999999, + "sell_amount": 9.848917603955325, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 101, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.822, + "amount": 41.4765657403567, + "created_at": "2024-08-01 18:00:00", + "updated_at": "2024-08-01 20:00:00", + "cost": 0.0, + "filled": 41.4765657403567, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.4941, + "amount": 41.4765657403567, + "created_at": "2024-08-03 16:00:00", + "updated_at": "2024-08-03 18:00:00", + "cost": 0.0, + "filled": 41.4765657403567, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 41.4765657403567, + "remaining": 0.0, + "open_price": 4.822, + "last_reported_price": 4.4941, + "opened_at": "2024-08-01 18:00:00", + "closed_at": "2024-08-03 16:00:00", + "updated_at": "2024-08-03 16:00:00", + "net_gain": -13.600165906262959, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 101, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 4.822, + "sell_percentage": 100.0, + "high_water_mark": 4.9525, + "stop_loss_price": 4.5809, + "sell_amount": 41.4765657403567, + "sold_amount": 41.4765657403567, + "active": false, + "sell_prices": "4.4941" + } + ], + "take_profits": [ + { + "trade_id": 101, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 4.822, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.304200000000001, + "sell_amount": 10.369141435089174, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 101, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 4.822, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 5.545299999999999, + "sell_amount": 10.369141435089174, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 102, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56259.0, + "amount": 0.003554986757674328, + "created_at": "2024-08-03 00:00:00", + "updated_at": "2024-08-03 02:00:00", + "cost": 0.0, + "filled": 0.003554986757674328, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 53321.0, + "amount": 0.003554986757674328, + "created_at": "2024-08-04 00:00:00", + "updated_at": "2024-08-04 02:00:00", + "cost": 0.0, + "filled": 0.003554986757674328, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.003554986757674328, + "remaining": 0.0, + "open_price": 56259.0, + "last_reported_price": 53321.0, + "opened_at": "2024-08-03 00:00:00", + "closed_at": "2024-08-04 00:00:00", + "updated_at": "2024-08-04 00:00:00", + "net_gain": -10.44455109404717, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 102, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 56259.0, + "sell_percentage": 100.0, + "high_water_mark": 56259.0, + "stop_loss_price": 53446.049999999996, + "sell_amount": 0.003554986757674328, + "sold_amount": 0.003554986757674328, + "active": false, + "sell_prices": "53321.0" + } + ], + "take_profits": [ + { + "trade_id": 102, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 56259.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 61884.9, + "sell_amount": 0.000888746689418582, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 102, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 56259.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 64697.85, + "sell_amount": 0.000888746689418582, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 103, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 55416.0, + "amount": 0.003609065973726, + "created_at": "2024-08-04 06:00:00", + "updated_at": "2024-08-05 00:00:00", + "cost": 0.0, + "filled": 0.003609065973726, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 49468.0, + "amount": 0.003609065973726, + "created_at": "2024-08-05 00:00:00", + "updated_at": "2024-08-05 02:00:00", + "cost": 0.0, + "filled": 0.003609065973726, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.003609065973726, + "remaining": 0.0, + "open_price": 55416.0, + "last_reported_price": 49468.0, + "opened_at": "2024-08-04 06:00:00", + "closed_at": "2024-08-05 00:00:00", + "updated_at": "2024-08-05 00:00:00", + "net_gain": -21.466724411722254, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 103, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 55416.0, + "sell_percentage": 100.0, + "high_water_mark": 55416.0, + "stop_loss_price": 52645.2, + "sell_amount": 0.003609065973726, + "sold_amount": 0.003609065973726, + "active": false, + "sell_prices": "49468.0" + } + ], + "take_profits": [ + { + "trade_id": 103, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 55416.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 60957.600000000006, + "sell_amount": 0.0009022664934315, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 103, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 55416.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 63728.399999999994, + "sell_amount": 0.0009022664934315, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 104, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 49474.0, + "amount": 0.004042527388123054, + "created_at": "2024-08-05 02:00:00", + "updated_at": "2024-09-06 00:00:00", + "cost": 0.0, + "filled": 0.004042527388123054, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 54140.0, + "amount": 0.0010106318470307636, + "created_at": "2024-09-14 00:00:00", + "updated_at": "2024-09-14 02:00:00", + "cost": 0.0, + "filled": 0.0010106318470307636, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56733.0, + "amount": 0.0010106318470307636, + "created_at": "2024-09-25 00:00:00", + "updated_at": "2024-09-25 02:00:00", + "cost": 0.0, + "filled": 0.0010106318470307636, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 91826.0, + "amount": 0.0020212636940615267, + "created_at": "2024-12-01 10:00:00", + "updated_at": "2024-12-02 00:00:00", + "cost": 0.0, + "filled": 0.0020212636940615267, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.004042527388123054, + "remaining": 0.0, + "open_price": 49474.0, + "last_reported_price": 92138.0, + "opened_at": "2024-08-05 02:00:00", + "closed_at": "2024-12-01 10:00:00", + "updated_at": "2024-12-01 10:00:00", + "net_gain": 97.65634474673563, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 104, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 49474.0, + "sell_percentage": 100.0, + "high_water_mark": 94740.0, + "stop_loss_price": 47000.299999999996, + "sell_amount": 0.004042527388123054, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 104, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 49474.0, + "sell_percentage": 25.0, + "high_water_mark": 54635.0, + "take_profit_price": 54421.4, + "sell_amount": 0.0010106318470307636, + "sold_amount": 0.0010106318470307636, + "active": false, + "sell_prices": "54140.0" + }, + { + "trade_id": 104, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 49474.0, + "sell_percentage": 25.0, + "high_water_mark": 57398.0, + "take_profit_price": 56895.1, + "sell_amount": 0.0010106318470307636, + "sold_amount": 0.0010106318470307636, + "active": false, + "sell_prices": "56733.0" + } + ] + }, + { + "id": 105, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 116.63, + "amount": 1.7148246591785992, + "created_at": "2024-09-18 18:00:00", + "updated_at": "2024-09-18 20:00:00", + "cost": 0.0, + "filled": 1.7148246591785992, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 120.85, + "amount": 1.7148246591785992, + "created_at": "2024-09-18 22:00:00", + "updated_at": "2024-09-19 00:00:00", + "cost": 0.0, + "filled": 1.7148246591785992, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.7148246591785992, + "remaining": 0.0, + "open_price": 116.63, + "last_reported_price": 120.85, + "opened_at": "2024-09-18 18:00:00", + "closed_at": "2024-09-18 22:00:00", + "updated_at": "2024-09-18 22:00:00", + "net_gain": 7.236560061733712, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 105, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 116.63, + "sell_percentage": 100.0, + "high_water_mark": 120.85, + "stop_loss_price": 110.79849999999999, + "sell_amount": 1.7148246591785992, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 105, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 116.63, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 128.293, + "sell_amount": 0.4287061647946498, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 105, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 116.63, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 134.12449999999998, + "sell_amount": 0.4287061647946498, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 106, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 127.07, + "amount": 1.5739356260328954, + "created_at": "2024-09-22 20:00:00", + "updated_at": "2024-09-22 22:00:00", + "cost": 0.0, + "filled": 1.5739356260328954, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 139.15, + "amount": 0.39348390650822385, + "created_at": "2024-09-26 16:00:00", + "updated_at": "2024-09-26 18:00:00", + "cost": 0.0, + "filled": 0.39348390650822385, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 141.32, + "amount": 1.1804517195246715, + "created_at": "2024-10-01 08:00:00", + "updated_at": "2024-10-01 10:00:00", + "cost": 0.0, + "filled": 1.1804517195246715, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 1.5739356260328954, + "remaining": 0.0, + "open_price": 127.07, + "last_reported_price": 141.32, + "opened_at": "2024-09-22 20:00:00", + "closed_at": "2024-10-01 08:00:00", + "updated_at": "2024-10-01 08:00:00", + "net_gain": 21.574722593845927, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 106, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 127.07, + "sell_percentage": 100.0, + "high_water_mark": 143.37, + "stop_loss_price": 120.71649999999998, + "sell_amount": 1.5739356260328954, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 106, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 127.07, + "sell_percentage": 25.0, + "high_water_mark": 140.47, + "take_profit_price": 139.77700000000002, + "sell_amount": 0.39348390650822385, + "sold_amount": 0.39348390650822385, + "active": false, + "sell_prices": "139.15" + }, + { + "trade_id": 106, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 127.07, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 146.13049999999998, + "sell_amount": 0.39348390650822385, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 107, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.825, + "amount": 52.287581699346404, + "created_at": "2024-09-22 20:00:00", + "updated_at": "2024-09-22 22:00:00", + "cost": 0.0, + "filled": 52.287581699346404, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.1648, + "amount": 13.071895424836601, + "created_at": "2024-09-25 22:00:00", + "updated_at": "2024-09-26 00:00:00", + "cost": 0.0, + "filled": 13.071895424836601, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.3889, + "amount": 13.071895424836601, + "created_at": "2024-09-27 06:00:00", + "updated_at": "2024-09-27 08:00:00", + "cost": 0.0, + "filled": 13.071895424836601, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.3265, + "amount": 26.143790849673206, + "created_at": "2024-09-29 18:00:00", + "updated_at": "2024-09-29 20:00:00", + "cost": 0.0, + "filled": 26.143790849673206, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 52.287581699346404, + "remaining": 0.0, + "open_price": 3.825, + "last_reported_price": 4.3265, + "opened_at": "2024-09-22 20:00:00", + "closed_at": "2024-09-29 18:00:00", + "updated_at": "2024-09-29 18:00:00", + "net_gain": 24.924183006535934, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 107, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 3.825, + "sell_percentage": 100.0, + "high_water_mark": 4.4277, + "stop_loss_price": 3.63375, + "sell_amount": 52.287581699346404, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 107, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 3.825, + "sell_percentage": 25.0, + "high_water_mark": 4.2374, + "take_profit_price": 4.2075000000000005, + "sell_amount": 13.071895424836601, + "sold_amount": 13.071895424836601, + "active": false, + "sell_prices": "4.1648" + }, + { + "trade_id": 107, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 3.825, + "sell_percentage": 25.0, + "high_water_mark": 4.4277, + "take_profit_price": 4.39875, + "sell_amount": 13.071895424836601, + "sold_amount": 13.071895424836601, + "active": false, + "sell_prices": "4.3889" + } + ] + }, + { + "id": 108, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2312.5, + "amount": 0.08648648648648649, + "created_at": "2024-09-25 16:00:00", + "updated_at": "2024-09-25 18:00:00", + "cost": 0.0, + "filled": 0.08648648648648649, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2147.2, + "amount": 0.08648648648648649, + "created_at": "2024-10-02 18:00:00", + "updated_at": "2024-10-02 20:00:00", + "cost": 0.0, + "filled": 0.08648648648648649, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.08648648648648649, + "remaining": 0.0, + "open_price": 2312.5, + "last_reported_price": 2147.2, + "opened_at": "2024-09-25 16:00:00", + "closed_at": "2024-10-02 18:00:00", + "updated_at": "2024-10-02 18:00:00", + "net_gain": -14.296216216216209, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 108, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 2312.5, + "sell_percentage": 100.0, + "high_water_mark": 2422.5, + "stop_loss_price": 2196.875, + "sell_amount": 0.08648648648648649, + "sold_amount": 0.08648648648648649, + "active": false, + "sell_prices": "2147.2" + } + ], + "take_profits": [ + { + "trade_id": 108, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 2312.5, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 2543.75, + "sell_amount": 0.021621621621621623, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 108, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 2312.5, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 2659.375, + "sell_amount": 0.021621621621621623, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 109, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.0519, + "amount": 49.35955971272737, + "created_at": "2024-09-30 14:00:00", + "updated_at": "2024-09-30 16:00:00", + "cost": 0.0, + "filled": 49.35955971272737, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.8077, + "amount": 49.35955971272737, + "created_at": "2024-10-01 16:00:00", + "updated_at": "2024-10-01 18:00:00", + "cost": 0.0, + "filled": 49.35955971272737, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 49.35955971272737, + "remaining": 0.0, + "open_price": 4.0519, + "last_reported_price": 3.8077, + "opened_at": "2024-09-30 14:00:00", + "closed_at": "2024-10-01 16:00:00", + "updated_at": "2024-10-01 16:00:00", + "net_gain": -12.053604481847998, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 109, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 4.0519, + "sell_percentage": 100.0, + "high_water_mark": 4.0832, + "stop_loss_price": 3.8493049999999998, + "sell_amount": 49.35955971272737, + "sold_amount": 49.35955971272737, + "active": false, + "sell_prices": "3.8077" + } + ], + "take_profits": [ + { + "trade_id": 109, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 4.0519, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.45709, + "sell_amount": 12.339889928181842, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 109, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 4.0519, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 4.659685, + "sell_amount": 12.339889928181842, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 110, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.7604, + "amount": 53.18583129454313, + "created_at": "2024-10-01 18:00:00", + "updated_at": "2024-10-01 20:00:00", + "cost": 0.0, + "filled": 53.18583129454313, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.1093, + "amount": 13.296457823635782, + "created_at": "2024-10-21 10:00:00", + "updated_at": "2024-10-21 12:00:00", + "cost": 0.0, + "filled": 13.296457823635782, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.5443, + "amount": 0.0, + "created_at": "2024-11-02 12:00:00", + "updated_at": "2024-11-02 14:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.5673, + "amount": -39.88937347090735, + "created_at": "2024-11-02 14:00:00", + "updated_at": "2024-11-02 16:00:00", + "cost": 0.0, + "filled": -39.88937347090735, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.7337, + "amount": 79.77874694181469, + "created_at": "2024-11-20 12:00:00", + "updated_at": "2024-11-20 14:00:00", + "cost": 0.0, + "filled": 79.77874694181469, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 53.18583129454313, + "remaining": 0.0, + "open_price": 3.7604, + "last_reported_price": 5.7337, + "opened_at": "2024-10-01 18:00:00", + "closed_at": "2024-11-20 12:00:00", + "updated_at": "2024-11-20 12:00:00", + "net_gain": 169.76917349218166, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 110, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 3.7604, + "sell_percentage": 100.0, + "high_water_mark": 4.1987, + "stop_loss_price": 3.57238, + "sell_amount": 53.18583129454313, + "sold_amount": 53.18583129454313, + "active": false, + "sell_prices": "3.5443,3.5673" + } + ], + "take_profits": [ + { + "trade_id": 110, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 3.7604, + "sell_percentage": 25.0, + "high_water_mark": 4.1987, + "take_profit_price": 4.13644, + "sell_amount": 13.296457823635782, + "sold_amount": 13.296457823635782, + "active": false, + "sell_prices": "4.1093" + }, + { + "trade_id": 110, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 3.7604, + "sell_percentage": 25.0, + "high_water_mark": 5.7357, + "take_profit_price": 4.875344999999999, + "sell_amount": 13.296457823635782, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 111, + "orders": [ + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 123.97, + "amount": 1.6132935387593772, + "created_at": "2024-10-03 22:00:00", + "updated_at": "2024-10-04 00:00:00", + "cost": 0.0, + "filled": 1.6132935387593772, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 135.65, + "amount": 0.4033233846898443, + "created_at": "2024-10-07 04:00:00", + "updated_at": "2024-10-07 06:00:00", + "cost": 0.0, + "filled": 0.4033233846898443, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 142.15, + "amount": 0.4033233846898443, + "created_at": "2024-10-14 16:00:00", + "updated_at": "2024-10-14 18:00:00", + "cost": 0.0, + "filled": 0.4033233846898443, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "SOL", + "trading_symbol": "EUR", + "status": "OPEN", + "amount": 1.6132935387593772, + "remaining": 0.8066467693796886, + "open_price": 123.97, + "last_reported_price": 181.54, + "opened_at": "2024-10-03 22:00:00", + "closed_at": null, + "updated_at": "2024-12-31 00:00:00", + "net_gain": 12.043236266838747, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 111, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 123.97, + "sell_percentage": 100.0, + "high_water_mark": 249.76, + "stop_loss_price": 117.77149999999999, + "sell_amount": 1.6132935387593772, + "sold_amount": 0.0, + "active": true, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 111, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 123.97, + "sell_percentage": 25.0, + "high_water_mark": 137.04, + "take_profit_price": 136.36700000000002, + "sell_amount": 0.4033233846898443, + "sold_amount": 0.4033233846898443, + "active": false, + "sell_prices": "135.65" + }, + { + "trade_id": 111, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 123.97, + "sell_percentage": 25.0, + "high_water_mark": 143.15, + "take_profit_price": 142.5655, + "sell_amount": 0.4033233846898443, + "sold_amount": 0.4033233846898443, + "active": false, + "sell_prices": "142.15" + } + ] + }, + { + "id": 112, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2396.2, + "amount": 0.08346548702111678, + "created_at": "2024-10-31 12:00:00", + "updated_at": "2024-10-31 14:00:00", + "cost": 0.0, + "filled": 0.08346548702111678, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2264.3, + "amount": 0.08346548702111678, + "created_at": "2024-11-03 02:00:00", + "updated_at": "2024-11-03 04:00:00", + "cost": 0.0, + "filled": 0.08346548702111678, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 0.08346548702111678, + "remaining": 0.0, + "open_price": 2396.2, + "last_reported_price": 2264.3, + "opened_at": "2024-10-31 12:00:00", + "closed_at": "2024-11-03 02:00:00", + "updated_at": "2024-11-03 02:00:00", + "net_gain": -11.009097738085273, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 112, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 2396.2, + "sell_percentage": 100.0, + "high_water_mark": 2396.2, + "stop_loss_price": 2276.39, + "sell_amount": 0.08346548702111678, + "sold_amount": 0.08346548702111678, + "active": false, + "sell_prices": "2264.3" + } + ], + "take_profits": [ + { + "trade_id": 112, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 2396.2, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 2635.82, + "sell_amount": 0.020866371755279195, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 112, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 2396.2, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 2755.6299999999997, + "sell_amount": 0.020866371755279195, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 113, + "orders": [ + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2981.9, + "amount": 0.06707133035983769, + "created_at": "2024-11-13 10:00:00", + "updated_at": "2024-11-13 12:00:00", + "cost": 0.0, + "filled": 0.06707133035983769, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3275.5, + "amount": 0.01676783258995942, + "created_at": "2024-11-23 16:00:00", + "updated_at": "2024-11-23 18:00:00", + "cost": 0.0, + "filled": 0.01676783258995942, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3412.8, + "amount": 0.01676783258995942, + "created_at": "2024-11-28 02:00:00", + "updated_at": "2024-11-28 04:00:00", + "cost": 0.0, + "filled": 0.01676783258995942, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "ETH", + "trading_symbol": "EUR", + "status": "OPEN", + "amount": 0.06707133035983769, + "remaining": 0.033535665179918836, + "open_price": 2981.9, + "last_reported_price": 3202.7, + "opened_at": "2024-11-13 10:00:00", + "closed_at": null, + "updated_at": "2024-12-31 00:00:00", + "net_gain": 12.1482947114256, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 113, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 2981.9, + "sell_percentage": 100.0, + "high_water_mark": 3858.8, + "stop_loss_price": 2832.805, + "sell_amount": 0.06707133035983769, + "sold_amount": 0.0, + "active": true, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 113, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 2981.9, + "sell_percentage": 25.0, + "high_water_mark": 3309.8, + "take_profit_price": 3280.09, + "sell_amount": 0.01676783258995942, + "sold_amount": 0.01676783258995942, + "active": false, + "sell_prices": "3275.5" + }, + { + "trade_id": 113, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 2981.9, + "sell_percentage": 25.0, + "high_water_mark": 3462.6, + "take_profit_price": 3429.185, + "sell_amount": 0.01676783258995942, + "sold_amount": 0.01676783258995942, + "active": false, + "sell_prices": "3412.8" + } + ] + }, + { + "id": 114, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 8.0659, + "amount": 24.795745050149396, + "created_at": "2024-12-14 20:00:00", + "updated_at": "2024-12-14 22:00:00", + "cost": 0.0, + "filled": 24.795745050149396, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 7.6135, + "amount": 24.795745050149396, + "created_at": "2024-12-18 20:00:00", + "updated_at": "2024-12-18 22:00:00", + "cost": 0.0, + "filled": 24.795745050149396, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 24.795745050149396, + "remaining": 0.0, + "open_price": 8.0659, + "last_reported_price": 7.6135, + "opened_at": "2024-12-14 20:00:00", + "closed_at": "2024-12-18 20:00:00", + "updated_at": "2024-12-18 20:00:00", + "net_gain": -11.217595060687557, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 114, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 8.0659, + "sell_percentage": 100.0, + "high_water_mark": 8.6042, + "stop_loss_price": 7.662604999999999, + "sell_amount": 24.795745050149396, + "sold_amount": 24.795745050149396, + "active": false, + "sell_prices": "7.6135" + } + ], + "take_profits": [ + { + "trade_id": 114, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 8.0659, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 8.872489999999999, + "sell_amount": 6.198936262537349, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 114, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 8.0659, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 9.275784999999999, + "sell_amount": 6.198936262537349, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 115, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.1604, + "amount": 32.4654243230959, + "created_at": "2024-12-20 08:00:00", + "updated_at": "2024-12-20 10:00:00", + "cost": 0.0, + "filled": 32.4654243230959, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.8364, + "amount": 32.4654243230959, + "created_at": "2024-12-20 10:00:00", + "updated_at": "2024-12-20 12:00:00", + "cost": 0.0, + "filled": 32.4654243230959, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 32.4654243230959, + "remaining": 0.0, + "open_price": 6.1604, + "last_reported_price": 5.8364, + "opened_at": "2024-12-20 08:00:00", + "closed_at": "2024-12-20 10:00:00", + "updated_at": "2024-12-20 10:00:00", + "net_gain": -10.518797480683077, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 115, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.1604, + "sell_percentage": 100.0, + "high_water_mark": 6.1604, + "stop_loss_price": 5.85238, + "sell_amount": 32.4654243230959, + "sold_amount": 32.4654243230959, + "active": false, + "sell_prices": "5.8364" + } + ], + "take_profits": [ + { + "trade_id": 115, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.1604, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 6.776440000000001, + "sell_amount": 8.116356080773976, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 115, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.1604, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.08446, + "sell_amount": 8.116356080773976, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 116, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.8256, + "amount": 29.301453352086266, + "created_at": "2024-12-22 10:00:00", + "updated_at": "2024-12-22 12:00:00", + "cost": 0.0, + "filled": 29.301453352086266, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.4819, + "amount": 29.301453352086266, + "created_at": "2024-12-22 18:00:00", + "updated_at": "2024-12-22 20:00:00", + "cost": 0.0, + "filled": 29.301453352086266, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "CLOSED", + "amount": 29.301453352086266, + "remaining": 0.0, + "open_price": 6.8256, + "last_reported_price": 6.4819, + "opened_at": "2024-12-22 10:00:00", + "closed_at": "2024-12-22 18:00:00", + "updated_at": "2024-12-22 18:00:00", + "net_gain": -10.070909517112028, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 116, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.8256, + "sell_percentage": 100.0, + "high_water_mark": 6.8256, + "stop_loss_price": 6.484319999999999, + "sell_amount": 29.301453352086266, + "sold_amount": 29.301453352086266, + "active": false, + "sell_prices": "6.4819" + } + ], + "take_profits": [ + { + "trade_id": 116, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.8256, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.50816, + "sell_amount": 7.325363338021567, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + }, + { + "trade_id": 116, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.8256, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.849439999999999, + "sell_amount": 7.325363338021567, + "sold_amount": 0.0, + "active": false, + "sell_prices": null + } + ] + }, + { + "id": 117, + "orders": [ + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 91719.0, + "amount": 0.0021805732727133965, + "created_at": "2024-12-26 08:00:00", + "updated_at": "2024-12-27 00:00:00", + "cost": 0.0, + "filled": 0.0021805732727133965, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "BTC", + "trading_symbol": "EUR", + "status": "OPEN", + "amount": 0.0021805732727133965, + "remaining": 0.0021805732727133965, + "open_price": 91719.0, + "last_reported_price": 90156.0, + "opened_at": "2024-12-26 08:00:00", + "closed_at": null, + "updated_at": "2024-12-31 00:00:00", + "net_gain": 0.0, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 117, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 91719.0, + "sell_percentage": 100.0, + "high_water_mark": 91719.0, + "stop_loss_price": 87133.05, + "sell_amount": 0.0021805732727133965, + "sold_amount": 0.0, + "active": true, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 117, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 91719.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 100890.90000000001, + "sell_amount": 0.0005451433181783491, + "sold_amount": 0.0, + "active": true, + "sell_prices": null + }, + { + "trade_id": 117, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 91719.0, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 105476.84999999999, + "sell_amount": 0.0005451433181783491, + "sold_amount": 0.0, + "active": true, + "sell_prices": null + } + ] + }, + { + "id": 118, + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.5374, + "amount": 30.593202190473278, + "created_at": "2024-12-30 10:00:00", + "updated_at": "2024-12-30 12:00:00", + "cost": 0.0, + "filled": 30.593202190473278, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "target_symbol": "DOT", + "trading_symbol": "EUR", + "status": "OPEN", + "amount": 30.593202190473278, + "remaining": 30.593202190473278, + "open_price": 6.5374, + "last_reported_price": 6.3644, + "opened_at": "2024-12-30 10:00:00", + "closed_at": null, + "updated_at": "2024-12-31 00:00:00", + "net_gain": 0.0, + "cost": 200.0, + "stop_losses": [ + { + "trade_id": 118, + "trade_risk_type": "FIXED", + "percentage": 5.0, + "open_price": 6.5374, + "sell_percentage": 100.0, + "high_water_mark": 6.5843, + "stop_loss_price": 6.210529999999999, + "sell_amount": 30.593202190473278, + "sold_amount": 0.0, + "active": true, + "sell_prices": null + } + ], + "take_profits": [ + { + "trade_id": 118, + "trade_risk_type": "TRAILING", + "percentage": 10.0, + "open_price": 6.5374, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.191140000000001, + "sell_amount": 7.6483005476183195, + "sold_amount": 0.0, + "active": true, + "sell_prices": null + }, + { + "trade_id": 118, + "trade_risk_type": "TRAILING", + "percentage": 15.0, + "open_price": 6.5374, + "sell_percentage": 25.0, + "high_water_mark": null, + "take_profit_price": 7.518009999999999, + "sell_amount": 7.6483005476183195, + "sold_amount": 0.0, + "active": true, + "sell_prices": null + } + ] + } + ], + "orders": [ + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.5374, + "amount": 30.593202190473278, + "created_at": "2024-12-30 10:00:00", + "updated_at": "2024-12-30 12:00:00", + "cost": 0.0, + "filled": 30.593202190473278, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 91719.0, + "amount": 0.0021805732727133965, + "created_at": "2024-12-26 08:00:00", + "updated_at": "2024-12-27 00:00:00", + "cost": 0.0, + "filled": 0.0021805732727133965, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.4819, + "amount": 29.301453352086266, + "created_at": "2024-12-22 18:00:00", + "updated_at": "2024-12-22 20:00:00", + "cost": 0.0, + "filled": 29.301453352086266, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.8256, + "amount": 29.301453352086266, + "created_at": "2024-12-22 10:00:00", + "updated_at": "2024-12-22 12:00:00", + "cost": 0.0, + "filled": 29.301453352086266, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.8364, + "amount": 32.4654243230959, + "created_at": "2024-12-20 10:00:00", + "updated_at": "2024-12-20 12:00:00", + "cost": 0.0, + "filled": 32.4654243230959, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.1604, + "amount": 32.4654243230959, + "created_at": "2024-12-20 08:00:00", + "updated_at": "2024-12-20 10:00:00", + "cost": 0.0, + "filled": 32.4654243230959, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 7.6135, + "amount": 24.795745050149396, + "created_at": "2024-12-18 20:00:00", + "updated_at": "2024-12-18 22:00:00", + "cost": 0.0, + "filled": 24.795745050149396, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 8.0659, + "amount": 24.795745050149396, + "created_at": "2024-12-14 20:00:00", + "updated_at": "2024-12-14 22:00:00", + "cost": 0.0, + "filled": 24.795745050149396, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 91826.0, + "amount": 0.0020212636940615267, + "created_at": "2024-12-01 10:00:00", + "updated_at": "2024-12-02 00:00:00", + "cost": 0.0, + "filled": 0.0020212636940615267, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3412.8, + "amount": 0.01676783258995942, + "created_at": "2024-11-28 02:00:00", + "updated_at": "2024-11-28 04:00:00", + "cost": 0.0, + "filled": 0.01676783258995942, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3275.5, + "amount": 0.01676783258995942, + "created_at": "2024-11-23 16:00:00", + "updated_at": "2024-11-23 18:00:00", + "cost": 0.0, + "filled": 0.01676783258995942, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.7337, + "amount": 79.77874694181469, + "created_at": "2024-11-20 12:00:00", + "updated_at": "2024-11-20 14:00:00", + "cost": 0.0, + "filled": 79.77874694181469, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2981.9, + "amount": 0.06707133035983769, + "created_at": "2024-11-13 10:00:00", + "updated_at": "2024-11-13 12:00:00", + "cost": 0.0, + "filled": 0.06707133035983769, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2264.3, + "amount": 0.08346548702111678, + "created_at": "2024-11-03 02:00:00", + "updated_at": "2024-11-03 04:00:00", + "cost": 0.0, + "filled": 0.08346548702111678, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.5673, + "amount": -39.88937347090735, + "created_at": "2024-11-02 14:00:00", + "updated_at": "2024-11-02 16:00:00", + "cost": 0.0, + "filled": -39.88937347090735, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.5443, + "amount": 0.0, + "created_at": "2024-11-02 12:00:00", + "updated_at": "2024-11-02 14:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2396.2, + "amount": 0.08346548702111678, + "created_at": "2024-10-31 12:00:00", + "updated_at": "2024-10-31 14:00:00", + "cost": 0.0, + "filled": 0.08346548702111678, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.1093, + "amount": 13.296457823635782, + "created_at": "2024-10-21 10:00:00", + "updated_at": "2024-10-21 12:00:00", + "cost": 0.0, + "filled": 13.296457823635782, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 142.15, + "amount": 0.4033233846898443, + "created_at": "2024-10-14 16:00:00", + "updated_at": "2024-10-14 18:00:00", + "cost": 0.0, + "filled": 0.4033233846898443, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 135.65, + "amount": 0.4033233846898443, + "created_at": "2024-10-07 04:00:00", + "updated_at": "2024-10-07 06:00:00", + "cost": 0.0, + "filled": 0.4033233846898443, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 123.97, + "amount": 1.6132935387593772, + "created_at": "2024-10-03 22:00:00", + "updated_at": "2024-10-04 00:00:00", + "cost": 0.0, + "filled": 1.6132935387593772, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2147.2, + "amount": 0.08648648648648649, + "created_at": "2024-10-02 18:00:00", + "updated_at": "2024-10-02 20:00:00", + "cost": 0.0, + "filled": 0.08648648648648649, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.7604, + "amount": 53.18583129454313, + "created_at": "2024-10-01 18:00:00", + "updated_at": "2024-10-01 20:00:00", + "cost": 0.0, + "filled": 53.18583129454313, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.8077, + "amount": 49.35955971272737, + "created_at": "2024-10-01 16:00:00", + "updated_at": "2024-10-01 18:00:00", + "cost": 0.0, + "filled": 49.35955971272737, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 141.32, + "amount": 1.1804517195246715, + "created_at": "2024-10-01 08:00:00", + "updated_at": "2024-10-01 10:00:00", + "cost": 0.0, + "filled": 1.1804517195246715, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.0519, + "amount": 49.35955971272737, + "created_at": "2024-09-30 14:00:00", + "updated_at": "2024-09-30 16:00:00", + "cost": 0.0, + "filled": 49.35955971272737, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.3265, + "amount": 26.143790849673206, + "created_at": "2024-09-29 18:00:00", + "updated_at": "2024-09-29 20:00:00", + "cost": 0.0, + "filled": 26.143790849673206, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.3889, + "amount": 13.071895424836601, + "created_at": "2024-09-27 06:00:00", + "updated_at": "2024-09-27 08:00:00", + "cost": 0.0, + "filled": 13.071895424836601, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 139.15, + "amount": 0.39348390650822385, + "created_at": "2024-09-26 16:00:00", + "updated_at": "2024-09-26 18:00:00", + "cost": 0.0, + "filled": 0.39348390650822385, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.1648, + "amount": 13.071895424836601, + "created_at": "2024-09-25 22:00:00", + "updated_at": "2024-09-26 00:00:00", + "cost": 0.0, + "filled": 13.071895424836601, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2312.5, + "amount": 0.08648648648648649, + "created_at": "2024-09-25 16:00:00", + "updated_at": "2024-09-25 18:00:00", + "cost": 0.0, + "filled": 0.08648648648648649, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56733.0, + "amount": 0.0010106318470307636, + "created_at": "2024-09-25 00:00:00", + "updated_at": "2024-09-25 02:00:00", + "cost": 0.0, + "filled": 0.0010106318470307636, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 127.07, + "amount": 1.5739356260328954, + "created_at": "2024-09-22 20:00:00", + "updated_at": "2024-09-22 22:00:00", + "cost": 0.0, + "filled": 1.5739356260328954, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.825, + "amount": 52.287581699346404, + "created_at": "2024-09-22 20:00:00", + "updated_at": "2024-09-22 22:00:00", + "cost": 0.0, + "filled": 52.287581699346404, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2155.1, + "amount": 0.07455453664355477, + "created_at": "2024-09-19 00:00:00", + "updated_at": "2024-09-19 02:00:00", + "cost": 0.0, + "filled": 0.07455453664355477, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 120.85, + "amount": 1.7148246591785992, + "created_at": "2024-09-18 22:00:00", + "updated_at": "2024-09-19 00:00:00", + "cost": 0.0, + "filled": 1.7148246591785992, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 116.63, + "amount": 1.7148246591785992, + "created_at": "2024-09-18 18:00:00", + "updated_at": "2024-09-18 20:00:00", + "cost": 0.0, + "filled": 1.7148246591785992, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 54140.0, + "amount": 0.0010106318470307636, + "created_at": "2024-09-14 00:00:00", + "updated_at": "2024-09-14 02:00:00", + "cost": 0.0, + "filled": 0.0010106318470307636, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 123.38, + "amount": 1.8925056775170326, + "created_at": "2024-09-13 16:00:00", + "updated_at": "2024-09-13 18:00:00", + "cost": 0.0, + "filled": 1.8925056775170326, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 49474.0, + "amount": 0.004042527388123054, + "created_at": "2024-08-05 02:00:00", + "updated_at": "2024-09-06 00:00:00", + "cost": 0.0, + "filled": 0.004042527388123054, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 49468.0, + "amount": 0.003609065973726, + "created_at": "2024-08-05 00:00:00", + "updated_at": "2024-08-05 02:00:00", + "cost": 0.0, + "filled": 0.003609065973726, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2505.7, + "amount": -0.037277268321777385, + "created_at": "2024-08-04 20:00:00", + "updated_at": "2024-08-04 22:00:00", + "cost": 0.0, + "filled": -0.037277268321777385, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2480.2, + "amount": 0.0, + "created_at": "2024-08-04 16:00:00", + "updated_at": "2024-08-04 18:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 55416.0, + "amount": 0.003609065973726, + "created_at": "2024-08-04 06:00:00", + "updated_at": "2024-08-05 00:00:00", + "cost": 0.0, + "filled": 0.003609065973726, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 53321.0, + "amount": 0.003554986757674328, + "created_at": "2024-08-04 00:00:00", + "updated_at": "2024-08-04 02:00:00", + "cost": 0.0, + "filled": 0.003554986757674328, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.4941, + "amount": 41.4765657403567, + "created_at": "2024-08-03 16:00:00", + "updated_at": "2024-08-03 18:00:00", + "cost": 0.0, + "filled": 41.4765657403567, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56259.0, + "amount": 0.003554986757674328, + "created_at": "2024-08-03 00:00:00", + "updated_at": "2024-08-03 02:00:00", + "cost": 0.0, + "filled": 0.003554986757674328, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 150.31, + "amount": -0.9462528387585163, + "created_at": "2024-08-02 04:00:00", + "updated_at": "2024-08-02 06:00:00", + "cost": 0.0, + "filled": -0.9462528387585163, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56362.0, + "amount": 0.0032533021016331576, + "created_at": "2024-08-02 00:00:00", + "updated_at": "2024-08-02 02:00:00", + "cost": 0.0, + "filled": 0.0032533021016331576, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.822, + "amount": 41.4765657403567, + "created_at": "2024-08-01 18:00:00", + "updated_at": "2024-08-01 20:00:00", + "cost": 0.0, + "filled": 41.4765657403567, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 150.3, + "amount": 0.0, + "created_at": "2024-08-01 16:00:00", + "updated_at": "2024-08-01 18:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.7876, + "amount": 39.3956704158213, + "created_at": "2024-08-01 14:00:00", + "updated_at": "2024-08-01 16:00:00", + "cost": 0.0, + "filled": 39.3956704158213, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.0767, + "amount": 39.3956704158213, + "created_at": "2024-07-31 00:00:00", + "updated_at": "2024-07-31 02:00:00", + "cost": 0.0, + "filled": 39.3956704158213, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 61476.0, + "amount": 0.0032533021016331576, + "created_at": "2024-07-30 08:00:00", + "updated_at": "2024-07-31 00:00:00", + "cost": 0.0, + "filled": 0.0032533021016331576, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 172.49, + "amount": 0.31541761291950543, + "created_at": "2024-07-29 14:00:00", + "updated_at": "2024-07-29 16:00:00", + "cost": 0.0, + "filled": 0.31541761291950543, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.3928, + "amount": 38.07348181991243, + "created_at": "2024-07-29 06:00:00", + "updated_at": "2024-07-29 08:00:00", + "cost": 0.0, + "filled": 38.07348181991243, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.253, + "amount": 38.07348181991243, + "created_at": "2024-07-28 16:00:00", + "updated_at": "2024-07-28 18:00:00", + "cost": 0.0, + "filled": 38.07348181991243, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 158.52, + "amount": 1.2616704516780217, + "created_at": "2024-07-25 20:00:00", + "updated_at": "2024-07-25 22:00:00", + "cost": 0.0, + "filled": 1.2616704516780217, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3078.3, + "amount": 0.018638634160888692, + "created_at": "2024-07-24 20:00:00", + "updated_at": "2024-07-24 22:00:00", + "cost": 0.0, + "filled": 0.018638634160888692, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.884, + "amount": 35.87701359738815, + "created_at": "2024-07-21 22:00:00", + "updated_at": "2024-07-22 00:00:00", + "cost": 0.0, + "filled": 35.87701359738815, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 61320.0, + "amount": 0.002906751414619022, + "created_at": "2024-07-19 16:00:00", + "updated_at": "2024-07-20 00:00:00", + "cost": 0.0, + "filled": 0.002906751414619022, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.5746, + "amount": 35.87701359738815, + "created_at": "2024-07-18 16:00:00", + "updated_at": "2024-07-18 18:00:00", + "cost": 0.0, + "filled": 35.87701359738815, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 58587.0, + "amount": 0.0009689171382063406, + "created_at": "2024-07-17 00:00:00", + "updated_at": "2024-07-17 02:00:00", + "cost": 0.0, + "filled": 0.0009689171382063406, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.8953, + "amount": 55.76208178438662, + "created_at": "2024-07-16 16:00:00", + "updated_at": "2024-07-16 18:00:00", + "cost": 0.0, + "filled": 55.76208178438662, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2942.9, + "amount": 0.018638634160888692, + "created_at": "2024-07-14 10:00:00", + "updated_at": "2024-07-14 12:00:00", + "cost": 0.0, + "filled": 0.018638634160888692, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 129.72, + "amount": 1.610435622835977, + "created_at": "2024-07-08 10:00:00", + "updated_at": "2024-07-08 12:00:00", + "cost": 0.0, + "filled": 1.610435622835977, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 51604.0, + "amount": 0.0038756685528253624, + "created_at": "2024-07-07 22:00:00", + "updated_at": "2024-07-08 00:00:00", + "cost": 0.0, + "filled": 0.0038756685528253624, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 124.19, + "amount": 1.610435622835977, + "created_at": "2024-07-07 20:00:00", + "updated_at": "2024-07-07 22:00:00", + "cost": 0.0, + "filled": 1.610435622835977, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 51604.0, + "amount": 0.003648636322174587, + "created_at": "2024-07-07 00:00:00", + "updated_at": "2024-07-07 02:00:00", + "cost": 0.0, + "filled": 0.003648636322174587, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2682.6, + "amount": 0.07455453664355477, + "created_at": "2024-07-05 04:00:00", + "updated_at": "2024-07-05 06:00:00", + "cost": 0.0, + "filled": 0.07455453664355477, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.6771, + "amount": -27.88104089219331, + "created_at": "2024-07-05 02:00:00", + "updated_at": "2024-07-05 04:00:00", + "cost": 0.0, + "filled": -27.88104089219331, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2701.3, + "amount": 0.06979584714709475, + "created_at": "2024-07-05 02:00:00", + "updated_at": "2024-07-05 04:00:00", + "cost": 0.0, + "filled": 0.06979584714709475, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.0064, + "amount": 0.0, + "created_at": "2024-07-05 00:00:00", + "updated_at": "2024-07-05 02:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2865.5, + "amount": 0.06979584714709475, + "created_at": "2024-07-05 00:00:00", + "updated_at": "2024-07-05 02:00:00", + "cost": 0.0, + "filled": 0.06979584714709475, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 124.46, + "amount": 1.5255530129672006, + "created_at": "2024-07-04 06:00:00", + "updated_at": "2024-07-04 08:00:00", + "cost": 0.0, + "filled": 1.5255530129672006, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 54815.0, + "amount": 0.003648636322174587, + "created_at": "2024-07-04 02:00:00", + "updated_at": "2024-07-05 00:00:00", + "cost": 0.0, + "filled": 0.003648636322174587, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 52808.0, + "amount": 0.003521250748265784, + "created_at": "2024-07-04 00:00:00", + "updated_at": "2024-07-04 02:00:00", + "cost": 0.0, + "filled": 0.003521250748265784, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2979.0, + "amount": 0.06331919204710948, + "created_at": "2024-07-04 00:00:00", + "updated_at": "2024-07-04 02:00:00", + "cost": 0.0, + "filled": 0.06331919204710948, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 131.1, + "amount": 1.5255530129672006, + "created_at": "2024-07-03 14:00:00", + "updated_at": "2024-07-03 16:00:00", + "cost": 0.0, + "filled": 1.5255530129672006, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 132.85, + "amount": 1.517796159975715, + "created_at": "2024-06-30 12:00:00", + "updated_at": "2024-06-30 14:00:00", + "cost": 0.0, + "filled": 1.517796159975715, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3158.6, + "amount": 0.06331919204710948, + "created_at": "2024-06-29 04:00:00", + "updated_at": "2024-06-29 06:00:00", + "cost": 0.0, + "filled": 0.06331919204710948, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 131.77, + "amount": 1.517796159975715, + "created_at": "2024-06-28 16:00:00", + "updated_at": "2024-06-28 18:00:00", + "cost": 0.0, + "filled": 1.517796159975715, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.8961, + "amount": 9.29368029739777, + "created_at": "2024-06-27 20:00:00", + "updated_at": "2024-06-27 22:00:00", + "cost": 0.0, + "filled": 9.29368029739777, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56798.0, + "amount": 0.003521250748265784, + "created_at": "2024-06-27 04:00:00", + "updated_at": "2024-06-28 00:00:00", + "cost": 0.0, + "filled": 0.003521250748265784, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 115.7, + "amount": 1.61537840239076, + "created_at": "2024-06-24 04:00:00", + "updated_at": "2024-06-24 06:00:00", + "cost": 0.0, + "filled": 1.61537840239076, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56158.0, + "amount": 0.003352498449469467, + "created_at": "2024-06-24 00:00:00", + "updated_at": "2024-06-24 02:00:00", + "cost": 0.0, + "filled": 0.003352498449469467, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59657.0, + "amount": 0.003352498449469467, + "created_at": "2024-06-21 10:00:00", + "updated_at": "2024-06-23 00:00:00", + "cost": 0.0, + "filled": 0.003352498449469467, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59983.0, + "amount": 0.0031658092599920855, + "created_at": "2024-06-21 00:00:00", + "updated_at": "2024-06-21 02:00:00", + "cost": 0.0, + "filled": 0.0031658092599920855, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3320.9, + "amount": 0.08102151931553023, + "created_at": "2024-06-19 02:00:00", + "updated_at": "2024-06-19 04:00:00", + "cost": 0.0, + "filled": 0.08102151931553023, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.38, + "amount": 37.17472118959108, + "created_at": "2024-06-18 02:00:00", + "updated_at": "2024-06-18 04:00:00", + "cost": 0.0, + "filled": 37.17472118959108, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.2606, + "amount": 35.31198135527384, + "created_at": "2024-06-18 00:00:00", + "updated_at": "2024-06-18 02:00:00", + "cost": 0.0, + "filled": 35.31198135527384, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 123.81, + "amount": 1.61537840239076, + "created_at": "2024-06-18 00:00:00", + "updated_at": "2024-06-18 02:00:00", + "cost": 0.0, + "filled": 1.61537840239076, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.6638, + "amount": 35.31198135527384, + "created_at": "2024-06-17 22:00:00", + "updated_at": "2024-06-18 00:00:00", + "cost": 0.0, + "filled": 35.31198135527384, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 131.52, + "amount": 1.444564824846515, + "created_at": "2024-06-17 14:00:00", + "updated_at": "2024-06-17 16:00:00", + "cost": 0.0, + "filled": 1.444564824846515, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.68, + "amount": 33.4179922470258, + "created_at": "2024-06-17 14:00:00", + "updated_at": "2024-06-17 16:00:00", + "cost": 0.0, + "filled": 33.4179922470258, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.9848, + "amount": 33.4179922470258, + "created_at": "2024-06-13 20:00:00", + "updated_at": "2024-06-13 22:00:00", + "cost": 0.0, + "filled": 33.4179922470258, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 138.45, + "amount": 1.444564824846515, + "created_at": "2024-06-13 16:00:00", + "updated_at": "2024-06-13 18:00:00", + "cost": 0.0, + "filled": 1.444564824846515, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.818, + "amount": 32.53143349761707, + "created_at": "2024-06-11 12:00:00", + "updated_at": "2024-06-11 14:00:00", + "cost": 0.0, + "filled": 32.53143349761707, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 147.38, + "amount": 1.288244766505636, + "created_at": "2024-06-08 20:00:00", + "updated_at": "2024-06-08 22:00:00", + "cost": 0.0, + "filled": 1.288244766505636, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.1479, + "amount": 32.53143349761707, + "created_at": "2024-06-07 20:00:00", + "updated_at": "2024-06-07 22:00:00", + "cost": 0.0, + "filled": 32.53143349761707, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.1132, + "amount": 30.58524873453533, + "created_at": "2024-06-07 18:00:00", + "updated_at": "2024-06-07 20:00:00", + "cost": 0.0, + "filled": 30.58524873453533, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.5391, + "amount": 30.58524873453533, + "created_at": "2024-06-06 20:00:00", + "updated_at": "2024-06-06 22:00:00", + "cost": 0.0, + "filled": 30.58524873453533, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 155.25, + "amount": 1.288244766505636, + "created_at": "2024-06-06 18:00:00", + "updated_at": "2024-06-06 20:00:00", + "cost": 0.0, + "filled": 1.288244766505636, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.5783, + "amount": 21.231873288180218, + "created_at": "2024-06-04 16:00:00", + "updated_at": "2024-06-04 18:00:00", + "cost": 0.0, + "filled": 21.231873288180218, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 63175.0, + "amount": 0.0031658092599920855, + "created_at": "2024-05-26 22:00:00", + "updated_at": "2024-05-27 00:00:00", + "cost": 0.0, + "filled": 0.0031658092599920855, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 149.35, + "amount": 1.2663036596175763, + "created_at": "2024-05-26 16:00:00", + "updated_at": "2024-05-26 18:00:00", + "cost": 0.0, + "filled": 1.2663036596175763, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 63795.0, + "amount": 0.0035420799093227543, + "created_at": "2024-05-24 18:00:00", + "updated_at": "2024-05-25 00:00:00", + "cost": 0.0, + "filled": 0.0035420799093227543, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3487.0, + "amount": 0.01620430386310604, + "created_at": "2024-05-23 12:00:00", + "updated_at": "2024-05-23 14:00:00", + "cost": 0.0, + "filled": 0.01620430386310604, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 157.94, + "amount": 1.2663036596175763, + "created_at": "2024-05-23 12:00:00", + "updated_at": "2024-05-23 14:00:00", + "cost": 0.0, + "filled": 1.2663036596175763, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 130.08, + "amount": 1.4591084847158386, + "created_at": "2024-05-13 02:00:00", + "updated_at": "2024-05-13 04:00:00", + "cost": 0.0, + "filled": 1.4591084847158386, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 137.07, + "amount": 1.4591084847158386, + "created_at": "2024-05-08 04:00:00", + "updated_at": "2024-05-08 06:00:00", + "cost": 0.0, + "filled": 1.4591084847158386, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 112.86, + "amount": 1.6754628466113763, + "created_at": "2024-05-01 06:00:00", + "updated_at": "2024-05-01 08:00:00", + "cost": 0.0, + "filled": 1.6754628466113763, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 56464.0, + "amount": 0.0035420799093227543, + "created_at": "2024-05-01 02:00:00", + "updated_at": "2024-05-02 00:00:00", + "cost": 0.0, + "filled": 0.0035420799093227543, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 54414.0, + "amount": 0.0033457684393663114, + "created_at": "2024-05-01 00:00:00", + "updated_at": "2024-05-01 02:00:00", + "cost": 0.0, + "filled": 0.0033457684393663114, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 119.37, + "amount": 1.6754628466113763, + "created_at": "2024-04-30 14:00:00", + "updated_at": "2024-04-30 16:00:00", + "cost": 0.0, + "filled": 1.6754628466113763, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 119.23, + "amount": 1.588057805304113, + "created_at": "2024-04-30 12:00:00", + "updated_at": "2024-04-30 14:00:00", + "cost": 0.0, + "filled": 1.588057805304113, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 125.94, + "amount": 1.588057805304113, + "created_at": "2024-04-29 06:00:00", + "updated_at": "2024-04-29 08:00:00", + "cost": 0.0, + "filled": 1.588057805304113, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59777.0, + "amount": 0.0033457684393663114, + "created_at": "2024-04-24 18:00:00", + "updated_at": "2024-04-25 00:00:00", + "cost": 0.0, + "filled": 0.0033457684393663114, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 142.24, + "amount": 1.186145816859086, + "created_at": "2024-04-20 18:00:00", + "updated_at": "2024-04-20 20:00:00", + "cost": 0.0, + "filled": 1.186145816859086, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 120.12, + "amount": 0.0, + "created_at": "2024-04-16 14:00:00", + "updated_at": "2024-04-16 16:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 135.03, + "amount": 0.39538193895302864, + "created_at": "2024-04-15 14:00:00", + "updated_at": "2024-04-15 16:00:00", + "cost": 0.0, + "filled": 0.39538193895302864, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59799.0, + "amount": 0.0031561671506122966, + "created_at": "2024-04-15 00:00:00", + "updated_at": "2024-04-15 02:00:00", + "cost": 0.0, + "filled": 0.0031561671506122966, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2813.8, + "amount": -0.04861291158931813, + "created_at": "2024-04-13 20:00:00", + "updated_at": "2024-04-13 22:00:00", + "cost": 0.0, + "filled": -0.04861291158931813, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2914.8, + "amount": 0.0, + "created_at": "2024-04-13 18:00:00", + "updated_at": "2024-04-13 20:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 126.46, + "amount": 1.5815277558121146, + "created_at": "2024-04-13 18:00:00", + "updated_at": "2024-04-13 20:00:00", + "cost": 0.0, + "filled": 1.5815277558121146, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 131.04, + "amount": 1.4459224985540775, + "created_at": "2024-04-13 16:00:00", + "updated_at": "2024-04-13 18:00:00", + "cost": 0.0, + "filled": 1.4459224985540775, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 138.32, + "amount": 1.4459224985540775, + "created_at": "2024-04-13 00:00:00", + "updated_at": "2024-04-13 02:00:00", + "cost": 0.0, + "filled": 1.4459224985540775, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 63368.0, + "amount": 0.0031561671506122966, + "created_at": "2024-04-12 20:00:00", + "updated_at": "2024-04-13 00:00:00", + "cost": 0.0, + "filled": 0.0031561671506122966, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 65147.0, + "amount": 0.0025066007152167373, + "created_at": "2024-04-10 20:00:00", + "updated_at": "2024-04-11 00:00:00", + "cost": 0.0, + "filled": 0.0025066007152167373, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3390.5, + "amount": 0.01620430386310604, + "created_at": "2024-04-08 20:00:00", + "updated_at": "2024-04-08 22:00:00", + "cost": 0.0, + "filled": 0.01620430386310604, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 168.55, + "amount": 0.6404508774177022, + "created_at": "2024-04-08 10:00:00", + "updated_at": "2024-04-08 12:00:00", + "cost": 0.0, + "filled": 0.6404508774177022, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 64924.0, + "amount": 0.0008355335717389125, + "created_at": "2024-04-01 00:00:00", + "updated_at": "2024-04-01 02:00:00", + "cost": 0.0, + "filled": 0.0008355335717389125, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 178.96, + "amount": 0.32022543870885106, + "created_at": "2024-03-26 06:00:00", + "updated_at": "2024-03-26 08:00:00", + "cost": 0.0, + "filled": 0.32022543870885106, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3085.6, + "amount": 0.06481721545242417, + "created_at": "2024-03-22 12:00:00", + "updated_at": "2024-03-22 14:00:00", + "cost": 0.0, + "filled": 0.06481721545242417, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 170.75, + "amount": 0.32022543870885106, + "created_at": "2024-03-21 14:00:00", + "updated_at": "2024-03-21 16:00:00", + "cost": 0.0, + "filled": 0.32022543870885106, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 156.14, + "amount": 1.2809017548354042, + "created_at": "2024-03-19 22:00:00", + "updated_at": "2024-03-20 00:00:00", + "cost": 0.0, + "filled": 1.2809017548354042, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 159.18, + "amount": 1.1658408627222383, + "created_at": "2024-03-19 20:00:00", + "updated_at": "2024-03-19 22:00:00", + "cost": 0.0, + "filled": 1.1658408627222383, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 171.55, + "amount": 1.1658408627222383, + "created_at": "2024-03-19 06:00:00", + "updated_at": "2024-03-19 08:00:00", + "cost": 0.0, + "filled": 1.1658408627222383, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 8.9008, + "amount": -10.615936644090109, + "created_at": "2024-03-17 00:00:00", + "updated_at": "2024-03-17 02:00:00", + "cost": 0.0, + "filled": -10.615936644090109, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 8.8945, + "amount": 0.0, + "created_at": "2024-03-16 22:00:00", + "updated_at": "2024-03-17 00:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59842.0, + "amount": 0.00334213428695565, + "created_at": "2024-03-16 22:00:00", + "updated_at": "2024-03-17 00:00:00", + "cost": 0.0, + "filled": 0.00334213428695565, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 59842.0, + "amount": 0.0031397667153330506, + "created_at": "2024-03-16 00:00:00", + "updated_at": "2024-03-16 02:00:00", + "cost": 0.0, + "filled": 0.0031397667153330506, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 63699.0, + "amount": 0.0031397667153330506, + "created_at": "2024-03-14 18:00:00", + "updated_at": "2024-03-15 00:00:00", + "cost": 0.0, + "filled": 0.0031397667153330506, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 10.705, + "amount": 5.3079683220450535, + "created_at": "2024-03-14 10:00:00", + "updated_at": "2024-03-14 12:00:00", + "cost": 0.0, + "filled": 5.3079683220450535, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 10.252, + "amount": 5.3079683220450535, + "created_at": "2024-03-14 00:00:00", + "updated_at": "2024-03-14 02:00:00", + "cost": 0.0, + "filled": 5.3079683220450535, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 9.4198, + "amount": 21.231873288180214, + "created_at": "2024-03-08 04:00:00", + "updated_at": "2024-03-08 06:00:00", + "cost": 0.0, + "filled": 21.231873288180214, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 109.13, + "amount": 1.6937669376693767, + "created_at": "2024-03-05 18:00:00", + "updated_at": "2024-03-05 20:00:00", + "cost": 0.0, + "filled": 1.6937669376693767, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 118.08, + "amount": 1.6937669376693767, + "created_at": "2024-03-02 14:00:00", + "updated_at": "2024-03-02 16:00:00", + "cost": 0.0, + "filled": 1.6937669376693767, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 49225.0, + "amount": 0.004229134507623015, + "created_at": "2024-02-26 16:00:00", + "updated_at": "2024-02-27 00:00:00", + "cost": 0.0, + "filled": 0.004229134507623015, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 100.9, + "amount": 2.1345400599805755, + "created_at": "2024-02-26 16:00:00", + "updated_at": "2024-02-26 18:00:00", + "cost": 0.0, + "filled": 2.1345400599805755, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 93.697, + "amount": 2.1345400599805755, + "created_at": "2024-02-23 18:00:00", + "updated_at": "2024-02-23 20:00:00", + "cost": 0.0, + "filled": 2.1345400599805755, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 92.708, + "amount": 2.0264861742980758, + "created_at": "2024-02-23 14:00:00", + "updated_at": "2024-02-23 16:00:00", + "cost": 0.0, + "filled": 2.0264861742980758, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.9413, + "amount": 22.97723721699703, + "created_at": "2024-02-22 10:00:00", + "updated_at": "2024-02-22 12:00:00", + "cost": 0.0, + "filled": 22.97723721699703, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 98.693, + "amount": 2.0264861742980758, + "created_at": "2024-02-20 14:00:00", + "updated_at": "2024-02-20 16:00:00", + "cost": 0.0, + "filled": 2.0264861742980758, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 47291.0, + "amount": 0.004229134507623015, + "created_at": "2024-02-17 14:00:00", + "updated_at": "2024-02-20 00:00:00", + "cost": 0.0, + "filled": 0.004229134507623015, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 99.18, + "amount": 1.8982536066818527, + "created_at": "2024-02-17 12:00:00", + "updated_at": "2024-02-17 14:00:00", + "cost": 0.0, + "filled": 1.8982536066818527, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 105.36, + "amount": 1.8982536066818527, + "created_at": "2024-02-15 16:00:00", + "updated_at": "2024-02-15 18:00:00", + "cost": 0.0, + "filled": 1.8982536066818527, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 7.15, + "amount": 7.659079072332343, + "created_at": "2024-02-14 10:00:00", + "updated_at": "2024-02-14 12:00:00", + "cost": 0.0, + "filled": 7.659079072332343, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2415.6, + "amount": 0.05476751191193383, + "created_at": "2024-02-12 18:00:00", + "updated_at": "2024-02-12 20:00:00", + "cost": 0.0, + "filled": 0.05476751191193383, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 101.59, + "amount": 2.8861361563593118, + "created_at": "2024-02-12 16:00:00", + "updated_at": "2024-02-12 18:00:00", + "cost": 0.0, + "filled": 2.8861361563593118, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.5282, + "amount": 30.636316289329372, + "created_at": "2024-02-12 08:00:00", + "updated_at": "2024-02-12 10:00:00", + "cost": 0.0, + "filled": 30.636316289329372, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 98.385, + "amount": 0.5772272312718625, + "created_at": "2024-02-09 22:00:00", + "updated_at": "2024-02-10 00:00:00", + "cost": 0.0, + "filled": 0.5772272312718625, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.3388, + "amount": 31.903523744197546, + "created_at": "2024-02-05 04:00:00", + "updated_at": "2024-02-05 06:00:00", + "cost": 0.0, + "filled": 31.903523744197546, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 39943.0, + "amount": 0.0031088727227507303, + "created_at": "2024-01-31 18:00:00", + "updated_at": "2024-02-02 00:00:00", + "cost": 0.0, + "filled": 0.0031088727227507303, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.2689, + "amount": 31.903523744197546, + "created_at": "2024-01-31 00:00:00", + "updated_at": "2024-01-31 02:00:00", + "cost": 0.0, + "filled": 31.903523744197546, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 81.77, + "amount": -1.7316816938155872, + "created_at": "2024-01-22 06:00:00", + "updated_at": "2024-01-22 08:00:00", + "cost": 0.0, + "filled": -1.7316816938155872, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 81.895, + "amount": 0.0, + "created_at": "2024-01-22 02:00:00", + "updated_at": "2024-01-22 04:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 36308.0, + "amount": 0.0015544363613753654, + "created_at": "2024-01-22 00:00:00", + "updated_at": "2024-01-22 02:00:00", + "cost": 0.0, + "filled": 0.0015544363613753654, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.3326, + "amount": 29.970628783791884, + "created_at": "2024-01-18 18:00:00", + "updated_at": "2024-01-18 20:00:00", + "cost": 0.0, + "filled": 29.970628783791884, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.6732, + "amount": 29.970628783791884, + "created_at": "2024-01-18 00:00:00", + "updated_at": "2024-01-18 02:00:00", + "cost": 0.0, + "filled": 29.970628783791884, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.6965, + "amount": 28.04498415458395, + "created_at": "2024-01-14 22:00:00", + "updated_at": "2024-01-15 00:00:00", + "cost": 0.0, + "filled": 28.04498415458395, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 38124.0, + "amount": 0.0015544363613753654, + "created_at": "2024-01-14 00:00:00", + "updated_at": "2024-01-14 02:00:00", + "cost": 0.0, + "filled": 0.0015544363613753654, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 7.1314, + "amount": 28.04498415458395, + "created_at": "2024-01-12 16:00:00", + "updated_at": "2024-01-12 18:00:00", + "cost": 0.0, + "filled": 28.04498415458395, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 92.13, + "amount": 0.5772272312718625, + "created_at": "2024-01-11 14:00:00", + "updated_at": "2024-01-11 16:00:00", + "cost": 0.0, + "filled": 0.5772272312718625, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 7.154, + "amount": 16.34574520252378, + "created_at": "2024-01-10 20:00:00", + "updated_at": "2024-01-10 22:00:00", + "cost": 0.0, + "filled": 16.34574520252378, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 86.621, + "amount": 2.30890892508745, + "created_at": "2024-01-10 14:00:00", + "updated_at": "2024-01-10 16:00:00", + "cost": 0.0, + "filled": 2.30890892508745, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 81.861, + "amount": 2.3150023728774323, + "created_at": "2024-01-07 22:00:00", + "updated_at": "2024-01-08 00:00:00", + "cost": 0.0, + "filled": 2.3150023728774323, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 86.393, + "amount": 2.3150023728774323, + "created_at": "2024-01-06 12:00:00", + "updated_at": "2024-01-06 14:00:00", + "cost": 0.0, + "filled": 2.3150023728774323, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 94.87, + "amount": 2.2253624559100063, + "created_at": "2023-12-31 08:00:00", + "updated_at": "2023-12-31 10:00:00", + "cost": 0.0, + "filled": 2.2253624559100063, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 89.873, + "amount": 2.2253624559100063, + "created_at": "2023-12-28 14:00:00", + "updated_at": "2023-12-28 16:00:00", + "cost": 0.0, + "filled": 2.2253624559100063, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 91.259, + "amount": 2.071379746048843, + "created_at": "2023-12-28 12:00:00", + "updated_at": "2023-12-28 14:00:00", + "cost": 0.0, + "filled": 2.071379746048843, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 96.554, + "amount": 2.071379746048843, + "created_at": "2023-12-26 18:00:00", + "updated_at": "2023-12-26 20:00:00", + "cost": 0.0, + "filled": 2.071379746048843, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.9062, + "amount": 8.172872601261892, + "created_at": "2023-12-23 02:00:00", + "updated_at": "2023-12-23 04:00:00", + "cost": 0.0, + "filled": 8.172872601261892, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2008.0, + "amount": 0.02738375595596692, + "created_at": "2023-12-13 02:00:00", + "updated_at": "2023-12-13 04:00:00", + "cost": 0.0, + "filled": 0.02738375595596692, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.5683, + "amount": 8.172872601261892, + "created_at": "2023-12-12 08:00:00", + "updated_at": "2023-12-12 10:00:00", + "cost": 0.0, + "filled": 8.172872601261892, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.1178, + "amount": 32.69149040504757, + "created_at": "2023-12-11 16:00:00", + "updated_at": "2023-12-11 18:00:00", + "cost": 0.0, + "filled": 32.69149040504757, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 2090.2, + "amount": 0.02738375595596692, + "created_at": "2023-12-06 10:00:00", + "updated_at": "2023-12-06 12:00:00", + "cost": 0.0, + "filled": 0.02738375595596692, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.1533, + "amount": 27.841193830391447, + "created_at": "2023-12-04 02:00:00", + "updated_at": "2023-12-04 04:00:00", + "cost": 0.0, + "filled": 27.841193830391447, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1825.9, + "amount": 0.10953502382386768, + "created_at": "2023-11-28 04:00:00", + "updated_at": "2023-11-28 06:00:00", + "cost": 0.0, + "filled": 0.10953502382386768, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1844.4, + "amount": 0.10968520346605243, + "created_at": "2023-11-22 08:00:00", + "updated_at": "2023-11-22 10:00:00", + "cost": 0.0, + "filled": 0.10968520346605243, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 50.557, + "amount": 3.7527676661537885, + "created_at": "2023-11-17 14:00:00", + "updated_at": "2023-11-17 16:00:00", + "cost": 0.0, + "filled": 3.7527676661537885, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1823.4, + "amount": 0.10968520346605243, + "created_at": "2023-11-17 04:00:00", + "updated_at": "2023-11-17 06:00:00", + "cost": 0.0, + "filled": 0.10968520346605243, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 53.294, + "amount": 3.7527676661537885, + "created_at": "2023-11-16 22:00:00", + "updated_at": "2023-11-17 00:00:00", + "cost": 0.0, + "filled": 3.7527676661537885, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 52.522, + "amount": 2.6841314150740816, + "created_at": "2023-11-15 00:00:00", + "updated_at": "2023-11-15 02:00:00", + "cost": 0.0, + "filled": 2.6841314150740816, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 42.529, + "amount": 1.342065707537041, + "created_at": "2023-11-09 16:00:00", + "updated_at": "2023-11-09 18:00:00", + "cost": 0.0, + "filled": 1.342065707537041, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 40.949, + "amount": 1.342065707537041, + "created_at": "2023-11-07 20:00:00", + "updated_at": "2023-11-07 22:00:00", + "cost": 0.0, + "filled": 1.342065707537041, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 37.256, + "amount": 5.368262830148164, + "created_at": "2023-11-06 04:00:00", + "updated_at": "2023-11-06 06:00:00", + "cost": 0.0, + "filled": 5.368262830148164, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 32166.0, + "amount": 0.0062177454455014615, + "created_at": "2023-10-27 06:00:00", + "updated_at": "2023-10-28 00:00:00", + "cost": 0.0, + "filled": 0.0062177454455014615, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.0548, + "amount": 13.920596915195723, + "created_at": "2023-10-26 04:00:00", + "updated_at": "2023-10-26 06:00:00", + "cost": 0.0, + "filled": 13.920596915195723, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.9162, + "amount": 13.920596915195723, + "created_at": "2023-10-24 14:00:00", + "updated_at": "2023-10-24 16:00:00", + "cost": 0.0, + "filled": 13.920596915195723, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 29090.0, + "amount": 0.008241645032348456, + "created_at": "2023-10-23 04:00:00", + "updated_at": "2023-10-24 00:00:00", + "cost": 0.0, + "filled": 0.008241645032348456, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.5918, + "amount": 55.682387660782894, + "created_at": "2023-10-10 16:00:00", + "updated_at": "2023-10-10 18:00:00", + "cost": 0.0, + "filled": 55.682387660782894, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.6022, + "amount": 52.68565106293301, + "created_at": "2023-10-10 12:00:00", + "updated_at": "2023-10-10 14:00:00", + "cost": 0.0, + "filled": 52.68565106293301, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.7961, + "amount": 52.68565106293301, + "created_at": "2023-10-08 08:00:00", + "updated_at": "2023-10-08 10:00:00", + "cost": 0.0, + "filled": 52.68565106293301, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.303, + "amount": 5.940005940005941, + "created_at": "2023-09-27 12:00:00", + "updated_at": "2023-09-27 14:00:00", + "cost": 0.0, + "filled": 5.940005940005941, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.8512, + "amount": 52.76070382778906, + "created_at": "2023-09-27 10:00:00", + "updated_at": "2023-09-27 12:00:00", + "cost": 0.0, + "filled": 52.76070382778906, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.7907, + "amount": 52.76070382778906, + "created_at": "2023-09-26 20:00:00", + "updated_at": "2023-09-26 22:00:00", + "cost": 0.0, + "filled": 52.76070382778906, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1501.0, + "amount": 0.13921759710427398, + "created_at": "2023-09-25 18:00:00", + "updated_at": "2023-09-25 20:00:00", + "cost": 0.0, + "filled": 0.13921759710427398, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.8753, + "amount": 54.31093007467753, + "created_at": "2023-09-18 04:00:00", + "updated_at": "2023-09-18 06:00:00", + "cost": 0.0, + "filled": 54.31093007467753, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1436.6, + "amount": 0.13921759710427398, + "created_at": "2023-09-11 20:00:00", + "updated_at": "2023-09-11 22:00:00", + "cost": 0.0, + "filled": 0.13921759710427398, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.6825, + "amount": 54.31093007467753, + "created_at": "2023-09-11 20:00:00", + "updated_at": "2023-09-11 22:00:00", + "cost": 0.0, + "filled": 54.31093007467753, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1432.3, + "amount": 0.13209167162010435, + "created_at": "2023-09-11 18:00:00", + "updated_at": "2023-09-11 20:00:00", + "cost": 0.0, + "filled": 0.13209167162010435, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1514.1, + "amount": 0.13209167162010435, + "created_at": "2023-09-10 14:00:00", + "updated_at": "2023-09-10 16:00:00", + "cost": 0.0, + "filled": 0.13209167162010435, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.982, + "amount": 50.794940823893945, + "created_at": "2023-09-06 22:00:00", + "updated_at": "2023-09-07 00:00:00", + "cost": 0.0, + "filled": 50.794940823893945, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1523.0, + "amount": 0.131250820317627, + "created_at": "2023-09-05 10:00:00", + "updated_at": "2023-09-05 12:00:00", + "cost": 0.0, + "filled": 0.131250820317627, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.9374, + "amount": 50.794940823893945, + "created_at": "2023-08-31 22:00:00", + "updated_at": "2023-09-01 00:00:00", + "cost": 0.0, + "filled": 50.794940823893945, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.9375, + "amount": 47.975436576472845, + "created_at": "2023-08-31 20:00:00", + "updated_at": "2023-08-31 22:00:00", + "cost": 0.0, + "filled": 47.975436576472845, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.1688, + "amount": 47.975436576472845, + "created_at": "2023-08-30 18:00:00", + "updated_at": "2023-08-30 20:00:00", + "cost": 0.0, + "filled": 47.975436576472845, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1523.8, + "amount": 0.131250820317627, + "created_at": "2023-08-22 02:00:00", + "updated_at": "2023-08-22 04:00:00", + "cost": 0.0, + "filled": 0.131250820317627, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 24267.0, + "amount": 0.008241645032348456, + "created_at": "2023-08-18 02:00:00", + "updated_at": "2023-08-19 00:00:00", + "cost": 0.0, + "filled": 0.008241645032348456, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 23988.0, + "amount": 0.007649938800489596, + "created_at": "2023-08-18 00:00:00", + "updated_at": "2023-08-18 02:00:00", + "cost": 0.0, + "filled": 0.007649938800489596, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1598.7, + "amount": 0.11839924224484963, + "created_at": "2023-08-17 14:00:00", + "updated_at": "2023-08-17 16:00:00", + "cost": 0.0, + "filled": 0.11839924224484963, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 26144.0, + "amount": 0.007649938800489596, + "created_at": "2023-08-17 10:00:00", + "updated_at": "2023-08-18 00:00:00", + "cost": 0.0, + "filled": 0.007649938800489596, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.2353, + "amount": 44.38920454545454, + "created_at": "2023-08-16 20:00:00", + "updated_at": "2023-08-16 22:00:00", + "cost": 0.0, + "filled": 44.38920454545454, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 26836.0, + "amount": 0.0074833495472573525, + "created_at": "2023-08-14 06:00:00", + "updated_at": "2023-08-15 00:00:00", + "cost": 0.0, + "filled": 0.0074833495472573525, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 26726.0, + "amount": 0.0074833495472573525, + "created_at": "2023-08-10 14:00:00", + "updated_at": "2023-08-11 00:00:00", + "cost": 0.0, + "filled": 0.0074833495472573525, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 26495.0, + "amount": 0.006300932538015626, + "created_at": "2023-08-07 22:00:00", + "updated_at": "2023-08-08 00:00:00", + "cost": 0.0, + "filled": 0.006300932538015626, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.5056, + "amount": 44.38920454545454, + "created_at": "2023-08-05 00:00:00", + "updated_at": "2023-08-05 02:00:00", + "cost": 0.0, + "filled": 44.38920454545454, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.517, + "amount": 41.92081158691232, + "created_at": "2023-08-04 18:00:00", + "updated_at": "2023-08-04 20:00:00", + "cost": 0.0, + "filled": 41.92081158691232, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1689.2, + "amount": 0.11839924224484963, + "created_at": "2023-07-30 20:00:00", + "updated_at": "2023-07-30 22:00:00", + "cost": 0.0, + "filled": 0.11839924224484963, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1711.9, + "amount": 0.11608334784375181, + "created_at": "2023-07-20 08:00:00", + "updated_at": "2023-07-20 10:00:00", + "cost": 0.0, + "filled": 0.11608334784375181, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1722.9, + "amount": 0.11608334784375181, + "created_at": "2023-07-15 02:00:00", + "updated_at": "2023-07-15 04:00:00", + "cost": 0.0, + "filled": 0.11608334784375181, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1773.7, + "amount": 0.06555657532450504, + "created_at": "2023-07-13 16:00:00", + "updated_at": "2023-07-13 18:00:00", + "cost": 0.0, + "filled": 0.06555657532450504, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 27316.0, + "amount": 0.002100310846005209, + "created_at": "2023-07-12 00:00:00", + "updated_at": "2023-07-12 02:00:00", + "cost": 0.0, + "filled": 0.002100310846005209, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.312, + "amount": 2.97000297000297, + "created_at": "2023-07-09 20:00:00", + "updated_at": "2023-07-09 22:00:00", + "cost": 0.0, + "filled": 2.97000297000297, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.04, + "amount": 2.97000297000297, + "created_at": "2023-07-06 22:00:00", + "updated_at": "2023-07-07 00:00:00", + "cost": 0.0, + "filled": 2.97000297000297, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.7709, + "amount": 41.92081158691232, + "created_at": "2023-07-06 00:00:00", + "updated_at": "2023-07-06 02:00:00", + "cost": 0.0, + "filled": 41.92081158691232, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 16.835, + "amount": 11.88001188001188, + "created_at": "2023-07-01 20:00:00", + "updated_at": "2023-07-01 22:00:00", + "cost": 0.0, + "filled": 11.88001188001188, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1676.7, + "amount": 0.03277828766225252, + "created_at": "2023-06-28 20:00:00", + "updated_at": "2023-06-28 22:00:00", + "cost": 0.0, + "filled": 0.03277828766225252, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1746.3, + "amount": 0.03277828766225252, + "created_at": "2023-06-23 18:00:00", + "updated_at": "2023-06-23 20:00:00", + "cost": 0.0, + "filled": 0.03277828766225252, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.2511, + "amount": 49.73392350922565, + "created_at": "2023-06-20 18:00:00", + "updated_at": "2023-06-20 20:00:00", + "cost": 0.0, + "filled": 49.73392350922565, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.0214, + "amount": 49.73392350922565, + "created_at": "2023-06-15 12:00:00", + "updated_at": "2023-06-15 14:00:00", + "cost": 0.0, + "filled": 49.73392350922565, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1525.4, + "amount": 0.13111315064901008, + "created_at": "2023-06-14 22:00:00", + "updated_at": "2023-06-15 00:00:00", + "cost": 0.0, + "filled": 0.13111315064901008, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1528.6, + "amount": 0.11931750387781888, + "created_at": "2023-06-14 20:00:00", + "updated_at": "2023-06-14 22:00:00", + "cost": 0.0, + "filled": 0.11931750387781888, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 3.9831, + "amount": 44.625923198786175, + "created_at": "2023-06-10 04:00:00", + "updated_at": "2023-06-10 06:00:00", + "cost": 0.0, + "filled": 44.625923198786175, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 23806.0, + "amount": 0.008401243384020835, + "created_at": "2023-06-10 04:00:00", + "updated_at": "2023-06-14 00:00:00", + "cost": 0.0, + "filled": 0.008401243384020835, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.4817, + "amount": 44.625923198786175, + "created_at": "2023-06-10 02:00:00", + "updated_at": "2023-06-10 04:00:00", + "cost": 0.0, + "filled": 44.625923198786175, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.5918, + "amount": 41.140412226930515, + "created_at": "2023-06-09 18:00:00", + "updated_at": "2023-06-09 20:00:00", + "cost": 0.0, + "filled": 41.140412226930515, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 25281.0, + "amount": 0.008076565844203045, + "created_at": "2023-06-06 20:00:00", + "updated_at": "2023-06-07 00:00:00", + "cost": 0.0, + "filled": 0.008076565844203045, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.534, + "amount": 10.710651743158571, + "created_at": "2023-06-02 06:00:00", + "updated_at": "2023-06-02 08:00:00", + "cost": 0.0, + "filled": 10.710651743158571, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1676.2, + "amount": 0.11931750387781888, + "created_at": "2023-05-24 20:00:00", + "updated_at": "2023-05-24 22:00:00", + "cost": 0.0, + "filled": 0.11931750387781888, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.8614, + "amount": 41.140412226930515, + "created_at": "2023-05-24 18:00:00", + "updated_at": "2023-05-24 20:00:00", + "cost": 0.0, + "filled": 41.140412226930515, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1678.9, + "amount": 0.1747030048916841, + "created_at": "2023-05-22 08:00:00", + "updated_at": "2023-05-22 10:00:00", + "cost": 0.0, + "filled": 0.1747030048916841, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 24763.0, + "amount": 0.008076565844203045, + "created_at": "2023-05-21 20:00:00", + "updated_at": "2023-05-22 00:00:00", + "cost": 0.0, + "filled": 0.008076565844203045, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.673, + "amount": 10.710651743158571, + "created_at": "2023-05-20 04:00:00", + "updated_at": "2023-05-20 06:00:00", + "cost": 0.0, + "filled": 10.710651743158571, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 25263.0, + "amount": 0.014517299782240506, + "created_at": "2023-05-17 18:00:00", + "updated_at": "2023-05-18 00:00:00", + "cost": 0.0, + "filled": 0.014517299782240506, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.314, + "amount": 10.656436487638533, + "created_at": "2023-05-17 02:00:00", + "updated_at": "2023-05-17 04:00:00", + "cost": 0.0, + "filled": 10.656436487638533, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.9208, + "amount": 20.20610224287735, + "created_at": "2023-05-17 02:00:00", + "updated_at": "2023-05-17 04:00:00", + "cost": 0.0, + "filled": 20.20610224287735, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.768, + "amount": 10.656436487638533, + "created_at": "2023-05-08 22:00:00", + "updated_at": "2023-05-09 00:00:00", + "cost": 0.0, + "filled": 10.656436487638533, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.75, + "amount": 10.035626473982639, + "created_at": "2023-05-08 16:00:00", + "updated_at": "2023-05-08 18:00:00", + "cost": 0.0, + "filled": 10.035626473982639, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.929, + "amount": 10.035626473982639, + "created_at": "2023-05-06 22:00:00", + "updated_at": "2023-05-07 00:00:00", + "cost": 0.0, + "filled": 10.035626473982639, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20.186, + "amount": 9.900009900009898, + "created_at": "2023-05-04 00:00:00", + "updated_at": "2023-05-04 02:00:00", + "cost": 0.0, + "filled": 9.900009900009898, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20.202, + "amount": 9.900009900009898, + "created_at": "2023-05-01 10:00:00", + "updated_at": "2023-05-01 12:00:00", + "cost": 0.0, + "filled": 9.900009900009898, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.992, + "amount": 10.318852543597151, + "created_at": "2023-04-25 22:00:00", + "updated_at": "2023-04-26 00:00:00", + "cost": 0.0, + "filled": 10.318852543597151, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.382, + "amount": 10.318852543597151, + "created_at": "2023-04-22 00:00:00", + "updated_at": "2023-04-22 02:00:00", + "cost": 0.0, + "filled": 10.318852543597151, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.327, + "amount": 9.661369015989566, + "created_at": "2023-04-21 18:00:00", + "updated_at": "2023-04-21 20:00:00", + "cost": 0.0, + "filled": 9.661369015989566, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20.701, + "amount": 9.661369015989566, + "created_at": "2023-04-20 08:00:00", + "updated_at": "2023-04-20 10:00:00", + "cost": 0.0, + "filled": 9.661369015989566, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.38, + "amount": 5.536485439043294, + "created_at": "2023-03-31 18:00:00", + "updated_at": "2023-03-31 20:00:00", + "cost": 0.0, + "filled": 5.536485439043294, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19.438, + "amount": 2.7682427195216475, + "created_at": "2023-03-22 18:00:00", + "updated_at": "2023-03-22 20:00:00", + "cost": 0.0, + "filled": 2.7682427195216475, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20.505, + "amount": 2.7682427195216475, + "created_at": "2023-03-18 14:00:00", + "updated_at": "2023-03-18 16:00:00", + "cost": 0.0, + "filled": 2.7682427195216475, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.062, + "amount": 11.07297087808659, + "created_at": "2023-03-15 16:00:00", + "updated_at": "2023-03-15 18:00:00", + "cost": 0.0, + "filled": 11.07297087808659, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.672, + "amount": 10.103051121438675, + "created_at": "2023-03-15 14:00:00", + "updated_at": "2023-03-15 16:00:00", + "cost": 0.0, + "filled": 10.103051121438675, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1632.1, + "amount": 0.03494060097833683, + "created_at": "2023-03-14 16:00:00", + "updated_at": "2023-03-14 18:00:00", + "cost": 0.0, + "filled": 0.03494060097833683, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.368, + "amount": 10.103051121438675, + "created_at": "2023-03-13 08:00:00", + "updated_at": "2023-03-13 10:00:00", + "cost": 0.0, + "filled": 10.103051121438675, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 4.949, + "amount": 40.4122044857547, + "created_at": "2023-03-10 08:00:00", + "updated_at": "2023-03-10 10:00:00", + "cost": 0.0, + "filled": 40.4122044857547, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1351.4, + "amount": -0.10482180293501048, + "created_at": "2023-03-10 00:00:00", + "updated_at": "2023-03-10 02:00:00", + "cost": 0.0, + "filled": -0.10482180293501048, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1353.8, + "amount": 0.0, + "created_at": "2023-03-09 20:00:00", + "updated_at": "2023-03-09 22:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19257.0, + "amount": -0.007258649891120253, + "created_at": "2023-03-09 02:00:00", + "updated_at": "2023-03-10 00:00:00", + "cost": 0.0, + "filled": -0.007258649891120253, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 19257.0, + "amount": 0.0, + "created_at": "2023-03-09 00:00:00", + "updated_at": "2023-03-09 02:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.373, + "amount": 35.1500026362502, + "created_at": "2023-03-08 04:00:00", + "updated_at": "2023-03-08 06:00:00", + "cost": 0.0, + "filled": 35.1500026362502, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.6899, + "amount": 35.1500026362502, + "created_at": "2023-03-03 02:00:00", + "updated_at": "2023-03-03 04:00:00", + "cost": 0.0, + "filled": 35.1500026362502, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.4991, + "amount": 33.7108953613808, + "created_at": "2023-03-03 00:00:00", + "updated_at": "2023-03-03 02:00:00", + "cost": 0.0, + "filled": 33.7108953613808, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.9328, + "amount": 33.7108953613808, + "created_at": "2023-03-02 12:00:00", + "updated_at": "2023-03-02 14:00:00", + "cost": 0.0, + "filled": 33.7108953613808, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 21.225, + "amount": 9.953715224207436, + "created_at": "2023-03-01 06:00:00", + "updated_at": "2023-03-01 08:00:00", + "cost": 0.0, + "filled": 9.953715224207436, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.9771, + "amount": 31.770237641377555, + "created_at": "2023-02-28 20:00:00", + "updated_at": "2023-02-28 22:00:00", + "cost": 0.0, + "filled": 31.770237641377555, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.2952, + "amount": 31.770237641377555, + "created_at": "2023-02-24 18:00:00", + "updated_at": "2023-02-24 20:00:00", + "cost": 0.0, + "filled": 31.770237641377555, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.2828, + "amount": 30.034539720678783, + "created_at": "2023-02-24 16:00:00", + "updated_at": "2023-02-24 18:00:00", + "cost": 0.0, + "filled": 30.034539720678783, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.659, + "amount": 30.034539720678783, + "created_at": "2023-02-24 06:00:00", + "updated_at": "2023-02-24 08:00:00", + "cost": 0.0, + "filled": 30.034539720678783, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 6.8053, + "amount": 19.09052728036348, + "created_at": "2023-02-23 00:00:00", + "updated_at": "2023-02-23 02:00:00", + "cost": 0.0, + "filled": 19.09052728036348, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 22724.0, + "amount": 0.0024195499637067507, + "created_at": "2023-02-19 00:00:00", + "updated_at": "2023-02-19 02:00:00", + "cost": 0.0, + "filled": 0.0024195499637067507, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1570.1, + "amount": 0.03494060097833683, + "created_at": "2023-02-16 06:00:00", + "updated_at": "2023-02-16 08:00:00", + "cost": 0.0, + "filled": 0.03494060097833683, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.878, + "amount": -4.976857612103718, + "created_at": "2023-02-10 22:00:00", + "updated_at": "2023-02-11 00:00:00", + "cost": 0.0, + "filled": -4.976857612103718, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 18.925, + "amount": 0.0, + "created_at": "2023-02-10 20:00:00", + "updated_at": "2023-02-10 22:00:00", + "cost": 0.0, + "filled": 0.0, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1431.0, + "amount": 0.13976240391334732, + "created_at": "2023-02-10 16:00:00", + "updated_at": "2023-02-10 18:00:00", + "cost": 0.0, + "filled": 0.13976240391334732, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1427.0, + "amount": 0.13259082471492972, + "created_at": "2023-02-10 14:00:00", + "updated_at": "2023-02-10 16:00:00", + "cost": 0.0, + "filled": 0.13259082471492972, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1508.4, + "amount": 0.13259082471492972, + "created_at": "2023-02-09 02:00:00", + "updated_at": "2023-02-09 04:00:00", + "cost": 0.0, + "filled": 0.13259082471492972, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1519.8, + "amount": 0.14284693950432112, + "created_at": "2023-02-02 00:00:00", + "updated_at": "2023-02-02 02:00:00", + "cost": 0.0, + "filled": 0.14284693950432112, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "BTC", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20665.0, + "amount": 0.009678199854827003, + "created_at": "2023-01-25 00:00:00", + "updated_at": "2023-01-25 02:00:00", + "cost": 0.0, + "filled": 0.009678199854827003, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 22.041, + "amount": 2.488428806051859, + "created_at": "2023-01-24 20:00:00", + "updated_at": "2023-01-24 22:00:00", + "cost": 0.0, + "filled": 2.488428806051859, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.9936, + "amount": 9.545263640181743, + "created_at": "2023-01-24 10:00:00", + "updated_at": "2023-01-24 12:00:00", + "cost": 0.0, + "filled": 9.545263640181743, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 22.909, + "amount": 2.488428806051859, + "created_at": "2023-01-21 00:00:00", + "updated_at": "2023-01-21 02:00:00", + "cost": 0.0, + "filled": 2.488428806051859, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "SELL", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.7342, + "amount": 9.545263640181743, + "created_at": "2023-01-21 00:00:00", + "updated_at": "2023-01-21 02:00:00", + "cost": 0.0, + "filled": 9.545263640181743, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "ETH", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 1400.1, + "amount": 0.14284693950432112, + "created_at": "2023-01-18 22:00:00", + "updated_at": "2023-01-19 00:00:00", + "cost": 0.0, + "filled": 0.14284693950432112, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "DOT", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 5.2382, + "amount": 38.18105456072697, + "created_at": "2023-01-18 22:00:00", + "updated_at": "2023-01-19 00:00:00", + "cost": 0.0, + "filled": 38.18105456072697, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + }, + { + "external_id": null, + "target_symbol": "SOL", + "trading_symbol": "EUR", + "order_side": "BUY", + "order_type": "LIMIT", + "status": "CLOSED", + "price": 20.093, + "amount": 9.953715224207436, + "created_at": "2023-01-18 14:00:00", + "updated_at": "2023-01-18 16:00:00", + "cost": 0.0, + "filled": 9.953715224207436, + "remaining": 0.0, + "order_fee_currency": null, + "order_fee_rate": null, + "order_fee": null + } + ], + "created_at": "2025-04-22 10:06:21" +} \ No newline at end of file diff --git a/tests/services/test_trade_service.py b/tests/services/test_trade_service.py index 13cd9d51..147e0001 100644 --- a/tests/services/test_trade_service.py +++ b/tests/services/test_trade_service.py @@ -2969,3 +2969,273 @@ def test_update_latest_price_and_take_profits(self): ) self.assertAlmostEqual(22.5, take_profit_two.take_profit_price) self.assertEqual(25, take_profit_two.high_water_mark) + + def test_add_stop_loss_100_percent_and_take_profit_sell(self): + """ + Test if the stop loss is triggered correctly and scaled down if + the take profits are triggered before the stop loss. + + 1. Create a buy order for ADA with amount 20 at 20 EUR + 2. Create a take profit with fixed percentage of 5 and + sell percentage 25 for the trade. This is a tp price + of 21 EUR + 3. Create a take profit with fixed percentage of 10 and + sell percentage 25 for the trade. This is a tp price + of 22 EUR + 4. Create a stop loss with fixed percentage of 10 and + sell percentage 100 for the trade. This is a stop loss price + of 18 EUR + 5. Update the last reported price of ada to 21 EUR, triggering 1 + tp orders + 6. Update the last reported price of ada to 22 EUR, triggering 1 + tp orders + 7. Update the last reported price of ada to 18 EUR, triggering 1 + stop loss order + 8. Check that the triggered tp orders are correct + """ + + order_service = self.app.container.order_service() + take_profit_repository = self.app.container.\ + trade_take_profit_repository() + stop_loss_repository = self.app.container.\ + trade_stop_loss_repository() + buy_order_one = order_service.create( + { + "target_symbol": "ADA", + "trading_symbol": "EUR", + "amount": 20, + "filled": 20, + "remaining": 0, + "order_side": "BUY", + "price": 20, + "order_type": "LIMIT", + "portfolio_id": 1, + "status": "CLOSED", + } + ) + + trade_service = self.app.container.trade_service() + trade_one = self.app.container.trade_service().find( + {"order_id": buy_order_one.id} + ) + trade_one_id = trade_one.id + take_profit_one = trade_service.add_take_profit( + trade_one, + 5, + "fixed", + sell_percentage=25, + ) + self.assertEqual(21, take_profit_one.take_profit_price) + + take_profit_two = trade_service.add_take_profit( + trade_one, + 10, + "fixed", + sell_percentage=25, + ) + self.assertEqual(22, take_profit_two.take_profit_price) + + # Create a stop loss with a trailing percentage of 10 and + # sell percentage 100 for the trade. + stop_loss_one = trade_service.add_stop_loss( + trade_one, + 10, + "fixed", + sell_percentage=100, + ) + self.assertEqual(18, stop_loss_one.stop_loss_price) + + # Update the last reported price of ada to 21 EUR, triggering 0 + # stop loss orders. Both stop losses should have their high water mark + # set to 21 EUR + + trade_service.update( + trade_one_id, + { + "last_reported_price": 21, + "last_reported_price_datetime": datetime.now(), + } + ) + + take_profit_one = take_profit_repository.get( + take_profit_one.id + ) + self.assertEqual(21, take_profit_one.take_profit_price) + + take_profit_two = take_profit_repository.get( + take_profit_two.id + ) + + self.assertEqual(22, take_profit_two.take_profit_price) + + trade_service.update( + trade_one_id, + { + "last_reported_price": 25, + "last_reported_price_datetime": datetime.now(), + } + ) + + sell_order_data = trade_service.get_triggered_take_profit_orders() + self.assertEqual(2, len(sell_order_data[0]['take_profits'])) + + for order_data in sell_order_data: + self.assertEqual("SELL", order_data["order_side"]) + self.assertEqual("EUR", order_data["trading_symbol"]) + self.assertEqual(1, order_data["portfolio_id"]) + self.assertEqual("LIMIT", order_data["order_type"]) + self.assertEqual(25, order_data["price"]) + self.assertEqual(10, order_data["amount"]) + self.assertEqual("ADA", order_data["target_symbol"]) + sell_order = order_service.create(order_data) + + # Trigger the stop loss + trade_service.update( + trade_one_id, + { + "last_reported_price": 18, + "last_reported_price_datetime": datetime.now(), + } + ) + + sell_order_data = trade_service.get_triggered_stop_loss_orders() + self.assertEqual(1, len(sell_order_data)) + + # Amount should be 10 not 20 (100%), because the take + # profits have been triggered before the stop loss + for order_data in sell_order_data: + self.assertEqual("SELL", order_data["order_side"]) + self.assertEqual("EUR", order_data["trading_symbol"]) + self.assertEqual(1, order_data["portfolio_id"]) + self.assertEqual("LIMIT", order_data["order_type"]) + self.assertEqual(18, order_data["price"]) + self.assertEqual(10, order_data["amount"]) + self.assertEqual("ADA", order_data["target_symbol"]) + sell_order = order_service.create(order_data) + + stop_loss_one = stop_loss_repository.get( + stop_loss_one.id + ) + self.assertFalse(stop_loss_one.active) + + def test_add_stop_loss_and_take_profit_sell_100_percent(self): + """ + Test if the stop loss is triggered correctly and scaled down if + the take profits are triggered before the stop loss. + + 1. Create a buy order for ADA with amount 20 at 20 EUR + 2. Create a stop loss with fixed percentage of 5 and + sell percentage 25 for the trade. This is a stop loss price + of 19 EUR + 3. Create a stop loss with fixed percentage of 10 and + sell percentage 25 for the trade. This is a stop loss price + of 18 EUR + 4. Create a take profit with fixed percentage of 5 and + sell percentage 100 for the trade. This is a tp price + of 21 EUR + 5. Update the last reported price of ada to 18 EUR, triggering 2 + stop loss orders + 6. Update the last reported price of ada to 21 EUR, triggering 1 + tp orders + """ + + order_service = self.app.container.order_service() + take_profit_repository = self.app.container.\ + trade_take_profit_repository() + stop_loss_repository = self.app.container.\ + trade_stop_loss_repository() + buy_order_one = order_service.create( + { + "target_symbol": "ADA", + "trading_symbol": "EUR", + "amount": 20, + "filled": 20, + "remaining": 0, + "order_side": "BUY", + "price": 20, + "order_type": "LIMIT", + "portfolio_id": 1, + "status": "CLOSED", + } + ) + + trade_service = self.app.container.trade_service() + trade_one = self.app.container.trade_service().find( + {"order_id": buy_order_one.id} + ) + trade_one_id = trade_one.id + stop_loss_one = trade_service.add_stop_loss( + trade_one, + 5, + "fixed", + sell_percentage=25, + ) + self.assertEqual(19, stop_loss_one.stop_loss_price) + + stop_loss_two = trade_service.add_stop_loss( + trade_one, + 10, + "fixed", + sell_percentage=25, + ) + self.assertEqual(18, stop_loss_two.stop_loss_price) + + # Create a take profit with a trailing percentage of 10 and + # sell percentage 100 for the trade. + take_profit_one = trade_service.add_take_profit( + trade_one, + 5, + "fixed", + sell_percentage=100, + ) + self.assertEqual(21, take_profit_one.take_profit_price) + + trade_service.update( + trade_one_id, + { + "last_reported_price": 18, + "last_reported_price_datetime": datetime.now(), + } + ) + + sell_order_data = trade_service.get_triggered_stop_loss_orders() + self.assertEqual(2, len(sell_order_data[0]['stop_losses'])) + + for order_data in sell_order_data: + self.assertEqual("SELL", order_data["order_side"]) + self.assertEqual("EUR", order_data["trading_symbol"]) + self.assertEqual(1, order_data["portfolio_id"]) + self.assertEqual("LIMIT", order_data["order_type"]) + self.assertEqual(18, order_data["price"]) + self.assertEqual(10, order_data["amount"]) + self.assertEqual("ADA", order_data["target_symbol"]) + sell_order = order_service.create(order_data) + + # Trigger the take profit + trade_service.update( + trade_one_id, + { + "last_reported_price": 21, + "last_reported_price_datetime": datetime.now(), + } + ) + + sell_order_data = trade_service.get_triggered_take_profit_orders() + self.assertEqual(1, len(sell_order_data)) + + # Amount should be 10 not 20 (100%), because the take + # profits have been triggered before the stop loss + for order_data in sell_order_data: + self.assertEqual("SELL", order_data["order_side"]) + self.assertEqual("EUR", order_data["trading_symbol"]) + self.assertEqual(1, order_data["portfolio_id"]) + self.assertEqual("LIMIT", order_data["order_type"]) + self.assertEqual(21, order_data["price"]) + self.assertEqual(10, order_data["amount"]) + self.assertEqual("ADA", order_data["target_symbol"]) + sell_order = order_service.create(order_data) + + take_profit_one = take_profit_repository.get( + take_profit_one.id + ) + self.assertFalse(take_profit_one.active) \ No newline at end of file From 5cd079fd9e6d0dfaa1a44cd90e46c2343455a0ee Mon Sep 17 00:00:00 2001 From: marcvanduyn Date: Sun, 27 Apr 2025 23:42:38 +0200 Subject: [PATCH 2/3] Add poetry.lock and pyproject.toml to the commit --- poetry.lock | 2254 +++++++++++++++++++++++++----------------------- pyproject.toml | 2 +- 2 files changed, 1193 insertions(+), 1063 deletions(-) diff --git a/poetry.lock b/poetry.lock index 927eec6b..b6736fb0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -153,13 +153,13 @@ frozenlist = ">=1.1.0" [[package]] name = "alembic" -version = "1.15.1" +version = "1.15.2" description = "A database migration tool for SQLAlchemy." optional = false python-versions = ">=3.9" files = [ - {file = "alembic-1.15.1-py3-none-any.whl", hash = "sha256:197de710da4b3e91cf66a826a5b31b5d59a127ab41bd0fc42863e2902ce2bbbe"}, - {file = "alembic-1.15.1.tar.gz", hash = "sha256:e1a1c738577bca1f27e68728c910cd389b9a92152ff91d902da649c192e30c49"}, + {file = "alembic-1.15.2-py3-none-any.whl", hash = "sha256:2e76bd916d547f6900ec4bb5a90aeac1485d2c92536923d0b138c02b126edc53"}, + {file = "alembic-1.15.2.tar.gz", hash = "sha256:1c72391bbdeffccfe317eefba686cb9a3c078005478885413b95c3b26c57a8a7"}, ] [package.dependencies] @@ -351,13 +351,13 @@ files = [ [[package]] name = "azure-core" -version = "1.32.0" +version = "1.33.0" description = "Microsoft Azure Core Library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "azure_core-1.32.0-py3-none-any.whl", hash = "sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4"}, - {file = "azure_core-1.32.0.tar.gz", hash = "sha256:22b3c35d6b2dae14990f6c1be2912bf23ffe50b220e708a28ab1bb92b1c730e5"}, + {file = "azure_core-1.33.0-py3-none-any.whl", hash = "sha256:9b5b6d0223a1d38c37500e6971118c1e0f13f54951e6893968b38910bc9cda8f"}, + {file = "azure_core-1.33.0.tar.gz", hash = "sha256:f367aa07b5e3005fec2c1e184b882b0b039910733907d001c20fb08ebb8c0eb9"}, ] [package.dependencies] @@ -367,6 +367,7 @@ typing-extensions = ">=4.6.0" [package.extras] aio = ["aiohttp (>=3.0)"] +tracing = ["opentelemetry-api (>=1.26,<2.0)"] [[package]] name = "azure-identity" @@ -452,13 +453,13 @@ typing-extensions = ">=4.6.0" [[package]] name = "azure-storage-blob" -version = "12.25.0" +version = "12.25.1" description = "Microsoft Azure Blob Storage Client Library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "azure_storage_blob-12.25.0-py3-none-any.whl", hash = "sha256:a38e18bf10258fb19028f343db0d3d373280c6427a619c98c06d76485805b755"}, - {file = "azure_storage_blob-12.25.0.tar.gz", hash = "sha256:42364ca8f9f49dbccd0acc10144ed47bb6770bf78719970b51915f048891abba"}, + {file = "azure_storage_blob-12.25.1-py3-none-any.whl", hash = "sha256:1f337aab12e918ec3f1b638baada97550673911c4ceed892acc8e4e891b74167"}, + {file = "azure_storage_blob-12.25.1.tar.gz", hash = "sha256:4f294ddc9bc47909ac66b8934bd26b50d2000278b10ad82cc109764fdc6e0e3b"}, ] [package.dependencies] @@ -484,15 +485,71 @@ files = [ [package.extras] dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"] +[[package]] +name = "backports-datetime-fromisoformat" +version = "2.0.3" +description = "Backport of Python 3.11's datetime.fromisoformat" +optional = false +python-versions = ">3" +files = [ + {file = "backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f681f638f10588fa3c101ee9ae2b63d3734713202ddfcfb6ec6cea0778a29d4"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:cd681460e9142f1249408e5aee6d178c6d89b49e06d44913c8fdfb6defda8d1c"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:ee68bc8735ae5058695b76d3bb2aee1d137c052a11c8303f1e966aa23b72b65b"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8273fe7932db65d952a43e238318966eab9e49e8dd546550a41df12175cc2be4"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39d57ea50aa5a524bb239688adc1d1d824c31b6094ebd39aa164d6cadb85de22"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ac6272f87693e78209dc72e84cf9ab58052027733cd0721c55356d3c881791cf"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:44c497a71f80cd2bcfc26faae8857cf8e79388e3d5fbf79d2354b8c360547d58"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:6335a4c9e8af329cb1ded5ab41a666e1448116161905a94e054f205aa6d263bc"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2e4b66e017253cdbe5a1de49e0eecff3f66cd72bcb1229d7db6e6b1832c0443"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:43e2d648e150777e13bbc2549cc960373e37bf65bd8a5d2e0cef40e16e5d8dd0"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:4ce6326fd86d5bae37813c7bf1543bae9e4c215ec6f5afe4c518be2635e2e005"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7c8fac333bf860208fd522a5394369ee3c790d0aa4311f515fcc4b6c5ef8d75"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4da5ab3aa0cc293dc0662a0c6d1da1a011dc1edcbc3122a288cfed13a0b45"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:58ea11e3bf912bd0a36b0519eae2c5b560b3cb972ea756e66b73fb9be460af01"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8a375c7dbee4734318714a799b6c697223e4bbb57232af37fbfff88fb48a14c6"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:ac677b1664c4585c2e014739f6678137c8336815406052349c85898206ec7061"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66ce47ee1ba91e146149cf40565c3d750ea1be94faf660ca733d8601e0848147"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:8b7e069910a66b3bba61df35b5f879e5253ff0821a70375b9daf06444d046fa4"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:a3b5d1d04a9e0f7b15aa1e647c750631a873b298cdd1255687bb68779fe8eb35"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec1b95986430e789c076610aea704db20874f0781b8624f648ca9fb6ef67c6e1"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffe5f793db59e2f1d45ec35a1cf51404fdd69df9f6952a0c87c3060af4c00e32"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:620e8e73bd2595dfff1b4d256a12b67fce90ece3de87b38e1dde46b910f46f4d"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4cf9c0a985d68476c1cabd6385c691201dda2337d7453fb4da9679ce9f23f4e7"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:d144868a73002e6e2e6fef72333e7b0129cecdd121aa8f1edba7107fd067255d"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e81b26497a17c29595bc7df20bc6a872ceea5f8c9d6537283945d4b6396aec10"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:5ba00ead8d9d82fd6123eb4891c566d30a293454e54e32ff7ead7644f5f7e575"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:24d574cb4072e1640b00864e94c4c89858033936ece3fc0e1c6f7179f120d0a8"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9735695a66aad654500b0193525e590c693ab3368478ce07b34b443a1ea5e824"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63d39709e17eb72685d052ac82acf0763e047f57c86af1b791505b1fec96915d"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:1ea2cc84224937d6b9b4c07f5cb7c667f2bde28c255645ba27f8a675a7af8234"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4024e6d35a9fdc1b3fd6ac7a673bd16cb176c7e0b952af6428b7129a70f72cce"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:5e2dcc94dc9c9ab8704409d86fcb5236316e9dcef6feed8162287634e3568f4c"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fa2de871801d824c255fac7e5e7e50f2be6c9c376fd9268b40c54b5e9da91f42"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:1314d4923c1509aa9696712a7bc0c7160d3b7acf72adafbbe6c558d523f5d491"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:b750ecba3a8815ad8bc48311552f3f8ab99dd2326d29df7ff670d9c49321f48f"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d5117dce805d8a2f78baeddc8c6127281fa0a5e2c40c6dd992ba6b2b367876"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb35f607bd1cbe37b896379d5f5ed4dc298b536f4b959cb63180e05cacc0539d"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:61c74710900602637d2d145dda9720c94e303380803bf68811b2a151deec75c2"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ece59af54ebf67ecbfbbf3ca9066f5687879e36527ad69d8b6e3ac565d565a62"}, + {file = "backports_datetime_fromisoformat-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:d0a7c5f875068efe106f62233bc712d50db4d07c13c7db570175c7857a7b5dbd"}, + {file = "backports_datetime_fromisoformat-2.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90e202e72a3d5aae673fcc8c9a4267d56b2f532beeb9173361293625fe4d2039"}, + {file = "backports_datetime_fromisoformat-2.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2df98ef1b76f5a58bb493dda552259ba60c3a37557d848e039524203951c9f06"}, + {file = "backports_datetime_fromisoformat-2.0.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7100adcda5e818b5a894ad0626e38118bb896a347f40ebed8981155675b9ba7b"}, + {file = "backports_datetime_fromisoformat-2.0.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e410383f5d6a449a529d074e88af8bc80020bb42b402265f9c02c8358c11da5"}, + {file = "backports_datetime_fromisoformat-2.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2797593760da6bcc32c4a13fa825af183cd4bfd333c60b3dbf84711afca26ef"}, + {file = "backports_datetime_fromisoformat-2.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35a144fd681a0bea1013ccc4cd3fd4dc758ea17ee23dca019c02b82ec46fc0c4"}, + {file = "backports_datetime_fromisoformat-2.0.3.tar.gz", hash = "sha256:b58edc8f517b66b397abc250ecc737969486703a66eb97e01e6d51291b1a139d"}, +] + [[package]] name = "beautifulsoup4" -version = "4.13.3" +version = "4.13.4" description = "Screen-scraping library" optional = false python-versions = ">=3.7.0" files = [ - {file = "beautifulsoup4-4.13.3-py3-none-any.whl", hash = "sha256:99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16"}, - {file = "beautifulsoup4-4.13.3.tar.gz", hash = "sha256:1bd32405dacc920b42b83ba01644747ed77456a65760e285fbc47633ceddaf8b"}, + {file = "beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b"}, + {file = "beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195"}, ] [package.dependencies] @@ -537,13 +594,13 @@ files = [ [[package]] name = "ccxt" -version = "4.4.68" +version = "4.4.77" description = "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges" optional = false python-versions = "*" files = [ - {file = "ccxt-4.4.68-py2.py3-none-any.whl", hash = "sha256:759d0e0832c256c703b400d1a38e2be2cfb855ae7d924bd463f8156731f4adc5"}, - {file = "ccxt-4.4.68.tar.gz", hash = "sha256:5cac30087e00f5f38c4e92688977d6aa2831e3b80f5ffb0219cc03d6edff3a46"}, + {file = "ccxt-4.4.77-py2.py3-none-any.whl", hash = "sha256:024c47093d9de7591bd88413a37eb213e628bb4a43a5e15a04e3fd8359bfb498"}, + {file = "ccxt-4.4.77.tar.gz", hash = "sha256:9dee605054be8cd4b12d8640018c32dbe48e351bb3869080a357a4bd6026e436"}, ] [package.dependencies] @@ -562,13 +619,13 @@ type = ["mypy (==1.6.1)"] [[package]] name = "certifi" -version = "2025.1.31" +version = "2025.4.26" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, - {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, + {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, + {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, ] [[package]] @@ -859,86 +916,94 @@ toml = ["tomli"] [[package]] name = "cryptography" -version = "43.0.3" +version = "44.0.2" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false -python-versions = ">=3.7" -files = [ - {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, - {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, - {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, - {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, - {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, - {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, - {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, - {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, - {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, - {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, - {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, - {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, - {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, - {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, - {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, +python-versions = "!=3.9.0,!=3.9.1,>=3.7" +files = [ + {file = "cryptography-44.0.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:efcfe97d1b3c79e486554efddeb8f6f53a4cdd4cf6086642784fa31fc384e1d7"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29ecec49f3ba3f3849362854b7253a9f59799e3763b0c9d0826259a88efa02f1"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc821e161ae88bfe8088d11bb39caf2916562e0a2dc7b6d56714a48b784ef0bb"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3c00b6b757b32ce0f62c574b78b939afab9eecaf597c4d624caca4f9e71e7843"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7bdcd82189759aba3816d1f729ce42ffded1ac304c151d0a8e89b9996ab863d5"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:4973da6ca3db4405c54cd0b26d328be54c7747e89e284fcff166132eb7bccc9c"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4e389622b6927d8133f314949a9812972711a111d577a5d1f4bee5e58736b80a"}, + {file = "cryptography-44.0.2-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f514ef4cd14bb6fb484b4a60203e912cfcb64f2ab139e88c2274511514bf7308"}, + {file = "cryptography-44.0.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1bc312dfb7a6e5d66082c87c34c8a62176e684b6fe3d90fcfe1568de675e6688"}, + {file = "cryptography-44.0.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b721b8b4d948b218c88cb8c45a01793483821e709afe5f622861fc6182b20a7"}, + {file = "cryptography-44.0.2-cp37-abi3-win32.whl", hash = "sha256:51e4de3af4ec3899d6d178a8c005226491c27c4ba84101bfb59c901e10ca9f79"}, + {file = "cryptography-44.0.2-cp37-abi3-win_amd64.whl", hash = "sha256:c505d61b6176aaf982c5717ce04e87da5abc9a36a5b39ac03905c4aafe8de7aa"}, + {file = "cryptography-44.0.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8e0ddd63e6bf1161800592c71ac794d3fb8001f2caebe0966e77c5234fa9efc3"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81276f0ea79a208d961c433a947029e1a15948966658cf6710bbabb60fcc2639"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a1e657c0f4ea2a23304ee3f964db058c9e9e635cc7019c4aa21c330755ef6fd"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6210c05941994290f3f7f175a4a57dbbb2afd9273657614c506d5976db061181"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1c3572526997b36f245a96a2b1713bf79ce99b271bbcf084beb6b9b075f29ea"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b042d2a275c8cee83a4b7ae30c45a15e6a4baa65a179a0ec2d78ebb90e4f6699"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d03806036b4f89e3b13b6218fefea8d5312e450935b1a2d55f0524e2ed7c59d9"}, + {file = "cryptography-44.0.2-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c7362add18b416b69d58c910caa217f980c5ef39b23a38a0880dfd87bdf8cd23"}, + {file = "cryptography-44.0.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8cadc6e3b5a1f144a039ea08a0bdb03a2a92e19c46be3285123d32029f40a922"}, + {file = "cryptography-44.0.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6f101b1f780f7fc613d040ca4bdf835c6ef3b00e9bd7125a4255ec574c7916e4"}, + {file = "cryptography-44.0.2-cp39-abi3-win32.whl", hash = "sha256:3dc62975e31617badc19a906481deacdeb80b4bb454394b4098e3f2525a488c5"}, + {file = "cryptography-44.0.2-cp39-abi3-win_amd64.whl", hash = "sha256:5f6f90b72d8ccadb9c6e311c775c8305381db88374c65fa1a68250aa8a9cb3a6"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:af4ff3e388f2fa7bff9f7f2b31b87d5651c45731d3e8cfa0944be43dff5cfbdb"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0529b1d5a0105dd3731fa65680b45ce49da4d8115ea76e9da77a875396727b41"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7ca25849404be2f8e4b3c59483d9d3c51298a22c1c61a0e84415104dacaf5562"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:268e4e9b177c76d569e8a145a6939eca9a5fec658c932348598818acf31ae9a5"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:9eb9d22b0a5d8fd9925a7764a054dca914000607dff201a24c791ff5c799e1fa"}, + {file = "cryptography-44.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2bf7bf75f7df9715f810d1b038870309342bff3069c5bd8c6b96128cb158668d"}, + {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:909c97ab43a9c0c0b0ada7a1281430e4e5ec0458e6d9244c0e821bbf152f061d"}, + {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:96e7a5e9d6e71f9f4fca8eebfd603f8e86c5225bb18eb621b2c1e50b290a9471"}, + {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d1b3031093a366ac767b3feb8bcddb596671b3aaff82d4050f984da0c248b615"}, + {file = "cryptography-44.0.2-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:04abd71114848aa25edb28e225ab5f268096f44cf0127f3d36975bdf1bdf3390"}, + {file = "cryptography-44.0.2.tar.gz", hash = "sha256:c63454aa261a0cf0c5b4718349629793e9e634993538db841165b3df74f37ec0"}, ] [package.dependencies] cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] -docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] -nox = ["nox"] -pep8test = ["check-sdist", "click", "mypy", "ruff"] -sdist = ["build"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=3.0.0)"] +docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] +nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2)"] +pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] +sdist = ["build (>=1.0.0)"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi (>=2024)", "cryptography-vectors (==44.0.2)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] test-randomorder = ["pytest-randomly"] [[package]] name = "debugpy" -version = "1.8.13" +version = "1.8.14" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.13-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:06859f68e817966723ffe046b896b1bd75c665996a77313370336ee9e1de3e90"}, - {file = "debugpy-1.8.13-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c2db69fb8df3168bc857d7b7d2494fed295dfdbde9a45f27b4b152f37520"}, - {file = "debugpy-1.8.13-cp310-cp310-win32.whl", hash = "sha256:46abe0b821cad751fc1fb9f860fb2e68d75e2c5d360986d0136cd1db8cad4428"}, - {file = "debugpy-1.8.13-cp310-cp310-win_amd64.whl", hash = "sha256:dc7b77f5d32674686a5f06955e4b18c0e41fb5a605f5b33cf225790f114cfeec"}, - {file = "debugpy-1.8.13-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:eee02b2ed52a563126c97bf04194af48f2fe1f68bb522a312b05935798e922ff"}, - {file = "debugpy-1.8.13-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4caca674206e97c85c034c1efab4483f33971d4e02e73081265ecb612af65377"}, - {file = "debugpy-1.8.13-cp311-cp311-win32.whl", hash = "sha256:7d9a05efc6973b5aaf076d779cf3a6bbb1199e059a17738a2aa9d27a53bcc888"}, - {file = "debugpy-1.8.13-cp311-cp311-win_amd64.whl", hash = "sha256:62f9b4a861c256f37e163ada8cf5a81f4c8d5148fc17ee31fb46813bd658cdcc"}, - {file = "debugpy-1.8.13-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:2b8de94c5c78aa0d0ed79023eb27c7c56a64c68217d881bee2ffbcb13951d0c1"}, - {file = "debugpy-1.8.13-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887d54276cefbe7290a754424b077e41efa405a3e07122d8897de54709dbe522"}, - {file = "debugpy-1.8.13-cp312-cp312-win32.whl", hash = "sha256:3872ce5453b17837ef47fb9f3edc25085ff998ce63543f45ba7af41e7f7d370f"}, - {file = "debugpy-1.8.13-cp312-cp312-win_amd64.whl", hash = "sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea"}, - {file = "debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503"}, - {file = "debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb"}, - {file = "debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02"}, - {file = "debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8"}, - {file = "debugpy-1.8.13-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:acf39a6e98630959763f9669feddee540745dfc45ad28dbc9bd1f9cd60639391"}, - {file = "debugpy-1.8.13-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:924464d87e7d905eb0d79fb70846558910e906d9ee309b60c4fe597a2e802590"}, - {file = "debugpy-1.8.13-cp38-cp38-win32.whl", hash = "sha256:3dae443739c6b604802da9f3e09b0f45ddf1cf23c99161f3a1a8039f61a8bb89"}, - {file = "debugpy-1.8.13-cp38-cp38-win_amd64.whl", hash = "sha256:ed93c3155fc1f888ab2b43626182174e457fc31b7781cd1845629303790b8ad1"}, - {file = "debugpy-1.8.13-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:6fab771639332bd8ceb769aacf454a30d14d7a964f2012bf9c4e04c60f16e85b"}, - {file = "debugpy-1.8.13-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32b6857f8263a969ce2ca098f228e5cc0604d277447ec05911a8c46cf3e7e307"}, - {file = "debugpy-1.8.13-cp39-cp39-win32.whl", hash = "sha256:f14d2c4efa1809da125ca62df41050d9c7cd9cb9e380a2685d1e453c4d450ccb"}, - {file = "debugpy-1.8.13-cp39-cp39-win_amd64.whl", hash = "sha256:ea869fe405880327497e6945c09365922c79d2a1eed4c3ae04d77ac7ae34b2b5"}, - {file = "debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f"}, - {file = "debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce"}, + {file = "debugpy-1.8.14-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:93fee753097e85623cab1c0e6a68c76308cd9f13ffdf44127e6fab4fbf024339"}, + {file = "debugpy-1.8.14-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d937d93ae4fa51cdc94d3e865f535f185d5f9748efb41d0d49e33bf3365bd79"}, + {file = "debugpy-1.8.14-cp310-cp310-win32.whl", hash = "sha256:c442f20577b38cc7a9aafecffe1094f78f07fb8423c3dddb384e6b8f49fd2987"}, + {file = "debugpy-1.8.14-cp310-cp310-win_amd64.whl", hash = "sha256:f117dedda6d969c5c9483e23f573b38f4e39412845c7bc487b6f2648df30fe84"}, + {file = "debugpy-1.8.14-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:1b2ac8c13b2645e0b1eaf30e816404990fbdb168e193322be8f545e8c01644a9"}, + {file = "debugpy-1.8.14-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf431c343a99384ac7eab2f763980724834f933a271e90496944195318c619e2"}, + {file = "debugpy-1.8.14-cp311-cp311-win32.whl", hash = "sha256:c99295c76161ad8d507b413cd33422d7c542889fbb73035889420ac1fad354f2"}, + {file = "debugpy-1.8.14-cp311-cp311-win_amd64.whl", hash = "sha256:7816acea4a46d7e4e50ad8d09d963a680ecc814ae31cdef3622eb05ccacf7b01"}, + {file = "debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84"}, + {file = "debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826"}, + {file = "debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f"}, + {file = "debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f"}, + {file = "debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f"}, + {file = "debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15"}, + {file = "debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e"}, + {file = "debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e"}, + {file = "debugpy-1.8.14-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:d5582bcbe42917bc6bbe5c12db1bffdf21f6bfc28d4554b738bf08d50dc0c8c3"}, + {file = "debugpy-1.8.14-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5349b7c3735b766a281873fbe32ca9cca343d4cc11ba4a743f84cb854339ff35"}, + {file = "debugpy-1.8.14-cp38-cp38-win32.whl", hash = "sha256:7118d462fe9724c887d355eef395fae68bc764fd862cdca94e70dcb9ade8a23d"}, + {file = "debugpy-1.8.14-cp38-cp38-win_amd64.whl", hash = "sha256:d235e4fa78af2de4e5609073972700523e372cf5601742449970110d565ca28c"}, + {file = "debugpy-1.8.14-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:413512d35ff52c2fb0fd2d65e69f373ffd24f0ecb1fac514c04a668599c5ce7f"}, + {file = "debugpy-1.8.14-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c9156f7524a0d70b7a7e22b2e311d8ba76a15496fb00730e46dcdeedb9e1eea"}, + {file = "debugpy-1.8.14-cp39-cp39-win32.whl", hash = "sha256:b44985f97cc3dd9d52c42eb59ee9d7ee0c4e7ecd62bca704891f997de4cef23d"}, + {file = "debugpy-1.8.14-cp39-cp39-win_amd64.whl", hash = "sha256:b1528cfee6c1b1c698eb10b6b096c598738a8238822d218173d21c3086de8123"}, + {file = "debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20"}, + {file = "debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322"}, ] [[package]] @@ -1216,185 +1281,179 @@ files = [ [[package]] name = "frozenlist" -version = "1.5.0" +version = "1.6.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, - {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, - {file = "frozenlist-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:15538c0cbf0e4fa11d1e3a71f823524b0c46299aed6e10ebb4c2089abd8c3bec"}, - {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e79225373c317ff1e35f210dd5f1344ff31066ba8067c307ab60254cd3a78ad5"}, - {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9272fa73ca71266702c4c3e2d4a28553ea03418e591e377a03b8e3659d94fa76"}, - {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:498524025a5b8ba81695761d78c8dd7382ac0b052f34e66939c42df860b8ff17"}, - {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92b5278ed9d50fe610185ecd23c55d8b307d75ca18e94c0e7de328089ac5dcba"}, - {file = "frozenlist-1.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f3c8c1dacd037df16e85227bac13cca58c30da836c6f936ba1df0c05d046d8d"}, - {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f2ac49a9bedb996086057b75bf93538240538c6d9b38e57c82d51f75a73409d2"}, - {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e66cc454f97053b79c2ab09c17fbe3c825ea6b4de20baf1be28919460dd7877f"}, - {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5a3ba5f9a0dfed20337d3e966dc359784c9f96503674c2faf015f7fe8e96798c"}, - {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6321899477db90bdeb9299ac3627a6a53c7399c8cd58d25da094007402b039ab"}, - {file = "frozenlist-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:76e4753701248476e6286f2ef492af900ea67d9706a0155335a40ea21bf3b2f5"}, - {file = "frozenlist-1.5.0-cp310-cp310-win32.whl", hash = "sha256:977701c081c0241d0955c9586ffdd9ce44f7a7795df39b9151cd9a6fd0ce4cfb"}, - {file = "frozenlist-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:189f03b53e64144f90990d29a27ec4f7997d91ed3d01b51fa39d2dbe77540fd4"}, - {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fd74520371c3c4175142d02a976aee0b4cb4a7cc912a60586ffd8d5929979b30"}, - {file = "frozenlist-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2f3f7a0fbc219fb4455264cae4d9f01ad41ae6ee8524500f381de64ffaa077d5"}, - {file = "frozenlist-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f47c9c9028f55a04ac254346e92977bf0f166c483c74b4232bee19a6697e4778"}, - {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0996c66760924da6e88922756d99b47512a71cfd45215f3570bf1e0b694c206a"}, - {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2fe128eb4edeabe11896cb6af88fca5346059f6c8d807e3b910069f39157869"}, - {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8ea951bbb6cacd492e3948b8da8c502a3f814f5d20935aae74b5df2b19cf3d"}, - {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de537c11e4aa01d37db0d403b57bd6f0546e71a82347a97c6a9f0dcc532b3a45"}, - {file = "frozenlist-1.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c2623347b933fcb9095841f1cc5d4ff0b278addd743e0e966cb3d460278840d"}, - {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cee6798eaf8b1416ef6909b06f7dc04b60755206bddc599f52232606e18179d3"}, - {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5f9da7f5dbc00a604fe74aa02ae7c98bcede8a3b8b9666f9f86fc13993bc71a"}, - {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:90646abbc7a5d5c7c19461d2e3eeb76eb0b204919e6ece342feb6032c9325ae9"}, - {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bdac3c7d9b705d253b2ce370fde941836a5f8b3c5c2b8fd70940a3ea3af7f4f2"}, - {file = "frozenlist-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03d33c2ddbc1816237a67f66336616416e2bbb6beb306e5f890f2eb22b959cdf"}, - {file = "frozenlist-1.5.0-cp311-cp311-win32.whl", hash = "sha256:237f6b23ee0f44066219dae14c70ae38a63f0440ce6750f868ee08775073f942"}, - {file = "frozenlist-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:0cc974cc93d32c42e7b0f6cf242a6bd941c57c61b618e78b6c0a96cb72788c1d"}, - {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:31115ba75889723431aa9a4e77d5f398f5cf976eea3bdf61749731f62d4a4a21"}, - {file = "frozenlist-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7437601c4d89d070eac8323f121fcf25f88674627505334654fd027b091db09d"}, - {file = "frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e"}, - {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feeb64bc9bcc6b45c6311c9e9b99406660a9c05ca8a5b30d14a78555088b0b3a"}, - {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:683173d371daad49cffb8309779e886e59c2f369430ad28fe715f66d08d4ab1a"}, - {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7d57d8f702221405a9d9b40f9da8ac2e4a1a8b5285aac6100f3393675f0a85ee"}, - {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c72000fbcc35b129cb09956836c7d7abf78ab5416595e4857d1cae8d6251a6"}, - {file = "frozenlist-1.5.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000a77d6034fbad9b6bb880f7ec073027908f1b40254b5d6f26210d2dab1240e"}, - {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d7f5a50342475962eb18b740f3beecc685a15b52c91f7d975257e13e029eca9"}, - {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:87f724d055eb4785d9be84e9ebf0f24e392ddfad00b3fe036e43f489fafc9039"}, - {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6e9080bb2fb195a046e5177f10d9d82b8a204c0736a97a153c2466127de87784"}, - {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9b93d7aaa36c966fa42efcaf716e6b3900438632a626fb09c049f6a2f09fc631"}, - {file = "frozenlist-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:52ef692a4bc60a6dd57f507429636c2af8b6046db8b31b18dac02cbc8f507f7f"}, - {file = "frozenlist-1.5.0-cp312-cp312-win32.whl", hash = "sha256:29d94c256679247b33a3dc96cce0f93cbc69c23bf75ff715919332fdbb6a32b8"}, - {file = "frozenlist-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:8969190d709e7c48ea386db202d708eb94bdb29207a1f269bab1196ce0dcca1f"}, - {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a1a048f9215c90973402e26c01d1cff8a209e1f1b53f72b95c13db61b00f953"}, - {file = "frozenlist-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dd47a5181ce5fcb463b5d9e17ecfdb02b678cca31280639255ce9d0e5aa67af0"}, - {file = "frozenlist-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1431d60b36d15cda188ea222033eec8e0eab488f39a272461f2e6d9e1a8e63c2"}, - {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6482a5851f5d72767fbd0e507e80737f9c8646ae7fd303def99bfe813f76cf7f"}, - {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44c49271a937625619e862baacbd037a7ef86dd1ee215afc298a417ff3270608"}, - {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12f78f98c2f1c2429d42e6a485f433722b0061d5c0b0139efa64f396efb5886b"}, - {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce3aa154c452d2467487765e3adc730a8c153af77ad84096bc19ce19a2400840"}, - {file = "frozenlist-1.5.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b7dc0c4338e6b8b091e8faf0db3168a37101943e687f373dce00959583f7439"}, - {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:45e0896250900b5aa25180f9aec243e84e92ac84bd4a74d9ad4138ef3f5c97de"}, - {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:561eb1c9579d495fddb6da8959fd2a1fca2c6d060d4113f5844b433fc02f2641"}, - {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:df6e2f325bfee1f49f81aaac97d2aa757c7646534a06f8f577ce184afe2f0a9e"}, - {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:140228863501b44b809fb39ec56b5d4071f4d0aa6d216c19cbb08b8c5a7eadb9"}, - {file = "frozenlist-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7707a25d6a77f5d27ea7dc7d1fc608aa0a478193823f88511ef5e6b8a48f9d03"}, - {file = "frozenlist-1.5.0-cp313-cp313-win32.whl", hash = "sha256:31a9ac2b38ab9b5a8933b693db4939764ad3f299fcaa931a3e605bc3460e693c"}, - {file = "frozenlist-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:11aabdd62b8b9c4b84081a3c246506d1cddd2dd93ff0ad53ede5defec7886b28"}, - {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dd94994fc91a6177bfaafd7d9fd951bc8689b0a98168aa26b5f543868548d3ca"}, - {file = "frozenlist-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0da8bbec082bf6bf18345b180958775363588678f64998c2b7609e34719b10"}, - {file = "frozenlist-1.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73f2e31ea8dd7df61a359b731716018c2be196e5bb3b74ddba107f694fbd7604"}, - {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:828afae9f17e6de596825cf4228ff28fbdf6065974e5ac1410cecc22f699d2b3"}, - {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1577515d35ed5649d52ab4319db757bb881ce3b2b796d7283e6634d99ace307"}, - {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2150cc6305a2c2ab33299453e2968611dacb970d2283a14955923062c8d00b10"}, - {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a72b7a6e3cd2725eff67cd64c8f13335ee18fc3c7befc05aed043d24c7b9ccb9"}, - {file = "frozenlist-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c16d2fa63e0800723139137d667e1056bee1a1cf7965153d2d104b62855e9b99"}, - {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:17dcc32fc7bda7ce5875435003220a457bcfa34ab7924a49a1c19f55b6ee185c"}, - {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:97160e245ea33d8609cd2b8fd997c850b56db147a304a262abc2b3be021a9171"}, - {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f1e6540b7fa044eee0bb5111ada694cf3dc15f2b0347ca125ee9ca984d5e9e6e"}, - {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:91d6c171862df0a6c61479d9724f22efb6109111017c87567cfeb7b5d1449fdf"}, - {file = "frozenlist-1.5.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c1fac3e2ace2eb1052e9f7c7db480818371134410e1f5c55d65e8f3ac6d1407e"}, - {file = "frozenlist-1.5.0-cp38-cp38-win32.whl", hash = "sha256:b97f7b575ab4a8af9b7bc1d2ef7f29d3afee2226bd03ca3875c16451ad5a7723"}, - {file = "frozenlist-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:374ca2dabdccad8e2a76d40b1d037f5bd16824933bf7bcea3e59c891fd4a0923"}, - {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9bbcdfaf4af7ce002694a4e10a0159d5a8d20056a12b05b45cea944a4953f972"}, - {file = "frozenlist-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1893f948bf6681733aaccf36c5232c231e3b5166d607c5fa77773611df6dc336"}, - {file = "frozenlist-1.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2b5e23253bb709ef57a8e95e6ae48daa9ac5f265637529e4ce6b003a37b2621f"}, - {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f253985bb515ecd89629db13cb58d702035ecd8cfbca7d7a7e29a0e6d39af5f"}, - {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04a5c6babd5e8fb7d3c871dc8b321166b80e41b637c31a995ed844a6139942b6"}, - {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fe0f1c29ba24ba6ff6abf688cb0b7cf1efab6b6aa6adc55441773c252f7411"}, - {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d72559fa19babe2ccd920273e767c96a49b9d3d38badd7c91a0fdeda8ea08"}, - {file = "frozenlist-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15b731db116ab3aedec558573c1a5eec78822b32292fe4f2f0345b7f697745c2"}, - {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:366d8f93e3edfe5a918c874702f78faac300209a4d5bf38352b2c1bdc07a766d"}, - {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1b96af8c582b94d381a1c1f51ffaedeb77c821c690ea5f01da3d70a487dd0a9b"}, - {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c03eff4a41bd4e38415cbed054bbaff4a075b093e2394b6915dca34a40d1e38b"}, - {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:50cf5e7ee9b98f22bdecbabf3800ae78ddcc26e4a435515fc72d97903e8488e0"}, - {file = "frozenlist-1.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e76bfbc72353269c44e0bc2cfe171900fbf7f722ad74c9a7b638052afe6a00c"}, - {file = "frozenlist-1.5.0-cp39-cp39-win32.whl", hash = "sha256:666534d15ba8f0fda3f53969117383d5dc021266b3c1a42c9ec4855e4b58b9d3"}, - {file = "frozenlist-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c28f4b5dbef8a0d8aad0d4de24d1e9e981728628afaf4ea0792f5d0939372f0"}, - {file = "frozenlist-1.5.0-py3-none-any.whl", hash = "sha256:d994863bba198a4a518b467bb971c56e1db3f180a25c6cf7bb1949c267f748c3"}, - {file = "frozenlist-1.5.0.tar.gz", hash = "sha256:81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817"}, + {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e6e558ea1e47fd6fa8ac9ccdad403e5dd5ecc6ed8dda94343056fa4277d5c65e"}, + {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4b3cd7334a4bbc0c472164f3744562cb72d05002cc6fcf58adb104630bbc352"}, + {file = "frozenlist-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9799257237d0479736e2b4c01ff26b5c7f7694ac9692a426cb717f3dc02fff9b"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a7bb0fe1f7a70fb5c6f497dc32619db7d2cdd53164af30ade2f34673f8b1fc"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:36d2fc099229f1e4237f563b2a3e0ff7ccebc3999f729067ce4e64a97a7f2869"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f27a9f9a86dcf00708be82359db8de86b80d029814e6693259befe82bb58a106"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75ecee69073312951244f11b8627e3700ec2bfe07ed24e3a685a5979f0412d24"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2c7d5aa19714b1b01a0f515d078a629e445e667b9da869a3cd0e6fe7dec78bd"}, + {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69bbd454f0fb23b51cadc9bdba616c9678e4114b6f9fa372d462ff2ed9323ec8"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7daa508e75613809c7a57136dec4871a21bca3080b3a8fc347c50b187df4f00c"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:89ffdb799154fd4d7b85c56d5fa9d9ad48946619e0eb95755723fffa11022d75"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:920b6bd77d209931e4c263223381d63f76828bec574440f29eb497cf3394c249"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d3ceb265249fb401702fce3792e6b44c1166b9319737d21495d3611028d95769"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:52021b528f1571f98a7d4258c58aa8d4b1a96d4f01d00d51f1089f2e0323cb02"}, + {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0f2ca7810b809ed0f1917293050163c7654cefc57a49f337d5cd9de717b8fad3"}, + {file = "frozenlist-1.6.0-cp310-cp310-win32.whl", hash = "sha256:0e6f8653acb82e15e5443dba415fb62a8732b68fe09936bb6d388c725b57f812"}, + {file = "frozenlist-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f1a39819a5a3e84304cd286e3dc62a549fe60985415851b3337b6f5cc91907f1"}, + {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae8337990e7a45683548ffb2fee1af2f1ed08169284cd829cdd9a7fa7470530d"}, + {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c952f69dd524558694818a461855f35d36cc7f5c0adddce37e962c85d06eac0"}, + {file = "frozenlist-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f5fef13136c4e2dee91bfb9a44e236fff78fc2cd9f838eddfc470c3d7d90afe"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:716bbba09611b4663ecbb7cd022f640759af8259e12a6ca939c0a6acd49eedba"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7b8c4dc422c1a3ffc550b465090e53b0bf4839047f3e436a34172ac67c45d595"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b11534872256e1666116f6587a1592ef395a98b54476addb5e8d352925cb5d4a"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c6eceb88aaf7221f75be6ab498dc622a151f5f88d536661af3ffc486245a626"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62c828a5b195570eb4b37369fcbbd58e96c905768d53a44d13044355647838ff"}, + {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1c6bd2c6399920c9622362ce95a7d74e7f9af9bfec05fff91b8ce4b9647845a"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49ba23817781e22fcbd45fd9ff2b9b8cdb7b16a42a4851ab8025cae7b22e96d0"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:431ef6937ae0f853143e2ca67d6da76c083e8b1fe3df0e96f3802fd37626e606"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9d124b38b3c299ca68433597ee26b7819209cb8a3a9ea761dfe9db3a04bba584"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:118e97556306402e2b010da1ef21ea70cb6d6122e580da64c056b96f524fbd6a"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fb3b309f1d4086b5533cf7bbcf3f956f0ae6469664522f1bde4feed26fba60f1"}, + {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54dece0d21dce4fdb188a1ffc555926adf1d1c516e493c2914d7c370e454bc9e"}, + {file = "frozenlist-1.6.0-cp311-cp311-win32.whl", hash = "sha256:654e4ba1d0b2154ca2f096bed27461cf6160bc7f504a7f9a9ef447c293caf860"}, + {file = "frozenlist-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e911391bffdb806001002c1f860787542f45916c3baf764264a52765d5a5603"}, + {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c5b9e42ace7d95bf41e19b87cec8f262c41d3510d8ad7514ab3862ea2197bfb1"}, + {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ca9973735ce9f770d24d5484dcb42f68f135351c2fc81a7a9369e48cf2998a29"}, + {file = "frozenlist-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6ac40ec76041c67b928ca8aaffba15c2b2ee3f5ae8d0cb0617b5e63ec119ca25"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b7a8a3180dfb280eb044fdec562f9b461614c0ef21669aea6f1d3dac6ee576"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c444d824e22da6c9291886d80c7d00c444981a72686e2b59d38b285617cb52c8"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb52c8166499a8150bfd38478248572c924c003cbb45fe3bcd348e5ac7c000f9"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b35298b2db9c2468106278537ee529719228950a5fdda686582f68f247d1dc6e"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d108e2d070034f9d57210f22fefd22ea0d04609fc97c5f7f5a686b3471028590"}, + {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e1be9111cb6756868ac242b3c2bd1f09d9aea09846e4f5c23715e7afb647103"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:94bb451c664415f02f07eef4ece976a2c65dcbab9c2f1705b7031a3a75349d8c"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d1a686d0b0949182b8faddea596f3fc11f44768d1f74d4cad70213b2e139d821"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ea8e59105d802c5a38bdbe7362822c522230b3faba2aa35c0fa1765239b7dd70"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:abc4e880a9b920bc5020bf6a431a6bb40589d9bca3975c980495f63632e8382f"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9a79713adfe28830f27a3c62f6b5406c37376c892b05ae070906f07ae4487046"}, + {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a0318c2068e217a8f5e3b85e35899f5a19e97141a45bb925bb357cfe1daf770"}, + {file = "frozenlist-1.6.0-cp312-cp312-win32.whl", hash = "sha256:853ac025092a24bb3bf09ae87f9127de9fe6e0c345614ac92536577cf956dfcc"}, + {file = "frozenlist-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bdfe2d7e6c9281c6e55523acd6c2bf77963cb422fdc7d142fb0cb6621b66878"}, + {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e"}, + {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117"}, + {file = "frozenlist-1.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f"}, + {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188"}, + {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e"}, + {file = "frozenlist-1.6.0-cp313-cp313-win32.whl", hash = "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4"}, + {file = "frozenlist-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd"}, + {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64"}, + {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91"}, + {file = "frozenlist-1.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e"}, + {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911"}, + {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497"}, + {file = "frozenlist-1.6.0-cp313-cp313t-win32.whl", hash = "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f"}, + {file = "frozenlist-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348"}, + {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:536a1236065c29980c15c7229fbb830dedf809708c10e159b8136534233545f0"}, + {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ed5e3a4462ff25ca84fb09e0fada8ea267df98a450340ead4c91b44857267d70"}, + {file = "frozenlist-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e19c0fc9f4f030fcae43b4cdec9e8ab83ffe30ec10c79a4a43a04d1af6c5e1ad"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c608f833897501dac548585312d73a7dca028bf3b8688f0d712b7acfaf7fb3"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0dbae96c225d584f834b8d3cc688825911960f003a85cb0fd20b6e5512468c42"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:625170a91dd7261a1d1c2a0c1a353c9e55d21cd67d0852185a5fef86587e6f5f"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1db8b2fc7ee8a940b547a14c10e56560ad3ea6499dc6875c354e2335812f739d"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4da6fc43048b648275a220e3a61c33b7fff65d11bdd6dcb9d9c145ff708b804c"}, + {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef8e7e8f2f3820c5f175d70fdd199b79e417acf6c72c5d0aa8f63c9f721646f"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa733d123cc78245e9bb15f29b44ed9e5780dc6867cfc4e544717b91f980af3b"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ba7f8d97152b61f22d7f59491a781ba9b177dd9f318486c5fbc52cde2db12189"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:56a0b8dd6d0d3d971c91f1df75e824986667ccce91e20dca2023683814344791"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5c9e89bf19ca148efcc9e3c44fd4c09d5af85c8a7dd3dbd0da1cb83425ef4983"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1330f0a4376587face7637dfd245380a57fe21ae8f9d360c1c2ef8746c4195fa"}, + {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2187248203b59625566cac53572ec8c2647a140ee2738b4e36772930377a533c"}, + {file = "frozenlist-1.6.0-cp39-cp39-win32.whl", hash = "sha256:2b8cf4cfea847d6c12af06091561a89740f1f67f331c3fa8623391905e878530"}, + {file = "frozenlist-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:1255d5d64328c5a0d066ecb0f02034d086537925f1f04b50b1ae60d37afbf572"}, + {file = "frozenlist-1.6.0-py3-none-any.whl", hash = "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191"}, + {file = "frozenlist-1.6.0.tar.gz", hash = "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68"}, ] [[package]] name = "greenlet" -version = "3.1.1" +version = "3.2.1" description = "Lightweight in-process concurrent programming" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" files = [ - {file = "greenlet-3.1.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:0bbae94a29c9e5c7e4a2b7f0aae5c17e8e90acbfd3bf6270eeba60c39fce3563"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fde093fb93f35ca72a556cf72c92ea3ebfda3d79fc35bb19fbe685853869a83"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36b89d13c49216cadb828db8dfa6ce86bbbc476a82d3a6c397f0efae0525bdd0"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94b6150a85e1b33b40b1464a3f9988dcc5251d6ed06842abff82e42632fac120"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93147c513fac16385d1036b7e5b102c7fbbdb163d556b791f0f11eada7ba65dc"}, - {file = "greenlet-3.1.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da7a9bff22ce038e19bf62c4dd1ec8391062878710ded0a845bcf47cc0200617"}, - {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b2795058c23988728eec1f36a4e5e4ebad22f8320c85f3587b539b9ac84128d7"}, - {file = "greenlet-3.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ed10eac5830befbdd0c32f83e8aa6288361597550ba669b04c48f0f9a2c843c6"}, - {file = "greenlet-3.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:77c386de38a60d1dfb8e55b8c1101d68c79dfdd25c7095d51fec2dd800892b80"}, - {file = "greenlet-3.1.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:e4d333e558953648ca09d64f13e6d8f0523fa705f51cae3f03b5983489958c70"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fc016b73c94e98e29af67ab7b9a879c307c6731a2c9da0db5a7d9b7edd1159"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e975ca70269d66d17dd995dafc06f1b06e8cb1ec1e9ed54c1d1e4a7c4cf26e"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2813dc3de8c1ee3f924e4d4227999285fd335d1bcc0d2be6dc3f1f6a318ec1"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e347b3bfcf985a05e8c0b7d462ba6f15b1ee1c909e2dcad795e49e91b152c383"}, - {file = "greenlet-3.1.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e8f8c9cb53cdac7ba9793c276acd90168f416b9ce36799b9b885790f8ad6c0a"}, - {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62ee94988d6b4722ce0028644418d93a52429e977d742ca2ccbe1c4f4a792511"}, - {file = "greenlet-3.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1776fd7f989fc6b8d8c8cb8da1f6b82c5814957264d1f6cf818d475ec2bf6395"}, - {file = "greenlet-3.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:48ca08c771c268a768087b408658e216133aecd835c0ded47ce955381105ba39"}, - {file = "greenlet-3.1.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:4afe7ea89de619adc868e087b4d2359282058479d7cfb94970adf4b55284574d"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c3a701fe5a9695b238503ce5bbe8218e03c3bcccf7e204e455e7462d770268aa"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2846930c65b47d70b9d178e89c7e1a69c95c1f68ea5aa0a58646b7a96df12441"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99cfaa2110534e2cf3ba31a7abcac9d328d1d9f1b95beede58294a60348fba36"}, - {file = "greenlet-3.1.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1443279c19fca463fc33e65ef2a935a5b09bb90f978beab37729e1c3c6c25fe9"}, - {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b7cede291382a78f7bb5f04a529cb18e068dd29e0fb27376074b6d0317bf4dd0"}, - {file = "greenlet-3.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23f20bb60ae298d7d8656c6ec6db134bca379ecefadb0b19ce6f19d1f232a942"}, - {file = "greenlet-3.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:7124e16b4c55d417577c2077be379514321916d5790fa287c9ed6f23bd2ffd01"}, - {file = "greenlet-3.1.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:05175c27cb459dcfc05d026c4232f9de8913ed006d42713cb8a5137bd49375f1"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:935e943ec47c4afab8965954bf49bfa639c05d4ccf9ef6e924188f762145c0ff"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:667a9706c970cb552ede35aee17339a18e8f2a87a51fba2ed39ceeeb1004798a"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8a678974d1f3aa55f6cc34dc480169d58f2e6d8958895d68845fa4ab566509e"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efc0f674aa41b92da8c49e0346318c6075d734994c3c4e4430b1c3f853e498e4"}, - {file = "greenlet-3.1.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0153404a4bb921f0ff1abeb5ce8a5131da56b953eda6e14b88dc6bbc04d2049e"}, - {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:275f72decf9932639c1c6dd1013a1bc266438eb32710016a1c742df5da6e60a1"}, - {file = "greenlet-3.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c4aab7f6381f38a4b42f269057aee279ab0fc7bf2e929e3d4abfae97b682a12c"}, - {file = "greenlet-3.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:b42703b1cf69f2aa1df7d1030b9d77d3e584a70755674d60e710f0af570f3761"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1695e76146579f8c06c1509c7ce4dfe0706f49c6831a817ac04eebb2fd02011"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7876452af029456b3f3549b696bb36a06db7c90747740c5302f74a9e9fa14b13"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ead44c85f8ab905852d3de8d86f6f8baf77109f9da589cb4fa142bd3b57b475"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8320f64b777d00dd7ccdade271eaf0cad6636343293a25074cc5566160e4de7b"}, - {file = "greenlet-3.1.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6510bf84a6b643dabba74d3049ead221257603a253d0a9873f55f6a59a65f822"}, - {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:04b013dc07c96f83134b1e99888e7a79979f1a247e2a9f59697fa14b5862ed01"}, - {file = "greenlet-3.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:411f015496fec93c1c8cd4e5238da364e1da7a124bcb293f085bf2860c32c6f6"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47da355d8687fd65240c364c90a31569a133b7b60de111c255ef5b606f2ae291"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98884ecf2ffb7d7fe6bd517e8eb99d31ff7855a840fa6d0d63cd07c037f6a981"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1d4aeb8891338e60d1ab6127af1fe45def5259def8094b9c7e34690c8858803"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db32b5348615a04b82240cc67983cb315309e88d444a288934ee6ceaebcad6cc"}, - {file = "greenlet-3.1.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcc62f31eae24de7f8dce72134c8651c58000d3b1868e01392baea7c32c247de"}, - {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1d3755bcb2e02de341c55b4fca7a745a24a9e7212ac953f6b3a48d117d7257aa"}, - {file = "greenlet-3.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b8da394b34370874b4572676f36acabac172602abf054cbc4ac910219f3340af"}, - {file = "greenlet-3.1.1-cp37-cp37m-win32.whl", hash = "sha256:a0dfc6c143b519113354e780a50381508139b07d2177cb6ad6a08278ec655798"}, - {file = "greenlet-3.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:54558ea205654b50c438029505def3834e80f0869a70fb15b871c29b4575ddef"}, - {file = "greenlet-3.1.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:346bed03fe47414091be4ad44786d1bd8bef0c3fcad6ed3dee074a032ab408a9"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfc59d69fc48664bc693842bd57acfdd490acafda1ab52c7836e3fc75c90a111"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21e10da6ec19b457b82636209cbe2331ff4306b54d06fa04b7c138ba18c8a81"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37b9de5a96111fc15418819ab4c4432e4f3c2ede61e660b1e33971eba26ef9ba"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef9ea3f137e5711f0dbe5f9263e8c009b7069d8a1acea822bd5e9dae0ae49c8"}, - {file = "greenlet-3.1.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85f3ff71e2e60bd4b4932a043fbbe0f499e263c628390b285cb599154a3b03b1"}, - {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95ffcf719966dd7c453f908e208e14cde192e09fde6c7186c8f1896ef778d8cd"}, - {file = "greenlet-3.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:03a088b9de532cbfe2ba2034b2b85e82df37874681e8c470d6fb2f8c04d7e4b7"}, - {file = "greenlet-3.1.1-cp38-cp38-win32.whl", hash = "sha256:8b8b36671f10ba80e159378df9c4f15c14098c4fd73a36b9ad715f057272fbef"}, - {file = "greenlet-3.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:7017b2be767b9d43cc31416aba48aab0d2309ee31b4dbf10a1d38fb7972bdf9d"}, - {file = "greenlet-3.1.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:396979749bd95f018296af156201d6211240e7a23090f50a8d5d18c370084dc3"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9d0ff5ad43e785350894d97e13633a66e2b50000e8a183a50a88d834752d42"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94ebba31df2aa506d7b14866fed00ac141a867e63143fe5bca82a8e503b36437"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73aaad12ac0ff500f62cebed98d8789198ea0e6f233421059fa68a5aa7220145"}, - {file = "greenlet-3.1.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63e4844797b975b9af3a3fb8f7866ff08775f5426925e1e0bbcfe7932059a12c"}, - {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7939aa3ca7d2a1593596e7ac6d59391ff30281ef280d8632fa03d81f7c5f955e"}, - {file = "greenlet-3.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d0028e725ee18175c6e422797c407874da24381ce0690d6b9396c204c7f7276e"}, - {file = "greenlet-3.1.1-cp39-cp39-win32.whl", hash = "sha256:5e06afd14cbaf9e00899fae69b24a32f2196c19de08fcb9f4779dd4f004e5e7c"}, - {file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"}, - {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, + {file = "greenlet-3.2.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:777c1281aa7c786738683e302db0f55eb4b0077c20f1dc53db8852ffaea0a6b0"}, + {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3059c6f286b53ea4711745146ffe5a5c5ff801f62f6c56949446e0f6461f8157"}, + {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e1a40a17e2c7348f5eee5d8e1b4fa6a937f0587eba89411885a36a8e1fc29bd2"}, + {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5193135b3a8d0017cb438de0d49e92bf2f6c1c770331d24aa7500866f4db4017"}, + {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:639a94d001fe874675b553f28a9d44faed90f9864dc57ba0afef3f8d76a18b04"}, + {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fe303381e7e909e42fb23e191fc69659910909fdcd056b92f6473f80ef18543"}, + {file = "greenlet-3.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:72c9b668454e816b5ece25daac1a42c94d1c116d5401399a11b77ce8d883110c"}, + {file = "greenlet-3.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6079ae990bbf944cf66bea64a09dcb56085815630955109ffa98984810d71565"}, + {file = "greenlet-3.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e63cd2035f49376a23611fbb1643f78f8246e9d4dfd607534ec81b175ce582c2"}, + {file = "greenlet-3.2.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:aa30066fd6862e1153eaae9b51b449a6356dcdb505169647f69e6ce315b9468b"}, + {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b0f3a0a67786facf3b907a25db80efe74310f9d63cc30869e49c79ee3fcef7e"}, + {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64a4d0052de53ab3ad83ba86de5ada6aeea8f099b4e6c9ccce70fb29bc02c6a2"}, + {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:852ef432919830022f71a040ff7ba3f25ceb9fe8f3ab784befd747856ee58530"}, + {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4818116e75a0dd52cdcf40ca4b419e8ce5cb6669630cb4f13a6c384307c9543f"}, + {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9afa05fe6557bce1642d8131f87ae9462e2a8e8c46f7ed7929360616088a3975"}, + {file = "greenlet-3.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5c12f0d17a88664757e81a6e3fc7c2452568cf460a2f8fb44f90536b2614000b"}, + {file = "greenlet-3.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dbb4e1aa2000852937dd8f4357fb73e3911da426df8ca9b8df5db231922da474"}, + {file = "greenlet-3.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:cb5ee928ce5fedf9a4b0ccdc547f7887136c4af6109d8f2fe8e00f90c0db47f5"}, + {file = "greenlet-3.2.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:0ba2811509a30e5f943be048895a983a8daf0b9aa0ac0ead526dfb5d987d80ea"}, + {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4245246e72352b150a1588d43ddc8ab5e306bef924c26571aafafa5d1aaae4e8"}, + {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7abc0545d8e880779f0c7ce665a1afc3f72f0ca0d5815e2b006cafc4c1cc5840"}, + {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6dcc6d604a6575c6225ac0da39df9335cc0c6ac50725063fa90f104f3dbdb2c9"}, + {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2273586879affca2d1f414709bb1f61f0770adcabf9eda8ef48fd90b36f15d12"}, + {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ff38c869ed30fff07f1452d9a204ece1ec6d3c0870e0ba6e478ce7c1515acf22"}, + {file = "greenlet-3.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e934591a7a4084fa10ee5ef50eb9d2ac8c4075d5c9cf91128116b5dca49d43b1"}, + {file = "greenlet-3.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:063bcf7f8ee28eb91e7f7a8148c65a43b73fbdc0064ab693e024b5a940070145"}, + {file = "greenlet-3.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7132e024ebeeeabbe661cf8878aac5d2e643975c4feae833142592ec2f03263d"}, + {file = "greenlet-3.2.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:e1967882f0c42eaf42282a87579685c8673c51153b845fde1ee81be720ae27ac"}, + {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e77ae69032a95640a5fe8c857ec7bee569a0997e809570f4c92048691ce4b437"}, + {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3227c6ec1149d4520bc99edac3b9bc8358d0034825f3ca7572165cb502d8f29a"}, + {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ddda0197c5b46eedb5628d33dad034c455ae77708c7bf192686e760e26d6a0c"}, + {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de62b542e5dcf0b6116c310dec17b82bb06ef2ceb696156ff7bf74a7a498d982"}, + {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c07a0c01010df42f1f058b3973decc69c4d82e036a951c3deaf89ab114054c07"}, + {file = "greenlet-3.2.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2530bfb0abcd451ea81068e6d0a1aac6dabf3f4c23c8bd8e2a8f579c2dd60d95"}, + {file = "greenlet-3.2.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c472adfca310f849903295c351d297559462067f618944ce2650a1878b84123"}, + {file = "greenlet-3.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:24a496479bc8bd01c39aa6516a43c717b4cee7196573c47b1f8e1011f7c12495"}, + {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:175d583f7d5ee57845591fc30d852b75b144eb44b05f38b67966ed6df05c8526"}, + {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ecc9d33ca9428e4536ea53e79d781792cee114d2fa2695b173092bdbd8cd6d5"}, + {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f56382ac4df3860ebed8ed838f268f03ddf4e459b954415534130062b16bc32"}, + {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc45a7189c91c0f89aaf9d69da428ce8301b0fd66c914a499199cfb0c28420fc"}, + {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51a2f49da08cff79ee42eb22f1658a2aed60c72792f0a0a95f5f0ca6d101b1fb"}, + {file = "greenlet-3.2.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:0c68bbc639359493420282d2f34fa114e992a8724481d700da0b10d10a7611b8"}, + {file = "greenlet-3.2.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:e775176b5c203a1fa4be19f91da00fd3bff536868b77b237da3f4daa5971ae5d"}, + {file = "greenlet-3.2.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d6668caf15f181c1b82fb6406f3911696975cc4c37d782e19cb7ba499e556189"}, + {file = "greenlet-3.2.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:17964c246d4f6e1327edd95e2008988a8995ae3a7732be2f9fc1efed1f1cdf8c"}, + {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b4ec7f65f0e4a1500ac475c9343f6cc022b2363ebfb6e94f416085e40dea15"}, + {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b38d53cf268da963869aa25a6e4cc84c1c69afc1ae3391738b2603d110749d01"}, + {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a7490f74e8aabc5f29256765a99577ffde979920a2db1f3676d265a3adba41"}, + {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4339b202ac20a89ccd5bde0663b4d00dc62dd25cb3fb14f7f3034dec1b0d9ece"}, + {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a750f1046994b9e038b45ae237d68153c29a3a783075211fb1414a180c8324b"}, + {file = "greenlet-3.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:374ffebaa5fbd10919cd599e5cf8ee18bae70c11f9d61e73db79826c8c93d6f9"}, + {file = "greenlet-3.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b89e5d44f55372efc6072f59ced5ed1efb7b44213dab5ad7e0caba0232c6545"}, + {file = "greenlet-3.2.1-cp39-cp39-win32.whl", hash = "sha256:b7503d6b8bbdac6bbacf5a8c094f18eab7553481a1830975799042f26c9e101b"}, + {file = "greenlet-3.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:e98328b8b8f160925d6b1c5b1879d8e64f6bd8cf11472b7127d579da575b77d9"}, + {file = "greenlet-3.2.1.tar.gz", hash = "sha256:9f4dd4b4946b14bb3bf038f81e1d2e535b7d94f1b2a59fdba1293cd9c1a0a4d7"}, ] [package.extras] @@ -1403,29 +1462,29 @@ test = ["objgraph", "psutil"] [[package]] name = "h11" -version = "0.14.0" +version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, ] [[package]] name = "httpcore" -version = "1.0.7" +version = "1.0.9" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, - {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, ] [package.dependencies] certifi = "*" -h11 = ">=0.13,<0.15" +h11 = ">=0.16" [package.extras] asyncio = ["anyio (>=4.0,<5.0)"] @@ -1506,13 +1565,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.18.1" +version = "8.36.0" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, - {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, + {file = "ipython-8.36.0-py3-none-any.whl", hash = "sha256:12b913914d010dcffa2711505ec8be4bf0180742d97f1e5175e51f22086428c1"}, + {file = "ipython-8.36.0.tar.gz", hash = "sha256:24658e9fe5c5c819455043235ba59cfffded4a35936eefceceab6b192f7092ff"}, ] [package.dependencies] @@ -1521,42 +1580,44 @@ decorator = "*" exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -prompt-toolkit = ">=3.0.41,<3.1.0" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt_toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" -stack-data = "*" -traitlets = ">=5" +stack_data = "*" +traitlets = ">=5.13.0" +typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} [package.extras] -all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] black = ["black"] -doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing_extensions"] kernel = ["ipykernel"] +matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] +test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] [[package]] name = "ipywidgets" -version = "8.1.5" +version = "8.1.6" description = "Jupyter interactive widgets" optional = false python-versions = ">=3.7" files = [ - {file = "ipywidgets-8.1.5-py3-none-any.whl", hash = "sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245"}, - {file = "ipywidgets-8.1.5.tar.gz", hash = "sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17"}, + {file = "ipywidgets-8.1.6-py3-none-any.whl", hash = "sha256:446e7630a1d025bdc7635e1169fcc06f2ce33b5bd41c2003edeb4a47c8d4bbb1"}, + {file = "ipywidgets-8.1.6.tar.gz", hash = "sha256:d8ace49c66f14419fc66071371b99d01bed230bbc15d8a60233b18bfbd782851"}, ] [package.dependencies] comm = ">=0.1.3" ipython = ">=6.1.0" -jupyterlab-widgets = ">=3.0.12,<3.1.0" +jupyterlab_widgets = ">=3.0.14,<3.1.0" traitlets = ">=4.3.1" -widgetsnbextension = ">=4.0.12,<4.1.0" +widgetsnbextension = ">=4.0.14,<4.1.0" [package.extras] test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] @@ -1635,17 +1696,17 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "json5" -version = "0.10.0" +version = "0.12.0" description = "A Python implementation of the JSON5 data format." optional = false python-versions = ">=3.8.0" files = [ - {file = "json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa"}, - {file = "json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559"}, + {file = "json5-0.12.0-py3-none-any.whl", hash = "sha256:6d37aa6c08b0609f16e1ec5ff94697e2cbbfbad5ac112afa05794da9ab7810db"}, + {file = "json5-0.12.0.tar.gz", hash = "sha256:0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a"}, ] [package.extras] -dev = ["build (==1.2.2.post1)", "coverage (==7.5.3)", "mypy (==1.13.0)", "pip (==24.3.1)", "pylint (==3.2.3)", "ruff (==0.7.3)", "twine (==5.1.1)", "uv (==0.5.1)"] +dev = ["build (==1.2.2.post1)", "coverage (==7.5.4)", "coverage (==7.8.0)", "mypy (==1.14.1)", "mypy (==1.15.0)", "pip (==25.0.1)", "pylint (==3.2.7)", "pylint (==3.3.6)", "ruff (==0.11.2)", "twine (==6.1.0)", "uv (==0.6.11)"] [[package]] name = "jsonpointer" @@ -1689,13 +1750,13 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2024.10.1" +version = "2025.4.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.9" files = [ - {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, - {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, + {file = "jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af"}, + {file = "jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608"}, ] [package.dependencies] @@ -1883,13 +1944,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.3.6" +version = "4.4.1" description = "JupyterLab computational environment" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "jupyterlab-4.3.6-py3-none-any.whl", hash = "sha256:fc9eb0455562a56a9bd6d2977cf090842f321fa1a298fcee9bf8c19de353d5fd"}, - {file = "jupyterlab-4.3.6.tar.gz", hash = "sha256:2900ffdbfca9ed37c4ad7fdda3eb76582fd945d46962af3ac64741ae2d6b2ff4"}, + {file = "jupyterlab-4.4.1-py3-none-any.whl", hash = "sha256:989bca3f9cf2d04b2022e7e657e2df6d4aca808b364810d31c4865edd968a5f7"}, + {file = "jupyterlab-4.4.1.tar.gz", hash = "sha256:c75c4f33056fbd84f0b31eb44622a00c7a5f981b85adfeb198a83721f0465808"}, ] [package.dependencies] @@ -1903,15 +1964,15 @@ jupyter-server = ">=2.4.0,<3" jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2" packaging = "*" -setuptools = ">=40.8.0" +setuptools = ">=41.1.0" tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} tornado = ">=6.2.0" traitlets = "*" [package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.6.9)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.1.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.4.1)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.2.post3)", "matplotlib (==3.9.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.14.1)", "vega-datasets (==0.9.0)"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.11.4)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.2.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.5.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.3.post1)", "matplotlib (==3.10.0)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.15.1)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] upgrade-extension = ["copier (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] @@ -1953,24 +2014,24 @@ test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-v [[package]] name = "jupyterlab-widgets" -version = "3.0.13" +version = "3.0.14" description = "Jupyter interactive widgets for JupyterLab" optional = false python-versions = ">=3.7" files = [ - {file = "jupyterlab_widgets-3.0.13-py3-none-any.whl", hash = "sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54"}, - {file = "jupyterlab_widgets-3.0.13.tar.gz", hash = "sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed"}, + {file = "jupyterlab_widgets-3.0.14-py3-none-any.whl", hash = "sha256:54c33e3306b7fca139d165d6190dc6c0627aafa5d14adfc974a4e9a3d26cb703"}, + {file = "jupyterlab_widgets-3.0.14.tar.gz", hash = "sha256:bad03e59546869f026e537e0d170e454259e6dc7048e14041707ca31e523c8a1"}, ] [[package]] name = "mako" -version = "1.3.9" +version = "1.3.10" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." optional = false python-versions = ">=3.8" files = [ - {file = "Mako-1.3.9-py3-none-any.whl", hash = "sha256:95920acccb578427a9aa38e37a186b1e43156c87260d7ba18ca63aa4c7cbd3a1"}, - {file = "mako-1.3.9.tar.gz", hash = "sha256:b5d65ff3462870feec922dbccf38f6efb44e5714d7b593a656be86663d8600ac"}, + {file = "mako-1.3.10-py3-none-any.whl", hash = "sha256:baef24a52fc4fc514a0887ac600f9f1cff3d82c61d4d700a1fa84d597b88db59"}, + {file = "mako-1.3.10.tar.gz", hash = "sha256:99579a6f39583fa7e5630a28c3c1f440e4e97a414b80372649c0ce338da2ea28"}, ] [package.dependencies] @@ -2053,21 +2114,22 @@ files = [ [[package]] name = "marshmallow" -version = "3.26.1" +version = "4.0.0" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.9" files = [ - {file = "marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c"}, - {file = "marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6"}, + {file = "marshmallow-4.0.0-py3-none-any.whl", hash = "sha256:e7b0528337e9990fd64950f8a6b3a1baabed09ad17a0dfb844d701151f92d203"}, + {file = "marshmallow-4.0.0.tar.gz", hash = "sha256:3b6e80aac299a7935cfb97ed01d1854fb90b5079430969af92118ea1b12a8d55"}, ] [package.dependencies] -packaging = ">=17.0" +backports-datetime-fromisoformat = {version = "*", markers = "python_version < \"3.11\""} +typing-extensions = {version = "*", markers = "python_version < \"3.11\""} [package.extras] dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["autodocsumm (==0.2.14)", "furo (==2024.8.6)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "sphinxext-opengraph (==0.9.1)"] +docs = ["autodocsumm (==0.2.14)", "furo (==2024.8.6)", "sphinx (==8.2.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.1)", "sphinxext-opengraph (==0.10.0)"] tests = ["pytest", "simplejson"] [[package]] @@ -2097,13 +2159,13 @@ files = [ [[package]] name = "mistune" -version = "3.1.2" +version = "3.1.3" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false python-versions = ">=3.8" files = [ - {file = "mistune-3.1.2-py3-none-any.whl", hash = "sha256:4b47731332315cdca99e0ded46fc0004001c1299ff773dfb48fbe1fd226de319"}, - {file = "mistune-3.1.2.tar.gz", hash = "sha256:733bf018ba007e8b5f2d3a9eb624034f6ee26c4ea769a98ec533ee111d504dff"}, + {file = "mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9"}, + {file = "mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0"}, ] [package.dependencies] @@ -2111,13 +2173,13 @@ typing-extensions = {version = "*", markers = "python_version < \"3.11\""} [[package]] name = "msal" -version = "1.32.0" +version = "1.32.3" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = false python-versions = ">=3.7" files = [ - {file = "msal-1.32.0-py3-none-any.whl", hash = "sha256:9dbac5384a10bbbf4dae5c7ea0d707d14e087b92c5aa4954b3feaa2d1aa0bcb7"}, - {file = "msal-1.32.0.tar.gz", hash = "sha256:5445fe3af1da6be484991a7ab32eaa82461dc2347de105b76af92c610c3335c2"}, + {file = "msal-1.32.3-py3-none-any.whl", hash = "sha256:b2798db57760b1961b142f027ffb7c8169536bf77316e99a0df5c4aaebb11569"}, + {file = "msal-1.32.3.tar.gz", hash = "sha256:5eea038689c78a5a70ca8ecbe1245458b55a857bd096efb6989c69ba15985d35"}, ] [package.dependencies] @@ -2147,103 +2209,115 @@ portalocker = ["portalocker (>=1.4,<4)"] [[package]] name = "multidict" -version = "6.1.0" +version = "6.4.3" description = "multidict implementation" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, - {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, - {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"}, - {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"}, - {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"}, - {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"}, - {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"}, - {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"}, - {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"}, - {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"}, - {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"}, - {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"}, - {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"}, - {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"}, - {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"}, - {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"}, - {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"}, - {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"}, - {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"}, - {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"}, - {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"}, - {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"}, - {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"}, - {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"}, - {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"}, - {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"}, - {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"}, - {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"}, - {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"}, - {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"}, - {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"}, - {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"}, - {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"}, - {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"}, - {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"}, - {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"}, - {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"}, - {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"}, - {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"}, - {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"}, - {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"}, - {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"}, - {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"}, - {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"}, - {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"}, - {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"}, - {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"}, - {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"}, - {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"}, - {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"}, - {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"}, - {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"}, - {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"}, - {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"}, - {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"}, - {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"}, - {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"}, - {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"}, - {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"}, - {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"}, - {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"}, - {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"}, - {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"}, - {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"}, - {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"}, - {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"}, - {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"}, - {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"}, - {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"}, - {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"}, - {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"}, - {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"}, - {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"}, - {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"}, - {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"}, - {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"}, - {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"}, - {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"}, - {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"}, - {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"}, - {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"}, - {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"}, - {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"}, - {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"}, - {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"}, - {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"}, - {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"}, - {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"}, - {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"}, - {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"}, - {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"}, - {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"}, + {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32a998bd8a64ca48616eac5a8c1cc4fa38fb244a3facf2eeb14abe186e0f6cc5"}, + {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a54ec568f1fc7f3c313c2f3b16e5db346bf3660e1309746e7fccbbfded856188"}, + {file = "multidict-6.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a7be07e5df178430621c716a63151165684d3e9958f2bbfcb644246162007ab7"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b128dbf1c939674a50dd0b28f12c244d90e5015e751a4f339a96c54f7275e291"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b9cb19dfd83d35b6ff24a4022376ea6e45a2beba8ef3f0836b8a4b288b6ad685"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3cf62f8e447ea2c1395afa289b332e49e13d07435369b6f4e41f887db65b40bf"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:909f7d43ff8f13d1adccb6a397094adc369d4da794407f8dd592c51cf0eae4b1"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0bb8f8302fbc7122033df959e25777b0b7659b1fd6bcb9cb6bed76b5de67afef"}, + {file = "multidict-6.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:224b79471b4f21169ea25ebc37ed6f058040c578e50ade532e2066562597b8a9"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a7bd27f7ab3204f16967a6f899b3e8e9eb3362c0ab91f2ee659e0345445e0078"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:99592bd3162e9c664671fd14e578a33bfdba487ea64bcb41d281286d3c870ad7"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a62d78a1c9072949018cdb05d3c533924ef8ac9bcb06cbf96f6d14772c5cd451"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ccdde001578347e877ca4f629450973c510e88e8865d5aefbcb89b852ccc666"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:eccb67b0e78aa2e38a04c5ecc13bab325a43e5159a181a9d1a6723db913cbb3c"}, + {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8b6fcf6054fc4114a27aa865f8840ef3d675f9316e81868e0ad5866184a6cba5"}, + {file = "multidict-6.4.3-cp310-cp310-win32.whl", hash = "sha256:f92c7f62d59373cd93bc9969d2da9b4b21f78283b1379ba012f7ee8127b3152e"}, + {file = "multidict-6.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:b57e28dbc031d13916b946719f213c494a517b442d7b48b29443e79610acd887"}, + {file = "multidict-6.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f6f19170197cc29baccd33ccc5b5d6a331058796485857cf34f7635aa25fb0cd"}, + {file = "multidict-6.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2882bf27037eb687e49591690e5d491e677272964f9ec7bc2abbe09108bdfb8"}, + {file = "multidict-6.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fbf226ac85f7d6b6b9ba77db4ec0704fde88463dc17717aec78ec3c8546c70ad"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e329114f82ad4b9dd291bef614ea8971ec119ecd0f54795109976de75c9a852"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1f4e0334d7a555c63f5c8952c57ab6f1c7b4f8c7f3442df689fc9f03df315c08"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:740915eb776617b57142ce0bb13b7596933496e2f798d3d15a20614adf30d229"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255dac25134d2b141c944b59a0d2f7211ca12a6d4779f7586a98b4b03ea80508"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4e8535bd4d741039b5aad4285ecd9b902ef9e224711f0b6afda6e38d7ac02c7"}, + {file = "multidict-6.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c433a33be000dd968f5750722eaa0991037be0be4a9d453eba121774985bc8"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4eb33b0bdc50acd538f45041f5f19945a1f32b909b76d7b117c0c25d8063df56"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:75482f43465edefd8a5d72724887ccdcd0c83778ded8f0cb1e0594bf71736cc0"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ce5b3082e86aee80b3925ab4928198450d8e5b6466e11501fe03ad2191c6d777"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e413152e3212c4d39f82cf83c6f91be44bec9ddea950ce17af87fbf4e32ca6b2"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8aac2eeff69b71f229a405c0a4b61b54bade8e10163bc7b44fcd257949620618"}, + {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ab583ac203af1d09034be41458feeab7863c0635c650a16f15771e1386abf2d7"}, + {file = "multidict-6.4.3-cp311-cp311-win32.whl", hash = "sha256:1b2019317726f41e81154df636a897de1bfe9228c3724a433894e44cd2512378"}, + {file = "multidict-6.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:43173924fa93c7486402217fab99b60baf78d33806af299c56133a3755f69589"}, + {file = "multidict-6.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676"}, + {file = "multidict-6.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1"}, + {file = "multidict-6.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c"}, + {file = "multidict-6.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713"}, + {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a"}, + {file = "multidict-6.4.3-cp312-cp312-win32.whl", hash = "sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124"}, + {file = "multidict-6.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db"}, + {file = "multidict-6.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474"}, + {file = "multidict-6.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd"}, + {file = "multidict-6.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0"}, + {file = "multidict-6.4.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9"}, + {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8"}, + {file = "multidict-6.4.3-cp313-cp313-win32.whl", hash = "sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3"}, + {file = "multidict-6.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5"}, + {file = "multidict-6.4.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6"}, + {file = "multidict-6.4.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c"}, + {file = "multidict-6.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02"}, + {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4"}, + {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4"}, + {file = "multidict-6.4.3-cp313-cp313t-win32.whl", hash = "sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5"}, + {file = "multidict-6.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208"}, + {file = "multidict-6.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5427a2679e95a642b7f8b0f761e660c845c8e6fe3141cddd6b62005bd133fc21"}, + {file = "multidict-6.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24a8caa26521b9ad09732972927d7b45b66453e6ebd91a3c6a46d811eeb7349b"}, + {file = "multidict-6.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6b5a272bc7c36a2cd1b56ddc6bff02e9ce499f9f14ee4a45c45434ef083f2459"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf74dc5e212b8c75165b435c43eb0d5e81b6b300a938a4eb82827119115e840"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9f35de41aec4b323c71f54b0ca461ebf694fb48bec62f65221f52e0017955b39"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae93e0ff43b6f6892999af64097b18561691ffd835e21a8348a441e256592e1f"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e3929269e9d7eff905d6971d8b8c85e7dbc72c18fb99c8eae6fe0a152f2e343"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb6214fe1750adc2a1b801a199d64b5a67671bf76ebf24c730b157846d0e90d2"}, + {file = "multidict-6.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d79cf5c0c6284e90f72123f4a3e4add52d6c6ebb4a9054e88df15b8d08444c6"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2427370f4a255262928cd14533a70d9738dfacadb7563bc3b7f704cc2360fc4e"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:fbd8d737867912b6c5f99f56782b8cb81f978a97b4437a1c476de90a3e41c9a1"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0ee1bf613c448997f73fc4efb4ecebebb1c02268028dd4f11f011f02300cf1e8"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:578568c4ba5f2b8abd956baf8b23790dbfdc953e87d5b110bce343b4a54fc9e7"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a059ad6b80de5b84b9fa02a39400319e62edd39d210b4e4f8c4f1243bdac4752"}, + {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dd53893675b729a965088aaadd6a1f326a72b83742b056c1065bdd2e2a42b4df"}, + {file = "multidict-6.4.3-cp39-cp39-win32.whl", hash = "sha256:abcfed2c4c139f25c2355e180bcc077a7cae91eefbb8b3927bb3f836c9586f1f"}, + {file = "multidict-6.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:b1b389ae17296dd739015d5ddb222ee99fd66adeae910de21ac950e00979d897"}, + {file = "multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9"}, + {file = "multidict-6.4.3.tar.gz", hash = "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec"}, ] [package.dependencies] @@ -2341,18 +2415,18 @@ files = [ [[package]] name = "notebook" -version = "7.3.3" +version = "7.4.1" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false python-versions = ">=3.8" files = [ - {file = "notebook-7.3.3-py3-none-any.whl", hash = "sha256:b193df0878956562d5171c8e25c9252b8e86c9fcc16163b8ee3fe6c5e3f422f7"}, - {file = "notebook-7.3.3.tar.gz", hash = "sha256:707a313fb882d35f921989eb3d204de942ed5132a44e4aa1fe0e8f24bb9dc25d"}, + {file = "notebook-7.4.1-py3-none-any.whl", hash = "sha256:498f12cf567d95b20e780d62d52564ee4310248b3175e996b667b5808028e5d3"}, + {file = "notebook-7.4.1.tar.gz", hash = "sha256:96894962b230013ea0c0a466e4e642c5aace25ba8c86686175b69990ef628ff9"}, ] [package.dependencies] jupyter-server = ">=2.4.0,<3" -jupyterlab = ">=4.3.6,<4.4" +jupyterlab = ">=4.4.0rc0,<4.5" jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2,<0.3" tornado = ">=6.2.0" @@ -2381,56 +2455,66 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "2.0.2" +version = "2.2.5" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, - {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, - {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, - {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, - {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, - {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, - {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, - {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, - {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, - {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, - {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, - {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, - {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, - {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, - {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, - {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, - {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, - {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, - {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, - {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, - {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, - {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, - {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, + {file = "numpy-2.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f4a922da1729f4c40932b2af4fe84909c7a6e167e6e99f71838ce3a29f3fe26"}, + {file = "numpy-2.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6f91524d31b34f4a5fee24f5bc16dcd1491b668798b6d85585d836c1e633a6a"}, + {file = "numpy-2.2.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:19f4718c9012e3baea91a7dba661dcab2451cda2550678dc30d53acb91a7290f"}, + {file = "numpy-2.2.5-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:eb7fd5b184e5d277afa9ec0ad5e4eb562ecff541e7f60e69ee69c8d59e9aeaba"}, + {file = "numpy-2.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6413d48a9be53e183eb06495d8e3b006ef8f87c324af68241bbe7a39e8ff54c3"}, + {file = "numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7451f92eddf8503c9b8aa4fe6aa7e87fd51a29c2cfc5f7dbd72efde6c65acf57"}, + {file = "numpy-2.2.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0bcb1d057b7571334139129b7f941588f69ce7c4ed15a9d6162b2ea54ded700c"}, + {file = "numpy-2.2.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:36ab5b23915887543441efd0417e6a3baa08634308894316f446027611b53bf1"}, + {file = "numpy-2.2.5-cp310-cp310-win32.whl", hash = "sha256:422cc684f17bc963da5f59a31530b3936f57c95a29743056ef7a7903a5dbdf88"}, + {file = "numpy-2.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:e4f0b035d9d0ed519c813ee23e0a733db81ec37d2e9503afbb6e54ccfdee0fa7"}, + {file = "numpy-2.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c42365005c7a6c42436a54d28c43fe0e01ca11eb2ac3cefe796c25a5f98e5e9b"}, + {file = "numpy-2.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:498815b96f67dc347e03b719ef49c772589fb74b8ee9ea2c37feae915ad6ebda"}, + {file = "numpy-2.2.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6411f744f7f20081b1b4e7112e0f4c9c5b08f94b9f086e6f0adf3645f85d3a4d"}, + {file = "numpy-2.2.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9de6832228f617c9ef45d948ec1cd8949c482238d68b2477e6f642c33a7b0a54"}, + {file = "numpy-2.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:369e0d4647c17c9363244f3468f2227d557a74b6781cb62ce57cf3ef5cc7c610"}, + {file = "numpy-2.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:262d23f383170f99cd9191a7c85b9a50970fe9069b2f8ab5d786eca8a675d60b"}, + {file = "numpy-2.2.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa70fdbdc3b169d69e8c59e65c07a1c9351ceb438e627f0fdcd471015cd956be"}, + {file = "numpy-2.2.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37e32e985f03c06206582a7323ef926b4e78bdaa6915095ef08070471865b906"}, + {file = "numpy-2.2.5-cp311-cp311-win32.whl", hash = "sha256:f5045039100ed58fa817a6227a356240ea1b9a1bc141018864c306c1a16d4175"}, + {file = "numpy-2.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:b13f04968b46ad705f7c8a80122a42ae8f620536ea38cf4bdd374302926424dd"}, + {file = "numpy-2.2.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ee461a4eaab4f165b68780a6a1af95fb23a29932be7569b9fab666c407969051"}, + {file = "numpy-2.2.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ec31367fd6a255dc8de4772bd1658c3e926d8e860a0b6e922b615e532d320ddc"}, + {file = "numpy-2.2.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:47834cde750d3c9f4e52c6ca28a7361859fcaf52695c7dc3cc1a720b8922683e"}, + {file = "numpy-2.2.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2c1a1c6ccce4022383583a6ded7bbcda22fc635eb4eb1e0a053336425ed36dfa"}, + {file = "numpy-2.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d75f338f5f79ee23548b03d801d28a505198297534f62416391857ea0479571"}, + {file = "numpy-2.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a801fef99668f309b88640e28d261991bfad9617c27beda4a3aec4f217ea073"}, + {file = "numpy-2.2.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:abe38cd8381245a7f49967a6010e77dbf3680bd3627c0fe4362dd693b404c7f8"}, + {file = "numpy-2.2.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a0ac90e46fdb5649ab6369d1ab6104bfe5854ab19b645bf5cda0127a13034ae"}, + {file = "numpy-2.2.5-cp312-cp312-win32.whl", hash = "sha256:0cd48122a6b7eab8f06404805b1bd5856200e3ed6f8a1b9a194f9d9054631beb"}, + {file = "numpy-2.2.5-cp312-cp312-win_amd64.whl", hash = "sha256:ced69262a8278547e63409b2653b372bf4baff0870c57efa76c5703fd6543282"}, + {file = "numpy-2.2.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:059b51b658f4414fff78c6d7b1b4e18283ab5fa56d270ff212d5ba0c561846f4"}, + {file = "numpy-2.2.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:47f9ed103af0bc63182609044b0490747e03bd20a67e391192dde119bf43d52f"}, + {file = "numpy-2.2.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:261a1ef047751bb02f29dfe337230b5882b54521ca121fc7f62668133cb119c9"}, + {file = "numpy-2.2.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4520caa3807c1ceb005d125a75e715567806fed67e315cea619d5ec6e75a4191"}, + {file = "numpy-2.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d14b17b9be5f9c9301f43d2e2a4886a33b53f4e6fdf9ca2f4cc60aeeee76372"}, + {file = "numpy-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba321813a00e508d5421104464510cc962a6f791aa2fca1c97b1e65027da80d"}, + {file = "numpy-2.2.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4cbdef3ddf777423060c6f81b5694bad2dc9675f110c4b2a60dc0181543fac7"}, + {file = "numpy-2.2.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54088a5a147ab71a8e7fdfd8c3601972751ded0739c6b696ad9cb0343e21ab73"}, + {file = "numpy-2.2.5-cp313-cp313-win32.whl", hash = "sha256:c8b82a55ef86a2d8e81b63da85e55f5537d2157165be1cb2ce7cfa57b6aef38b"}, + {file = "numpy-2.2.5-cp313-cp313-win_amd64.whl", hash = "sha256:d8882a829fd779f0f43998e931c466802a77ca1ee0fe25a3abe50278616b1471"}, + {file = "numpy-2.2.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e8b025c351b9f0e8b5436cf28a07fa4ac0204d67b38f01433ac7f9b870fa38c6"}, + {file = "numpy-2.2.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dfa94b6a4374e7851bbb6f35e6ded2120b752b063e6acdd3157e4d2bb922eba"}, + {file = "numpy-2.2.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:97c8425d4e26437e65e1d189d22dff4a079b747ff9c2788057bfb8114ce1e133"}, + {file = "numpy-2.2.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:352d330048c055ea6db701130abc48a21bec690a8d38f8284e00fab256dc1376"}, + {file = "numpy-2.2.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b4c0773b6ada798f51f0f8e30c054d32304ccc6e9c5d93d46cb26f3d385ab19"}, + {file = "numpy-2.2.5-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55f09e00d4dccd76b179c0f18a44f041e5332fd0e022886ba1c0bbf3ea4a18d0"}, + {file = "numpy-2.2.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:02f226baeefa68f7d579e213d0f3493496397d8f1cff5e2b222af274c86a552a"}, + {file = "numpy-2.2.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c26843fd58f65da9491165072da2cccc372530681de481ef670dcc8e27cfb066"}, + {file = "numpy-2.2.5-cp313-cp313t-win32.whl", hash = "sha256:1a161c2c79ab30fe4501d5a2bbfe8b162490757cf90b7f05be8b80bc02f7bb8e"}, + {file = "numpy-2.2.5-cp313-cp313t-win_amd64.whl", hash = "sha256:d403c84991b5ad291d3809bace5e85f4bbf44a04bdc9a88ed2bb1807b3360bb8"}, + {file = "numpy-2.2.5-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4ea7e1cff6784e58fe281ce7e7f05036b3e1c89c6f922a6bfbc0a7e8768adbe"}, + {file = "numpy-2.2.5-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d7543263084a85fbc09c704b515395398d31d6395518446237eac219eab9e55e"}, + {file = "numpy-2.2.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0255732338c4fdd00996c0421884ea8a3651eea555c3a56b84892b66f696eb70"}, + {file = "numpy-2.2.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d2e3bdadaba0e040d1e7ab39db73e0afe2c74ae277f5614dad53eadbecbbb169"}, + {file = "numpy-2.2.5.tar.gz", hash = "sha256:a9c0d994680cd991b1cb772e8b297340085466a6fe964bc9d4e80f5e2f43c291"}, ] [[package]] @@ -2446,13 +2530,13 @@ files = [ [[package]] name = "packaging" -version = "24.2" +version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] [[package]] @@ -2583,34 +2667,34 @@ ptyprocess = ">=0.5" [[package]] name = "platformdirs" -version = "4.3.6" +version = "4.3.7" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, - {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, + {file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"}, + {file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"}, ] [package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.11.2)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] [[package]] name = "polars" -version = "1.25.2" +version = "1.28.1" description = "Blazingly fast DataFrame library" optional = false python-versions = ">=3.9" files = [ - {file = "polars-1.25.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:59f2a34520ea4307a22e18b832310f8045a8a348606ca99ae785499b31eb4170"}, - {file = "polars-1.25.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:e9fe45bdc2327c2e2b64e8849a992b6d3bd4a7e7848b8a7a3a439cca9674dc87"}, - {file = "polars-1.25.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7fcbb4f476784384ccda48757fca4e8c2e2c5a0a3aef3717aaf56aee4e30e09"}, - {file = "polars-1.25.2-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:9dd91885c9ee5ffad8725c8591f73fb7bd2632c740277ee641f0453176b3d4b8"}, - {file = "polars-1.25.2-cp39-abi3-win_amd64.whl", hash = "sha256:a547796643b9a56cb2959be87d7cb87ff80a5c8ae9367f32fe1ad717039e9afc"}, - {file = "polars-1.25.2-cp39-abi3-win_arm64.whl", hash = "sha256:a2488e9d4b67bf47b18088f7264999180559e6ec2637ed11f9d0d4f98a74a37c"}, - {file = "polars-1.25.2.tar.gz", hash = "sha256:c6bd9b1b17c86e49bcf8aac44d2238b77e414d7df890afc3924812a5c989a4fe"}, + {file = "polars-1.28.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f88d2ba73a4e831eb39433fcf9c84619f8c21a3d83ce9db465b822b4321bb95"}, + {file = "polars-1.28.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:36a199344e2b6b9d5fa30d2835830965f8c7677b38a9e96b1f9be482c31c18c6"}, + {file = "polars-1.28.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f37a14458a7336351ae32f199a566e784bd0b25895d0f83c6c02bd0f0c25c57d"}, + {file = "polars-1.28.1-cp39-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:c0d209295627fbca45ebb2fa3279df291b1360685ce3f12e24f8327a79b3d384"}, + {file = "polars-1.28.1-cp39-abi3-win_amd64.whl", hash = "sha256:b1a17108e0ed3844a2e55da3a674414523aaab29299a2956cb691cdfc0db6246"}, + {file = "polars-1.28.1-cp39-abi3-win_arm64.whl", hash = "sha256:35ca8ab1937e5c72496789968a53e138796e1f5156c832d52f846ef7332149d7"}, + {file = "polars-1.28.1.tar.gz", hash = "sha256:cdc0a62a1452e2daf1777e36fcf9351424cba2a588827cc32550fe0fa79dec82"}, ] [package.dependencies] @@ -2661,13 +2745,13 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.50" +version = "3.0.51" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.8" files = [ - {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, - {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, + {file = "prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"}, + {file = "prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed"}, ] [package.dependencies] @@ -2675,109 +2759,109 @@ wcwidth = "*" [[package]] name = "propcache" -version = "0.3.0" +version = "0.3.1" description = "Accelerated property cache" optional = false python-versions = ">=3.9" files = [ - {file = "propcache-0.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:efa44f64c37cc30c9f05932c740a8b40ce359f51882c70883cc95feac842da4d"}, - {file = "propcache-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2383a17385d9800b6eb5855c2f05ee550f803878f344f58b6e194de08b96352c"}, - {file = "propcache-0.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3e7420211f5a65a54675fd860ea04173cde60a7cc20ccfbafcccd155225f8bc"}, - {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3302c5287e504d23bb0e64d2a921d1eb4a03fb93a0a0aa3b53de059f5a5d737d"}, - {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7e2e068a83552ddf7a39a99488bcba05ac13454fb205c847674da0352602082f"}, - {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d913d36bdaf368637b4f88d554fb9cb9d53d6920b9c5563846555938d5450bf"}, - {file = "propcache-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ee1983728964d6070ab443399c476de93d5d741f71e8f6e7880a065f878e0b9"}, - {file = "propcache-0.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36ca5e9a21822cc1746023e88f5c0af6fce3af3b85d4520efb1ce4221bed75cc"}, - {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9ecde3671e62eeb99e977f5221abcf40c208f69b5eb986b061ccec317c82ebd0"}, - {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d383bf5e045d7f9d239b38e6acadd7b7fdf6c0087259a84ae3475d18e9a2ae8b"}, - {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8cb625bcb5add899cb8ba7bf716ec1d3e8f7cdea9b0713fa99eadf73b6d4986f"}, - {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5fa159dcee5dba00c1def3231c249cf261185189205073bde13797e57dd7540a"}, - {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7080b0159ce05f179cfac592cda1a82898ca9cd097dacf8ea20ae33474fbb25"}, - {file = "propcache-0.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ed7161bccab7696a473fe7ddb619c1d75963732b37da4618ba12e60899fefe4f"}, - {file = "propcache-0.3.0-cp310-cp310-win32.whl", hash = "sha256:bf0d9a171908f32d54f651648c7290397b8792f4303821c42a74e7805bfb813c"}, - {file = "propcache-0.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:42924dc0c9d73e49908e35bbdec87adedd651ea24c53c29cac103ede0ea1d340"}, - {file = "propcache-0.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9ddd49258610499aab83b4f5b61b32e11fce873586282a0e972e5ab3bcadee51"}, - {file = "propcache-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2578541776769b500bada3f8a4eeaf944530516b6e90c089aa368266ed70c49e"}, - {file = "propcache-0.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8074c5dd61c8a3e915fa8fc04754fa55cfa5978200d2daa1e2d4294c1f136aa"}, - {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b58229a844931bca61b3a20efd2be2a2acb4ad1622fc026504309a6883686fbf"}, - {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e45377d5d6fefe1677da2a2c07b024a6dac782088e37c0b1efea4cfe2b1be19b"}, - {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ec5060592d83454e8063e487696ac3783cc48c9a329498bafae0d972bc7816c9"}, - {file = "propcache-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15010f29fbed80e711db272909a074dc79858c6d28e2915704cfc487a8ac89c6"}, - {file = "propcache-0.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a254537b9b696ede293bfdbc0a65200e8e4507bc9f37831e2a0318a9b333c85c"}, - {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2b975528998de037dfbc10144b8aed9b8dd5a99ec547f14d1cb7c5665a43f075"}, - {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:19d36bb351ad5554ff20f2ae75f88ce205b0748c38b146c75628577020351e3c"}, - {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6032231d4a5abd67c7f71168fd64a47b6b451fbcb91c8397c2f7610e67683810"}, - {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6985a593417cdbc94c7f9c3403747335e450c1599da1647a5af76539672464d3"}, - {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6a1948df1bb1d56b5e7b0553c0fa04fd0e320997ae99689488201f19fa90d2e7"}, - {file = "propcache-0.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8319293e85feadbbfe2150a5659dbc2ebc4afdeaf7d98936fb9a2f2ba0d4c35c"}, - {file = "propcache-0.3.0-cp311-cp311-win32.whl", hash = "sha256:63f26258a163c34542c24808f03d734b338da66ba91f410a703e505c8485791d"}, - {file = "propcache-0.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:cacea77ef7a2195f04f9279297684955e3d1ae4241092ff0cfcef532bb7a1c32"}, - {file = "propcache-0.3.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e53d19c2bf7d0d1e6998a7e693c7e87300dd971808e6618964621ccd0e01fe4e"}, - {file = "propcache-0.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a61a68d630e812b67b5bf097ab84e2cd79b48c792857dc10ba8a223f5b06a2af"}, - {file = "propcache-0.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fb91d20fa2d3b13deea98a690534697742029f4fb83673a3501ae6e3746508b5"}, - {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67054e47c01b7b349b94ed0840ccae075449503cf1fdd0a1fdd98ab5ddc2667b"}, - {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:997e7b8f173a391987df40f3b52c423e5850be6f6df0dcfb5376365440b56667"}, - {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d663fd71491dde7dfdfc899d13a067a94198e90695b4321084c6e450743b8c7"}, - {file = "propcache-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8884ba1a0fe7210b775106b25850f5e5a9dc3c840d1ae9924ee6ea2eb3acbfe7"}, - {file = "propcache-0.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa806bbc13eac1ab6291ed21ecd2dd426063ca5417dd507e6be58de20e58dfcf"}, - {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6f4d7a7c0aff92e8354cceca6fe223973ddf08401047920df0fcb24be2bd5138"}, - {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:9be90eebc9842a93ef8335291f57b3b7488ac24f70df96a6034a13cb58e6ff86"}, - {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:bf15fc0b45914d9d1b706f7c9c4f66f2b7b053e9517e40123e137e8ca8958b3d"}, - {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5a16167118677d94bb48bfcd91e420088854eb0737b76ec374b91498fb77a70e"}, - {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:41de3da5458edd5678b0f6ff66691507f9885f5fe6a0fb99a5d10d10c0fd2d64"}, - {file = "propcache-0.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:728af36011bb5d344c4fe4af79cfe186729efb649d2f8b395d1572fb088a996c"}, - {file = "propcache-0.3.0-cp312-cp312-win32.whl", hash = "sha256:6b5b7fd6ee7b54e01759f2044f936dcf7dea6e7585f35490f7ca0420fe723c0d"}, - {file = "propcache-0.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:2d15bc27163cd4df433e75f546b9ac31c1ba7b0b128bfb1b90df19082466ff57"}, - {file = "propcache-0.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a2b9bf8c79b660d0ca1ad95e587818c30ccdb11f787657458d6f26a1ea18c568"}, - {file = "propcache-0.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b0c1a133d42c6fc1f5fbcf5c91331657a1ff822e87989bf4a6e2e39b818d0ee9"}, - {file = "propcache-0.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bb2f144c6d98bb5cbc94adeb0447cfd4c0f991341baa68eee3f3b0c9c0e83767"}, - {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1323cd04d6e92150bcc79d0174ce347ed4b349d748b9358fd2e497b121e03c8"}, - {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b812b3cb6caacd072276ac0492d249f210006c57726b6484a1e1805b3cfeea0"}, - {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:742840d1d0438eb7ea4280f3347598f507a199a35a08294afdcc560c3739989d"}, - {file = "propcache-0.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c6e7e4f9167fddc438cd653d826f2222222564daed4116a02a184b464d3ef05"}, - {file = "propcache-0.3.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a94ffc66738da99232ddffcf7910e0f69e2bbe3a0802e54426dbf0714e1c2ffe"}, - {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3c6ec957025bf32b15cbc6b67afe233c65b30005e4c55fe5768e4bb518d712f1"}, - {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:549722908de62aa0b47a78b90531c022fa6e139f9166be634f667ff45632cc92"}, - {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5d62c4f6706bff5d8a52fd51fec6069bef69e7202ed481486c0bc3874912c787"}, - {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:24c04f8fbf60094c531667b8207acbae54146661657a1b1be6d3ca7773b7a545"}, - {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7c5f5290799a3f6539cc5e6f474c3e5c5fbeba74a5e1e5be75587746a940d51e"}, - {file = "propcache-0.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4fa0e7c9c3cf7c276d4f6ab9af8adddc127d04e0fcabede315904d2ff76db626"}, - {file = "propcache-0.3.0-cp313-cp313-win32.whl", hash = "sha256:ee0bd3a7b2e184e88d25c9baa6a9dc609ba25b76daae942edfb14499ac7ec374"}, - {file = "propcache-0.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:1c8f7d896a16da9455f882870a507567d4f58c53504dc2d4b1e1d386dfe4588a"}, - {file = "propcache-0.3.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e560fd75aaf3e5693b91bcaddd8b314f4d57e99aef8a6c6dc692f935cc1e6bbf"}, - {file = "propcache-0.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:65a37714b8ad9aba5780325228598a5b16c47ba0f8aeb3dc0514701e4413d7c0"}, - {file = "propcache-0.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:07700939b2cbd67bfb3b76a12e1412405d71019df00ca5697ce75e5ef789d829"}, - {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c0fdbdf6983526e269e5a8d53b7ae3622dd6998468821d660d0daf72779aefa"}, - {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:794c3dd744fad478b6232289c866c25406ecdfc47e294618bdf1697e69bd64a6"}, - {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4544699674faf66fb6b4473a1518ae4999c1b614f0b8297b1cef96bac25381db"}, - {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fddb8870bdb83456a489ab67c6b3040a8d5a55069aa6f72f9d872235fbc52f54"}, - {file = "propcache-0.3.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f857034dc68d5ceb30fb60afb6ff2103087aea10a01b613985610e007053a121"}, - {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:02df07041e0820cacc8f739510078f2aadcfd3fc57eaeeb16d5ded85c872c89e"}, - {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f47d52fd9b2ac418c4890aad2f6d21a6b96183c98021f0a48497a904199f006e"}, - {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9ff4e9ecb6e4b363430edf2c6e50173a63e0820e549918adef70515f87ced19a"}, - {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ecc2920630283e0783c22e2ac94427f8cca29a04cfdf331467d4f661f4072dac"}, - {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:c441c841e82c5ba7a85ad25986014be8d7849c3cfbdb6004541873505929a74e"}, - {file = "propcache-0.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c929916cbdb540d3407c66f19f73387f43e7c12fa318a66f64ac99da601bcdf"}, - {file = "propcache-0.3.0-cp313-cp313t-win32.whl", hash = "sha256:0c3e893c4464ebd751b44ae76c12c5f5c1e4f6cbd6fbf67e3783cd93ad221863"}, - {file = "propcache-0.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:75e872573220d1ee2305b35c9813626e620768248425f58798413e9c39741f46"}, - {file = "propcache-0.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:03c091bb752349402f23ee43bb2bff6bd80ccab7c9df6b88ad4322258d6960fc"}, - {file = "propcache-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:46ed02532cb66612d42ae5c3929b5e98ae330ea0f3900bc66ec5f4862069519b"}, - {file = "propcache-0.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:11ae6a8a01b8a4dc79093b5d3ca2c8a4436f5ee251a9840d7790dccbd96cb649"}, - {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df03cd88f95b1b99052b52b1bb92173229d7a674df0ab06d2b25765ee8404bce"}, - {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03acd9ff19021bd0567582ac88f821b66883e158274183b9e5586f678984f8fe"}, - {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd54895e4ae7d32f1e3dd91261df46ee7483a735017dc6f987904f194aa5fd14"}, - {file = "propcache-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26a67e5c04e3119594d8cfae517f4b9330c395df07ea65eab16f3d559b7068fe"}, - {file = "propcache-0.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee25f1ac091def37c4b59d192bbe3a206298feeb89132a470325bf76ad122a1e"}, - {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58e6d2a5a7cb3e5f166fd58e71e9a4ff504be9dc61b88167e75f835da5764d07"}, - {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:be90c94570840939fecedf99fa72839aed70b0ced449b415c85e01ae67422c90"}, - {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:49ea05212a529c2caffe411e25a59308b07d6e10bf2505d77da72891f9a05641"}, - {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:119e244ab40f70a98c91906d4c1f4c5f2e68bd0b14e7ab0a06922038fae8a20f"}, - {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:507c5357a8d8b4593b97fb669c50598f4e6cccbbf77e22fa9598aba78292b4d7"}, - {file = "propcache-0.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8526b0941ec5a40220fc4dfde76aed58808e2b309c03e9fa8e2260083ef7157f"}, - {file = "propcache-0.3.0-cp39-cp39-win32.whl", hash = "sha256:7cedd25e5f678f7738da38037435b340694ab34d424938041aa630d8bac42663"}, - {file = "propcache-0.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:bf4298f366ca7e1ad1d21bbb58300a6985015909964077afd37559084590c929"}, - {file = "propcache-0.3.0-py3-none-any.whl", hash = "sha256:67dda3c7325691c2081510e92c561f465ba61b975f481735aefdfc845d2cd043"}, - {file = "propcache-0.3.0.tar.gz", hash = "sha256:a8fd93de4e1d278046345f49e2238cdb298589325849b2645d4a94c53faeffc5"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180"}, + {file = "propcache-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46"}, + {file = "propcache-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e"}, + {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136"}, + {file = "propcache-0.3.1-cp310-cp310-win32.whl", hash = "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42"}, + {file = "propcache-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371"}, + {file = "propcache-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256"}, + {file = "propcache-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a"}, + {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9"}, + {file = "propcache-0.3.1-cp311-cp311-win32.whl", hash = "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005"}, + {file = "propcache-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976"}, + {file = "propcache-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25"}, + {file = "propcache-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5"}, + {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7"}, + {file = "propcache-0.3.1-cp312-cp312-win32.whl", hash = "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b"}, + {file = "propcache-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f"}, + {file = "propcache-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120"}, + {file = "propcache-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7"}, + {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef"}, + {file = "propcache-0.3.1-cp313-cp313-win32.whl", hash = "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24"}, + {file = "propcache-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c"}, + {file = "propcache-0.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458"}, + {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18"}, + {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a"}, + {file = "propcache-0.3.1-cp313-cp313t-win32.whl", hash = "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d"}, + {file = "propcache-0.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf"}, + {file = "propcache-0.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5"}, + {file = "propcache-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c"}, + {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe"}, + {file = "propcache-0.3.1-cp39-cp39-win32.whl", hash = "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64"}, + {file = "propcache-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566"}, + {file = "propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40"}, + {file = "propcache-0.3.1.tar.gz", hash = "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf"}, ] [[package]] @@ -2830,53 +2914,66 @@ tests = ["pytest"] [[package]] name = "pyarrow" -version = "19.0.1" +version = "20.0.0" description = "Python library for Apache Arrow" optional = false python-versions = ">=3.9" files = [ - {file = "pyarrow-19.0.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:fc28912a2dc924dddc2087679cc8b7263accc71b9ff025a1362b004711661a69"}, - {file = "pyarrow-19.0.1-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:fca15aabbe9b8355800d923cc2e82c8ef514af321e18b437c3d782aa884eaeec"}, - {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad76aef7f5f7e4a757fddcdcf010a8290958f09e3470ea458c80d26f4316ae89"}, - {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d03c9d6f2a3dffbd62671ca070f13fc527bb1867b4ec2b98c7eeed381d4f389a"}, - {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:65cf9feebab489b19cdfcfe4aa82f62147218558d8d3f0fc1e9dea0ab8e7905a"}, - {file = "pyarrow-19.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:41f9706fbe505e0abc10e84bf3a906a1338905cbbcf1177b71486b03e6ea6608"}, - {file = "pyarrow-19.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:c6cb2335a411b713fdf1e82a752162f72d4a7b5dbc588e32aa18383318b05866"}, - {file = "pyarrow-19.0.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:cc55d71898ea30dc95900297d191377caba257612f384207fe9f8293b5850f90"}, - {file = "pyarrow-19.0.1-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:7a544ec12de66769612b2d6988c36adc96fb9767ecc8ee0a4d270b10b1c51e00"}, - {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0148bb4fc158bfbc3d6dfe5001d93ebeed253793fff4435167f6ce1dc4bddeae"}, - {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f24faab6ed18f216a37870d8c5623f9c044566d75ec586ef884e13a02a9d62c5"}, - {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:4982f8e2b7afd6dae8608d70ba5bd91699077323f812a0448d8b7abdff6cb5d3"}, - {file = "pyarrow-19.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:49a3aecb62c1be1d822f8bf629226d4a96418228a42f5b40835c1f10d42e4db6"}, - {file = "pyarrow-19.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:008a4009efdb4ea3d2e18f05cd31f9d43c388aad29c636112c2966605ba33466"}, - {file = "pyarrow-19.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:80b2ad2b193e7d19e81008a96e313fbd53157945c7be9ac65f44f8937a55427b"}, - {file = "pyarrow-19.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:ee8dec072569f43835932a3b10c55973593abc00936c202707a4ad06af7cb294"}, - {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d5d1ec7ec5324b98887bdc006f4d2ce534e10e60f7ad995e7875ffa0ff9cb14"}, - {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3ad4c0eb4e2a9aeb990af6c09e6fa0b195c8c0e7b272ecc8d4d2b6574809d34"}, - {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d383591f3dcbe545f6cc62daaef9c7cdfe0dff0fb9e1c8121101cabe9098cfa6"}, - {file = "pyarrow-19.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b4c4156a625f1e35d6c0b2132635a237708944eb41df5fbe7d50f20d20c17832"}, - {file = "pyarrow-19.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:5bd1618ae5e5476b7654c7b55a6364ae87686d4724538c24185bbb2952679960"}, - {file = "pyarrow-19.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e45274b20e524ae5c39d7fc1ca2aa923aab494776d2d4b316b49ec7572ca324c"}, - {file = "pyarrow-19.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d9dedeaf19097a143ed6da37f04f4051aba353c95ef507764d344229b2b740ae"}, - {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ebfb5171bb5f4a52319344ebbbecc731af3f021e49318c74f33d520d31ae0c4"}, - {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a21d39fbdb948857f67eacb5bbaaf36802de044ec36fbef7a1c8f0dd3a4ab2"}, - {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:99bc1bec6d234359743b01e70d4310d0ab240c3d6b0da7e2a93663b0158616f6"}, - {file = "pyarrow-19.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1b93ef2c93e77c442c979b0d596af45e4665d8b96da598db145b0fec014b9136"}, - {file = "pyarrow-19.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9d46e06846a41ba906ab25302cf0fd522f81aa2a85a71021826f34639ad31ef"}, - {file = "pyarrow-19.0.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c0fe3dbbf054a00d1f162fda94ce236a899ca01123a798c561ba307ca38af5f0"}, - {file = "pyarrow-19.0.1-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:96606c3ba57944d128e8a8399da4812f56c7f61de8c647e3470b417f795d0ef9"}, - {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f04d49a6b64cf24719c080b3c2029a3a5b16417fd5fd7c4041f94233af732f3"}, - {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a9137cf7e1640dce4c190551ee69d478f7121b5c6f323553b319cac936395f6"}, - {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:7c1bca1897c28013db5e4c83944a2ab53231f541b9e0c3f4791206d0c0de389a"}, - {file = "pyarrow-19.0.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:58d9397b2e273ef76264b45531e9d552d8ec8a6688b7390b5be44c02a37aade8"}, - {file = "pyarrow-19.0.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:b9766a47a9cb56fefe95cb27f535038b5a195707a08bf61b180e642324963b46"}, - {file = "pyarrow-19.0.1-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:6c5941c1aac89a6c2f2b16cd64fe76bcdb94b2b1e99ca6459de4e6f07638d755"}, - {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd44d66093a239358d07c42a91eebf5015aa54fccba959db899f932218ac9cc8"}, - {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:335d170e050bcc7da867a1ed8ffb8b44c57aaa6e0843b156a501298657b1e972"}, - {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:1c7556165bd38cf0cd992df2636f8bcdd2d4b26916c6b7e646101aff3c16f76f"}, - {file = "pyarrow-19.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:699799f9c80bebcf1da0983ba86d7f289c5a2a5c04b945e2f2bcf7e874a91911"}, - {file = "pyarrow-19.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:8464c9fbe6d94a7fe1599e7e8965f350fd233532868232ab2596a71586c5a429"}, - {file = "pyarrow-19.0.1.tar.gz", hash = "sha256:3bf266b485df66a400f282ac0b6d1b500b9d2ae73314a153dbe97d6d5cc8a99e"}, + {file = "pyarrow-20.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:c7dd06fd7d7b410ca5dc839cc9d485d2bc4ae5240851bcd45d85105cc90a47d7"}, + {file = "pyarrow-20.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d5382de8dc34c943249b01c19110783d0d64b207167c728461add1ecc2db88e4"}, + {file = "pyarrow-20.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6415a0d0174487456ddc9beaead703d0ded5966129fa4fd3114d76b5d1c5ceae"}, + {file = "pyarrow-20.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15aa1b3b2587e74328a730457068dc6c89e6dcbf438d4369f572af9d320a25ee"}, + {file = "pyarrow-20.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:5605919fbe67a7948c1f03b9f3727d82846c053cd2ce9303ace791855923fd20"}, + {file = "pyarrow-20.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a5704f29a74b81673d266e5ec1fe376f060627c2e42c5c7651288ed4b0db29e9"}, + {file = "pyarrow-20.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:00138f79ee1b5aca81e2bdedb91e3739b987245e11fa3c826f9e57c5d102fb75"}, + {file = "pyarrow-20.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f2d67ac28f57a362f1a2c1e6fa98bfe2f03230f7e15927aecd067433b1e70ce8"}, + {file = "pyarrow-20.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:4a8b029a07956b8d7bd742ffca25374dd3f634b35e46cc7a7c3fa4c75b297191"}, + {file = "pyarrow-20.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:24ca380585444cb2a31324c546a9a56abbe87e26069189e14bdba19c86c049f0"}, + {file = "pyarrow-20.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:95b330059ddfdc591a3225f2d272123be26c8fa76e8c9ee1a77aad507361cfdb"}, + {file = "pyarrow-20.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f0fb1041267e9968c6d0d2ce3ff92e3928b243e2b6d11eeb84d9ac547308232"}, + {file = "pyarrow-20.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8ff87cc837601532cc8242d2f7e09b4e02404de1b797aee747dd4ba4bd6313f"}, + {file = "pyarrow-20.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:7a3a5dcf54286e6141d5114522cf31dd67a9e7c9133d150799f30ee302a7a1ab"}, + {file = "pyarrow-20.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a6ad3e7758ecf559900261a4df985662df54fb7fdb55e8e3b3aa99b23d526b62"}, + {file = "pyarrow-20.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6bb830757103a6cb300a04610e08d9636f0cd223d32f388418ea893a3e655f1c"}, + {file = "pyarrow-20.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:96e37f0766ecb4514a899d9a3554fadda770fb57ddf42b63d80f14bc20aa7db3"}, + {file = "pyarrow-20.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3346babb516f4b6fd790da99b98bed9708e3f02e734c84971faccb20736848dc"}, + {file = "pyarrow-20.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:75a51a5b0eef32727a247707d4755322cb970be7e935172b6a3a9f9ae98404ba"}, + {file = "pyarrow-20.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:211d5e84cecc640c7a3ab900f930aaff5cd2702177e0d562d426fb7c4f737781"}, + {file = "pyarrow-20.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ba3cf4182828be7a896cbd232aa8dd6a31bd1f9e32776cc3796c012855e1199"}, + {file = "pyarrow-20.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c3a01f313ffe27ac4126f4c2e5ea0f36a5fc6ab51f8726cf41fee4b256680bd"}, + {file = "pyarrow-20.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:a2791f69ad72addd33510fec7bb14ee06c2a448e06b649e264c094c5b5f7ce28"}, + {file = "pyarrow-20.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4250e28a22302ce8692d3a0e8ec9d9dde54ec00d237cff4dfa9c1fbf79e472a8"}, + {file = "pyarrow-20.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:89e030dc58fc760e4010148e6ff164d2f44441490280ef1e97a542375e41058e"}, + {file = "pyarrow-20.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6102b4864d77102dbbb72965618e204e550135a940c2534711d5ffa787df2a5a"}, + {file = "pyarrow-20.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:96d6a0a37d9c98be08f5ed6a10831d88d52cac7b13f5287f1e0f625a0de8062b"}, + {file = "pyarrow-20.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:a15532e77b94c61efadde86d10957950392999503b3616b2ffcef7621a002893"}, + {file = "pyarrow-20.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:dd43f58037443af715f34f1322c782ec463a3c8a94a85fdb2d987ceb5658e061"}, + {file = "pyarrow-20.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa0d288143a8585806e3cc7c39566407aab646fb9ece164609dac1cfff45f6ae"}, + {file = "pyarrow-20.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6953f0114f8d6f3d905d98e987d0924dabce59c3cda380bdfaa25a6201563b4"}, + {file = "pyarrow-20.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:991f85b48a8a5e839b2128590ce07611fae48a904cae6cab1f089c5955b57eb5"}, + {file = "pyarrow-20.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:97c8dc984ed09cb07d618d57d8d4b67a5100a30c3818c2fb0b04599f0da2de7b"}, + {file = "pyarrow-20.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9b71daf534f4745818f96c214dbc1e6124d7daf059167330b610fc69b6f3d3e3"}, + {file = "pyarrow-20.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e8b88758f9303fa5a83d6c90e176714b2fd3852e776fc2d7e42a22dd6c2fb368"}, + {file = "pyarrow-20.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:30b3051b7975801c1e1d387e17c588d8ab05ced9b1e14eec57915f79869b5031"}, + {file = "pyarrow-20.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ca151afa4f9b7bc45bcc791eb9a89e90a9eb2772767d0b1e5389609c7d03db63"}, + {file = "pyarrow-20.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:4680f01ecd86e0dd63e39eb5cd59ef9ff24a9d166db328679e36c108dc993d4c"}, + {file = "pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f4c8534e2ff059765647aa69b75d6543f9fef59e2cd4c6d18015192565d2b70"}, + {file = "pyarrow-20.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f8a47f4b4ae4c69c4d702cfbdfe4d41e18e5c7ef6f1bb1c50918c1e81c57b"}, + {file = "pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:a1f60dc14658efaa927f8214734f6a01a806d7690be4b3232ba526836d216122"}, + {file = "pyarrow-20.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:204a846dca751428991346976b914d6d2a82ae5b8316a6ed99789ebf976551e6"}, + {file = "pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f3b117b922af5e4c6b9a9115825726cac7d8b1421c37c2b5e24fbacc8930612c"}, + {file = "pyarrow-20.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e724a3fd23ae5b9c010e7be857f4405ed5e679db5c93e66204db1a69f733936a"}, + {file = "pyarrow-20.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:82f1ee5133bd8f49d31be1299dc07f585136679666b502540db854968576faf9"}, + {file = "pyarrow-20.0.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:1bcbe471ef3349be7714261dea28fe280db574f9d0f77eeccc195a2d161fd861"}, + {file = "pyarrow-20.0.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:a18a14baef7d7ae49247e75641fd8bcbb39f44ed49a9fc4ec2f65d5031aa3b96"}, + {file = "pyarrow-20.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb497649e505dc36542d0e68eca1a3c94ecbe9799cb67b578b55f2441a247fbc"}, + {file = "pyarrow-20.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11529a2283cb1f6271d7c23e4a8f9f8b7fd173f7360776b668e509d712a02eec"}, + {file = "pyarrow-20.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fc1499ed3b4b57ee4e090e1cea6eb3584793fe3d1b4297bbf53f09b434991a5"}, + {file = "pyarrow-20.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:db53390eaf8a4dab4dbd6d93c85c5cf002db24902dbff0ca7d988beb5c9dd15b"}, + {file = "pyarrow-20.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:851c6a8260ad387caf82d2bbf54759130534723e37083111d4ed481cb253cc0d"}, + {file = "pyarrow-20.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e22f80b97a271f0a7d9cd07394a7d348f80d3ac63ed7cc38b6d1b696ab3b2619"}, + {file = "pyarrow-20.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:9965a050048ab02409fb7cbbefeedba04d3d67f2cc899eff505cc084345959ca"}, + {file = "pyarrow-20.0.0.tar.gz", hash = "sha256:febc4a913592573c8d5805091a6c2b5064c8bd6e002131f01061797d91c783c1"}, ] [package.extras] @@ -2884,82 +2981,82 @@ test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] [[package]] name = "pycares" -version = "4.5.0" +version = "4.6.1" description = "Python interface for c-ares" optional = false python-versions = ">=3.9" files = [ - {file = "pycares-4.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13a82fad8239d6fbcf916099bee17d8b5666d0ddb77dace431e0f7961c9427ab"}, - {file = "pycares-4.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fefc7bebbe39b2e3b4b9615471233a8f7356b96129a7db9030313a3ae4ecc42d"}, - {file = "pycares-4.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e322e8ce810026f6e0c7c2a254b9ed02191ab8d42fa2ce6808ede1bdccab8e65"}, - {file = "pycares-4.5.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:723ba0803b016294430e40e544503fed9164949b694342c2552ab189e2b688ef"}, - {file = "pycares-4.5.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e48b20b59cdc929cc712a8b22e89c273256e482b49bb8999af98d2c6fc4563c2"}, - {file = "pycares-4.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de6e55bd9af595b112ac6080ac0a0d52b5853d0d8e6d01ac65ff09e51e62490a"}, - {file = "pycares-4.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6f4b9063e3dd70460400367917698f209c10aabb68bf70b09e364895444487d"}, - {file = "pycares-4.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:95522d4840d702fd766439a7c7cd747935aa54cf0b8675e9fadd8414dd9dd0df"}, - {file = "pycares-4.5.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e4709ce4fd9dbee24b1397f71a2adb3267323bb5ad5e7fde3f87873d172dd156"}, - {file = "pycares-4.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8addbf3408af1010f50fd67ef634a6cb239ccb9c534c32a40713f3b8d306a98e"}, - {file = "pycares-4.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d0428ef42fcf575e197047e6a47892404faa34231902a453b3dfed66af4178b3"}, - {file = "pycares-4.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:aed5c2732f3a6bdbbfab202267d37044ca1162f690b9d34b7ece97ba43f27453"}, - {file = "pycares-4.5.0-cp310-cp310-win32.whl", hash = "sha256:b1859ea770a7abec40a6d02b5ab03c2396c4900c01f4e50ddb6c0dca4c2a6a7c"}, - {file = "pycares-4.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:9f87d8da20a3a80ab05fe80c14a62bf078bd726ca6af609edbeb376fb97d50ab"}, - {file = "pycares-4.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5ca7a1dba7b88290710db45012e0903c21c839fa0a2b9ddc100bba8e66bfb251"}, - {file = "pycares-4.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:160e92588cdf1a0fa3a7015f47990b508d50efd9109ea4d719dee31c058f0648"}, - {file = "pycares-4.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f38e45d23660ed1dafdb956fd263ae4735530ef1578aa2bf2caabb94cee4523"}, - {file = "pycares-4.5.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f742acc6d29a99ffc14e3f154b3848ea05c5533b71065e0f0a0fd99c527491b2"}, - {file = "pycares-4.5.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceaf71bcd7b6447705e689b8fee8836c20c6148511a90122981f524a84bfcca9"}, - {file = "pycares-4.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdc3c0be7b5b83e78e28818fecd0405bd401110dd6e2e66f7f10713c1188362c"}, - {file = "pycares-4.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd458ee69800195247aa19b5675c5914cbc091c5a220e4f0e96777a31bb555c1"}, - {file = "pycares-4.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a6649d713df73266708642fc3d04f110c0a66bee510fbce4cc5fed79df42083"}, - {file = "pycares-4.5.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ac57d7bda925c10b997434e7ce30a2c3689c2e96bab9fd0a1165d5577378eecd"}, - {file = "pycares-4.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ba17d8e5eeec4b2e0eb1a6a840bae9e62cd1c1c9cbc8dc9db9d1b9fdf33d0b54"}, - {file = "pycares-4.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9e9b7d1a8de703283e4735c0e532ba4bc600e88de872dcd1a9a4950cf74d9f4f"}, - {file = "pycares-4.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c6922ecbe458c13a4a2c1177bbce38abc44b5f086bc82115a92eab34418915f"}, - {file = "pycares-4.5.0-cp311-cp311-win32.whl", hash = "sha256:1004b8a17614e33410b4b1bb68360977667f1cc9ab2dbcfb27240d6703e4cb6a"}, - {file = "pycares-4.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:2c9c1055c622258a0f315560b2880a372363484b87cbef48af092624804caa72"}, - {file = "pycares-4.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:506efbe5017807747ccd1bdcb3c2f6e64635bc01fee01a50c0b97d649018c162"}, - {file = "pycares-4.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c469ec9fbe0526f45a98f67c1ea55be03abf30809c4f9c9be4bc93fb6806304d"}, - {file = "pycares-4.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597c0950ede240c3a779f023fcf2442207fc11e570d3ca4ccdbb0db5bbaf2588"}, - {file = "pycares-4.5.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9aa0da03c4df6ed0f87dd52a293bd0508734515041cc5be0f85d9edc1814914f"}, - {file = "pycares-4.5.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aea1ebf52767c777d10a1b3d03844b9b05cc892714b3ee177d5d9fbff74fb9fa"}, - {file = "pycares-4.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb20d84269ddffb177b6048e3bc03d0b9ffe17592093d900d5544805958d86b3"}, - {file = "pycares-4.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3125df81b657971ee5c0333f8f560ba0151db1eb7cf04aea7d783bb433b306c1"}, - {file = "pycares-4.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:525c77ea44546c12f379641aee163585d403cf50e29b04a06059d6aac894e956"}, - {file = "pycares-4.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:1fd87cb26b317a9988abfcfa4e4dbc55d5f20177e5979ad4d854468a9246c187"}, - {file = "pycares-4.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a90aecd41188884e57ae32507a2c6b010c60b791a253083761bbb37a488ecaed"}, - {file = "pycares-4.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0d3de65cab653979dcc491e03f596566c9d40346c9deb088e0f9fe70600d8737"}, - {file = "pycares-4.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:27a77b43604b3ba24e4fc49fd3ea59f50f7d89c7255f1f1ea46928b26cccacfa"}, - {file = "pycares-4.5.0-cp312-cp312-win32.whl", hash = "sha256:6028cb8766f0fea1d2caa69fac23621fbe2cff9ce6968374e165737258703a33"}, - {file = "pycares-4.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:2ce10672c4cfd1c5fb6718e8b25f0336ca11c89aab88aa6df53dafc4e41df740"}, - {file = "pycares-4.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:011cd670da7caf55664c944abb71ec39af82b837f8d48da7cf0eec80f5682c4c"}, - {file = "pycares-4.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b5c67930497fb2b1dbcaa85f8c4188fc2cb62e41d787deeed2d33cfe9dd6bf52"}, - {file = "pycares-4.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d435a3b8468c656a7e7180dd7c4794510f6c612c33ad61a0fff6e440621f8b5"}, - {file = "pycares-4.5.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8371f5ee1efb33d6276e275d152c9c5605e5f2e58a9e168519ec1f9e13dd95ae"}, - {file = "pycares-4.5.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76a9096fd5dc49c61c5235ea7032e8b43f4382800d64ca1e0e0cda700c082aa"}, - {file = "pycares-4.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b604af76b57469ff68b44e9e4c857eaee43bc5035f4f183f07f4f7149191fe1b"}, - {file = "pycares-4.5.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c589bd4f9160bfdb2f8080cf564bb120a4312cf091db07fe417f8e58a896a63c"}, - {file = "pycares-4.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:361262805bb09742c364ec0117842043c950339e38561009bcabbb6ac89458ef"}, - {file = "pycares-4.5.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6d2afb3c0776467055bf33db843ef483d25639be0f32e3a13ef5d4dc64098bf5"}, - {file = "pycares-4.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bc7a1d8ed7c7a4de17706a3c89b305b02eb64c778897e6727c043e5b9dd0d853"}, - {file = "pycares-4.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:5703ec878b5c1efacdbf24ceaedfa606112fc67af5564f4db99c2c210f3ffadc"}, - {file = "pycares-4.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d87758e09dbf52c27ed7cf7bc7eaf8b3226217d10c52b03d61a14d59f40fcae1"}, - {file = "pycares-4.5.0-cp313-cp313-win32.whl", hash = "sha256:3316d490b4ce1a69f034881ac1ea7608f5f24ea5293db24ab574ac70b7d7e407"}, - {file = "pycares-4.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:018e700fb0d1a2db5ec96e404ffa85ed97cc96e96d6af0bb9548111e37cf36a3"}, - {file = "pycares-4.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:78c9890d93108c70708babee8a783e6021233f1f0a763d3634add6fd429aae58"}, - {file = "pycares-4.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba69f8123995aa3df99f6ebc726fc6a4b08e467a957b215c0a82749b901d5eed"}, - {file = "pycares-4.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32d33c4ffae31d1b544adebe0b9aee2be1fb18aedd3f4f91e41c495ccbafd6d8"}, - {file = "pycares-4.5.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17a060cfc469828abf7f5945964d505bd8c0a756942fee159538f7885169752e"}, - {file = "pycares-4.5.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c1d0d5e69fa29e41b590a9dd5842454e8f34e2b928c92540aaf87e0161de8120"}, - {file = "pycares-4.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f096699c46f5dde2c7a8d91501a36d2d58500f4d63682e2ec14a0fed7cca6402"}, - {file = "pycares-4.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:429fe2065581a64a5f024f507b5f679bf37ea0ed39c3ba6289dba907e1c8a8f4"}, - {file = "pycares-4.5.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9ea2f6d48e64b413b97b41b47392087b452af9bf9f9d4d6d05305a159f45909f"}, - {file = "pycares-4.5.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:96d3aecd747a3fcd1e12c1ea1481b0813b4e0e80d40f314db7a86dda5bb1bd94"}, - {file = "pycares-4.5.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:32919f6eda7f5ea4df3e64149fc5792b0d455277d23d6d0fc365142062f35d80"}, - {file = "pycares-4.5.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:37add862461f9a3fc7ee4dd8b68465812b39456e21cebd5a33c414131ac05060"}, - {file = "pycares-4.5.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ed1d050d2c6d74a77c1b6c51fd99426cc000b4202a50d28d6ca75f7433099a6b"}, - {file = "pycares-4.5.0-cp39-cp39-win32.whl", hash = "sha256:887ac451ffe6e39ee46d3d0989c7bb829933d77e1dad5776511d825fc7e6a25b"}, - {file = "pycares-4.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:5c8b87c05740595bc8051dc98e51f022f003750e7da90f62f7a9fd50e330b196"}, - {file = "pycares-4.5.0.tar.gz", hash = "sha256:025b6c2ffea4e9fb8f9a097381c2fecb24aff23fbd6906e70da22ec9ba60e19d"}, + {file = "pycares-4.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ad45460b195a11db792bf9f43242ed35bce9b7b7f7bfd943d1ae7a320daf32ed"}, + {file = "pycares-4.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f4b45537f186c8c09fc4f5452e009f87113dc772ae08c9aa72ac29afa5e8e1a"}, + {file = "pycares-4.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0dab444430c7d8b98fa7515aff280c5723bd94f0791e268437952fa22fd8d714"}, + {file = "pycares-4.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f65b584d1fd70050735cfde61220935d734f39934224ac8daef0d2a9c4bd597"}, + {file = "pycares-4.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cf0f5f3fdd2f170c394842a1001538cf36289166f0e48321810f729517877a4"}, + {file = "pycares-4.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9041641d154ea9f6253fd9cfaa8d66be887631999377da0ee9d8ba51bfff8b6"}, + {file = "pycares-4.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48f127ee18a0bb6655291d5896643ac44be2566374a1536a67d41e2b7ae63c47"}, + {file = "pycares-4.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a1b630f1bdd20daf771c481394561a0dc1d1e7e5cc935c2d241fb74cb41ab03"}, + {file = "pycares-4.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a883fae7e74081bca902217bb5de9879cd764c49abfb9a4ba4ee2a4ec31cb4de"}, + {file = "pycares-4.6.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:cb7295968ca4eaba2af3de1d664e9541b8c0e6808110285271bf90f3df720498"}, + {file = "pycares-4.6.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9bae8ff8c7eff442b43dea301e5478813848b547436b02a2aab93a3d61610101"}, + {file = "pycares-4.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:767fe9aab135284cd8e8abe91a220b4fe552d6a8b2bbff247248d1ad8a21a7f5"}, + {file = "pycares-4.6.1-cp310-cp310-win32.whl", hash = "sha256:39275e526274aea27f50c7695f7c105c49cdff282a36ff4c0566bf396b52d4d6"}, + {file = "pycares-4.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:786c18cf61fbb2826ff6329537d78e7c7f04b323c8ff0c9035b2800bde502391"}, + {file = "pycares-4.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6502aebee73bc0b2ab2a9d0110acafdd4b44a134779607b09d03aacbf08c593b"}, + {file = "pycares-4.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bff55383fcec45d765ebf2ac0c6662026ec836f378b0b1e5958f4cae882dfac3"}, + {file = "pycares-4.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f58007727536c49087639a86f02a2bc15193d5a2e871dacc17985150e17d4c"}, + {file = "pycares-4.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb926209a50854f556aa80a48d16d31bb96e2979af52fc7e4ba8aa92a031cd56"}, + {file = "pycares-4.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c4562eb5c22a7b6a1ec1a741c9b760d7922792c865dea47952f998c99a4d4770"}, + {file = "pycares-4.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf56c63643e397184aefd0eddc30f99bcc0baea123cb0fd436c602bac854ec05"}, + {file = "pycares-4.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:682a8580a5ff05b7bd0eeb4e27a5d8b3d441fde072119507eb42a514b5ddb91c"}, + {file = "pycares-4.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7249ef4707757ee68c86b663f9af1525a5f7d56f1de2a4f962d69b523e94f2a9"}, + {file = "pycares-4.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:95a65cd23ab2bce88f1ef92a3e0011578a1873c455b66c2b4dab3d652a2199e3"}, + {file = "pycares-4.6.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:5acb47ecdc4b228c35d01264b2ca04c89c0202cf60823247e7f4dce1821dc7f0"}, + {file = "pycares-4.6.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f9dd256776d780ebd84a7499d6e882cb26a5196b9963d6fb836067184420ca9d"}, + {file = "pycares-4.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9c2c3f714376b90b154d6b443e57930b47e4a5ddb7b5da8a740d70bfbcf8768"}, + {file = "pycares-4.6.1-cp311-cp311-win32.whl", hash = "sha256:3cd5904843fd4f6e4fcdbcd95f6d38537f553dc8697119ebd909e1d7f8c82d8a"}, + {file = "pycares-4.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:d4056934bb9fd47385a37591138b8ccdce9fc1abb0b41a348d9d0707a6de48d8"}, + {file = "pycares-4.6.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:669296f42ca7689b2e611a7b35951e2dd592be52482c3c935052c16cda45e7f2"}, + {file = "pycares-4.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ea54a668d87f471655a6603df82ef90a4e18ee14898e10e4763e843bae5156b0"}, + {file = "pycares-4.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2074a7151462d2f189f04eed422a981a9a4bbcfeed00acd4a8f147c71f8e231b"}, + {file = "pycares-4.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5052abb22decc53a5bca4a289833b64f457a8f02aafe69c2c7a2cab3229618fb"}, + {file = "pycares-4.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cba2a0efae21ae1d0110ba287388db0f458fbc8dd7938e81700ac3c17ddd82e"}, + {file = "pycares-4.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21bf51a851895f3ca2df7a48b17869f1f51bebb5cae9d7cd07feb2ab4ccdf32b"}, + {file = "pycares-4.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb0b0c2de88d2f00e21afb8b6184a44439f36a596c522d6224f1bcceb8f74a6f"}, + {file = "pycares-4.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e08dd3cd9f1b8cc211c92789f1bc820a73959656aaed107bcf2dac6a7c117bed"}, + {file = "pycares-4.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:19fb1154b352b684b831660ba05da7b438afb97539d74240d63daeb9b545ac00"}, + {file = "pycares-4.6.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:92ae8169d84cbaa076429fa6c96f058df6cf77511484b8befeb3bb0f51c67c37"}, + {file = "pycares-4.6.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:974146f723914ececb5cb3bb2fe5426cda4ec6674eef01e259081cf52cb9da1c"}, + {file = "pycares-4.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b6bf4c1e676e98a1d756be24876e8bda1a127df873328e65438d3ec0b568c717"}, + {file = "pycares-4.6.1-cp312-cp312-win32.whl", hash = "sha256:f523a7474d07dd95484bccab539ca72d8cbdbe3d874e62005115b725a9dab681"}, + {file = "pycares-4.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:79f9350a69be408ba77dcdde9d7a6c5467ccd1d497eeed19131c69420e8f2a28"}, + {file = "pycares-4.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:61142ed827914a0e5fa2a0376b37eb1bd8496d9dd071f0b5a2780f6240b68b36"}, + {file = "pycares-4.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9ab052ea977da904703bc5804846d48937c885b8272389c10a9d5b3cb4c4489c"}, + {file = "pycares-4.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20e46a3c1087c90dd803b717d5e5e5ff9bede5f2df9c6c66e1dc9a0f622d99b1"}, + {file = "pycares-4.6.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6449319fd267e3ddd0bc47a5f28b219857d9e591ec04684dbb2b84a0a42cd0c4"}, + {file = "pycares-4.6.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87af256798012466f4c586720f47ae4bde19a527e55967db67187ea1d6f5c5b3"}, + {file = "pycares-4.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39a79ff5ffcb92c2400b01f121308c17688563712b0c1aafa946653a76cf70c7"}, + {file = "pycares-4.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:85a27a8dfad64730ecf8fc0b76c4188b3dac1d75406b9cfff995f98bddac752e"}, + {file = "pycares-4.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1e6ee97556c8e99050eb84970863ff8b464b255261b3dfd8b7b0fa85815ea82a"}, + {file = "pycares-4.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8d5746aa978d957e4ec6e8026d8d6ca87c6b9fa1872d3f645ea399cb1548ee9b"}, + {file = "pycares-4.6.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:8709f47cd0930298b0916755cb0b47edd70e3f88788e68bb2c560e8fdad515f4"}, + {file = "pycares-4.6.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:1df9d1df0497801cce68a632b463ef7dff3e67c119f95f56725e229a869f8550"}, + {file = "pycares-4.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3926c585d21bb1ea70020a933d7de4e1528d23c41f3054a04acf970289cb8d22"}, + {file = "pycares-4.6.1-cp313-cp313-win32.whl", hash = "sha256:e375e4624866cfee0289eef4f5ffbed671be28c54b3d00120e69e477e6a515c8"}, + {file = "pycares-4.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:6d7fec6f2bad3961ad0a376b24bea9e0ba8b61606067f112af7fda48e0670281"}, + {file = "pycares-4.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9aeaaa644d6cc2a1b4a776ea40ef968e9603ef036ee70b6540f19fc148d34827"}, + {file = "pycares-4.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:16aa1ae5ce6adcf466e379978fc3a8cb904793d45f97b486029d14d16fc00063"}, + {file = "pycares-4.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5cb4f12385cbb281c8b59593984cb99c7c8859ba4e66a29b2ceff20bafe7a3b"}, + {file = "pycares-4.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:848e7a3c27380543d468ef3cc6ad62b484c3ba4743e8d90e45e6d1103b364790"}, + {file = "pycares-4.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c43fca53697a8f1c59b90de2fae94c9086c2482ebb9575148fe58b986464512"}, + {file = "pycares-4.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfe2d03a927d8362eda162f1e39e1ff86d60d38e4ffc6d2bd187af25f8b93613"}, + {file = "pycares-4.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63ca7d92857ef668d55d8fba05e36d7631e3102de7740240a7a9659525bd725a"}, + {file = "pycares-4.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:eefe899fbc2bc96972caea985d01f6f3caf382c06efa64d64ee8f3d66b8aaea0"}, + {file = "pycares-4.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:7de29719e0e22672a5fc1f0f0920dfaca2f9e6401fbd53cdfb03e2d6d7f168f6"}, + {file = "pycares-4.6.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:90d127a6efd59f0c0d5cd43dfd8e44dea091579043c1d3d168071c8016aad82b"}, + {file = "pycares-4.6.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1f7ff8e5395aaac8ec5e53c3ea44557d8b5ebf165f9320b667e7e1a371a3df2d"}, + {file = "pycares-4.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c9052cf9bbb9ef1b277171084f0bedf7b15c5875013c167c481b5adfffd9430b"}, + {file = "pycares-4.6.1-cp39-cp39-win32.whl", hash = "sha256:d7c5b982e00e361e8efaed89e1ffbc7991c4eab47c8bac8ea282ed8a0a2b8e3a"}, + {file = "pycares-4.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a82cc9304cc675f3aad938d5c519f3594254561edbfaf6821085cfb48a319a"}, + {file = "pycares-4.6.1.tar.gz", hash = "sha256:8a1d981206a16240eedc79b51af3293575715d4b0b971f4eb47e24839d5ab440"}, ] [package.dependencies] @@ -3051,13 +3148,13 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.0.1" +version = "1.1.0" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, - {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, + {file = "python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d"}, + {file = "python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5"}, ] [package.extras] @@ -3079,13 +3176,13 @@ dev = ["backports.zoneinfo", "black", "build", "freezegun", "mdx_truly_sane_list [[package]] name = "pytz" -version = "2025.1" +version = "2025.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"}, - {file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"}, + {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, + {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, ] [[package]] @@ -3193,104 +3290,104 @@ files = [ [[package]] name = "pyzmq" -version = "26.3.0" +version = "26.4.0" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.8" files = [ - {file = "pyzmq-26.3.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1586944f4736515af5c6d3a5b150c7e8ca2a2d6e46b23057320584d6f2438f4a"}, - {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa7efc695d1fc9f72d91bf9b6c6fe2d7e1b4193836ec530a98faf7d7a7577a58"}, - {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd84441e4021cec6e4dd040550386cd9c9ea1d9418ea1a8002dbb7b576026b2b"}, - {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9176856f36c34a8aa5c0b35ddf52a5d5cd8abeece57c2cd904cfddae3fd9acd3"}, - {file = "pyzmq-26.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:49334faa749d55b77f084389a80654bf2e68ab5191c0235066f0140c1b670d64"}, - {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fd30fc80fe96efb06bea21667c5793bbd65c0dc793187feb39b8f96990680b00"}, - {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:b2eddfbbfb473a62c3a251bb737a6d58d91907f6e1d95791431ebe556f47d916"}, - {file = "pyzmq-26.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:70b3acb9ad729a53d4e751dace35404a024f188aad406013454216aba5485b4e"}, - {file = "pyzmq-26.3.0-cp310-cp310-win32.whl", hash = "sha256:c1bd75d692cd7c6d862a98013bfdf06702783b75cffbf5dae06d718fecefe8f2"}, - {file = "pyzmq-26.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:d7165bcda0dbf203e5ad04d79955d223d84b2263df4db92f525ba370b03a12ab"}, - {file = "pyzmq-26.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:e34a63f71d2ecffb3c643909ad2d488251afeb5ef3635602b3448e609611a7ed"}, - {file = "pyzmq-26.3.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:2833602d9d42c94b9d0d2a44d2b382d3d3a4485be018ba19dddc401a464c617a"}, - {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8270d104ec7caa0bdac246d31d48d94472033ceab5ba142881704350b28159c"}, - {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c208a977843d18d3bd185f323e4eaa912eb4869cb230947dc6edd8a27a4e558a"}, - {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eddc2be28a379c218e0d92e4a432805dcb0ca5870156a90b54c03cd9799f9f8a"}, - {file = "pyzmq-26.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:c0b519fa2159c42272f8a244354a0e110d65175647e5185b04008ec00df9f079"}, - {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1595533de3a80bf8363372c20bafa963ec4bf9f2b8f539b1d9a5017f430b84c9"}, - {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bbef99eb8d18ba9a40f00e8836b8040cdcf0f2fa649684cf7a66339599919d21"}, - {file = "pyzmq-26.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:979486d444ca3c469cd1c7f6a619ce48ff08b3b595d451937db543754bfacb65"}, - {file = "pyzmq-26.3.0-cp311-cp311-win32.whl", hash = "sha256:4b127cfe10b4c56e4285b69fd4b38ea1d368099ea4273d8fb349163fce3cd598"}, - {file = "pyzmq-26.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:cf736cc1298ef15280d9fcf7a25c09b05af016656856dc6fe5626fd8912658dd"}, - {file = "pyzmq-26.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:2dc46ec09f5d36f606ac8393303149e69d17121beee13c8dac25e2a2078e31c4"}, - {file = "pyzmq-26.3.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:c80653332c6136da7f4d4e143975e74ac0fa14f851f716d90583bc19e8945cea"}, - {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e317ee1d4528a03506cb1c282cd9db73660a35b3564096de37de7350e7d87a7"}, - {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:943a22ebb3daacb45f76a9bcca9a7b74e7d94608c0c0505da30af900b998ca8d"}, - {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc9e71490d989144981ea21ef4fdfaa7b6aa84aff9632d91c736441ce2f6b00"}, - {file = "pyzmq-26.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e281a8071a06888575a4eb523c4deeefdcd2f5fe4a2d47e02ac8bf3a5b49f695"}, - {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be77efd735bb1064605be8dec6e721141c1421ef0b115ef54e493a64e50e9a52"}, - {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a4ac2ffa34f1212dd586af90f4ba894e424f0cabb3a49cdcff944925640f6ac"}, - {file = "pyzmq-26.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ba698c7c252af83b6bba9775035263f0df5f807f0404019916d4b71af8161f66"}, - {file = "pyzmq-26.3.0-cp312-cp312-win32.whl", hash = "sha256:214038aaa88e801e54c2ef0cfdb2e6df27eb05f67b477380a452b595c5ecfa37"}, - {file = "pyzmq-26.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:bad7fe0372e505442482ca3ccbc0d6f38dae81b1650f57a0aa6bbee18e7df495"}, - {file = "pyzmq-26.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:b7b578d604e79e99aa39495becea013fd043fa9f36e4b490efa951f3d847a24d"}, - {file = "pyzmq-26.3.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:fa85953df84beb7b8b73cb3ec3f5d92b62687a09a8e71525c6734e020edf56fd"}, - {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:209d09f0ab6ddbcebe64630d1e6ca940687e736f443c265ae15bc4bfad833597"}, - {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d35cc1086f1d4f907df85c6cceb2245cb39a04f69c3f375993363216134d76d4"}, - {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b380e9087078ba91e45fb18cdd0c25275ffaa045cf63c947be0ddae6186bc9d9"}, - {file = "pyzmq-26.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6d64e74143587efe7c9522bb74d1448128fdf9897cc9b6d8b9927490922fd558"}, - {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:efba4f53ac7752eea6d8ca38a4ddac579e6e742fba78d1e99c12c95cd2acfc64"}, - {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9b0137a1c40da3b7989839f9b78a44de642cdd1ce20dcef341de174c8d04aa53"}, - {file = "pyzmq-26.3.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a995404bd3982c089e57b428c74edd5bfc3b0616b3dbcd6a8e270f1ee2110f36"}, - {file = "pyzmq-26.3.0-cp313-cp313-win32.whl", hash = "sha256:240b1634b9e530ef6a277d95cbca1a6922f44dfddc5f0a3cd6c722a8de867f14"}, - {file = "pyzmq-26.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:fe67291775ea4c2883764ba467eb389c29c308c56b86c1e19e49c9e1ed0cbeca"}, - {file = "pyzmq-26.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:73ca9ae9a9011b714cf7650450cd9c8b61a135180b708904f1f0a05004543dce"}, - {file = "pyzmq-26.3.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:fea7efbd7e49af9d7e5ed6c506dfc7de3d1a628790bd3a35fd0e3c904dc7d464"}, - {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4430c7cba23bb0e2ee203eee7851c1654167d956fc6d4b3a87909ccaf3c5825"}, - {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:016d89bee8c7d566fad75516b4e53ec7c81018c062d4c51cd061badf9539be52"}, - {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04bfe59852d76d56736bfd10ac1d49d421ab8ed11030b4a0332900691507f557"}, - {file = "pyzmq-26.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:1fe05bd0d633a0f672bb28cb8b4743358d196792e1caf04973b7898a0d70b046"}, - {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:2aa1a9f236d5b835fb8642f27de95f9edcfd276c4bc1b6ffc84f27c6fb2e2981"}, - {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:21399b31753bf321043ea60c360ed5052cc7be20739785b1dff1820f819e35b3"}, - {file = "pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d015efcd96aca8882057e7e6f06224f79eecd22cad193d3e6a0a91ec67590d1f"}, - {file = "pyzmq-26.3.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:18183cc3851b995fdc7e5f03d03b8a4e1b12b0f79dff1ec1da75069af6357a05"}, - {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:da87e977f92d930a3683e10ba2b38bcc59adfc25896827e0b9d78b208b7757a6"}, - {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cf6db401f4957afbf372a4730c6d5b2a234393af723983cbf4bcd13d54c71e1a"}, - {file = "pyzmq-26.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03caa2ffd64252122139d50ec92987f89616b9b92c9ba72920b40e92709d5e26"}, - {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fbf206e5329e20937fa19bd41cf3af06d5967f8f7e86b59d783b26b40ced755c"}, - {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6fb539a6382a048308b409d8c66d79bf636eda1b24f70c78f2a1fd16e92b037b"}, - {file = "pyzmq-26.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7897b8c8bbbb2bd8cad887bffcb07aede71ef1e45383bd4d6ac049bf0af312a4"}, - {file = "pyzmq-26.3.0-cp38-cp38-win32.whl", hash = "sha256:91dead2daca698ae52ce70ee2adbb94ddd9b5f96877565fd40aa4efd18ecc6a3"}, - {file = "pyzmq-26.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:8c088e009a6d6b9f563336adb906e3a8d3fd64db129acc8d8fd0e9fe22b2dac8"}, - {file = "pyzmq-26.3.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:2eaed0d911fb3280981d5495978152fab6afd9fe217fd16f411523665089cef1"}, - {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7998b60ef1c105846fb3bfca494769fde3bba6160902e7cd27a8df8257890ee9"}, - {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:96c0006a8d1d00e46cb44c8e8d7316d4a232f3d8f2ed43179d4578dbcb0829b6"}, - {file = "pyzmq-26.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e17cc198dc50a25a0f245e6b1e56f692df2acec3ccae82d1f60c34bfb72bbec"}, - {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:92a30840f4f2a31f7049d0a7de5fc69dd03b19bd5d8e7fed8d0bde49ce49b589"}, - {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f52eba83272a26b444f4b8fc79f2e2c83f91d706d693836c9f7ccb16e6713c31"}, - {file = "pyzmq-26.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:952085a09ff32115794629ba47f8940896d7842afdef1283332109d38222479d"}, - {file = "pyzmq-26.3.0-cp39-cp39-win32.whl", hash = "sha256:0240289e33e3fbae44a5db73e54e955399179332a6b1d47c764a4983ec1524c3"}, - {file = "pyzmq-26.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:b2db7c82f08b8ce44c0b9d1153ce63907491972a7581e8b6adea71817f119df8"}, - {file = "pyzmq-26.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:2d3459b6311463c96abcb97808ee0a1abb0d932833edb6aa81c30d622fd4a12d"}, - {file = "pyzmq-26.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad03f4252d9041b0635c37528dfa3f44b39f46024ae28c8567f7423676ee409b"}, - {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f3dfb68cf7bf4cfdf34283a75848e077c5defa4907506327282afe92780084d"}, - {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:356ec0e39c5a9cda872b65aca1fd8a5d296ffdadf8e2442b70ff32e73ef597b1"}, - {file = "pyzmq-26.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:749d671b0eec8e738bbf0b361168369d8c682b94fcd458c20741dc4d69ef5278"}, - {file = "pyzmq-26.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f950f17ae608e0786298340163cac25a4c5543ef25362dd5ddb6dcb10b547be9"}, - {file = "pyzmq-26.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4fc9903a73c25be9d5fe45c87faababcf3879445efa16140146b08fccfac017"}, - {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c15b69af22030960ac63567e98ad8221cddf5d720d9cf03d85021dfd452324ef"}, - {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2cf9ab0dff4dbaa2e893eb608373c97eb908e53b7d9793ad00ccbd082c0ee12f"}, - {file = "pyzmq-26.3.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ec332675f6a138db57aad93ae6387953763f85419bdbd18e914cb279ee1c451"}, - {file = "pyzmq-26.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:eb96568a22fe070590942cd4780950e2172e00fb033a8b76e47692583b1bd97c"}, - {file = "pyzmq-26.3.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:009a38241c76184cb004c869e82a99f0aee32eda412c1eb44df5820324a01d25"}, - {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c22a12713707467abedc6d75529dd365180c4c2a1511268972c6e1d472bd63e"}, - {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1614fcd116275d24f2346ffca4047a741c546ad9d561cbf7813f11226ca4ed2c"}, - {file = "pyzmq-26.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e2cafe7e9c7fed690e8ecf65af119f9c482923b5075a78f6f7629c63e1b4b1d"}, - {file = "pyzmq-26.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:14e0b81753424bd374075df6cc30b87f2c99e5f022501d97eff66544ca578941"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:21c6ddb98557a77cfe3366af0c5600fb222a1b2de5f90d9cd052b324e0c295e8"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fc81d5d60c9d40e692de14b8d884d43cf67562402b931681f0ccb3ce6b19875"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52b064fafef772d0f5dbf52d4c39f092be7bc62d9a602fe6e82082e001326de3"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b72206eb041f780451c61e1e89dbc3705f3d66aaaa14ee320d4f55864b13358a"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ab78dc21c7b1e13053086bcf0b4246440b43b5409904b73bfd1156654ece8a1"}, - {file = "pyzmq-26.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0b42403ad7d1194dca9574cd3c56691c345f4601fa2d0a33434f35142baec7ac"}, - {file = "pyzmq-26.3.0.tar.gz", hash = "sha256:f1cd68b8236faab78138a8fc703f7ca0ad431b17a3fcac696358600d4e6243b3"}, + {file = "pyzmq-26.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:0329bdf83e170ac133f44a233fc651f6ed66ef8e66693b5af7d54f45d1ef5918"}, + {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:398a825d2dea96227cf6460ce0a174cf7657d6f6827807d4d1ae9d0f9ae64315"}, + {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d52d62edc96787f5c1dfa6c6ccff9b581cfae5a70d94ec4c8da157656c73b5b"}, + {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1410c3a3705db68d11eb2424d75894d41cff2f64d948ffe245dd97a9debfebf4"}, + {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:7dacb06a9c83b007cc01e8e5277f94c95c453c5851aac5e83efe93e72226353f"}, + {file = "pyzmq-26.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6bab961c8c9b3a4dc94d26e9b2cdf84de9918931d01d6ff38c721a83ab3c0ef5"}, + {file = "pyzmq-26.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a5c09413b924d96af2aa8b57e76b9b0058284d60e2fc3730ce0f979031d162a"}, + {file = "pyzmq-26.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7d489ac234d38e57f458fdbd12a996bfe990ac028feaf6f3c1e81ff766513d3b"}, + {file = "pyzmq-26.4.0-cp310-cp310-win32.whl", hash = "sha256:dea1c8db78fb1b4b7dc9f8e213d0af3fc8ecd2c51a1d5a3ca1cde1bda034a980"}, + {file = "pyzmq-26.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:fa59e1f5a224b5e04dc6c101d7186058efa68288c2d714aa12d27603ae93318b"}, + {file = "pyzmq-26.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:a651fe2f447672f4a815e22e74630b6b1ec3a1ab670c95e5e5e28dcd4e69bbb5"}, + {file = "pyzmq-26.4.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:bfcf82644c9b45ddd7cd2a041f3ff8dce4a0904429b74d73a439e8cab1bd9e54"}, + {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9bcae3979b2654d5289d3490742378b2f3ce804b0b5fd42036074e2bf35b030"}, + {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccdff8ac4246b6fb60dcf3982dfaeeff5dd04f36051fe0632748fc0aa0679c01"}, + {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4550af385b442dc2d55ab7717837812799d3674cb12f9a3aa897611839c18e9e"}, + {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f9f7ffe9db1187a253fca95191854b3fda24696f086e8789d1d449308a34b88"}, + {file = "pyzmq-26.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3709c9ff7ba61589b7372923fd82b99a81932b592a5c7f1a24147c91da9a68d6"}, + {file = "pyzmq-26.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f8f3c30fb2d26ae5ce36b59768ba60fb72507ea9efc72f8f69fa088450cff1df"}, + {file = "pyzmq-26.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:382a4a48c8080e273427fc692037e3f7d2851959ffe40864f2db32646eeb3cef"}, + {file = "pyzmq-26.4.0-cp311-cp311-win32.whl", hash = "sha256:d56aad0517d4c09e3b4f15adebba8f6372c5102c27742a5bdbfc74a7dceb8fca"}, + {file = "pyzmq-26.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:963977ac8baed7058c1e126014f3fe58b3773f45c78cce7af5c26c09b6823896"}, + {file = "pyzmq-26.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0c8e8cadc81e44cc5088fcd53b9b3b4ce9344815f6c4a03aec653509296fae3"}, + {file = "pyzmq-26.4.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:5227cb8da4b6f68acfd48d20c588197fd67745c278827d5238c707daf579227b"}, + {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1c07a7fa7f7ba86554a2b1bef198c9fed570c08ee062fd2fd6a4dcacd45f905"}, + {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae775fa83f52f52de73183f7ef5395186f7105d5ed65b1ae65ba27cb1260de2b"}, + {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66c760d0226ebd52f1e6b644a9e839b5db1e107a23f2fcd46ec0569a4fdd4e63"}, + {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ef8c6ecc1d520debc147173eaa3765d53f06cd8dbe7bd377064cdbc53ab456f5"}, + {file = "pyzmq-26.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3150ef4084e163dec29ae667b10d96aad309b668fac6810c9e8c27cf543d6e0b"}, + {file = "pyzmq-26.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4448c9e55bf8329fa1dcedd32f661bf611214fa70c8e02fee4347bc589d39a84"}, + {file = "pyzmq-26.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e07dde3647afb084d985310d067a3efa6efad0621ee10826f2cb2f9a31b89d2f"}, + {file = "pyzmq-26.4.0-cp312-cp312-win32.whl", hash = "sha256:ba034a32ecf9af72adfa5ee383ad0fd4f4e38cdb62b13624278ef768fe5b5b44"}, + {file = "pyzmq-26.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:056a97aab4064f526ecb32f4343917a4022a5d9efb6b9df990ff72e1879e40be"}, + {file = "pyzmq-26.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:2f23c750e485ce1eb639dbd576d27d168595908aa2d60b149e2d9e34c9df40e0"}, + {file = "pyzmq-26.4.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:c43fac689880f5174d6fc864857d1247fe5cfa22b09ed058a344ca92bf5301e3"}, + {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:902aca7eba477657c5fb81c808318460328758e8367ecdd1964b6330c73cae43"}, + {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5e48a830bfd152fe17fbdeaf99ac5271aa4122521bf0d275b6b24e52ef35eb6"}, + {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31be2b6de98c824c06f5574331f805707c667dc8f60cb18580b7de078479891e"}, + {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6332452034be001bbf3206ac59c0d2a7713de5f25bb38b06519fc6967b7cf771"}, + {file = "pyzmq-26.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:da8c0f5dd352136853e6a09b1b986ee5278dfddfebd30515e16eae425c872b30"}, + {file = "pyzmq-26.4.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f4ccc1a0a2c9806dda2a2dd118a3b7b681e448f3bb354056cad44a65169f6d86"}, + {file = "pyzmq-26.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c0b5fceadbab461578daf8d1dcc918ebe7ddd2952f748cf30c7cf2de5d51101"}, + {file = "pyzmq-26.4.0-cp313-cp313-win32.whl", hash = "sha256:28e2b0ff5ba4b3dd11062d905682bad33385cfa3cc03e81abd7f0822263e6637"}, + {file = "pyzmq-26.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:23ecc9d241004c10e8b4f49d12ac064cd7000e1643343944a10df98e57bc544b"}, + {file = "pyzmq-26.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:1edb0385c7f025045d6e0f759d4d3afe43c17a3d898914ec6582e6f464203c08"}, + {file = "pyzmq-26.4.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:93a29e882b2ba1db86ba5dd5e88e18e0ac6b627026c5cfbec9983422011b82d4"}, + {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45684f276f57110bb89e4300c00f1233ca631f08f5f42528a5c408a79efc4a"}, + {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72073e75260cb301aad4258ad6150fa7f57c719b3f498cb91e31df16784d89b"}, + {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be37e24b13026cfedd233bcbbccd8c0bcd2fdd186216094d095f60076201538d"}, + {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:237b283044934d26f1eeff4075f751b05d2f3ed42a257fc44386d00df6a270cf"}, + {file = "pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:b30f862f6768b17040929a68432c8a8be77780317f45a353cb17e423127d250c"}, + {file = "pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:c80fcd3504232f13617c6ab501124d373e4895424e65de8b72042333316f64a8"}, + {file = "pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:26a2a7451606b87f67cdeca2c2789d86f605da08b4bd616b1a9981605ca3a364"}, + {file = "pyzmq-26.4.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:831cc53bf6068d46d942af52fa8b0b9d128fb39bcf1f80d468dc9a3ae1da5bfb"}, + {file = "pyzmq-26.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:51d18be6193c25bd229524cfac21e39887c8d5e0217b1857998dfbef57c070a4"}, + {file = "pyzmq-26.4.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:445c97854204119ae2232503585ebb4fa7517142f71092cb129e5ee547957a1f"}, + {file = "pyzmq-26.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:807b8f4ad3e6084412c0f3df0613269f552110fa6fb91743e3e306223dbf11a6"}, + {file = "pyzmq-26.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c01d109dd675ac47fa15c0a79d256878d898f90bc10589f808b62d021d2e653c"}, + {file = "pyzmq-26.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0a294026e28679a8dd64c922e59411cb586dad307661b4d8a5c49e7bbca37621"}, + {file = "pyzmq-26.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:22c8dd677274af8dfb1efd05006d6f68fb2f054b17066e308ae20cb3f61028cf"}, + {file = "pyzmq-26.4.0-cp38-cp38-win32.whl", hash = "sha256:14fc678b696bc42c14e2d7f86ac4e97889d5e6b94d366ebcb637a768d2ad01af"}, + {file = "pyzmq-26.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d1ef0a536662bbbdc8525f7e2ef19e74123ec9c4578e0582ecd41aedc414a169"}, + {file = "pyzmq-26.4.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:a88643de8abd000ce99ca72056a1a2ae15881ee365ecb24dd1d9111e43d57842"}, + {file = "pyzmq-26.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a744ce209ecb557406fb928f3c8c55ce79b16c3eeb682da38ef5059a9af0848"}, + {file = "pyzmq-26.4.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9434540f333332224ecb02ee6278b6c6f11ea1266b48526e73c903119b2f420f"}, + {file = "pyzmq-26.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6c6f0a23e55cd38d27d4c89add963294ea091ebcb104d7fdab0f093bc5abb1c"}, + {file = "pyzmq-26.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6145df55dc2309f6ef72d70576dcd5aabb0fd373311613fe85a5e547c722b780"}, + {file = "pyzmq-26.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2ea81823840ef8c56e5d2f9918e4d571236294fea4d1842b302aebffb9e40997"}, + {file = "pyzmq-26.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc2abc385dc37835445abe206524fbc0c9e3fce87631dfaa90918a1ba8f425eb"}, + {file = "pyzmq-26.4.0-cp39-cp39-win32.whl", hash = "sha256:41a2508fe7bed4c76b4cf55aacfb8733926f59d440d9ae2b81ee8220633b4d12"}, + {file = "pyzmq-26.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:d4000e8255d6cbce38982e5622ebb90823f3409b7ffe8aeae4337ef7d6d2612a"}, + {file = "pyzmq-26.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f6919d9c120488246bdc2a2f96662fa80d67b35bd6d66218f457e722b3ff64"}, + {file = "pyzmq-26.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:98d948288ce893a2edc5ec3c438fe8de2daa5bbbd6e2e865ec5f966e237084ba"}, + {file = "pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f34f5c9e0203ece706a1003f1492a56c06c0632d86cb77bcfe77b56aacf27b"}, + {file = "pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80c9b48aef586ff8b698359ce22f9508937c799cc1d2c9c2f7c95996f2300c94"}, + {file = "pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f2a5b74009fd50b53b26f65daff23e9853e79aa86e0aa08a53a7628d92d44a"}, + {file = "pyzmq-26.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:61c5f93d7622d84cb3092d7f6398ffc77654c346545313a3737e266fc11a3beb"}, + {file = "pyzmq-26.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4478b14cb54a805088299c25a79f27eaf530564a7a4f72bf432a040042b554eb"}, + {file = "pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a28ac29c60e4ba84b5f58605ace8ad495414a724fe7aceb7cf06cd0598d04e1"}, + {file = "pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43b03c1ceea27c6520124f4fb2ba9c647409b9abdf9a62388117148a90419494"}, + {file = "pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7731abd23a782851426d4e37deb2057bf9410848a4459b5ede4fe89342e687a9"}, + {file = "pyzmq-26.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a222ad02fbe80166b0526c038776e8042cd4e5f0dec1489a006a1df47e9040e0"}, + {file = "pyzmq-26.4.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:91c3ffaea475ec8bb1a32d77ebc441dcdd13cd3c4c284a6672b92a0f5ade1917"}, + {file = "pyzmq-26.4.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d9a78a52668bf5c9e7b0da36aa5760a9fc3680144e1445d68e98df78a25082ed"}, + {file = "pyzmq-26.4.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b70cab356ff8c860118b89dc86cd910c73ce2127eb986dada4fbac399ef644cf"}, + {file = "pyzmq-26.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acae207d4387780838192326b32d373bb286da0b299e733860e96f80728eb0af"}, + {file = "pyzmq-26.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f928eafd15794aa4be75463d537348b35503c1e014c5b663f206504ec1a90fe4"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:552b0d2e39987733e1e9e948a0ced6ff75e0ea39ab1a1db2fc36eb60fd8760db"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd670a8aa843f2ee637039bbd412e0d7294a5e588e1ecc9ad98b0cdc050259a4"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d367b7b775a0e1e54a59a2ba3ed4d5e0a31566af97cc9154e34262777dab95ed"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112af16c406e4a93df2caef49f884f4c2bb2b558b0b5577ef0b2465d15c1abc"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c76c298683f82669cab0b6da59071f55238c039738297c69f187a542c6d40099"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:49b6ca2e625b46f499fb081aaf7819a177f41eeb555acb05758aa97f4f95d147"}, + {file = "pyzmq-26.4.0.tar.gz", hash = "sha256:4bd13f85f80962f91a651a7356fe0472791a5f7a92f227822b5acf44795c626d"}, ] [package.dependencies] @@ -3360,114 +3457,125 @@ files = [ [[package]] name = "rpds-py" -version = "0.23.1" +version = "0.24.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" files = [ - {file = "rpds_py-0.23.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2a54027554ce9b129fc3d633c92fa33b30de9f08bc61b32c053dc9b537266fed"}, - {file = "rpds_py-0.23.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b5ef909a37e9738d146519657a1aab4584018746a18f71c692f2f22168ece40c"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ee9d6f0b38efb22ad94c3b68ffebe4c47865cdf4b17f6806d6c674e1feb4246"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7356a6da0562190558c4fcc14f0281db191cdf4cb96e7604c06acfcee96df15"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9441af1d25aed96901f97ad83d5c3e35e6cd21a25ca5e4916c82d7dd0490a4fa"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d8abf7896a91fb97e7977d1aadfcc2c80415d6dc2f1d0fca5b8d0df247248f3"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b08027489ba8fedde72ddd233a5ea411b85a6ed78175f40285bd401bde7466d"}, - {file = "rpds_py-0.23.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fee513135b5a58f3bb6d89e48326cd5aa308e4bcdf2f7d59f67c861ada482bf8"}, - {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:35d5631ce0af26318dba0ae0ac941c534453e42f569011585cb323b7774502a5"}, - {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a20cb698c4a59c534c6701b1c24a968ff2768b18ea2991f886bd8985ce17a89f"}, - {file = "rpds_py-0.23.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e9c206a1abc27e0588cf8b7c8246e51f1a16a103734f7750830a1ccb63f557a"}, - {file = "rpds_py-0.23.1-cp310-cp310-win32.whl", hash = "sha256:d9f75a06ecc68f159d5d7603b734e1ff6daa9497a929150f794013aa9f6e3f12"}, - {file = "rpds_py-0.23.1-cp310-cp310-win_amd64.whl", hash = "sha256:f35eff113ad430b5272bbfc18ba111c66ff525828f24898b4e146eb479a2cdda"}, - {file = "rpds_py-0.23.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:b79f5ced71efd70414a9a80bbbfaa7160da307723166f09b69773153bf17c590"}, - {file = "rpds_py-0.23.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c9e799dac1ffbe7b10c1fd42fe4cd51371a549c6e108249bde9cd1200e8f59b4"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721f9c4011b443b6e84505fc00cc7aadc9d1743f1c988e4c89353e19c4a968ee"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f88626e3f5e57432e6191cd0c5d6d6b319b635e70b40be2ffba713053e5147dd"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:285019078537949cecd0190f3690a0b0125ff743d6a53dfeb7a4e6787af154f5"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b92f5654157de1379c509b15acec9d12ecf6e3bc1996571b6cb82a4302060447"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e768267cbe051dd8d1c5305ba690bb153204a09bf2e3de3ae530de955f5b5580"}, - {file = "rpds_py-0.23.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c5334a71f7dc1160382d45997e29f2637c02f8a26af41073189d79b95d3321f1"}, - {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6adb81564af0cd428910f83fa7da46ce9ad47c56c0b22b50872bc4515d91966"}, - {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:cafa48f2133d4daa028473ede7d81cd1b9f9e6925e9e4003ebdf77010ee02f35"}, - {file = "rpds_py-0.23.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fced9fd4a07a1ded1bac7e961ddd9753dd5d8b755ba8e05acba54a21f5f1522"}, - {file = "rpds_py-0.23.1-cp311-cp311-win32.whl", hash = "sha256:243241c95174b5fb7204c04595852fe3943cc41f47aa14c3828bc18cd9d3b2d6"}, - {file = "rpds_py-0.23.1-cp311-cp311-win_amd64.whl", hash = "sha256:11dd60b2ffddba85715d8a66bb39b95ddbe389ad2cfcf42c833f1bcde0878eaf"}, - {file = "rpds_py-0.23.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3902df19540e9af4cc0c3ae75974c65d2c156b9257e91f5101a51f99136d834c"}, - {file = "rpds_py-0.23.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:66f8d2a17e5838dd6fb9be6baaba8e75ae2f5fa6b6b755d597184bfcd3cb0eba"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:112b8774b0b4ee22368fec42749b94366bd9b536f8f74c3d4175d4395f5cbd31"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e0df046f2266e8586cf09d00588302a32923eb6386ced0ca5c9deade6af9a149"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3288930b947cbebe767f84cf618d2cbe0b13be476e749da0e6a009f986248c"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce473a2351c018b06dd8d30d5da8ab5a0831056cc53b2006e2a8028172c37ce5"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d550d7e9e7d8676b183b37d65b5cd8de13676a738973d330b59dc8312df9c5dc"}, - {file = "rpds_py-0.23.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e14f86b871ea74c3fddc9a40e947d6a5d09def5adc2076ee61fb910a9014fb35"}, - {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf5be5ba34e19be579ae873da515a2836a2166d8d7ee43be6ff909eda42b72b"}, - {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d7031d493c4465dbc8d40bd6cafefef4bd472b17db0ab94c53e7909ee781b9ef"}, - {file = "rpds_py-0.23.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:55ff4151cfd4bc635e51cfb1c59ac9f7196b256b12e3a57deb9e5742e65941ad"}, - {file = "rpds_py-0.23.1-cp312-cp312-win32.whl", hash = "sha256:a9d3b728f5a5873d84cba997b9d617c6090ca5721caaa691f3b1a78c60adc057"}, - {file = "rpds_py-0.23.1-cp312-cp312-win_amd64.whl", hash = "sha256:b03a8d50b137ee758e4c73638b10747b7c39988eb8e6cd11abb7084266455165"}, - {file = "rpds_py-0.23.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:4caafd1a22e5eaa3732acb7672a497123354bef79a9d7ceed43387d25025e935"}, - {file = "rpds_py-0.23.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:178f8a60fc24511c0eb756af741c476b87b610dba83270fce1e5a430204566a4"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c632419c3870507ca20a37c8f8f5352317aca097639e524ad129f58c125c61c6"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:698a79d295626ee292d1730bc2ef6e70a3ab135b1d79ada8fde3ed0047b65a10"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:271fa2184cf28bdded86bb6217c8e08d3a169fe0bbe9be5e8d96e8476b707122"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b91cceb5add79ee563bd1f70b30896bd63bc5f78a11c1f00a1e931729ca4f1f4"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a6cb95074777f1ecda2ca4fa7717caa9ee6e534f42b7575a8f0d4cb0c24013"}, - {file = "rpds_py-0.23.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:50fb62f8d8364978478b12d5f03bf028c6bc2af04082479299139dc26edf4c64"}, - {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c8f7e90b948dc9dcfff8003f1ea3af08b29c062f681c05fd798e36daa3f7e3e8"}, - {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5b98b6c953e5c2bda51ab4d5b4f172617d462eebc7f4bfdc7c7e6b423f6da957"}, - {file = "rpds_py-0.23.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2893d778d4671ee627bac4037a075168b2673c57186fb1a57e993465dbd79a93"}, - {file = "rpds_py-0.23.1-cp313-cp313-win32.whl", hash = "sha256:2cfa07c346a7ad07019c33fb9a63cf3acb1f5363c33bc73014e20d9fe8b01cdd"}, - {file = "rpds_py-0.23.1-cp313-cp313-win_amd64.whl", hash = "sha256:3aaf141d39f45322e44fc2c742e4b8b4098ead5317e5f884770c8df0c332da70"}, - {file = "rpds_py-0.23.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:759462b2d0aa5a04be5b3e37fb8183615f47014ae6b116e17036b131985cb731"}, - {file = "rpds_py-0.23.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3e9212f52074fc9d72cf242a84063787ab8e21e0950d4d6709886fb62bcb91d5"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e9f3a3ac919406bc0414bbbd76c6af99253c507150191ea79fab42fdb35982a"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c04ca91dda8a61584165825907f5c967ca09e9c65fe8966ee753a3f2b019fe1e"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ab923167cfd945abb9b51a407407cf19f5bee35001221f2911dc85ffd35ff4f"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed6f011bedca8585787e5082cce081bac3d30f54520097b2411351b3574e1219"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959bb9928c5c999aba4a3f5a6799d571ddc2c59ff49917ecf55be2bbb4e3722"}, - {file = "rpds_py-0.23.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1ed7de3c86721b4e83ac440751329ec6a1102229aa18163f84c75b06b525ad7e"}, - {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5fb89edee2fa237584e532fbf78f0ddd1e49a47c7c8cfa153ab4849dc72a35e6"}, - {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7e5413d2e2d86025e73f05510ad23dad5950ab8417b7fc6beaad99be8077138b"}, - {file = "rpds_py-0.23.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d31ed4987d72aabdf521eddfb6a72988703c091cfc0064330b9e5f8d6a042ff5"}, - {file = "rpds_py-0.23.1-cp313-cp313t-win32.whl", hash = "sha256:f3429fb8e15b20961efca8c8b21432623d85db2228cc73fe22756c6637aa39e7"}, - {file = "rpds_py-0.23.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d6f6512a90bd5cd9030a6237f5346f046c6f0e40af98657568fa45695d4de59d"}, - {file = "rpds_py-0.23.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:09cd7dbcb673eb60518231e02874df66ec1296c01a4fcd733875755c02014b19"}, - {file = "rpds_py-0.23.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c6760211eee3a76316cf328f5a8bd695b47b1626d21c8a27fb3b2473a884d597"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e680c1518733b73c994361e4b06441b92e973ef7d9449feec72e8ee4f713da"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae28144c1daa61366205d32abd8c90372790ff79fc60c1a8ad7fd3c8553a600e"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c698d123ce5d8f2d0cd17f73336615f6a2e3bdcedac07a1291bb4d8e7d82a05a"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98b257ae1e83f81fb947a363a274c4eb66640212516becaff7bef09a5dceacaa"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c9ff044eb07c8468594d12602291c635da292308c8c619244e30698e7fc455a"}, - {file = "rpds_py-0.23.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7938c7b0599a05246d704b3f5e01be91a93b411d0d6cc62275f025293b8a11ce"}, - {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e9cb79ecedfc156c0692257ac7ed415243b6c35dd969baa461a6888fc79f2f07"}, - {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:7b77e07233925bd33fc0022b8537774423e4c6680b6436316c5075e79b6384f4"}, - {file = "rpds_py-0.23.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a970bfaf130c29a679b1d0a6e0f867483cea455ab1535fb427566a475078f27f"}, - {file = "rpds_py-0.23.1-cp39-cp39-win32.whl", hash = "sha256:4233df01a250b3984465faed12ad472f035b7cd5240ea3f7c76b7a7016084495"}, - {file = "rpds_py-0.23.1-cp39-cp39-win_amd64.whl", hash = "sha256:c617d7453a80e29d9973b926983b1e700a9377dbe021faa36041c78537d7b08c"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c1f8afa346ccd59e4e5630d5abb67aba6a9812fddf764fd7eb11f382a345f8cc"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fad784a31869747df4ac968a351e070c06ca377549e4ace94775aaa3ab33ee06"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5a96fcac2f18e5a0a23a75cd27ce2656c66c11c127b0318e508aab436b77428"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e77febf227a1dc3220159355dba68faa13f8dca9335d97504abf428469fb18b"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26bb3e8de93443d55e2e748e9fd87deb5f8075ca7bc0502cfc8be8687d69a2ec"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db7707dde9143a67b8812c7e66aeb2d843fe33cc8e374170f4d2c50bd8f2472d"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eedaaccc9bb66581d4ae7c50e15856e335e57ef2734dbc5fd8ba3e2a4ab3cb6"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28358c54fffadf0ae893f6c1050e8f8853e45df22483b7fff2f6ab6152f5d8bf"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:633462ef7e61d839171bf206551d5ab42b30b71cac8f10a64a662536e057fdef"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a98f510d86f689fcb486dc59e6e363af04151e5260ad1bdddb5625c10f1e95f8"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e0397dd0b3955c61ef9b22838144aa4bef6f0796ba5cc8edfc64d468b93798b4"}, - {file = "rpds_py-0.23.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:75307599f0d25bf6937248e5ac4e3bde5ea72ae6618623b86146ccc7845ed00b"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3614d280bf7aab0d3721b5ce0e73434acb90a2c993121b6e81a1c15c665298ac"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e5963ea87f88bddf7edd59644a35a0feecf75f8985430124c253612d4f7d27ae"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad76f44f70aac3a54ceb1813ca630c53415da3a24fd93c570b2dfb4856591017"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c6ae11e6e93728d86aafc51ced98b1658a0080a7dd9417d24bfb955bb09c3c2"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc869af5cba24d45fb0399b0cfdbcefcf6910bf4dee5d74036a57cf5264b3ff4"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c76b32eb2ab650a29e423525e84eb197c45504b1c1e6e17b6cc91fcfeb1a4b1d"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4263320ed887ed843f85beba67f8b2d1483b5947f2dc73a8b068924558bfeace"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f9682a8f71acdf59fd554b82b1c12f517118ee72c0f3944eda461606dfe7eb9"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:754fba3084b70162a6b91efceee8a3f06b19e43dac3f71841662053c0584209a"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:a1c66e71ecfd2a4acf0e4bd75e7a3605afa8f9b28a3b497e4ba962719df2be57"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8d67beb6002441faef8251c45e24994de32c4c8686f7356a1f601ad7c466f7c3"}, - {file = "rpds_py-0.23.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a1e17d8dc8e57d8e0fd21f8f0f0a5211b3fa258b2e444c2053471ef93fe25a00"}, - {file = "rpds_py-0.23.1.tar.gz", hash = "sha256:7f3240dcfa14d198dba24b8b9cb3b108c06b68d45b7babd9eefc1038fdf7e707"}, + {file = "rpds_py-0.24.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724"}, + {file = "rpds_py-0.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8acd55bd5b071156bae57b555f5d33697998752673b9de554dd82f5b5352727"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7e80d375134ddb04231a53800503752093dbb65dad8dabacce2c84cccc78e964"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60748789e028d2a46fc1c70750454f83c6bdd0d05db50f5ae83e2db500b34da5"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e1daf5bf6c2be39654beae83ee6b9a12347cb5aced9a29eecf12a2d25fff664"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b221c2457d92a1fb3c97bee9095c874144d196f47c038462ae6e4a14436f7bc"}, + {file = "rpds_py-0.24.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:66420986c9afff67ef0c5d1e4cdc2d0e5262f53ad11e4f90e5e22448df485bf0"}, + {file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:43dba99f00f1d37b2a0265a259592d05fcc8e7c19d140fe51c6e6f16faabeb1f"}, + {file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a88c0d17d039333a41d9bf4616bd062f0bd7aa0edeb6cafe00a2fc2a804e944f"}, + {file = "rpds_py-0.24.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc31e13ce212e14a539d430428cd365e74f8b2d534f8bc22dd4c9c55b277b875"}, + {file = "rpds_py-0.24.0-cp310-cp310-win32.whl", hash = "sha256:fc2c1e1b00f88317d9de6b2c2b39b012ebbfe35fe5e7bef980fd2a91f6100a07"}, + {file = "rpds_py-0.24.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0145295ca415668420ad142ee42189f78d27af806fcf1f32a18e51d47dd2052"}, + {file = "rpds_py-0.24.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2d3ee4615df36ab8eb16c2507b11e764dcc11fd350bbf4da16d09cda11fcedef"}, + {file = "rpds_py-0.24.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e13ae74a8a3a0c2f22f450f773e35f893484fcfacb00bb4344a7e0f4f48e1f97"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf86f72d705fc2ef776bb7dd9e5fbba79d7e1f3e258bf9377f8204ad0fc1c51e"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c43583ea8517ed2e780a345dd9960896afc1327e8cf3ac8239c167530397440d"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4cd031e63bc5f05bdcda120646a0d32f6d729486d0067f09d79c8db5368f4586"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34d90ad8c045df9a4259c47d2e16a3f21fdb396665c94520dbfe8766e62187a4"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e838bf2bb0b91ee67bf2b889a1a841e5ecac06dd7a2b1ef4e6151e2ce155c7ae"}, + {file = "rpds_py-0.24.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04ecf5c1ff4d589987b4d9882872f80ba13da7d42427234fce8f22efb43133bc"}, + {file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:630d3d8ea77eabd6cbcd2ea712e1c5cecb5b558d39547ac988351195db433f6c"}, + {file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ebcb786b9ff30b994d5969213a8430cbb984cdd7ea9fd6df06663194bd3c450c"}, + {file = "rpds_py-0.24.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:174e46569968ddbbeb8a806d9922f17cd2b524aa753b468f35b97ff9c19cb718"}, + {file = "rpds_py-0.24.0-cp311-cp311-win32.whl", hash = "sha256:5ef877fa3bbfb40b388a5ae1cb00636a624690dcb9a29a65267054c9ea86d88a"}, + {file = "rpds_py-0.24.0-cp311-cp311-win_amd64.whl", hash = "sha256:e274f62cbd274359eff63e5c7e7274c913e8e09620f6a57aae66744b3df046d6"}, + {file = "rpds_py-0.24.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:d8551e733626afec514b5d15befabea0dd70a343a9f23322860c4f16a9430205"}, + {file = "rpds_py-0.24.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e374c0ce0ca82e5b67cd61fb964077d40ec177dd2c4eda67dba130de09085c7"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d69d003296df4840bd445a5d15fa5b6ff6ac40496f956a221c4d1f6f7b4bc4d9"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8212ff58ac6dfde49946bea57474a386cca3f7706fc72c25b772b9ca4af6b79e"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:528927e63a70b4d5f3f5ccc1fa988a35456eb5d15f804d276709c33fc2f19bda"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a824d2c7a703ba6daaca848f9c3d5cb93af0505be505de70e7e66829affd676e"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44d51febb7a114293ffd56c6cf4736cb31cd68c0fddd6aa303ed09ea5a48e029"}, + {file = "rpds_py-0.24.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3fab5f4a2c64a8fb64fc13b3d139848817a64d467dd6ed60dcdd6b479e7febc9"}, + {file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9be4f99bee42ac107870c61dfdb294d912bf81c3c6d45538aad7aecab468b6b7"}, + {file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:564c96b6076a98215af52f55efa90d8419cc2ef45d99e314fddefe816bc24f91"}, + {file = "rpds_py-0.24.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:75a810b7664c17f24bf2ffd7f92416c00ec84b49bb68e6a0d93e542406336b56"}, + {file = "rpds_py-0.24.0-cp312-cp312-win32.whl", hash = "sha256:f6016bd950be4dcd047b7475fdf55fb1e1f59fc7403f387be0e8123e4a576d30"}, + {file = "rpds_py-0.24.0-cp312-cp312-win_amd64.whl", hash = "sha256:998c01b8e71cf051c28f5d6f1187abbdf5cf45fc0efce5da6c06447cba997034"}, + {file = "rpds_py-0.24.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3d2d8e4508e15fc05b31285c4b00ddf2e0eb94259c2dc896771966a163122a0c"}, + {file = "rpds_py-0.24.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f00c16e089282ad68a3820fd0c831c35d3194b7cdc31d6e469511d9bffc535c"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951cc481c0c395c4a08639a469d53b7d4afa252529a085418b82a6b43c45c240"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9ca89938dff18828a328af41ffdf3902405a19f4131c88e22e776a8e228c5a8"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed0ef550042a8dbcd657dfb284a8ee00f0ba269d3f2286b0493b15a5694f9fe8"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b2356688e5d958c4d5cb964af865bea84db29971d3e563fb78e46e20fe1848b"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78884d155fd15d9f64f5d6124b486f3d3f7fd7cd71a78e9670a0f6f6ca06fb2d"}, + {file = "rpds_py-0.24.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a4a535013aeeef13c5532f802708cecae8d66c282babb5cd916379b72110cf7"}, + {file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:84e0566f15cf4d769dade9b366b7b87c959be472c92dffb70462dd0844d7cbad"}, + {file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:823e74ab6fbaa028ec89615ff6acb409e90ff45580c45920d4dfdddb069f2120"}, + {file = "rpds_py-0.24.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c61a2cb0085c8783906b2f8b1f16a7e65777823c7f4d0a6aaffe26dc0d358dd9"}, + {file = "rpds_py-0.24.0-cp313-cp313-win32.whl", hash = "sha256:60d9b630c8025b9458a9d114e3af579a2c54bd32df601c4581bd054e85258143"}, + {file = "rpds_py-0.24.0-cp313-cp313-win_amd64.whl", hash = "sha256:6eea559077d29486c68218178ea946263b87f1c41ae7f996b1f30a983c476a5a"}, + {file = "rpds_py-0.24.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:d09dc82af2d3c17e7dd17120b202a79b578d79f2b5424bda209d9966efeed114"}, + {file = "rpds_py-0.24.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5fc13b44de6419d1e7a7e592a4885b323fbc2f46e1f22151e3a8ed3b8b920405"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c347a20d79cedc0a7bd51c4d4b7dbc613ca4e65a756b5c3e57ec84bd43505b47"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20f2712bd1cc26a3cc16c5a1bfee9ed1abc33d4cdf1aabd297fe0eb724df4272"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aad911555286884be1e427ef0dc0ba3929e6821cbeca2194b13dc415a462c7fd"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0aeb3329c1721c43c58cae274d7d2ca85c1690d89485d9c63a006cb79a85771a"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a0f156e9509cee987283abd2296ec816225145a13ed0391df8f71bf1d789e2d"}, + {file = "rpds_py-0.24.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aa6800adc8204ce898c8a424303969b7aa6a5e4ad2789c13f8648739830323b7"}, + {file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a18fc371e900a21d7392517c6f60fe859e802547309e94313cd8181ad9db004d"}, + {file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9168764133fd919f8dcca2ead66de0105f4ef5659cbb4fa044f7014bed9a1797"}, + {file = "rpds_py-0.24.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f6e3cec44ba05ee5cbdebe92d052f69b63ae792e7d05f1020ac5e964394080c"}, + {file = "rpds_py-0.24.0-cp313-cp313t-win32.whl", hash = "sha256:8ebc7e65ca4b111d928b669713865f021b7773350eeac4a31d3e70144297baba"}, + {file = "rpds_py-0.24.0-cp313-cp313t-win_amd64.whl", hash = "sha256:675269d407a257b8c00a6b58205b72eec8231656506c56fd429d924ca00bb350"}, + {file = "rpds_py-0.24.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a36b452abbf29f68527cf52e181fced56685731c86b52e852053e38d8b60bc8d"}, + {file = "rpds_py-0.24.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b3b397eefecec8e8e39fa65c630ef70a24b09141a6f9fc17b3c3a50bed6b50e"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdabcd3beb2a6dca7027007473d8ef1c3b053347c76f685f5f060a00327b8b65"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5db385bacd0c43f24be92b60c857cf760b7f10d8234f4bd4be67b5b20a7c0b6b"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8097b3422d020ff1c44effc40ae58e67d93e60d540a65649d2cdaf9466030791"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:493fe54318bed7d124ce272fc36adbf59d46729659b2c792e87c3b95649cdee9"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8aa362811ccdc1f8dadcc916c6d47e554169ab79559319ae9fae7d7752d0d60c"}, + {file = "rpds_py-0.24.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d8f9a6e7fd5434817526815f09ea27f2746c4a51ee11bb3439065f5fc754db58"}, + {file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8205ee14463248d3349131bb8099efe15cd3ce83b8ef3ace63c7e976998e7124"}, + {file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:921ae54f9ecba3b6325df425cf72c074cd469dea843fb5743a26ca7fb2ccb149"}, + {file = "rpds_py-0.24.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32bab0a56eac685828e00cc2f5d1200c548f8bc11f2e44abf311d6b548ce2e45"}, + {file = "rpds_py-0.24.0-cp39-cp39-win32.whl", hash = "sha256:f5c0ed12926dec1dfe7d645333ea59cf93f4d07750986a586f511c0bc61fe103"}, + {file = "rpds_py-0.24.0-cp39-cp39-win_amd64.whl", hash = "sha256:afc6e35f344490faa8276b5f2f7cbf71f88bc2cda4328e00553bd451728c571f"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:619ca56a5468f933d940e1bf431c6f4e13bef8e688698b067ae68eb4f9b30e3a"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:4b28e5122829181de1898c2c97f81c0b3246d49f585f22743a1246420bb8d399"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e5ab32cf9eb3647450bc74eb201b27c185d3857276162c101c0f8c6374e098"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:208b3a70a98cf3710e97cabdc308a51cd4f28aa6e7bb11de3d56cd8b74bab98d"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbc4362e06f950c62cad3d4abf1191021b2ffaf0b31ac230fbf0526453eee75e"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ebea2821cdb5f9fef44933617be76185b80150632736f3d76e54829ab4a3b4d1"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4df06c35465ef4d81799999bba810c68d29972bf1c31db61bfdb81dd9d5bb"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d3aa13bdf38630da298f2e0d77aca967b200b8cc1473ea05248f6c5e9c9bdb44"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:041f00419e1da7a03c46042453598479f45be3d787eb837af382bfc169c0db33"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8754d872a5dfc3c5bf9c0e059e8107451364a30d9fd50f1f1a85c4fb9481164"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:896c41007931217a343eff197c34513c154267636c8056fb409eafd494c3dcdc"}, + {file = "rpds_py-0.24.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:92558d37d872e808944c3c96d0423b8604879a3d1c86fdad508d7ed91ea547d5"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f9e0057a509e096e47c87f753136c9b10d7a91842d8042c2ee6866899a717c0d"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6e109a454412ab82979c5b1b3aee0604eca4bbf9a02693bb9df027af2bfa91a"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc1c892b1ec1f8cbd5da8de287577b455e388d9c328ad592eabbdcb6fc93bee5"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c39438c55983d48f4bb3487734d040e22dad200dab22c41e331cee145e7a50d"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d7e8ce990ae17dda686f7e82fd41a055c668e13ddcf058e7fb5e9da20b57793"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9ea7f4174d2e4194289cb0c4e172d83e79a6404297ff95f2875cf9ac9bced8ba"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb2954155bb8f63bb19d56d80e5e5320b61d71084617ed89efedb861a684baea"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04f2b712a2206e13800a8136b07aaedc23af3facab84918e7aa89e4be0260032"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:eda5c1e2a715a4cbbca2d6d304988460942551e4e5e3b7457b50943cd741626d"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:9abc80fe8c1f87218db116016de575a7998ab1629078c90840e8d11ab423ee25"}, + {file = "rpds_py-0.24.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a727fd083009bc83eb83d6950f0c32b3c94c8b80a9b667c87f4bd1274ca30ba"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e0f3ef95795efcd3b2ec3fe0a5bcfb5dadf5e3996ea2117427e524d4fbf309c6"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2c13777ecdbbba2077670285dd1fe50828c8742f6a4119dbef6f83ea13ad10fb"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79e8d804c2ccd618417e96720ad5cd076a86fa3f8cb310ea386a3e6229bae7d1"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd822f019ccccd75c832deb7aa040bb02d70a92eb15a2f16c7987b7ad4ee8d83"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0047638c3aa0dbcd0ab99ed1e549bbf0e142c9ecc173b6492868432d8989a046"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a5b66d1b201cc71bc3081bc2f1fc36b0c1f268b773e03bbc39066651b9e18391"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbcbb6db5582ea33ce46a5d20a5793134b5365110d84df4e30b9d37c6fd40ad3"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:63981feca3f110ed132fd217bf7768ee8ed738a55549883628ee3da75bb9cb78"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3a55fc10fdcbf1a4bd3c018eea422c52cf08700cf99c28b5cb10fe97ab77a0d3"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:c30ff468163a48535ee7e9bf21bd14c7a81147c0e58a36c1078289a8ca7af0bd"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:369d9c6d4c714e36d4a03957b4783217a3ccd1e222cdd67d464a3a479fc17796"}, + {file = "rpds_py-0.24.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:24795c099453e3721fda5d8ddd45f5dfcc8e5a547ce7b8e9da06fecc3832e26f"}, + {file = "rpds_py-0.24.0.tar.gz", hash = "sha256:772cc1b2cd963e7e17e6cc55fe0371fb9c704d63e44cacec7b9b7f523b78919e"}, ] [[package]] @@ -3502,18 +3610,18 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "76.0.0" +version = "80.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" files = [ - {file = "setuptools-76.0.0-py3-none-any.whl", hash = "sha256:199466a166ff664970d0ee145839f5582cb9bca7a0a3a2e795b6a9cb2308e9c6"}, - {file = "setuptools-76.0.0.tar.gz", hash = "sha256:43b4ee60e10b0d0ee98ad11918e114c70701bc6051662a9a675a0496c1a158f4"}, + {file = "setuptools-80.0.0-py3-none-any.whl", hash = "sha256:a38f898dcd6e5380f4da4381a87ec90bd0a7eec23d204a5552e80ee3cab6bd27"}, + {file = "setuptools-80.0.0.tar.gz", hash = "sha256:c40a5b3729d58dd749c0f08f1a07d134fb8a0a3d7f87dc33e7c5e1f762138650"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] -core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib_metadata (>=6)", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] @@ -3544,91 +3652,91 @@ files = [ [[package]] name = "soupsieve" -version = "2.6" +version = "2.7" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" files = [ - {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, - {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, + {file = "soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4"}, + {file = "soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a"}, ] [[package]] name = "sqlalchemy" -version = "2.0.39" +version = "2.0.40" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.39-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:66a40003bc244e4ad86b72abb9965d304726d05a939e8c09ce844d27af9e6d37"}, - {file = "SQLAlchemy-2.0.39-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67de057fbcb04a066171bd9ee6bcb58738d89378ee3cabff0bffbf343ae1c787"}, - {file = "SQLAlchemy-2.0.39-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:533e0f66c32093a987a30df3ad6ed21170db9d581d0b38e71396c49718fbb1ca"}, - {file = "SQLAlchemy-2.0.39-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7399d45b62d755e9ebba94eb89437f80512c08edde8c63716552a3aade61eb42"}, - {file = "SQLAlchemy-2.0.39-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:788b6ff6728072b313802be13e88113c33696a9a1f2f6d634a97c20f7ef5ccce"}, - {file = "SQLAlchemy-2.0.39-cp37-cp37m-win32.whl", hash = "sha256:01da15490c9df352fbc29859d3c7ba9cd1377791faeeb47c100832004c99472c"}, - {file = "SQLAlchemy-2.0.39-cp37-cp37m-win_amd64.whl", hash = "sha256:f2bcb085faffcacf9319b1b1445a7e1cfdc6fb46c03f2dce7bc2d9a4b3c1cdc5"}, - {file = "SQLAlchemy-2.0.39-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b761a6847f96fdc2d002e29e9e9ac2439c13b919adfd64e8ef49e75f6355c548"}, - {file = "SQLAlchemy-2.0.39-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0d7e3866eb52d914aea50c9be74184a0feb86f9af8aaaa4daefe52b69378db0b"}, - {file = "SQLAlchemy-2.0.39-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:995c2bacdddcb640c2ca558e6760383dcdd68830160af92b5c6e6928ffd259b4"}, - {file = "SQLAlchemy-2.0.39-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:344cd1ec2b3c6bdd5dfde7ba7e3b879e0f8dd44181f16b895940be9b842fd2b6"}, - {file = "SQLAlchemy-2.0.39-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5dfbc543578058c340360f851ddcecd7a1e26b0d9b5b69259b526da9edfa8875"}, - {file = "SQLAlchemy-2.0.39-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3395e7ed89c6d264d38bea3bfb22ffe868f906a7985d03546ec7dc30221ea980"}, - {file = "SQLAlchemy-2.0.39-cp38-cp38-win32.whl", hash = "sha256:bf555f3e25ac3a70c67807b2949bfe15f377a40df84b71ab2c58d8593a1e036e"}, - {file = "SQLAlchemy-2.0.39-cp38-cp38-win_amd64.whl", hash = "sha256:463ecfb907b256e94bfe7bcb31a6d8c7bc96eca7cbe39803e448a58bb9fcad02"}, - {file = "sqlalchemy-2.0.39-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6827f8c1b2f13f1420545bd6d5b3f9e0b85fe750388425be53d23c760dcf176b"}, - {file = "sqlalchemy-2.0.39-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d9f119e7736967c0ea03aff91ac7d04555ee038caf89bb855d93bbd04ae85b41"}, - {file = "sqlalchemy-2.0.39-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4600c7a659d381146e1160235918826c50c80994e07c5b26946a3e7ec6c99249"}, - {file = "sqlalchemy-2.0.39-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a06e6c8e31c98ddc770734c63903e39f1947c9e3e5e4bef515c5491b7737dde"}, - {file = "sqlalchemy-2.0.39-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4c433f78c2908ae352848f56589c02b982d0e741b7905228fad628999799de4"}, - {file = "sqlalchemy-2.0.39-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7bd5c5ee1448b6408734eaa29c0d820d061ae18cb17232ce37848376dcfa3e92"}, - {file = "sqlalchemy-2.0.39-cp310-cp310-win32.whl", hash = "sha256:87a1ce1f5e5dc4b6f4e0aac34e7bb535cb23bd4f5d9c799ed1633b65c2bcad8c"}, - {file = "sqlalchemy-2.0.39-cp310-cp310-win_amd64.whl", hash = "sha256:871f55e478b5a648c08dd24af44345406d0e636ffe021d64c9b57a4a11518304"}, - {file = "sqlalchemy-2.0.39-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a28f9c238f1e143ff42ab3ba27990dfb964e5d413c0eb001b88794c5c4a528a9"}, - {file = "sqlalchemy-2.0.39-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:08cf721bbd4391a0e765fe0fe8816e81d9f43cece54fdb5ac465c56efafecb3d"}, - {file = "sqlalchemy-2.0.39-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a8517b6d4005facdbd7eb4e8cf54797dbca100a7df459fdaff4c5123265c1cd"}, - {file = "sqlalchemy-2.0.39-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b2de1523d46e7016afc7e42db239bd41f2163316935de7c84d0e19af7e69538"}, - {file = "sqlalchemy-2.0.39-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:412c6c126369ddae171c13987b38df5122cb92015cba6f9ee1193b867f3f1530"}, - {file = "sqlalchemy-2.0.39-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b35e07f1d57b79b86a7de8ecdcefb78485dab9851b9638c2c793c50203b2ae8"}, - {file = "sqlalchemy-2.0.39-cp311-cp311-win32.whl", hash = "sha256:3eb14ba1a9d07c88669b7faf8f589be67871d6409305e73e036321d89f1d904e"}, - {file = "sqlalchemy-2.0.39-cp311-cp311-win_amd64.whl", hash = "sha256:78f1b79132a69fe8bd6b5d91ef433c8eb40688ba782b26f8c9f3d2d9ca23626f"}, - {file = "sqlalchemy-2.0.39-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c457a38351fb6234781d054260c60e531047e4d07beca1889b558ff73dc2014b"}, - {file = "sqlalchemy-2.0.39-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:018ee97c558b499b58935c5a152aeabf6d36b3d55d91656abeb6d93d663c0c4c"}, - {file = "sqlalchemy-2.0.39-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5493a8120d6fc185f60e7254fc056a6742f1db68c0f849cfc9ab46163c21df47"}, - {file = "sqlalchemy-2.0.39-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2cf5b5ddb69142511d5559c427ff00ec8c0919a1e6c09486e9c32636ea2b9dd"}, - {file = "sqlalchemy-2.0.39-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9f03143f8f851dd8de6b0c10784363712058f38209e926723c80654c1b40327a"}, - {file = "sqlalchemy-2.0.39-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:06205eb98cb3dd52133ca6818bf5542397f1dd1b69f7ea28aa84413897380b06"}, - {file = "sqlalchemy-2.0.39-cp312-cp312-win32.whl", hash = "sha256:7f5243357e6da9a90c56282f64b50d29cba2ee1f745381174caacc50d501b109"}, - {file = "sqlalchemy-2.0.39-cp312-cp312-win_amd64.whl", hash = "sha256:2ed107331d188a286611cea9022de0afc437dd2d3c168e368169f27aa0f61338"}, - {file = "sqlalchemy-2.0.39-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fe193d3ae297c423e0e567e240b4324d6b6c280a048e64c77a3ea6886cc2aa87"}, - {file = "sqlalchemy-2.0.39-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:79f4f502125a41b1b3b34449e747a6abfd52a709d539ea7769101696bdca6716"}, - {file = "sqlalchemy-2.0.39-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a10ca7f8a1ea0fd5630f02feb055b0f5cdfcd07bb3715fc1b6f8cb72bf114e4"}, - {file = "sqlalchemy-2.0.39-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6b0a1c7ed54a5361aaebb910c1fa864bae34273662bb4ff788a527eafd6e14d"}, - {file = "sqlalchemy-2.0.39-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52607d0ebea43cf214e2ee84a6a76bc774176f97c5a774ce33277514875a718e"}, - {file = "sqlalchemy-2.0.39-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c08a972cbac2a14810463aec3a47ff218bb00c1a607e6689b531a7c589c50723"}, - {file = "sqlalchemy-2.0.39-cp313-cp313-win32.whl", hash = "sha256:23c5aa33c01bd898f879db158537d7e7568b503b15aad60ea0c8da8109adf3e7"}, - {file = "sqlalchemy-2.0.39-cp313-cp313-win_amd64.whl", hash = "sha256:4dabd775fd66cf17f31f8625fc0e4cfc5765f7982f94dc09b9e5868182cb71c0"}, - {file = "sqlalchemy-2.0.39-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2600a50d590c22d99c424c394236899ba72f849a02b10e65b4c70149606408b5"}, - {file = "sqlalchemy-2.0.39-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4eff9c270afd23e2746e921e80182872058a7a592017b2713f33f96cc5f82e32"}, - {file = "sqlalchemy-2.0.39-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7332868ce891eda48896131991f7f2be572d65b41a4050957242f8e935d5d7"}, - {file = "sqlalchemy-2.0.39-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125a7763b263218a80759ad9ae2f3610aaf2c2fbbd78fff088d584edf81f3782"}, - {file = "sqlalchemy-2.0.39-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:04545042969833cb92e13b0a3019549d284fd2423f318b6ba10e7aa687690a3c"}, - {file = "sqlalchemy-2.0.39-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:805cb481474e111ee3687c9047c5f3286e62496f09c0e82e8853338aaaa348f8"}, - {file = "sqlalchemy-2.0.39-cp39-cp39-win32.whl", hash = "sha256:34d5c49f18778a3665d707e6286545a30339ad545950773d43977e504815fa70"}, - {file = "sqlalchemy-2.0.39-cp39-cp39-win_amd64.whl", hash = "sha256:35e72518615aa5384ef4fae828e3af1b43102458b74a8c481f69af8abf7e802a"}, - {file = "sqlalchemy-2.0.39-py3-none-any.whl", hash = "sha256:a1c6b0a5e3e326a466d809b651c63f278b1256146a377a528b6938a279da334f"}, - {file = "sqlalchemy-2.0.39.tar.gz", hash = "sha256:5d2d1fe548def3267b4c70a8568f108d1fed7cbbeccb9cc166e05af2abc25c22"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae9597cab738e7cc823f04a704fb754a9249f0b6695a6aeb63b74055cd417a96"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a5c21ab099a83d669ebb251fddf8f5cee4d75ea40a5a1653d9c43d60e20867"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bece9527f5a98466d67fb5d34dc560c4da964240d8b09024bb21c1246545e04e"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:8bb131ffd2165fae48162c7bbd0d97c84ab961deea9b8bab16366543deeab625"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9408fd453d5f8990405cc9def9af46bfbe3183e6110401b407c2d073c3388f47"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-win32.whl", hash = "sha256:00a494ea6f42a44c326477b5bee4e0fc75f6a80c01570a32b57e89cf0fbef85a"}, + {file = "SQLAlchemy-2.0.40-cp37-cp37m-win_amd64.whl", hash = "sha256:c7b927155112ac858357ccf9d255dd8c044fd9ad2dc6ce4c4149527c901fa4c3"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1ea21bef99c703f44444ad29c2c1b6bd55d202750b6de8e06a955380f4725d7"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:afe63b208153f3a7a2d1a5b9df452b0673082588933e54e7c8aac457cf35e758"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8aae085ea549a1eddbc9298b113cffb75e514eadbb542133dd2b99b5fb3b6af"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ea9181284754d37db15156eb7be09c86e16e50fbe77610e9e7bee09291771a1"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5434223b795be5c5ef8244e5ac98056e290d3a99bdcc539b916e282b160dda00"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15d08d5ef1b779af6a0909b97be6c1fd4298057504eb6461be88bd1696cb438e"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-win32.whl", hash = "sha256:cd2f75598ae70bcfca9117d9e51a3b06fe29edd972fdd7fd57cc97b4dbf3b08a"}, + {file = "sqlalchemy-2.0.40-cp310-cp310-win_amd64.whl", hash = "sha256:2cbafc8d39ff1abdfdda96435f38fab141892dc759a2165947d1a8fffa7ef596"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f6bacab7514de6146a1976bc56e1545bee247242fab030b89e5f70336fc0003e"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5654d1ac34e922b6c5711631f2da497d3a7bffd6f9f87ac23b35feea56098011"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35904d63412db21088739510216e9349e335f142ce4a04b69e2528020ee19ed4"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7a80ed86d6aaacb8160a1caef6680d4ddd03c944d985aecee940d168c411d1"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:519624685a51525ddaa7d8ba8265a1540442a2ec71476f0e75241eb8263d6f51"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2ee5f9999a5b0e9689bed96e60ee53c3384f1a05c2dd8068cc2e8361b0df5b7a"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-win32.whl", hash = "sha256:c0cae71e20e3c02c52f6b9e9722bca70e4a90a466d59477822739dc31ac18b4b"}, + {file = "sqlalchemy-2.0.40-cp311-cp311-win_amd64.whl", hash = "sha256:574aea2c54d8f1dd1699449f332c7d9b71c339e04ae50163a3eb5ce4c4325ee4"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9d3b31d0a1c44b74d3ae27a3de422dfccd2b8f0b75e51ecb2faa2bf65ab1ba0d"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37f7a0f506cf78c80450ed1e816978643d3969f99c4ac6b01104a6fe95c5490a"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bb933a650323e476a2e4fbef8997a10d0003d4da996aad3fd7873e962fdde4d"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959738971b4745eea16f818a2cd086fb35081383b078272c35ece2b07012716"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:110179728e442dae85dd39591beb74072ae4ad55a44eda2acc6ec98ead80d5f2"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8040680eaacdce4d635f12c55c714f3d4c7f57da2bc47a01229d115bd319191"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-win32.whl", hash = "sha256:650490653b110905c10adac69408380688cefc1f536a137d0d69aca1069dc1d1"}, + {file = "sqlalchemy-2.0.40-cp312-cp312-win_amd64.whl", hash = "sha256:2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:915866fd50dd868fdcc18d61d8258db1bf9ed7fbd6dfec960ba43365952f3b01"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a4c5a2905a9ccdc67a8963e24abd2f7afcd4348829412483695c59e0af9a705"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55028d7a3ebdf7ace492fab9895cbc5270153f75442a0472d8516e03159ab364"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cfedff6878b0e0d1d0a50666a817ecd85051d12d56b43d9d425455e608b5ba0"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bb19e30fdae77d357ce92192a3504579abe48a66877f476880238a962e5b96db"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:16d325ea898f74b26ffcd1cf8c593b0beed8714f0317df2bed0d8d1de05a8f26"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-win32.whl", hash = "sha256:a669cbe5be3c63f75bcbee0b266779706f1a54bcb1000f302685b87d1b8c1500"}, + {file = "sqlalchemy-2.0.40-cp313-cp313-win_amd64.whl", hash = "sha256:641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:50f5885bbed261fc97e2e66c5156244f9704083a674b8d17f24c72217d29baf5"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf0e99cdb600eabcd1d65cdba0d3c91418fee21c4aa1d28db47d095b1064a7d8"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe147fcd85aaed53ce90645c91ed5fca0cc88a797314c70dfd9d35925bd5d106"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf7cee56bd552385c1ee39af360772fbfc2f43be005c78d1140204ad6148438"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4aeb939bcac234b88e2d25d5381655e8353fe06b4e50b1c55ecffe56951d18c2"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c268b5100cfeaa222c40f55e169d484efa1384b44bf9ca415eae6d556f02cb08"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-win32.whl", hash = "sha256:46628ebcec4f23a1584fb52f2abe12ddb00f3bb3b7b337618b80fc1b51177aff"}, + {file = "sqlalchemy-2.0.40-cp38-cp38-win_amd64.whl", hash = "sha256:7e0505719939e52a7b0c65d20e84a6044eb3712bb6f239c6b1db77ba8e173a37"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c884de19528e0fcd9dc34ee94c810581dd6e74aef75437ff17e696c2bfefae3e"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1abb387710283fc5983d8a1209d9696a4eae9db8d7ac94b402981fe2fe2e39ad"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cfa124eda500ba4b0d3afc3e91ea27ed4754e727c7f025f293a22f512bcd4c9"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6b28d303b9d57c17a5164eb1fd2d5119bb6ff4413d5894e74873280483eeb5"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b5a5bbe29c10c5bfd63893747a1bf6f8049df607638c786252cb9243b86b6706"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f0fda83e113bb0fb27dc003685f32a5dcb99c9c4f41f4fa0838ac35265c23b5c"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-win32.whl", hash = "sha256:957f8d85d5e834397ef78a6109550aeb0d27a53b5032f7a57f2451e1adc37e98"}, + {file = "sqlalchemy-2.0.40-cp39-cp39-win_amd64.whl", hash = "sha256:1ffdf9c91428e59744f8e6f98190516f8e1d05eec90e936eb08b257332c5e870"}, + {file = "sqlalchemy-2.0.40-py3-none-any.whl", hash = "sha256:32587e2e1e359276957e6fe5dad089758bc042a971a8a09ae8ecf7a8fe23d07a"}, + {file = "sqlalchemy-2.0.40.tar.gz", hash = "sha256:d827099289c64589418ebbcaead0145cd19f4e3e8a93919a0100247af245fa00"}, ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +greenlet = {version = ">=1", markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} typing-extensions = ">=4.6.0" [package.extras] -aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] -aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] -aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing_extensions (!=3.10.0.1)"] -asyncio = ["greenlet (!=0.4.17)"] -asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (>=1)"] +aioodbc = ["aioodbc", "greenlet (>=1)"] +aiosqlite = ["aiosqlite", "greenlet (>=1)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (>=1)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (>=1)"] mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] mssql = ["pyodbc"] mssql-pymssql = ["pymssql"] @@ -3639,7 +3747,7 @@ mysql-connector = ["mysql-connector-python"] oracle = ["cx_oracle (>=8)"] oracle-oracledb = ["oracledb (>=1.0.1)"] postgresql = ["psycopg2 (>=2.7)"] -postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] +postgresql-asyncpg = ["asyncpg", "greenlet (>=1)"] postgresql-pg8000 = ["pg8000 (>=1.29.1)"] postgresql-psycopg = ["psycopg (>=3.0.7)"] postgresql-psycopg2binary = ["psycopg2-binary"] @@ -3830,24 +3938,24 @@ files = [ [[package]] name = "typing-extensions" -version = "4.12.2" +version = "4.13.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, + {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, + {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, ] [[package]] name = "tzdata" -version = "2025.1" +version = "2025.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"}, - {file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"}, + {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, + {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, ] [[package]] @@ -3866,13 +3974,13 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.3.0" +version = "2.4.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" files = [ - {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, - {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, + {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, + {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, ] [package.extras] @@ -3949,13 +4057,13 @@ watchdog = ["watchdog (>=2.3)"] [[package]] name = "widgetsnbextension" -version = "4.0.13" +version = "4.0.14" description = "Jupyter interactive widgets for Jupyter Notebook" optional = false python-versions = ">=3.7" files = [ - {file = "widgetsnbextension-4.0.13-py3-none-any.whl", hash = "sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71"}, - {file = "widgetsnbextension-4.0.13.tar.gz", hash = "sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6"}, + {file = "widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575"}, + {file = "widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af"}, ] [[package]] @@ -4048,101 +4156,123 @@ files = [ [[package]] name = "yarl" -version = "1.18.3" +version = "1.20.0" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, - {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, - {file = "yarl-1.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed"}, - {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde"}, - {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b"}, - {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5"}, - {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc"}, - {file = "yarl-1.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd"}, - {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990"}, - {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db"}, - {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62"}, - {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760"}, - {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b"}, - {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690"}, - {file = "yarl-1.18.3-cp310-cp310-win32.whl", hash = "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6"}, - {file = "yarl-1.18.3-cp310-cp310-win_amd64.whl", hash = "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8"}, - {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069"}, - {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193"}, - {file = "yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889"}, - {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8"}, - {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca"}, - {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8"}, - {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae"}, - {file = "yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3"}, - {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb"}, - {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e"}, - {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59"}, - {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d"}, - {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e"}, - {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a"}, - {file = "yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1"}, - {file = "yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5"}, - {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50"}, - {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576"}, - {file = "yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640"}, - {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2"}, - {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75"}, - {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512"}, - {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba"}, - {file = "yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb"}, - {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272"}, - {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6"}, - {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e"}, - {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb"}, - {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393"}, - {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285"}, - {file = "yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2"}, - {file = "yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477"}, - {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb"}, - {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa"}, - {file = "yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782"}, - {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0"}, - {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482"}, - {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186"}, - {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58"}, - {file = "yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53"}, - {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2"}, - {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8"}, - {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1"}, - {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a"}, - {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10"}, - {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8"}, - {file = "yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d"}, - {file = "yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c"}, - {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04"}, - {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719"}, - {file = "yarl-1.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e"}, - {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee"}, - {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789"}, - {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8"}, - {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c"}, - {file = "yarl-1.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5"}, - {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1"}, - {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24"}, - {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318"}, - {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985"}, - {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910"}, - {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1"}, - {file = "yarl-1.18.3-cp39-cp39-win32.whl", hash = "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5"}, - {file = "yarl-1.18.3-cp39-cp39-win_amd64.whl", hash = "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9"}, - {file = "yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b"}, - {file = "yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1"}, + {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f1f6670b9ae3daedb325fa55fbe31c22c8228f6e0b513772c2e1c623caa6ab22"}, + {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85a231fa250dfa3308f3c7896cc007a47bc76e9e8e8595c20b7426cac4884c62"}, + {file = "yarl-1.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a06701b647c9939d7019acdfa7ebbfbb78ba6aa05985bb195ad716ea759a569"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7595498d085becc8fb9203aa314b136ab0516c7abd97e7d74f7bb4eb95042abe"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af5607159085dcdb055d5678fc2d34949bd75ae6ea6b4381e784bbab1c3aa195"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95b50910e496567434cb77a577493c26bce0f31c8a305135f3bda6a2483b8e10"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b594113a301ad537766b4e16a5a6750fcbb1497dcc1bc8a4daae889e6402a634"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:083ce0393ea173cd37834eb84df15b6853b555d20c52703e21fbababa8c129d2"}, + {file = "yarl-1.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1a350a652bbbe12f666109fbddfdf049b3ff43696d18c9ab1531fbba1c977a"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fb0caeac4a164aadce342f1597297ec0ce261ec4532bbc5a9ca8da5622f53867"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d88cc43e923f324203f6ec14434fa33b85c06d18d59c167a0637164863b8e995"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e52d6ed9ea8fd3abf4031325dc714aed5afcbfa19ee4a89898d663c9976eb487"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ce360ae48a5e9961d0c730cf891d40698a82804e85f6e74658fb175207a77cb2"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:06d06c9d5b5bc3eb56542ceeba6658d31f54cf401e8468512447834856fb0e61"}, + {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c27d98f4e5c4060582f44e58309c1e55134880558f1add7a87c1bc36ecfade19"}, + {file = "yarl-1.20.0-cp310-cp310-win32.whl", hash = "sha256:f4d3fa9b9f013f7050326e165c3279e22850d02ae544ace285674cb6174b5d6d"}, + {file = "yarl-1.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc906b636239631d42eb8a07df8359905da02704a868983265603887ed68c076"}, + {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fdb5204d17cb32b2de2d1e21c7461cabfacf17f3645e4b9039f210c5d3378bf3"}, + {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eaddd7804d8e77d67c28d154ae5fab203163bd0998769569861258e525039d2a"}, + {file = "yarl-1.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:634b7ba6b4a85cf67e9df7c13a7fb2e44fa37b5d34501038d174a63eaac25ee2"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d409e321e4addf7d97ee84162538c7258e53792eb7c6defd0c33647d754172e"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ea52f7328a36960ba3231c6677380fa67811b414798a6e071c7085c57b6d20a9"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8703517b924463994c344dcdf99a2d5ce9eca2b6882bb640aa555fb5efc706a"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:077989b09ffd2f48fb2d8f6a86c5fef02f63ffe6b1dd4824c76de7bb01e4f2e2"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0acfaf1da020253f3533526e8b7dd212838fdc4109959a2c53cafc6db611bff2"}, + {file = "yarl-1.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4230ac0b97ec5eeb91d96b324d66060a43fd0d2a9b603e3327ed65f084e41f8"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a6a1e6ae21cdd84011c24c78d7a126425148b24d437b5702328e4ba640a8902"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:86de313371ec04dd2531f30bc41a5a1a96f25a02823558ee0f2af0beaa7ca791"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dd59c9dd58ae16eaa0f48c3d0cbe6be8ab4dc7247c3ff7db678edecbaf59327f"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a0bc5e05f457b7c1994cc29e83b58f540b76234ba6b9648a4971ddc7f6aa52da"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c9471ca18e6aeb0e03276b5e9b27b14a54c052d370a9c0c04a68cefbd1455eb4"}, + {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:40ed574b4df723583a26c04b298b283ff171bcc387bc34c2683235e2487a65a5"}, + {file = "yarl-1.20.0-cp311-cp311-win32.whl", hash = "sha256:db243357c6c2bf3cd7e17080034ade668d54ce304d820c2a58514a4e51d0cfd6"}, + {file = "yarl-1.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:8c12cd754d9dbd14204c328915e23b0c361b88f3cffd124129955e60a4fbfcfb"}, + {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e06b9f6cdd772f9b665e5ba8161968e11e403774114420737f7884b5bd7bdf6f"}, + {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b9ae2fbe54d859b3ade40290f60fe40e7f969d83d482e84d2c31b9bff03e359e"}, + {file = "yarl-1.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d12b8945250d80c67688602c891237994d203d42427cb14e36d1a732eda480e"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:087e9731884621b162a3e06dc0d2d626e1542a617f65ba7cc7aeab279d55ad33"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69df35468b66c1a6e6556248e6443ef0ec5f11a7a4428cf1f6281f1879220f58"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b2992fe29002fd0d4cbaea9428b09af9b8686a9024c840b8a2b8f4ea4abc16f"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c903e0b42aab48abfbac668b5a9d7b6938e721a6341751331bcd7553de2dcae"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf099e2432131093cc611623e0b0bcc399b8cddd9a91eded8bfb50402ec35018"}, + {file = "yarl-1.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a7f62f5dc70a6c763bec9ebf922be52aa22863d9496a9a30124d65b489ea672"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:54ac15a8b60382b2bcefd9a289ee26dc0920cf59b05368c9b2b72450751c6eb8"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:25b3bc0763a7aca16a0f1b5e8ef0f23829df11fb539a1b70476dcab28bd83da7"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b2586e36dc070fc8fad6270f93242124df68b379c3a251af534030a4a33ef594"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:866349da9d8c5290cfefb7fcc47721e94de3f315433613e01b435473be63daa6"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:33bb660b390a0554d41f8ebec5cd4475502d84104b27e9b42f5321c5192bfcd1"}, + {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:737e9f171e5a07031cbee5e9180f6ce21a6c599b9d4b2c24d35df20a52fabf4b"}, + {file = "yarl-1.20.0-cp312-cp312-win32.whl", hash = "sha256:839de4c574169b6598d47ad61534e6981979ca2c820ccb77bf70f4311dd2cc64"}, + {file = "yarl-1.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:3d7dbbe44b443b0c4aa0971cb07dcb2c2060e4a9bf8d1301140a33a93c98e18c"}, + {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f"}, + {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3"}, + {file = "yarl-1.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0"}, + {file = "yarl-1.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e"}, + {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384"}, + {file = "yarl-1.20.0-cp313-cp313-win32.whl", hash = "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62"}, + {file = "yarl-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c"}, + {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051"}, + {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d"}, + {file = "yarl-1.20.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5"}, + {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd"}, + {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f"}, + {file = "yarl-1.20.0-cp313-cp313t-win32.whl", hash = "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac"}, + {file = "yarl-1.20.0-cp313-cp313t-win_amd64.whl", hash = "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe"}, + {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:119bca25e63a7725b0c9d20ac67ca6d98fa40e5a894bd5d4686010ff73397914"}, + {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:35d20fb919546995f1d8c9e41f485febd266f60e55383090010f272aca93edcc"}, + {file = "yarl-1.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:484e7a08f72683c0f160270566b4395ea5412b4359772b98659921411d32ad26"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d8a3d54a090e0fff5837cd3cc305dd8a07d3435a088ddb1f65e33b322f66a94"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f0cf05ae2d3d87a8c9022f3885ac6dea2b751aefd66a4f200e408a61ae9b7f0d"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a884b8974729e3899d9287df46f015ce53f7282d8d3340fa0ed57536b440621c"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8d8aa8dd89ffb9a831fedbcb27d00ffd9f4842107d52dc9d57e64cb34073d5c"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4e88d6c3c8672f45a30867817e4537df1bbc6f882a91581faf1f6d9f0f1b5a"}, + {file = "yarl-1.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdb77efde644d6f1ad27be8a5d67c10b7f769804fff7a966ccb1da5a4de4b656"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4ba5e59f14bfe8d261a654278a0f6364feef64a794bd456a8c9e823071e5061c"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d0bf955b96ea44ad914bc792c26a0edcd71b4668b93cbcd60f5b0aeaaed06c64"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:27359776bc359ee6eaefe40cb19060238f31228799e43ebd3884e9c589e63b20"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:04d9c7a1dc0a26efb33e1acb56c8849bd57a693b85f44774356c92d610369efa"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:faa709b66ae0e24c8e5134033187a972d849d87ed0a12a0366bedcc6b5dc14a5"}, + {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:44869ee8538208fe5d9342ed62c11cc6a7a1af1b3d0bb79bb795101b6e77f6e0"}, + {file = "yarl-1.20.0-cp39-cp39-win32.whl", hash = "sha256:b7fa0cb9fd27ffb1211cde944b41f5c67ab1c13a13ebafe470b1e206b8459da8"}, + {file = "yarl-1.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:d4fad6e5189c847820288286732075f213eabf81be4d08d6cc309912e62be5b7"}, + {file = "yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124"}, + {file = "yarl-1.20.0.tar.gz", hash = "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307"}, ] [package.dependencies] idna = ">=2.0" multidict = ">=4.0" -propcache = ">=0.2.0" +propcache = ">=0.2.1" [metadata] lock-version = "2.0" python-versions = ">=3.10" -content-hash = "e38fb639b36e8633765caf21b5fba93ccc97d36c50c392caef8b18b5e08e333b" +content-hash = "9063f84b683f71d20643225d6bee951a679c4ac916c44509792e8c3010ee5bdc" diff --git a/pyproject.toml b/pyproject.toml index 5703678f..df8d0593 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ exclude = ["tests", "static", "examples", "docs"] [tool.poetry.dependencies] python = ">=3.10" wrapt = ">=1.16.0" -Flask = "^3.1.0" +Flask = ">=3.1.0" Flask-Migrate = ">=2.6.0" Flask-Cors = ">=3.0.9,<5.0.0" SQLAlchemy = ">=2.0.18" From 8bad859600f235bfe4541154d5b282e07be3c64d Mon Sep 17 00:00:00 2001 From: marcvanduyn Date: Sun, 27 Apr 2025 23:52:35 +0200 Subject: [PATCH 3/3] Fix flake warnings --- investing_algorithm_framework/__init__.py | 2 +- .../domain/data_provider.py | 22 +++++----- .../domain/exceptions.py | 1 + .../models/backtesting/backtest_report.py | 15 +------ .../domain/order_executor.py | 3 +- .../domain/portfolio_provider.py | 6 ++- .../domain/utils/__init__.py | 3 +- .../download_data.py | 19 +------- .../infrastructure/data_providers/__init__.py | 1 + .../infrastructure/data_providers/ccxt.py | 17 ++++---- .../data_provider_service.py | 43 +++++-------------- 11 files changed, 44 insertions(+), 88 deletions(-) diff --git a/investing_algorithm_framework/__init__.py b/investing_algorithm_framework/__init__.py index bfa3c84a..425311b0 100644 --- a/investing_algorithm_framework/__init__.py +++ b/investing_algorithm_framework/__init__.py @@ -78,4 +78,4 @@ "Context", "APPLICATION_DIRECTORY", "download" -] \ No newline at end of file +] diff --git a/investing_algorithm_framework/domain/data_provider.py b/investing_algorithm_framework/domain/data_provider.py index fb17a41f..b528cbb3 100644 --- a/investing_algorithm_framework/domain/data_provider.py +++ b/investing_algorithm_framework/domain/data_provider.py @@ -1,4 +1,4 @@ -from typing import Optional, List +from typing import List from abc import ABC, abstractmethod from datetime import datetime from investing_algorithm_framework.domain import TradingDataType, TimeFrame @@ -45,9 +45,9 @@ def __init__( symbol: str = None, markets: list = None, priority: int = 0, - time_frame = None, - window_size = None, - storage_path = None, + time_frame=None, + window_size=None, + storage_path=None, market_credentials: List = None, ): """ @@ -113,7 +113,7 @@ def has_data( time_frame: str = None, start_date: datetime = None, end_date: datetime = None, - window_size = None, + window_size=None, ) -> None: """ Checks if the data provider has data for the given parameters. @@ -130,9 +130,9 @@ def get_data( time_frame: str = None, start_date: datetime = None, end_date: datetime = None, - storage_path = None, - window_size = None, - pandas = False, + storage_path=None, + window_size=None, + pandas=False, ): """ Fetches data for a given symbol and date range. @@ -147,7 +147,7 @@ def pre_pare_backtest_data( symbol: str = None, market: str = None, time_frame: str = None, - window_size = None, + window_size=None, ) -> None: """ Prepares backtest data for a given symbol and date range. @@ -163,8 +163,8 @@ def get_backtest_data( time_frame: str = None, backtest_start_date: datetime = None, backtest_end_date: datetime = None, - window_size = None, - pandas = False, + window_size=None, + pandas=False, ) -> None: """ Fetches backtest data for a given symbol and date range. diff --git a/investing_algorithm_framework/domain/exceptions.py b/investing_algorithm_framework/domain/exceptions.py index 2ea339a7..6396b851 100644 --- a/investing_algorithm_framework/domain/exceptions.py +++ b/investing_algorithm_framework/domain/exceptions.py @@ -61,6 +61,7 @@ def to_response(self): "message": self.error_message } + class NetworkError(Exception): """ Class NetworkError: Exception class indicating a problem occurred diff --git a/investing_algorithm_framework/domain/models/backtesting/backtest_report.py b/investing_algorithm_framework/domain/models/backtesting/backtest_report.py index f478c0ab..b1241692 100644 --- a/investing_algorithm_framework/domain/models/backtesting/backtest_report.py +++ b/investing_algorithm_framework/domain/models/backtesting/backtest_report.py @@ -1,4 +1,4 @@ -from typing import List, Set, Dict +from typing import List, Set from datetime import datetime from logging import getLogger @@ -503,17 +503,6 @@ def from_dict(data): return report - def get_trades(self, symbol=None): - """ - Function to get trades. If a symbol is provided, it will - return the trades for that symbol. If no symbol is provided, - it will return all the trades. - """ - if symbol is None: - return self.trades - - return [trade for trade in self.trades if trade.symbol == symbol] - def get_profit(self) -> float: return self._total_net_gain @@ -635,7 +624,6 @@ def get_orders( if order.created_at < created_at_lt ] - if target_symbol is not None: selection = [ order for order in selection @@ -700,7 +688,6 @@ def get_symbols(self) -> Set[str]: """ unique_symbols = set() - for order in self.orders: if order.target_symbol not in self.symbols: unique_symbols.add(order.target_symbol) diff --git a/investing_algorithm_framework/domain/order_executor.py b/investing_algorithm_framework/domain/order_executor.py index 689136ed..8f788d01 100644 --- a/investing_algorithm_framework/domain/order_executor.py +++ b/investing_algorithm_framework/domain/order_executor.py @@ -29,8 +29,7 @@ def market_credentials(self, credentials): Args: value (dict): A dictionary containing the market credentials. """ - self._market_credentials = value - + self._market_credentials = credentials @abstractmethod def execute_order(self, order): diff --git a/investing_algorithm_framework/domain/portfolio_provider.py b/investing_algorithm_framework/domain/portfolio_provider.py index 677f79b7..13bb473f 100644 --- a/investing_algorithm_framework/domain/portfolio_provider.py +++ b/investing_algorithm_framework/domain/portfolio_provider.py @@ -8,9 +8,11 @@ class PortfolioProvider(ABC): Attributes: portfolio_id (str): The unique identifier for the portfolio. - user_id (str): The unique identifier for the user associated with the portfolio. + user_id (str): The unique identifier for the user associated + with the portfolio. balance (float): The current balance of the portfolio. - assets (dict): A dictionary containing the assets in the portfolio and their quantities. + assets (dict): A dictionary containing the assets in the + portfolio and their quantities. """ @abstractmethod diff --git a/investing_algorithm_framework/domain/utils/__init__.py b/investing_algorithm_framework/domain/utils/__init__.py index d7316e2e..514b523f 100644 --- a/investing_algorithm_framework/domain/utils/__init__.py +++ b/investing_algorithm_framework/domain/utils/__init__.py @@ -1,6 +1,7 @@ from .backtesting import pretty_print_backtest, load_backtest_report, \ pretty_print_backtest_reports_evaluation, load_backtest_reports, \ - get_backtest_report, pretty_print_positions, pretty_print_trades, pretty_print_orders + get_backtest_report, pretty_print_positions, pretty_print_trades, \ + pretty_print_orders from .csv import get_total_amount_of_rows, append_dict_as_row_to_csv, \ add_column_headers_to_csv, csv_to_list, load_csv_into_dict from .random import random_string diff --git a/investing_algorithm_framework/download_data.py b/investing_algorithm_framework/download_data.py index 24616004..a51d4862 100644 --- a/investing_algorithm_framework/download_data.py +++ b/investing_algorithm_framework/download_data.py @@ -1,5 +1,4 @@ from dateutil import parser -from datetime import datetime from investing_algorithm_framework.services import DataProviderService, \ ConfigurationService, MarketCredentialService from investing_algorithm_framework.infrastructure import \ @@ -8,8 +7,8 @@ def download( symbol: str, - market = None, - date = None, + market=None, + date=None, time_frame: str = None, data_type: str = "ohlcv", start_date: str = None, @@ -69,17 +68,3 @@ def download( save=save, storage_path=storage_path ) - -if __name__ == "__main__": - # Example usage - data = download( - symbol="DOT/EUR", - market="bitvavo", - data_type="ohlcv", - window_size=200, - pandas=False, - save=False, - storage_path="./data", - time_frame="1d", - ) - print(len(data)) diff --git a/investing_algorithm_framework/infrastructure/data_providers/__init__.py b/investing_algorithm_framework/infrastructure/data_providers/__init__.py index be4b42d0..958cf726 100644 --- a/investing_algorithm_framework/infrastructure/data_providers/__init__.py +++ b/investing_algorithm_framework/infrastructure/data_providers/__init__.py @@ -12,6 +12,7 @@ def get_default_data_providers(): CCXTDataProvider(), ] + __all__ = [ 'CCXTDataProvider', 'get_default_data_providers', diff --git a/investing_algorithm_framework/infrastructure/data_providers/ccxt.py b/investing_algorithm_framework/infrastructure/data_providers/ccxt.py index f1092cdb..c3ce112f 100644 --- a/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +++ b/investing_algorithm_framework/infrastructure/data_providers/ccxt.py @@ -13,7 +13,6 @@ logger = logging.getLogger("investing_algorithm_framework") - class CCXTDataProvider(DataProvider): """ """ @@ -29,7 +28,7 @@ def __init__( symbol=None, time_frame=None, window_size=None, - priority = 1 + priority=1 ): super().__init__( data_type=data_type, @@ -134,12 +133,13 @@ def has_data( symbols = list(symbols.keys()) return symbol in symbols - except ccxt.NetworkError as e: + except ccxt.NetworkError: raise NetworkError( "Network error occurred, make sure you have " "an active internet connection" ) - except Exception as e: + + except Exception: return False def get_data( @@ -161,7 +161,8 @@ def get_data( if market is None: raise OperationalException( - "Market is not set. Please set the market before calling get_data." + "Market is not set. Please set the market " + "before calling get_data." ) if symbol is None: @@ -169,7 +170,8 @@ def get_data( if symbol is None: raise OperationalException( - "Symbol is not set. Please set the symbol before calling get_data." + "Symbol is not set. Please set the symbol " + "before calling get_data." ) if data_type is None: @@ -195,7 +197,6 @@ def get_data( if end_date is None: end_date = datetime.now(tz=timezone.utc) - if start_date is None: if date is not None: @@ -309,4 +310,4 @@ def get_ohlcv( def create_start_date(self, end_date, time_frame, window_size): minutes = TimeFrame.from_value(time_frame).amount_of_minutes - return end_date - timedelta(minutes=window_size * minutes) \ No newline at end of file + return end_date - timedelta(minutes=window_size * minutes) diff --git a/investing_algorithm_framework/services/market_data_source_service/data_provider_service.py b/investing_algorithm_framework/services/market_data_source_service/data_provider_service.py index 74419f0e..c572a70d 100644 --- a/investing_algorithm_framework/services/market_data_source_service/data_provider_service.py +++ b/investing_algorithm_framework/services/market_data_source_service/data_provider_service.py @@ -46,9 +46,9 @@ def find_data_provider( time_frame=time_frame, ): matching_providers.append(provider) - except NetworkError as e: + except NetworkError: number_of_network_errors += 1 - except Exception as e: + except Exception: pass if len(matching_providers) == 0 and number_of_network_errors > 0: @@ -61,6 +61,7 @@ def find_data_provider( matching_providers.sort(key=lambda p: p.priority) return matching_providers[0] if matching_providers else None + class DataProviderService: data_providers: List[DataProvider] = [] default_data_providers: List[DataProvider] = [ @@ -86,42 +87,18 @@ def __init__( self.configuration_service = configuration_service self.market_credentials_service = market_credentials_service - def _initialize_data_providers(self): - """ - Initialize all data providers. - - This function will call the load_markets and load_symbols - methods of all data providers to load the markets and - symbols for each data provider. It will also create a - DataProviderIndex to index the data providers by symbol - and market. - """ - pass - - # if len(self.data_providers) == 0: - # logger.info( - # "No custom data providers found, using default data providers" - # ) - - # for provider in self.default_data_providers: - # provider.load_markets() - # provider.load_symbols() - - # Create all indexes - # self.data_provider_index = DataProviderIndex(self.data_providers) - def get_data( self, symbol: str, - data_type = None, + data_type=None, date: datetime = None, market: str = None, time_frame: str = None, start_date: datetime = None, end_date: datetime = None, - storage_path = None, - window_size = None, - pandas = False, + storage_path=None, + window_size=None, + pandas=False, save: bool = False, ): """ @@ -188,7 +165,9 @@ def _throw_no_data_provider_exception(self, params): f"No data provider found for the given parameters: {params}" ) - def add_data_provider(self, data_provider: DataProvider, priority: int = 0): + def add_data_provider( + self, data_provider: DataProvider, priority: int = 0 + ): """ Add a data provider to the service. @@ -197,4 +176,4 @@ def add_data_provider(self, data_provider: DataProvider, priority: int = 0): priority (int): The priority of the data provider. """ self.data_providers.append(data_provider) - self.data_providers.sort(key=lambda x: x.priority, reverse=True) \ No newline at end of file + self.data_providers.sort(key=lambda x: x.priority, reverse=True)