wbportfolio 1.54.16__tar.gz → 1.54.18__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.16 → wbportfolio-1.54.18}/PKG-INFO +1 -1
- wbportfolio-1.54.18/wbportfolio/import_export/handlers/orders.py +59 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/handlers/trade.py +42 -70
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/orders/order_proposals.py +30 -29
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/orders/orders.py +2 -7
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/orders/test_order_proposals.py +36 -2
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/orders.py +21 -17
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/.gitignore +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/LICENSE +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/pyproject.toml +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/asset.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/indexes.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/orders/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/orders/order_proposals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/orders/orders.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/portfolio_relationships.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/product_groups.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/rebalancing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/reconciliations.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/registers.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/transactions/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/transactions/claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/transactions/dividends.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/transactions/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/admin/transactions/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/analysis/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/analysis/claims.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/apps.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/admin.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/apps.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/configs/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/configs/display.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/configs/endpoints.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/configs/previews.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/constants.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/dynamic_preferences_registry.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/factories.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/filters.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/management.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/migrations/0001_initial.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/migrations/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/models.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/scripts.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/serializers.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/tasks.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/tests/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/tests/conftest.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/tests/test_models.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/urls.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/viewsets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/defaults/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/defaults/fees/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/defaults/fees/default.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/dynamic_preferences_registry.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/adjustments.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/dividends.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/indexes.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/orders/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/orders/order_proposals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/orders/orders.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/portfolio_cash_targets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/portfolio_swing_pricings.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/product_groups.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/rebalancing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/reconciliations.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/factories/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/fdm/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/fdm/tasks.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/assets_and_net_new_money_progression.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/esg.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/orders/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/orders/orders.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/performances.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/positions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/signals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/transactions/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/transactions/claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/transactions/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/transactions/mixins.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/transactions/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/filters/transactions/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/fixtures/product_factsheets.yaml +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/fixtures/wbportfolio.yaml.gz +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/fixtures/wbrisk_management.yaml.gz +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/refinitiv/adjustment.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/ubs/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/ubs/asset_position.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/ubs/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/ubs/instrument_price.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/ubs/mixin.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/wbfdm/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/wbfdm/adjustment.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/wbfdm/dividend.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/backends/wbfdm/mixin.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/handlers/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/handlers/adjustment.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/handlers/asset_position.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/handlers/dividend.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/handlers/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/handlers/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/handlers/register.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/default_mapping.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/jpmorgan/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/jpmorgan/customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/jpmorgan/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/jpmorgan/strategy.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/jpmorgan/valuation.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/leonteq/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/leonteq/customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/leonteq/equity.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/leonteq/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/leonteq/trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/leonteq/valuation.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/d1_customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/d1_equity.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/d1_fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/d1_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/d1_valuation.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/dividend.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/equity.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/natixis/valuation.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/refinitiv/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/refinitiv/adjustment.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/custodian_positions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/customer_trade_pending_slk.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/customer_trade_slk.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/customer_trade_without_pw.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/equity.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/perf_fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/portfolio_future_cash_flow.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/registers.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/sylk.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/sg_lux/valuation.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/societe_generale/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/societe_generale/customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/societe_generale/strategy.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/societe_generale/valuation.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/tellco/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/tellco/customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/tellco/equity.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/tellco/valuation.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/ubs/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/ubs/api/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/ubs/api/asset_position.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/ubs/api/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/ubs/api/instrument_price.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/ubs/api/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/ubs/customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/ubs/equity.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/ubs/historical_customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/ubs/valuation.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/asset_position.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/historical_customer_trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/instrument.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/management_fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/performance_fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/trade.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/valuation.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/parsers/vontobel/valuation_api.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/resources/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/resources/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/resources/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/import_export/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/jinja2/wbportfolio/sql/aum_nnm.sql +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/kpi_handlers/nnm.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/locale/de/LC_MESSAGES/django.mo +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/locale/de/LC_MESSAGES/django.po +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/locale/en/LC_MESSAGES/django.mo +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/locale/en/LC_MESSAGES/django.po +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/locale/fr/LC_MESSAGES/django.mo +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/locale/fr/LC_MESSAGES/django.po +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/metric/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/metric/backends/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/metric/backends/base.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/metric/backends/constants.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/metric/backends/portfolio_base.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/metric/backends/portfolio_esg.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/metric/tests/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/metric/tests/conftest.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/metric/tests/test_portfolio_base.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/metric/tests/test_portfolio_esg.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0001_initial_squashed.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0002_product_default_sub_account_squashed_0039_alter_assetallocation_company_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0040_instrument_financial_instrument.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0041_remove_listresearch_research_ptr_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0042_instrumentlist_instrumentlistthroughmodel_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0043_alter_instrumentlistthroughmodel_options_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0044_alter_instrumentlist_identifier.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0045_alter_instrument_financial_instrument.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0046_add_product_default_account.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0047_remove_product_default_sub_account.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0048_alter_trade_status.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0049_trade_claimed_shares.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0050_fees_fee_date_fees_wbportfolio_transac_1f7a29_idx.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0051_delete_macroreview.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0052_remove_cash_instrument_ptr_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0053_remove_product_group.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0054_portfolioinstrumentpreferredclassificationthroughmodel_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0055_remove_product__custom_management_rebates_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0056_remove_companyportfoliodata_assets_under_management_currency_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0057_alter_portfolio_preferred_instrument_classifications_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0058_pmsinstrument.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0059_fees_unique_fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0060_alter_portfolioportfoliothroughmodel_type.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0061_portfolio_bank_accounts_product_bank_account_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0062_alter_dailyportfoliocashflow_options.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0063_accountreconciliation_accountreconciliationline_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0064_alter_portfolio_managers_portfolio_is_tracked_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0065_alter_portfolio_managers_claim_as_shares_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0066_assetposition_initial_shares_at_custodian_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0067_assetposition_unique_asset_position.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0068_trade_internal_trade_trade_marked_as_internal_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0069_remove_portfolio_is_invested_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0070_remove_assetposition_unique_asset_position_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0071_alter_trade_options_alter_trade_order.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0072_trade_diff_shares.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0073_remove_product_price_computation_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0074_alter_rebalancer_frequency_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0075_portfolio_initial_position_date_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0076_alter_dividendtransaction_price_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0077_remove_transaction_currency_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0078_trade_drift_factor.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0079_alter_trade_drift_factor.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0080_alter_trade_drift_factor_alter_trade_weighting.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0081_alter_trade_drift_factor.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0082_remove_tradeproposal_creator_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/0083_order_alter_trade_options_and_more.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/migrations/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/adjustments.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/asset.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/exceptions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/graphs/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/graphs/portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/graphs/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/indexes.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/llm/wbcrm/analyze_relationship.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/mixins/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/mixins/instruments.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/mixins/liquidity_stress_test.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/orders/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/portfolio_cash_targets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/portfolio_relationship.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/portfolio_swing_pricings.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/product_groups.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/rebalancing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/reconciliations/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/reconciliations/account_reconciliation_lines.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/reconciliations/account_reconciliations.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/reconciliations/reconciliations.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/registers.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/signals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/transactions/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/transactions/claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/transactions/dividends.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/transactions/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/transactions/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/transactions/transactions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/models/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/permissions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/pms/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/pms/analytics/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/pms/analytics/portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/pms/analytics/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/pms/statistics/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/pms/trading/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/pms/trading/handler.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/pms/typing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/preferences.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/rebalancing/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/rebalancing/base.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/rebalancing/decorators.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/rebalancing/models/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/rebalancing/models/composite.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/rebalancing/models/equally_weighted.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/rebalancing/models/market_capitalization_weighted.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/rebalancing/models/model_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/reports/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/reports/monthly_position_report.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/accounts.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/controversy_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/exposure_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/instrument_list_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/liquidity_risk.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/liquidity_stress_instrument.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/mixins.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/product_integrity.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/stop_loss_instrument.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/stop_loss_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/backends/ucits_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/conftest.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/test_accounts.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/test_controversy_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/test_exposure_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/test_instrument_list_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/test_liquidity_risk.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/test_product_integrity.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/test_stop_loss_instrument.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/test_stop_loss_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/risk_management/tests/test_ucits_portfolio.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/adjustments.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/orders/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/orders/order_proposals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/orders/orders.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/portfolio_cash_targets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/portfolio_relationship.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/portfolio_swing_pricing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/positions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/product_group.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/rebalancing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/reconciliations.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/registers.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/signals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/transactions/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/transactions/claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/transactions/dividends.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/transactions/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/serializers/transactions/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/static/wbportfolio/css/macro_review.css +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/static/wbportfolio/markdown/documentation/account_holding_reconciliation.md +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/static/wbportfolio/markdown/documentation/aggregate_asset_position_liquidity.md +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/static/wbportfolio/markdown/documentation/company.md +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/static/wbportfolio/markdown/documentation/earnings_instrument.md +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/static/wbportfolio/markdown/documentation/financial_analysis_instrument_ratios.md +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/static/wbportfolio/markdown/documentation/financial_statistics.md +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/static/wbportfolio/markdown/documentation/person.md +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tasks.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/templates/portfolio/email/customer_report.html +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/templates/portfolio/email/customer_trade_notification.html +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/templates/portfolio/email/email_base_template.html +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/templates/portfolio/email/rebalancing_report.html +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/templates/portfolio/macro/macro_review.html +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/conftest.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/orders/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_account_reconciliation.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_customer_trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_dividends.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_imports.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_instrument_mixins.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_merge.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_portfolio_cash_targets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_portfolio_swing_pricings.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_product_groups.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/test_splits.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/transactions/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/transactions/test_claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/transactions/test_fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/transactions/test_rebalancing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/transactions/test_trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/models/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/pms/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/pms/test_analytics.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/rebalancing/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/rebalancing/test_models.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/serializers/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/serializers/test_claims.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/signals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/tests.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/viewsets/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/viewsets/test_assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/viewsets/test_performances.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/viewsets/test_products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/viewsets/transactions/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/tests/viewsets/transactions/test_claims.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/urls.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/utils.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/adjustments.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/assets_and_net_new_money_progression.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/charts/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/charts/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/adjustments.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/claims.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/mixins.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/reconciliations.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/registers.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/signals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/buttons/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/adjustments.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/esg.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/portfolio_relationship.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/positions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/product_groups.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/product_performance.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/rebalancing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/reconciliations.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/registers.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/display/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/adjustments.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/esg.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/portfolio_relationship.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/positions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/product_groups.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/product_performance.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/rebalancing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/reconciliations.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/endpoints/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/adjustments.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/instrument_prices.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/positions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/product_groups.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/product_performance.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/reconciliations.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/registers.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/menu/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/previews/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/previews/portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/adjustments.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/assets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/assets_and_net_new_money_progression.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/esg.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/instrument_prices.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/positions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/product_groups.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/product_performance.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/registers.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/configs/titles/trades.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/custodians.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/esg.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/mixins.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/buttons/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/buttons/order_proposals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/buttons/orders.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/displays/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/displays/order_proposals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/displays/orders.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/endpoints/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/endpoints/order_proposals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/endpoints/orders.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/titles/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/configs/titles/orders.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/orders/order_proposals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/portfolio_cash_flow.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/portfolio_cash_targets.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/portfolio_relationship.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/portfolio_swing_pricing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/portfolios.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/positions.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/product_groups.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/product_performance.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/products.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/rebalancing.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/reconciliations.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/registers.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/roles.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/signals.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/transactions/__init__.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/transactions/claim.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/transactions/fees.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/transactions/mixins.py +0 -0
- {wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/viewsets/transactions/trades.py +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from decimal import Decimal
|
|
2
|
+
from typing import Any, Dict
|
|
3
|
+
|
|
4
|
+
from django.db import models
|
|
5
|
+
from wbcore.contrib.io.exceptions import DeserializationError
|
|
6
|
+
from wbcore.contrib.io.imports import ImportExportHandler, ImportState
|
|
7
|
+
from wbcore.contrib.io.utils import nest_row
|
|
8
|
+
from wbfdm.import_export.handlers.instrument import InstrumentImportHandler
|
|
9
|
+
|
|
10
|
+
from wbportfolio.pms.typing import Portfolio, Position
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class OrderImportHandler(ImportExportHandler):
|
|
14
|
+
MODEL_APP_LABEL: str = "wbportfolio.Order"
|
|
15
|
+
|
|
16
|
+
def __init__(self, *args, **kwargs):
|
|
17
|
+
super().__init__(*args, **kwargs)
|
|
18
|
+
self.instrument_handler = InstrumentImportHandler(self.import_source)
|
|
19
|
+
self.order_proposal = None
|
|
20
|
+
|
|
21
|
+
def process_object(
|
|
22
|
+
self,
|
|
23
|
+
data: Dict[str, Any],
|
|
24
|
+
**kwargs,
|
|
25
|
+
):
|
|
26
|
+
from wbportfolio.models import OrderProposal
|
|
27
|
+
|
|
28
|
+
data = nest_row(data)
|
|
29
|
+
underlying_instrument = self.instrument_handler.process_object(
|
|
30
|
+
data["underlying_instrument"], only_security=False, read_only=True
|
|
31
|
+
)[0]
|
|
32
|
+
self.order_proposal = OrderProposal.objects.get(id=data.pop("order_proposal_id"))
|
|
33
|
+
weighting = data.get("target_weight", data.get("weighting"))
|
|
34
|
+
shares = data.get("target_shares", data.get("shares", 0))
|
|
35
|
+
if not weighting:
|
|
36
|
+
raise DeserializationError("We couldn't figure out the target weight column")
|
|
37
|
+
position_dto = Position(
|
|
38
|
+
underlying_instrument=underlying_instrument.id,
|
|
39
|
+
instrument_type=underlying_instrument.instrument_type.id,
|
|
40
|
+
weighting=Decimal(weighting),
|
|
41
|
+
shares=Decimal(shares),
|
|
42
|
+
currency=underlying_instrument.currency,
|
|
43
|
+
date=self.order_proposal.trade_date,
|
|
44
|
+
is_cash=underlying_instrument.is_cash,
|
|
45
|
+
)
|
|
46
|
+
return position_dto, ImportState.CREATED
|
|
47
|
+
|
|
48
|
+
def _get_history(self, history: Dict[str, Any]) -> models.QuerySet:
|
|
49
|
+
from wbportfolio.models.orders.order_proposals import OrderProposal
|
|
50
|
+
|
|
51
|
+
if order_proposal_id := history.get("order_proposal_id"):
|
|
52
|
+
# if a order proposal is provided, we delete the existing history first as otherwise, it would mess with the target weight computation
|
|
53
|
+
order_proposal = OrderProposal.objects.get(id=order_proposal_id)
|
|
54
|
+
order_proposal.orders.all().delete()
|
|
55
|
+
return self.model.objects.none()
|
|
56
|
+
|
|
57
|
+
def _post_processing_objects(self, positions: list[Position], *args, **kwargs):
|
|
58
|
+
target_portfolio = Portfolio(positions)
|
|
59
|
+
self.order_proposal.reset_orders(target_portfolio=target_portfolio)
|
|
@@ -25,7 +25,6 @@ class TradeImportHandler(ImportExportHandler):
|
|
|
25
25
|
self.instrument_handler = InstrumentImportHandler(self.import_source)
|
|
26
26
|
self.register_handler = RegisterImportHandler(self.import_source)
|
|
27
27
|
self.currency_handler = CurrencyImportHandler(self.import_source)
|
|
28
|
-
self.order_proposals = set()
|
|
29
28
|
|
|
30
29
|
def _data_changed(self, _object, change_data: Dict[str, Any], initial_data: Dict[str, Any], **kwargs):
|
|
31
30
|
if (new_register := change_data.get("register")) and (current_register := _object.register):
|
|
@@ -35,41 +34,32 @@ class TradeImportHandler(ImportExportHandler):
|
|
|
35
34
|
return super()._data_changed(_object, change_data, initial_data, **kwargs)
|
|
36
35
|
|
|
37
36
|
def _deserialize(self, data: Dict[str, Any]):
|
|
38
|
-
from wbportfolio.models import
|
|
37
|
+
from wbportfolio.models import Product
|
|
39
38
|
|
|
40
39
|
if underlying_instrument := data.get("underlying_instrument", None):
|
|
41
40
|
data["underlying_instrument"] = self.instrument_handler.process_object(
|
|
42
41
|
underlying_instrument, only_security=False, read_only=True
|
|
43
42
|
)[0]
|
|
44
43
|
|
|
45
|
-
if
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
data["
|
|
49
|
-
|
|
50
|
-
data["
|
|
51
|
-
|
|
52
|
-
data["
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if transaction_date_str := data.get("transaction_date", None):
|
|
57
|
-
data["transaction_date"] = datetime.strptime(transaction_date_str, "%Y-%m-%d").date()
|
|
58
|
-
if value_date_str := data.get("value_date", None):
|
|
59
|
-
data["value_date"] = datetime.strptime(value_date_str, "%Y-%m-%d").date()
|
|
60
|
-
if book_date_str := data.get("book_date", None):
|
|
61
|
-
data["book_date"] = datetime.strptime(book_date_str, "%Y-%m-%d").date()
|
|
62
|
-
data["portfolio"] = Portfolio._get_or_create_portfolio(
|
|
63
|
-
self.instrument_handler, data.get("portfolio", data["underlying_instrument"])
|
|
64
|
-
)
|
|
44
|
+
if external_id_alternative := data.get("external_id_alternative", None):
|
|
45
|
+
data["external_id_alternative"] = str(external_id_alternative)
|
|
46
|
+
if transaction_date_str := data.get("transaction_date", None):
|
|
47
|
+
data["transaction_date"] = datetime.strptime(transaction_date_str, "%Y-%m-%d").date()
|
|
48
|
+
if value_date_str := data.get("value_date", None):
|
|
49
|
+
data["value_date"] = datetime.strptime(value_date_str, "%Y-%m-%d").date()
|
|
50
|
+
if book_date_str := data.get("book_date", None):
|
|
51
|
+
data["book_date"] = datetime.strptime(book_date_str, "%Y-%m-%d").date()
|
|
52
|
+
data["portfolio"] = Portfolio._get_or_create_portfolio(
|
|
53
|
+
self.instrument_handler, data.get("portfolio", data["underlying_instrument"])
|
|
54
|
+
)
|
|
65
55
|
|
|
66
|
-
|
|
67
|
-
|
|
56
|
+
if currency_data := data.get("currency", None):
|
|
57
|
+
data["currency"] = self.currency_handler.process_object(currency_data, read_only=True)[0]
|
|
68
58
|
|
|
69
|
-
|
|
70
|
-
|
|
59
|
+
if register_data := data.get("register", None):
|
|
60
|
+
data["register"] = self.register_handler.process_object(register_data)[0]
|
|
71
61
|
|
|
72
|
-
|
|
62
|
+
data["marked_for_deletion"] = data.get("marked_for_deletion", False)
|
|
73
63
|
if underlying_instrument := data.get("underlying_instrument"):
|
|
74
64
|
if nominal := data.pop("nominal", None):
|
|
75
65
|
try:
|
|
@@ -160,39 +150,30 @@ class TradeImportHandler(ImportExportHandler):
|
|
|
160
150
|
self.import_source.log += "\nNo trade was successfully matched."
|
|
161
151
|
|
|
162
152
|
def _get_history(self, history: Dict[str, Any]) -> models.QuerySet:
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
trades =
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
if transaction_date := history.get("transaction_date"):
|
|
181
|
-
trades = trades.filter(transaction_date__lte=transaction_date)
|
|
182
|
-
elif book_date := history.get("book_date"):
|
|
183
|
-
trades = trades.filter(book_date__lte=book_date)
|
|
184
|
-
if underlying_instrument_data := history.get("underlying_instrument"):
|
|
185
|
-
if isinstance(underlying_instrument_data, dict):
|
|
186
|
-
trades = trades.filter(
|
|
187
|
-
**{f"underlying_instrument__{k}": v for k, v in underlying_instrument_data.items()}
|
|
188
|
-
)
|
|
189
|
-
else:
|
|
190
|
-
trades = trades.filter(underlying_instrument__id=underlying_instrument_data)
|
|
191
|
-
|
|
192
|
-
elif "underlying_instruments" in history:
|
|
193
|
-
trades = trades.filter(underlying_instrument__id__in=history["underlying_instruments"])
|
|
153
|
+
trades = self.model.objects.filter(
|
|
154
|
+
exclude_from_history=False,
|
|
155
|
+
pending=False,
|
|
156
|
+
transaction_subtype__in=[
|
|
157
|
+
self.model.Type.SUBSCRIPTION,
|
|
158
|
+
self.model.Type.REDEMPTION,
|
|
159
|
+
], # we cannot exclude marked for deleted trade because otherwise they are never consider in the history
|
|
160
|
+
)
|
|
161
|
+
if transaction_date := history.get("transaction_date"):
|
|
162
|
+
trades = trades.filter(transaction_date__lte=transaction_date)
|
|
163
|
+
elif book_date := history.get("book_date"):
|
|
164
|
+
trades = trades.filter(book_date__lte=book_date)
|
|
165
|
+
if underlying_instrument_data := history.get("underlying_instrument"):
|
|
166
|
+
if isinstance(underlying_instrument_data, dict):
|
|
167
|
+
trades = trades.filter(
|
|
168
|
+
**{f"underlying_instrument__{k}": v for k, v in underlying_instrument_data.items()}
|
|
169
|
+
)
|
|
194
170
|
else:
|
|
195
|
-
|
|
171
|
+
trades = trades.filter(underlying_instrument__id=underlying_instrument_data)
|
|
172
|
+
|
|
173
|
+
elif "underlying_instruments" in history:
|
|
174
|
+
trades = trades.filter(underlying_instrument__id__in=history["underlying_instruments"])
|
|
175
|
+
else:
|
|
176
|
+
raise ValueError("We cannot estimate history without at least the underlying instrument")
|
|
196
177
|
return trades
|
|
197
178
|
|
|
198
179
|
def _post_processing_objects(
|
|
@@ -201,18 +182,12 @@ class TradeImportHandler(ImportExportHandler):
|
|
|
201
182
|
modified_objs: list[models.Model],
|
|
202
183
|
unmodified_objs: list[models.Model],
|
|
203
184
|
):
|
|
204
|
-
from wbportfolio.models.orders.order_proposals import replay_as_task
|
|
205
|
-
|
|
206
185
|
for instrument in set(
|
|
207
186
|
map(lambda x: x.underlying_instrument, filter(lambda t: t.is_customer_trade, created_objs + modified_objs))
|
|
208
187
|
):
|
|
209
188
|
if instrument.instrument_type.key == "product":
|
|
210
189
|
update_outstanding_shares_as_task.delay(instrument.id)
|
|
211
190
|
|
|
212
|
-
# if the trade import relates to a order proposal, we reset the TP after the import to ensure it contains the deleted positions (often forgotten by user)
|
|
213
|
-
for changed_order_proposal in self.order_proposals:
|
|
214
|
-
replay_as_task.delay(changed_order_proposal.id)
|
|
215
|
-
|
|
216
191
|
def _post_processing_updated_object(self, _object):
|
|
217
192
|
if _object.marked_for_deletion:
|
|
218
193
|
_object.marked_for_deletion = False
|
|
@@ -231,8 +206,5 @@ class TradeImportHandler(ImportExportHandler):
|
|
|
231
206
|
self.import_source.log += (
|
|
232
207
|
f"{trade.transaction_date:%d.%m.%Y}: {trade.shares} {trade.bank} ==> Marked for deletion"
|
|
233
208
|
)
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
else:
|
|
237
|
-
trade.marked_for_deletion = True
|
|
238
|
-
trade.save()
|
|
209
|
+
trade.marked_for_deletion = True
|
|
210
|
+
trade.save()
|
|
@@ -394,35 +394,34 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
394
394
|
orders = service.trades_batch.trades_map.values()
|
|
395
395
|
for order_dto in orders:
|
|
396
396
|
instrument = Instrument.objects.get(id=order_dto.underlying_instrument)
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
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,
|
|
400
416
|
)
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
except Order.DoesNotExist:
|
|
410
|
-
order = Order(
|
|
411
|
-
underlying_instrument=instrument,
|
|
412
|
-
order_proposal=self,
|
|
413
|
-
value_date=self.trade_date,
|
|
414
|
-
weighting=weighting,
|
|
415
|
-
daily_return=daily_return,
|
|
416
|
-
currency_fx_rate=currency_fx_rate,
|
|
417
|
-
)
|
|
418
|
-
order.price = order.get_price()
|
|
419
|
-
order.order_type = Order.get_type(weighting, order_dto.previous_weight, order_dto.target_weight)
|
|
420
|
-
# if we cannot automatically find a price, we consider the stock is invalid and we sell it
|
|
421
|
-
if not order.price:
|
|
422
|
-
order.price = Decimal("0.0")
|
|
423
|
-
order.weighting = -order_dto.effective_weight
|
|
424
|
-
|
|
425
|
-
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()
|
|
426
425
|
# final sanity check to make sure invalid order with effective and target weight of 0 are automatically removed:
|
|
427
426
|
self.get_orders().filter(target_weight=0, effective_weight=0).delete()
|
|
428
427
|
|
|
@@ -579,7 +578,9 @@ class OrderProposal(CloneMixin, RiskCheckMixin, WBModel):
|
|
|
579
578
|
currency = self.portfolio.currency
|
|
580
579
|
|
|
581
580
|
# Calculate the total target weight of all orders
|
|
582
|
-
total_target_weight = 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
|
if target_cash_weight is None:
|
|
585
586
|
target_cash_weight = Decimal("1") - total_target_weight
|
|
@@ -9,13 +9,13 @@ from django.db.models import (
|
|
|
9
9
|
from ordered_model.models import OrderedModel
|
|
10
10
|
from wbcore.contrib.io.mixins import ImportMixin
|
|
11
11
|
|
|
12
|
-
from wbportfolio.import_export.handlers.
|
|
12
|
+
from wbportfolio.import_export.handlers.orders import OrderImportHandler
|
|
13
13
|
from wbportfolio.models.asset import AssetPosition
|
|
14
14
|
from wbportfolio.models.transactions.transactions import TransactionMixin
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class Order(TransactionMixin, ImportMixin, OrderedModel, models.Model):
|
|
18
|
-
import_export_handler_class =
|
|
18
|
+
import_export_handler_class = OrderImportHandler
|
|
19
19
|
|
|
20
20
|
ORDER_WEIGHTING_PRECISION = (
|
|
21
21
|
8 # we need to match the asset position weighting. Skfolio advices using a even smaller number (5)
|
|
@@ -145,11 +145,6 @@ class Order(TransactionMixin, ImportMixin, OrderedModel, models.Model):
|
|
|
145
145
|
self, "target_weight", round(self._effective_weight + self.weighting, self.ORDER_WEIGHTING_PRECISION)
|
|
146
146
|
)
|
|
147
147
|
|
|
148
|
-
@_target_weight.setter
|
|
149
|
-
def _target_weight(self, target_weight):
|
|
150
|
-
self.weighting = Decimal(target_weight) - self._effective_weight
|
|
151
|
-
self.order_type = self.get_type(self.weighting, self._previous_weight, self._target_weight)
|
|
152
|
-
|
|
153
148
|
@property
|
|
154
149
|
@admin.display(description="Target Shares")
|
|
155
150
|
def _target_shares(self) -> Decimal:
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/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))
|
|
@@ -423,13 +450,20 @@ class TestOrderProposal:
|
|
|
423
450
|
order_proposal.portfolio.only_weighting = False
|
|
424
451
|
order_proposal.portfolio.save()
|
|
425
452
|
mock_fct.return_value = Decimal(1_000_000) # 1 million cash
|
|
453
|
+
cash = cash_factory.create(currency=order_proposal.portfolio.currency)
|
|
426
454
|
order_factory.create( # equity trade
|
|
427
455
|
order_proposal=order_proposal,
|
|
428
456
|
value_date=order_proposal.trade_date,
|
|
429
457
|
portfolio=order_proposal.portfolio,
|
|
430
458
|
weighting=Decimal("0.7"),
|
|
431
459
|
)
|
|
432
|
-
|
|
460
|
+
order_factory.create( # cash trade
|
|
461
|
+
order_proposal=order_proposal,
|
|
462
|
+
value_date=order_proposal.trade_date,
|
|
463
|
+
portfolio=order_proposal.portfolio,
|
|
464
|
+
underlying_instrument=cash,
|
|
465
|
+
weighting=Decimal("0.2"),
|
|
466
|
+
)
|
|
433
467
|
target_cash_position = order_proposal.get_estimated_target_cash()
|
|
434
468
|
assert target_cash_position.weighting == Decimal("0.3")
|
|
435
469
|
assert target_cash_position.initial_shares == Decimal(1_000_000) * Decimal("0.3")
|
|
@@ -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.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/configs/display.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/constants.py
RENAMED
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/factories.py
RENAMED
|
File without changes
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/filters.py
RENAMED
|
File without changes
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/management.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/scripts.py
RENAMED
|
File without changes
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/serializers.py
RENAMED
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/tests/__init__.py
RENAMED
|
File without changes
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/wbportfolio/contrib/company_portfolio/tests/conftest.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{wbportfolio-1.54.16 → wbportfolio-1.54.18}/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.16 → wbportfolio-1.54.18}/wbportfolio/factories/portfolio_swing_pricings.py
RENAMED
|
File without changes
|