From 5fc9b00128961e41863ecdeb4653080d583a57ba Mon Sep 17 00:00:00 2001 From: hug-sch Date: Sun, 13 Oct 2024 18:05:16 +0200 Subject: [PATCH] updating trades.md --- docs/en/assets/test-07-split.xml | 27 --- docs/en/assets/test.xml | 44 ++--- .../images/trades-info-overlay.png | Bin 29837 -> 12281 bytes .../performance/images/trades-overview.svg | 161 ++++++++++++++++++ .../view/reports/performance/trades.md | 58 ++++--- todo/todo.md | 1 + 6 files changed, 206 insertions(+), 85 deletions(-) create mode 100644 docs/en/reference/view/reports/performance/images/trades-overview.svg diff --git a/docs/en/assets/test-07-split.xml b/docs/en/assets/test-07-split.xml index 49b896450..8858b67de 100644 --- a/docs/en/assets/test-07-split.xml +++ b/docs/en/assets/test-07-split.xml @@ -2767,32 +2767,6 @@ 2024-02-13T08:38:39.322993400Z BUY - - d90240a1-8dcd-40b0-87ad-69d52e3d94c4 - 2023-09-14T00:00 - EUR - 2341 - - - - - - - c834289f-f76f-4cfd-865d-a4e1ae370637 - 2023-09-14T00:00 - EUR - 2341 - - - 0 - 2024-02-13T08:40:46.205249800Z - SELL - - - 79600000 - 2024-02-13T08:40:46.205249800Z - SELL - 9951730c-575c-4b3d-bd3e-1aad3438edf1 2022-01-03T00:00 @@ -2838,7 +2812,6 @@ - db63c1b7-1b39-4311-bf5a-85b646d492b9 2022-01-01T00:00 diff --git a/docs/en/assets/test.xml b/docs/en/assets/test.xml index 89d16a965..1a895e580 100644 --- a/docs/en/assets/test.xml +++ b/docs/en/assets/test.xml @@ -9,10 +9,11 @@ MANUAL + - + @@ -27,21 +28,6 @@ false 2024-10-06T09:30:00.517050900Z - - 46f2a45f-07dc-4a6e-b01f-207324111ac8 - Siemens - EUR - GENERIC-JSON - https://www.nseindia.com/api/historical/cm/equity?symbol=SIEMENS&from=07-06-2024&to=07-10-2024 - - - - - $.data[*].CH_TIMESTAMP - $.data[*].CH_CLOSING_PRICE - false - 2024-10-07T18:51:06.265580600Z - @@ -87,27 +73,27 @@ 10000 100000000 - 2024-10-07T15:46:05.811492400Z + 2024-10-08T08:33:13.968147400Z DELIVERY_INBOUND 5416412c-1064-4d05-aa16-4d3eb17b8611 - 2022-01-01T00:00 + 2021-12-31T00:00 EUR 11000 100000000 - 2024-10-07T17:40:38.254937400Z + 2024-10-08T09:12:45.770071400Z DELIVERY_OUTBOUND - 5b0f4675-e27c-477c-b43a-2a36585238e7 + 3b82a560-4436-40b4-a463-414f6b220de5 2022-01-01T00:00 EUR 11000 - 1100000000 - 2024-10-07T17:40:19.257730900Z + 1000000000 + 2024-10-08T08:34:53.232412900Z DELIVERY_INBOUND @@ -404,7 +390,7 @@ ec4dc660-8854-43ad-80d4-31584fe10e19 Standard - Client-absolute_delta_all_records;#ff8040;SOLID;false;2,Client-absolute_delta;#c0c0c0;SOLID;false;2 + Client-absolute_delta_all_records;#ff8040;SOLID;false;2;true,Client-absolute_delta;#c0c0c0;SOLID;false;2;true @@ -440,7 +426,7 @@ 7600e16d-0168-49d1-aadb-18c66a64bc8f Standard - Securitye11ee537-a363-4166-a9dd-f950ad8e1a9b;#e279bb;SOLID;false;2,[b]Securitydb4362cf-a2eb-4edc-878c-ac398c5f5e0a;#ff8000;SOLID;false;2 + Client-totals;#000000;SOLID;false;2;true @@ -471,16 +457,6 @@ L5Y0 - - - - F2021-01-01_2023-01-01 - - - - - F2020-12-31_2023-01-01 - diff --git a/docs/en/reference/view/reports/performance/images/trades-info-overlay.png b/docs/en/reference/view/reports/performance/images/trades-info-overlay.png index 03d9592fa89911a86d9874467492b62a03bf149f..fc156287e476062b2fe55a7ca27940190f93ca8f 100644 GIT binary patch literal 12281 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 +image/svg+xml diff --git a/docs/en/reference/view/reports/performance/trades.md b/docs/en/reference/view/reports/performance/trades.md index 6380d744b..3cd1de73f 100644 --- a/docs/en/reference/view/reports/performance/trades.md +++ b/docs/en/reference/view/reports/performance/trades.md @@ -2,13 +2,17 @@ title: Trades --- -A trade refers to the act of buying or selling a financial security, such as a stock or bond. In PP, this can be executed through buy/sell transactions as well as through Inbound or Outbound Deliveries. +A trade occurs whenever you buy or sell a financial security through a `Buy` or `Sell` transaction or an `Inbound` or `Outbound Delivery`. All trades are listed in the `Reports > Performance > Trades` view. There are two kinds of trades: -Figure: The Reports > Performance > Trades view. {class=pp-figure} +- **Open Trade**: An open trade is initiated with the first `Buy` or `Inbound Delivery` transaction for a security. The `Start Date` is set to the date of this initial transaction, while the `End Date` remains open as no `Sell` or `Outbound Delivery` has occurred yet. Subsequent purchases of the same security are added to *this* open trade, updating the number of shares and performance indicators such as Entry Value and Profit/Loss. Thus, an open trade can include multiple purchases. + +- **Closed Trade**: A closed trade is generated with *each* `Sell` or `Outbound Delivery` transaction of a security. If you sell a specific security on three different dates, three separate closed trades will be created, each identified by their respective buy and sell dates. Selling a security can affect the `Start Date` of the associated open trade, as the system uses the FIFO (First In, First Out) methodology. If all shares from a specific purchase are sold, the `Start Date` of the open trade will shift to the date of the next purchase. + +For example, in Figure 1, `share-1` has two associated trades, characterized by one sell transaction, depicted by the first closed trade (row 1), and two buy transactions, consolidated into the open trade (row 2). -![](./images/trades-overview.png) +Figure: The Reports > Performance > Trades view. {class=pp-figure} -In the `Reports > Performance > Trades` menu, an open trade is constructed by consolidating all buy/Inbound Delivery transactions associated with a particular security. Hence, an open trade may encompass several buy transactions. Conversely, each sell or outbound delivery transaction generates one individual closed trade. For example, in Figure 1, `share-1` is characterized by one sell transaction, depicted by the first closed trade (row 1), and two buy transactions, consolidated into the open trade (row 2). +![](./images/trades-overview.svg) With the `Filter` menu, you can limit the list of trades to `Only open trades` or `Only closed trades`. If neither is selected in this group, all trades are displayed. In the second group, you can choose between `Only profitable trades` or `Only lossmaking trades`; essentially the green colored versus the red colored rows. @@ -16,54 +20,60 @@ The `Export as CSV` icon contains one export, named `Trades` which represents th ## Available columns -- *Name*: The trades are named by the name of the security that is traded (e.g. share-1). You can rename the trade by double-clicking the name. -- *Start date*: The date of the first buy/Inbound delivery transaction. -- *End date*: Either the selling date of the security or `(open)` if there are still securities left in the portfolio. -- *# transactions*: The number of transactions in a trade is typically one (buy) or two (buy + sell). Hovering over the cell near the :material-information-outline: icon will trigger a pop-up displaying additional information. From Figure 2, it can be deduced that 5 shares of `share-1` were sold on April 12, 2023. Hovering over the open trade (row 2) will reveal that 5 shares were purchased on January 15, 2021, and another 5 on January 14, 2022. Here, you can observe the FIFO principle in action. The five sold shares are subtracted from the first purchase, which initially consisted of 10 shares. +- *Name*: The trades are named by the name of the security that is traded (e.g. `share-1`). You can rename the trade by double-clicking the name. +- *Start date*: The date of the first buy/Inbound delivery transaction. If all shares from a particular purchase are sold (following the FIFO method), the start date will update to the date of the next purchase. +- *End date*: This is either the date when the security is sold or marked as (open) if the position is still active. Once all shares are sold, the open trade will be removed from the list. +- *# transactions*: The number of transactions in a trade is typically one (only one buy transaction) or two (buy + sell). Hovering over the cell near the :material-information-outline: icon will trigger a pop-up displaying additional information. From Figure 2, it can be deduced that 5 shares of `share-1` were sold on April 12, 2023. Hovering over the open trade (row 2) will reveal that 5 shares were purchased on January 15, 2021, and another 5 on January 14, 2022. Here, you can observe the FIFO principle in action. The five sold shares are subtracted from the first purchase, which initially consisted of 10 shares. Figure: Info overlay closed trade share-1. {class=pp-figure} ![](./images/trades-info-overlay.png) - *Shares*: The number of shares in the trade. -- *Entry value*: This represents the Net Transaction Value (NTV) of the trade, which includes fees and taxes. For an open trade with a single buy transaction, this is the NTV of the purchase. For example, if 3 shares of share-3 are bought at 413.64 USD per share with 50 USD in fees and taxes, the Net Transaction Value after conversion at a rate of 0.9384 USD/EUR is 1211.40 EUR. - For a single buy/sell trade like share-2, the Net Transaction Value of the original purchase (67 EUR) is distributed over the open trade of 5 shares (41.88 EUR = 67/8 * 5) and the closed trade of 3 shares (25.13 EUR). +- *Entry value*: This represents the Net Transaction Value (NTV) of the trade, which includes fees and taxes. You can find this value in Figure 1, in the top panel's last column. For an open trade with no sell transaction, this is the NTV of the purchase. For example, the purchase of `share-3` is accomplished by a single purchase with NTV of 1211.40 EUR; including (foreign) taxes and fees. For a buy + sell trade like `share-2`, the Net Transaction Value of the original purchase (67 EUR for 8 shares) is distributed over the open trade of the remaining 5 shares (41.88 EUR = 5/8 * 67 EUR) and the closed trade of 3 shares (25.13 EUR = 3/8 * 67 EUR). - The situation is more complex with the multiple buy/sell trade of share-1. The entry value (161.50 EUR) of the open trade is formed by 5 shares from the first purchase and 5 from the second, following the FIFO principle. The original Net Transaction Value of the purchase of 10 shares on January 15, 2021, was 155 EUR. The second purchase of 5 shares had a net transaction value of 84 EUR. Combined, 161.50 EUR equals (155/2 + 84). + The situation is more complex with the 2 buy + 1 sell trade of `share-1`. The original Net Transaction Value of the purchase of 10 shares on January 15, 2021, was 155 EUR. The second purchase of 5 shares had a net transaction value of 84 EUR. The entry value of the remaining 5 shares in the open trade (161.50 EUR) is formed by 5 shares from the first purchase and 5 from the second, following the FIFO principle in the sell transaction. The 5 shares that were sold came from the first purchase. The NTV of the open trade becomes then: (5/10 * 155 EUR) + (5/5 * 84 EUR) or 161.50 EUR. -- *Entry value (per share)*: Enable this column by using the Settings (gear) icon. The value can be easily calculated by dividing the Entry value by the number of shares. -- *Exit value*: For open trades, this is the market value, which equals the number of shares multiplied by the current quote price. For example, the current quote price of `share-2` is 12.405 EUR/share. The exit value is 5 x 12.405 = 62.03 EUR. For closed trades, the exit value is the Net Transaction Value of the sale. For instance, if `share-2` was sold on April 15, 2024, for 3 shares x 12.48 EUR/share minus fees & taxes (4 EUR), the exit value is 34.46 EUR. +- *Entry value (per share)*: Enable this column by using the Settings :gear: (gear) icon. The value can be easily calculated by dividing the Entry value by the number of shares. +- *Exit value*: For open trades, this is the market value, which equals the number of shares multiplied by the current quote price. For example, the current quote price (Oct 11, 2024) of `share-2` is 11.645 EUR/share. The exit value is 5 x 11.645 = 58.23 EUR. For a closed trade, the exit value is the Net Transaction Value of the sale. For instance, `share-2` was sold on April 15, 2024: 3 shares x 12.48 EUR/share minus fees & taxes (4 EUR). The exit value is thus 34.46 EUR. - *Exit value (per share)*: Similar to Entry value (per share); as described above. - *Profit/Loss*: The profit/loss is the difference between the Exit value and the Entry value. Green numbers indicate a profit, while red numbers indicate a loss. - *Gross Profit/Loss*: This equals the value of the previous column plus taxes and fees. Because for closed trades, the taxes and fees of the sell transaction are included in the Gross Profit/Loss column, this field cannot be calculated for the open trades. -- *Holding period (days)*: For single purchase closed trades, it equals the number of days between the End and the start date. For open trades, it is the difference between today and the Start date. This calculation does not consider weekends, holidays or any other calendar. +- *Holding period (days)*: For a single purchase closed trade, it equals the number of days between the End and the start date. For open trades, it is the difference between **today** and the Start date. This calculation does *not* consider weekends, holidays or any other calendar. !!! Note - For multiple purchase trades, the holding period is an average, weighted by the number of shares. For example, assuming today is 2024-04-22, then the holding period for the first purchase in Figure 2 is: (2024-04-22 - 2021-01-15) = 1193 days and for the second buy 829 days. The weighted average is [(5 x 1193) + (5 x 829)]/10 = 1011 days. + For multiple purchase trades, the holding period is an average, weighted by the number of shares. For example, assuming today is 2024-10-13, then the holding period of `share-1` for the first purchase in Figure 2 is: (2024-10-13 - 2021-01-15) = 1367 days and for the second purchase (2024-10-13 - 2022-01-14) = 1003 days. The weighted average is [(5 x 1367) + (5 x 1003)]/10 = 1185 days. -- *Latest Trade*: Enable this column using the Settings (gear) icon. It typically contains either the End Date for closed trades or the Start date for open trades. An exception is an open trade with multiple buy transactions, in which case the date of the last transaction is used. +- *Latest Trade*: Enable this column using the Settings :gear: (gear) icon. It typically contains either the End Date for closed trades or the Start date for open trades. An exception is an open trade with multiple buy transactions, in which case the date of the last transaction is used. - *IRR*: The Internal Rate of Return; for detailed calculation, refer to the following section. -- *Return*: This actually represents the True Time-Weighted Rate of Return (TTWROR); for further explanation, see below. This column is not visible by default; use the Settings (gear) icon to display it. -- *Note*: The note associated with the security. +- *Return*: Enable this column using the Settings :gear: (gear) icon. The Return is calculated as: `(Exit Value/Entry Value) -1`. This serves as an indicator of the trade's performance (see below for more details). +- *Note*: The note associated with the security. You cannot have a separate note for each trade. Additionally, the following columns can be made visible using the Settings (gear) icon: `Securities Account`, `ISIN`, `Symbol`, and `WKN`. Explanation of these fields can be found at the description of the [master data](../../../file/new.md#security-master-data) of the security. ## Performance calculation -The IRR and Return column represent the performance of the open or closed trade. Please note that you cannot set a Reporting period explicitly. The Reporting period of a trade is always between today and the start date of the trade. The column Holding period (days) gives an indication of the number of days between these two dates. +The IRR and Return column represent the performance of the open or closed trades. Please note that you cannot set a Reporting period explicitly. The Reporting period of a trade is always between today and the start date of the trade. The column Holding period (days) gives an indication of the number of days between these two dates. In the section [Reference > Basic concepts > Performance > Money-weighted return](../../../../concepts/performance/money-weighted.md#irr-at-trade-level) an extensive calculation of the IRR of open and closed trades is given (using the same example of `share-1` as above). In summary, given the [IRR equation](../../../../concepts/performance/money-weighted.md): $\mathrm{MVE = MVB \times (1 + IRR)^{\frac{RD_1}{365}} + \sum_{t=1} ^{n}CF_t \times (1+IRR)^{\frac{RD_t}{365}} \qquad \text{(Eq 1)}}$ -- Closed trade (share-1): 105 EUR = 77.50 EUR x (1 + IRR)^(817/365). An IRR of 14.53% will solve this equation exactly. To reach an Exit value of 105 EUR, it would require an initial Entry value of 77.50 EUR to grow at a compound annual interest rate (IRR) of 14.53%, over a period of 817 days. +- Closed trade (`share-1`): `105 EUR = 0 + 77.50 EUR * (1 + IRR)^(817/365)`. An IRR of 14.53% will solve this equation exactly. To reach an Exit value of 105 EUR, it would require an initial Entry value of 77.50 EUR to grow at a compound annual interest rate (IRR) of 14.53%, over a period of 817 days. The MVB of a trade is always zero, because the trade starts with the first purchase or cash flow. + +- Open trade (`share-1`): The open trade has two cashflows (buy). Hovering over the Transactions cell will reveal the data (see Figure 2). Assuming today is 2024-10-13: + + - First purchase: 5 remaining shares, bought at 77.50 EUR (=5/10 * 155 EUR), held for 1367 days (`2024-10-13 - 2021-01-15`). + - Second purchase: 5 shares bought for 84 EUR, held for 1003 days (`2024-10-13 - 2022-01-14`). + + The IRR equation becomes: `271.40 EUR = 0 + 77.50 * (1 + IRR)^(1367/365) + 84 * (1 + IRR)^(1003/365)` or 11.12%. Please note that the holding periods and Exit value will change upon trying this example on a later date. -- Open trade (share-1): The open trade has two cashflows (buy). Hovering over the Transactions cell will reveal the data (see Figure 2). The holding period for the first buy is 1193 days = (2024-04-22 - 2021-01-15) and for the second buy 829 days = (2024-04-22 - 2022-01-14). The IRR equation becomes: 216.10 EUR = 77.50 EUR x (1 + IRR)^(1193/365) + 84 EUR x (1 + IRR)^(829/365) or 11.12%. Please note that the holding periods and Exit value will change upon trying this example on a later date. +The Return column is a [simple measure of performance](../../../../concepts/performance/index.md): `Exit Value/Entry Value) -1`. -The Return column is in fact a simple return or the [TTWROR](../../../../concepts/performance/time-weighted.md#time-weighted-rate-of-return) with a single subperiod. It is the result of Exit value/Entry value or Profit/loss/Entry value. +- Closed trade (share-1): r = (105 EUR/77.50 EUR) - 1 = 35.48% +- Open trade (share-1): r = (271.40 EUR/161.50 EUR) - 1 = 68.05% -- Closed trade (share-1): r = 105 EUR/77.50 EUR = 35.48% -- Open trade (share-1): r = 216.10 EUR/161.50 EUR = 33.81% +For a single purchase trade, such as the open trade of share-3, the Internal Rate of Return (IRR), the Time-Weighted Rate of Return per annum (TTWROR p.a.), and the simple Return are identical. For example the *periodical* simple return of `share-3` is -5.74%. The *annualized* IRR is -11.24%. You can annualize a periodical return r with the [formula](../../../../concepts/performance/time-weighted.md#ttwror-pa): `((1 + r)^(365/HP)) - 1`; where HP is the holding period. For example, the periodical return of -5.74% for a holding period of 181 days has an annualized value of `((1 - 0.0574)^(365/181)) - 1` or -11.24%, which is exactly the IRR. diff --git a/todo/todo.md b/todo/todo.md index b21982187..632414b10 100644 --- a/todo/todo.md +++ b/todo/todo.md @@ -161,3 +161,4 @@ Historical prices: many of the presets don't seem to function? ### 2024-10-05 - with missing historical prices: the line in the chart between the two known prices is "misleading" (increasing or decreasing) in stead of staying at the last known historical price. For example, two known prices (100 & 200 EUR at jan 1, 2023 & 2024), the line for the year 2023 is increasing from 100 to 200, even though (I think) the price that is taken for calculations in that period is the last known price, e.g. 100 EUR. +- File > Save as > XML with "ID" attributes? Comparing the file contents reveal that to som sections (e.g. ) an ID is added. In the comments: "New: Alternative XML format that uses “id” attributes for references (and is therefore easier to read/manipulate by other programs)". Example? Which programs?