wbportfolio 1.46.10__py2.py3-none-any.whl → 1.46.12__py2.py3-none-any.whl
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/models/portfolio.py +11 -7
- wbportfolio/serializers/transactions/trade_proposals.py +1 -1
- wbportfolio/tests/models/test_portfolios.py +1 -1
- {wbportfolio-1.46.10.dist-info → wbportfolio-1.46.12.dist-info}/METADATA +1 -1
- {wbportfolio-1.46.10.dist-info → wbportfolio-1.46.12.dist-info}/RECORD +7 -7
- {wbportfolio-1.46.10.dist-info → wbportfolio-1.46.12.dist-info}/WHEEL +0 -0
- {wbportfolio-1.46.10.dist-info → wbportfolio-1.46.12.dist-info}/licenses/LICENSE +0 -0
wbportfolio/models/portfolio.py
CHANGED
|
@@ -675,7 +675,7 @@ class Portfolio(DeleteToDisableMixin, WBModel):
|
|
|
675
675
|
asset.save()
|
|
676
676
|
|
|
677
677
|
# We check if there is an instrument attached to the portfolio with calculated NAV and price computation method
|
|
678
|
-
self.estimate_net_asset_values(val_date)
|
|
678
|
+
self.estimate_net_asset_values((val_date + BDay(1)).date()) # updating weighting in t0 influence nav in t+1
|
|
679
679
|
if evaluate_rebalancer:
|
|
680
680
|
self.evaluate_rebalancing(val_date)
|
|
681
681
|
|
|
@@ -1217,13 +1217,17 @@ class Portfolio(DeleteToDisableMixin, WBModel):
|
|
|
1217
1217
|
|
|
1218
1218
|
def default_estimate_net_value(val_date: date, instrument: Instrument) -> float | None:
|
|
1219
1219
|
portfolio = instrument.portfolio
|
|
1220
|
+
previous_val_date = (val_date - BDay(1)).date()
|
|
1221
|
+
|
|
1220
1222
|
if (
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1223
|
+
portfolio.assets.filter(date=previous_val_date).exists()
|
|
1224
|
+
and ( # we assume that in t-1 we will have a portfolio (with at least estimate position). If we use the latest position date before val_date, we run into the problem of being able to compute nav at every date
|
|
1225
|
+
last_price := instrument.get_latest_price(previous_val_date)
|
|
1226
|
+
)
|
|
1227
|
+
):
|
|
1228
|
+
with suppress(IndexError): # we silent any indexerror introduced by no returns for the past days
|
|
1229
|
+
analytic_portfolio, _ = portfolio.get_analytic_portfolio(previous_val_date)
|
|
1230
|
+
return analytic_portfolio.get_estimate_net_value(float(last_price.net_value))
|
|
1227
1231
|
|
|
1228
1232
|
|
|
1229
1233
|
@receiver(post_save, sender="wbportfolio.Product")
|
|
@@ -46,7 +46,7 @@ class TradeProposalModelSerializer(wb_serializers.ModelSerializer):
|
|
|
46
46
|
obj.reset_trades(target_portfolio=target_portfolio_dto)
|
|
47
47
|
except ValidationError as e:
|
|
48
48
|
if request := self.context.get("request"):
|
|
49
|
-
warning(request, str(e))
|
|
49
|
+
warning(request, str(e), extra_tags="auto_close=0")
|
|
50
50
|
return obj
|
|
51
51
|
|
|
52
52
|
@wb_serializers.register_only_instance_resource()
|
|
@@ -266,7 +266,7 @@ class TestPortfolioModel(PortfolioTestMixin):
|
|
|
266
266
|
for pos in AssetPosition.objects.all():
|
|
267
267
|
assert float(pos.weighting) == pytest.approx(float(pos.total_value_fx_portfolio / total_value), rel=1e-2)
|
|
268
268
|
|
|
269
|
-
mock_estimate_net_asset_values.assert_called_once_with(portfolio, weekday)
|
|
269
|
+
mock_estimate_net_asset_values.assert_called_once_with(portfolio, (weekday + BDay(1)).date())
|
|
270
270
|
mock_compute_metrics.assert_called_once_with(
|
|
271
271
|
weekday, basket_id=portfolio.id, basket_content_type_id=ContentType.objects.get_for_model(Portfolio).id
|
|
272
272
|
)
|
|
@@ -246,7 +246,7 @@ wbportfolio/models/adjustments.py,sha256=osXWkJZOiansPWYPyHtl7Z121zDWi7u1YMtrBQt
|
|
|
246
246
|
wbportfolio/models/asset.py,sha256=TEOsSlbog6Yw0PZiMxjnCccp6ApXAAJNd3BIx_wU7D8,37749
|
|
247
247
|
wbportfolio/models/custodians.py,sha256=owTiS2Vm5CRKzh9M_P9GOVg-s-ndQ9UvRmw3yZP7cw0,3815
|
|
248
248
|
wbportfolio/models/indexes.py,sha256=iLYF2gzNzX4GLj_Nh3fybUcAQ1TslnT0wgQ6mN164QI,728
|
|
249
|
-
wbportfolio/models/portfolio.py,sha256=
|
|
249
|
+
wbportfolio/models/portfolio.py,sha256=eGWhPlkIMYwK10__3jU1Gy1JwpwkJWzCyv7ov17mRRI,57509
|
|
250
250
|
wbportfolio/models/portfolio_cash_flow.py,sha256=2blPiXSw7dbhUVd-7LcxDBb4v0SheNOdvRK3MFYiChA,7273
|
|
251
251
|
wbportfolio/models/portfolio_cash_targets.py,sha256=WmgG-etPisZsh2yaFQpz7EkpvAudKBEzqPsO715w52U,1498
|
|
252
252
|
wbportfolio/models/portfolio_relationship.py,sha256=mMb18UMRWg9kx_9uIPkMktwORuXXLjKdgRPQQvB6fVE,5486
|
|
@@ -339,7 +339,7 @@ wbportfolio/serializers/transactions/claim.py,sha256=kC4E2RZRrpd9i8tGfoiV-gpWDk3
|
|
|
339
339
|
wbportfolio/serializers/transactions/dividends.py,sha256=EULwKDumHBv4r2HsdEGZMZGFaye4dRUNNyXg6-wZXzc,520
|
|
340
340
|
wbportfolio/serializers/transactions/expiry.py,sha256=K3XOSbCyef-xRzOjCr4Qg_YFJ_JuuiJ9u6tDS86l0hg,477
|
|
341
341
|
wbportfolio/serializers/transactions/fees.py,sha256=uPmSWuCeoV2bwVS6RmEz3a0VRBWJHIQr0WhklYc1UAI,1068
|
|
342
|
-
wbportfolio/serializers/transactions/trade_proposals.py,sha256=
|
|
342
|
+
wbportfolio/serializers/transactions/trade_proposals.py,sha256=n8TpI_JwVSIFhf7mhniWIehCQ7Xc3WgpjUujQbeiM0Y,3671
|
|
343
343
|
wbportfolio/serializers/transactions/trades.py,sha256=pONV5NSqrXUnoTEoAxovnnQqu37cZGuB33TYvIOK3rE,10009
|
|
344
344
|
wbportfolio/serializers/transactions/transactions.py,sha256=O137zeCndK-nxIWSRLEj7bXbBZDGa4d6qK6pJIIYK3g,4170
|
|
345
345
|
wbportfolio/static/wbportfolio/css/macro_review.css,sha256=FAVVO8nModxwPXcTKpcfzVxBGPZGJVK1Xn-0dkSfGyc,233
|
|
@@ -371,7 +371,7 @@ wbportfolio/tests/models/test_merge.py,sha256=sdsjiZsmR6vsUKwTa5kkvL6QTeAZqtd_EP
|
|
|
371
371
|
wbportfolio/tests/models/test_portfolio_cash_flow.py,sha256=X8dsXexsb1b0lBiuGzu40ps_Az_1UmmKT0eo1vbXH94,5792
|
|
372
372
|
wbportfolio/tests/models/test_portfolio_cash_targets.py,sha256=q8QWAwt-kKRkLC0E05GyRhF_TTQXIi8bdHjXVU0fCV0,965
|
|
373
373
|
wbportfolio/tests/models/test_portfolio_swing_pricings.py,sha256=kr2AOcQkyg2pX3ULjU-o9ye-NVpjMrrfoe-DVbYCbjs,1656
|
|
374
|
-
wbportfolio/tests/models/test_portfolios.py,sha256=
|
|
374
|
+
wbportfolio/tests/models/test_portfolios.py,sha256=Yd3aTeg8-bKCIJHL4jy14yWVNMEwyb3lzsFyu-Br_mM,52078
|
|
375
375
|
wbportfolio/tests/models/test_product_groups.py,sha256=AcdxhurV-n_bBuUsfD1GqVtwLFcs7VI2CRrwzsIUWbU,3337
|
|
376
376
|
wbportfolio/tests/models/test_products.py,sha256=5YYmQreFnaKLbWmrSib103wgLalqn8u01Fnh3A0XMz8,8217
|
|
377
377
|
wbportfolio/tests/models/test_roles.py,sha256=4Cn7WyrA2ztJNeWLk5cy9kYo5XLWMbFSvo1O-9JYxeA,3323
|
|
@@ -517,7 +517,7 @@ wbportfolio/viewsets/transactions/rebalancing.py,sha256=6rIrdK0rtKL1afJ-tYfAGdQV
|
|
|
517
517
|
wbportfolio/viewsets/transactions/trade_proposals.py,sha256=gXdJJ00D6UavZfBczvZQb5cYPQlU6-xOg_-TnMBzEO0,4742
|
|
518
518
|
wbportfolio/viewsets/transactions/trades.py,sha256=mo5b1wFm0twvGVp-CYnzpGLYMqPcHN8GjH4G_WwFFwc,16237
|
|
519
519
|
wbportfolio/viewsets/transactions/transactions.py,sha256=ixDp-nsNA8t_A06rBCT19hOMJHy0iRmdz1XKdV1OwAs,4450
|
|
520
|
-
wbportfolio-1.46.
|
|
521
|
-
wbportfolio-1.46.
|
|
522
|
-
wbportfolio-1.46.
|
|
523
|
-
wbportfolio-1.46.
|
|
520
|
+
wbportfolio-1.46.12.dist-info/METADATA,sha256=7Jdv2fopJVYlVfZ7aigzy_f_wdEQD4BjpcsmKdL3CZE,735
|
|
521
|
+
wbportfolio-1.46.12.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
|
|
522
|
+
wbportfolio-1.46.12.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
|
|
523
|
+
wbportfolio-1.46.12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|