wbportfolio 1.54.15__tar.gz → 1.54.17__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of wbportfolio might be problematic. Click here for more details.
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/PKG-INFO +1 -1
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/orders/order_proposals.py +53 -56
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/pms/trading/handler.py +26 -27
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/orders/order_proposals.py +7 -2
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/orders/test_order_proposals.py +30 -4
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/orders.py +21 -17
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/.gitignore +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/LICENSE +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/pyproject.toml +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/asset.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/indexes.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/orders/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/orders/order_proposals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/orders/orders.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/portfolio_relationships.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/product_groups.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/rebalancing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/reconciliations.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/registers.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/transactions/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/transactions/claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/transactions/dividends.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/transactions/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/admin/transactions/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/analysis/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/analysis/claims.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/apps.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/admin.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/apps.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/configs/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/configs/display.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/configs/endpoints.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/configs/previews.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/constants.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/dynamic_preferences_registry.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/factories.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/filters.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/management.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/migrations/0001_initial.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/migrations/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/models.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/scripts.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/serializers.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/tasks.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/tests/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/tests/conftest.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/tests/test_models.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/urls.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/viewsets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/defaults/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/defaults/fees/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/defaults/fees/default.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/dynamic_preferences_registry.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/adjustments.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/dividends.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/indexes.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/orders/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/orders/order_proposals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/orders/orders.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/portfolio_cash_targets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/portfolio_swing_pricings.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/product_groups.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/rebalancing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/reconciliations.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/fdm/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/fdm/tasks.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/assets_and_net_new_money_progression.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/esg.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/orders/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/orders/orders.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/performances.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/positions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/signals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/transactions/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/transactions/claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/transactions/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/transactions/mixins.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/transactions/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/filters/transactions/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/fixtures/product_factsheets.yaml +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/fixtures/wbportfolio.yaml.gz +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/fixtures/wbrisk_management.yaml.gz +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/refinitiv/adjustment.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/ubs/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/ubs/asset_position.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/ubs/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/ubs/instrument_price.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/ubs/mixin.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/wbfdm/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/wbfdm/adjustment.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/wbfdm/dividend.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/backends/wbfdm/mixin.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/handlers/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/handlers/adjustment.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/handlers/asset_position.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/handlers/dividend.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/handlers/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/handlers/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/handlers/register.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/handlers/trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/default_mapping.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/jpmorgan/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/jpmorgan/customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/jpmorgan/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/jpmorgan/strategy.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/jpmorgan/valuation.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/leonteq/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/leonteq/customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/leonteq/equity.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/leonteq/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/leonteq/trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/leonteq/valuation.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/d1_customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/d1_equity.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/d1_fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/d1_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/d1_valuation.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/dividend.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/equity.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/natixis/valuation.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/refinitiv/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/refinitiv/adjustment.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/custodian_positions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/customer_trade_pending_slk.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/customer_trade_slk.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/customer_trade_without_pw.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/equity.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/perf_fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/portfolio_future_cash_flow.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/registers.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/sylk.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/sg_lux/valuation.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/societe_generale/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/societe_generale/customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/societe_generale/strategy.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/societe_generale/valuation.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/tellco/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/tellco/customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/tellco/equity.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/tellco/valuation.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/ubs/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/ubs/api/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/ubs/api/asset_position.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/ubs/api/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/ubs/api/instrument_price.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/ubs/api/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/ubs/customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/ubs/equity.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/ubs/historical_customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/ubs/valuation.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/asset_position.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/historical_customer_trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/instrument.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/management_fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/performance_fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/trade.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/valuation.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/parsers/vontobel/valuation_api.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/resources/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/resources/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/resources/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/import_export/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/jinja2/wbportfolio/sql/aum_nnm.sql +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/kpi_handlers/nnm.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/locale/de/LC_MESSAGES/django.mo +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/locale/de/LC_MESSAGES/django.po +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/locale/en/LC_MESSAGES/django.mo +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/locale/en/LC_MESSAGES/django.po +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/locale/fr/LC_MESSAGES/django.mo +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/locale/fr/LC_MESSAGES/django.po +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/metric/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/metric/backends/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/metric/backends/base.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/metric/backends/constants.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/metric/backends/portfolio_base.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/metric/backends/portfolio_esg.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/metric/tests/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/metric/tests/conftest.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/metric/tests/test_portfolio_base.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/metric/tests/test_portfolio_esg.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0001_initial_squashed.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0002_product_default_sub_account_squashed_0039_alter_assetallocation_company_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0040_instrument_financial_instrument.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0041_remove_listresearch_research_ptr_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0042_instrumentlist_instrumentlistthroughmodel_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0043_alter_instrumentlistthroughmodel_options_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0044_alter_instrumentlist_identifier.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0045_alter_instrument_financial_instrument.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0046_add_product_default_account.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0047_remove_product_default_sub_account.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0048_alter_trade_status.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0049_trade_claimed_shares.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0050_fees_fee_date_fees_wbportfolio_transac_1f7a29_idx.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0051_delete_macroreview.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0052_remove_cash_instrument_ptr_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0053_remove_product_group.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0054_portfolioinstrumentpreferredclassificationthroughmodel_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0055_remove_product__custom_management_rebates_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0056_remove_companyportfoliodata_assets_under_management_currency_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0057_alter_portfolio_preferred_instrument_classifications_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0058_pmsinstrument.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0059_fees_unique_fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0060_alter_portfolioportfoliothroughmodel_type.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0061_portfolio_bank_accounts_product_bank_account_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0062_alter_dailyportfoliocashflow_options.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0063_accountreconciliation_accountreconciliationline_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0064_alter_portfolio_managers_portfolio_is_tracked_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0065_alter_portfolio_managers_claim_as_shares_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0066_assetposition_initial_shares_at_custodian_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0067_assetposition_unique_asset_position.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0068_trade_internal_trade_trade_marked_as_internal_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0069_remove_portfolio_is_invested_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0070_remove_assetposition_unique_asset_position_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0071_alter_trade_options_alter_trade_order.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0072_trade_diff_shares.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0073_remove_product_price_computation_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0074_alter_rebalancer_frequency_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0075_portfolio_initial_position_date_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0076_alter_dividendtransaction_price_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0077_remove_transaction_currency_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0078_trade_drift_factor.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0079_alter_trade_drift_factor.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0080_alter_trade_drift_factor_alter_trade_weighting.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0081_alter_trade_drift_factor.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0082_remove_tradeproposal_creator_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/0083_order_alter_trade_options_and_more.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/migrations/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/adjustments.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/asset.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/exceptions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/graphs/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/graphs/portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/graphs/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/indexes.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/llm/wbcrm/analyze_relationship.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/mixins/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/mixins/instruments.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/mixins/liquidity_stress_test.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/orders/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/orders/orders.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/portfolio_cash_targets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/portfolio_relationship.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/portfolio_swing_pricings.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/product_groups.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/rebalancing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/reconciliations/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/reconciliations/account_reconciliation_lines.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/reconciliations/account_reconciliations.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/reconciliations/reconciliations.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/registers.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/signals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/transactions/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/transactions/claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/transactions/dividends.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/transactions/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/transactions/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/transactions/transactions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/models/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/permissions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/pms/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/pms/analytics/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/pms/analytics/portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/pms/analytics/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/pms/statistics/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/pms/trading/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/pms/typing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/preferences.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/rebalancing/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/rebalancing/base.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/rebalancing/decorators.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/rebalancing/models/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/rebalancing/models/composite.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/rebalancing/models/equally_weighted.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/rebalancing/models/market_capitalization_weighted.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/rebalancing/models/model_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/reports/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/reports/monthly_position_report.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/accounts.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/controversy_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/exposure_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/instrument_list_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/liquidity_risk.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/liquidity_stress_instrument.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/mixins.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/product_integrity.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/stop_loss_instrument.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/stop_loss_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/backends/ucits_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/conftest.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/test_accounts.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/test_controversy_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/test_exposure_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/test_instrument_list_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/test_liquidity_risk.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/test_product_integrity.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/test_stop_loss_instrument.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/test_stop_loss_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/risk_management/tests/test_ucits_portfolio.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/adjustments.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/orders/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/orders/orders.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/portfolio_cash_targets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/portfolio_relationship.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/portfolio_swing_pricing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/positions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/product_group.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/rebalancing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/reconciliations.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/registers.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/signals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/transactions/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/transactions/claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/transactions/dividends.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/transactions/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/transactions/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/static/wbportfolio/css/macro_review.css +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/static/wbportfolio/markdown/documentation/account_holding_reconciliation.md +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/static/wbportfolio/markdown/documentation/aggregate_asset_position_liquidity.md +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/static/wbportfolio/markdown/documentation/company.md +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/static/wbportfolio/markdown/documentation/earnings_instrument.md +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/static/wbportfolio/markdown/documentation/financial_analysis_instrument_ratios.md +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/static/wbportfolio/markdown/documentation/financial_statistics.md +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/static/wbportfolio/markdown/documentation/person.md +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tasks.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/templates/portfolio/email/customer_report.html +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/templates/portfolio/email/customer_trade_notification.html +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/templates/portfolio/email/email_base_template.html +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/templates/portfolio/email/rebalancing_report.html +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/templates/portfolio/macro/macro_review.html +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/conftest.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/orders/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_account_reconciliation.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_customer_trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_dividends.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_imports.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_instrument_mixins.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_merge.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_portfolio_cash_targets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_portfolio_swing_pricings.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_product_groups.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/test_splits.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/transactions/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/transactions/test_claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/transactions/test_fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/transactions/test_rebalancing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/transactions/test_trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/pms/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/pms/test_analytics.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/rebalancing/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/rebalancing/test_models.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/serializers/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/serializers/test_claims.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/signals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/tests.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/viewsets/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/viewsets/test_assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/viewsets/test_performances.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/viewsets/test_products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/viewsets/transactions/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/viewsets/transactions/test_claims.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/urls.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/utils.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/adjustments.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/assets_and_net_new_money_progression.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/charts/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/charts/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/adjustments.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/claims.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/mixins.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/reconciliations.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/registers.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/signals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/buttons/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/adjustments.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/esg.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/portfolio_relationship.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/positions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/product_groups.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/product_performance.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/rebalancing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/reconciliations.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/registers.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/display/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/adjustments.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/esg.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/portfolio_relationship.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/positions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/product_groups.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/product_performance.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/rebalancing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/reconciliations.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/endpoints/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/adjustments.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/instrument_prices.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/positions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/product_groups.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/product_performance.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/reconciliations.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/registers.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/menu/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/previews/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/previews/portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/adjustments.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/assets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/assets_and_net_new_money_progression.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/esg.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/instrument_prices.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/positions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/product_groups.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/product_performance.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/registers.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/configs/titles/trades.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/custodians.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/esg.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/mixins.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/buttons/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/buttons/order_proposals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/buttons/orders.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/displays/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/displays/order_proposals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/displays/orders.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/endpoints/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/endpoints/order_proposals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/endpoints/orders.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/titles/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/configs/titles/orders.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/orders/order_proposals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/portfolio_cash_targets.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/portfolio_relationship.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/portfolio_swing_pricing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/portfolios.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/positions.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/product_groups.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/product_performance.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/products.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/rebalancing.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/reconciliations.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/registers.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/roles.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/signals.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/transactions/__init__.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/transactions/claim.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/transactions/fees.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/transactions/mixins.py +0 -0
- {wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/viewsets/transactions/trades.py +0 -0
|
@@ -24,7 +24,6 @@ from django_fsm import FSMField, transition
|
|
|
24
24
|
from pandas._libs.tslibs.offsets import BDay
|
|
25
25
|
from wbcompliance.models.risk_management.mixins import RiskCheckMixin
|
|
26
26
|
from wbcore.contrib.authentication.models import User
|
|
27
|
-
from wbcore.contrib.currency.models import Currency
|
|
28
27
|
from wbcore.contrib.icons import WBIcon
|
|
29
28
|
from wbcore.contrib.notifications.dispatch import send_notification
|
|
30
29
|
from wbcore.enums import RequestType
|
|
@@ -188,6 +187,7 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
188
187
|
effective_weight=Round(
|
|
189
188
|
F("contribution") / Value(portfolio_contribution), precision=Order.ORDER_WEIGHTING_PRECISION
|
|
190
189
|
),
|
|
190
|
+
tmp_effective_weight=F("contribution") / Value(portfolio_contribution),
|
|
191
191
|
target_weight=Round(F("effective_weight") + F("weighting"), precision=Order.ORDER_WEIGHTING_PRECISION),
|
|
192
192
|
effective_shares=Coalesce(
|
|
193
193
|
Subquery(
|
|
@@ -206,7 +206,7 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
206
206
|
)
|
|
207
207
|
total_effective_weight = orders.aggregate(s=models.Sum("effective_weight"))["s"] or Decimal("1")
|
|
208
208
|
with suppress(Order.DoesNotExist):
|
|
209
|
-
largest_order = orders.latest("
|
|
209
|
+
largest_order = orders.latest("effective_weight")
|
|
210
210
|
if quant_error := Decimal("1") - total_effective_weight:
|
|
211
211
|
orders = orders.annotate(
|
|
212
212
|
effective_weight=models.Case(
|
|
@@ -226,7 +226,7 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
226
226
|
def __str__(self) -> str:
|
|
227
227
|
return f"{self.portfolio.name}: {self.trade_date} ({self.status})"
|
|
228
228
|
|
|
229
|
-
def convert_to_portfolio(self, use_effective: bool = False) -> PortfolioDTO:
|
|
229
|
+
def convert_to_portfolio(self, use_effective: bool = False, with_cash: bool = True) -> PortfolioDTO:
|
|
230
230
|
"""
|
|
231
231
|
Data Transfer Object
|
|
232
232
|
Returns:
|
|
@@ -258,6 +258,7 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
258
258
|
except InvalidAnalyticPortfolio:
|
|
259
259
|
last_returns, portfolio_contribution = {}, 1
|
|
260
260
|
positions = []
|
|
261
|
+
total_weighting = Decimal("0")
|
|
261
262
|
for instrument, row in portfolio.items():
|
|
262
263
|
weighting = row["weighting"]
|
|
263
264
|
daily_return = Decimal(last_returns.get(instrument.id, 0))
|
|
@@ -285,6 +286,10 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
285
286
|
currency_fx_rate=row["currency_fx_rate"],
|
|
286
287
|
)
|
|
287
288
|
)
|
|
289
|
+
total_weighting += weighting
|
|
290
|
+
if with_cash and (cash_weight := Decimal("1") - total_weighting):
|
|
291
|
+
cash_position = self.get_estimated_target_cash(target_cash_weight=cash_weight)
|
|
292
|
+
positions.append(cash_position._build_dto())
|
|
288
293
|
return PortfolioDTO(positions)
|
|
289
294
|
|
|
290
295
|
# Start tools methods
|
|
@@ -325,7 +330,7 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
325
330
|
service = TradingService(
|
|
326
331
|
self.trade_date,
|
|
327
332
|
effective_portfolio=self._get_default_effective_portfolio(),
|
|
328
|
-
target_portfolio=self.convert_to_portfolio(),
|
|
333
|
+
target_portfolio=self.convert_to_portfolio(use_effective=False, with_cash=False),
|
|
329
334
|
total_target_weight=total_target_weight,
|
|
330
335
|
)
|
|
331
336
|
leftovers_orders = self.orders.all()
|
|
@@ -352,7 +357,7 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
352
357
|
return self.rebalancing_model.get_target_portfolio(
|
|
353
358
|
self.portfolio, self.trade_date, self.value_date, **params
|
|
354
359
|
)
|
|
355
|
-
return self.convert_to_portfolio()
|
|
360
|
+
return self.convert_to_portfolio(use_effective=False)
|
|
356
361
|
|
|
357
362
|
def _get_default_effective_portfolio(self):
|
|
358
363
|
return self.convert_to_portfolio(use_effective=True)
|
|
@@ -389,35 +394,34 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
389
394
|
orders = service.trades_batch.trades_map.values()
|
|
390
395
|
for order_dto in orders:
|
|
391
396
|
instrument = Instrument.objects.get(id=order_dto.underlying_instrument)
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
397
|
+
currency_fx_rate = instrument.currency.convert(
|
|
398
|
+
self.value_date, self.portfolio.currency, exact_lookup=True
|
|
399
|
+
)
|
|
400
|
+
# we cannot do a bulk-create because Order is a multi table inheritance
|
|
401
|
+
weighting = round(order_dto.delta_weight, Order.ORDER_WEIGHTING_PRECISION)
|
|
402
|
+
daily_return = order_dto.daily_return
|
|
403
|
+
try:
|
|
404
|
+
order = self.orders.get(underlying_instrument=instrument)
|
|
405
|
+
order.weighting = weighting
|
|
406
|
+
order.currency_fx_rate = currency_fx_rate
|
|
407
|
+
order.daily_return = daily_return
|
|
408
|
+
except Order.DoesNotExist:
|
|
409
|
+
order = Order(
|
|
410
|
+
underlying_instrument=instrument,
|
|
411
|
+
order_proposal=self,
|
|
412
|
+
value_date=self.trade_date,
|
|
413
|
+
weighting=weighting,
|
|
414
|
+
daily_return=daily_return,
|
|
415
|
+
currency_fx_rate=currency_fx_rate,
|
|
395
416
|
)
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
except Order.DoesNotExist:
|
|
405
|
-
order = Order(
|
|
406
|
-
underlying_instrument=instrument,
|
|
407
|
-
order_proposal=self,
|
|
408
|
-
value_date=self.trade_date,
|
|
409
|
-
weighting=weighting,
|
|
410
|
-
daily_return=daily_return,
|
|
411
|
-
currency_fx_rate=currency_fx_rate,
|
|
412
|
-
)
|
|
413
|
-
order.price = order.get_price()
|
|
414
|
-
order.order_type = Order.get_type(weighting, order_dto.previous_weight, order_dto.target_weight)
|
|
415
|
-
# if we cannot automatically find a price, we consider the stock is invalid and we sell it
|
|
416
|
-
if not order.price:
|
|
417
|
-
order.price = Decimal("0.0")
|
|
418
|
-
order.weighting = -order_dto.effective_weight
|
|
419
|
-
|
|
420
|
-
order.save()
|
|
417
|
+
order.price = order.get_price()
|
|
418
|
+
order.order_type = Order.get_type(weighting, order_dto.previous_weight, order_dto.target_weight)
|
|
419
|
+
# if we cannot automatically find a price, we consider the stock is invalid and we sell it
|
|
420
|
+
if not order.price:
|
|
421
|
+
order.price = Decimal("0.0")
|
|
422
|
+
order.weighting = -order_dto.effective_weight
|
|
423
|
+
|
|
424
|
+
order.save()
|
|
421
425
|
# final sanity check to make sure invalid order with effective and target weight of 0 are automatically removed:
|
|
422
426
|
self.get_orders().filter(target_weight=0, effective_weight=0).delete()
|
|
423
427
|
|
|
@@ -455,8 +459,8 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
455
459
|
last_order_proposal = self
|
|
456
460
|
last_order_proposal_created = False
|
|
457
461
|
while last_order_proposal and last_order_proposal.status == OrderProposal.Status.APPROVED:
|
|
462
|
+
logger.info(f"Replaying order proposal {last_order_proposal}")
|
|
458
463
|
if not last_order_proposal_created:
|
|
459
|
-
logger.info(f"Replaying order proposal {last_order_proposal}")
|
|
460
464
|
last_order_proposal.approve_workflow(
|
|
461
465
|
silent_exception=True,
|
|
462
466
|
force_reset_order=True,
|
|
@@ -557,50 +561,43 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
557
561
|
shares = math.floor(shares / round_lot_size) * round_lot_size
|
|
558
562
|
return shares
|
|
559
563
|
|
|
560
|
-
def get_estimated_target_cash(self,
|
|
564
|
+
def get_estimated_target_cash(self, target_cash_weight: Decimal | None = None) -> AssetPosition:
|
|
561
565
|
"""
|
|
562
566
|
Estimates the target cash weight and shares for a order proposal.
|
|
563
567
|
|
|
564
568
|
This method calculates the target cash weight by summing the weights of cash orders and adding any leftover weight from non-cash orders. It then estimates the target shares for this cash component if the portfolio is not only weighting-based.
|
|
565
569
|
|
|
566
570
|
Args:
|
|
567
|
-
|
|
571
|
+
target_cash_weight (Decimal): the expected target cash weight (Optional). If not provided, we estimate from the existing orders
|
|
568
572
|
|
|
569
573
|
Returns:
|
|
570
574
|
tuple[Decimal, Decimal]: A tuple containing the target cash weight and the estimated target shares.
|
|
571
575
|
"""
|
|
572
576
|
# Retrieve orders with base information
|
|
573
577
|
orders = self.get_orders()
|
|
578
|
+
currency = self.portfolio.currency
|
|
574
579
|
|
|
575
|
-
# Calculate the target
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
)
|
|
579
|
-
# if the specified currency match the portfolio's currency, we include the weight leftover to this cash compoenent
|
|
580
|
-
if currency == self.portfolio.currency:
|
|
581
|
-
# Calculate the total target weight of all orders
|
|
582
|
-
total_target_weight = orders.aggregate(s=models.Sum("target_weight"))["s"] or Decimal(0)
|
|
580
|
+
# Calculate the total target weight of all orders
|
|
581
|
+
total_target_weight = orders.exclude(underlying_instrument__is_cash=True).aggregate(
|
|
582
|
+
s=models.Sum("target_weight")
|
|
583
|
+
)["s"] or Decimal(0)
|
|
583
584
|
|
|
584
|
-
|
|
585
|
-
target_cash_weight
|
|
585
|
+
if target_cash_weight is None:
|
|
586
|
+
target_cash_weight = Decimal("1") - total_target_weight
|
|
586
587
|
|
|
587
588
|
# Initialize target shares to zero
|
|
588
589
|
total_target_shares = Decimal(0)
|
|
589
590
|
|
|
591
|
+
# Get or create a cash component for the portfolio's currency
|
|
592
|
+
cash_component = Cash.objects.get_or_create(
|
|
593
|
+
currency=currency, defaults={"is_cash": True, "name": currency.title}
|
|
594
|
+
)[0]
|
|
590
595
|
# If the portfolio is not only weighting-based, estimate the target shares for the cash component
|
|
591
596
|
if not self.portfolio.only_weighting:
|
|
592
|
-
# Get or create a cash component for the portfolio's currency
|
|
593
|
-
cash_component = Cash.objects.get_or_create(
|
|
594
|
-
currency=currency, defaults={"is_cash": True, "name": currency.title}
|
|
595
|
-
)[0]
|
|
596
|
-
|
|
597
597
|
# Estimate the target shares for the cash component
|
|
598
598
|
with suppress(ValueError):
|
|
599
599
|
total_target_shares = self.get_estimated_shares(target_cash_weight, cash_component, Decimal("1.0"))
|
|
600
600
|
|
|
601
|
-
cash_component = Cash.objects.get_or_create(
|
|
602
|
-
currency=self.portfolio.currency, defaults={"name": self.portfolio.currency.title}
|
|
603
|
-
)[0]
|
|
604
601
|
# otherwise, we create a new position
|
|
605
602
|
underlying_quote_price = InstrumentPrice.objects.get_or_create(
|
|
606
603
|
instrument=cash_component,
|
|
@@ -657,7 +654,7 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
657
654
|
Order.objects.bulk_update(orders, ["shares", "weighting"])
|
|
658
655
|
|
|
659
656
|
# If we estimate cash on this order proposal, we make sure to create the corresponding cash component
|
|
660
|
-
estimated_cash_position = self.get_estimated_target_cash(
|
|
657
|
+
estimated_cash_position = self.get_estimated_target_cash()
|
|
661
658
|
target_portfolio = self.validated_trading_service.trades_batch.convert_to_portfolio(
|
|
662
659
|
estimated_cash_position._build_dto()
|
|
663
660
|
)
|
|
@@ -717,7 +714,7 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
717
714
|
assets = []
|
|
718
715
|
warnings = []
|
|
719
716
|
# We do not want to create the estimated cash position if there is not orders in the order proposal (shouldn't be possible anyway)
|
|
720
|
-
estimated_cash_position = self.get_estimated_target_cash(
|
|
717
|
+
estimated_cash_position = self.get_estimated_target_cash()
|
|
721
718
|
for order in self.get_orders():
|
|
722
719
|
with suppress(ValueError):
|
|
723
720
|
asset = order.get_asset()
|
|
@@ -143,33 +143,32 @@ class TradingService:
|
|
|
143
143
|
|
|
144
144
|
trades: list[Trade] = []
|
|
145
145
|
for instrument_id, pos in instruments.items():
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
trades.append(trade)
|
|
146
|
+
previous_weight = target_weight = 0
|
|
147
|
+
effective_shares = target_shares = 0
|
|
148
|
+
daily_return = 0
|
|
149
|
+
if effective_pos := effective_portfolio.positions_map.get(instrument_id, None):
|
|
150
|
+
previous_weight = effective_pos.weighting
|
|
151
|
+
effective_shares = effective_pos.shares
|
|
152
|
+
daily_return = effective_pos.daily_return
|
|
153
|
+
if target_pos := target_portfolio.positions_map.get(instrument_id, None):
|
|
154
|
+
target_weight = target_pos.weighting
|
|
155
|
+
if target_pos.shares is not None:
|
|
156
|
+
target_shares = target_pos.shares
|
|
157
|
+
trade = Trade(
|
|
158
|
+
underlying_instrument=instrument_id,
|
|
159
|
+
previous_weight=previous_weight,
|
|
160
|
+
target_weight=target_weight,
|
|
161
|
+
effective_shares=effective_shares,
|
|
162
|
+
target_shares=target_shares,
|
|
163
|
+
date=self.trade_date,
|
|
164
|
+
instrument_type=pos.instrument_type,
|
|
165
|
+
currency=pos.currency,
|
|
166
|
+
price=Decimal(pos.price) if pos.price is not None else Decimal("0"),
|
|
167
|
+
currency_fx_rate=Decimal(pos.currency_fx_rate),
|
|
168
|
+
daily_return=Decimal(daily_return),
|
|
169
|
+
portfolio_contribution=effective_portfolio.portfolio_contribution,
|
|
170
|
+
)
|
|
171
|
+
trades.append(trade)
|
|
173
172
|
return TradeBatch(trades)
|
|
174
173
|
|
|
175
174
|
def is_valid(self, ignore_error: bool = False) -> bool:
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/serializers/orders/order_proposals.py
RENAMED
|
@@ -23,7 +23,7 @@ class OrderProposalModelSerializer(wb_serializers.ModelSerializer):
|
|
|
23
23
|
rebalancing_model = wb_serializers.PrimaryKeyRelatedField(queryset=RebalancingModel.objects.all(), required=False)
|
|
24
24
|
_rebalancing_model = RebalancingModelRepresentationSerializer(source="rebalancing_model")
|
|
25
25
|
target_portfolio = wb_serializers.PrimaryKeyRelatedField(
|
|
26
|
-
queryset=Portfolio.objects.all(), write_only=True, required=False
|
|
26
|
+
queryset=Portfolio.objects.all(), write_only=True, required=False
|
|
27
27
|
)
|
|
28
28
|
_target_portfolio = PortfolioRepresentationSerializer(source="target_portfolio")
|
|
29
29
|
total_cash_weight = wb_serializers.DecimalField(
|
|
@@ -51,8 +51,13 @@ class OrderProposalModelSerializer(wb_serializers.ModelSerializer):
|
|
|
51
51
|
obj = super().create(validated_data)
|
|
52
52
|
|
|
53
53
|
target_portfolio_dto = None
|
|
54
|
-
if target_portfolio
|
|
54
|
+
if target_portfolio:
|
|
55
55
|
target_portfolio_dto = target_portfolio._build_dto(obj.trade_date)
|
|
56
|
+
elif rebalancing_model:
|
|
57
|
+
target_portfolio_dto = rebalancing_model.get_target_portfolio(
|
|
58
|
+
obj.portfolio, obj.trade_date, obj.last_effective_date
|
|
59
|
+
)
|
|
60
|
+
|
|
56
61
|
try:
|
|
57
62
|
obj.reset_orders(
|
|
58
63
|
target_portfolio=target_portfolio_dto, total_target_weight=Decimal("1.0") - total_cash_weight
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/tests/models/orders/test_order_proposals.py
RENAMED
|
@@ -248,7 +248,9 @@ class TestOrderProposal:
|
|
|
248
248
|
assert t3.weighting == normalized_t3_weight
|
|
249
249
|
|
|
250
250
|
# Test resetting orders
|
|
251
|
-
def test_reset_orders(
|
|
251
|
+
def test_reset_orders(
|
|
252
|
+
self, order_proposal, instrument_factory, cash, instrument_price_factory, asset_position_factory
|
|
253
|
+
):
|
|
252
254
|
"""
|
|
253
255
|
Verify orders are correctly reset based on effective and target portfolios.
|
|
254
256
|
"""
|
|
@@ -334,6 +336,31 @@ class TestOrderProposal:
|
|
|
334
336
|
assert t2.weighting == Decimal("0")
|
|
335
337
|
assert t3.weighting == Decimal("0.5")
|
|
336
338
|
|
|
339
|
+
# assert cash position creates a proper order
|
|
340
|
+
# build the target portfolio
|
|
341
|
+
target_portfolio_with_cash = PortfolioDTO(
|
|
342
|
+
[
|
|
343
|
+
Position(
|
|
344
|
+
underlying_instrument=i1.id,
|
|
345
|
+
date=order_proposal.trade_date,
|
|
346
|
+
weighting=Decimal("0.5"),
|
|
347
|
+
price=float(p1.net_value),
|
|
348
|
+
),
|
|
349
|
+
Position(
|
|
350
|
+
underlying_instrument=cash.id,
|
|
351
|
+
date=order_proposal.trade_date,
|
|
352
|
+
weighting=Decimal("0.5"),
|
|
353
|
+
price=1.0,
|
|
354
|
+
),
|
|
355
|
+
]
|
|
356
|
+
)
|
|
357
|
+
order_proposal.reset_orders(target_portfolio=target_portfolio_with_cash)
|
|
358
|
+
|
|
359
|
+
# Assert existing trade weights are correctly updated
|
|
360
|
+
assert order_proposal.orders.get(underlying_instrument=i1).weighting == Decimal("-0.2")
|
|
361
|
+
assert order_proposal.orders.get(underlying_instrument=i2).weighting == Decimal("-0.3")
|
|
362
|
+
assert order_proposal.orders.get(underlying_instrument=cash).weighting == Decimal("0.5")
|
|
363
|
+
|
|
337
364
|
def test_reset_orders_remove_invalid_orders(self, order_proposal, order_factory, instrument_price_factory):
|
|
338
365
|
# create a invalid trade and its price
|
|
339
366
|
invalid_trade = order_factory.create(order_proposal=order_proposal, weighting=Decimal(0))
|
|
@@ -437,9 +464,8 @@ class TestOrderProposal:
|
|
|
437
464
|
underlying_instrument=cash,
|
|
438
465
|
weighting=Decimal("0.2"),
|
|
439
466
|
)
|
|
440
|
-
|
|
441
|
-
target_cash_position
|
|
442
|
-
assert target_cash_position.weighting == Decimal("0.2") + Decimal("1.0") - (Decimal("0.7") + Decimal("0.2"))
|
|
467
|
+
target_cash_position = order_proposal.get_estimated_target_cash()
|
|
468
|
+
assert target_cash_position.weighting == Decimal("0.3")
|
|
443
469
|
assert target_cash_position.initial_shares == Decimal(1_000_000) * Decimal("0.3")
|
|
444
470
|
|
|
445
471
|
def test_order_proposal_update_inception_date(self, order_proposal_factory, portfolio, instrument_factory):
|
|
@@ -198,22 +198,26 @@ class OrderOrderProposalModelViewSet(
|
|
|
198
198
|
return Order.objects.none()
|
|
199
199
|
|
|
200
200
|
def get_queryset(self):
|
|
201
|
-
return
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
201
|
+
return (
|
|
202
|
+
self.orders.exclude(underlying_instrument__is_cash=True)
|
|
203
|
+
.annotate(
|
|
204
|
+
underlying_instrument_isin=F("underlying_instrument__isin"),
|
|
205
|
+
underlying_instrument_ticker=F("underlying_instrument__ticker"),
|
|
206
|
+
underlying_instrument_refinitiv_identifier_code=F("underlying_instrument__refinitiv_identifier_code"),
|
|
207
|
+
underlying_instrument_instrument_type=Case(
|
|
208
|
+
When(
|
|
209
|
+
underlying_instrument__parent__is_security=True,
|
|
210
|
+
then=F("underlying_instrument__parent__instrument_type__short_name"),
|
|
211
|
+
),
|
|
212
|
+
default=F("underlying_instrument__instrument_type__short_name"),
|
|
209
213
|
),
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
214
|
+
effective_total_value_fx_portfolio=F("effective_weight") * Value(self.portfolio_total_asset_value),
|
|
215
|
+
target_total_value_fx_portfolio=F("target_weight") * Value(self.portfolio_total_asset_value),
|
|
216
|
+
portfolio_currency=F("portfolio__currency__symbol"),
|
|
217
|
+
security=F("underlying_instrument__parent"),
|
|
218
|
+
company=F("underlying_instrument__parent__parent"),
|
|
219
|
+
)
|
|
220
|
+
.select_related(
|
|
221
|
+
"underlying_instrument", "underlying_instrument__parent", "underlying_instrument__parent__parent"
|
|
222
|
+
)
|
|
219
223
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/configs/display.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/constants.py
RENAMED
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/factories.py
RENAMED
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/filters.py
RENAMED
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/management.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/scripts.py
RENAMED
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/serializers.py
RENAMED
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/tests/__init__.py
RENAMED
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/tests/conftest.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/contrib/company_portfolio/viewsets.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.15 → wbportfolio-1.54.17}/wbportfolio/factories/portfolio_swing_pricings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|