wbportfolio 2.2.5__py2.py3-none-any.whl → 2.2.6__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/fixtures/product_factsheets.yaml +1 -0
- wbportfolio/fixtures/wbportfolio.yaml.gz +0 -0
- wbportfolio/fixtures/wbrisk_management.yaml.gz +0 -0
- wbportfolio/jinja2/wbportfolio/sql/aum_nnm.sql +119 -0
- wbportfolio/static/wbportfolio/css/macro_review.css +17 -0
- wbportfolio/static/wbportfolio/markdown/documentation/account_holding_reconciliation.md +16 -0
- wbportfolio/static/wbportfolio/markdown/documentation/aggregate_asset_position_liquidity.md +25 -0
- wbportfolio/static/wbportfolio/markdown/documentation/company.md +78 -0
- wbportfolio/static/wbportfolio/markdown/documentation/earnings_instrument.md +14 -0
- wbportfolio/static/wbportfolio/markdown/documentation/financial_analysis_instrument_ratios.md +94 -0
- wbportfolio/static/wbportfolio/markdown/documentation/financial_statistics.md +44 -0
- wbportfolio/static/wbportfolio/markdown/documentation/person.md +70 -0
- wbportfolio/templates/portfolio/email/customer_report.html +6 -0
- wbportfolio/templates/portfolio/email/customer_trade_notification.html +26 -0
- wbportfolio/templates/portfolio/email/email_base_template.html +420 -0
- wbportfolio/templates/portfolio/email/rebalancing_report.html +34 -0
- wbportfolio/templates/portfolio/macro/macro_review.html +88 -0
- {wbportfolio-2.2.5.dist-info → wbportfolio-2.2.6.dist-info}/METADATA +3 -2
- {wbportfolio-2.2.5.dist-info → wbportfolio-2.2.6.dist-info}/RECORD +21 -4
- {wbportfolio-2.2.5.dist-info → wbportfolio-2.2.6.dist-info}/WHEEL +1 -1
- {wbportfolio-2.2.5.dist-info → wbportfolio-2.2.6.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"model": "wbreport.colorgradient", "pk": 1, "fields": {"title": "Default Color Palette", "colors": "[\"#ffb166\", \"#d1c554\", \"#8cd66b\", \"#5fd785\", \"#05d6a1\", \"#00c1ab\", \"#01abaa\", \"#38c1d7\", \"#70d6ff\", \"#00b1ff\", \"#0585ff\", \"#2a5df2\", \"#5724d9\", \"#823edf\", \"#a359e5\", \"#e13da9\", \"#ef476f\"]"}}, {"model": "wbreport.reportasset", "pk": 1, "fields": {"key": "font-default", "description": "", "text": "", "asset": "report/assets/Roboto-Light.ttf"}}, {"model": "wbreport.reportasset", "pk": 2, "fields": {"key": "font-bd", "description": "", "text": "", "asset": "report/assets/Roboto-Medium.ttf"}}, {"model": "wbreport.reportasset", "pk": 3, "fields": {"key": "font-it", "description": "", "text": "", "asset": "report/assets/Roboto-LightItalic.ttf"}}, {"model": "wbreport.reportcategory", "pk": 1, "fields": {"title": "Test", "order": 0}}, {"model": "wbreport.reportclass", "pk": 1, "fields": {"title": "Base Product Report Class", "class_path": "wbreport.defaults.factsheets.base"}}, {"model": "wbreport.reportclass", "pk": 2, "fields": {"title": "Multindex Report Class", "class_path": "wbreport.defaults.factsheets.multitheme"}}, {"model": "wbreport.reportclass", "pk": 3, "fields": {"title": "Menu Report Class", "class_path": "wbreport.defaults.factsheets.menu"}}, {"model": "wbreport.report", "pk": 1, "fields": {"content_type": 67, "object_id": 566, "file_content_type": "PDF", "category": null, "parent_report": 5, "is_active": true, "file_disabled": false, "base_color": "#70D6FF", "is_private": false, "mailing_list": null, "report_class": 1, "title": "Base Index Factsheet", "namespace": "base-index-factsheet", "logo_file": "", "color_palette": 1}}, {"model": "wbreport.report", "pk": 2, "fields": {"content_type": 67, "object_id": 567, "file_content_type": "PDF", "category": null, "parent_report": 5, "is_active": true, "file_disabled": false, "base_color": "#05D6A1", "is_private": false, "mailing_list": null, "report_class": 1, "title": "Base Product Factsheet", "namespace": "base-product-factsheet", "logo_file": "", "color_palette": 1}}, {"model": "wbreport.report", "pk": 3, "fields": {"content_type": 67, "object_id": 629, "file_content_type": "PDF", "category": null, "parent_report": 5, "is_active": true, "file_disabled": false, "base_color": "#FFB166", "is_private": false, "mailing_list": null, "report_class": 2, "title": "Multi Indexes Factsheet", "namespace": "multi-indexes", "logo_file": "", "color_palette": 1}}, {"model": "wbreport.report", "pk": 4, "fields": {"content_type": 67, "object_id": 613, "file_content_type": "PDF", "category": null, "parent_report": 5, "is_active": true, "file_disabled": false, "base_color": "#EF476F", "is_private": false, "mailing_list": null, "report_class": 1, "title": "Share class Factsheet", "namespace": "share-class-factsheet", "logo_file": "", "color_palette": 1}}, {"model": "wbreport.report", "pk": 5, "fields": {"content_type": null, "object_id": null, "file_content_type": "PDF", "category": null, "parent_report": null, "is_active": true, "file_disabled": false, "base_color": "#FFF000", "is_private": false, "mailing_list": null, "report_class": 3, "title": "Factsheet", "namespace": "factsheet", "logo_file": "", "color_palette": 1}}, {"model": "wbreport.reportversion", "pk": 1, "fields": {"uuid": "9ebd8023-7ebb-4389-a484-410c7c4aad2a", "lookup": "august-2021", "title": "August 2021", "parameters": {"end": "2021-08-31", "start": "2021-07-30"}, "context": {}, "version_date": "2021-11-09", "creation_date": "2021-11-09T10:15:28.539Z", "update_date": "2021-11-09T13:00:00.665Z", "comment": "", "is_primary": true, "disabled": false, "report": 5}}, {"model": "wbreport.reportversion", "pk": 2, "fields": {"uuid": "8a675145-249e-4183-8f19-5cb023fce8c7", "lookup": "factsheet-august-2021", "title": "Share class - August 2021", "parameters": {"end": "2021-08-31", "start": "2021-07-30"}, "context": {}, "version_date": "2021-11-09", "creation_date": "2021-11-09T10:18:20.567Z", "update_date": "2021-11-09T13:00:01.418Z", "comment": "", "is_primary": true, "disabled": false, "report": 4}}, {"model": "wbreport.reportversion", "pk": 4, "fields": {"uuid": "8e186d05-5298-4ab3-bc0b-6a81398e622a", "lookup": "factsheet-mutli-index-august-2021", "title": "Mutli Index - August 2021", "parameters": {"end": "2021-08-31", "start": "2021-07-30"}, "context": {}, "version_date": "2021-11-09", "creation_date": "2021-11-09T10:19:05.102Z", "update_date": "2021-11-09T13:00:01.962Z", "comment": "", "is_primary": true, "disabled": false, "report": 3}}, {"model": "wbreport.reportversion", "pk": 6, "fields": {"uuid": "825c101e-54ec-4197-ad8a-678bcd6431dd", "lookup": "factsheet-base-product-august-2021", "title": "Base product - August 2021", "parameters": {"end": "2021-08-31", "start": "2021-07-30"}, "context": {}, "version_date": "2021-11-09", "creation_date": "2021-11-09T10:19:41.464Z", "update_date": "2021-11-09T13:00:02.271Z", "comment": "", "is_primary": true, "disabled": false, "report": 2}}, {"model": "wbreport.reportversion", "pk": 7, "fields": {"uuid": "5e1014f0-f211-4b81-b272-4d5284d7ef8c", "lookup": "factsheet-base-index-august-2021", "title": "Base Index - August 2021", "parameters": {"end": "2021-08-31", "start": "2021-07-30"}, "context": {}, "version_date": "2021-11-09", "creation_date": "2021-11-09T10:19:54.422Z", "update_date": "2021-11-09T13:00:02.616Z", "comment": "", "is_primary": true, "disabled": false, "report": 1}}]
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
-- CTE for prices that fetch prices per product converted to USD
|
|
2
|
+
WITH prices AS (
|
|
3
|
+
SELECT
|
|
4
|
+
price.date AS date,
|
|
5
|
+
price.instrument_id AS instrument_id,
|
|
6
|
+
price.net_value AS net_value,
|
|
7
|
+
price.net_value * (1 / fx.value) AS net_value_usd
|
|
8
|
+
FROM wbfdm_instrumentprice AS price
|
|
9
|
+
JOIN currency_currencyfxrates AS fx ON price.currency_fx_rate_to_usd_id = fx.id
|
|
10
|
+
WHERE price.calculated = FALSE
|
|
11
|
+
),
|
|
12
|
+
-- CTE for claims, that fetches approved claims
|
|
13
|
+
claims AS (
|
|
14
|
+
SELECT
|
|
15
|
+
claim.shares,
|
|
16
|
+
claim.date,
|
|
17
|
+
claim.product_id,
|
|
18
|
+
account.tree_id AS tree_id,
|
|
19
|
+
trade.marked_as_internal AS marked_as_internal
|
|
20
|
+
FROM wbportfolio_claim AS claim
|
|
21
|
+
JOIN wbcrm_account AS account
|
|
22
|
+
ON claim.account_id = account.id
|
|
23
|
+
JOIN wbportfolio_trade AS trade
|
|
24
|
+
ON claim.trade_id = trade.transaction_ptr_id
|
|
25
|
+
WHERE claim.status = 'APPROVED'
|
|
26
|
+
),
|
|
27
|
+
-- CTE for claims, that fetches them with their shares and price at transaction date
|
|
28
|
+
claims_with_nav AS (
|
|
29
|
+
SELECT
|
|
30
|
+
claims.date,
|
|
31
|
+
claims.shares,
|
|
32
|
+
claims.product_id,
|
|
33
|
+
nav.net_value_usd,
|
|
34
|
+
accounts.tree_id AS tree_id,
|
|
35
|
+
trade.marked_as_internal as marked_as_internal
|
|
36
|
+
FROM wbportfolio_claim AS claims
|
|
37
|
+
JOIN wbportfolio_trade AS trade
|
|
38
|
+
ON claims.trade_id = trade.transaction_ptr_id
|
|
39
|
+
LEFT JOIN wbcrm_account AS accounts
|
|
40
|
+
ON claims.account_id = accounts.id
|
|
41
|
+
LEFT JOIN LATERAL (
|
|
42
|
+
SELECT
|
|
43
|
+
price.net_value * (1 / cc.value) AS net_value_usd
|
|
44
|
+
FROM wbfdm_instrumentprice AS price
|
|
45
|
+
LEFT JOIN currency_currencyfxrates AS cc
|
|
46
|
+
ON cc.id = price.currency_fx_rate_to_usd_id
|
|
47
|
+
WHERE
|
|
48
|
+
price.instrument_id = claims.product_id
|
|
49
|
+
AND price.date <= claims.date
|
|
50
|
+
AND claims.status = 'APPROVED'
|
|
51
|
+
AND claims.account_id IS NOT NULL
|
|
52
|
+
AND price.calculated = FALSE
|
|
53
|
+
ORDER BY price.date DESC
|
|
54
|
+
LIMIT 1
|
|
55
|
+
) AS nav ON TRUE
|
|
56
|
+
-- CTE to generate a series with year and month already extracted
|
|
57
|
+
), series AS (
|
|
58
|
+
SELECT
|
|
59
|
+
(DATE_TRUNC('month', dts) + INTERVAL '1 month - 1 day')::DATE AS val_date,
|
|
60
|
+
EXTRACT(YEAR FROM dts) AS year,
|
|
61
|
+
EXTRACT(MONTH FROM dts) AS month
|
|
62
|
+
FROM GENERATE_SERIES('{{ from_date | identifier }}'::DATE, '{{ to_date | identifier }}'::DATE, '1 month'::INTERVAL) AS dts
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
SELECT
|
|
66
|
+
series.year AS year,
|
|
67
|
+
series.month AS month,
|
|
68
|
+
SUM(NAV.net_value_usd * HOLDINGS.sum_shares) AS total_assets,
|
|
69
|
+
SUM(COALESCE(NNM.nnm_usd, 0)) AS net_new_money
|
|
70
|
+
|
|
71
|
+
FROM series
|
|
72
|
+
-- Cartesian product with products, to get each item of the series
|
|
73
|
+
-- for each product
|
|
74
|
+
CROSS JOIN wbportfolio_product AS product
|
|
75
|
+
|
|
76
|
+
-- If there is not product_id it means we filter for all products
|
|
77
|
+
-- This means we have to filter out all products that are not
|
|
78
|
+
-- invested to avoid double accounting
|
|
79
|
+
|
|
80
|
+
-- Foreach product/date combination, get the last NAV date available
|
|
81
|
+
LEFT JOIN LATERAL (
|
|
82
|
+
SELECT prices.net_value_usd
|
|
83
|
+
FROM prices
|
|
84
|
+
WHERE
|
|
85
|
+
prices.date <= series.val_date
|
|
86
|
+
AND prices.instrument_id = product.instrument_ptr_id
|
|
87
|
+
ORDER BY prices.date DESC
|
|
88
|
+
LIMIT 1
|
|
89
|
+
) AS NAV ON TRUE
|
|
90
|
+
-- For each product/date combination, get the number of shares
|
|
91
|
+
LEFT JOIN LATERAL (
|
|
92
|
+
SELECT SUM(claims.shares) AS sum_shares
|
|
93
|
+
FROM claims
|
|
94
|
+
WHERE claims.date <= series.val_date
|
|
95
|
+
AND claims.product_id = product.instrument_ptr_id
|
|
96
|
+
{% if account_tree_id %}AND claims.tree_id={{ account_tree_id }}{% endif %}
|
|
97
|
+
{% if not product_id %}AND claims.marked_as_internal=False{% endif %}
|
|
98
|
+
) AS HOLDINGS ON TRUE
|
|
99
|
+
-- For each product/date combination, get the NNM
|
|
100
|
+
LEFT JOIN LATERAL (
|
|
101
|
+
-- Get the number of shares that were created in the month of date (from the series)
|
|
102
|
+
SELECT
|
|
103
|
+
SUM(claims.shares * claims.net_value_usd) AS nnm_usd,
|
|
104
|
+
SUM(claims.shares) as shares
|
|
105
|
+
FROM claims_with_nav as claims
|
|
106
|
+
WHERE
|
|
107
|
+
EXTRACT(YEAR FROM claims.date) = series.year
|
|
108
|
+
AND EXTRACT(MONTH FROM claims.date) = series.month
|
|
109
|
+
AND claims.product_id = product.instrument_ptr_id
|
|
110
|
+
{% if account_tree_id %}AND claims.tree_id={{ account_tree_id }}{% endif %}
|
|
111
|
+
{% if not product_id %}AND claims.marked_as_internal=False{% endif %}
|
|
112
|
+
) AS NNM ON TRUE
|
|
113
|
+
|
|
114
|
+
-- if we pass in the product_id, we only display the data for this particular product
|
|
115
|
+
{% if product_id %}
|
|
116
|
+
WHERE product.instrument_ptr_id = {{ product_id }}
|
|
117
|
+
{% endif %}
|
|
118
|
+
|
|
119
|
+
GROUP BY series.year, series.month
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
.page-header {
|
|
2
|
+
background-color: #051f2d;
|
|
3
|
+
text-align: center;
|
|
4
|
+
font-size: 30px;
|
|
5
|
+
color: #fff;
|
|
6
|
+
border-radius: 0;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
strong {
|
|
10
|
+
color: #f25d47;
|
|
11
|
+
font-weight: 700;
|
|
12
|
+
white-space: nowrap;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.page-content {
|
|
16
|
+
padding: 0 30px;
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
### Welcome to the Account Holding Reconciliation. Please confirm your holdings:
|
|
2
|
+
|
|
3
|
+
* **Confirm Holdings**: Press the **'Agree'** button.
|
|
4
|
+
* **Disagree with Holdings**: Adjust your holdings and press the **'Communicate Differences'** button. (This button will appear after adjustments are made.)
|
|
5
|
+
|
|
6
|
+
### How to Adjust Your Holdings:
|
|
7
|
+
|
|
8
|
+
* Select the **shares** or **nominal value** cell in the "Your Input" column.
|
|
9
|
+
* Press **Enter**, adjust the value, and press **Enter** again.
|
|
10
|
+
* Alternatively, right-click the cell and select **'Edit'** to adjust the value.
|
|
11
|
+
|
|
12
|
+
### Additional Options:
|
|
13
|
+
|
|
14
|
+
* **View all Subscriptions/Redemptions**: Press the **'Show Subscriptions/Redemptions'** button.
|
|
15
|
+
* **Add a Subscription/Redemption**: Press the **'Add Subscription/Redemption'** button.
|
|
16
|
+
* **Single Product Actions**: Right-click any row below to display all Subscriptions/Redemptions or add a new Subscription/Redemption for a specific product.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Aggregate AssetPosition Liquidity Table View
|
|
2
|
+
|
|
3
|
+
The purpose of this view is to observe how fast an aggregated asset position
|
|
4
|
+
can be sold across all portfolios. We have two columns for two different dates.
|
|
5
|
+
One column shows the velocity and the other one shows the relative percent of
|
|
6
|
+
the total AuM (Asset under Management), "Days to Liquidate" and "Percent AUM"
|
|
7
|
+
respectively.
|
|
8
|
+
|
|
9
|
+
Some good things to know:
|
|
10
|
+
|
|
11
|
+
- We use the mean volume for the last 50 days.
|
|
12
|
+
|
|
13
|
+
- One third of the average volume for an asset position is
|
|
14
|
+
used to estimate the velocity. This number is subjective and attempts
|
|
15
|
+
to represent the number of trades that can be made.
|
|
16
|
+
|
|
17
|
+
- If we have a value for more than 3 days to sell an asset position,
|
|
18
|
+
the latter will be displayed in yellow. If this value is greater than 5,
|
|
19
|
+
it will be in red.
|
|
20
|
+
|
|
21
|
+
- We can use a filter that only displays asset positions that have a date
|
|
22
|
+
to liquidate greater than a given value for the Historic Date.
|
|
23
|
+
|
|
24
|
+
- The "Compared Date" is used to compare the asset position with the Historic Date.
|
|
25
|
+
Therefore, the values are not sorted for the last two columns.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Companies
|
|
2
|
+
A list of every company saved in the database.
|
|
3
|
+
|
|
4
|
+
## Columns:
|
|
5
|
+
Each column title has three lines on the right if you hover over it. Click on them to show options for that column. The second tab of the options menu will allow you to filter the column, the third to completely hide entire columns. Click on anywhere else on the column to order it, cycling between ascending, descending and no ordering. Hold shift while clicking to order multiple columns with individual weights.
|
|
6
|
+
|
|
7
|
+
### Name:
|
|
8
|
+
The name of the company.
|
|
9
|
+
|
|
10
|
+
### City:
|
|
11
|
+
The city of the company's primary address. Hover over the name to display the full address.
|
|
12
|
+
|
|
13
|
+
### Type:
|
|
14
|
+
The company's type. Company types can be added, edited and deleted by managers under CRM > Administration > Company Types.
|
|
15
|
+
|
|
16
|
+
### Tier:
|
|
17
|
+
The company's tier. Tiers range from 1 to 5 and are automatically computed like this:
|
|
18
|
+
_Company is of status client or TPM:_
|
|
19
|
+
| Invested AUM / AUM | Tier |
|
|
20
|
+
| -------- | --------|
|
|
21
|
+
| > 0.1 | Tier 1 |
|
|
22
|
+
| 0.05 - 0.1 | Tier 2 |
|
|
23
|
+
| 0.02 - 0.05 | Tier 3 |
|
|
24
|
+
| 0.01 - 0.02 | Tier 4 |
|
|
25
|
+
| default | Tier 5 |
|
|
26
|
+
|
|
27
|
+
_Company is *not* of status client or TPM:_
|
|
28
|
+
| AUM | Tier |
|
|
29
|
+
| -------- | --------|
|
|
30
|
+
| > 10,000,000,000 $ | Tier 1 |
|
|
31
|
+
| 5,000,000,000 \$ - 10,000,000,000 $ | Tier 2 |
|
|
32
|
+
| 1,000,000,000 \$ - 5,000,000,000 $ | Tier 3 |
|
|
33
|
+
| 500,000,000 \$ - 1,000,000,000 $ | Tier 4 |
|
|
34
|
+
| default | Tier 5 |
|
|
35
|
+
|
|
36
|
+
### Status:
|
|
37
|
+
The company's status. Company statuses can be added, edited and deleted by managers under CRM > Administration > Customer Status.
|
|
38
|
+
|
|
39
|
+
### AUM Invested:
|
|
40
|
+
The company's assets under management managed by the main company.
|
|
41
|
+
|
|
42
|
+
### AUM:
|
|
43
|
+
Total assets under management for the company.
|
|
44
|
+
|
|
45
|
+
### Potential:
|
|
46
|
+
The potential reflects how much potential a company (regardless if client/propective) has. Formula: AUM * (Asset Allocation * Asset Allocation Max Investment) - Invested AUM. The field is populated automatically.
|
|
47
|
+
|
|
48
|
+
### Primary Relationship Manager:
|
|
49
|
+
The primary relationship manager of this company. Hover over the name to display further information about the person.
|
|
50
|
+
|
|
51
|
+
### Last Activity:
|
|
52
|
+
The name and end date of the company's last activity. Hover over it to display further information about the activity. Column can also be ordered by end date of the activity.
|
|
53
|
+
|
|
54
|
+
### Activity Heat:
|
|
55
|
+
A visual representation of the company's activeness. The data representation ranges from 0 to 1 which needs to be kept in mind to be able to apply a proper filter to the column.
|
|
56
|
+
|
|
57
|
+
## Filters:
|
|
58
|
+
|
|
59
|
+
### No Activity:
|
|
60
|
+
Filter companies with no activity for x amount of time.
|
|
61
|
+
|
|
62
|
+
### Companies' Employee:
|
|
63
|
+
Display employers of the selected person.
|
|
64
|
+
|
|
65
|
+
## Search Field:
|
|
66
|
+
Typing in the search field allows to filter the companies by name.
|
|
67
|
+
|
|
68
|
+
## Buttons:
|
|
69
|
+
You can right-click each row to reveal three buttons:
|
|
70
|
+
|
|
71
|
+
### Activities:
|
|
72
|
+
Displays activities for the row's company.
|
|
73
|
+
|
|
74
|
+
### Employees:
|
|
75
|
+
Displays a list of the company's employees.
|
|
76
|
+
|
|
77
|
+
### Relationship Managers:
|
|
78
|
+
Displays all relationship managers of the row's company.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Earnings Analysis
|
|
2
|
+
|
|
3
|
+
Consensus $ EPS
|
|
4
|
+
|
|
5
|
+
## Filters
|
|
6
|
+
|
|
7
|
+
A set of filters that control the analysis is available:
|
|
8
|
+
|
|
9
|
+
1. **Analysis**: EPS ($)
|
|
10
|
+
- **$ EPS [default view]**: By default shows an aggregated $ EPS (weighted).
|
|
11
|
+
|
|
12
|
+
2. **Period**: Common periods (TTM, FTM, FY+1, FY+2) are available with **FTW** set by default.
|
|
13
|
+
|
|
14
|
+
3. **Show related**: Adds lines for all specified peers if available
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Relative valuation
|
|
2
|
+
|
|
3
|
+
Classic and commonly used relative ratios PE, PEG, PS, PFCF, EV-EBITDA
|
|
4
|
+
Additional comparative metrics: growth (EPS, Sales, FCF), EV, Market Cap
|
|
5
|
+
|
|
6
|
+
## Filters
|
|
7
|
+
|
|
8
|
+
A set of filter is available:
|
|
9
|
+
1. **Output**: Chart, Table (Last Value), Table (Time-series)
|
|
10
|
+
- **Chart [default view]**: By default shows all ratios for the instrument in question in one figure with PEG on a secondary/right axis.
|
|
11
|
+
- **Table (Last Value)**: By default shows the last available value for all ratios for the instrument in question in one table.
|
|
12
|
+
- **Table (Time-series)**: Shows all available values for all ratios for the instrument in question in one table.
|
|
13
|
+
|
|
14
|
+
2. **Period**: Common periods (TTM, FTW, FY+1, FY+2) are available with **FTW** set by default.
|
|
15
|
+
|
|
16
|
+
3. **Versus related (not available in the Time-series view):**
|
|
17
|
+
- if the view "**Table (Last Value)**" is set, then all available related instruments (peers, partners, suppliers, etc.) will be shown in the same table, including Mean and Median values.
|
|
18
|
+
- if the view "**Chart**" is set, then all available related instruments (peers, partners, suppliers, etc.) will be shown in the same chart. Additionally, the user may choose which variables to show on X,Y,and Bubble Size axis. Median line may be disactivated, if desired.
|
|
19
|
+
|
|
20
|
+
4. **Draw ranges**: if the view "**Chart**" is set, then each ratio will be shown on a separate subplot with historic min-max ranges shown with dashed lines.
|
|
21
|
+
|
|
22
|
+
5. **Range type**: if the view "**Chart**" is set and "**Draw ranges**" is activated, then a user may choose the type of "min-max" range: Min-Max (entire period) or Rolling.
|
|
23
|
+
- **"Min-Max (entire period)"** looks for the min and max values for each ratio across the entire period in questions and sets it for the entire graph.
|
|
24
|
+
- **"Rolling"** looks for the min and max values for each ratio across the "Rolling Period" specified in a separate filter.
|
|
25
|
+
|
|
26
|
+
6. **Rolling period**: works with "**Range type**" filter if the view "**Chart**" is set and "**Draw ranges**" is activated.
|
|
27
|
+
|
|
28
|
+
7. **Clean data** (more "treatment"): significant and heavy data cleaning will be applied to all variables. For **each** series:
|
|
29
|
+
- All raw input data is forward and then backward filled.
|
|
30
|
+
- All empty rows are deleted and remaining blanks for all variables are filled by linear interpolation.
|
|
31
|
+
- Ratios are then normally calculated.
|
|
32
|
+
- The resulting series are cleaned for outliers (values in the top and bottom 5% are deleted).
|
|
33
|
+
- All negative (incl. EV/S) and NaN values are set to Null (deleted as "non-meaningful").
|
|
34
|
+
- All values above a certain threshold (by default 100) are deleted. **Exceptions** are:
|
|
35
|
+
- PEG above 15
|
|
36
|
+
- PS above 40
|
|
37
|
+
- The remaining series are forward and backward filled to clean missing values for smoother series.
|
|
38
|
+
- All series are smoothed (3-day simple moving average). The **PEG** series is smoothed differently (10-day simple moving average).
|
|
39
|
+
|
|
40
|
+
8. **X-Axis**: works if the view "**Chart**" is set and "**Versus related**" is activated. Controls the variable shown on the x-axis.
|
|
41
|
+
|
|
42
|
+
9. **Y-Axis**: works if the view "**Chart**" is set and "**Versus related**" is activated. Controls the variable shown on the y-axis.
|
|
43
|
+
|
|
44
|
+
10. **Z-Axis (bubble size)**: works if the view "**Chart**" is set and "**Versus related**" is activated. Controls the variable shown on the z-axis/bubble size.
|
|
45
|
+
|
|
46
|
+
11. **Median**: works if the view "**Chart**" is set and "**Versus related**" is activated. Calculates the median for **X-Axis** and **Y-Axis** variables across the entire period range.
|
|
47
|
+
|
|
48
|
+
## Formulas
|
|
49
|
+
|
|
50
|
+
#### FY+1 and FY+2
|
|
51
|
+
|
|
52
|
+
$$
|
|
53
|
+
Ratio_{t} = Price_{t} / Ratio\: Item_{t}
|
|
54
|
+
$$
|
|
55
|
+
|
|
56
|
+
$
|
|
57
|
+
where \\
|
|
58
|
+
$
|
|
59
|
+
$$
|
|
60
|
+
t = day \\
|
|
61
|
+
$$
|
|
62
|
+
$
|
|
63
|
+
Ratio\: Item =
|
|
64
|
+
$
|
|
65
|
+
$$
|
|
66
|
+
EPS = Daily\: Consensus\: Net\: Profit\: Forecast / Number\:of\:shares\\
|
|
67
|
+
or \\
|
|
68
|
+
Revenue\: per\: share = Daily\: Consensus\: Revenue\: Forecast / Number\:of\:shares\\
|
|
69
|
+
or \\
|
|
70
|
+
EBITDA\: per\: share = Daily\: Consensus\: EBITDA\; Forecast / Number\:of\:shares\\
|
|
71
|
+
or \\
|
|
72
|
+
FCF = Daily\: Consensus\: FreeCashFlow\; Forecast / Number\:of\:shares\\
|
|
73
|
+
$$
|
|
74
|
+
|
|
75
|
+
#### Trailing Twelve Month (TTM) and Next Twelve Month (NTM) *also known as Forward Twelve Months (FTM)*
|
|
76
|
+
\
|
|
77
|
+
$
|
|
78
|
+
Ratio\: Item =
|
|
79
|
+
$
|
|
80
|
+
$$
|
|
81
|
+
EPS = Daily\: EPS\: TTM\: \\
|
|
82
|
+
or \\
|
|
83
|
+
Revenue\: or\: EBITDA\: or\: FCF\: per\: share = Interpolated\: between\: consensus\: FY+2\:,\: FY+1 \\
|
|
84
|
+
Revenue\: or\: EBITDA\: or\: FCF\:per\: share =Interpolated\: between\: FY+1\:(current)\:,\: FY0\:(last)\:,\: FY-1\:(previous) \\
|
|
85
|
+
$$
|
|
86
|
+
|
|
87
|
+
#### Trailing Twelve Month (TTM) and Next Twelve Month (NTM) *also known as Forward Twelve Months (FTM)*
|
|
88
|
+
\
|
|
89
|
+
$
|
|
90
|
+
DailyPEG_{fy+1} = Price / EPS_{fy+1} / Growth_{fy+1\: vs\: fy0} \\
|
|
91
|
+
DailyPEG_{fy+2} = Price / EPS_{fy+2} / Growth_{geoavg(fy+2\: vs\: fy1,\:fy+1\: vs\: fy0)} \\
|
|
92
|
+
DailyPEG_{NTM} = Price / EPS_{NTM} / Growth_{ntm\: vs\: ttm} \\
|
|
93
|
+
DailyPEG_{TTM} = Price / EPS_{TTM} / Growth_{ttm\: vs\: ttm_{t-1}} \\
|
|
94
|
+
$
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Financial Statistics
|
|
2
|
+
|
|
3
|
+
Here is a list of different financial statistics that can help to evaluate performance and risk of an instrument against
|
|
4
|
+
his benchmark.
|
|
5
|
+
|
|
6
|
+
### Meaning:
|
|
7
|
+
1. Mean Return: it is the average of all the returns during the period.
|
|
8
|
+
2. Volatility: it is a statistical measure of the dispersion of returns.
|
|
9
|
+
3. Maximum Drawdown: a drawdown is the return between the current price and the last highest price. If the current price
|
|
10
|
+
is the last highest price, the drawdown is 0. Therefore, drawdowns are only negative values. The maximum drawdown
|
|
11
|
+
(MDD) is the biggest fall in terms of return.
|
|
12
|
+
4. Longest Drawdown Period: the longest number of days to recover his last highest price.
|
|
13
|
+
5. Last cumulative return: a cumulative return on an investment is the aggregate amount that the investment has gained
|
|
14
|
+
or lost over time, independent of the amount of time involved. The last cumulative return is the return between the
|
|
15
|
+
first price and last price over the period.
|
|
16
|
+
6. Value at Risk: the Value at Risk (VaR) is a downside risk measure. The idea is to keep the worst returns which are
|
|
17
|
+
lower than a specific return based on a quantile (default value is 5%). Once we have these worst returns, the VaR is
|
|
18
|
+
the highest one (so the "least bad"). The quantile number for the VaR is called alpha in finance. This process is the
|
|
19
|
+
historical VaR approach.
|
|
20
|
+
7. Conditional Value at Risk: The CVaR is a downside risk measure. It is the same process as the VaR, however it is the
|
|
21
|
+
mean of the worst returns. The CVaR is an absolute value (always positive).
|
|
22
|
+
8. Skewness: in statistics, skewness is the degree of asymmetry observed in a probability function. For instance,
|
|
23
|
+
negative skewness occurs when the returns to the left of (less than) the mean are fewer but farther from it than
|
|
24
|
+
returns to the right of (greater than) the mean.
|
|
25
|
+
9. Excess Kurtosis: Like Skewness, Kurtosis is a statistical measure that is used to describe distribution. Whereas
|
|
26
|
+
skewness differentiates extreme values in one versus the other tail, kurtosis measures extreme values in either tail.
|
|
27
|
+
For instance, a higher kurtosis means that there are more extreme returns (positive and negative).
|
|
28
|
+
10. Compound Annual Growth Rate: The CAGR is a rate of return that would be required for an investment to grow from its
|
|
29
|
+
beginning balance to its ending balance, assuming the profits were reinvested at the end of each year of the
|
|
30
|
+
investment’s life span.
|
|
31
|
+
11. Sortino Ratio: it is a downside risk ratio. In finance, the most important risk is not volatility, but rather the
|
|
32
|
+
risk of not achieving the return in relation to an investment goal. Here it is not the same formula as investopedia,
|
|
33
|
+
so it is not the Sortino Ratio as everybody know. Here we use the target level instead of the risk free rate (it is
|
|
34
|
+
mostly the same thing). To calculate the Sortino Ratio, first we need only the returns that are below the target
|
|
35
|
+
level (default value is 0). Then, we take those returns, square them, sum them, divide by the total number of
|
|
36
|
+
returns (not only those who are below the target level) and finally square root them. This is what we call the
|
|
37
|
+
« below-target semi-deviation ». Calculate the annualized return and also annualized the below-target
|
|
38
|
+
semi-deviation. Take the annualized return, soustract by the target level and finally divide by the annualized
|
|
39
|
+
below-target semi-deviation.
|
|
40
|
+
12. Adjusted Sortino Ratio: it is just the Sortino Ratio divided by square root of 2.
|
|
41
|
+
13. Calmar Ratio: it is the CAGR divided by the MDD.
|
|
42
|
+
14. Sterling Ratio: it is the annualized returns soustracted by the risk free rate, divided by the MDD.
|
|
43
|
+
15. Burke Ratio: it is the annualized returns soustracted by the risk free rate, divided by the square root of the sum
|
|
44
|
+
of the square of the drawdowns.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Persons
|
|
2
|
+
A list of every person saved in the database.
|
|
3
|
+
|
|
4
|
+
## Columns:
|
|
5
|
+
Each column title has three lines on the right if you hover over it. Click on them to show options for that column. The second tab of the options menu will allow you to filter the column, the third to completely hide entire columns. Click on anywhere else on the column to order it, cycling between ascending, descending and no ordering. Hold shift while clicking to order multiple columns with individual weights.
|
|
6
|
+
|
|
7
|
+
### Name:
|
|
8
|
+
The first and last name of the person.
|
|
9
|
+
|
|
10
|
+
### Primary Employer:
|
|
11
|
+
The primary employer of the person.
|
|
12
|
+
|
|
13
|
+
### Status:
|
|
14
|
+
The primary employer's status. Company statuses can be added, edited and deleted by managers under CRM > Administration > Customer Status.
|
|
15
|
+
|
|
16
|
+
### Position:
|
|
17
|
+
The position of the person within its primary employer. Positions can be added, edited and deleted by managers under CRM > Administration > Company Positions.
|
|
18
|
+
|
|
19
|
+
### City:
|
|
20
|
+
The city of the person's primary address. Hover over the name to display the full address.
|
|
21
|
+
|
|
22
|
+
### Primary Phone Number:
|
|
23
|
+
The person's primary phone number.
|
|
24
|
+
|
|
25
|
+
### Tier:
|
|
26
|
+
The person's primary employer's tier. Tiers range from 1 to 5 and are automatically computed.
|
|
27
|
+
|
|
28
|
+
### AUM Invested:
|
|
29
|
+
The person's primary employer's assets under management managed by the main company.
|
|
30
|
+
|
|
31
|
+
### AUM:
|
|
32
|
+
Total assets under management for the person's primary employer.
|
|
33
|
+
|
|
34
|
+
### Potential:
|
|
35
|
+
The potential reflects how much potential a person's primary employer (regardless of whether this employer is a client or propective) has. Formula: AUM * (Asset Allocation * Asset Allocation Max Investment) - Invested AUM. The field is populated automatically.
|
|
36
|
+
|
|
37
|
+
### Primary Relationship Manager:
|
|
38
|
+
The primary relationship manager of this person. Hover over the name to display further information about the person.
|
|
39
|
+
|
|
40
|
+
### Last Activity:
|
|
41
|
+
The name and end date of the person's last activity. Hover over it to display further information about the activity. Column can also be ordered by end date of the activity.
|
|
42
|
+
|
|
43
|
+
### Activity Heat:
|
|
44
|
+
A visual representation of the person's activeness. The data representation ranges from 0 to 1 which needs to be kept in mind to be able to apply a proper filter to the column.
|
|
45
|
+
|
|
46
|
+
## Filters:
|
|
47
|
+
|
|
48
|
+
### Specializations:
|
|
49
|
+
Filter persons by their specializations.
|
|
50
|
+
|
|
51
|
+
### No Activity:
|
|
52
|
+
Filter persons with no activity for x amount of time.
|
|
53
|
+
|
|
54
|
+
### Has User Account:
|
|
55
|
+
Filter persons by if they have a user account on the workbench.
|
|
56
|
+
|
|
57
|
+
### Email:
|
|
58
|
+
Filter persons by their email address.
|
|
59
|
+
|
|
60
|
+
## Search Field:
|
|
61
|
+
Typing in the search field allows to filter the persons by name.
|
|
62
|
+
|
|
63
|
+
## Buttons:
|
|
64
|
+
Each row can be right-clicked to reveal two buttons at the end of it.
|
|
65
|
+
|
|
66
|
+
### Activities:
|
|
67
|
+
Displays all activities for the row's person.
|
|
68
|
+
|
|
69
|
+
### Relationship Managers:
|
|
70
|
+
Displays all relationship managers of the row's person.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{% extends "notifications/email_template.html" %}
|
|
2
|
+
|
|
3
|
+
{% block body %}
|
|
4
|
+
<p style="font-size: 20px; color: #313952; text-align: center;"><strong>Dear {{profile.first_name}} {{profile.last_name}}</strong></p>
|
|
5
|
+
<p style="text-align: center;">Attached you find the requested Excel-Report for {{customer.search_name}}</p>
|
|
6
|
+
{% endblock %}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{% extends "wbcore/email_base_template.html" %}
|
|
2
|
+
|
|
3
|
+
{% block body %}
|
|
4
|
+
<p>
|
|
5
|
+
<strong>A Customer Trade was saved that might be related to your managed sub accounts:</strong><br />
|
|
6
|
+
</p>
|
|
7
|
+
<p style="text-align: left; text-decoration: underline;">Claim info:</p>
|
|
8
|
+
<p style="text-align: left;">
|
|
9
|
+
<ul style="text-align: left;">
|
|
10
|
+
<li><b>Bank:</b> {{model.bank}}</li>
|
|
11
|
+
<li><b>Product:</b> {{model.product.title}}</li>
|
|
12
|
+
<li><b>Trade Date:</b> {{model.transaction_date}}</li>
|
|
13
|
+
<li><b>Shares:</b> {{model.shares}}</li>
|
|
14
|
+
<li><b>Price:</b> {{model.price}}</li>
|
|
15
|
+
{% if notification.external_identifier %}
|
|
16
|
+
<li><b>External Identifier:</b> {{model.external_id}}</li>
|
|
17
|
+
{% endif %}
|
|
18
|
+
{% if notification.message %}
|
|
19
|
+
<li><b>Related SubAccounts:</b> {{notification.message}}</li>
|
|
20
|
+
{% endif %}
|
|
21
|
+
{% if model.comment%}
|
|
22
|
+
<li><b>Comment:</b> <i>{{model.comment|safe}}</i></li>
|
|
23
|
+
{% endif %}
|
|
24
|
+
</ul>
|
|
25
|
+
</p>
|
|
26
|
+
{% endblock %}
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"
|
|
3
|
+
xmlns:o="urn:schemas-microsoft-com:office:office">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="utf-8"> <!-- utf-8 works for most cases -->
|
|
7
|
+
<meta name="viewport" content="width=device-width"> <!-- Forcing initial-scale shouldn't be necessary -->
|
|
8
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- Use the latest (edge) version of IE rendering engine -->
|
|
9
|
+
<meta name="x-apple-disable-message-reformatting"> <!-- Disable auto-scale in iOS 10 Mail entirely -->
|
|
10
|
+
<meta http-equiv="Content-Type" content="text/html charset=UTF-8" />
|
|
11
|
+
<title>{{ email_title }}</title> <!-- The title tag shows in email notifications, like Android 4.4. -->
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
<style type="text/css">
|
|
15
|
+
table {
|
|
16
|
+
border-collapse: separate;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
a,
|
|
20
|
+
a:link,
|
|
21
|
+
a:visited {
|
|
22
|
+
text-decoration: none;
|
|
23
|
+
color: #00788a;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
a:hover {
|
|
27
|
+
text-decoration: underline;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
h2,
|
|
31
|
+
h2 a,
|
|
32
|
+
h2 a:visited,
|
|
33
|
+
h3,
|
|
34
|
+
h3 a,
|
|
35
|
+
h3 a:visited,
|
|
36
|
+
h4,
|
|
37
|
+
h5,
|
|
38
|
+
h6,
|
|
39
|
+
.t_cht {
|
|
40
|
+
color: #000 !important;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.ExternalClass p,
|
|
44
|
+
.ExternalClass span,
|
|
45
|
+
.ExternalClass font,
|
|
46
|
+
.ExternalClass td {
|
|
47
|
+
line-height: 100%;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.ExternalClass {
|
|
51
|
+
width: 100%;
|
|
52
|
+
}
|
|
53
|
+
</style>
|
|
54
|
+
</style>
|
|
55
|
+
<!-- CSS Reset : BEGIN -->
|
|
56
|
+
<style>
|
|
57
|
+
/* What it does: Remove spaces around the email design added by some email clients. */
|
|
58
|
+
/* Beware: It can remove the padding / margin and add a background color to the compose a reply window. */
|
|
59
|
+
html,
|
|
60
|
+
body {
|
|
61
|
+
margin: 0 auto !important;
|
|
62
|
+
padding: 0 !important;
|
|
63
|
+
height: 100% !important;
|
|
64
|
+
width: 100% !important;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* What it does: Stops email clients resizing small text. */
|
|
68
|
+
* {
|
|
69
|
+
-ms-text-size-adjust: 100%;
|
|
70
|
+
-webkit-text-size-adjust: 100%;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* What it does: Centers email on Android 4.4 */
|
|
74
|
+
div[style*="margin: 16px 0"] {
|
|
75
|
+
margin: 0 !important;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* What it does: Stops Outlook from adding extra spacing to tables. */
|
|
79
|
+
table,
|
|
80
|
+
td {
|
|
81
|
+
mso-table-lspace: 0pt !important;
|
|
82
|
+
mso-table-rspace: 0pt !important;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* What it does: Fixes webkit padding issue. Fix for Yahoo mail table alignment bug. Applies table-layout to the first 2 tables then removes for anything nested deeper. */
|
|
86
|
+
table {
|
|
87
|
+
border-spacing: 0 !important;
|
|
88
|
+
border-collapse: collapse !important;
|
|
89
|
+
table-layout: fixed !important;
|
|
90
|
+
margin: 0 auto !important;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
table table table {
|
|
94
|
+
table-layout: auto;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* What it does: Uses a better rendering method when resizing images in IE. */
|
|
98
|
+
img {
|
|
99
|
+
-ms-interpolation-mode: bicubic;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* What it does: A work-around for email clients meddling in triggered links. */
|
|
103
|
+
*[x-apple-data-detectors],
|
|
104
|
+
/* iOS */
|
|
105
|
+
.x-gmail-data-detectors,
|
|
106
|
+
/* Gmail */
|
|
107
|
+
.x-gmail-data-detectors *,
|
|
108
|
+
.aBn {
|
|
109
|
+
border-bottom: 0 !important;
|
|
110
|
+
cursor: default !important;
|
|
111
|
+
color: inherit !important;
|
|
112
|
+
text-decoration: none !important;
|
|
113
|
+
font-size: inherit !important;
|
|
114
|
+
font-family: inherit !important;
|
|
115
|
+
font-weight: inherit !important;
|
|
116
|
+
line-height: inherit !important;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* What it does: Prevents Gmail from displaying an download button on large, non-linked images. */
|
|
120
|
+
.a6S {
|
|
121
|
+
display: none !important;
|
|
122
|
+
opacity: 0.01 !important;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* If the above doesn't work, add a .g-img class to any image in question. */
|
|
126
|
+
img.g-img+div {
|
|
127
|
+
display: none !important;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* What it does: Prevents underlining the button text in Windows 10 */
|
|
131
|
+
.button-link {
|
|
132
|
+
text-decoration: none !important;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* What it does: Removes right gutter in Gmail iOS app: https://github.com/TedGoas/Cerberus/issues/89 */
|
|
136
|
+
/* Create one of these media queries for each additional viewport size you'd like to fix */
|
|
137
|
+
|
|
138
|
+
/* iPhone 4, 4S, 5, 5S, 5C, and 5SE */
|
|
139
|
+
@media only screen and (min-device-width: 320px) and (max-device-width: 374px) {
|
|
140
|
+
.email-container {
|
|
141
|
+
min-width: 320px !important;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* iPhone 6, 6S, 7, 8, and X */
|
|
146
|
+
@media only screen and (min-device-width: 375px) and (max-device-width: 413px) {
|
|
147
|
+
.email-container {
|
|
148
|
+
min-width: 375px !important;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* iPhone 6+, 7+, and 8+ */
|
|
153
|
+
@media only screen and (min-device-width: 414px) {
|
|
154
|
+
.email-container {
|
|
155
|
+
min-width: 414px !important;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Google webfonts. Recommended to include the .woff version for cross-client compatibility.
|
|
161
|
+
*/
|
|
162
|
+
@media screen {
|
|
163
|
+
@font-face {
|
|
164
|
+
font-family: 'Source Sans Pro';
|
|
165
|
+
font-style: normal;
|
|
166
|
+
font-weight: 400;
|
|
167
|
+
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v10/ODelI1aHBYDBqgeIAH2zlBM0YzuT7MdOe03otPbuUS0.woff) format('woff');
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
@font-face {
|
|
171
|
+
font-family: 'Source Sans Pro';
|
|
172
|
+
font-style: normal;
|
|
173
|
+
font-weight: 700;
|
|
174
|
+
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(https://fonts.gstatic.com/s/sourcesanspro/v10/toadOcfmlt9b38dHJxOBGFkQc6VGVFSmCnC_l7QZG60.woff) format('woff');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Avoid browser level font resizing.
|
|
180
|
+
* 1. Windows Mobile
|
|
181
|
+
* 2. iOS / OSX
|
|
182
|
+
*/
|
|
183
|
+
body,
|
|
184
|
+
table,
|
|
185
|
+
td,
|
|
186
|
+
a {
|
|
187
|
+
-ms-text-size-adjust: 100%;
|
|
188
|
+
/* 1 */
|
|
189
|
+
-webkit-text-size-adjust: 100%;
|
|
190
|
+
/* 2 */
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Remove extra space added to tables and cells in Outlook.
|
|
195
|
+
*/
|
|
196
|
+
table,
|
|
197
|
+
td {
|
|
198
|
+
mso-table-rspace: 0pt;
|
|
199
|
+
mso-table-lspace: 0pt;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Better fluid images in Internet Explorer.
|
|
204
|
+
*/
|
|
205
|
+
img {
|
|
206
|
+
-ms-interpolation-mode: bicubic;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Remove blue links for iOS devices.
|
|
211
|
+
*/
|
|
212
|
+
a[x-apple-data-detectors] {
|
|
213
|
+
font-family: inherit !important;
|
|
214
|
+
font-size: inherit !important;
|
|
215
|
+
font-weight: inherit !important;
|
|
216
|
+
line-height: inherit !important;
|
|
217
|
+
color: inherit !important;
|
|
218
|
+
text-decoration: none !important;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Fix centering issues in Android 4.4.
|
|
223
|
+
*/
|
|
224
|
+
div[style*="margin: 16px 0;"] {
|
|
225
|
+
margin: 0 !important;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
body {
|
|
229
|
+
width: 100% !important;
|
|
230
|
+
height: 100% !important;
|
|
231
|
+
padding: 0 !important;
|
|
232
|
+
margin: 0 !important;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Collapse table borders to avoid space between cells.
|
|
237
|
+
*/
|
|
238
|
+
table {
|
|
239
|
+
border-collapse: collapse !important;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
a {
|
|
243
|
+
color: #1a82e2;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
img {
|
|
247
|
+
height: auto;
|
|
248
|
+
line-height: 100%;
|
|
249
|
+
text-decoration: none;
|
|
250
|
+
border: 0;
|
|
251
|
+
outline: none;
|
|
252
|
+
}
|
|
253
|
+
</style>
|
|
254
|
+
<!-- CSS Reset : END -->
|
|
255
|
+
|
|
256
|
+
<style>
|
|
257
|
+
.fluid {
|
|
258
|
+
width: 100%;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.fixed {
|
|
262
|
+
width: 800px;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
#body-table {
|
|
266
|
+
width: 100%;
|
|
267
|
+
margin: auto;
|
|
268
|
+
border-collapse: collapse;
|
|
269
|
+
table-layout: fixed;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
#body-table #white-row> .white-col{
|
|
273
|
+
height: 25px;
|
|
274
|
+
background-color: #eaf2ff;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
#body-table #first-row>.spacer-left,
|
|
278
|
+
#body-table #first-row>.spacer-right {
|
|
279
|
+
height: 44px;
|
|
280
|
+
background-color: white;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
#body-table #title-row>.spacer-left,
|
|
284
|
+
#body-table #title-row>.spacer-right {
|
|
285
|
+
height: 50px;
|
|
286
|
+
background-color: #eaf2ff;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
#body-table #title-logo {
|
|
290
|
+
position: relative;
|
|
291
|
+
height: 90px;
|
|
292
|
+
vertical-align: middle;
|
|
293
|
+
text-align: center;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
#body-table #content-row>.spacer-left,
|
|
297
|
+
#body-table #content-row>.spacer-right {
|
|
298
|
+
background-color: #eaf2ff;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
#body-table #content-row>#body-content {
|
|
302
|
+
position: relative;
|
|
303
|
+
background-color: #fff;
|
|
304
|
+
padding: 30px;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
#body-table #spacer-row>.spacer-left,
|
|
308
|
+
#body-table #spacer-row>.spacer-middle,
|
|
309
|
+
#body-table #spacer-row>.spacer-right {
|
|
310
|
+
height: 50px;
|
|
311
|
+
background-color: #eaf2ff;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
#body-table #footer-row {
|
|
315
|
+
border-top: 1px solid #ccdff3;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
#body-table #footer-row>.spacer-left,
|
|
319
|
+
#body-table #footer-row>#footer-content,
|
|
320
|
+
#body-table #footer-row>.spacer-right {
|
|
321
|
+
background-color: #eaf2ff;
|
|
322
|
+
padding-top: 15px;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
#body-table #footer-row>#footer-content {
|
|
326
|
+
padding-bottom: 40px !important;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
#footer-content>p {
|
|
330
|
+
font-size: 10px !important;
|
|
331
|
+
color: #a4b3cb !important;
|
|
332
|
+
margin-top: 0 !important;
|
|
333
|
+
}
|
|
334
|
+
</style>
|
|
335
|
+
|
|
336
|
+
</head>
|
|
337
|
+
|
|
338
|
+
<body width="100%" bgcolor="white" style="margin: 0; mso-line-height-rule: exactly;text-align: center;">
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
<!-- Visually Hidden Preheader Text : BEGIN -->
|
|
342
|
+
<div
|
|
343
|
+
style="display: none; font-size: 1px; line-height: 1px; max-height: 0px; max-width: 0px; opacity: 0; overflow: hidden; mso-hide: all; font-family: sans-serif;">
|
|
344
|
+
{% block email_hidden_header %}
|
|
345
|
+
{% endblock %}
|
|
346
|
+
</div>
|
|
347
|
+
<!-- Visually Hidden Preheader Text : END -->
|
|
348
|
+
|
|
349
|
+
<!-- Email Body : BEGIN -->
|
|
350
|
+
<table id="body-table" role="presentation" cellspacing="0" cellpadding="0" border="0" align="center"
|
|
351
|
+
class="email-container">
|
|
352
|
+
<colgroup>
|
|
353
|
+
<col class="fluid">
|
|
354
|
+
<col class="fixed">
|
|
355
|
+
<col class="fluid">
|
|
356
|
+
</colgroup>
|
|
357
|
+
<tr id="white-row">
|
|
358
|
+
<td class="white-col"></td>
|
|
359
|
+
<td class="white-col"></td>
|
|
360
|
+
<td class="white-col"></td>
|
|
361
|
+
</tr>
|
|
362
|
+
<tr id="first-row">
|
|
363
|
+
<td class="spacer-left"></td>
|
|
364
|
+
<td rowspan="2" id="title-logo" style="background-color: #3c4859;">
|
|
365
|
+
<img width="800px" alt="Atonra logo" border="0"
|
|
366
|
+
style="width: 800px; max-width: 800px; position: absolute; top: 0; left: 0;"
|
|
367
|
+
src="https://atonra.fra1.digitaloceanspaces.com/public/atonra_banderol.png" alt="Logo">
|
|
368
|
+
</td>
|
|
369
|
+
|
|
370
|
+
<td class="spacer-right"></td>
|
|
371
|
+
</tr>
|
|
372
|
+
<tr id="title-row">
|
|
373
|
+
<td class="spacer-left"></td>
|
|
374
|
+
<td class="spacer-right"></td>
|
|
375
|
+
</tr>
|
|
376
|
+
<tr id="content-row">
|
|
377
|
+
<td class="spacer-left"></td>
|
|
378
|
+
<td id="body-content">
|
|
379
|
+
{% block body %}
|
|
380
|
+
<p style="margin: 0;" style="font-size: 16px; color: #3c4859; text-align: center;"><b>{{salutation}}</b></p>
|
|
381
|
+
{{content|safe}}
|
|
382
|
+
{% endblock %}
|
|
383
|
+
</td>
|
|
384
|
+
<td class="spacer-right"></td>
|
|
385
|
+
</tr>
|
|
386
|
+
<tr id="spacer-row">
|
|
387
|
+
<td class="spacer-left"></td>
|
|
388
|
+
<td class="spacer-middle"></td>
|
|
389
|
+
<td class="spacer-right"></td>
|
|
390
|
+
</tr>
|
|
391
|
+
<tr id="footer-row" style="background-color: #ccdff3; border-top: 1px solid #ccdff3;">
|
|
392
|
+
<td class="spacer-left"></td>
|
|
393
|
+
<td id="footer-content">
|
|
394
|
+
<p style="margin: 0;" style="text-align: center">
|
|
395
|
+
<b>AtonRâ Partners SA</b><br />
|
|
396
|
+
7, rue de la Croix d’Or, 1204 Geneva, Switzerland<br />
|
|
397
|
+
T +41 22 906 16 16<br />
|
|
398
|
+
<a href="https://www.atonra.ch" target="">Website</a>
|
|
399
|
+
</p>
|
|
400
|
+
<p style="margin: 0;" style="text-align: center"><b>About AtonRâ Partners:</b> AtonRâ Partners is an asset management
|
|
401
|
+
company, founded in
|
|
402
|
+
2004 with head office in Geneva, incorporated under Swiss law, duly approved by the Swiss Financial
|
|
403
|
+
Market Supervisory Authority (FINMA) under the Swiss Collective Investment Schemes Act. AtonRâ
|
|
404
|
+
Partners is a conviction-driven asset manager combining industrial and scientific research with
|
|
405
|
+
financial analysis. AtonRâ Partners focuses on long-term trends powerful enough to be turned into
|
|
406
|
+
thematic equity portfolios.</p>
|
|
407
|
+
{% if unsubscribe %}
|
|
408
|
+
<p style="margin: 0;" style="text-align: center">If you receive this email because you are subscribed to our mailing list:
|
|
409
|
+
Please feel free to {{unsubscribe|safe}} </p>
|
|
410
|
+
{% endif %}
|
|
411
|
+
</td>
|
|
412
|
+
<td class="spacer-right"></td>
|
|
413
|
+
</tr>
|
|
414
|
+
|
|
415
|
+
</table>
|
|
416
|
+
<!-- Email Footer : END -->
|
|
417
|
+
|
|
418
|
+
</body>
|
|
419
|
+
|
|
420
|
+
</html>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{% load portfolio_tags %}
|
|
2
|
+
{% load mathfilters %}
|
|
3
|
+
<style>
|
|
4
|
+
.fixed {
|
|
5
|
+
width: 700px;
|
|
6
|
+
}
|
|
7
|
+
</style>
|
|
8
|
+
<p>Please find bellow the rebalancing summary that the system automatically detected</p>
|
|
9
|
+
</br>
|
|
10
|
+
<p>We detected {{map_rebalancing|length}} rebalanced equity that day.</p>
|
|
11
|
+
{% for equity_repr, report_dict in map_rebalancing.items %}
|
|
12
|
+
<p><b>{{ equity_repr }}</b></p>
|
|
13
|
+
<table style="width: 100%; border-collapse: collapse; table-layout: fixed;">
|
|
14
|
+
<colgroup>
|
|
15
|
+
<col span="1" style="width: 85%;text-align: left;">
|
|
16
|
+
<col span="1" style="width: 15%;">
|
|
17
|
+
</colgroup>
|
|
18
|
+
<tr>
|
|
19
|
+
<th style="text-align: left;">Product</th>
|
|
20
|
+
<th>Weight Δ</th>
|
|
21
|
+
</tr>
|
|
22
|
+
{% for product_repr, value in report_dict.items %}
|
|
23
|
+
<tr>
|
|
24
|
+
{% if value|abs <= rebalancing_threshold %}
|
|
25
|
+
<td style="background-color: rgb(241, 72, 50)">{{ product_repr }}</td>
|
|
26
|
+
<td style="background-color: rgb(241, 72, 50)">{{ value|percent_filter:3 }}</td>
|
|
27
|
+
{% else %}
|
|
28
|
+
<td style="background-color: rgb(110, 207, 20)">{{ product_repr }}</td>
|
|
29
|
+
<td style="background-color: rgb(110, 207, 20)">{{ value|percent_filter:3 }}</td>
|
|
30
|
+
{% endif %}
|
|
31
|
+
</tr>
|
|
32
|
+
{% endfor %}
|
|
33
|
+
</table>
|
|
34
|
+
{% endfor %}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{% load static %}
|
|
2
|
+
|
|
3
|
+
<!DOCTYPE html>
|
|
4
|
+
<html lang="en">
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="UTF-8" />
|
|
7
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
9
|
+
<title>Macro Review</title>
|
|
10
|
+
<link
|
|
11
|
+
rel="stylesheet"
|
|
12
|
+
href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.4/css/bulma.min.css"
|
|
13
|
+
/>
|
|
14
|
+
<link rel="stylesheet" href="{% static 'wbportfolio/css/macro_review.css' %}" />
|
|
15
|
+
<style>
|
|
16
|
+
ul{
|
|
17
|
+
list-style-type: disc;
|
|
18
|
+
}
|
|
19
|
+
h1 {
|
|
20
|
+
display: block;
|
|
21
|
+
font-size: 2em;
|
|
22
|
+
margin-top: 0.67em;
|
|
23
|
+
margin-bottom: 0.67em;
|
|
24
|
+
margin-left: 0;
|
|
25
|
+
margin-right: 0;
|
|
26
|
+
font-weight: bold;
|
|
27
|
+
}
|
|
28
|
+
h2 {
|
|
29
|
+
display: block;
|
|
30
|
+
font-size: 1.5em;
|
|
31
|
+
margin-top: 0.83em;
|
|
32
|
+
margin-bottom: 0.83em;
|
|
33
|
+
margin-left: 0;
|
|
34
|
+
margin-right: 0;
|
|
35
|
+
font-weight: bold;
|
|
36
|
+
}
|
|
37
|
+
h3 {
|
|
38
|
+
display: block;
|
|
39
|
+
font-size: 1.17em;
|
|
40
|
+
margin-top: 1em;
|
|
41
|
+
margin-bottom: 1em;
|
|
42
|
+
margin-left: 0;
|
|
43
|
+
margin-right: 0;
|
|
44
|
+
font-weight: bold;
|
|
45
|
+
}
|
|
46
|
+
h4 {
|
|
47
|
+
display: block;
|
|
48
|
+
margin-top: 1.33em;
|
|
49
|
+
margin-bottom: 1.33em;
|
|
50
|
+
margin-left: 0;
|
|
51
|
+
margin-right: 0;
|
|
52
|
+
font-weight: bold;
|
|
53
|
+
}
|
|
54
|
+
h5 {
|
|
55
|
+
display: block;
|
|
56
|
+
font-size: .83em;
|
|
57
|
+
margin-top: 1.67em;
|
|
58
|
+
margin-bottom: 1.67em;
|
|
59
|
+
margin-left: 0;
|
|
60
|
+
margin-right: 0;
|
|
61
|
+
font-weight: bold;
|
|
62
|
+
}
|
|
63
|
+
h6 {
|
|
64
|
+
display: block;
|
|
65
|
+
font-size: .67em;
|
|
66
|
+
margin-top: 2.33em;
|
|
67
|
+
margin-bottom: 2.33em;
|
|
68
|
+
margin-left: 0;
|
|
69
|
+
margin-right: 0;
|
|
70
|
+
font-weight: bold;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
</style>
|
|
74
|
+
</head>
|
|
75
|
+
<body>
|
|
76
|
+
<div class="box page-header">
|
|
77
|
+
<img class="page-logo" src="{{ logo.url }}" />
|
|
78
|
+
<div>
|
|
79
|
+
<strong>{{ review_title }} <br>Review from {{ start }} to {{ end }}.</strong>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="box">
|
|
83
|
+
{% if comment %}
|
|
84
|
+
{{ comment|safe }}
|
|
85
|
+
{% endif %}
|
|
86
|
+
</div>
|
|
87
|
+
</body>
|
|
88
|
+
</html>
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: wbportfolio
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.6
|
|
4
4
|
Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
|
|
5
|
+
License-File: LICENSE
|
|
5
6
|
Requires-Dist: cryptography==3.4.*
|
|
6
7
|
Requires-Dist: dateparser==1.*
|
|
7
8
|
Requires-Dist: django-storages==1.14.*
|
|
@@ -95,6 +95,9 @@ wbportfolio/filters/transactions/claim.py,sha256=hzknQP6vuXkOSLvrgatoO7_DoqQpJGW
|
|
|
95
95
|
wbportfolio/filters/transactions/fees.py,sha256=9iqJuF31pf8C18OyNseSIgBZPDyWxgpBWu6S7nEJaoo,2133
|
|
96
96
|
wbportfolio/filters/transactions/trades.py,sha256=VXq-sRVFP4c9c_wHAJ7BjtTTKYlp3R1US2X-32wCGSo,8692
|
|
97
97
|
wbportfolio/filters/transactions/transactions.py,sha256=zkaEkYRXAMtF6U0iyOAdB44mFmRhaoE6czOVSgtlWVM,3537
|
|
98
|
+
wbportfolio/fixtures/product_factsheets.yaml,sha256=z5o-viDbgwWkssDJXZYayasFgw1nJ0uiOiYrJNDkRtg,5455
|
|
99
|
+
wbportfolio/fixtures/wbportfolio.yaml.gz,sha256=902nxQZM6VcVcc0wI9AYaSedcJIfsK5letLF31j1Jdg,1479453
|
|
100
|
+
wbportfolio/fixtures/wbrisk_management.yaml.gz,sha256=alFDRu8S9R6IsaIkpJe_v36B2GvHgHeNJVumUB5m_NQ,155413
|
|
98
101
|
wbportfolio/import_export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
99
102
|
wbportfolio/import_export/utils.py,sha256=mzybnwU2y-NOk43QDNDlOCaSPO-0BFlSX_X8uxplNiY,1083
|
|
100
103
|
wbportfolio/import_export/backends/__init__.py,sha256=Ki5jE95usAbxfV3zeZMkAmjh7G8TodBkKTDBPa_HJX0,40
|
|
@@ -191,6 +194,7 @@ wbportfolio/import_export/parsers/vontobel/valuation.py,sha256=iav8_xYpTJchmTa7K
|
|
|
191
194
|
wbportfolio/import_export/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
192
195
|
wbportfolio/import_export/resources/assets.py,sha256=mfQY2md1X4JgMxsvSMoPBKaYKmklZOaFFafqntOMswA,2248
|
|
193
196
|
wbportfolio/import_export/resources/trades.py,sha256=gsF7SRL9JrCHSrCekndrEkKrLjTw1YXLltmyXYK2K0Y,1124
|
|
197
|
+
wbportfolio/jinja2/wbportfolio/sql/aum_nnm.sql,sha256=BvMnLsVlXIqU5hhwLDbwZ6nBqWULIBDVcgLJ2B4sdS4,4440
|
|
194
198
|
wbportfolio/kpi_handlers/nnm.py,sha256=hCn0oG0C-6dQ0G-6S4r31nAS633NZdlOT-ntZrzvXZI,7180
|
|
195
199
|
wbportfolio/metric/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
196
200
|
wbportfolio/metric/backends/__init__.py,sha256=jfim5By5KqXfraENRFlhXy3i3gIzmElD6sfwL3qK2KM,108
|
|
@@ -327,6 +331,19 @@ wbportfolio/serializers/transactions/expiry.py,sha256=K3XOSbCyef-xRzOjCr4Qg_YFJ_
|
|
|
327
331
|
wbportfolio/serializers/transactions/fees.py,sha256=Q0MFtl9fbmiGXwxmg58UTXWRaM-L7rcNknL6NKF25tE,1067
|
|
328
332
|
wbportfolio/serializers/transactions/trades.py,sha256=UVce7MPHGuRLBympPVacpgOfkZ2dIWUeWKhdgyM6geU,11638
|
|
329
333
|
wbportfolio/serializers/transactions/transactions.py,sha256=X3ME7j5gR2oaTO84wcV4VzrGYSbZ9uPhC7tTbkPVOgQ,4184
|
|
334
|
+
wbportfolio/static/wbportfolio/css/macro_review.css,sha256=FAVVO8nModxwPXcTKpcfzVxBGPZGJVK1Xn-0dkSfGyc,233
|
|
335
|
+
wbportfolio/static/wbportfolio/markdown/documentation/account_holding_reconciliation.md,sha256=MabxOvOne8s5gl6osDoow6-3ghaXLAYg9THWpvy6G5I,921
|
|
336
|
+
wbportfolio/static/wbportfolio/markdown/documentation/aggregate_asset_position_liquidity.md,sha256=HEgXB7uqmqfty-GBCCXYxrAN-teqmxWuqDLK_liKWVc,1090
|
|
337
|
+
wbportfolio/static/wbportfolio/markdown/documentation/company.md,sha256=oUIbA78Hs0u883myNE0wwdBdqnixSqHy9bkl6BJq0VU,2917
|
|
338
|
+
wbportfolio/static/wbportfolio/markdown/documentation/earnings_instrument.md,sha256=AGy5Ps9dcnfzT7tKe9lDWuaFe3Ai3Atahq61w5nAr2g,382
|
|
339
|
+
wbportfolio/static/wbportfolio/markdown/documentation/financial_analysis_instrument_ratios.md,sha256=UPyCGYRnBnC0GSF9Lv8htFUqJbc-iNhVsnvKxibAexA,4853
|
|
340
|
+
wbportfolio/static/wbportfolio/markdown/documentation/financial_statistics.md,sha256=AmUs5iNunWIRaiZfawmmKgZBnlum5mYLZWyvtpKmFNY,3810
|
|
341
|
+
wbportfolio/static/wbportfolio/markdown/documentation/person.md,sha256=IY8VclDAQbIDde-__bCk2JoVCJJEd1hqI5VfCBM1f40,2787
|
|
342
|
+
wbportfolio/templates/portfolio/email/customer_report.html,sha256=sXHBrZlJQzFpcsQSEs3kOYkgrB56f21suiJ8pKLgtlk,327
|
|
343
|
+
wbportfolio/templates/portfolio/email/customer_trade_notification.html,sha256=sytKfQ2vFwt1m4XyhUpn7EO3TdFURUCkCt3fxWcUyl4,990
|
|
344
|
+
wbportfolio/templates/portfolio/email/email_base_template.html,sha256=n6DN3QV92tF1f6mr96USQht6R-zSmUY4PGTqE5wD3ns,13386
|
|
345
|
+
wbportfolio/templates/portfolio/email/rebalancing_report.html,sha256=Go7joPYXwF_1Q72mblOtJSw4-TbH3NqW7ww_xGBP95k,1206
|
|
346
|
+
wbportfolio/templates/portfolio/macro/macro_review.html,sha256=OxliFeX9pVNKeTVTaPnfNPHmM5YxVMr77PeKC-6y0jY,2273
|
|
330
347
|
wbportfolio/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
331
348
|
wbportfolio/tests/conftest.py,sha256=oreRvYxDZOeblJEXOX_aqOJ8OyTBFtLfaHK3sxJnUF8,4571
|
|
332
349
|
wbportfolio/tests/signals.py,sha256=D_W5AZZ-yr8u15OVz-qWot1XZVDGwAQySbalyNiL9es,6138
|
|
@@ -483,7 +500,7 @@ wbportfolio/viewsets/transactions/mixins.py,sha256=i9ICaUXZfryIrbgS-bdCcoBJO-pTn
|
|
|
483
500
|
wbportfolio/viewsets/transactions/trade_proposals.py,sha256=5mgAk60cINZHd2HfTu7StFOc882FGakNcIVZpNSwBCs,3528
|
|
484
501
|
wbportfolio/viewsets/transactions/trades.py,sha256=_rZuPRDjf3MbwZ5xvdCgczCxcIbvI-RvyAf-50Y_Ga4,14744
|
|
485
502
|
wbportfolio/viewsets/transactions/transactions.py,sha256=VgSBUs1g5etsXjt7zi4wQi82XwOGuHsd_zppnsbMZMs,4517
|
|
486
|
-
wbportfolio-2.2.
|
|
487
|
-
wbportfolio-2.2.
|
|
488
|
-
wbportfolio-2.2.
|
|
489
|
-
wbportfolio-2.2.
|
|
503
|
+
wbportfolio-2.2.6.dist-info/METADATA,sha256=KrD0Mp4kl9bxcETAJCe_OYq7U1JAaWs31IcYUebrARE,644
|
|
504
|
+
wbportfolio-2.2.6.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
|
|
505
|
+
wbportfolio-2.2.6.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
|
|
506
|
+
wbportfolio-2.2.6.dist-info/RECORD,,
|
|
File without changes
|