From cd68dcf1ef4b8699b39af5c4d15f9288b3359aa0 Mon Sep 17 00:00:00 2001 From: hug-sch Date: Sun, 3 Dec 2023 19:28:38 +0000 Subject: [PATCH] deploy: 233654f8a1f78990db62543ba13bc31318f73039 --- de/sitemap.xml.gz | Bin 327 -> 327 bytes en/404.html | 22 + en/assets/demo-portfolio-04.xml | 8 +- en/concepts/account/index.html | 22 + en/concepts/financial-terminology/index.html | 22 + en/concepts/index.html | 22 + en/concepts/performance/index.html | 22 + .../performance/money-weighted/index.html | 22 + .../performance/time-weighted/index.html | 22 + en/concepts/purchase-value/index.html | 22 + en/concepts/reporting-period/index.html | 22 + en/concepts/transaction/index.html | 22 + .../adding-securities/index.html | 22 + .../create-portfolio/index.html | 22 + en/getting-started/index.html | 22 + en/getting-started/installation/index.html | 22 + .../manage-portfolio/bonds/index.html | 22 + .../manage-portfolio/buy/index.html | 22 + .../manage-portfolio/delivery/index.html | 22 + .../manage-portfolio/deposit/index.html | 22 + .../manage-portfolio/dividend/index.html | 22 + .../manage-portfolio/index.html | 22 + .../manage-portfolio/sell/index.html | 22 + .../reports/performance/index.html | 22 + .../reports/statement/chart/index.html | 22 + .../reports/statement/holdings/index.html | 22 + .../reports/statement/index.html | 22 + en/how-to/copy-securities/index.html | 1479 +++++++++++++++++ en/how-to/images/portfolios-side-by-side.png | Bin 0 -> 74306 bytes en/how-to/importing/index.html | 22 + en/how-to/index.html | 22 + en/how-to/morningstar/index.html | 22 + en/how-to/quote-feed/index.html | 24 +- en/how-to/reinvesting-dividends/index.html | 22 + en/index.html | 22 + en/reference/index.html | 27 +- en/search/search_index.json | 2 +- en/sitemap.xml | 5 + en/sitemap.xml.gz | Bin 475 -> 483 bytes 39 files changed, 2199 insertions(+), 6 deletions(-) create mode 100644 en/how-to/copy-securities/index.html create mode 100644 en/how-to/images/portfolios-side-by-side.png diff --git a/de/sitemap.xml.gz b/de/sitemap.xml.gz index 116f7309d06d3e7a6c625a73fa1f90145800ea34..582c6fa54a019e72dfb079d12adcb72f38b37610 100644 GIT binary patch delta 15 WcmX@kbexGzzMF&N$+eAaj*I{)xdjFQ delta 15 WcmX@kbexGzzMF$1;oL?xM@9f9c?5a@ diff --git a/en/404.html b/en/404.html index c1f10d797..59beff25d 100644 --- a/en/404.html +++ b/en/404.html @@ -1080,6 +1080,8 @@ + + @@ -1203,6 +1205,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/assets/demo-portfolio-04.xml b/en/assets/demo-portfolio-04.xml index 03fb4c72f..5f910c423 100644 --- a/en/assets/demo-portfolio-04.xml +++ b/en/assets/demo-portfolio-04.xml @@ -6980,7 +6980,13 @@ client-filter-selection - + + + PaymentsViewModel + + + + diff --git a/en/concepts/account/index.html b/en/concepts/account/index.html index 0ec4a301d..d28568589 100644 --- a/en/concepts/account/index.html +++ b/en/concepts/account/index.html @@ -1177,6 +1177,8 @@ + + @@ -1300,6 +1302,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/concepts/financial-terminology/index.html b/en/concepts/financial-terminology/index.html index bc848706f..c6f7aafe1 100644 --- a/en/concepts/financial-terminology/index.html +++ b/en/concepts/financial-terminology/index.html @@ -1096,6 +1096,8 @@ + + @@ -1219,6 +1221,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/concepts/index.html b/en/concepts/index.html index e9b3ffb10..078f78a6a 100644 --- a/en/concepts/index.html +++ b/en/concepts/index.html @@ -1093,6 +1093,8 @@ + + @@ -1216,6 +1218,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/concepts/performance/index.html b/en/concepts/performance/index.html index baedd7a3c..a685cc3bf 100644 --- a/en/concepts/performance/index.html +++ b/en/concepts/performance/index.html @@ -1095,6 +1095,8 @@ + + @@ -1218,6 +1220,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/concepts/performance/money-weighted/index.html b/en/concepts/performance/money-weighted/index.html index 6bd148a92..95e9ee89f 100644 --- a/en/concepts/performance/money-weighted/index.html +++ b/en/concepts/performance/money-weighted/index.html @@ -1105,6 +1105,8 @@ + + @@ -1228,6 +1230,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/concepts/performance/time-weighted/index.html b/en/concepts/performance/time-weighted/index.html index cc13c275b..7f7e26d52 100644 --- a/en/concepts/performance/time-weighted/index.html +++ b/en/concepts/performance/time-weighted/index.html @@ -1105,6 +1105,8 @@ + + @@ -1228,6 +1230,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/concepts/purchase-value/index.html b/en/concepts/purchase-value/index.html index 6b32d4219..8a1de2ffd 100644 --- a/en/concepts/purchase-value/index.html +++ b/en/concepts/purchase-value/index.html @@ -1096,6 +1096,8 @@ + + @@ -1219,6 +1221,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/concepts/reporting-period/index.html b/en/concepts/reporting-period/index.html index 53d172fa1..434b38cd6 100644 --- a/en/concepts/reporting-period/index.html +++ b/en/concepts/reporting-period/index.html @@ -1096,6 +1096,8 @@ + + @@ -1219,6 +1221,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/concepts/transaction/index.html b/en/concepts/transaction/index.html index 032cb4567..15d643d2b 100644 --- a/en/concepts/transaction/index.html +++ b/en/concepts/transaction/index.html @@ -1096,6 +1096,8 @@ + + @@ -1219,6 +1221,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/adding-securities/index.html b/en/getting-started/adding-securities/index.html index 3dab50798..23562a81b 100644 --- a/en/getting-started/adding-securities/index.html +++ b/en/getting-started/adding-securities/index.html @@ -1157,6 +1157,8 @@ + + @@ -1280,6 +1282,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/create-portfolio/index.html b/en/getting-started/create-portfolio/index.html index c97796284..e1c30ff7d 100644 --- a/en/getting-started/create-portfolio/index.html +++ b/en/getting-started/create-portfolio/index.html @@ -1103,6 +1103,8 @@ + + @@ -1226,6 +1228,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/index.html b/en/getting-started/index.html index 5c1048625..09eef16e6 100644 --- a/en/getting-started/index.html +++ b/en/getting-started/index.html @@ -1093,6 +1093,8 @@ + + @@ -1216,6 +1218,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/installation/index.html b/en/getting-started/installation/index.html index e1a635ad5..7cab15959 100644 --- a/en/getting-started/installation/index.html +++ b/en/getting-started/installation/index.html @@ -1103,6 +1103,8 @@ + + @@ -1226,6 +1228,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/manage-portfolio/bonds/index.html b/en/getting-started/manage-portfolio/bonds/index.html index 8e2ea572e..e3258d393 100644 --- a/en/getting-started/manage-portfolio/bonds/index.html +++ b/en/getting-started/manage-portfolio/bonds/index.html @@ -1105,6 +1105,8 @@ + + @@ -1228,6 +1230,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/manage-portfolio/buy/index.html b/en/getting-started/manage-portfolio/buy/index.html index 60ebcaa19..f04feeb20 100644 --- a/en/getting-started/manage-portfolio/buy/index.html +++ b/en/getting-started/manage-portfolio/buy/index.html @@ -1105,6 +1105,8 @@ + + @@ -1228,6 +1230,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/manage-portfolio/delivery/index.html b/en/getting-started/manage-portfolio/delivery/index.html index b08c6cd9f..f14e5a73a 100644 --- a/en/getting-started/manage-portfolio/delivery/index.html +++ b/en/getting-started/manage-portfolio/delivery/index.html @@ -1098,6 +1098,8 @@ + + @@ -1221,6 +1223,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/manage-portfolio/deposit/index.html b/en/getting-started/manage-portfolio/deposit/index.html index 55453ffea..52314de92 100644 --- a/en/getting-started/manage-portfolio/deposit/index.html +++ b/en/getting-started/manage-portfolio/deposit/index.html @@ -1105,6 +1105,8 @@ + + @@ -1228,6 +1230,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/manage-portfolio/dividend/index.html b/en/getting-started/manage-portfolio/dividend/index.html index fdd7c9269..b98acaf2b 100644 --- a/en/getting-started/manage-portfolio/dividend/index.html +++ b/en/getting-started/manage-portfolio/dividend/index.html @@ -1138,6 +1138,8 @@ + + @@ -1261,6 +1263,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/manage-portfolio/index.html b/en/getting-started/manage-portfolio/index.html index 8dfcbc03e..12ee83f83 100644 --- a/en/getting-started/manage-portfolio/index.html +++ b/en/getting-started/manage-portfolio/index.html @@ -1090,6 +1090,8 @@ + + @@ -1213,6 +1215,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/manage-portfolio/sell/index.html b/en/getting-started/manage-portfolio/sell/index.html index f146a0a2e..5f3dcda90 100644 --- a/en/getting-started/manage-portfolio/sell/index.html +++ b/en/getting-started/manage-portfolio/sell/index.html @@ -1105,6 +1105,8 @@ + + @@ -1228,6 +1230,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/reports/performance/index.html b/en/getting-started/reports/performance/index.html index 502c61e34..768f6e98c 100644 --- a/en/getting-started/reports/performance/index.html +++ b/en/getting-started/reports/performance/index.html @@ -1097,6 +1097,8 @@ + + @@ -1220,6 +1222,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/reports/statement/chart/index.html b/en/getting-started/reports/statement/chart/index.html index b6fcc3c13..a37c55913 100644 --- a/en/getting-started/reports/statement/chart/index.html +++ b/en/getting-started/reports/statement/chart/index.html @@ -1100,6 +1100,8 @@ + + @@ -1223,6 +1225,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/reports/statement/holdings/index.html b/en/getting-started/reports/statement/holdings/index.html index a2ea6bb1d..fabee4648 100644 --- a/en/getting-started/reports/statement/holdings/index.html +++ b/en/getting-started/reports/statement/holdings/index.html @@ -1100,6 +1100,8 @@ + + @@ -1223,6 +1225,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/getting-started/reports/statement/index.html b/en/getting-started/reports/statement/index.html index d714a2c14..d8a7b5023 100644 --- a/en/getting-started/reports/statement/index.html +++ b/en/getting-started/reports/statement/index.html @@ -1097,6 +1097,8 @@ + + @@ -1220,6 +1222,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/how-to/copy-securities/index.html b/en/how-to/copy-securities/index.html new file mode 100644 index 000000000..815aff500 --- /dev/null +++ b/en/how-to/copy-securities/index.html @@ -0,0 +1,1479 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Copy securities between portfolios - Portfolio Performance Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    + + + + + + +
    + + +
    + +
    + + + + + + +
    +
    + + + +
    +
    +
    + + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + + + + + + + + + + +

    copy securities between portfolios

    + +

    To copy a security between portfolios, you must arrange the two portfolios side by side. (see Figure 1).

    +

    Figure 1. Side-by-side display of two portfolios.

    +

    After opening two or more portfolios, they are displayed in the portfolio bar located just below the menu bar. The active portfolio, typically the last one opened, is easily discernible. To switch between portfolios, you can select the corresponding tab in the portfolio bar.

    +

    However, for tasks like copying securities between portfolios, it's necessary to have both portfolios visible side by side. Securities cannot be directly dragged and dropped or copied and pasted between portfolios in the portfolio bar.

    +

    To arrange portfolios side by side, choose one in the portfolio bar, click and hold the mouse to drag it to a new position. With two portfolios, you can position them either horizontally (left to right) or vertically (top to bottom). In Figure 1, the arrangement is left to right. This process can be repeated with multiple portfolios, allowing you to make more than two portfolios visible at the same time.

    +

    For copying securities between portfolios, both portfolios need to be visible. Then, you can select a security from Portfolio A and drag it to the All Securities option in the side panel of portfolio B. There, you can drop the security to create a copy. Pay attention, as it's feasible to unintentionally create identical securities (e.g. two instances of share-1).

    +

    It's important to note that dropping the security within the main top panel is not possible.

    + +
    +
    + + + Last update: + December 3, 2023 + + + +
    + + + + + + + + +
    +
    + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/en/how-to/images/portfolios-side-by-side.png b/en/how-to/images/portfolios-side-by-side.png new file mode 100644 index 0000000000000000000000000000000000000000..70c252e0083c9f735bbe93bd701ec9e275b80f92 GIT binary patch literal 74306 zcmb@u30RWp`!8CeZSvx&hMOaUFXkrbp zez=6v?!TNX3u^Hef}Zhz^Q00tuZfWRPKn!ac4f# zP~A_hP}}0RWeSD90>|KOrp?^_XI?Jb|9yt-Pv8Hr#lg{I>Hecl!)G_`q`9FlOE=`) zYcQC+)&Ak^%}GDU1-NMm+}?GzX{8C}hjm${x|A#gRnzNNS6;4Rl#NX& z#J!m;e_=&T9Gg*AuDt)S0 zJWiQ%#aAY3lmcX(vR6#%o6Lwmj!go=GAdn4WFz{%WT(HFX~PD4U=zFYm%TL*OgCMQ zWE#aky98nx1y*$*bg>tYO)5AHQu-A7`(ibB2Qe(k5DY53_hy|;_u)31(A zZiau^ym-I`rg*pisDY9KQ&PfAm2X^~kE-}Am9O*$WBLX=#95L%=94nyQ-)Nrkwj-@ z56fH6@$;|J{>ysanrWD3U~J>|N>v+U#^&DdU>bb(!>E4Ab`tv%(Woct>|-x;`a3iI z1lcKb`gpnTsv_is!L0HZxkpfj`$WFz@M{!Oc{=Vr%3qRqh3Z8QpOCn~r(6o6n3Z*s zf_T!9lQ_XkTElsfs6d{9_r`Mk3~6x({yZ90lo?J7rLm%Zi$o4>f~lg4u*jir_|7P% zjbbPufMDNQ+@F2=)ScI0re-?R2d4VuTJD7#JJ$6n`wx(;;*rh%0A2Em%*;IXZ}~TR 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 literal 0 HcmV?d00001 diff --git a/en/how-to/importing/index.html b/en/how-to/importing/index.html index d841147ba..86eec8c58 100644 --- a/en/how-to/importing/index.html +++ b/en/how-to/importing/index.html @@ -1093,6 +1093,8 @@ + + @@ -1266,6 +1268,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/how-to/index.html b/en/how-to/index.html index 9707d4a69..198a7bcbc 100644 --- a/en/how-to/index.html +++ b/en/how-to/index.html @@ -1088,6 +1088,8 @@ + + @@ -1211,6 +1213,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/how-to/morningstar/index.html b/en/how-to/morningstar/index.html index 557a8a974..954c97ca8 100644 --- a/en/how-to/morningstar/index.html +++ b/en/how-to/morningstar/index.html @@ -1088,6 +1088,8 @@ + + @@ -1219,6 +1221,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/how-to/quote-feed/index.html b/en/how-to/quote-feed/index.html index c96d7ca62..9234aca8f 100644 --- a/en/how-to/quote-feed/index.html +++ b/en/how-to/quote-feed/index.html @@ -18,7 +18,7 @@ - + @@ -1088,6 +1088,8 @@ + + @@ -1219,6 +1221,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/how-to/reinvesting-dividends/index.html b/en/how-to/reinvesting-dividends/index.html index 97044662b..0e50e542b 100644 --- a/en/how-to/reinvesting-dividends/index.html +++ b/en/how-to/reinvesting-dividends/index.html @@ -1088,6 +1088,8 @@ + + @@ -1219,6 +1221,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/index.html b/en/index.html index 9be7f2dc8..95bc7b724 100644 --- a/en/index.html +++ b/en/index.html @@ -1099,6 +1099,8 @@ + + @@ -1222,6 +1224,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + diff --git a/en/reference/index.html b/en/reference/index.html index 38b3d44e7..b813f5820 100644 --- a/en/reference/index.html +++ b/en/reference/index.html @@ -15,7 +15,7 @@ - + @@ -1084,6 +1084,8 @@ + + @@ -1207,6 +1209,26 @@ + + + + + +
  • + + + + + copy securities between portfolios + + + + +
  • + + + + @@ -1313,11 +1335,10 @@

    Reference manual

    The Reference manual is structured around the User Interface (UI) of the program, probably the easiest and quickest way for users, developers, or contributors to find relevant information. Figure 1 shows a typical opening screen of a small portfolio, e.g. demo-portfolio-04.

    Figure 1. Opening screen of the PortfolioPerformance program.

    -

    Certainly:

    Figure 1 illustrates the outcome of selecting the All Transactions view, accessible either through the side panel or the menu View > All Transactions. The last Buy transaction for share-3 is selected, prompting the display of a chart showing the historical quotes of share-3 in the lower panel. The following UI elements can be distinguished:

    • Menu bar containing five elements: File, View, Transaction, Online, Help. This menu bar is not context sensitive.
    • -
    • Open projects: you can open multiple projects simultaneously. The highlighted project is visible in the panels below. Projects marked with a star (*) preceding their name has been changed and should be saved before closing. It is possible to display two projects side by side in the UI.
    • +
    • Open projects: you can open multiple projects simultaneously. The highlighted project is visible in the panels below. Projects marked with a star (*) preceding their name has been changed and should be saved before closing. It is possible to display two projects side by side in the UI.
    • The Side panel serves as a convenient shortcut for accessing various views within the project. All available options can also be accessed through the View menu. It's important to note that the list in the side panel mirrors the options available in the View menu, providing a one-to-one translation of the available views. The chosen view dictates the content displayed in the adjacent top and bottom panels. Next to the options Securities and Taxonomies, a very small (green) icon will let you add new elements.
    • Top panel: in the example of Figure 1, the top panel contains the All Transactions view. This is a list of all the transactions that you have made with your portfolio, such as deposits, withdrawals, buys, and sells. The default columns, such as date, type, security, ..., are initially visible. However, you have the flexibility to modify them using the Settings (cog) icon located in the top-right corner. Please, note that the icons in the top-right corner are specific to this view and may not necessarily appear in other views.
    • The Bottom panel follows the selection of the top panel. For example, selecting share-1 in the top panel will display the chart of this share in the bottom panel.
    • diff --git a/en/search/search_index.json b/en/search/search_index.json index b459fe94b..a6e945908 100644 --- a/en/search/search_index.json +++ b/en/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"About this Manual","text":"

      The Portfolio Performance (PP) manual consists of four chapters:

      • Getting Started: If you're new to PP, this chapter will help you get started. It covers everything from installation to creating a new portfolio, importing securities and transaction data, and evaluating your entire portfolio.
      • Basic Concepts: Although PP is a highly intuitive and user-friendly program, the underlying financial concepts can be complex. This chapter provides a concise yet clear understanding of key Portfolio Performance concepts, such as accounts, transactions, reporting periods, IRR, and more.
      • How-to: In this chapter, you'll find step-by-step descriptions of common procedures, including data import, dividend booking, finding historical quotes, and more. A few tips & tricks and special cases are also described.
      "},{"location":"#about-portfolio-performance","title":"About Portfolio Performance","text":"

      PP is an Eclipse-based desktop application written in Java. This open-source project started in 2012 and has been updated numerous times. With PP, you can:

      • Monitor the composition and development of your securities portfolio with meaningful overviews, key figures, and charts.
      • Track the historical price development of securities and your purchases and sales.
      • Classify the securities in your portfolio according to your needs and visualize the composition, such as by asset classes and regions.
      • Define and track the portfolio strategy with your planned asset allocation and ensure it in the rebalancing process.
      • Create an overview across multiple securities accounts and clearing accounts.
      • Import statements from online banks and brokers quickly and conveniently.

      Why choose yet another application? While you can simulate some of these calculations with Excel or rely on your broker for information, they often provide incorrect results. They are typically based solely on absolute figures at the beginning and end of a reporting period and do not properly include purchases and sales or variable reporting periods. PP calculates performance accurately using True-Time Weighted Rate of Return and Internal Rate of Return, taking into account the purchases and sales at their respective execution date.

      "},{"location":"#other-information-sources","title":"Other Information Sources","text":"

      The source code is hosted on GitHub. Examining this code will give you direct access to the inner workings of the program.

      There is also an active discussion forum available in both English and German, with an extensive Frequently Asked Questions (FAQ) section.

      "},{"location":"#license","title":"License","text":"

      This manual is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. The source code of Portfolio Performance is licensed under the Eclipse Public License 1.0.

      Thanks to all contributors!

      "},{"location":"#imprint","title":"Imprint","text":"

      For more information, please see the Imprint and Privacy Policy.

      "},{"location":"concepts/","title":"Basic concepts","text":"

      In this chapter, you will find a concise but clear explanation of several basic concepts. Portfolio performance is all about numbers. It is easy to completely miscalculate or misinterpret these numbers, if you don't understand the underlying assumptions.

      • Financial terminology: Understanding basic financial terminology is crucial for optimal usage of PP and this manual. This page contains a few links excellent sites.
      • Account: An account is a collection of transactions. PP uses several terms to indicate the concept of account: Securities, Deposit, Reference, Cash, Offset, ... account. What do they mean and in what aspects do they differ?
      • Transaction: A financial transaction is an agreement between a buyer and seller to exchange goods, services, or assets for payment. In case of PP, the exchange is about securities. There are security transactions such as buy, sell delivery (inbound), and delivery (outbound); deposit transactions such as deposit, removal, interest, interest charge, fees, fees refund, taxes, tax refund; and dividend transactions.
      • Reporting period: The (reporting) period is the time slice that is taken into account for reporting (calculations, graphs, statistics). It's very important that you realize that for every performance calculation a reporting period is taken into account, even if you haven't set one explicitly.
      • Purchase value: The Purchase Value of a security is the summed\u00a0value\u00a0of each buy (+) and sell (-) transaction of that security, taken into account the reporting period. The value of a transaction includes the taxes and fees; sometimes also called \u201cNet Transaction Value\u201d.
      • Performance: Measuring your portfolio's performance may seem straightforward, but it involves a range of concepts and calculation techniques that require explanation.
      "},{"location":"concepts/account/","title":"Types of Accounts","text":"

      An account is a collection of transactions. These transactions could include buy and sell transactions of securities (shares, etc.) for a Securities account or withdrawals and deposits of money for a Deposit account. Each account has a default currency attached. As part of the installation process, you have already created at least one Securities account and one Deposit account.

      Portfolio Performance (PP) has two main types of accounts: Deposit and Securities accounts. They are described quite well in the Guide on Getting Started by Thomas (Contributor); you will need to scroll quite far down.

      Other related terms are Reference account, Offset account, and Cash account.

      "},{"location":"concepts/account/#deposit-account","title":"Deposit Account","text":"

      Figure 1. Example of Deposit Accounts.

      In Figure 1 (top panel), there are three deposit accounts named Broker-1 (EUR), Broker-1 (USD), and broker-2 (EUR). Notice the column heading \"Cash Account\". The bottom panel shows the transactions of the selected Deposit Account Broker-1 (EUR).

      Deposit Accounts are used for deposits and withdrawals in EUR and USD in the two broker accounts. It's somewhat redundant to add \"EUR\" and \"USD\" in the name because you also need to specify the currency for each deposit account (see the third column in Figure 1). On the other hand, in many dialogs (for example when buying a security) you need to specify the deposit account. The added currency in the name of the deposit account will help you then choosing the correct one.

      Of course, you can use other names depending on your needs. For example, if you want to keep all your dividends and taxes in a separate account, you could name it Dividends and Taxes. If you receive dividends in both EUR and USD, then you need also two deposit accounts with the name Dividends but with different currencies.

      A deposit account is used to transfer or receive money as the result of a transaction. In Figure 1, the balance of Broker-1 (EUR) reflects the deposit of 3000 EUR and the purchase of each 2969.12 EUR. A deposit account can be negative. However, good practice requires that you first add a deposit of a large enough sum to cover the subsequent buy transactions, just as you would do with a real broker.

      "},{"location":"concepts/account/#securities-account","title":"Securities Account","text":"

      A securities account will hold your securities and will be used for buying or selling securities. A securities account is most often named after the broker or bank that you use for buying or selling.

      Figure 2. Example of Securities Accounts.

      Note that although broker-1 has two deposit accounts (see figure 1), only one of them broker-1 (EUR) is set as the reference account. The bottom panel shows the purchase transaction with the Broker-1account.

      "},{"location":"concepts/account/#related-terms","title":"Related Terms","text":""},{"location":"concepts/account/#cash-account","title":"Cash Account","text":"

      The term Cash Account is somewhat inconsistently used. In Figure 1 (top panel; first column) it refers to a Deposit Account; which is in line with the name Cash Account. In Figure 2 (bottom panel)the Cash Accountcolumn refers to a Security Account (broker-1).

      "},{"location":"concepts/account/#reference-account","title":"Reference Account","text":"

      A securities account is always associated with a deposit account. This is the deposit account that will be used (if no other is explicitly assigned) for any buy or sell transaction on that securities account. This deposit account is called the Reference Account. In Figure 2, the Broker-1 security account has a reference (deposit)account named Broker-1 (EUR).

      The Reference account of a Securities account must be set when creating this account (see Figure 2 of Creating a Portfolio). You can always change the Reference account by selecting Accounts > Securities Accounts from the left sidebar. Double-click on the relevant Reference account currency and choose a new one from the drop-down menu (see Figure 2; second column).

      "},{"location":"concepts/account/#offset-account","title":"Offset Account","text":"

      The offset or counter account, also known as a \"Gegenkonto\" in German, is an essential component when dealing with securities transactions. It acts as the counterpart to the securities account. In other words, for every transaction that occurs in the securities account, an equal and opposite entry is recorded in the offset account.

      When you perform actions like buying or selling securities within your securities account, these transactions are balanced by corresponding entries in the offset account. For example, when you buy securities, the purchased securities are added to the securities account, and an equivalent amount of cash is withdrawn from the offset account. This ensures that the overall balance of your accounts remains zero or balanced.

      However, also the term \"Offset account\" is a relative concept. Compare the bottom panels of Figure 1 and 2. For a Deposit Account(Figure 1), it refers to a Security Account and vice versa.

      "},{"location":"concepts/financial-terminology/","title":"Financial terminology","text":"

      Explaining all financial concepts in this manual would be too far-reaching. However, understanding these concepts is crucial for optimal usage of PP and this manual.

      In this page, you can find some reliable weblinks to gain a comprehensive understanding of this terminology. Concepts that are specifically related to PP e.g. account, transaction, purchase value, ... are covered elsewhere in this chapter.

      • Investopedia.com has a large section about financial terms, alphabetically organised.
      • Dutch-speaking readers can find an extensive alphabetically organised list at De Financi\u00eble Begrippenlijst
      • The website iotafinance.com provides the translation of financial terms from/into English, French, Spanish, and German.
      • The Library of Congress provides a 75 pages PDF bilingual glossary (English - Spanish).
      • Securities versus stocks with some historical notes.
      "},{"location":"concepts/purchase-value/","title":"Purchase Value","text":"

      The Purchase Value of a security is the summed\u00a0value\u00a0of each buy (+) and sell (-) transaction of that security, taken into account the reporting period. The value of a transaction includes the taxes and fees; sometimes also called \u201cNet Transaction Value\u201d.

      If the purchase date lies before the beginning of the reporting period, then the value at the beginning of the period is taken. If the purchase date lies within the period, then the value at the purchase date is used. However, if the purchase data is later than the end of the reporting period, then the purchase is not taken into account for the calculation of the purchase value. Purchase Value and Purchase Price are used in Reports > Performance > Securities (see figure 1)

      Figure 1. Purchase value of a security

      Assume the following scenario. We are now 2023, May, 15th and you have bought 30 shares at different times and quotes (see figure 2). An overview of all buys and their respective quotes is shown in figure.

      Figure 2. List of Buy transactions of security example

      The reported purchase value of a particular security is dependent upon the selected reporting period. In the Table 1, you can see that the purchase value of this simple transaction, can vary between 3300 EUR and 500 EUR, depending on the selected period.

      Table 1: Three reporting periods based on the current day (2023-05-15) Period From \u2026 to \u2026 Purchase Value 1 year 2022, May 15 - 2023, May 15 3300 EUR 2 years 2021, May 15 - 2023, May 15 3000 EUR 3 years 2020, May 15 - 2023, May 15 3050 EUR Custom 2000, Jan 1 - 2020, Jan 01 500 EUR

      The 1 year period starts at 2022, May 15 and ends today (2023,May 15); sometimes also called YTD (Year To Date). Because all purchases fall before the reporting period, the value for each of them is taken from the beginning of the period. At that time (2022, May 15), the share was valued at a quote of 110 EUR (see graph). So, the total purchase value is 30 shares * 110 = 3300 EUR. This is the beginning situation of the period (also called Statement of Assets). Since, there are no purchases afterwards, this amount is also the purchase value of the 1 year period.

      The 2 years period starts at 2021, May 15. Only the third buy falls within the period. So, buy 1 and buy 2 are evaluated at the price from the beginning of the period (= 90 EUR). So, the Statement of Assets equals 1350 EUR. There is one buy afterwards (valued at the buying quote). The total Purchase Value of this 2 year period is therefore (5 + 10) shares at 90 EUR + 15 shares at 110 EUR or 1350 +1650 = 3000 EUR.

      The 3 years period start at 2020, May 15. The second and third buy lie within the reporting period and are evaluated at their respective quotes: 10 shares at 90 EUR (= 900 EUR) and 15 shares at 110 EUR (= 1650 EUR). The beginning of the period or Statement of Assets is the result of the first buy (2020, Jan 1) takes the quote from the beginning of the period (2020, May 15) which is the same as the purchase quote (e.g. 100 EUR); resulting in a purchase of 5 * 100 EUR = 500 EUR.

      The previous explanation can be seen in the pop-over, when hovering the mouse over the Purchase Value (see Figure 3).

      Figure 3. Pop-over panel for Purchase value field.

      The custom period (from 2000, Jan 1 (not included) until 2020, Jan 1 (included) has a Purchase Value of 500 EUR because it contains only the first buy (= 5 * 100 EUR). The second and third buy or not taken into account because they occur later than the period end. Things become more complicated -but with the same logic- when there are also sell transactions. Important to remember is that PP use a FIFO (First In, First OUT) method to calculate the result of a sell transaction. Suppose that you did a (rather bad timed) sell at 2021, Jul 1 2020 of 12 shares (see Figure 4).

      Figure 4. Overview and graph of all buy and sell transactions.

      At that moment there were 15 shares available (5 at 100 EUR and 10 at 90 EUR). Selling 12 of them will first sell the 5 shares of 100 EUR and then another 2 of 90 EUR, leaving 3 shares of 90 EUR available.

      Now, let's calculate the Purchase Value for the different periods.

      • 1 year period: The period runs from 2022, May 15 until 2023, May 15. All purchases are done before the beginning of the period; so each of them is valued at the price of 2022, May 15, which is 110 EUR. How many shares are available? 5 + 10 - 12 + 15 = 18 at 110 EUR or 1980 EUR.

      • 2 years period running from 2021, May 15 until 2023, May 15. Only the last buy transaction falls within the period and is evaluated at its current quote (110 EUR). The Statement of Assets consists of 3 shares (15 buy - 12 sell). They are evaluated at the price from the beginning of the period (90 EUR). The Purchase Value for the 2 years period is: 3 * 90 EUR + 15 * 110 EUR = 1920 EUR.

      • 3 years period running from 2020, May 15 until 2023, May 15. The Statement of Assets is 0 EUR because all 5 shares from buy 1 are sold (FIFO) on 2021, Jul 15. From the second buy, only 3 shares are remaining, evaluated at 90 EUR. The third buy is evaluated at 110 EUR. The Purchase Value of the 3 years period is 3 shares * 90 EUR + 15 shares * 110 EUR = 1920 EUR. Longer periods have the same Purchase Value.

      "},{"location":"concepts/reporting-period/","title":"Reporting period","text":"

      Figure 1. Drop-down list for selecting the reporting period

      The (reporting) period is the time slice that is taken into account for reporting (calculations, graphs, statistics). It's very important that you realize that for every performance calculation a reporting period is taken into account, even if you haven't set one explicitly. By default, it is set to one year from the current day.

      You can set the reporting period with the drop-down icon in the top-right corner of the window (see Figure 1). The available options are: 1 year, 2 years, 3 years, New ..., Manage ... With this last option you can delete or reorder the available time periods.

      The 1, 2, 3 years period is always calculated from the current day. If the current day is 2023, May 15, then ...

      Period From end of \u2026 to end of \u2026 1 year 2022, May 15 - 2023, May 15 2 years 2021, May 15 - 2023, May 15 3 years 2020, May 15 - 2023, May 15

      With New, you can create custom time periods. The options in the figure below are self-explanatory. You cannot give a self-chosen name to this period. Figure 2. Different custom time periods for reporting

      "},{"location":"concepts/transaction/","title":"Transaction types","text":"

      Figure 1. Transaction menu.

      A financial transaction is an agreement between a buyer and seller to exchange goods, services, or assets for payment. In case of PP, the exchange is about securities. Transactions are the core of PP. You can divide them broadly into security and deposit transactions (see figure 1).

      • Security transactions: buy, sell delivery (inbound), and delivery (outbound).
      • Deposit transactions: deposit, removal, interest, interest charge, fees, fees refund, taxes, tax refund.
      • A dividend is a special deposit transaction. The cash is coming from the dividend payment of the security.

      Security transfer ... and Transfer between accounts ... aren't real transactions but manual operations between accounts.

      Figure 2. Transaction types.

      Buy and sell transactions are the most common. When you buy a security, it increases the value of the Security Account (shown in green) and decreases the balance in the Deposit Account (shown in red). Conversely, when you sell a security, it has the opposite effect.

      A Delivery (inbound) is similar to a buy transaction but has no impact on the Deposit Account; only the Security Account increases. This operation is typically used when you need to inherit a security. Delivery (outbound) functions in the opposite manner.

      To increase the Deposit Account balance, you can use a Deposit transaction, while a Removal transaction is used to decrease it.

      Additionally, you can receive a dividend, interest, a refund of fees or taxes. This is similar to a Deposit transaction, but with the added option of linking this deposit (dividend, interest, ...) to a Security account. Conversely, when you need to pay fees or taxes or are charged interest, it causes a Removal of a deposit, but also allows for the possibility of linking it with a Security account.

      "},{"location":"concepts/performance/","title":"Performance","text":"

      The measurement of the performance of a financial portfolio is based on the concept of return: the increase or decrease of value over a specific period. For example, your portfolio starts at 100 EUR and grows to 120 EUR by the end of the period, resulting in a performance of + 20%. Equation 1 offers two versions of the base formula; also named the Rate of Return.

      $$\\mathrm{r = \\frac{(MVE - MVB)}{MVB} \\qquad \\Leftrightarrow \\qquad 1 + r = \\frac{MVE}{MVB}\\qquad (Eq 1)}$$

      where MVE = the market value of the portfolio at the end of the reporting period, and MVB = the market value of the portfolio at the beginning of the period. Please note that:

      • The rate of return percentage applies to the entire period (3 years, 6 months, ...) and is not an annual rate.
      • There are no additional transactions within this specified period.

      PP uses two different approaches to calculate the rate of return when additional transactions occur withing the reporting period: the money-weighted or time-weighted rate of return. It also distinguishes between the measuring the performance on portfolio, (individual) security, or trade level.

      "},{"location":"concepts/performance/#the-money-weighted-rate-of-return","title":"The money-weighted rate of return","text":"

      The money-weighted rate of return uses essentially the Internal Rate of Return (IRR) technique used in project management. This calculation considers both the timing (when) and the amount (how much) of the cash that moves into and out of the portfolio within the reporting period.

      The money-weighted rate of return or IRR is the annual interest rate that is necessary to bring the beginning value of the investment (MVB) and all subsequent cash flows to the end value (MVE). To generate the specified cash flows within the given time period, your portfolio must grow each year by a percentage equal to the IRR.

      If you find the concept of IRR challenging, please start by first reading the money-weighted section. The calculation method is thoroughly explained by formulas and numerous examples, ranging from a simple single-share investment to multiple transactions including dividends. The examples are based on the our demo portfolio to solidify your understanding.

      "},{"location":"concepts/performance/#time-weighted-rate-of-return","title":"Time-weighted Rate of Return","text":"

      The time-weighted rate of return is not influenced by the amount invested. Whether you invest one EUR or 100 EUR, you will achieve the same return. The reporting period is divided into several holding periods, and for each holding period, a return value is calculated and then compounded into an overall return. Each period carries equal weight; hence the name time-weighted rate of return. In the True Time-Weighted Rate Of Return methodology (TTWROR), performance is calculated using simple returns without any consideration for the total amount invested.

      The TTWOR method is explained in depth in the time-weighted section of this chapter.

      A nice video about the calculation and difference between money-weighted and time-weighted approach is given by the following CFA-level-1 exam video.

      "},{"location":"concepts/performance/money-weighted/","title":"The money-weighted rate of return","text":"

      The money-weighted rate of return is in fact identical to the Internal Rate of Return (IRR) technique used in project management. This calculation considers both the timing (when) and the amount (how much) of money moves into and out of the portfolio within the reporting period. The base formula for the IRR calculation is:

      $$\\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)}}$$

      where n = the number of cash flows in the reporting period, $CF_t$ = cash flow at time t within the period, and $RD_t$ = the number of remaining days within the period. For MVB, the $RD_t$ equals the entire period, representing the period length in years. You can simplify the equation by treating the MVB as the initial cash flow. A cash flow is any amount of money that is added to or withdrawn from an investment.

      The formula is very similar to the calculation of Future Value. With an interest rate of 5%, 100 EUR today will be worth 115.76 EUR in three years or 100 x (1 +0.05)^3. Since PP uses days as standard period, we need to divide the remaining number of days that the cash flow could influence the performance by 365 to obtain a decimal representation of the yearly period. $\\mathrm{CF_t \\times (1+IRR)^{\\frac{RD_t}{365}}}$ is thus the expected future value of the cash flow CF at time t by the the end of the period with an annual interest rate = IRR. Please note that in the absence of any cash flows, Equation (1) resembles the simple return formula MVE = MVB x (1 + r). The added exponent transforms the return rate into an annual rate of return rather than a periodic rate of return, as in the simple return formula.

      The IRR is the annual interest rate that is necessary to bring the beginning value of the investment (MVB) and all subsequent cash flows to the end value (MVE). To produce the specified cash flows within the given time period, your portfolio needs to grow each year by a percentage equal to the Internal Rate of Return (IRR).

      Note

      In project management literature, you are more likely to encounter Equation (1) expressed as:

      $$\\mathrm{CF_{t0} = \\frac{CF_{t1}}{(1 + IRR)^\\frac{t_1}{365}}+\\frac{CF_{t2}}{(1 + IRR)^\\frac{t_2}{365}}+...+ \\frac{CF_{tn}}{(1 + IRR)^\\frac{t_n}{365}}}$$

      where $\\mathrm{CF_{t0}}$ denotes the initial cash outflow at time $t_0$, representing your initial investment. $\\mathrm{CF_{t1} \\cdots CF_{tn}}$ are the net cashflows that your initial investment will yield. PP works with daily periods instead of the traditional annual periods. Therefore, $\\mathrm{t_1, t_2, \\cdots t_n}$ should be converted to the number of days between $t_0$ and $t_n$.

      Unfortunately, there is no easy way to derive the value of IRR from Equation 1. Software tools such as Excel have functions like IRR and XIRR, that employ a brute-force approach, iteratively solving the equation with various \"guesses\" of IRR until a suitable match is identified. In the examples below we will use the Goal Seek method of Excel to illustrate the solution.

      "},{"location":"concepts/performance/money-weighted/#irr-at-portfolio-level","title":"IRR at portfolio level","text":"

      The following examples will calculate the IRR for the whole portfolio. For example, our demo-portfolio-03 contains two securities and one deposit account. The resulting IRR should not be extrapolated to an individual security. It's the performance of the whole portfolio. Of course, you can calculate the IRR for a specific security or even trade in PP.

      "},{"location":"concepts/performance/money-weighted/#example-1-one-buy-transaction","title":"Example 1: one buy transaction","text":"

      In our demo-portfolio-03 all transactions take place within a holding period of three years, starting at 2020-06-12. Consequently, the MVB for this period is 0 EUR because the portfolio is empty at the beginning of the period. The following transactions occur in the holding period (see Figure 1 below).

      Figure 1. Overview of transactions - Deposit (3x), Buy (3x), Dividend, and partial Sell.

      Figure 2. Graph of historical quotes and transactions of share-1.

      Figure 3. Graph of historical quotes and transactions of share-2.

      Assume that only the first buy (+ deposit) has taken place. The calculation of the IRR should then be straightforward.

      • MVB = 0 EUR
      • First cash flow on January 15, 2021: the purchase of 10 shares of share-1 at a price of 15 EUR each, resulting in a total sum of 155 EUR (including fees and taxes); see Figure 1. Due to the three-year reporting period, this security will remain in the portfolio for an additional 878 days until MVE.
      • MVE = 10 shares at quote 19.006 EUR; in total 190.06 EUR.

      Since MVB = 0, we can derive the IRR from Equation 2 directly: $\\mathrm{IRR = \\left({\\frac{MVE}{CF_1}}\\right)^\\frac{365}{878} - 1}$

      IRR = (190.06/155)^(365/878) = 8.85%

      In order to generate the MVE = 190.06 EUR, the initial cash flow CF1 of 155 EUR must grow at 8.85% per year for 2.41 years or 878 remaining days.

      "},{"location":"concepts/performance/money-weighted/#example-2-multiple-buy-transactions","title":"Example 2: multiple buy transactions","text":"

      When dealing with multiple cash flows, deriving the Internal Rate of Return (IRR) becomes more complex. Take, for example, the three buying transactions from Figure 1. The same logic as mentioned earlier still applies, albeit with a bit more complexity.

      • MVB is still zero EUR.
      • Three cash flows (see Figure 1). The remaining days in the reporting period are respectively 878, 514, and 255 days.
      • MVE = 15 shares at a quoted price of 19.006 EUR, and 5 shares at 13.77 EUR, totaling 396.85 EUR.

      $$ \\mathrm{MVE = MVB \\times (1 + IRR)^{\\frac{1095}{365}} + CF_1 \\times (1+IRR)^{\\frac{878}{365}} + CF_2 \\times (1+IRR)^{\\frac{514}{365}} + CF_3 \\times (1+IRR)^{\\frac{255}{365}} \\qquad (Eq 3)} $$

      Figure 4 illustrates the calculation in Excel (download workbook). The initial cash flow of 155 EUR will have grown to 219.68 EUR, if the holding period was 878 days and the yearly interest rate was 15.60%. The second buy will increase from 84 EUR to 103.03 EUR. The profit of share-2 appears smaller due to the smaller amount of holding days. The calculation of IRR can be simulated it in Excel using the Data > Goal Seek method (see Figure 4). The method tries to set the value of the calculated MVE (cell F11) to the observed MVE (manual input) by iteratively changing the value of IRR, until a match (15.60%) is found.

      Please note that the individual calculated end values of the shares do not necessarily correspond with the observed individual end values. Compare for example the expected and observed value of share-2. Only the sum of the whole portfolio match. See balow to calculate the performance of individual securities and trades.

      Figure 4. IRR-calculation for three buy-transactions.

      "},{"location":"concepts/performance/money-weighted/#example-3-buy-dividend-sell-transactions","title":"Example 3: buy - dividend - sell transactions","text":"

      Whether dividend payments and selling securities should be considered as cash flows depends on the context. In demo-portfolio-03, the outcomes of dividend and selling transactions are deposited in a cash account, which is part of the portfolio. Consequently, there isn't any 'external' cash flow. Also, the cash account is included in the portfolio valuation at the end of the period (MVE), meaning that the value of MVE already incorporates dividends and sales.

      If the dividend payment is \"consumed\" (you bought yourself a nice meal from it), resulting in an external cash flow (withdrawal), this transaction should be recorded in PP. Similarly, if you choose to reinvest the dividend or the proceeds from a sale, it necessitates recording a new transaction in PP.

      As evident in Figure 5, MVE comprises the paid dividend and the outcome of the sale transaction (both held in a deposit account), in addition to the valuation on the end date of the remaining shares from the portfolio. This aligns with what PP displays in the calculation tab. The MVE is the total of all deposit and securities accounts.

      Figure 5. IRR-calculation for buy-sell-dividend transactions.

      If you should like to consider the dividend and sale as a cash flow, then you should change the transaction date to the holding period end date. Indeed, before the end date, these payments essentially remain dormant on the cash account, without actively contributing to the portfolio. As the number of remaining days in the period reaches zero, the formula will simplify to the face value of the dividend and sale.

      155 x 1.2^(878/365) + 111.76 x 1.2^(514/365) + 67 * 1.2^(255/365) + 20 x 1.2^0 + 105 x 1.2^0 = MVE (but without dividend and sale)

      "},{"location":"concepts/performance/money-weighted/#example-4-mvb-0","title":"Example 4: MVB > 0","text":"

      In the previous examples, all transactions took place within the reporting period. This isn't always the case. It is very important to distinguish the following cases:

      • $CF_t$ occurs before the beginning of the reporting period (MVB date). PP will calculate the value of $CF_t$ through historic quotes at time t. The holding period is the entire reporting period.

      • $CF_t$ occurs after the beginning but before the end of the reporting period. The value of $CF_t$ is known through the transaction data. The holding period is the number of remaining days from time t until the end of the reporting period.

      • $CF_t$ falls after the end of the reporting period. $CF_t$ does not contribute to MVE and is omitted from the calculation of IRR for that reporting period.

      Consider a scenario where the holding period is only two years (from 2021-06-12 to 2023-06-12), or 730 days. Since the first buy of share-1 occurs outside of this period (item 1 from above), the quoted price of share-1 at the beginning of the period is used rather than the actual buying price.

      • MVB = 177.94 EUR, representing 10 shares of share-1 at the closing price of 17.794 EUR on June 11, 2021 (= the closing price from the day before the buying transaction).
      • Additional buys: two additional buys within the reporting period with respective remaining days of 514 and 255 days and known buying transaction price. Remember, the dividend and sale will be valuated at end date in the MVE.
      • MVE = 426.82 EUR, including 125 EUR on the cash account from dividend and sale.

      The resulting formula is with IRR = 17.63% is:

      177.94 x 1.18^(730/365) + 84 x 1.18^(514/365) + 67 x 1.18^(255/365) = MVE (including dividend and sale)

      Figure 6. IRR-calculation for a 2 year holding period (MVB > 0).

      "},{"location":"concepts/performance/money-weighted/#irr-at-security-level","title":"IRR at security level","text":"

      The value of IRR, calculated on the portfolio level, doesn't say much about the performance of a specific security. For example, the demo-portfolio-03 IRR (3 years reporting period) is 20.28%. The security IRR of share-2 is 112.53%. A glance at Figure 7 should make it evident why: the security is purchased at the lowest price of the entire period. You can obtain the IRR for each security separately using the menu View > Reports > Securities. The calculation closely resembles that of the portfolio. It is essential to set a reporting period beforehand.

      Figure 7. IRR-calculation for individual securities.

      • Fees are omitted from the security IRR calculation.

      • In contrast to the Portfolio IRR, dividends and sale results are treated as leaving the portfolio at the transaction date in Security IRR calculations. Deposit accounts are not included in the Security IRR calculation.

      • With a multi-transaction security, the purchase price and value could be somewhat tricky to obtain. For instance, the remaining 10 shares of share-1 are the outcome of two purchase transactions and one sell transaction. Following the FIFO principle (First In, First Out), these 10 shares consist of the 5 remaining shares from the first buy and the 5 shares from the second buy. This results in an average price of 15.50 EUR.

      "},{"location":"concepts/performance/money-weighted/#example-5-a-security-with-one-buy-transaction","title":"Example 5: a security with one buy transaction","text":"

      A simple example is provided by the IRR calculation of share-2. The single buy transaction falls within every holding period (1,2, or 3 years). The transaction data without taxes is used to determine the cash flow; e.g. 67 EUR.

      • MVB = 0 EUR.
      • First cashflow: 8 shares at 8 EUR/share + 2 EUR fees. Remaining days = 255.
      • MVE = 8 shares at 13.97 EUR/share.

      Inserting these values into Equation 2 gives 111.76 = 0 x (1+IRR)^1095/365 + 66 x (1+IRR)^255/365

      IRR = ((111.76/66)^(365/255)) - 1 = 112.53%

      "},{"location":"concepts/performance/money-weighted/#example-a-security-with-multiple-transactions","title":"Example : a security with multiple transactions","text":"

      share-1 has multiple transactions, including sell and dividend. It's important to get the dates and cash flows correct, see Figure 8.

      Figure 8. IRR-calculation for individual security with multiple transactions.

      Please note that the dividend payment and the sale is recorded at the transaction date; not the end date of the holding period. This is different behaviour than with the IRR calculation on portfolio level. The resulting amounts are not deposited on a cash account but are withdrawn from the portfolio at the transaction date. Because of this withdrawal, the cash flow is also negative.

      Inserting these values into Equation 2 gives: 190.06 = 153 x (1+IRR)^(878/365) + 83 x (1+IRR)^(514/365) - 30 x (1+IRR)^(179/365) - 107 x (1 + IRR)^(61/365) As can be seen from Figure 7, the IRR = 18.00%.

      190.6 = 227.81 + 104.78 - 32.54 - 110.00

      "},{"location":"concepts/performance/money-weighted/#irr-at-trade-level","title":"IRR at trade level","text":"

      A trade is formed by aggregating all buy and sell transactions related to a specific security. A trade can be closed, indicating that no further transactions can be conducted within this trade or open: more transactions are possible. The demo-project-03 contains 3 trades (see Figure 9). A closed trade starting with a buy of share-1 on 2021-01-15 and ending with a partial sell on 2022-01-14. The remaining shares initiate the second open trade, starting at 2022-01-14 and ending at the current date (e.g. 2023-06-12). The third trade is also open because share-2 hasn't been sold yet.

      Figure 9. IRR-calculation for trades.

      Please note that, in contrast with the portfolio and security IRR calculation, you can not set a reporting period. All open trades are calculated with the end date set as of today.

      Also note that PP follows a FIFO principle (First-In; First-Out) to determine which shares will be sold. The 5 shares sold on 2023-04-12 correspond to those acquired on 2021-01-15, rather than the ones obtained on 2022-01-14.

      "},{"location":"concepts/performance/money-weighted/#irr-calculation-of-a-closed-trade","title":"IRR calculation of a closed trade","text":"

      Five shares of share-1 were sold on April 12, 2023. The market value of those shares was 5 x 21 EUR = 105 EUR. The exact values could be obtained from the historical prices or with Report > Performance > Trades. The Entry and Exit values aren't displayed by default. Because of the FIFO-principle, these 5 shares were from the 1th buy, meaning that they are purchased for 5 x 15 EUR = 75 EUR. The fees and taxes are proportionally allocated based on the amount used, in this case, 5/2 = 2.5 EUR. The securities are held for 817 days (from 2021-01-15 till 2023-04-12). Inserting these values in Equation 2 and solving for IRR gives:

      IRR = ((105/77.50)^(817/365)) - 1 = 14.53%

      "},{"location":"concepts/performance/money-weighted/#irr-calculation-of-an-open-trade","title":"IRR calculation of an open trade","text":"

      The open trade involving share-2 is rather simple. Referring to Figure 1, these shares were acquired for a net value of 67 EUR on 2022-09-30, which was 255 days ago. The current value is 111.76 EUR, resulting in IRR = (111.76/67)^(365/255) - 1 = 108%.

      There is no easy way to check the trade IRR for a date other than the current date in PP.

      The open trade involving share-1 is a special case. Since it is an open trade, it ends on the current day (2023-06-12). But the trade consists of shares that were bought in 2021 and in 2022. Five shares are from 2021. The cash flow of these shares is thus 77.5 EUR (see also paragraph above). Today, they are valuated at 95.36 EUR. The remaining 5 shares are from 2022-01-04 with a cash flow of 84 EUR (see Figure 1). These 5 shares are also 95.36 EUR worth today (2023-06-12).

      According to PP (see Figure 9) the exit value is 190.72 = 2 x 95.36 EUR and the entry value is 77.5 + 84 = 161.50 EUR.

      • 1st buy: 77.50 EUR with a holding period of 878 days
      • 2nd buy: 84.00 EUR with a holding period of 514 days

      Inserting these values in Equation 1.

      190.72 = 77.5*(1+IRR)^(878/365) + 84*(1+IRR)^(514/365)

      Finding IRR with Goal Seek gives IRR = 9.16% and the formula solves into

      190.72 = 95.69 + 95.03

      "},{"location":"concepts/performance/time-weighted/","title":"Time-Weighted Rate of Return","text":"

      The calculation of the time-weighted rate of return starts with dividing the reporting period into distinct holding periods. For each holding period, a return value is calculated and then compounded into an overall return. Each period carries equal weight; hence the name time-weighted rate of return. In the True Time-Weighted Rate Of Return methodology (TTWROR), performance is calculated using simple returns without any consideration for the total amount invested.

      To minimize the computational effort, older methods utilized larger holding periods. A natural marker could be the dates of each cash flow. The holding periods would be formed by: Period Start --> CF1, CF1 --> CF2, CF2 --> CF3, ..., CFn-1 --> Period end. A holding period starts at period start or immediately before a cash flow and ends just before the following cash flow or the period end: CF1 is included in HP1 but CF2 isn't. If any cash flow exists outside the reporting period, making the Market Value Begin > 0, then the first holding period must start at the beginning of the reporting period. Otherwise, the first period starts with the first CF. Figure 1 illustrates the various concepts, applied to our demo-portfolio-03, with a three-year reporting period, making MVB = 0.

      Figure 1. Calculation of True Time-Weighted Rate of Return.

      For every holding period, the return rate is computed using Equation 1.

      $$\\mathrm{r = \\frac{MV_t}{MV_{t-1} + CF_t} - 1 \\qquad \\text{(Eq 1)}}$$

      where $MV_t$ = the market value of the portfolio at the end of holding period t, $MV_{t-1}$ = the market value of the previous holding period. $CF_t$ is the incoming (positive) or outgoing (negative) cashflow in that period.

      The return rate is thus corrected for the cashflow, occurring in that period. If the cash flow is incoming or positive, the MVB of the period is increased by it making the performance independent of the cash flow. For example, suppose that MV1 = 100, CF2 = 200, MV2 = 300 for a certain holding period. Without the correcting mechanism, the return would be calculated at 300% while in fact your portfolio hasn't changed and the performance should be 0%.

      Please note that for for each holding period, you require the market value of the portfolio twice: once at the end of the previous holding period and once at the end of the current one.

      After calculating the return rates of each period, they are compounded with the following formula.

      $$\\mathrm{r = [(1 + r_1) \\times (1 + r_2) \\times (1 + r_3) \\cdots (1 + r_{n-1}) \\times (1 + r_n)] - 1 \\qquad \\text{Eq 2}}$$

      where $r_t$ is the return rate from holding period t.

      "},{"location":"concepts/performance/time-weighted/#ttwror-at-portfolio-level","title":"TTWROR at portfolio level","text":"

      Our demo-portfolio-03.xml has three cash flows (see Figure 1). Because all cash flows fall within the reporting period, the first period (Period start --> CF1)could be omitted. The market value is zero at both the beginning and end of the period.

      The market value is the sum of the value of all deposit and securities accounts. To determine the value of a security, the (historical) closing price is taken. A cashflow can be positive (inbound transfer) or negative (outbound transfer); assuming that fresh money is added at the beginning of the day (and hence is available to generate return) and removed at the end of the day.

      For each period, you need $MV_{t-1}$ and the current $MV_{t}$ period. Because the market value is determined at the end of the trading day (closing price), $MV_{t-1}$ is also the value immediately before the cashflow at the beginning of the day.

      Note

      One could argue that, as we are required to add the cash flow to $MV_{t-1}$ (as per Equation 1), an alternative approach is to consider the market value of $MV_{t}$, which already includes this cash flow. However, it's important to note that throughout the day, market forces may cause fluctuations in $MV_{t-1}$, and these variations should be excluded when determining the market value at the beginning of the day, just before the cash flow.

      Manually calculating these portfolio market values can be a tedious task. It involves multiplying the number of shares for each security by the historical price and then adding fees and other relevant factors. But in PP, you can also generate a spreadsheet for all days in the reporting period with these values (see below).

      Figure 2. Manual calculation of cumulative and annual TTWROR.

      As can be seen in Figure 2 [download workbook], the market value at the beginning of the HP1 is zero EUR (= the closing value of the previous period) and 160.26 at the end (immediately before the next cash flow). There was one inbound positive cashflow of 155 EUR, necessary for buying 10 shares of share-1. The return of this period = 160.26/(0 +155) = 3.39%. Thus, eliminating the effect of the incoming cash flow, your portfolio has grown with 3.39% during this holding period of 364 days.

      Compounding these individual periodical returns into one portfolio return for the whole portfolio with Equation 2 results in a cumulative performance of 44.16%.

      Since computer time is inexpensive nowadays, there's no need to define long holding periods to minimize manual computation. Therefore, PP employs a single day as the holding period. You can export a file with daily portfolio. Select the menu View > Reports > Performance > Chart and click the icon (top right) Export Data as CSV. Choose Export Entire Portfolio (see Figure 3 for an example).

      The calculation is analogous to the explanation for manual calculation using longer holding periods. Before 2021-01-15, all values are zero, as the first transaction occurred on that day. The Delta in % is equivalent to the value of r in the manual calculation. The formula is slightly different: (MV_t + Outbound Transfer)/(MV_t-1 + Inbound transfer). The market value at the end of the period (day) is increased by all outbound transfers, such as withdrawals. In the manual calculation, a separate transfer would be used for this purpose.

      Figure 3. Export TTWROR data from PP.

      It's important to highlight that the performance for '2021-01-15' is negative. This is the result of the market value of the portfolio being smaller at that moment than the required cash flow, owing to the taxes and fees associated with acquiring the security. Fortunately, the subsequent market rally has led to a cumulative performance increase to 3.39%, aligning precisely with the manually calculated value for the first holding period.

      "},{"location":"getting-started/","title":"Getting started","text":"

      In order for you to be able to track, evaluate and manage your securities, Portfolio Performance needs the basic data about your securities accounts and past transactions. After that, you can immediately make your first evaluations and analyze your portfolio and performance from different angles.

      "},{"location":"getting-started/#installation","title":"Installation","text":"

      You can either use one of the precompiled installation files or compile the complete application by yourself. The application is available for MacOS, Windows and Linux.

      "},{"location":"getting-started/#creating-a-portfolio-file","title":"Creating a portfolio file","text":"

      Your first step - of course - is to create a new portfolio file with your accounts. The portfolio file contains all securities, accounts, custody accounts, bookings, classifications, etc.

      "},{"location":"getting-started/#adding-securities","title":"Adding securities","text":"

      You create the securities that are of interest to you in the list of securities. Master data and historical prices are automatically supplemented and updated by Portfolio Performance.

      "},{"location":"getting-started/#manage-your-portfolio","title":"Manage your portfolio","text":"

      So far you have created your portfolio file with a list of interesting securities. Now, it's time to buy and sell some of those securities, receive dividends, set up a savings plan, receive dividends, ....

      "},{"location":"getting-started/#reports-performance","title":"Reports & Performance","text":"

      How is your portfolio structured? The Statement of Assets displays the composition of your portfolio assets. A line chart and doughnut chart provide a more visual overview of all assets.

      What is the current performance of your portfolio? Along with assessments of returns and volatility, you will also receive an overview of the taxes and costs associated with it.

      "},{"location":"getting-started/#carry-out-classification-of-asset-shares","title":"Carry out classification of asset shares","text":"

      With your own structure of your choice, you represent the weighting of the asset shares, e.g. by region and/or asset class.

      "},{"location":"getting-started/#define-portfolio-strategy-and-carry-out-rebalancing","title":"Define portfolio strategy and carry out rebalancing","text":"

      You map your own portfolio strategy with target values for different share classes. You can make a target/actual comparison and perform a rebalancing

      "},{"location":"getting-started/#keeping-the-portfolio-up-to-date","title":"Keeping the portfolio up-to-date","text":"

      You book new purchases, sales and dividends as well as any costs and taxes incurred. This can be done quickly and easily by importing the bank's PDF statements, or manually

      "},{"location":"getting-started/adding-securities/","title":"Creating a portfolio","text":"

      Immediately after the previous \"Create portfolio\" step, the application's main screen looks a bit empty (see Figure 1). The left sidebar option 'Securities > All Securities' can be used to generate a list of securities.

      Note

      A security is a financial instrument that holds value and can be traded between parties. Securities can be broadly categorized into: debt securities (e.g., banknotes, bonds, and debentures) equity securities (e.g., common stocks) derivatives (e.g., forwards, futures, options, and swaps) [1].

      The list contains all the securities you are interested in; not necessarily the ones you have bought. At the moment, it's still empty.

      Figure 1. Main screen after creating a new portfolio

      The Add new investment instrument button allows you to start adding securities to your portfolio. As you can see in Figure 1, you can add new instruments (stocks, bonds, ...), cryptocurrencies, exchange rates. You can also import securities from a CSV-file or to create a new empty security.

      More options are available from the File > New menu (see Figure 1).

      # Adding new instruments

      Selecting the New > Security (menu) or New instrument ... (button) opens the following window (see Figure 2).

      Figure 2. Searching and adding new securities to the All Securities list

      You can type (part of) the security name in the search box. You can search for shares or bonds or both. After clicking the Search button, the list below will be populated with possible target instruments.

      The following fields are displayed for each instrument:

      • Name: the full name of the security according to the data source (see below) from which it is retrieved, e.g. Yahoo Finance.
      • Symbol: the abbreviation (ticker) used by the data source.
      • ISIN: International Securities Identification Number: a unique twelve-digit code that is assigned to every security in the world. Mostly used by European brokers & banks.
      • WKN: Wertpapierkennnummer: a German six-digit alphanumeric code for the identification of a security, now replaced by the ISIN code.
      • Type: can be Share, Bond, Cryptocurrency, Aktie, W\u00e4hrung, Futures, etf, fonds.
      • Exchange: a security may be traded on more than one exchange. For example, the NVIDIA stock is traded on Nasdaq (symbol NVDA, exchange NMS) or XETRA (symbol NVD.DE, exchange GER), and many other exchanges.
      • Currency: not used?
      • Source: could be Yahoo Finance, CoinGecko, or Portfolio Report. Yahoo Finance provides financial news and data including stock quotes, press releases, and financial reports. CoinGecko is a website with real-time information on most cryptocurrencies. Portfolio Report is an open source project that aims to provide centralised portfolio performance data.

      Once you have selected the correct security, you need to click on the Apply button to proceed to the next step. Some information such as name, symbol and historical quotes will already be filled in, based on the selected data source. You can/should change all this info; even the name. In fact, it's even possible to start from an empty instrument and fill in this information yourself.

      Figure 3. Panel for entering info about the selected security.

      It's very important that you select the correct currency in which your security is traded. For NVIDIA on Nasdaq, this is USD, which may be different from the default currency of your portfolio.

      The Calendar dropdown allows you to select a specific stock market calendar; e.g. Euronext, London Stock Exchange, New York Stock Exchange, ... These calendars contain info about trading days, (bank) holidays, ... for this specific exchange. These dates will affect some calculations, the display of price gaps and the execution of savings plans. You can view the different calendars available with their respective dates from the Help > Preferences > Calendar menu. See for example the specific dates for the New York Stock Exchange in Figure 4.

      Figure 4. NYSE calendar with some specific dates.

      A security can be set to active or inactive. If it is set to inactive, then the security will not appear in buy or sell dialogs and the historical prices will not be updated automatically.

      At the bottom of Figure 3 you can add a personal note for this security.

      These fields are called the Security Master Data (see top of Figure 3). There are four other tabs: Additional Attributes, Taxonomies, Historical Quotes, and Latest Quote.

      "},{"location":"getting-started/adding-securities/#additional-attributes","title":"Additional Attributes","text":"

      This tab allows you to supply additional data, besides the info that is already included in the Security Master Panel.

      Click on the + button to add a new attribute such as Logo, Total Expense Ratio, Assets under Management, Vendor, Acquisition Fee (percentage), and Management Fee (percentage). These additional attributes can be added to tables such as Reports > Performance > Securities. These fields are not calculatedand cannot be used in calculations.

      Additional attributes are defined in (left) Sidebar > General Data > Settings > Attributes : Securities (at the bottom).

      Figure 5. Defining additional attributes.

      "},{"location":"getting-started/adding-securities/#taxonomies","title":"Taxonomies","text":"Figure 6: Managing taxonomies.

      A taxonomy is a classification of your securities. For example, the Type of Security taxonomy (see presets in Figure 6) can classify your securities into: stock, Equity Fund, Exchange Traded Fund (ETF), Bond, Stock Option, Index, or Currency. Setting the correct type should be done in the Taxonomies panel when adding or editing the security (see Figure 3).

      Other useful presets are Industries, following the Global Industry Classification Standard (GICS), regions (up to country level), and assets (cash, equity, debt, ...).

      You can select these taxonomies in the Left sidebar > Taxonomies (see figure 6). Click on the + button to see all presets or to create your own custom taxonomy.

      "},{"location":"getting-started/adding-securities/#historical-quotes","title":"Historical Quotes","text":"

      For evaluating your portfolio, you need the current & historical prices of the security. In this panel (see Figure 7) you can set the data source of the Quote Feed. As provider, you can choose between several alternatives: Yahoo Finance, Alpha Vantage, Quandl, .... You can even refer to a webpage (e.g. from an investor site) that contains these historical data; see for example Morningstar. Or you can create them yourself and import the quotes with a csv-file.

      Figure 6. Historical quotes.

      "},{"location":"getting-started/adding-securities/#latest-quote","title":"Latest Quote.","text":"

      The latest (most recent) quote can be retrieved from the same data source as the (older) historical prices. However, this data source may be returning only daily quotes. If you want more recent prices from another source, you can use this panel (see Figure 8).

      Figure 7. Latest Quote

      "},{"location":"getting-started/create-portfolio/","title":"Creating a portfolio","text":"

      You can quickly create a PP file using a wizard to guide you through the setup process. There are five steps but only the first two are mandatory. Start with the menu File > New > File to create a new portfolio file.

      • Step 1 First you need to select the default currency for the portfolio (see figure 1). You can always change the currency for individual securities. PP supports almost every possible currency: from AED (United Arab Emirates Dirham) to ZWL (Zimbabwean dollar).

        Figure 1. Selecting the default currency for the portfolio.

      • Step 2 Your portfolio must contain at least one security account and one associated reference (deposit) account.

        Figure 2. Adding security and reference accounts to the portfolio.

        When at least one security account with a reference account has been created the Finish button becomes available. Don't worry about the next steps if you don't understand what they are about.

        Note

        If you have an existing portfolio PP supports importing csv files to quickly add securities, buy and sell transactions, and payments. See https://forum.portfolio-performance.info/t/import-csv-file/17123 for a tutorial on importing a portfolio and dividends.

      • Step 3 Sometimes, you need more than one deposit account. You can add these extra cash accounts (e.g. in different currencies) to your portfolio.

        Figure 3. Adding additional cash accounts to the portfolio.

      • Step 4

        As part of the creation wizard, you can also add the securities that you want to track in this portfolio. These securities are retrieved from German index trackers such a DAX (Deutscher Aktienindex) , tecDax, SDAX, and MDAX. You can also add the index itself or others (e.g. NASDAQ) with Indizes. Of course, you can add securities later on. Your choice is then much larger.

        Figure 4. Adding instruments to the portfolio.

      • Step 5 Taxonomies such as Asset classes and Regions are used to classify your securities. This classification can then later on be used in performance analysis e.g. show me the performance of all securities from region xxx.

        Figure 5. Adding taxonomies to the portfolio.

      • Finish When the wizard is finished, a unnamed.xml file is created. Of course, you should save it with a different name and location.

      "},{"location":"getting-started/create-portfolio/#xml","title":"XML","text":"

      All data of your portfolio is stored in one XML-file (eXtensible Markup Language). This is a human-readable file format. For example, take the following buying transaction of 5 shares of Microsoft at a purchase price of 334.27 USD with 30 USD fees and 45 USD taxes (see figure 6.).

      Figure 6. Example of a buying transaction.

      This single buying transaction is represented with the following XML code.

      <transactions>\n<portfolio-transaction>\n<uuid>72bf2b32-60a5-4c99-ba6d-d3ab695624e5</uuid>\n<date>2023-09-10T00:00</date>\n<currencyCode>USD</currencyCode>\n<amount>174635</amount>\n<security reference=\"../../../../../../../../../securities/security\"/>\n<crossEntry class=\"buysell\" reference=\"../../../..\"/>\n<shares>500000000</shares>\n<note>First buy on advice of ...</note>\n<units>\n<unit type=\"FEE\">\n<amount currency=\"USD\" amount=\"3000\"/>\n</unit>\n<unit type=\"TAX\">\n<amount currency=\"USD\" amount=\"4500\"/>\n</unit>\n</units>\n<updatedAt>2023-09-10T18:43:28.135529700Z</updatedAt>\n<type>BUY</type>\n</portfolio-transaction>\n</transactions>\n
      "},{"location":"getting-started/installation/","title":"Installation","text":"

      PP is available for MacOS, Windows and Linux. You need to download it and do some installation steps. The easiest way to download and install the latest version of PP is by using one of the installer files at the homepage (see fig 1). A link to the release notes of this latest version is also provided.

      Figure 1. Homepage with download links for various packages (2023-09-03)

      "},{"location":"getting-started/installation/#windows","title":"Windows","text":"

      You can download the compressed Zip-file and extract it in a directory at your choice. Even a portable USB-stick (about 250 MB free space) is fine (run from stick).

      You can also download the Windows - Installer (setup.exe). On Windows 11, you get a security warning about the dangers of running an exe-file. After that, double clicking on this file, will start the installation. You can change the destination folder. By default, the c:\\user directory is taken. You need about 200 MB of free space (see figure 2).

      Figure 2. Windows Installer dialog box.

      • Windows: you can download the compressed Zip-file and extract it in a directory at your choice. Even an USB-stick (about 250 MB free space) is fine (run from stick). You can also download the installer file (setup.exe). On Windows 11, you get a security warning about the dangers to run a exe-file. Double clicking on this file, will start the installation. You need about 200 MB of free space.
      "},{"location":"getting-started/installation/#macos","title":"MacOS","text":""},{"location":"getting-started/installation/#linux","title":"Linux","text":"

      The preferred option is to install Portfolio Performance on Linux is using from Flathub.

      Alternatively, you can install PP manually:

      • Portfolio Performance currently (March 2023) requires Java 17. If not already available (example for Debian-related systems, such as Ubuntu):
        sudo apt install openjdk-17-jre\n
      • Download and unpack the GZIP archive (either for x86_64 or aarch64) to a suitable location, e.g. /opt
      "},{"location":"getting-started/installation/#github","title":"Github","text":"

      The installer files are in fact stored in the author's github repository. So, you can also download the program from this repository. If you ever should need a previous version, this is also the place to be (click on the version number at the left side).

      Figure 3. Github repository for downloading (previous) releases

      You can edit and compile the source code; see Contributing to Portfolio Performance.

      "},{"location":"getting-started/installation/#updating-the-software","title":"Updating the software","text":"

      After the first installation, the program will check on each start-up for new updates and install these automatically (see figure 1). You can change this setting with the menu Help > Settings > Updates > Check for updates on start.

      Figure 4. Automatic updating with newer version

      Also, you can update manually with the menu Help > Check for updates ....

      "},{"location":"getting-started/manage-portfolio/","title":"Manage your portfolio","text":"

      If you've been following the steps outlined in the \"Getting Started\" chapter, you'll likely have noticed that your portfolio is still devoid of any securities. As of now, you haven't made any purchases. In the chapter Concepts we have covered the fundamental transactions of Buy, Sell and receive Dividends. Now, let's explore a possible workflow for effectively managing your investment portfolio.

      There are three possible scenarios to consider, each with its own approach. The simplest one, of course, is starting from scratch.

      1. Starting from scratch. You're beginning your investment journey with an empty portfolio. Apart from elementary strategic decisions about investment goals, risk tolerance, and time horizon, you need to instruct your broker or bank to acquire some securities. Then, you can enter these transactions into PP.

      2. Reconstructing your current portfolio based on past transactions. You have already made some investments in the (far) past, and you need to reconstruct your current portfolio based on past broker or bank statements. Probably, you also need some financial data, such as historical prices or merger data. Depending on how far you would go back, this can be a very challenging task.

      3. Beginning your portfolio management today with an initial valuation. Starting your portfolio management from today involves assessing your current financial situation. Start with the list of your securities and enter for each of them a buy transaction as of today. Of course, you loose some valuable info and the performance calculations aren't reflecting the real performance of your assets.

      "},{"location":"getting-started/manage-portfolio/bonds/","title":"Managing bonds","text":"

      A bond is a financial instrument that represents a debt obligation. When an entity, such as a government or corporation, issues a bond, they are borrowing money from investors. In return, they promise to pay back the principal amount along with periodic interest payments over a specified period [1]. Bonds are not well-supported in PP but with a few simple workarounds mentioned in the German forum, you could manage them effectively.

      "},{"location":"getting-started/manage-portfolio/bonds/#adding-the-bond-as-a-security","title":"Adding the bond as a security.","text":"

      Let's assume you've purchased a Volkswagen bond. You received the following banknote as shown in Figure 1.

      Figure 1. Banknote of buying a bond.

      Before you can add the buying transaction, you must create the security in the Securities account. Searching for the ISIN in PP does not yield any results, and searching by name returns the tradable Volkswagen shares. Therefore, you'll need to create an empty instrument and manually input the information for the bond. Historical prices for bonds are not as critical, but -if necessary- they can be obtained in table format from for example the ariva.de website . Keep in mind that the historical prices for bonds are represented as percentages, ranging from 0 to 100.

      "},{"location":"getting-started/manage-portfolio/bonds/#recording-the-buy-transaction","title":"Recording the buy transaction","text":"

      Since historical prices are represented as numbers from 0 to 100, you can use this format also for the buying price. At maturity date, the bond will value 5000 EUR with a price of 100%. In terms of shares and quotes, this means 100 shares x 100 EUR. However, you buy the security at 91.76%. The Gross Value becomes 50 x 91.76 EUR = 4588 EUR. Fees and taxes can be registered as usual.

      The bond depicted in Figure 1 matures on October 1, 2027, with an annual interest rate of 2.25%, payable each year on October 1. Since you acquired the bond on October 27, there have already been 26 days of accrued interest. At a rate of 2.25%, this amounts to 5000 EUR * 2.25% * 26/365, or 8.10 EUR. You have to pay this accrued interest at the purchase date, but you will get it back on the first interest payment on October 1, 2023.

      To process the accrued interest correctly, there are a few options; (see discussion on forum for a few variants).

      1. Adapt the buying price. In case of the example in Figure 1, the buying price becomes 4588 EUR + 8.01 EUR accrued interest divided by 50 or 91.92 EUR. The disadvantage is that the price evolution and the performance calculation is not correct.

      Figure 2. Workaround with adaptation of quote price to incorporate accrued interest. 2. To maintain a precise record of the purchase price, you could record the accrued interest as an additional tax (see Figure 3). The correct amount will be withdrawn from the deposit account. The quote price is correct. The 'false' taxes could be corrected at the first interest payment with a Tax refund transaction.

      Figure 3. Workaround with adding accrued interest to taxes. 3. The buy transaction of the bond security is recorded without the accrued interest. To handle the accrued interest, you transfer the correct amount (8.01 EUR), from the deposit account associated with the security to a separate deposit account. During the first interest payment, the accrued interest amount then is transferred back to the original deposit account associated with the security.

      "},{"location":"getting-started/manage-portfolio/bonds/#recording-the-interest-payment","title":"Recording the interest payment","text":"

      You can record the interest payment with a \"Transaction > Interest\" transaction in the menu. Unfortunately, you cannot specify the security from which the interest originated; only a deposit account. It's an aggregate account for all interest payments, and there is no way to attribute that interest payment back to the performance of that specific security.

      A better, albeit somewhat unintuitive, is to record the transaction as a Transaction > Dividend. Dividends are associated with specific securities, ensuring that the performance calculation of the security remains accurate.

      What about the first interest payment? Depending on the selected option from above:

      1. The accrued interest is fully booked as a dividend (see Figure 4). The accrued interest (for the seller) on the purchase date (8.01 EUR) has already been accounted for in the recorded purchase price.

      Figure 4. Interest payment 2.25% of 5000 EUR. 2. The interest payment (112.50 EUR) is reduced by the amount that was already recorded as tax on the purchase date (8.01 EUR). With a Tansaction > Tax refund that amount is refunded. 3. The interest payment is reduced by the amount that was transferred to a separate account. The accrued interest amount then is transferred back to the original deposit account associated with the security.

      "},{"location":"getting-started/manage-portfolio/buy/","title":"Recording a Buy transaction","text":"

      When you receive a notification from your bank or broker detailing a transaction, as shown in Figure 1, you need to record this transaction in PP. If it's on paper, you must do this manually. Otherwise, you can attempt to import the transaction.

      "},{"location":"getting-started/manage-portfolio/buy/#transaction-with-one-currency","title":"Transaction with one currency","text":"

      The transaction in Figure 1 involves only one currency. Both the Security and the Deposit Account use the same currency (EUR). There is no need for currency conversion.

      Figure 1. Paper note from your bank regarding your buy transaction.

      With this note, you can enter the transaction details into PP. Figure 2 displays the input panel for entering the information. The security (Heidelberg Materials) is quoted in EUR and the transaction is handled with the broker-1 security account and the broker-1 (EUR) deposit account. The example of the sell transaction involves a more complex setup with a security quoted in USD, but the transaction handled through a deposit account in EUR.

      Figure 2. Buying a security (EUR) through a deposit account (EUR).

      • Security : You can select the security from a drop-down. If a particular security was already chosen before initiating the transaction, this info will be pre-filled. Please note that the currency is automatically filled in because each security has a reference currency, which is set during creating the security. The list of all available securities can be found in the sidebar under Securities > All Securities
      • Securities Account : choose from the drop-down menu or leave it pre-filled if you started from a securities account.
      • Deposit Account: Select from the drop-down menu or leave it pre-filled with the account related to the security. If the currency of the chosen deposit account differs from the security currency, you'll need to convert the Gross Amount and Fees and Taxes, requiring an Exchange Rate. See the example with the sell transaction.
      • Date of transaction: You can pick this date from a calendar or enter it manually (format = YYYY-MM-DD). On the right (00:00), you can input the transaction time. The choice between a 12-hour or 24-hour clock is determined by the menu setting Help > Preferences > Language > Country. For instance, the UK uses a 12-hour clock (with AM and PM), while Belgium uses a 24-hour clock.
      • Shares: the number of securities that you buy or sell. This can be a decimal number.
      • Quote : This is the price you paid for one share. If the security includes historical prices (see adding securities), the correct price for the given date will already be filled in. However, this historical price may not match what your bank provides, as it is based on end-of-day prices, whereas the bank uses real-time information.

      The above six fields are mandatory for completing the transaction. Most of these fields are pre-filled based on the selected security. The following fields are either calculated or optional.

      • Gross Value : This is the result of multiplying Shares by Quote. If you later change the Gross Value, the Quote Price will be adjusted accordingly to maintain the equation Shares * Quote.

      • Fees and Taxes : A purchase transaction typically incurs fees and taxes. These may be in the currency of the security and/or deposit account (see selling for an example).

      • Debit Note : This is the amount you need to pay as a result of this buying transaction. It is calculated as Shares * Quote + Fees + Taxes. Other terms for this are Value or Net Value.

      • Note : You can add a textual note to each transaction.

      The typical flow for entering this information is likely to be Shares * Quote (price) >> Gross Value + Fees + Taxes >> Debit Note. There are a few nuances if you make changes afterward (see Figure 3).

      Figure 3. Calculation flow between Shares and Debit Note.

      • Changing the Debit note (afterward) will modify the Gross Value, and consequently, the Quote Price will be adjusted. The number of shares remains unchanged.
      • Changing the Gross Value afterward will alter the Debit Note and the Quote Price. Fees, taxes, and the number of shares are unaffected.
      "},{"location":"getting-started/manage-portfolio/buy/#transaction-with-two-currencies","title":"Transaction with two currencies","text":"

      If you want to purchase shares in a foreign currency, there are two options. Either you have the required amount in the foreign currency in a deposit account. Or, you'll need to make a deposit or convert another currency into the foreign currency first.

      Figure 4 displays the bank's paper note regarding the purchase of USD shares. Since taxes and fees need to be settled in EUR (due to it being a European bank), and the portfolio's base currency for reporting is also EUR, the total amount in USD is also converted to EUR.

      Figure 4. Paper note of a Buy transaction of a share in a foreign currency.

      From the note, it isn't quite clear which deposit account (EUR or USD) is used. Recording this transaction in PP however is quite straightforward. Figure 5 shows the transaction done with a USD deposit account. Figure 6 is a little more complex because a EUR deposit account is used; so a conversion should be made (EUR --> USD).

      Figure 5. Buy transaction of a USD security with a USD deposit account.

      Figure 6. Buy transaction of a USD security with a EUR deposit account.

      The quote price and the USD/EUR exchange rate are automatically filled in based on the entered date. However, please note that real-time prices are not available. The entry form in PP also provides the additional option to record fees and taxes in the foreign currency.

      Remember: good practice requires making a deposit beforehand, either in USD (for the transaction in Figure 5) or in EUR (Figure 6). Failing to do so will result in a negative balance.

      "},{"location":"getting-started/manage-portfolio/delivery/","title":"Recording a Delivery","text":"

      A Delivery (Inbound) transaction is akin to a Buy transaction, but it does not involve a decrease from a deposit account. It is as if the securities are acquired by magic, without any prior cash transaction. This could be the case for example when inheriting some securities. You also need a Delivery (Inbound) transaction when setting up your portfolio at a later date than the original purchases, without willing or being able to register all past transactions (see third option in Manage your portfolio). Figure 1 compares a Buy and Delivery transaction for the same acquisition.

      Figure 1. Delivery (Inbound) versus Buy transaction.

      You can record a transaction in a foreign currency by selecting the relevant currency from the drop-down menu. Additionally, it's feasible to record a transaction in a currency different from the security's default currency. An exchange rate will be suggested.

      A Delivery (Outbound) transaction is similar to a Sell transaction, but -again- it does not affect a deposit account. The cash that would typically come back from the Outbound Delivery appears to vanish and isn't accounted for in any deposit account. Figure 2 illustrates a Delivery (Outbound) transaction involving Adobe stock (USD) but recorded in EUR.

      Figure 2. Delivery (Outbound) of a USD security in EUR currency.

      Although the Value of Outbound Delivery, fees, and taxes are not recorded in a deposit account, they can still impact the performance calculation.

      "},{"location":"getting-started/manage-portfolio/deposit/","title":"Making a Deposit","text":"

      To initiate a deposit in a specific currency, navigate to the Transaction > Deposit menu. Ensure that the chosen account shares the same currency as the deposit. For transferring funds between accounts, whether in the same currency or different currencies (utilizing exchange rates provided by the ECB), employ the Transaction > Transfer between Accounts command.

      "},{"location":"getting-started/manage-portfolio/deposit/#making-a-deposit","title":"Making a Deposit","text":"

      Recording a deposit is a straightforward process (see Figure 1). Input the deposit account, transaction date, amount, and optionally, an accompanying note.

      Figure 1. Making a provision for the Heidelberg buy transaction.

      Please be aware that a deposit contributes to certain performance metrics. Additionally, note that each security purchase corresponds to a reduction in a deposit account. If the account balance is insufficient, the deposit account's balance may become negative.

      "},{"location":"getting-started/manage-portfolio/deposit/#transfer-between-two-currencies","title":"Transfer between two currencies","text":"

      You can transfer funds between two accounts, whether they share the same currency or not. In cases where the accounts have different currencies (see Figure 2), PP will automatically suggest an exchange rate based on the ECB website.

      Figure 2. Converting from EUR to USD.

      "},{"location":"getting-started/manage-portfolio/dividend/","title":"Dividend","text":""},{"location":"getting-started/manage-portfolio/dividend/#dividend-transaction","title":"Dividend transaction","text":"

      Recording a dividend is similar to recording a buy or sale transaction, except that Quote price is replaced with Dividend payment per shares (see Figure 1). The number of shares is automatically determined based on the entered date.

      Figure 1. Recording a dividend (same currency).

      There isn't a dedicated function for recording a \"Dividend Investment Plan\" (DRIP). One workaround is to record all dividends in full and then proceed with a purchase of the agreed-upon number of shares.More information at Reinvesting dividends.

      "},{"location":"getting-started/manage-portfolio/sell/","title":"Selling Securities","text":"

      The selling transaction is very similar to the buying transaction. Here as well, you can record the transaction's outcomes in an account with the same currency or a different currency. In the latter scenario (see Figure 1), upon selecting the foreign account (e.g. USD), three new fields become available: exchange rate (XR), USD fees, and USD taxes.

      "},{"location":"getting-started/manage-portfolio/sell/#selling-a-single-buy-security","title":"Selling a single buy security","text":"

      In the demo portfolio, we've purchased the Adobe stock only once (10 shares). All those shares have of course the same price, so it doesn't matter which specific ones are sold in the case of a partial sale.

      Figure 1. Selling a USD security through an EUR deposit account.

      In Figure 1, the share is quoted in USD, and consequently, the Gross Value is also calculated in USD. However, since you intend to record this transaction in a EUR account, this USD value needs to be converted. As soon as you choose a deposit account with a different currency, the exchange rate field (e.g., 0.9491) is automatically filled with the correct exchange rate for that specific date and currency. This information is obtained from the European Central Bank (ECB) website. You can also consult it through the menu View > Currencies > Currency Converter.

      Changing the date afterward will adjust the exchange rate (XR) appropriately, even if you've manually entered an XR. Therefore, it's considered good practice to set the transaction date first.

      You have the flexibility to input fees and taxes in both currencies. The foreign fees and taxes are automatically converted using the same exchange rate as above. There isn't a subtotal in the local currency, so the Credit Note amount isn't a simple sum of the numbers above.

      The calculation flow remains consistent with Figure 3 in the buying page. For instance, modifying the Credit Note will subsequently adjust the Gross Value in EUR, which, in turn, impacts the Gross Value in USD (XR remains unchanged), and finally, the Quote price.

      "},{"location":"getting-started/manage-portfolio/sell/#selling-a-multiple-buy-security","title":"Selling a multiple buy security","text":"

      In your portfolio, some effects may have been purchased multiple times at different prices (see Figure 2 for an example). What happens when you partially sell that share?

      Figure 2. Multiple transaction on the same security.

      Do those shares come from the first or second series that you purchased, or from a combination of both? For the actual sale, it doesn't matter. In the example from Figure 2, 40 shares were sold at a price of 72.48 EUR. But how are the remaining shares valued? PP follows the FIFO principle (First In, First Out). So, the 40 shares that are sold come entirely from the first purchase. What remains are 10 shares from the first batch and 30 shares from the second batch. Another possibility would be LIFO (Last In, First Out). In that case, 10 shares from the first batch would remain, and none from the second batch. Does this make a difference? In this particular case, the stock is valued lower in the FIFO approach.

      FIFO: average price of the remaining 40 shares = ((10 * 58.82) + (30 * 39.60)) / 40 = 44.05 EUR

      LIFO: average price of the remaining 40 shares = ((40 * 58.82) + (00 * 39.60)) / 40 = 58.82 EUR

      "},{"location":"getting-started/reports/performance/","title":"Performance Dashboard","text":"

      Naturally, your portfolio's performance is a top priority for you and PP, which is why the software is named as such. Key performance indicators are summarized in a dashboard, that can be accessed through the menu View > Reports > Performance or with the sidebar (see figure 1).

      How is your demo portfolio doing? Set the Reporting period to a 3 year period; e.g. from June 12, 2020 until 2023.

      Figure 1. Dashboard with key performance indicators.

      Note

      The key and risk indicators consider the whole portfolio by default. However, you can narrow down the calculation to specific accounts or securities by right-clicking the indicator label and choosing a different data series.

      Let's skip the first two key indicators and focus on the simpler ones first. The Absolute Change is 426.82 EUR. Take a look at the Calculation panel on the right side. The initial value of your portfolio as of June 12, 2020 was zero EURO and the final value is 426.82 EUR, which, of course, equals the absolute change. You can check the final value with sidebar > Reports > Performance > Calculation. Click at the Assets at End heading tab. As you can see, there is 125 EUR in the deposit account from the dividend and sell transactions. share-1 is valuated at 190.06 EUR (10 shares remaining x 19.06) and share-2 at 111.76 (8 shares x 13.97). Taken together, this sums to 426.62 EUR, which represents the market value of your portfolio on June 12, 2023.

      The Delta (for reporting period) is 120.82 EUR. This value represents the actual return of share-1 and share-2. The final portfolio value of 426.82 EUR is partly caused by external cash inflows of 155 EUR and 84 EUR to buy share-1 and 67 EUR to buy share-2. This money comes from an external source and should be subtracted from the Absolute change. They are summarized as Performance neutral Transfers in the calculation panel.

      The Absolute change of the Last Day is negative (red). It remains the same for each reporting period. Hovering over the label gives some info. This value is the absolute change for a Reporting period of 1 trading day. Unfortunately, it's not the last day of the chosen reporting period; e.g. 11-12 Jun 2023, but the last trading day before 'today'.

      What about the True Time-Weighted Rate of Return (TTWOR) and the Internal Rate of Return (IRR) indices? The IRR is a percentage that shows how well your portfolio performs, considering when and how much money you have put in or take out. TTWOR measure the growth of your investments without being influenced by the timing and size of your contributions or withdrawals. An in-depth explanation of both measurements is given at Concepts > Performance

      How should you interpret the difference between the two measures? If you look at the chart of historical prices of share-1 and share-2, it is immediately evident that the timing of purchase and sale was rather optimal.

      ???? When the Time-Weighted Rate of Return (TWR) is larger than the Internal Rate of Return (IRR), it typically means that you have successfully timed your buys and sells to take advantage of favorable market conditions. In this scenario, your investments have experienced significant growth due to buying low and selling high, which boosts the TWR. The TWR measures the performance of your investments over different time periods, and it doesn't consider the size and timing of your contributions or withdrawals. If these investments were made at opportune moments, it could lead to a TWR that appears more favorable compared to the IRR, which accounts for cash flows and their timing. This demonstrates your skill in making well-timed investment decisions, which can result in a higher TWR. The calculation is

      • Suppose you invest $100 in a portfolio that grows by 10% in the first year and 20% in the second year. Your TWR for the two-year period is (1.1 x 1.2) - 1 = 32%.
      • However, if you withdraw $50 at the end of the first year and reinvest it at the beginning of the second year, your IRR for the two-year period is only 15%. This is because your IRR reflects the timing and size of your cash flows, while your TWR does not. To calculate the IRR, you need to find the discount rate that makes the net present value of your cash flows equal to zero. In this case, the equation is: -100 + 50 / (1 + IRR) + 120 / (1 + IRR)^2 = 0. Solving for IRR, you get 0.15 or 15%.

      You can see that the IRR is much lower than the TWR because you withdrew money when the portfolio was doing well and reinvested it when the portfolio was doing even better. This means you missed out on some of the portfolio\u2019s growth potential.

      By default, this dashboard contains three widgets (panels): Key Indicators, Risk Indicators, and Calculation. Right mouse click on an empty space of the canvas lets you add more widgets (see later).

      "},{"location":"getting-started/reports/performance/#key-indicators","title":"Key Indicators","text":""},{"location":"getting-started/reports/performance/#true-time-weighted-rate-of-return-cumulative","title":"True Time-Weighted Rate of Return (cumulative)","text":"

      The True Time-Weighted Rate of Return (TTWROR) is a financial metric used to evaluate the performance of your portfolio over time, eliminating the effects of cash flowing in or out of the portfolio.

      "},{"location":"getting-started/reports/performance/#internal-rate-of-return-irr","title":"Internal Rate of Return (IRR)","text":"

      The Internal Rate of Return (IRR) is a financial metric used to evaluate the potential profitability of an investment or project.

      "},{"location":"getting-started/reports/performance/#absolute-change","title":"Absolute Change","text":"

      The difference between the initial investment and the current value of the investment.

      "},{"location":"getting-started/reports/performance/#delta-for-period","title":"Delta (for period)","text":"

      The difference between the value of the portfolio at the beginning of the period versus the end of the period.

      "},{"location":"getting-started/reports/performance/#risk-indicators","title":"Risk indicators","text":""},{"location":"getting-started/reports/performance/#maximum-drawdown","title":"Maximum Drawdown","text":""},{"location":"getting-started/reports/performance/#maximum-drawdown-duration","title":"Maximum Drawdown Duration","text":""},{"location":"getting-started/reports/performance/#volatility","title":"Volatility","text":""},{"location":"getting-started/reports/performance/#semivariance","title":"Semivariance","text":""},{"location":"getting-started/reports/performance/#last-day","title":"Last day","text":""},{"location":"getting-started/reports/performance/#true-time-weighted-rate-of-return-cumulative_1","title":"True Time-Weighted Rate of Return (cumulative)","text":""},{"location":"getting-started/reports/performance/#absolute-change-absolute-verandering","title":"Absolute Change (Absolute verandering)","text":""},{"location":"getting-started/reports/performance/#calculation","title":"Calculation","text":"

      With the icons (top right), you can - Duplicate, Rename or Delete a Dashboard view - Create a New Dashboard view - Set the period (1 year, 2 years, ...) - Create a New Column (gear icon)

      "},{"location":"getting-started/reports/statement/","title":"Statement of Assets","text":"

      The Statement of Assets report provides a snapshot of your portfolio's assets (securities, accounts) at a specific point in time. The default date is the current day. You can choose a different date with the \"Time machine\"; the calendar icon at the top right. Figure 1 lists all transactions of the demo-portfolio up to October 5, 2023. Figure 2 displays the Statement of Assets report as of this date.

      Figure 1. List of All transactions of demo portfolio (2023-10-05)

      In addition to the purchase of share-1, share-2, and bond-1, there is also a sale of a portion of share-1. In this latter transaction, no deposit is made, and the proceeds from the sale remain in the deposit account.

      Figure 2. Statement of Assets report of demo portfolio (2023-10-05)

      The report in Figure 2 displays all the available assets on October 5, 2023, including the deposit account with the result of the sale of share-1. The securities are valued at their market prices based on the closing quotes from the previous day, which is -in this case- October 4, 2023. Share-2 is handled in USD. The conversion to EUR is based on the exchange rate provided by the ECB on October 4, 2023 (closing previous day).

      The report displays a total line above and below the assets. With the Presentation option (see Figure 3 bottom), you could add or remove the Total lines. The default setting is above and below. Since no taxonomy has been added to the demo portfolio, all assets are listed as Without classification.

      "},{"location":"getting-started/reports/statement/#available-columns","title":"Available columns","text":"

      Figure 3. Available columns. The default columns that are displayed are Shares, Name, Symbol, Quote, Market Value, Share in %, and Note. Many more columns/fields are available (see Figure 3). While the column headings are mostly self-explanatory, a few of them may require further clarification. You can customize the default columns using the gear icon located in the top-right corner (see Figure 2).

      The abbreviation \"MA\" that follows Purchase Price/Value stands for \"Moving Average\" but in fact it should be better called WA or \"Weighted Average\". As mentioned in the discussion about Purchase Value, PP uses the FIFO (First-in, First-out) method to calculate prices and values. \"Moving/weighted average\", however, is another commonly used method.

      The Purchase Price and the Purchase Price (MA) of share-1 are respectively 44.41 EUR and 51.61 EUR; a rather big difference. Why? From Figure 2:

      • Purchase of 50 shares at 58.82 EUR on December 14, 2020.
      • Purchase of 30 shares at 39.60 EUR on September 29, 2022.
      • Sale of 40 shares at 72.48 EUR on September 28, 2023.

      What is the Purchase Price of the remaining 40 shares in the portfolio?

      • The moving/weighted average method states that the average price of the original 80 shares was ((50 x 58.82) + (30 x 39.60))/80 = 51.6125 EUR. The remaining 40 shares are valuated at this price.
      • The FIFO method asserts that the remaining 40 shares are composed of 10 shares of the first purchase and 30 shares of the second purchase. The average price is thus ((10 x 58.82) + (30 x 39.60))/40 = 44.405 EUR.

      The available fields under Performance and Dividends are discussed in a separate chapter.

      With the Attributes option, you can add custom fields to the table. These fields are defined in left sidebar > settings > Attributes: Securities and following panels. You can enter a specific attribute value for a security in the Additional attributes panel of the security (see for example, Figure 3 in Getting started > Adding securities)

      The Forex (Foreign Exchange) option allows you to view the currency of the quote for each asset and its exchange rate relative to the base currency of the portfolio. The fields labeled as Market value**, Purchase Price**, and Profit/Loss** retain the same meaning as their counterparts in the base currency, but they are presented in the foreign currency.

      For instance, let's consider share-2, which is traded in USD. In the default view, the Market Value is expressed in EUR. If you wish to view that value in USD instead, you can achieve this by adding the Market Value** field.

      The Distance to SMA is a metric that measures the difference between the current price of a share and the average price of that share over a specified number of past days. The acronym \"SMA\" presumably represents \"Simple Moving Average.\"

      When you choose to include this column, you'll also need to specify a period, such as 5 days, 20 days, 50 days, or 200 days. Suppose that you want to know the \u0394 to SMA5 (Distance to SMA for a 5 days period) of share-1. The last 5 available prices are: 71.96, 72.00, 72.42, 73.52, and 74.50 EUR; including the latest available on October, 5 (= 71.96 EUR). The calculation is carried out as follows:

      1. Calculate the average price of the last 5 days, including today = (71.96 + ... + 74.50)/5 = 72.88 EUR.
      2. Calculate the difference of today's price with the average price = 71.96 - 72.88 = -0.92 EUR.
      3. Divide this difference by the average price and convert to a percentage = -0.92/72.88 = -1.26%. The current price (October 5) is 1.26% lower than the average price of the last 5 days.

      Distance to ATH (All Time High) is a likewise metric that shows how far the current price is from the highest price in the specified period. For example, the highest price of share-1 in the last year was 77.4 EUR. The current price is 71.96 EUR. So the \u0394 ATH 1 year (Distance to ATH for a 1 year period) is equal to (71.96 - 77.4)/77.4 or -7.03%.

      # Available views

      Using the Reset Columns option in Figure 3, you can revert to the default arrangement of columns. It's advisable to keep this layout as the Standard view, which is represented by the first button at the top (see Figure 1). By clicking the triangle icon next to the button, you can access options to rename, duplicate, or delete the current view.

      If you find yourself needing a custom layout regularly, you can duplicate the standard view, give it a new name, and customize it to your preferences. Additionally, there is a New View button available to create a new view based on the default setup.

      To the right of the New button, there is a currency selection button. It should be labeled with the base currency of the portfolio, but you have the option to choose other currencies. All calculated fields such as Market Value are then converted to the selected currency.

      The Filter icon located in the top right corner allows you to filter the assets that will be used in the calculations. You have several options:

      1. You can select the entire portfolio.
      2. You can choose only one security account.
      3. You can select the security account along with the associated deposit account.

      Additionally, you have the option to create a custom filter. To do this, you will need to make a selection from all the available assets within the portfolio.

      "},{"location":"getting-started/reports/statement/chart/","title":"Statement of Assets - History","text":"

      Using the menu View > Reports > Statement of Assets > Chart or the sidebar, you can generate a graphical representation of your assets performance over time. The y-axis displays the total value of your assets, denominated in the portfolio's default currency (1k = 1000 units of the portfolio currency). You can change the scale of this axis by scrolling with the middle mouse button. Hold the mouse position at the value (e.g. 4k) where you want to increase or decrease the scale around. The x-axis represents time, and you can select the desired time period using the dropdown menu in the top-right corner. By default, the periods of 1 year, 2 years, 3 years, 4 years, 6 years, and the previous day are available. Additionally, you have the option to create a custom time period using the 'New' feature; see Reporting Period for a description.

      Figure 1. Chart of the Total value of the demo portfolio.

      By default, two data series are displayed: 'Transferals' (primarily deposits) and 'Total' (which includes transferals). When you left-click the canvas and hold the mouse down on a specific day, for example, March 28, 2022, a dialog box will appear, displaying detailed values for all data series on that day. Right-clicking on the chart canvas provides additional options (see Figure 1).

      • Crosshair: A large crosshair appears above the chart when you left-click the canvas. The origin is at the mouse position of the click. The exact value of a certain point of the data series is then easier to read.
      • Measure distance: Select this option if you want to determine the exact number of days between two points on the chart. It also displays the difference in value and the corresponding percentage between the two points.
      • Adjust range: 0.
      • Various navigation options with their respective shortcut keys, such as Zoom In (Ctrl+Arrow Up), Scroll Up (Arrow Up), and more.
      • Save diagram: This feature allows you to save the visible chart as a PNG or JPG image on your computer.

      Right-clicking on the legend icons (for example, the blue and red squares from Figure 1) will give you access to additional formatting options. For all types of data series and their legend entries, you can modify the Color, Position (Send backwards, Send to back or Bring forward, and Bring to Front)), and Sort (A-Z or Z-A). The latter two options will reorganize the legend entries accordingly. In the case of a line-type data series like the Total value, you can also adjust the Line Style (solid, dash, dot, ...), and the Show Area option (which fills the area below the data series). Additionally, you have the choice to either hide (the legend entry is visible but the data series is not displayed in the chart) or remove the series (both the legend and data series are removed from the chart).

      Figure 2. Dataseries for chart.

      With the gear icon (top right) you can display additional data series to the chart. Remember that in the demo-portfolio, we have two brokers; where broker-1 has two deposit accounts (EUR and USD). Broker-2 has only one EUR-deposit account.

      With the Accounts and Portfolios option, you can choose to display specific combinations of accounts, such as broker-1 along with its USD deposit account. Select the appropriate option and hold Ctrl to add more selections. Once you've added a data series, it will no longer appear in the list of available data series in Figure 2, but you'll find it checked in the gear menu. You can remove a data series from the chart by unchecking it in the gear menu or by deleting it from the legend (as explained above). If you remove all data series, the chart will revert to its default view with Total and Transferals as the data series.

      The Common option in Figure 2 will display some additional info.

      • Delta (for reporting period or since first transaction): represents how much the portfolio's value has increased or decreased for the reporting period or since first transaction until today. This Delta will fluctuate around zero, for example for the first transaction day the delta will be zero. The chapter on Reporting Period explains that the valuation of a portfolio can differ according to the selected Reporting Period.
      • Dividends, Fees, Interest, Interest Charge, and Taxes are available with an accumulated and 'instance' version. These fields are described in Transactions and are recorded as part of each transaction.
      • Earnings: the sum of dividends and interests.
      • Invested Capital (for reporting period or since first transaction): the term \"invested capital\" refers to the total amount of money that an investor has used to purchase various securities, such as stocks, bonds, or other financial instruments. It includes the initial purchase price of the securities, additional investments made over time, and other factors such as fees, taxes, ...
      • Total: the total value of the portfolio valuated over time.
      • Transferals: each Deposit or Removal is represented by a very small spike (positive or negative) on the day that the transferal was made.

      With securities, you can make a graph of each separate or combination of securities in your portfolio, for example share-1 or share-1 + bond-1.

      In the default configuration, the Standard view only includes two data series: Total and Transferals. However, you have extensive customization options, as mentioned earlier. Using the dropdown menu, you can Duplicate, Rename, or Delete this view. You can also create a new view by clicking on the New icon, located in the top right corner between the Standard and Period options. Similar to the existing one, you can duplicate, rename, or delete your newly created view. If you wish to have this view as the leftmost view, select the Bring to front option from the dropdown menu.

      "},{"location":"getting-started/reports/statement/holdings/","title":"Holdings","text":"

      A visual representation of the total value of the portfolio divided into categories such as different accounts is given by the Holdings chart (menu View > Statement of Assets > Holdings or with the sidebar). A doughnut chart displays the proportion of different accounts within the total, with the entire doughnut representing 100%.

      Figure 1. Doughnut chart of the total value of portfolio.

      Hovering the mouse pointer over a segment of the doughnut chart reveals the following account details: name, percentage, number of shares, current share price, total value in the portfolio currency. In the case of a deposit account, the number of shares is fixed at one (see Figure 1).

      Positions with negative values, such as a deposit account with a negative balance, are not displayed. By not displaying positions with negative values, the chart's percentages may be inaccurate. An error message alerts users to this situation.

      With the filter icon (top right), you can show the entire portfolio or only a few combinations of accounts; for example broker-1 with or without its associated deposit account broker-1 (EUR). You can create a new filter, rename or remove existing ones.

      For a portfolio with a large number of securities, the chart can become unreadable, and it's advisable to implement a filter.

      "},{"location":"how-to/","title":"How-to","text":"

      This chapter outlines various standard procedures and workflows such as importing data. However, there are situations where you might come across more complex tasks or when the program functions in its own unique way. Therefore, we've added some tips and tricks, with many of them initially discussed on the PP forum. It's worth noting that a significant portion of the information on the forum is in German, but you can utilize your browser's Translate function to comprehend it in your preferred language.

      • Importing CSV Files: At times, you may receive a CSV file from your broker containing all the transactions from the previous month. How do you go about importing this data into PP?

      • Reinvesting Dividends: Reinvesting dividends involves using the profits from an investment to acquire more shares of the same asset, instead of opting for cash payouts. What considerations should you take into account when faced with this choice?

      • Importing Fund Data from Morningstar: Downloading historical prices from the Morningstar website is a straightforward process, but understanding the steps is crucial.

      • Directly Edit the XML File to Add the Quote Feed: Learn how to use a text editor to seamlessly incorporate the Quote Feed.

      "},{"location":"how-to/importing/","title":"Importing a CSV-file","text":"

      In PP you can enter your transactions (buy, sell, dividends, \u2026 ) manually but you can also import those transactions from a CSV file (comma-separated values) or from a PDF document. Not all brokers, however, provide the format that PP needs. So, how should this CSV-file look? Suppose, you want to import the following transaction.

      Figure 1. Buying transaction example for import

      As you can see in figure 1, the following PP fields are used: Security Name (share-2), the implied currency (USD), Securities Account (Broker-A), Deposit Account (Broker-A (EUR), Date & time, number of Shares (10), buying quote (5 USD), Gross Amount in USD (50), Exchange Rate (1.0785 EUR/USD), Gross Amount in EUR(46.36), Fees USD and EUR), Taxes (USD and EUR), Value or Debit Note (55.21), and a note (My Note). You don't have to provide all fields in the CSV-file; some of them aren't even possible e.g. implied currency and fees/taxes in the foreign currency.

      With the menu File > Import > CSV files (comma-separated values) you can import all kind of transactions. A CSV file is simply a text file. The first line contains the names of the fields (columns); separated by commas. The second and following lines contain the data, also separated by commas. For example, the following print-out of a CSV-file contains three fields or columns and two lines of data.

      Name,Type,Date,Value\nShare-1,dividend,2023-05-21,1500\nShare-2,buy,2023-06-01, 20\n

      PP distinguishes between 5 types of import: Account Transactions, Portfolio Transactions, Securities, Historical Quotes, and Securities Account (see figure 2). To correctly use a type and import the data into PP, the CSV file must contain specific fields. Depending on the type of account, there are other required and optional fields.

      Figure 2. Import dialog window with the 5 types

      The difference between each type is rather nebulous and not very good documented. The following definitions are tentative.

      • Account Transactions: will be used to register transactions within one account; for example the payment of a dividend (?)

      • Portfolio Transactions: for transactions between accounts. For example, the buying of a share involves adding shares to the Securities account and reducing the associated deposit account with money.

      • Securities: you can use this type to create securities in the All Securities account without also adding a transaction.

      • Historical Quotes: to create a table of historical quotes for a security.

      • Securities Account: with this type, you can create new securities within the All Securities account and at the same time a buy transaction in the All Transactions account.

      Each type has required and optional fields. For example, the Historical Quotes type only needs the Date and the Quote. Instead of repeating the name of the share again and again for each date, you can select the security in the next pop-up window. The Account Transactions type has two required Fields: Value and Date. The Portfolio Transactions has three required fields: Value, Date, and Shares (see figure 3).

      Figure 3. Required and optional fields for the 5 types of import

      "},{"location":"how-to/importing/#importing-buysell-transactions","title":"Importing buy/sell transactions","text":"

      An easy way to discover which fields you need, is to export a demo transaction first. After selecting the transaction in All Transactions, click the Export button at the top-right of the window (up-pointing arrow). Choose \u201cSelected transactions (CSV)\u201d. If you should open this CSV-file with a text editor, it will look something like this:

      Date,Type,Security,Shares,Quote,Amount,Fees,Taxes,Net Transaction Value,Cash Account,Offset Account,Note,Source\n2023-05-25 00:00:00,Buy,share-2,10,5.50,55.00,4.10,6.20,65.30,Broker-A,Broker-A (EUR),My Note,\n
      The first line contains the field names, separated by a comma. The second line contains the value of those fields. Notice that there is no value for the field Source. Unfortunately, the field names do not match with the required field names for the import nor with the labels used in the dialog box (e.g. Name vs Security Name, Net Transaction Value vs Value). Also, a new field is added (Type) but worse, a necessary field (Exchange Rate) is missing. Also, USD and EUR fees and taxes are added into a total amount in EUR.

      Importing this transaction again (after deleting the original one) will fail.

      In order to recreate the transaction of figure 1, you need at least the following fields. Restoring the split between USD and EUR fees and taxes seems to be impossible. You have to use the Portfolio Transactions type.

      Date,Type,Security Name,Shares,Fees,Taxes,Value,Exchange Rate\n2023-05-25 0:00,Buy,share-2,10,4.1,6.2,65.30,0.9091\n
      "},{"location":"how-to/importing/#importing-dividends","title":"Importing dividends","text":"

      Figure 4. Dividend transaction example for import

      Suppose that your broker can deliver a CSV-file with all the dividend payments from a past period. Of course, you would like to import this file in stead of entering manually all these dividend payments. The file content looks something like this (see figure 1 below).

      Figure 5. CSV table for importing two dividends

      Unfortunately, this is not enough information to use the Import CSV-function. From the three available columns of the CSV-file, two of them are recognized by PP: ISIN and Date (see figure 6). For the column Payment, you have to map this field to one of the PP fields. Because, it is a dividend you need to use the import type Account transactions. A dividend payment is a simple deposit transaction, which has no implications on the securities account.

      According to the pop-up message of figure 6, there are two required fields: Date and Value, of which the last one is unmapped. This is because the name that your broker uses (Payment) is different from the required name (Value). You can however, double click on the Payment column to choose the correct field name.

      Figure 6. Dialog box for importing dividends

      But how is PP able to recreate a dividend payment with only these two fields (date, value). It can't! You can only use this import to create a deposit in a Security and Cash account. If you want to create a dividend, you should also specify a type: Dividend. Specifying a number of shares or fees/taxes will also do the job.

      Of course, PP does also need the name of the Cash and Securities account. You can enter this in the next step of the wizard or you can specify it in the CSV-file.

      Let's take a simplified example (EUR-dividend in a EUR-cash account; see figure 7). The minimal info to register this dividend is:

      type, Date, ISIN, Value\ndividend, 2022-01-01, BE0974258874, 40\n
      + This will result in the following \"dividend\" transaction.\n

      Figure 7. Simplified buying transaction example for import

      Adding Fees and Taxes will calculate the Gross Amount. You cannot specify the Gross Amount in itself. Adding the number of Shares will calculate the dividend payment/share. It is also not possible to specify this in itself. So, a typical CSV-file for a dividend payment in the currency of the Cash account will look like:

      Type, Date, ISIN, Value, fees, taxes, shares\ndividend, 2022-01-01, BE0974258874, 200, 3, 2, 25\n
      "},{"location":"how-to/morningstar/","title":"Import fund data from Morningstar","text":"

      Info

      Best answer in forum from SimonFitz!

      The website of Morningstar is quite famous for its extensive list of funds. With some magic, you can download historical data for specific funds from this website.

      First go to the Chart page for the fund (or trust or EFT) on the Morningstar website; e.g. https://www.morningstar.co.uk/uk/. I will use the Baillie Gifford Positive Change Fund B Accumulation fund (ISIN GB00BYVGKV59) as an example.

      Remove any other benchmarks etc. the are charted (this is not necessary, but makes things easier). Open your browser's \"developer tools\" which is F12 in Firefox & Edge and probably other browsers as well. Go to the \"Network\" tab and press the clear button which looks like a bin; again, not necessary but makes things easier. Now press the \"chart settings\" button just above the chart, click \"display options\", and then click the \"percentage\" button - this switches the chart to show the actual fund price, rather than a percentage change, and handily for our purposes causes the Morningstar website to request a link that we can use in Portfolio Performance with a bit of modification. That link should display in the \"network\" screen of the browser's developer tools, so now right-click on the entry that comes from the \"tools.morningstar.co.uk 44\" domain and is of type \"json\" and select the Copy->Copy URL option. The link should be

      https://tools.morningstar.co.uk/api/rest.svc/timeseries_price/\nt92wz0sj7c?currencyId=GBP&idtype=Morningstar&frequency=daily&\nstartDate=2011-02-01&priceType=&outputType=COMPACTJSON&\nid=F00000ZB0M]2]0]FOGBR$$ALL&applyTrackRecordExtension=true\n
      You now need to change some options in the link and slightly simplify it as well so it becomes:
      https://tools.morningstar.co.uk/api/rest.svc/timeseries_price/\nt92wz0sj7c?currencyId=GBP&idtype=Morningstar&frequency=daily&\noutputType=JSON&startDate=2020-12-31&id=F00000ZB0M]2]0]\nFOGBR$$ALL\n

      You can go to this link in your browser if you want to see the data. There are 4 options worth highlighting: frequency which will give you daily prices, outputType gives you a style of JSON that Portfolio Performance can parse, startDate lets you choose how far back to go, and id is the Morningstar reference for the security - so change that value for any other ones you want to use. The order of the options doesn't matter, but I find it easier to put the id at the end for when I'm setting up multiple securities.

      Now in Portfolio Performance select JSON as the provider in the \"Historical Quotes\" tab of the security, and use the following values (see also figure 1):

      Feed URL = the link just created\nPath to Date = $.TimeSeries.Security[*].HistoryDetail[*].EndDate\nPath to Close = $.TimeSeries.Security[*].HistoryDetail[*].Value\n

      Figure 1. Example of JSON provider for historical quotes

      Always worth double-checking the displayed values against the Morningstar chart.

      "},{"location":"how-to/quote-feed/","title":"Hack data file to add default Quote Feed","text":"

      Adding securities through the GUI adds a Quote Feed but this is not supported by csv imports. You can hack the XML file directly with a text editor using a replace to add the Quote Feed.

      Warning

      This is totally not supported and can break your data file so backup your data file and test the changes.

      When the data file is updated it will look similar to the following with a YAHOO feed:

      <client>\n<version>51</version>\n<baseCurrency>AUD</baseCurrency>\n<securities>\n<security>\n<uuid>831d8a3e-7025-4b0f-b6ca-3ef5bf727eb4</uuid>\n<name>REA Group Ltd</name>\n<currencyCode>AUD</currencyCode>\n<tickerSymbol>REA.AX</tickerSymbol>\n<feed>YAHOO</feed>\n<prices>\n

      Use the text editor to search and replace:

      </tickerSymbol> \n<prices>\n

      with

      </tickerSymbol>\n<feed>YAHOO</feed>\n<prices>\n

      Any text editor that will work with end of line characters will work. For example, the image below shows the np++ Extended interface which uses a \\n as new-line and the groups of 4 spaces are important:

      Figure 1. Example of np++ replace to add the Quote Feed

      "},{"location":"how-to/reinvesting-dividends/","title":"Reinvesting dividends","text":"

      How do you book the reinvestment of a dividend? What about DRIP? A dividend is the payment of a part of the company's profit to its shareholders. Sometimes you can choose to receive this dividend in cash or in shares. But how should you register this latter share dividend.

      For example, at the annual general meeting of the NN Group, the shareholders approved a final dividend of EUR 1.56. The final dividend will be paid either fully in cash, after deduction of withholding tax if applicable, or fully in ordinary shares, at the election of the shareholders. The following example is about the choice dividend (300 shares) of a Dutch company, paid to a non-resident investor. The dividend is 1.56 EUR/share. The converting ratio is 1 new share for 29.43 old shares. The historical quote at the pay date is 45.91 EUR.

      • you choose for cash dividend. You receive the net amount of 278.46 EUR. 300 shares * 1.56 EUR = 468 EUR minus foreign taxes (15% or 70.2 EUR), minus fees (0 EUR), minus domestic taxes (30% or 119.34 EUR).

      • You choose for share dividend. You receive 10 shares at 45.91 and 5 cash dividends (6.63 EUR). You have to pay some fees (3.50 EUR) and domestic taxes (140.09 EUR).

      Theoretically, there is no difference between the two choices. 300 shares/29.43 * 45.91 ~= 300 shares * 1.56 EUR.

      In this example, the broker doesn't allow share fractions. So, you only receive 10 additional new shares (not 10.19 shares) for 295 old shares and a pay-out of the remaining 5 old shares dividend.

      The domestic taxes are much larger for the share dividend (30%) than if you should buy the shares from your cash account(0.35%) (140.09 EUR). Of course, if the dividends are paid in cash, then you would also have paid domestic taxes. Either way, the government receives the same amount.

      In this particular example, there is a small benefit because there are no foreign taxes (15%) in case of a share dividend.

      There has been a lot of debate about how to book these transactions in PP. My understanding of the proposed procedure is:

      • book the dividends for all shares without fees and taxes. These will be paid for in the following step. If your broker doesn't allow for share fractions, you can use one transaction for the share dividend part (e.g. 295 in the example) without fees & taxes and another transaction with taxes and fees for the cash dividend.
      • buy the allocated shares at the same day with the theoretical historical quote and the associated fees and taxes.

      Figure 1. Implementation in PP

      Please note that in this example the total outflow is much larger the inflow from the dividend payment. This is because the number of reinvested shares is calculated on the gross amount. So, all taxes and fees are in surplus of this choice dividend.

      "},{"location":"reference/","title":"Reference Manual","text":"

      The Reference manual is structured around the User Interface (UI) of the program, probably the easiest and quickest way for users, developers, or contributors to find relevant information. Figure 1 shows a typical opening screen of a small portfolio, e.g. demo-portfolio-04.

      Figure 1. Opening screen of the PortfolioPerformance program.

      Certainly:

      Figure 1 illustrates the outcome of selecting the All Transactions view, accessible either through the side panel or the menu View > All Transactions. The last Buy transaction for share-3 is selected, prompting the display of a chart showing the historical quotes of share-3 in the lower panel. The following UI elements can be distinguished:

      • Menu bar containing five elements: File, View, Transaction, Online, Help. This menu bar is not context sensitive.
      • Open projects: you can open multiple projects simultaneously. The highlighted project is visible in the panels below. Projects marked with a star (*) preceding their name has been changed and should be saved before closing. It is possible to display two projects side by side in the UI.
      • The Side panel serves as a convenient shortcut for accessing various views within the project. All available options can also be accessed through the View menu. It's important to note that the list in the side panel mirrors the options available in the View menu, providing a one-to-one translation of the available views. The chosen view dictates the content displayed in the adjacent top and bottom panels. Next to the options Securities and Taxonomies, a very small (green) icon will let you add new elements.
      • Top panel: in the example of Figure 1, the top panel contains the All Transactions view. This is a list of all the transactions that you have made with your portfolio, such as deposits, withdrawals, buys, and sells. The default columns, such as date, type, security, ..., are initially visible. However, you have the flexibility to modify them using the Settings (cog) icon located in the top-right corner. Please, note that the icons in the top-right corner are specific to this view and may not necessarily appear in other views.
      • The Bottom panel follows the selection of the top panel. For example, selecting share-1 in the top panel will display the chart of this share in the bottom panel.
      • Divider bar: the area occupied by the top and bottom panels can be adjusted using the divider bar. You can drag the divider bar all the way to the top or bottom. It is not possible to completely hide a panel; except for the Currencies and Settings options.
      "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"About this Manual","text":"

      The Portfolio Performance (PP) manual consists of four chapters:

      • Getting Started: If you're new to PP, this chapter will help you get started. It covers everything from installation to creating a new portfolio, importing securities and transaction data, and evaluating your entire portfolio.
      • Basic Concepts: Although PP is a highly intuitive and user-friendly program, the underlying financial concepts can be complex. This chapter provides a concise yet clear understanding of key Portfolio Performance concepts, such as accounts, transactions, reporting periods, IRR, and more.
      • How-to: In this chapter, you'll find step-by-step descriptions of common procedures, including data import, dividend booking, finding historical quotes, and more. A few tips & tricks and special cases are also described.
      "},{"location":"#about-portfolio-performance","title":"About Portfolio Performance","text":"

      PP is an Eclipse-based desktop application written in Java. This open-source project started in 2012 and has been updated numerous times. With PP, you can:

      • Monitor the composition and development of your securities portfolio with meaningful overviews, key figures, and charts.
      • Track the historical price development of securities and your purchases and sales.
      • Classify the securities in your portfolio according to your needs and visualize the composition, such as by asset classes and regions.
      • Define and track the portfolio strategy with your planned asset allocation and ensure it in the rebalancing process.
      • Create an overview across multiple securities accounts and clearing accounts.
      • Import statements from online banks and brokers quickly and conveniently.

      Why choose yet another application? While you can simulate some of these calculations with Excel or rely on your broker for information, they often provide incorrect results. They are typically based solely on absolute figures at the beginning and end of a reporting period and do not properly include purchases and sales or variable reporting periods. PP calculates performance accurately using True-Time Weighted Rate of Return and Internal Rate of Return, taking into account the purchases and sales at their respective execution date.

      "},{"location":"#other-information-sources","title":"Other Information Sources","text":"

      The source code is hosted on GitHub. Examining this code will give you direct access to the inner workings of the program.

      There is also an active discussion forum available in both English and German, with an extensive Frequently Asked Questions (FAQ) section.

      "},{"location":"#license","title":"License","text":"

      This manual is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. The source code of Portfolio Performance is licensed under the Eclipse Public License 1.0.

      Thanks to all contributors!

      "},{"location":"#imprint","title":"Imprint","text":"

      For more information, please see the Imprint and Privacy Policy.

      "},{"location":"concepts/","title":"Basic concepts","text":"

      In this chapter, you will find a concise but clear explanation of several basic concepts. Portfolio performance is all about numbers. It is easy to completely miscalculate or misinterpret these numbers, if you don't understand the underlying assumptions.

      • Financial terminology: Understanding basic financial terminology is crucial for optimal usage of PP and this manual. This page contains a few links excellent sites.
      • Account: An account is a collection of transactions. PP uses several terms to indicate the concept of account: Securities, Deposit, Reference, Cash, Offset, ... account. What do they mean and in what aspects do they differ?
      • Transaction: A financial transaction is an agreement between a buyer and seller to exchange goods, services, or assets for payment. In case of PP, the exchange is about securities. There are security transactions such as buy, sell delivery (inbound), and delivery (outbound); deposit transactions such as deposit, removal, interest, interest charge, fees, fees refund, taxes, tax refund; and dividend transactions.
      • Reporting period: The (reporting) period is the time slice that is taken into account for reporting (calculations, graphs, statistics). It's very important that you realize that for every performance calculation a reporting period is taken into account, even if you haven't set one explicitly.
      • Purchase value: The Purchase Value of a security is the summed\u00a0value\u00a0of each buy (+) and sell (-) transaction of that security, taken into account the reporting period. The value of a transaction includes the taxes and fees; sometimes also called \u201cNet Transaction Value\u201d.
      • Performance: Measuring your portfolio's performance may seem straightforward, but it involves a range of concepts and calculation techniques that require explanation.
      "},{"location":"concepts/account/","title":"Types of Accounts","text":"

      An account is a collection of transactions. These transactions could include buy and sell transactions of securities (shares, etc.) for a Securities account or withdrawals and deposits of money for a Deposit account. Each account has a default currency attached. As part of the installation process, you have already created at least one Securities account and one Deposit account.

      Portfolio Performance (PP) has two main types of accounts: Deposit and Securities accounts. They are described quite well in the Guide on Getting Started by Thomas (Contributor); you will need to scroll quite far down.

      Other related terms are Reference account, Offset account, and Cash account.

      "},{"location":"concepts/account/#deposit-account","title":"Deposit Account","text":"

      Figure 1. Example of Deposit Accounts.

      In Figure 1 (top panel), there are three deposit accounts named Broker-1 (EUR), Broker-1 (USD), and broker-2 (EUR). Notice the column heading \"Cash Account\". The bottom panel shows the transactions of the selected Deposit Account Broker-1 (EUR).

      Deposit Accounts are used for deposits and withdrawals in EUR and USD in the two broker accounts. It's somewhat redundant to add \"EUR\" and \"USD\" in the name because you also need to specify the currency for each deposit account (see the third column in Figure 1). On the other hand, in many dialogs (for example when buying a security) you need to specify the deposit account. The added currency in the name of the deposit account will help you then choosing the correct one.

      Of course, you can use other names depending on your needs. For example, if you want to keep all your dividends and taxes in a separate account, you could name it Dividends and Taxes. If you receive dividends in both EUR and USD, then you need also two deposit accounts with the name Dividends but with different currencies.

      A deposit account is used to transfer or receive money as the result of a transaction. In Figure 1, the balance of Broker-1 (EUR) reflects the deposit of 3000 EUR and the purchase of each 2969.12 EUR. A deposit account can be negative. However, good practice requires that you first add a deposit of a large enough sum to cover the subsequent buy transactions, just as you would do with a real broker.

      "},{"location":"concepts/account/#securities-account","title":"Securities Account","text":"

      A securities account will hold your securities and will be used for buying or selling securities. A securities account is most often named after the broker or bank that you use for buying or selling.

      Figure 2. Example of Securities Accounts.

      Note that although broker-1 has two deposit accounts (see figure 1), only one of them broker-1 (EUR) is set as the reference account. The bottom panel shows the purchase transaction with the Broker-1account.

      "},{"location":"concepts/account/#related-terms","title":"Related Terms","text":""},{"location":"concepts/account/#cash-account","title":"Cash Account","text":"

      The term Cash Account is somewhat inconsistently used. In Figure 1 (top panel; first column) it refers to a Deposit Account; which is in line with the name Cash Account. In Figure 2 (bottom panel)the Cash Accountcolumn refers to a Security Account (broker-1).

      "},{"location":"concepts/account/#reference-account","title":"Reference Account","text":"

      A securities account is always associated with a deposit account. This is the deposit account that will be used (if no other is explicitly assigned) for any buy or sell transaction on that securities account. This deposit account is called the Reference Account. In Figure 2, the Broker-1 security account has a reference (deposit)account named Broker-1 (EUR).

      The Reference account of a Securities account must be set when creating this account (see Figure 2 of Creating a Portfolio). You can always change the Reference account by selecting Accounts > Securities Accounts from the left sidebar. Double-click on the relevant Reference account currency and choose a new one from the drop-down menu (see Figure 2; second column).

      "},{"location":"concepts/account/#offset-account","title":"Offset Account","text":"

      The offset or counter account, also known as a \"Gegenkonto\" in German, is an essential component when dealing with securities transactions. It acts as the counterpart to the securities account. In other words, for every transaction that occurs in the securities account, an equal and opposite entry is recorded in the offset account.

      When you perform actions like buying or selling securities within your securities account, these transactions are balanced by corresponding entries in the offset account. For example, when you buy securities, the purchased securities are added to the securities account, and an equivalent amount of cash is withdrawn from the offset account. This ensures that the overall balance of your accounts remains zero or balanced.

      However, also the term \"Offset account\" is a relative concept. Compare the bottom panels of Figure 1 and 2. For a Deposit Account(Figure 1), it refers to a Security Account and vice versa.

      "},{"location":"concepts/financial-terminology/","title":"Financial terminology","text":"

      Explaining all financial concepts in this manual would be too far-reaching. However, understanding these concepts is crucial for optimal usage of PP and this manual.

      In this page, you can find some reliable weblinks to gain a comprehensive understanding of this terminology. Concepts that are specifically related to PP e.g. account, transaction, purchase value, ... are covered elsewhere in this chapter.

      • Investopedia.com has a large section about financial terms, alphabetically organised.
      • Dutch-speaking readers can find an extensive alphabetically organised list at De Financi\u00eble Begrippenlijst
      • The website iotafinance.com provides the translation of financial terms from/into English, French, Spanish, and German.
      • The Library of Congress provides a 75 pages PDF bilingual glossary (English - Spanish).
      • Securities versus stocks with some historical notes.
      "},{"location":"concepts/purchase-value/","title":"Purchase Value","text":"

      The Purchase Value of a security is the summed\u00a0value\u00a0of each buy (+) and sell (-) transaction of that security, taken into account the reporting period. The value of a transaction includes the taxes and fees; sometimes also called \u201cNet Transaction Value\u201d.

      If the purchase date lies before the beginning of the reporting period, then the value at the beginning of the period is taken. If the purchase date lies within the period, then the value at the purchase date is used. However, if the purchase data is later than the end of the reporting period, then the purchase is not taken into account for the calculation of the purchase value. Purchase Value and Purchase Price are used in Reports > Performance > Securities (see figure 1)

      Figure 1. Purchase value of a security

      Assume the following scenario. We are now 2023, May, 15th and you have bought 30 shares at different times and quotes (see figure 2). An overview of all buys and their respective quotes is shown in figure.

      Figure 2. List of Buy transactions of security example

      The reported purchase value of a particular security is dependent upon the selected reporting period. In the Table 1, you can see that the purchase value of this simple transaction, can vary between 3300 EUR and 500 EUR, depending on the selected period.

      Table 1: Three reporting periods based on the current day (2023-05-15) Period From \u2026 to \u2026 Purchase Value 1 year 2022, May 15 - 2023, May 15 3300 EUR 2 years 2021, May 15 - 2023, May 15 3000 EUR 3 years 2020, May 15 - 2023, May 15 3050 EUR Custom 2000, Jan 1 - 2020, Jan 01 500 EUR

      The 1 year period starts at 2022, May 15 and ends today (2023,May 15); sometimes also called YTD (Year To Date). Because all purchases fall before the reporting period, the value for each of them is taken from the beginning of the period. At that time (2022, May 15), the share was valued at a quote of 110 EUR (see graph). So, the total purchase value is 30 shares * 110 = 3300 EUR. This is the beginning situation of the period (also called Statement of Assets). Since, there are no purchases afterwards, this amount is also the purchase value of the 1 year period.

      The 2 years period starts at 2021, May 15. Only the third buy falls within the period. So, buy 1 and buy 2 are evaluated at the price from the beginning of the period (= 90 EUR). So, the Statement of Assets equals 1350 EUR. There is one buy afterwards (valued at the buying quote). The total Purchase Value of this 2 year period is therefore (5 + 10) shares at 90 EUR + 15 shares at 110 EUR or 1350 +1650 = 3000 EUR.

      The 3 years period start at 2020, May 15. The second and third buy lie within the reporting period and are evaluated at their respective quotes: 10 shares at 90 EUR (= 900 EUR) and 15 shares at 110 EUR (= 1650 EUR). The beginning of the period or Statement of Assets is the result of the first buy (2020, Jan 1) takes the quote from the beginning of the period (2020, May 15) which is the same as the purchase quote (e.g. 100 EUR); resulting in a purchase of 5 * 100 EUR = 500 EUR.

      The previous explanation can be seen in the pop-over, when hovering the mouse over the Purchase Value (see Figure 3).

      Figure 3. Pop-over panel for Purchase value field.

      The custom period (from 2000, Jan 1 (not included) until 2020, Jan 1 (included) has a Purchase Value of 500 EUR because it contains only the first buy (= 5 * 100 EUR). The second and third buy or not taken into account because they occur later than the period end. Things become more complicated -but with the same logic- when there are also sell transactions. Important to remember is that PP use a FIFO (First In, First OUT) method to calculate the result of a sell transaction. Suppose that you did a (rather bad timed) sell at 2021, Jul 1 2020 of 12 shares (see Figure 4).

      Figure 4. Overview and graph of all buy and sell transactions.

      At that moment there were 15 shares available (5 at 100 EUR and 10 at 90 EUR). Selling 12 of them will first sell the 5 shares of 100 EUR and then another 2 of 90 EUR, leaving 3 shares of 90 EUR available.

      Now, let's calculate the Purchase Value for the different periods.

      • 1 year period: The period runs from 2022, May 15 until 2023, May 15. All purchases are done before the beginning of the period; so each of them is valued at the price of 2022, May 15, which is 110 EUR. How many shares are available? 5 + 10 - 12 + 15 = 18 at 110 EUR or 1980 EUR.

      • 2 years period running from 2021, May 15 until 2023, May 15. Only the last buy transaction falls within the period and is evaluated at its current quote (110 EUR). The Statement of Assets consists of 3 shares (15 buy - 12 sell). They are evaluated at the price from the beginning of the period (90 EUR). The Purchase Value for the 2 years period is: 3 * 90 EUR + 15 * 110 EUR = 1920 EUR.

      • 3 years period running from 2020, May 15 until 2023, May 15. The Statement of Assets is 0 EUR because all 5 shares from buy 1 are sold (FIFO) on 2021, Jul 15. From the second buy, only 3 shares are remaining, evaluated at 90 EUR. The third buy is evaluated at 110 EUR. The Purchase Value of the 3 years period is 3 shares * 90 EUR + 15 shares * 110 EUR = 1920 EUR. Longer periods have the same Purchase Value.

      "},{"location":"concepts/reporting-period/","title":"Reporting period","text":"

      Figure 1. Drop-down list for selecting the reporting period

      The (reporting) period is the time slice that is taken into account for reporting (calculations, graphs, statistics). It's very important that you realize that for every performance calculation a reporting period is taken into account, even if you haven't set one explicitly. By default, it is set to one year from the current day.

      You can set the reporting period with the drop-down icon in the top-right corner of the window (see Figure 1). The available options are: 1 year, 2 years, 3 years, New ..., Manage ... With this last option you can delete or reorder the available time periods.

      The 1, 2, 3 years period is always calculated from the current day. If the current day is 2023, May 15, then ...

      Period From end of \u2026 to end of \u2026 1 year 2022, May 15 - 2023, May 15 2 years 2021, May 15 - 2023, May 15 3 years 2020, May 15 - 2023, May 15

      With New, you can create custom time periods. The options in the figure below are self-explanatory. You cannot give a self-chosen name to this period. Figure 2. Different custom time periods for reporting

      "},{"location":"concepts/transaction/","title":"Transaction types","text":"

      Figure 1. Transaction menu.

      A financial transaction is an agreement between a buyer and seller to exchange goods, services, or assets for payment. In case of PP, the exchange is about securities. Transactions are the core of PP. You can divide them broadly into security and deposit transactions (see figure 1).

      • Security transactions: buy, sell delivery (inbound), and delivery (outbound).
      • Deposit transactions: deposit, removal, interest, interest charge, fees, fees refund, taxes, tax refund.
      • A dividend is a special deposit transaction. The cash is coming from the dividend payment of the security.

      Security transfer ... and Transfer between accounts ... aren't real transactions but manual operations between accounts.

      Figure 2. Transaction types.

      Buy and sell transactions are the most common. When you buy a security, it increases the value of the Security Account (shown in green) and decreases the balance in the Deposit Account (shown in red). Conversely, when you sell a security, it has the opposite effect.

      A Delivery (inbound) is similar to a buy transaction but has no impact on the Deposit Account; only the Security Account increases. This operation is typically used when you need to inherit a security. Delivery (outbound) functions in the opposite manner.

      To increase the Deposit Account balance, you can use a Deposit transaction, while a Removal transaction is used to decrease it.

      Additionally, you can receive a dividend, interest, a refund of fees or taxes. This is similar to a Deposit transaction, but with the added option of linking this deposit (dividend, interest, ...) to a Security account. Conversely, when you need to pay fees or taxes or are charged interest, it causes a Removal of a deposit, but also allows for the possibility of linking it with a Security account.

      "},{"location":"concepts/performance/","title":"Performance","text":"

      The measurement of the performance of a financial portfolio is based on the concept of return: the increase or decrease of value over a specific period. For example, your portfolio starts at 100 EUR and grows to 120 EUR by the end of the period, resulting in a performance of + 20%. Equation 1 offers two versions of the base formula; also named the Rate of Return.

      $$\\mathrm{r = \\frac{(MVE - MVB)}{MVB} \\qquad \\Leftrightarrow \\qquad 1 + r = \\frac{MVE}{MVB}\\qquad (Eq 1)}$$

      where MVE = the market value of the portfolio at the end of the reporting period, and MVB = the market value of the portfolio at the beginning of the period. Please note that:

      • The rate of return percentage applies to the entire period (3 years, 6 months, ...) and is not an annual rate.
      • There are no additional transactions within this specified period.

      PP uses two different approaches to calculate the rate of return when additional transactions occur withing the reporting period: the money-weighted or time-weighted rate of return. It also distinguishes between the measuring the performance on portfolio, (individual) security, or trade level.

      "},{"location":"concepts/performance/#the-money-weighted-rate-of-return","title":"The money-weighted rate of return","text":"

      The money-weighted rate of return uses essentially the Internal Rate of Return (IRR) technique used in project management. This calculation considers both the timing (when) and the amount (how much) of the cash that moves into and out of the portfolio within the reporting period.

      The money-weighted rate of return or IRR is the annual interest rate that is necessary to bring the beginning value of the investment (MVB) and all subsequent cash flows to the end value (MVE). To generate the specified cash flows within the given time period, your portfolio must grow each year by a percentage equal to the IRR.

      If you find the concept of IRR challenging, please start by first reading the money-weighted section. The calculation method is thoroughly explained by formulas and numerous examples, ranging from a simple single-share investment to multiple transactions including dividends. The examples are based on the our demo portfolio to solidify your understanding.

      "},{"location":"concepts/performance/#time-weighted-rate-of-return","title":"Time-weighted Rate of Return","text":"

      The time-weighted rate of return is not influenced by the amount invested. Whether you invest one EUR or 100 EUR, you will achieve the same return. The reporting period is divided into several holding periods, and for each holding period, a return value is calculated and then compounded into an overall return. Each period carries equal weight; hence the name time-weighted rate of return. In the True Time-Weighted Rate Of Return methodology (TTWROR), performance is calculated using simple returns without any consideration for the total amount invested.

      The TTWOR method is explained in depth in the time-weighted section of this chapter.

      A nice video about the calculation and difference between money-weighted and time-weighted approach is given by the following CFA-level-1 exam video.

      "},{"location":"concepts/performance/money-weighted/","title":"The money-weighted rate of return","text":"

      The money-weighted rate of return is in fact identical to the Internal Rate of Return (IRR) technique used in project management. This calculation considers both the timing (when) and the amount (how much) of money moves into and out of the portfolio within the reporting period. The base formula for the IRR calculation is:

      $$\\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)}}$$

      where n = the number of cash flows in the reporting period, $CF_t$ = cash flow at time t within the period, and $RD_t$ = the number of remaining days within the period. For MVB, the $RD_t$ equals the entire period, representing the period length in years. You can simplify the equation by treating the MVB as the initial cash flow. A cash flow is any amount of money that is added to or withdrawn from an investment.

      The formula is very similar to the calculation of Future Value. With an interest rate of 5%, 100 EUR today will be worth 115.76 EUR in three years or 100 x (1 +0.05)^3. Since PP uses days as standard period, we need to divide the remaining number of days that the cash flow could influence the performance by 365 to obtain a decimal representation of the yearly period. $\\mathrm{CF_t \\times (1+IRR)^{\\frac{RD_t}{365}}}$ is thus the expected future value of the cash flow CF at time t by the the end of the period with an annual interest rate = IRR. Please note that in the absence of any cash flows, Equation (1) resembles the simple return formula MVE = MVB x (1 + r). The added exponent transforms the return rate into an annual rate of return rather than a periodic rate of return, as in the simple return formula.

      The IRR is the annual interest rate that is necessary to bring the beginning value of the investment (MVB) and all subsequent cash flows to the end value (MVE). To produce the specified cash flows within the given time period, your portfolio needs to grow each year by a percentage equal to the Internal Rate of Return (IRR).

      Note

      In project management literature, you are more likely to encounter Equation (1) expressed as:

      $$\\mathrm{CF_{t0} = \\frac{CF_{t1}}{(1 + IRR)^\\frac{t_1}{365}}+\\frac{CF_{t2}}{(1 + IRR)^\\frac{t_2}{365}}+...+ \\frac{CF_{tn}}{(1 + IRR)^\\frac{t_n}{365}}}$$

      where $\\mathrm{CF_{t0}}$ denotes the initial cash outflow at time $t_0$, representing your initial investment. $\\mathrm{CF_{t1} \\cdots CF_{tn}}$ are the net cashflows that your initial investment will yield. PP works with daily periods instead of the traditional annual periods. Therefore, $\\mathrm{t_1, t_2, \\cdots t_n}$ should be converted to the number of days between $t_0$ and $t_n$.

      Unfortunately, there is no easy way to derive the value of IRR from Equation 1. Software tools such as Excel have functions like IRR and XIRR, that employ a brute-force approach, iteratively solving the equation with various \"guesses\" of IRR until a suitable match is identified. In the examples below we will use the Goal Seek method of Excel to illustrate the solution.

      "},{"location":"concepts/performance/money-weighted/#irr-at-portfolio-level","title":"IRR at portfolio level","text":"

      The following examples will calculate the IRR for the whole portfolio. For example, our demo-portfolio-03 contains two securities and one deposit account. The resulting IRR should not be extrapolated to an individual security. It's the performance of the whole portfolio. Of course, you can calculate the IRR for a specific security or even trade in PP.

      "},{"location":"concepts/performance/money-weighted/#example-1-one-buy-transaction","title":"Example 1: one buy transaction","text":"

      In our demo-portfolio-03 all transactions take place within a holding period of three years, starting at 2020-06-12. Consequently, the MVB for this period is 0 EUR because the portfolio is empty at the beginning of the period. The following transactions occur in the holding period (see Figure 1 below).

      Figure 1. Overview of transactions - Deposit (3x), Buy (3x), Dividend, and partial Sell.

      Figure 2. Graph of historical quotes and transactions of share-1.

      Figure 3. Graph of historical quotes and transactions of share-2.

      Assume that only the first buy (+ deposit) has taken place. The calculation of the IRR should then be straightforward.

      • MVB = 0 EUR
      • First cash flow on January 15, 2021: the purchase of 10 shares of share-1 at a price of 15 EUR each, resulting in a total sum of 155 EUR (including fees and taxes); see Figure 1. Due to the three-year reporting period, this security will remain in the portfolio for an additional 878 days until MVE.
      • MVE = 10 shares at quote 19.006 EUR; in total 190.06 EUR.

      Since MVB = 0, we can derive the IRR from Equation 2 directly: $\\mathrm{IRR = \\left({\\frac{MVE}{CF_1}}\\right)^\\frac{365}{878} - 1}$

      IRR = (190.06/155)^(365/878) = 8.85%

      In order to generate the MVE = 190.06 EUR, the initial cash flow CF1 of 155 EUR must grow at 8.85% per year for 2.41 years or 878 remaining days.

      "},{"location":"concepts/performance/money-weighted/#example-2-multiple-buy-transactions","title":"Example 2: multiple buy transactions","text":"

      When dealing with multiple cash flows, deriving the Internal Rate of Return (IRR) becomes more complex. Take, for example, the three buying transactions from Figure 1. The same logic as mentioned earlier still applies, albeit with a bit more complexity.

      • MVB is still zero EUR.
      • Three cash flows (see Figure 1). The remaining days in the reporting period are respectively 878, 514, and 255 days.
      • MVE = 15 shares at a quoted price of 19.006 EUR, and 5 shares at 13.77 EUR, totaling 396.85 EUR.

      $$ \\mathrm{MVE = MVB \\times (1 + IRR)^{\\frac{1095}{365}} + CF_1 \\times (1+IRR)^{\\frac{878}{365}} + CF_2 \\times (1+IRR)^{\\frac{514}{365}} + CF_3 \\times (1+IRR)^{\\frac{255}{365}} \\qquad (Eq 3)} $$

      Figure 4 illustrates the calculation in Excel (download workbook). The initial cash flow of 155 EUR will have grown to 219.68 EUR, if the holding period was 878 days and the yearly interest rate was 15.60%. The second buy will increase from 84 EUR to 103.03 EUR. The profit of share-2 appears smaller due to the smaller amount of holding days. The calculation of IRR can be simulated it in Excel using the Data > Goal Seek method (see Figure 4). The method tries to set the value of the calculated MVE (cell F11) to the observed MVE (manual input) by iteratively changing the value of IRR, until a match (15.60%) is found.

      Please note that the individual calculated end values of the shares do not necessarily correspond with the observed individual end values. Compare for example the expected and observed value of share-2. Only the sum of the whole portfolio match. See balow to calculate the performance of individual securities and trades.

      Figure 4. IRR-calculation for three buy-transactions.

      "},{"location":"concepts/performance/money-weighted/#example-3-buy-dividend-sell-transactions","title":"Example 3: buy - dividend - sell transactions","text":"

      Whether dividend payments and selling securities should be considered as cash flows depends on the context. In demo-portfolio-03, the outcomes of dividend and selling transactions are deposited in a cash account, which is part of the portfolio. Consequently, there isn't any 'external' cash flow. Also, the cash account is included in the portfolio valuation at the end of the period (MVE), meaning that the value of MVE already incorporates dividends and sales.

      If the dividend payment is \"consumed\" (you bought yourself a nice meal from it), resulting in an external cash flow (withdrawal), this transaction should be recorded in PP. Similarly, if you choose to reinvest the dividend or the proceeds from a sale, it necessitates recording a new transaction in PP.

      As evident in Figure 5, MVE comprises the paid dividend and the outcome of the sale transaction (both held in a deposit account), in addition to the valuation on the end date of the remaining shares from the portfolio. This aligns with what PP displays in the calculation tab. The MVE is the total of all deposit and securities accounts.

      Figure 5. IRR-calculation for buy-sell-dividend transactions.

      If you should like to consider the dividend and sale as a cash flow, then you should change the transaction date to the holding period end date. Indeed, before the end date, these payments essentially remain dormant on the cash account, without actively contributing to the portfolio. As the number of remaining days in the period reaches zero, the formula will simplify to the face value of the dividend and sale.

      155 x 1.2^(878/365) + 111.76 x 1.2^(514/365) + 67 * 1.2^(255/365) + 20 x 1.2^0 + 105 x 1.2^0 = MVE (but without dividend and sale)

      "},{"location":"concepts/performance/money-weighted/#example-4-mvb-0","title":"Example 4: MVB > 0","text":"

      In the previous examples, all transactions took place within the reporting period. This isn't always the case. It is very important to distinguish the following cases:

      • $CF_t$ occurs before the beginning of the reporting period (MVB date). PP will calculate the value of $CF_t$ through historic quotes at time t. The holding period is the entire reporting period.

      • $CF_t$ occurs after the beginning but before the end of the reporting period. The value of $CF_t$ is known through the transaction data. The holding period is the number of remaining days from time t until the end of the reporting period.

      • $CF_t$ falls after the end of the reporting period. $CF_t$ does not contribute to MVE and is omitted from the calculation of IRR for that reporting period.

      Consider a scenario where the holding period is only two years (from 2021-06-12 to 2023-06-12), or 730 days. Since the first buy of share-1 occurs outside of this period (item 1 from above), the quoted price of share-1 at the beginning of the period is used rather than the actual buying price.

      • MVB = 177.94 EUR, representing 10 shares of share-1 at the closing price of 17.794 EUR on June 11, 2021 (= the closing price from the day before the buying transaction).
      • Additional buys: two additional buys within the reporting period with respective remaining days of 514 and 255 days and known buying transaction price. Remember, the dividend and sale will be valuated at end date in the MVE.
      • MVE = 426.82 EUR, including 125 EUR on the cash account from dividend and sale.

      The resulting formula is with IRR = 17.63% is:

      177.94 x 1.18^(730/365) + 84 x 1.18^(514/365) + 67 x 1.18^(255/365) = MVE (including dividend and sale)

      Figure 6. IRR-calculation for a 2 year holding period (MVB > 0).

      "},{"location":"concepts/performance/money-weighted/#irr-at-security-level","title":"IRR at security level","text":"

      The value of IRR, calculated on the portfolio level, doesn't say much about the performance of a specific security. For example, the demo-portfolio-03 IRR (3 years reporting period) is 20.28%. The security IRR of share-2 is 112.53%. A glance at Figure 7 should make it evident why: the security is purchased at the lowest price of the entire period. You can obtain the IRR for each security separately using the menu View > Reports > Securities. The calculation closely resembles that of the portfolio. It is essential to set a reporting period beforehand.

      Figure 7. IRR-calculation for individual securities.

      • Fees are omitted from the security IRR calculation.

      • In contrast to the Portfolio IRR, dividends and sale results are treated as leaving the portfolio at the transaction date in Security IRR calculations. Deposit accounts are not included in the Security IRR calculation.

      • With a multi-transaction security, the purchase price and value could be somewhat tricky to obtain. For instance, the remaining 10 shares of share-1 are the outcome of two purchase transactions and one sell transaction. Following the FIFO principle (First In, First Out), these 10 shares consist of the 5 remaining shares from the first buy and the 5 shares from the second buy. This results in an average price of 15.50 EUR.

      "},{"location":"concepts/performance/money-weighted/#example-5-a-security-with-one-buy-transaction","title":"Example 5: a security with one buy transaction","text":"

      A simple example is provided by the IRR calculation of share-2. The single buy transaction falls within every holding period (1,2, or 3 years). The transaction data without taxes is used to determine the cash flow; e.g. 67 EUR.

      • MVB = 0 EUR.
      • First cashflow: 8 shares at 8 EUR/share + 2 EUR fees. Remaining days = 255.
      • MVE = 8 shares at 13.97 EUR/share.

      Inserting these values into Equation 2 gives 111.76 = 0 x (1+IRR)^1095/365 + 66 x (1+IRR)^255/365

      IRR = ((111.76/66)^(365/255)) - 1 = 112.53%

      "},{"location":"concepts/performance/money-weighted/#example-a-security-with-multiple-transactions","title":"Example : a security with multiple transactions","text":"

      share-1 has multiple transactions, including sell and dividend. It's important to get the dates and cash flows correct, see Figure 8.

      Figure 8. IRR-calculation for individual security with multiple transactions.

      Please note that the dividend payment and the sale is recorded at the transaction date; not the end date of the holding period. This is different behaviour than with the IRR calculation on portfolio level. The resulting amounts are not deposited on a cash account but are withdrawn from the portfolio at the transaction date. Because of this withdrawal, the cash flow is also negative.

      Inserting these values into Equation 2 gives: 190.06 = 153 x (1+IRR)^(878/365) + 83 x (1+IRR)^(514/365) - 30 x (1+IRR)^(179/365) - 107 x (1 + IRR)^(61/365) As can be seen from Figure 7, the IRR = 18.00%.

      190.6 = 227.81 + 104.78 - 32.54 - 110.00

      "},{"location":"concepts/performance/money-weighted/#irr-at-trade-level","title":"IRR at trade level","text":"

      A trade is formed by aggregating all buy and sell transactions related to a specific security. A trade can be closed, indicating that no further transactions can be conducted within this trade or open: more transactions are possible. The demo-project-03 contains 3 trades (see Figure 9). A closed trade starting with a buy of share-1 on 2021-01-15 and ending with a partial sell on 2022-01-14. The remaining shares initiate the second open trade, starting at 2022-01-14 and ending at the current date (e.g. 2023-06-12). The third trade is also open because share-2 hasn't been sold yet.

      Figure 9. IRR-calculation for trades.

      Please note that, in contrast with the portfolio and security IRR calculation, you can not set a reporting period. All open trades are calculated with the end date set as of today.

      Also note that PP follows a FIFO principle (First-In; First-Out) to determine which shares will be sold. The 5 shares sold on 2023-04-12 correspond to those acquired on 2021-01-15, rather than the ones obtained on 2022-01-14.

      "},{"location":"concepts/performance/money-weighted/#irr-calculation-of-a-closed-trade","title":"IRR calculation of a closed trade","text":"

      Five shares of share-1 were sold on April 12, 2023. The market value of those shares was 5 x 21 EUR = 105 EUR. The exact values could be obtained from the historical prices or with Report > Performance > Trades. The Entry and Exit values aren't displayed by default. Because of the FIFO-principle, these 5 shares were from the 1th buy, meaning that they are purchased for 5 x 15 EUR = 75 EUR. The fees and taxes are proportionally allocated based on the amount used, in this case, 5/2 = 2.5 EUR. The securities are held for 817 days (from 2021-01-15 till 2023-04-12). Inserting these values in Equation 2 and solving for IRR gives:

      IRR = ((105/77.50)^(817/365)) - 1 = 14.53%

      "},{"location":"concepts/performance/money-weighted/#irr-calculation-of-an-open-trade","title":"IRR calculation of an open trade","text":"

      The open trade involving share-2 is rather simple. Referring to Figure 1, these shares were acquired for a net value of 67 EUR on 2022-09-30, which was 255 days ago. The current value is 111.76 EUR, resulting in IRR = (111.76/67)^(365/255) - 1 = 108%.

      There is no easy way to check the trade IRR for a date other than the current date in PP.

      The open trade involving share-1 is a special case. Since it is an open trade, it ends on the current day (2023-06-12). But the trade consists of shares that were bought in 2021 and in 2022. Five shares are from 2021. The cash flow of these shares is thus 77.5 EUR (see also paragraph above). Today, they are valuated at 95.36 EUR. The remaining 5 shares are from 2022-01-04 with a cash flow of 84 EUR (see Figure 1). These 5 shares are also 95.36 EUR worth today (2023-06-12).

      According to PP (see Figure 9) the exit value is 190.72 = 2 x 95.36 EUR and the entry value is 77.5 + 84 = 161.50 EUR.

      • 1st buy: 77.50 EUR with a holding period of 878 days
      • 2nd buy: 84.00 EUR with a holding period of 514 days

      Inserting these values in Equation 1.

      190.72 = 77.5*(1+IRR)^(878/365) + 84*(1+IRR)^(514/365)

      Finding IRR with Goal Seek gives IRR = 9.16% and the formula solves into

      190.72 = 95.69 + 95.03

      "},{"location":"concepts/performance/time-weighted/","title":"Time-Weighted Rate of Return","text":"

      The calculation of the time-weighted rate of return starts with dividing the reporting period into distinct holding periods. For each holding period, a return value is calculated and then compounded into an overall return. Each period carries equal weight; hence the name time-weighted rate of return. In the True Time-Weighted Rate Of Return methodology (TTWROR), performance is calculated using simple returns without any consideration for the total amount invested.

      To minimize the computational effort, older methods utilized larger holding periods. A natural marker could be the dates of each cash flow. The holding periods would be formed by: Period Start --> CF1, CF1 --> CF2, CF2 --> CF3, ..., CFn-1 --> Period end. A holding period starts at period start or immediately before a cash flow and ends just before the following cash flow or the period end: CF1 is included in HP1 but CF2 isn't. If any cash flow exists outside the reporting period, making the Market Value Begin > 0, then the first holding period must start at the beginning of the reporting period. Otherwise, the first period starts with the first CF. Figure 1 illustrates the various concepts, applied to our demo-portfolio-03, with a three-year reporting period, making MVB = 0.

      Figure 1. Calculation of True Time-Weighted Rate of Return.

      For every holding period, the return rate is computed using Equation 1.

      $$\\mathrm{r = \\frac{MV_t}{MV_{t-1} + CF_t} - 1 \\qquad \\text{(Eq 1)}}$$

      where $MV_t$ = the market value of the portfolio at the end of holding period t, $MV_{t-1}$ = the market value of the previous holding period. $CF_t$ is the incoming (positive) or outgoing (negative) cashflow in that period.

      The return rate is thus corrected for the cashflow, occurring in that period. If the cash flow is incoming or positive, the MVB of the period is increased by it making the performance independent of the cash flow. For example, suppose that MV1 = 100, CF2 = 200, MV2 = 300 for a certain holding period. Without the correcting mechanism, the return would be calculated at 300% while in fact your portfolio hasn't changed and the performance should be 0%.

      Please note that for for each holding period, you require the market value of the portfolio twice: once at the end of the previous holding period and once at the end of the current one.

      After calculating the return rates of each period, they are compounded with the following formula.

      $$\\mathrm{r = [(1 + r_1) \\times (1 + r_2) \\times (1 + r_3) \\cdots (1 + r_{n-1}) \\times (1 + r_n)] - 1 \\qquad \\text{Eq 2}}$$

      where $r_t$ is the return rate from holding period t.

      "},{"location":"concepts/performance/time-weighted/#ttwror-at-portfolio-level","title":"TTWROR at portfolio level","text":"

      Our demo-portfolio-03.xml has three cash flows (see Figure 1). Because all cash flows fall within the reporting period, the first period (Period start --> CF1)could be omitted. The market value is zero at both the beginning and end of the period.

      The market value is the sum of the value of all deposit and securities accounts. To determine the value of a security, the (historical) closing price is taken. A cashflow can be positive (inbound transfer) or negative (outbound transfer); assuming that fresh money is added at the beginning of the day (and hence is available to generate return) and removed at the end of the day.

      For each period, you need $MV_{t-1}$ and the current $MV_{t}$ period. Because the market value is determined at the end of the trading day (closing price), $MV_{t-1}$ is also the value immediately before the cashflow at the beginning of the day.

      Note

      One could argue that, as we are required to add the cash flow to $MV_{t-1}$ (as per Equation 1), an alternative approach is to consider the market value of $MV_{t}$, which already includes this cash flow. However, it's important to note that throughout the day, market forces may cause fluctuations in $MV_{t-1}$, and these variations should be excluded when determining the market value at the beginning of the day, just before the cash flow.

      Manually calculating these portfolio market values can be a tedious task. It involves multiplying the number of shares for each security by the historical price and then adding fees and other relevant factors. But in PP, you can also generate a spreadsheet for all days in the reporting period with these values (see below).

      Figure 2. Manual calculation of cumulative and annual TTWROR.

      As can be seen in Figure 2 [download workbook], the market value at the beginning of the HP1 is zero EUR (= the closing value of the previous period) and 160.26 at the end (immediately before the next cash flow). There was one inbound positive cashflow of 155 EUR, necessary for buying 10 shares of share-1. The return of this period = 160.26/(0 +155) = 3.39%. Thus, eliminating the effect of the incoming cash flow, your portfolio has grown with 3.39% during this holding period of 364 days.

      Compounding these individual periodical returns into one portfolio return for the whole portfolio with Equation 2 results in a cumulative performance of 44.16%.

      Since computer time is inexpensive nowadays, there's no need to define long holding periods to minimize manual computation. Therefore, PP employs a single day as the holding period. You can export a file with daily portfolio. Select the menu View > Reports > Performance > Chart and click the icon (top right) Export Data as CSV. Choose Export Entire Portfolio (see Figure 3 for an example).

      The calculation is analogous to the explanation for manual calculation using longer holding periods. Before 2021-01-15, all values are zero, as the first transaction occurred on that day. The Delta in % is equivalent to the value of r in the manual calculation. The formula is slightly different: (MV_t + Outbound Transfer)/(MV_t-1 + Inbound transfer). The market value at the end of the period (day) is increased by all outbound transfers, such as withdrawals. In the manual calculation, a separate transfer would be used for this purpose.

      Figure 3. Export TTWROR data from PP.

      It's important to highlight that the performance for '2021-01-15' is negative. This is the result of the market value of the portfolio being smaller at that moment than the required cash flow, owing to the taxes and fees associated with acquiring the security. Fortunately, the subsequent market rally has led to a cumulative performance increase to 3.39%, aligning precisely with the manually calculated value for the first holding period.

      "},{"location":"getting-started/","title":"Getting started","text":"

      In order for you to be able to track, evaluate and manage your securities, Portfolio Performance needs the basic data about your securities accounts and past transactions. After that, you can immediately make your first evaluations and analyze your portfolio and performance from different angles.

      "},{"location":"getting-started/#installation","title":"Installation","text":"

      You can either use one of the precompiled installation files or compile the complete application by yourself. The application is available for MacOS, Windows and Linux.

      "},{"location":"getting-started/#creating-a-portfolio-file","title":"Creating a portfolio file","text":"

      Your first step - of course - is to create a new portfolio file with your accounts. The portfolio file contains all securities, accounts, custody accounts, bookings, classifications, etc.

      "},{"location":"getting-started/#adding-securities","title":"Adding securities","text":"

      You create the securities that are of interest to you in the list of securities. Master data and historical prices are automatically supplemented and updated by Portfolio Performance.

      "},{"location":"getting-started/#manage-your-portfolio","title":"Manage your portfolio","text":"

      So far you have created your portfolio file with a list of interesting securities. Now, it's time to buy and sell some of those securities, receive dividends, set up a savings plan, receive dividends, ....

      "},{"location":"getting-started/#reports-performance","title":"Reports & Performance","text":"

      How is your portfolio structured? The Statement of Assets displays the composition of your portfolio assets. A line chart and doughnut chart provide a more visual overview of all assets.

      What is the current performance of your portfolio? Along with assessments of returns and volatility, you will also receive an overview of the taxes and costs associated with it.

      "},{"location":"getting-started/#carry-out-classification-of-asset-shares","title":"Carry out classification of asset shares","text":"

      With your own structure of your choice, you represent the weighting of the asset shares, e.g. by region and/or asset class.

      "},{"location":"getting-started/#define-portfolio-strategy-and-carry-out-rebalancing","title":"Define portfolio strategy and carry out rebalancing","text":"

      You map your own portfolio strategy with target values for different share classes. You can make a target/actual comparison and perform a rebalancing

      "},{"location":"getting-started/#keeping-the-portfolio-up-to-date","title":"Keeping the portfolio up-to-date","text":"

      You book new purchases, sales and dividends as well as any costs and taxes incurred. This can be done quickly and easily by importing the bank's PDF statements, or manually

      "},{"location":"getting-started/adding-securities/","title":"Creating a portfolio","text":"

      Immediately after the previous \"Create portfolio\" step, the application's main screen looks a bit empty (see Figure 1). The left sidebar option 'Securities > All Securities' can be used to generate a list of securities.

      Note

      A security is a financial instrument that holds value and can be traded between parties. Securities can be broadly categorized into: debt securities (e.g., banknotes, bonds, and debentures) equity securities (e.g., common stocks) derivatives (e.g., forwards, futures, options, and swaps) [1].

      The list contains all the securities you are interested in; not necessarily the ones you have bought. At the moment, it's still empty.

      Figure 1. Main screen after creating a new portfolio

      The Add new investment instrument button allows you to start adding securities to your portfolio. As you can see in Figure 1, you can add new instruments (stocks, bonds, ...), cryptocurrencies, exchange rates. You can also import securities from a CSV-file or to create a new empty security.

      More options are available from the File > New menu (see Figure 1).

      # Adding new instruments

      Selecting the New > Security (menu) or New instrument ... (button) opens the following window (see Figure 2).

      Figure 2. Searching and adding new securities to the All Securities list

      You can type (part of) the security name in the search box. You can search for shares or bonds or both. After clicking the Search button, the list below will be populated with possible target instruments.

      The following fields are displayed for each instrument:

      • Name: the full name of the security according to the data source (see below) from which it is retrieved, e.g. Yahoo Finance.
      • Symbol: the abbreviation (ticker) used by the data source.
      • ISIN: International Securities Identification Number: a unique twelve-digit code that is assigned to every security in the world. Mostly used by European brokers & banks.
      • WKN: Wertpapierkennnummer: a German six-digit alphanumeric code for the identification of a security, now replaced by the ISIN code.
      • Type: can be Share, Bond, Cryptocurrency, Aktie, W\u00e4hrung, Futures, etf, fonds.
      • Exchange: a security may be traded on more than one exchange. For example, the NVIDIA stock is traded on Nasdaq (symbol NVDA, exchange NMS) or XETRA (symbol NVD.DE, exchange GER), and many other exchanges.
      • Currency: not used?
      • Source: could be Yahoo Finance, CoinGecko, or Portfolio Report. Yahoo Finance provides financial news and data including stock quotes, press releases, and financial reports. CoinGecko is a website with real-time information on most cryptocurrencies. Portfolio Report is an open source project that aims to provide centralised portfolio performance data.

      Once you have selected the correct security, you need to click on the Apply button to proceed to the next step. Some information such as name, symbol and historical quotes will already be filled in, based on the selected data source. You can/should change all this info; even the name. In fact, it's even possible to start from an empty instrument and fill in this information yourself.

      Figure 3. Panel for entering info about the selected security.

      It's very important that you select the correct currency in which your security is traded. For NVIDIA on Nasdaq, this is USD, which may be different from the default currency of your portfolio.

      The Calendar dropdown allows you to select a specific stock market calendar; e.g. Euronext, London Stock Exchange, New York Stock Exchange, ... These calendars contain info about trading days, (bank) holidays, ... for this specific exchange. These dates will affect some calculations, the display of price gaps and the execution of savings plans. You can view the different calendars available with their respective dates from the Help > Preferences > Calendar menu. See for example the specific dates for the New York Stock Exchange in Figure 4.

      Figure 4. NYSE calendar with some specific dates.

      A security can be set to active or inactive. If it is set to inactive, then the security will not appear in buy or sell dialogs and the historical prices will not be updated automatically.

      At the bottom of Figure 3 you can add a personal note for this security.

      These fields are called the Security Master Data (see top of Figure 3). There are four other tabs: Additional Attributes, Taxonomies, Historical Quotes, and Latest Quote.

      "},{"location":"getting-started/adding-securities/#additional-attributes","title":"Additional Attributes","text":"

      This tab allows you to supply additional data, besides the info that is already included in the Security Master Panel.

      Click on the + button to add a new attribute such as Logo, Total Expense Ratio, Assets under Management, Vendor, Acquisition Fee (percentage), and Management Fee (percentage). These additional attributes can be added to tables such as Reports > Performance > Securities. These fields are not calculatedand cannot be used in calculations.

      Additional attributes are defined in (left) Sidebar > General Data > Settings > Attributes : Securities (at the bottom).

      Figure 5. Defining additional attributes.

      "},{"location":"getting-started/adding-securities/#taxonomies","title":"Taxonomies","text":"Figure 6: Managing taxonomies.

      A taxonomy is a classification of your securities. For example, the Type of Security taxonomy (see presets in Figure 6) can classify your securities into: stock, Equity Fund, Exchange Traded Fund (ETF), Bond, Stock Option, Index, or Currency. Setting the correct type should be done in the Taxonomies panel when adding or editing the security (see Figure 3).

      Other useful presets are Industries, following the Global Industry Classification Standard (GICS), regions (up to country level), and assets (cash, equity, debt, ...).

      You can select these taxonomies in the Left sidebar > Taxonomies (see figure 6). Click on the + button to see all presets or to create your own custom taxonomy.

      "},{"location":"getting-started/adding-securities/#historical-quotes","title":"Historical Quotes","text":"

      For evaluating your portfolio, you need the current & historical prices of the security. In this panel (see Figure 7) you can set the data source of the Quote Feed. As provider, you can choose between several alternatives: Yahoo Finance, Alpha Vantage, Quandl, .... You can even refer to a webpage (e.g. from an investor site) that contains these historical data; see for example Morningstar. Or you can create them yourself and import the quotes with a csv-file.

      Figure 6. Historical quotes.

      "},{"location":"getting-started/adding-securities/#latest-quote","title":"Latest Quote.","text":"

      The latest (most recent) quote can be retrieved from the same data source as the (older) historical prices. However, this data source may be returning only daily quotes. If you want more recent prices from another source, you can use this panel (see Figure 8).

      Figure 7. Latest Quote

      "},{"location":"getting-started/create-portfolio/","title":"Creating a portfolio","text":"

      You can quickly create a PP file using a wizard to guide you through the setup process. There are five steps but only the first two are mandatory. Start with the menu File > New > File to create a new portfolio file.

      • Step 1 First you need to select the default currency for the portfolio (see figure 1). You can always change the currency for individual securities. PP supports almost every possible currency: from AED (United Arab Emirates Dirham) to ZWL (Zimbabwean dollar).

        Figure 1. Selecting the default currency for the portfolio.

      • Step 2 Your portfolio must contain at least one security account and one associated reference (deposit) account.

        Figure 2. Adding security and reference accounts to the portfolio.

        When at least one security account with a reference account has been created the Finish button becomes available. Don't worry about the next steps if you don't understand what they are about.

        Note

        If you have an existing portfolio PP supports importing csv files to quickly add securities, buy and sell transactions, and payments. See https://forum.portfolio-performance.info/t/import-csv-file/17123 for a tutorial on importing a portfolio and dividends.

      • Step 3 Sometimes, you need more than one deposit account. You can add these extra cash accounts (e.g. in different currencies) to your portfolio.

        Figure 3. Adding additional cash accounts to the portfolio.

      • Step 4

        As part of the creation wizard, you can also add the securities that you want to track in this portfolio. These securities are retrieved from German index trackers such a DAX (Deutscher Aktienindex) , tecDax, SDAX, and MDAX. You can also add the index itself or others (e.g. NASDAQ) with Indizes. Of course, you can add securities later on. Your choice is then much larger.

        Figure 4. Adding instruments to the portfolio.

      • Step 5 Taxonomies such as Asset classes and Regions are used to classify your securities. This classification can then later on be used in performance analysis e.g. show me the performance of all securities from region xxx.

        Figure 5. Adding taxonomies to the portfolio.

      • Finish When the wizard is finished, a unnamed.xml file is created. Of course, you should save it with a different name and location.

      "},{"location":"getting-started/create-portfolio/#xml","title":"XML","text":"

      All data of your portfolio is stored in one XML-file (eXtensible Markup Language). This is a human-readable file format. For example, take the following buying transaction of 5 shares of Microsoft at a purchase price of 334.27 USD with 30 USD fees and 45 USD taxes (see figure 6.).

      Figure 6. Example of a buying transaction.

      This single buying transaction is represented with the following XML code.

      <transactions>\n<portfolio-transaction>\n<uuid>72bf2b32-60a5-4c99-ba6d-d3ab695624e5</uuid>\n<date>2023-09-10T00:00</date>\n<currencyCode>USD</currencyCode>\n<amount>174635</amount>\n<security reference=\"../../../../../../../../../securities/security\"/>\n<crossEntry class=\"buysell\" reference=\"../../../..\"/>\n<shares>500000000</shares>\n<note>First buy on advice of ...</note>\n<units>\n<unit type=\"FEE\">\n<amount currency=\"USD\" amount=\"3000\"/>\n</unit>\n<unit type=\"TAX\">\n<amount currency=\"USD\" amount=\"4500\"/>\n</unit>\n</units>\n<updatedAt>2023-09-10T18:43:28.135529700Z</updatedAt>\n<type>BUY</type>\n</portfolio-transaction>\n</transactions>\n
      "},{"location":"getting-started/installation/","title":"Installation","text":"

      PP is available for MacOS, Windows and Linux. You need to download it and do some installation steps. The easiest way to download and install the latest version of PP is by using one of the installer files at the homepage (see fig 1). A link to the release notes of this latest version is also provided.

      Figure 1. Homepage with download links for various packages (2023-09-03)

      "},{"location":"getting-started/installation/#windows","title":"Windows","text":"

      You can download the compressed Zip-file and extract it in a directory at your choice. Even a portable USB-stick (about 250 MB free space) is fine (run from stick).

      You can also download the Windows - Installer (setup.exe). On Windows 11, you get a security warning about the dangers of running an exe-file. After that, double clicking on this file, will start the installation. You can change the destination folder. By default, the c:\\user directory is taken. You need about 200 MB of free space (see figure 2).

      Figure 2. Windows Installer dialog box.

      • Windows: you can download the compressed Zip-file and extract it in a directory at your choice. Even an USB-stick (about 250 MB free space) is fine (run from stick). You can also download the installer file (setup.exe). On Windows 11, you get a security warning about the dangers to run a exe-file. Double clicking on this file, will start the installation. You need about 200 MB of free space.
      "},{"location":"getting-started/installation/#macos","title":"MacOS","text":""},{"location":"getting-started/installation/#linux","title":"Linux","text":"

      The preferred option is to install Portfolio Performance on Linux is using from Flathub.

      Alternatively, you can install PP manually:

      • Portfolio Performance currently (March 2023) requires Java 17. If not already available (example for Debian-related systems, such as Ubuntu):
        sudo apt install openjdk-17-jre\n
      • Download and unpack the GZIP archive (either for x86_64 or aarch64) to a suitable location, e.g. /opt
      "},{"location":"getting-started/installation/#github","title":"Github","text":"

      The installer files are in fact stored in the author's github repository. So, you can also download the program from this repository. If you ever should need a previous version, this is also the place to be (click on the version number at the left side).

      Figure 3. Github repository for downloading (previous) releases

      You can edit and compile the source code; see Contributing to Portfolio Performance.

      "},{"location":"getting-started/installation/#updating-the-software","title":"Updating the software","text":"

      After the first installation, the program will check on each start-up for new updates and install these automatically (see figure 1). You can change this setting with the menu Help > Settings > Updates > Check for updates on start.

      Figure 4. Automatic updating with newer version

      Also, you can update manually with the menu Help > Check for updates ....

      "},{"location":"getting-started/manage-portfolio/","title":"Manage your portfolio","text":"

      If you've been following the steps outlined in the \"Getting Started\" chapter, you'll likely have noticed that your portfolio is still devoid of any securities. As of now, you haven't made any purchases. In the chapter Concepts we have covered the fundamental transactions of Buy, Sell and receive Dividends. Now, let's explore a possible workflow for effectively managing your investment portfolio.

      There are three possible scenarios to consider, each with its own approach. The simplest one, of course, is starting from scratch.

      1. Starting from scratch. You're beginning your investment journey with an empty portfolio. Apart from elementary strategic decisions about investment goals, risk tolerance, and time horizon, you need to instruct your broker or bank to acquire some securities. Then, you can enter these transactions into PP.

      2. Reconstructing your current portfolio based on past transactions. You have already made some investments in the (far) past, and you need to reconstruct your current portfolio based on past broker or bank statements. Probably, you also need some financial data, such as historical prices or merger data. Depending on how far you would go back, this can be a very challenging task.

      3. Beginning your portfolio management today with an initial valuation. Starting your portfolio management from today involves assessing your current financial situation. Start with the list of your securities and enter for each of them a buy transaction as of today. Of course, you loose some valuable info and the performance calculations aren't reflecting the real performance of your assets.

      "},{"location":"getting-started/manage-portfolio/bonds/","title":"Managing bonds","text":"

      A bond is a financial instrument that represents a debt obligation. When an entity, such as a government or corporation, issues a bond, they are borrowing money from investors. In return, they promise to pay back the principal amount along with periodic interest payments over a specified period [1]. Bonds are not well-supported in PP but with a few simple workarounds mentioned in the German forum, you could manage them effectively.

      "},{"location":"getting-started/manage-portfolio/bonds/#adding-the-bond-as-a-security","title":"Adding the bond as a security.","text":"

      Let's assume you've purchased a Volkswagen bond. You received the following banknote as shown in Figure 1.

      Figure 1. Banknote of buying a bond.

      Before you can add the buying transaction, you must create the security in the Securities account. Searching for the ISIN in PP does not yield any results, and searching by name returns the tradable Volkswagen shares. Therefore, you'll need to create an empty instrument and manually input the information for the bond. Historical prices for bonds are not as critical, but -if necessary- they can be obtained in table format from for example the ariva.de website . Keep in mind that the historical prices for bonds are represented as percentages, ranging from 0 to 100.

      "},{"location":"getting-started/manage-portfolio/bonds/#recording-the-buy-transaction","title":"Recording the buy transaction","text":"

      Since historical prices are represented as numbers from 0 to 100, you can use this format also for the buying price. At maturity date, the bond will value 5000 EUR with a price of 100%. In terms of shares and quotes, this means 100 shares x 100 EUR. However, you buy the security at 91.76%. The Gross Value becomes 50 x 91.76 EUR = 4588 EUR. Fees and taxes can be registered as usual.

      The bond depicted in Figure 1 matures on October 1, 2027, with an annual interest rate of 2.25%, payable each year on October 1. Since you acquired the bond on October 27, there have already been 26 days of accrued interest. At a rate of 2.25%, this amounts to 5000 EUR * 2.25% * 26/365, or 8.10 EUR. You have to pay this accrued interest at the purchase date, but you will get it back on the first interest payment on October 1, 2023.

      To process the accrued interest correctly, there are a few options; (see discussion on forum for a few variants).

      1. Adapt the buying price. In case of the example in Figure 1, the buying price becomes 4588 EUR + 8.01 EUR accrued interest divided by 50 or 91.92 EUR. The disadvantage is that the price evolution and the performance calculation is not correct.

      Figure 2. Workaround with adaptation of quote price to incorporate accrued interest. 2. To maintain a precise record of the purchase price, you could record the accrued interest as an additional tax (see Figure 3). The correct amount will be withdrawn from the deposit account. The quote price is correct. The 'false' taxes could be corrected at the first interest payment with a Tax refund transaction.

      Figure 3. Workaround with adding accrued interest to taxes. 3. The buy transaction of the bond security is recorded without the accrued interest. To handle the accrued interest, you transfer the correct amount (8.01 EUR), from the deposit account associated with the security to a separate deposit account. During the first interest payment, the accrued interest amount then is transferred back to the original deposit account associated with the security.

      "},{"location":"getting-started/manage-portfolio/bonds/#recording-the-interest-payment","title":"Recording the interest payment","text":"

      You can record the interest payment with a \"Transaction > Interest\" transaction in the menu. Unfortunately, you cannot specify the security from which the interest originated; only a deposit account. It's an aggregate account for all interest payments, and there is no way to attribute that interest payment back to the performance of that specific security.

      A better, albeit somewhat unintuitive, is to record the transaction as a Transaction > Dividend. Dividends are associated with specific securities, ensuring that the performance calculation of the security remains accurate.

      What about the first interest payment? Depending on the selected option from above:

      1. The accrued interest is fully booked as a dividend (see Figure 4). The accrued interest (for the seller) on the purchase date (8.01 EUR) has already been accounted for in the recorded purchase price.

      Figure 4. Interest payment 2.25% of 5000 EUR. 2. The interest payment (112.50 EUR) is reduced by the amount that was already recorded as tax on the purchase date (8.01 EUR). With a Tansaction > Tax refund that amount is refunded. 3. The interest payment is reduced by the amount that was transferred to a separate account. The accrued interest amount then is transferred back to the original deposit account associated with the security.

      "},{"location":"getting-started/manage-portfolio/buy/","title":"Recording a Buy transaction","text":"

      When you receive a notification from your bank or broker detailing a transaction, as shown in Figure 1, you need to record this transaction in PP. If it's on paper, you must do this manually. Otherwise, you can attempt to import the transaction.

      "},{"location":"getting-started/manage-portfolio/buy/#transaction-with-one-currency","title":"Transaction with one currency","text":"

      The transaction in Figure 1 involves only one currency. Both the Security and the Deposit Account use the same currency (EUR). There is no need for currency conversion.

      Figure 1. Paper note from your bank regarding your buy transaction.

      With this note, you can enter the transaction details into PP. Figure 2 displays the input panel for entering the information. The security (Heidelberg Materials) is quoted in EUR and the transaction is handled with the broker-1 security account and the broker-1 (EUR) deposit account. The example of the sell transaction involves a more complex setup with a security quoted in USD, but the transaction handled through a deposit account in EUR.

      Figure 2. Buying a security (EUR) through a deposit account (EUR).

      • Security : You can select the security from a drop-down. If a particular security was already chosen before initiating the transaction, this info will be pre-filled. Please note that the currency is automatically filled in because each security has a reference currency, which is set during creating the security. The list of all available securities can be found in the sidebar under Securities > All Securities
      • Securities Account : choose from the drop-down menu or leave it pre-filled if you started from a securities account.
      • Deposit Account: Select from the drop-down menu or leave it pre-filled with the account related to the security. If the currency of the chosen deposit account differs from the security currency, you'll need to convert the Gross Amount and Fees and Taxes, requiring an Exchange Rate. See the example with the sell transaction.
      • Date of transaction: You can pick this date from a calendar or enter it manually (format = YYYY-MM-DD). On the right (00:00), you can input the transaction time. The choice between a 12-hour or 24-hour clock is determined by the menu setting Help > Preferences > Language > Country. For instance, the UK uses a 12-hour clock (with AM and PM), while Belgium uses a 24-hour clock.
      • Shares: the number of securities that you buy or sell. This can be a decimal number.
      • Quote : This is the price you paid for one share. If the security includes historical prices (see adding securities), the correct price for the given date will already be filled in. However, this historical price may not match what your bank provides, as it is based on end-of-day prices, whereas the bank uses real-time information.

      The above six fields are mandatory for completing the transaction. Most of these fields are pre-filled based on the selected security. The following fields are either calculated or optional.

      • Gross Value : This is the result of multiplying Shares by Quote. If you later change the Gross Value, the Quote Price will be adjusted accordingly to maintain the equation Shares * Quote.

      • Fees and Taxes : A purchase transaction typically incurs fees and taxes. These may be in the currency of the security and/or deposit account (see selling for an example).

      • Debit Note : This is the amount you need to pay as a result of this buying transaction. It is calculated as Shares * Quote + Fees + Taxes. Other terms for this are Value or Net Value.

      • Note : You can add a textual note to each transaction.

      The typical flow for entering this information is likely to be Shares * Quote (price) >> Gross Value + Fees + Taxes >> Debit Note. There are a few nuances if you make changes afterward (see Figure 3).

      Figure 3. Calculation flow between Shares and Debit Note.

      • Changing the Debit note (afterward) will modify the Gross Value, and consequently, the Quote Price will be adjusted. The number of shares remains unchanged.
      • Changing the Gross Value afterward will alter the Debit Note and the Quote Price. Fees, taxes, and the number of shares are unaffected.
      "},{"location":"getting-started/manage-portfolio/buy/#transaction-with-two-currencies","title":"Transaction with two currencies","text":"

      If you want to purchase shares in a foreign currency, there are two options. Either you have the required amount in the foreign currency in a deposit account. Or, you'll need to make a deposit or convert another currency into the foreign currency first.

      Figure 4 displays the bank's paper note regarding the purchase of USD shares. Since taxes and fees need to be settled in EUR (due to it being a European bank), and the portfolio's base currency for reporting is also EUR, the total amount in USD is also converted to EUR.

      Figure 4. Paper note of a Buy transaction of a share in a foreign currency.

      From the note, it isn't quite clear which deposit account (EUR or USD) is used. Recording this transaction in PP however is quite straightforward. Figure 5 shows the transaction done with a USD deposit account. Figure 6 is a little more complex because a EUR deposit account is used; so a conversion should be made (EUR --> USD).

      Figure 5. Buy transaction of a USD security with a USD deposit account.

      Figure 6. Buy transaction of a USD security with a EUR deposit account.

      The quote price and the USD/EUR exchange rate are automatically filled in based on the entered date. However, please note that real-time prices are not available. The entry form in PP also provides the additional option to record fees and taxes in the foreign currency.

      Remember: good practice requires making a deposit beforehand, either in USD (for the transaction in Figure 5) or in EUR (Figure 6). Failing to do so will result in a negative balance.

      "},{"location":"getting-started/manage-portfolio/delivery/","title":"Recording a Delivery","text":"

      A Delivery (Inbound) transaction is akin to a Buy transaction, but it does not involve a decrease from a deposit account. It is as if the securities are acquired by magic, without any prior cash transaction. This could be the case for example when inheriting some securities. You also need a Delivery (Inbound) transaction when setting up your portfolio at a later date than the original purchases, without willing or being able to register all past transactions (see third option in Manage your portfolio). Figure 1 compares a Buy and Delivery transaction for the same acquisition.

      Figure 1. Delivery (Inbound) versus Buy transaction.

      You can record a transaction in a foreign currency by selecting the relevant currency from the drop-down menu. Additionally, it's feasible to record a transaction in a currency different from the security's default currency. An exchange rate will be suggested.

      A Delivery (Outbound) transaction is similar to a Sell transaction, but -again- it does not affect a deposit account. The cash that would typically come back from the Outbound Delivery appears to vanish and isn't accounted for in any deposit account. Figure 2 illustrates a Delivery (Outbound) transaction involving Adobe stock (USD) but recorded in EUR.

      Figure 2. Delivery (Outbound) of a USD security in EUR currency.

      Although the Value of Outbound Delivery, fees, and taxes are not recorded in a deposit account, they can still impact the performance calculation.

      "},{"location":"getting-started/manage-portfolio/deposit/","title":"Making a Deposit","text":"

      To initiate a deposit in a specific currency, navigate to the Transaction > Deposit menu. Ensure that the chosen account shares the same currency as the deposit. For transferring funds between accounts, whether in the same currency or different currencies (utilizing exchange rates provided by the ECB), employ the Transaction > Transfer between Accounts command.

      "},{"location":"getting-started/manage-portfolio/deposit/#making-a-deposit","title":"Making a Deposit","text":"

      Recording a deposit is a straightforward process (see Figure 1). Input the deposit account, transaction date, amount, and optionally, an accompanying note.

      Figure 1. Making a provision for the Heidelberg buy transaction.

      Please be aware that a deposit contributes to certain performance metrics. Additionally, note that each security purchase corresponds to a reduction in a deposit account. If the account balance is insufficient, the deposit account's balance may become negative.

      "},{"location":"getting-started/manage-portfolio/deposit/#transfer-between-two-currencies","title":"Transfer between two currencies","text":"

      You can transfer funds between two accounts, whether they share the same currency or not. In cases where the accounts have different currencies (see Figure 2), PP will automatically suggest an exchange rate based on the ECB website.

      Figure 2. Converting from EUR to USD.

      "},{"location":"getting-started/manage-portfolio/dividend/","title":"Dividend","text":""},{"location":"getting-started/manage-portfolio/dividend/#dividend-transaction","title":"Dividend transaction","text":"

      Recording a dividend is similar to recording a buy or sale transaction, except that Quote price is replaced with Dividend payment per shares (see Figure 1). The number of shares is automatically determined based on the entered date.

      Figure 1. Recording a dividend (same currency).

      There isn't a dedicated function for recording a \"Dividend Investment Plan\" (DRIP). One workaround is to record all dividends in full and then proceed with a purchase of the agreed-upon number of shares.More information at Reinvesting dividends.

      "},{"location":"getting-started/manage-portfolio/sell/","title":"Selling Securities","text":"

      The selling transaction is very similar to the buying transaction. Here as well, you can record the transaction's outcomes in an account with the same currency or a different currency. In the latter scenario (see Figure 1), upon selecting the foreign account (e.g. USD), three new fields become available: exchange rate (XR), USD fees, and USD taxes.

      "},{"location":"getting-started/manage-portfolio/sell/#selling-a-single-buy-security","title":"Selling a single buy security","text":"

      In the demo portfolio, we've purchased the Adobe stock only once (10 shares). All those shares have of course the same price, so it doesn't matter which specific ones are sold in the case of a partial sale.

      Figure 1. Selling a USD security through an EUR deposit account.

      In Figure 1, the share is quoted in USD, and consequently, the Gross Value is also calculated in USD. However, since you intend to record this transaction in a EUR account, this USD value needs to be converted. As soon as you choose a deposit account with a different currency, the exchange rate field (e.g., 0.9491) is automatically filled with the correct exchange rate for that specific date and currency. This information is obtained from the European Central Bank (ECB) website. You can also consult it through the menu View > Currencies > Currency Converter.

      Changing the date afterward will adjust the exchange rate (XR) appropriately, even if you've manually entered an XR. Therefore, it's considered good practice to set the transaction date first.

      You have the flexibility to input fees and taxes in both currencies. The foreign fees and taxes are automatically converted using the same exchange rate as above. There isn't a subtotal in the local currency, so the Credit Note amount isn't a simple sum of the numbers above.

      The calculation flow remains consistent with Figure 3 in the buying page. For instance, modifying the Credit Note will subsequently adjust the Gross Value in EUR, which, in turn, impacts the Gross Value in USD (XR remains unchanged), and finally, the Quote price.

      "},{"location":"getting-started/manage-portfolio/sell/#selling-a-multiple-buy-security","title":"Selling a multiple buy security","text":"

      In your portfolio, some effects may have been purchased multiple times at different prices (see Figure 2 for an example). What happens when you partially sell that share?

      Figure 2. Multiple transaction on the same security.

      Do those shares come from the first or second series that you purchased, or from a combination of both? For the actual sale, it doesn't matter. In the example from Figure 2, 40 shares were sold at a price of 72.48 EUR. But how are the remaining shares valued? PP follows the FIFO principle (First In, First Out). So, the 40 shares that are sold come entirely from the first purchase. What remains are 10 shares from the first batch and 30 shares from the second batch. Another possibility would be LIFO (Last In, First Out). In that case, 10 shares from the first batch would remain, and none from the second batch. Does this make a difference? In this particular case, the stock is valued lower in the FIFO approach.

      FIFO: average price of the remaining 40 shares = ((10 * 58.82) + (30 * 39.60)) / 40 = 44.05 EUR

      LIFO: average price of the remaining 40 shares = ((40 * 58.82) + (00 * 39.60)) / 40 = 58.82 EUR

      "},{"location":"getting-started/reports/performance/","title":"Performance Dashboard","text":"

      Naturally, your portfolio's performance is a top priority for you and PP, which is why the software is named as such. Key performance indicators are summarized in a dashboard, that can be accessed through the menu View > Reports > Performance or with the sidebar (see figure 1).

      How is your demo portfolio doing? Set the Reporting period to a 3 year period; e.g. from June 12, 2020 until 2023.

      Figure 1. Dashboard with key performance indicators.

      Note

      The key and risk indicators consider the whole portfolio by default. However, you can narrow down the calculation to specific accounts or securities by right-clicking the indicator label and choosing a different data series.

      Let's skip the first two key indicators and focus on the simpler ones first. The Absolute Change is 426.82 EUR. Take a look at the Calculation panel on the right side. The initial value of your portfolio as of June 12, 2020 was zero EURO and the final value is 426.82 EUR, which, of course, equals the absolute change. You can check the final value with sidebar > Reports > Performance > Calculation. Click at the Assets at End heading tab. As you can see, there is 125 EUR in the deposit account from the dividend and sell transactions. share-1 is valuated at 190.06 EUR (10 shares remaining x 19.06) and share-2 at 111.76 (8 shares x 13.97). Taken together, this sums to 426.62 EUR, which represents the market value of your portfolio on June 12, 2023.

      The Delta (for reporting period) is 120.82 EUR. This value represents the actual return of share-1 and share-2. The final portfolio value of 426.82 EUR is partly caused by external cash inflows of 155 EUR and 84 EUR to buy share-1 and 67 EUR to buy share-2. This money comes from an external source and should be subtracted from the Absolute change. They are summarized as Performance neutral Transfers in the calculation panel.

      The Absolute change of the Last Day is negative (red). It remains the same for each reporting period. Hovering over the label gives some info. This value is the absolute change for a Reporting period of 1 trading day. Unfortunately, it's not the last day of the chosen reporting period; e.g. 11-12 Jun 2023, but the last trading day before 'today'.

      What about the True Time-Weighted Rate of Return (TTWOR) and the Internal Rate of Return (IRR) indices? The IRR is a percentage that shows how well your portfolio performs, considering when and how much money you have put in or take out. TTWOR measure the growth of your investments without being influenced by the timing and size of your contributions or withdrawals. An in-depth explanation of both measurements is given at Concepts > Performance

      How should you interpret the difference between the two measures? If you look at the chart of historical prices of share-1 and share-2, it is immediately evident that the timing of purchase and sale was rather optimal.

      ???? When the Time-Weighted Rate of Return (TWR) is larger than the Internal Rate of Return (IRR), it typically means that you have successfully timed your buys and sells to take advantage of favorable market conditions. In this scenario, your investments have experienced significant growth due to buying low and selling high, which boosts the TWR. The TWR measures the performance of your investments over different time periods, and it doesn't consider the size and timing of your contributions or withdrawals. If these investments were made at opportune moments, it could lead to a TWR that appears more favorable compared to the IRR, which accounts for cash flows and their timing. This demonstrates your skill in making well-timed investment decisions, which can result in a higher TWR. The calculation is

      • Suppose you invest $100 in a portfolio that grows by 10% in the first year and 20% in the second year. Your TWR for the two-year period is (1.1 x 1.2) - 1 = 32%.
      • However, if you withdraw $50 at the end of the first year and reinvest it at the beginning of the second year, your IRR for the two-year period is only 15%. This is because your IRR reflects the timing and size of your cash flows, while your TWR does not. To calculate the IRR, you need to find the discount rate that makes the net present value of your cash flows equal to zero. In this case, the equation is: -100 + 50 / (1 + IRR) + 120 / (1 + IRR)^2 = 0. Solving for IRR, you get 0.15 or 15%.

      You can see that the IRR is much lower than the TWR because you withdrew money when the portfolio was doing well and reinvested it when the portfolio was doing even better. This means you missed out on some of the portfolio\u2019s growth potential.

      By default, this dashboard contains three widgets (panels): Key Indicators, Risk Indicators, and Calculation. Right mouse click on an empty space of the canvas lets you add more widgets (see later).

      "},{"location":"getting-started/reports/performance/#key-indicators","title":"Key Indicators","text":""},{"location":"getting-started/reports/performance/#true-time-weighted-rate-of-return-cumulative","title":"True Time-Weighted Rate of Return (cumulative)","text":"

      The True Time-Weighted Rate of Return (TTWROR) is a financial metric used to evaluate the performance of your portfolio over time, eliminating the effects of cash flowing in or out of the portfolio.

      "},{"location":"getting-started/reports/performance/#internal-rate-of-return-irr","title":"Internal Rate of Return (IRR)","text":"

      The Internal Rate of Return (IRR) is a financial metric used to evaluate the potential profitability of an investment or project.

      "},{"location":"getting-started/reports/performance/#absolute-change","title":"Absolute Change","text":"

      The difference between the initial investment and the current value of the investment.

      "},{"location":"getting-started/reports/performance/#delta-for-period","title":"Delta (for period)","text":"

      The difference between the value of the portfolio at the beginning of the period versus the end of the period.

      "},{"location":"getting-started/reports/performance/#risk-indicators","title":"Risk indicators","text":""},{"location":"getting-started/reports/performance/#maximum-drawdown","title":"Maximum Drawdown","text":""},{"location":"getting-started/reports/performance/#maximum-drawdown-duration","title":"Maximum Drawdown Duration","text":""},{"location":"getting-started/reports/performance/#volatility","title":"Volatility","text":""},{"location":"getting-started/reports/performance/#semivariance","title":"Semivariance","text":""},{"location":"getting-started/reports/performance/#last-day","title":"Last day","text":""},{"location":"getting-started/reports/performance/#true-time-weighted-rate-of-return-cumulative_1","title":"True Time-Weighted Rate of Return (cumulative)","text":""},{"location":"getting-started/reports/performance/#absolute-change-absolute-verandering","title":"Absolute Change (Absolute verandering)","text":""},{"location":"getting-started/reports/performance/#calculation","title":"Calculation","text":"

      With the icons (top right), you can - Duplicate, Rename or Delete a Dashboard view - Create a New Dashboard view - Set the period (1 year, 2 years, ...) - Create a New Column (gear icon)

      "},{"location":"getting-started/reports/statement/","title":"Statement of Assets","text":"

      The Statement of Assets report provides a snapshot of your portfolio's assets (securities, accounts) at a specific point in time. The default date is the current day. You can choose a different date with the \"Time machine\"; the calendar icon at the top right. Figure 1 lists all transactions of the demo-portfolio up to October 5, 2023. Figure 2 displays the Statement of Assets report as of this date.

      Figure 1. List of All transactions of demo portfolio (2023-10-05)

      In addition to the purchase of share-1, share-2, and bond-1, there is also a sale of a portion of share-1. In this latter transaction, no deposit is made, and the proceeds from the sale remain in the deposit account.

      Figure 2. Statement of Assets report of demo portfolio (2023-10-05)

      The report in Figure 2 displays all the available assets on October 5, 2023, including the deposit account with the result of the sale of share-1. The securities are valued at their market prices based on the closing quotes from the previous day, which is -in this case- October 4, 2023. Share-2 is handled in USD. The conversion to EUR is based on the exchange rate provided by the ECB on October 4, 2023 (closing previous day).

      The report displays a total line above and below the assets. With the Presentation option (see Figure 3 bottom), you could add or remove the Total lines. The default setting is above and below. Since no taxonomy has been added to the demo portfolio, all assets are listed as Without classification.

      "},{"location":"getting-started/reports/statement/#available-columns","title":"Available columns","text":"

      Figure 3. Available columns. The default columns that are displayed are Shares, Name, Symbol, Quote, Market Value, Share in %, and Note. Many more columns/fields are available (see Figure 3). While the column headings are mostly self-explanatory, a few of them may require further clarification. You can customize the default columns using the gear icon located in the top-right corner (see Figure 2).

      The abbreviation \"MA\" that follows Purchase Price/Value stands for \"Moving Average\" but in fact it should be better called WA or \"Weighted Average\". As mentioned in the discussion about Purchase Value, PP uses the FIFO (First-in, First-out) method to calculate prices and values. \"Moving/weighted average\", however, is another commonly used method.

      The Purchase Price and the Purchase Price (MA) of share-1 are respectively 44.41 EUR and 51.61 EUR; a rather big difference. Why? From Figure 2:

      • Purchase of 50 shares at 58.82 EUR on December 14, 2020.
      • Purchase of 30 shares at 39.60 EUR on September 29, 2022.
      • Sale of 40 shares at 72.48 EUR on September 28, 2023.

      What is the Purchase Price of the remaining 40 shares in the portfolio?

      • The moving/weighted average method states that the average price of the original 80 shares was ((50 x 58.82) + (30 x 39.60))/80 = 51.6125 EUR. The remaining 40 shares are valuated at this price.
      • The FIFO method asserts that the remaining 40 shares are composed of 10 shares of the first purchase and 30 shares of the second purchase. The average price is thus ((10 x 58.82) + (30 x 39.60))/40 = 44.405 EUR.

      The available fields under Performance and Dividends are discussed in a separate chapter.

      With the Attributes option, you can add custom fields to the table. These fields are defined in left sidebar > settings > Attributes: Securities and following panels. You can enter a specific attribute value for a security in the Additional attributes panel of the security (see for example, Figure 3 in Getting started > Adding securities)

      The Forex (Foreign Exchange) option allows you to view the currency of the quote for each asset and its exchange rate relative to the base currency of the portfolio. The fields labeled as Market value**, Purchase Price**, and Profit/Loss** retain the same meaning as their counterparts in the base currency, but they are presented in the foreign currency.

      For instance, let's consider share-2, which is traded in USD. In the default view, the Market Value is expressed in EUR. If you wish to view that value in USD instead, you can achieve this by adding the Market Value** field.

      The Distance to SMA is a metric that measures the difference between the current price of a share and the average price of that share over a specified number of past days. The acronym \"SMA\" presumably represents \"Simple Moving Average.\"

      When you choose to include this column, you'll also need to specify a period, such as 5 days, 20 days, 50 days, or 200 days. Suppose that you want to know the \u0394 to SMA5 (Distance to SMA for a 5 days period) of share-1. The last 5 available prices are: 71.96, 72.00, 72.42, 73.52, and 74.50 EUR; including the latest available on October, 5 (= 71.96 EUR). The calculation is carried out as follows:

      1. Calculate the average price of the last 5 days, including today = (71.96 + ... + 74.50)/5 = 72.88 EUR.
      2. Calculate the difference of today's price with the average price = 71.96 - 72.88 = -0.92 EUR.
      3. Divide this difference by the average price and convert to a percentage = -0.92/72.88 = -1.26%. The current price (October 5) is 1.26% lower than the average price of the last 5 days.

      Distance to ATH (All Time High) is a likewise metric that shows how far the current price is from the highest price in the specified period. For example, the highest price of share-1 in the last year was 77.4 EUR. The current price is 71.96 EUR. So the \u0394 ATH 1 year (Distance to ATH for a 1 year period) is equal to (71.96 - 77.4)/77.4 or -7.03%.

      # Available views

      Using the Reset Columns option in Figure 3, you can revert to the default arrangement of columns. It's advisable to keep this layout as the Standard view, which is represented by the first button at the top (see Figure 1). By clicking the triangle icon next to the button, you can access options to rename, duplicate, or delete the current view.

      If you find yourself needing a custom layout regularly, you can duplicate the standard view, give it a new name, and customize it to your preferences. Additionally, there is a New View button available to create a new view based on the default setup.

      To the right of the New button, there is a currency selection button. It should be labeled with the base currency of the portfolio, but you have the option to choose other currencies. All calculated fields such as Market Value are then converted to the selected currency.

      The Filter icon located in the top right corner allows you to filter the assets that will be used in the calculations. You have several options:

      1. You can select the entire portfolio.
      2. You can choose only one security account.
      3. You can select the security account along with the associated deposit account.

      Additionally, you have the option to create a custom filter. To do this, you will need to make a selection from all the available assets within the portfolio.

      "},{"location":"getting-started/reports/statement/chart/","title":"Statement of Assets - History","text":"

      Using the menu View > Reports > Statement of Assets > Chart or the sidebar, you can generate a graphical representation of your assets performance over time. The y-axis displays the total value of your assets, denominated in the portfolio's default currency (1k = 1000 units of the portfolio currency). You can change the scale of this axis by scrolling with the middle mouse button. Hold the mouse position at the value (e.g. 4k) where you want to increase or decrease the scale around. The x-axis represents time, and you can select the desired time period using the dropdown menu in the top-right corner. By default, the periods of 1 year, 2 years, 3 years, 4 years, 6 years, and the previous day are available. Additionally, you have the option to create a custom time period using the 'New' feature; see Reporting Period for a description.

      Figure 1. Chart of the Total value of the demo portfolio.

      By default, two data series are displayed: 'Transferals' (primarily deposits) and 'Total' (which includes transferals). When you left-click the canvas and hold the mouse down on a specific day, for example, March 28, 2022, a dialog box will appear, displaying detailed values for all data series on that day. Right-clicking on the chart canvas provides additional options (see Figure 1).

      • Crosshair: A large crosshair appears above the chart when you left-click the canvas. The origin is at the mouse position of the click. The exact value of a certain point of the data series is then easier to read.
      • Measure distance: Select this option if you want to determine the exact number of days between two points on the chart. It also displays the difference in value and the corresponding percentage between the two points.
      • Adjust range: 0.
      • Various navigation options with their respective shortcut keys, such as Zoom In (Ctrl+Arrow Up), Scroll Up (Arrow Up), and more.
      • Save diagram: This feature allows you to save the visible chart as a PNG or JPG image on your computer.

      Right-clicking on the legend icons (for example, the blue and red squares from Figure 1) will give you access to additional formatting options. For all types of data series and their legend entries, you can modify the Color, Position (Send backwards, Send to back or Bring forward, and Bring to Front)), and Sort (A-Z or Z-A). The latter two options will reorganize the legend entries accordingly. In the case of a line-type data series like the Total value, you can also adjust the Line Style (solid, dash, dot, ...), and the Show Area option (which fills the area below the data series). Additionally, you have the choice to either hide (the legend entry is visible but the data series is not displayed in the chart) or remove the series (both the legend and data series are removed from the chart).

      Figure 2. Dataseries for chart.

      With the gear icon (top right) you can display additional data series to the chart. Remember that in the demo-portfolio, we have two brokers; where broker-1 has two deposit accounts (EUR and USD). Broker-2 has only one EUR-deposit account.

      With the Accounts and Portfolios option, you can choose to display specific combinations of accounts, such as broker-1 along with its USD deposit account. Select the appropriate option and hold Ctrl to add more selections. Once you've added a data series, it will no longer appear in the list of available data series in Figure 2, but you'll find it checked in the gear menu. You can remove a data series from the chart by unchecking it in the gear menu or by deleting it from the legend (as explained above). If you remove all data series, the chart will revert to its default view with Total and Transferals as the data series.

      The Common option in Figure 2 will display some additional info.

      • Delta (for reporting period or since first transaction): represents how much the portfolio's value has increased or decreased for the reporting period or since first transaction until today. This Delta will fluctuate around zero, for example for the first transaction day the delta will be zero. The chapter on Reporting Period explains that the valuation of a portfolio can differ according to the selected Reporting Period.
      • Dividends, Fees, Interest, Interest Charge, and Taxes are available with an accumulated and 'instance' version. These fields are described in Transactions and are recorded as part of each transaction.
      • Earnings: the sum of dividends and interests.
      • Invested Capital (for reporting period or since first transaction): the term \"invested capital\" refers to the total amount of money that an investor has used to purchase various securities, such as stocks, bonds, or other financial instruments. It includes the initial purchase price of the securities, additional investments made over time, and other factors such as fees, taxes, ...
      • Total: the total value of the portfolio valuated over time.
      • Transferals: each Deposit or Removal is represented by a very small spike (positive or negative) on the day that the transferal was made.

      With securities, you can make a graph of each separate or combination of securities in your portfolio, for example share-1 or share-1 + bond-1.

      In the default configuration, the Standard view only includes two data series: Total and Transferals. However, you have extensive customization options, as mentioned earlier. Using the dropdown menu, you can Duplicate, Rename, or Delete this view. You can also create a new view by clicking on the New icon, located in the top right corner between the Standard and Period options. Similar to the existing one, you can duplicate, rename, or delete your newly created view. If you wish to have this view as the leftmost view, select the Bring to front option from the dropdown menu.

      "},{"location":"getting-started/reports/statement/holdings/","title":"Holdings","text":"

      A visual representation of the total value of the portfolio divided into categories such as different accounts is given by the Holdings chart (menu View > Statement of Assets > Holdings or with the sidebar). A doughnut chart displays the proportion of different accounts within the total, with the entire doughnut representing 100%.

      Figure 1. Doughnut chart of the total value of portfolio.

      Hovering the mouse pointer over a segment of the doughnut chart reveals the following account details: name, percentage, number of shares, current share price, total value in the portfolio currency. In the case of a deposit account, the number of shares is fixed at one (see Figure 1).

      Positions with negative values, such as a deposit account with a negative balance, are not displayed. By not displaying positions with negative values, the chart's percentages may be inaccurate. An error message alerts users to this situation.

      With the filter icon (top right), you can show the entire portfolio or only a few combinations of accounts; for example broker-1 with or without its associated deposit account broker-1 (EUR). You can create a new filter, rename or remove existing ones.

      For a portfolio with a large number of securities, the chart can become unreadable, and it's advisable to implement a filter.

      "},{"location":"how-to/","title":"How-to","text":"

      This chapter outlines various standard procedures and workflows such as importing data. However, there are situations where you might come across more complex tasks or when the program functions in its own unique way. Therefore, we've added some tips and tricks, with many of them initially discussed on the PP forum. It's worth noting that a significant portion of the information on the forum is in German, but you can utilize your browser's Translate function to comprehend it in your preferred language.

      • Importing CSV Files: At times, you may receive a CSV file from your broker containing all the transactions from the previous month. How do you go about importing this data into PP?

      • Reinvesting Dividends: Reinvesting dividends involves using the profits from an investment to acquire more shares of the same asset, instead of opting for cash payouts. What considerations should you take into account when faced with this choice?

      • Importing Fund Data from Morningstar: Downloading historical prices from the Morningstar website is a straightforward process, but understanding the steps is crucial.

      • Directly Edit the XML File to Add the Quote Feed: Learn how to use a text editor to seamlessly incorporate the Quote Feed.

      "},{"location":"how-to/copy-securities/","title":"Copy securities between portfolios","text":"

      To copy a security between portfolios, you must arrange the two portfolios side by side. (see Figure 1).

      Figure 1. Side-by-side display of two portfolios.

      After opening two or more portfolios, they are displayed in the portfolio bar located just below the menu bar. The active portfolio, typically the last one opened, is easily discernible. To switch between portfolios, you can select the corresponding tab in the portfolio bar.

      However, for tasks like copying securities between portfolios, it's necessary to have both portfolios visible side by side. Securities cannot be directly dragged and dropped or copied and pasted between portfolios in the portfolio bar.

      To arrange portfolios side by side, choose one in the portfolio bar, click and hold the mouse to drag it to a new position. With two portfolios, you can position them either horizontally (left to right) or vertically (top to bottom). In Figure 1, the arrangement is left to right. This process can be repeated with multiple portfolios, allowing you to make more than two portfolios visible at the same time.

      For copying securities between portfolios, both portfolios need to be visible. Then, you can select a security from Portfolio A and drag it to the All Securities option in the side panel of portfolio B. There, you can drop the security to create a copy. Pay attention, as it's feasible to unintentionally create identical securities (e.g. two instances of share-1).

      It's important to note that dropping the security within the main top panel is not possible.

      "},{"location":"how-to/importing/","title":"Importing a CSV-file","text":"

      In PP you can enter your transactions (buy, sell, dividends, \u2026 ) manually but you can also import those transactions from a CSV file (comma-separated values) or from a PDF document. Not all brokers, however, provide the format that PP needs. So, how should this CSV-file look? Suppose, you want to import the following transaction.

      Figure 1. Buying transaction example for import

      As you can see in figure 1, the following PP fields are used: Security Name (share-2), the implied currency (USD), Securities Account (Broker-A), Deposit Account (Broker-A (EUR), Date & time, number of Shares (10), buying quote (5 USD), Gross Amount in USD (50), Exchange Rate (1.0785 EUR/USD), Gross Amount in EUR(46.36), Fees USD and EUR), Taxes (USD and EUR), Value or Debit Note (55.21), and a note (My Note). You don't have to provide all fields in the CSV-file; some of them aren't even possible e.g. implied currency and fees/taxes in the foreign currency.

      With the menu File > Import > CSV files (comma-separated values) you can import all kind of transactions. A CSV file is simply a text file. The first line contains the names of the fields (columns); separated by commas. The second and following lines contain the data, also separated by commas. For example, the following print-out of a CSV-file contains three fields or columns and two lines of data.

      Name,Type,Date,Value\nShare-1,dividend,2023-05-21,1500\nShare-2,buy,2023-06-01, 20\n

      PP distinguishes between 5 types of import: Account Transactions, Portfolio Transactions, Securities, Historical Quotes, and Securities Account (see figure 2). To correctly use a type and import the data into PP, the CSV file must contain specific fields. Depending on the type of account, there are other required and optional fields.

      Figure 2. Import dialog window with the 5 types

      The difference between each type is rather nebulous and not very good documented. The following definitions are tentative.

      • Account Transactions: will be used to register transactions within one account; for example the payment of a dividend (?)

      • Portfolio Transactions: for transactions between accounts. For example, the buying of a share involves adding shares to the Securities account and reducing the associated deposit account with money.

      • Securities: you can use this type to create securities in the All Securities account without also adding a transaction.

      • Historical Quotes: to create a table of historical quotes for a security.

      • Securities Account: with this type, you can create new securities within the All Securities account and at the same time a buy transaction in the All Transactions account.

      Each type has required and optional fields. For example, the Historical Quotes type only needs the Date and the Quote. Instead of repeating the name of the share again and again for each date, you can select the security in the next pop-up window. The Account Transactions type has two required Fields: Value and Date. The Portfolio Transactions has three required fields: Value, Date, and Shares (see figure 3).

      Figure 3. Required and optional fields for the 5 types of import

      "},{"location":"how-to/importing/#importing-buysell-transactions","title":"Importing buy/sell transactions","text":"

      An easy way to discover which fields you need, is to export a demo transaction first. After selecting the transaction in All Transactions, click the Export button at the top-right of the window (up-pointing arrow). Choose \u201cSelected transactions (CSV)\u201d. If you should open this CSV-file with a text editor, it will look something like this:

      Date,Type,Security,Shares,Quote,Amount,Fees,Taxes,Net Transaction Value,Cash Account,Offset Account,Note,Source\n2023-05-25 00:00:00,Buy,share-2,10,5.50,55.00,4.10,6.20,65.30,Broker-A,Broker-A (EUR),My Note,\n
      The first line contains the field names, separated by a comma. The second line contains the value of those fields. Notice that there is no value for the field Source. Unfortunately, the field names do not match with the required field names for the import nor with the labels used in the dialog box (e.g. Name vs Security Name, Net Transaction Value vs Value). Also, a new field is added (Type) but worse, a necessary field (Exchange Rate) is missing. Also, USD and EUR fees and taxes are added into a total amount in EUR.

      Importing this transaction again (after deleting the original one) will fail.

      In order to recreate the transaction of figure 1, you need at least the following fields. Restoring the split between USD and EUR fees and taxes seems to be impossible. You have to use the Portfolio Transactions type.

      Date,Type,Security Name,Shares,Fees,Taxes,Value,Exchange Rate\n2023-05-25 0:00,Buy,share-2,10,4.1,6.2,65.30,0.9091\n
      "},{"location":"how-to/importing/#importing-dividends","title":"Importing dividends","text":"

      Figure 4. Dividend transaction example for import

      Suppose that your broker can deliver a CSV-file with all the dividend payments from a past period. Of course, you would like to import this file in stead of entering manually all these dividend payments. The file content looks something like this (see figure 1 below).

      Figure 5. CSV table for importing two dividends

      Unfortunately, this is not enough information to use the Import CSV-function. From the three available columns of the CSV-file, two of them are recognized by PP: ISIN and Date (see figure 6). For the column Payment, you have to map this field to one of the PP fields. Because, it is a dividend you need to use the import type Account transactions. A dividend payment is a simple deposit transaction, which has no implications on the securities account.

      According to the pop-up message of figure 6, there are two required fields: Date and Value, of which the last one is unmapped. This is because the name that your broker uses (Payment) is different from the required name (Value). You can however, double click on the Payment column to choose the correct field name.

      Figure 6. Dialog box for importing dividends

      But how is PP able to recreate a dividend payment with only these two fields (date, value). It can't! You can only use this import to create a deposit in a Security and Cash account. If you want to create a dividend, you should also specify a type: Dividend. Specifying a number of shares or fees/taxes will also do the job.

      Of course, PP does also need the name of the Cash and Securities account. You can enter this in the next step of the wizard or you can specify it in the CSV-file.

      Let's take a simplified example (EUR-dividend in a EUR-cash account; see figure 7). The minimal info to register this dividend is:

      type, Date, ISIN, Value\ndividend, 2022-01-01, BE0974258874, 40\n
      + This will result in the following \"dividend\" transaction.\n

      Figure 7. Simplified buying transaction example for import

      Adding Fees and Taxes will calculate the Gross Amount. You cannot specify the Gross Amount in itself. Adding the number of Shares will calculate the dividend payment/share. It is also not possible to specify this in itself. So, a typical CSV-file for a dividend payment in the currency of the Cash account will look like:

      Type, Date, ISIN, Value, fees, taxes, shares\ndividend, 2022-01-01, BE0974258874, 200, 3, 2, 25\n
      "},{"location":"how-to/morningstar/","title":"Import fund data from Morningstar","text":"

      Info

      Best answer in forum from SimonFitz!

      The website of Morningstar is quite famous for its extensive list of funds. With some magic, you can download historical data for specific funds from this website.

      First go to the Chart page for the fund (or trust or EFT) on the Morningstar website; e.g. https://www.morningstar.co.uk/uk/. I will use the Baillie Gifford Positive Change Fund B Accumulation fund (ISIN GB00BYVGKV59) as an example.

      Remove any other benchmarks etc. the are charted (this is not necessary, but makes things easier). Open your browser's \"developer tools\" which is F12 in Firefox & Edge and probably other browsers as well. Go to the \"Network\" tab and press the clear button which looks like a bin; again, not necessary but makes things easier. Now press the \"chart settings\" button just above the chart, click \"display options\", and then click the \"percentage\" button - this switches the chart to show the actual fund price, rather than a percentage change, and handily for our purposes causes the Morningstar website to request a link that we can use in Portfolio Performance with a bit of modification. That link should display in the \"network\" screen of the browser's developer tools, so now right-click on the entry that comes from the \"tools.morningstar.co.uk 44\" domain and is of type \"json\" and select the Copy->Copy URL option. The link should be

      https://tools.morningstar.co.uk/api/rest.svc/timeseries_price/\nt92wz0sj7c?currencyId=GBP&idtype=Morningstar&frequency=daily&\nstartDate=2011-02-01&priceType=&outputType=COMPACTJSON&\nid=F00000ZB0M]2]0]FOGBR$$ALL&applyTrackRecordExtension=true\n
      You now need to change some options in the link and slightly simplify it as well so it becomes:
      https://tools.morningstar.co.uk/api/rest.svc/timeseries_price/\nt92wz0sj7c?currencyId=GBP&idtype=Morningstar&frequency=daily&\noutputType=JSON&startDate=2020-12-31&id=F00000ZB0M]2]0]\nFOGBR$$ALL\n

      You can go to this link in your browser if you want to see the data. There are 4 options worth highlighting: frequency which will give you daily prices, outputType gives you a style of JSON that Portfolio Performance can parse, startDate lets you choose how far back to go, and id is the Morningstar reference for the security - so change that value for any other ones you want to use. The order of the options doesn't matter, but I find it easier to put the id at the end for when I'm setting up multiple securities.

      Now in Portfolio Performance select JSON as the provider in the \"Historical Quotes\" tab of the security, and use the following values (see also figure 1):

      Feed URL = the link just created\nPath to Date = $.TimeSeries.Security[*].HistoryDetail[*].EndDate\nPath to Close = $.TimeSeries.Security[*].HistoryDetail[*].Value\n

      Figure 1. Example of JSON provider for historical quotes

      Always worth double-checking the displayed values against the Morningstar chart.

      "},{"location":"how-to/quote-feed/","title":"Hack data file to add default Quote Feed","text":"

      Adding securities through the GUI adds a Quote Feed but this is not supported by csv imports. You can hack the XML file directly with a text editor using a replace to add the Quote Feed.

      Warning

      This is totally not supported and can break your data file so backup your data file and test the changes.

      When the data file is updated it will look similar to the following with a YAHOO feed:

      <client>\n<version>51</version>\n<baseCurrency>AUD</baseCurrency>\n<securities>\n<security>\n<uuid>831d8a3e-7025-4b0f-b6ca-3ef5bf727eb4</uuid>\n<name>REA Group Ltd</name>\n<currencyCode>AUD</currencyCode>\n<tickerSymbol>REA.AX</tickerSymbol>\n<feed>YAHOO</feed>\n<prices>\n

      Use the text editor to search and replace:

      </tickerSymbol> \n<prices>\n

      with

      </tickerSymbol>\n<feed>YAHOO</feed>\n<prices>\n

      Any text editor that will work with end of line characters will work. For example, the image below shows the np++ Extended interface which uses a \\n as new-line and the groups of 4 spaces are important:

      Figure 1. Example of np++ replace to add the Quote Feed

      "},{"location":"how-to/reinvesting-dividends/","title":"Reinvesting dividends","text":"

      How do you book the reinvestment of a dividend? What about DRIP? A dividend is the payment of a part of the company's profit to its shareholders. Sometimes you can choose to receive this dividend in cash or in shares. But how should you register this latter share dividend.

      For example, at the annual general meeting of the NN Group, the shareholders approved a final dividend of EUR 1.56. The final dividend will be paid either fully in cash, after deduction of withholding tax if applicable, or fully in ordinary shares, at the election of the shareholders. The following example is about the choice dividend (300 shares) of a Dutch company, paid to a non-resident investor. The dividend is 1.56 EUR/share. The converting ratio is 1 new share for 29.43 old shares. The historical quote at the pay date is 45.91 EUR.

      • you choose for cash dividend. You receive the net amount of 278.46 EUR. 300 shares * 1.56 EUR = 468 EUR minus foreign taxes (15% or 70.2 EUR), minus fees (0 EUR), minus domestic taxes (30% or 119.34 EUR).

      • You choose for share dividend. You receive 10 shares at 45.91 and 5 cash dividends (6.63 EUR). You have to pay some fees (3.50 EUR) and domestic taxes (140.09 EUR).

      Theoretically, there is no difference between the two choices. 300 shares/29.43 * 45.91 ~= 300 shares * 1.56 EUR.

      In this example, the broker doesn't allow share fractions. So, you only receive 10 additional new shares (not 10.19 shares) for 295 old shares and a pay-out of the remaining 5 old shares dividend.

      The domestic taxes are much larger for the share dividend (30%) than if you should buy the shares from your cash account(0.35%) (140.09 EUR). Of course, if the dividends are paid in cash, then you would also have paid domestic taxes. Either way, the government receives the same amount.

      In this particular example, there is a small benefit because there are no foreign taxes (15%) in case of a share dividend.

      There has been a lot of debate about how to book these transactions in PP. My understanding of the proposed procedure is:

      • book the dividends for all shares without fees and taxes. These will be paid for in the following step. If your broker doesn't allow for share fractions, you can use one transaction for the share dividend part (e.g. 295 in the example) without fees & taxes and another transaction with taxes and fees for the cash dividend.
      • buy the allocated shares at the same day with the theoretical historical quote and the associated fees and taxes.

      Figure 1. Implementation in PP

      Please note that in this example the total outflow is much larger the inflow from the dividend payment. This is because the number of reinvested shares is calculated on the gross amount. So, all taxes and fees are in surplus of this choice dividend.

      "},{"location":"reference/","title":"Reference Manual","text":"

      The Reference manual is structured around the User Interface (UI) of the program, probably the easiest and quickest way for users, developers, or contributors to find relevant information. Figure 1 shows a typical opening screen of a small portfolio, e.g. demo-portfolio-04.

      Figure 1. Opening screen of the PortfolioPerformance program.

      Figure 1 illustrates the outcome of selecting the All Transactions view, accessible either through the side panel or the menu View > All Transactions. The last Buy transaction for share-3 is selected, prompting the display of a chart showing the historical quotes of share-3 in the lower panel. The following UI elements can be distinguished:

      • Menu bar containing five elements: File, View, Transaction, Online, Help. This menu bar is not context sensitive.
      • Open projects: you can open multiple projects simultaneously. The highlighted project is visible in the panels below. Projects marked with a star (*) preceding their name has been changed and should be saved before closing. It is possible to display two projects side by side in the UI.
      • The Side panel serves as a convenient shortcut for accessing various views within the project. All available options can also be accessed through the View menu. It's important to note that the list in the side panel mirrors the options available in the View menu, providing a one-to-one translation of the available views. The chosen view dictates the content displayed in the adjacent top and bottom panels. Next to the options Securities and Taxonomies, a very small (green) icon will let you add new elements.
      • Top panel: in the example of Figure 1, the top panel contains the All Transactions view. This is a list of all the transactions that you have made with your portfolio, such as deposits, withdrawals, buys, and sells. The default columns, such as date, type, security, ..., are initially visible. However, you have the flexibility to modify them using the Settings (cog) icon located in the top-right corner. Please, note that the icons in the top-right corner are specific to this view and may not necessarily appear in other views.
      • The Bottom panel follows the selection of the top panel. For example, selecting share-1 in the top panel will display the chart of this share in the bottom panel.
      • Divider bar: the area occupied by the top and bottom panels can be adjusted using the divider bar. You can drag the divider bar all the way to the top or bottom. It is not possible to completely hide a panel; except for the Currencies and Settings options.
      "}]} \ No newline at end of file diff --git a/en/sitemap.xml b/en/sitemap.xml index 9cacc081c..fe6327649 100644 --- a/en/sitemap.xml +++ b/en/sitemap.xml @@ -130,6 +130,11 @@ 2023-12-03 daily + + https://help.portfolio-performance.info/en/how-to/copy-securities/ + 2023-12-03 + daily + https://help.portfolio-performance.info/en/how-to/importing/ 2023-12-03 diff --git a/en/sitemap.xml.gz b/en/sitemap.xml.gz index be121b175ac786779135422e518ecebabd9ad22b..250959e1f204c85a5c5a9cdde6094e4f637686d5 100644 GIT binary patch literal 483 zcmV<90UZ7xiwFqg)@)@0|8r?{Wo=<_E_iKh0Nt3)j+`(I$M5?TBkqvd*-Kk7?5$7G zK0ulnu$08v#0=%_8yLDBwd$!-C6f#JaFYK|n8c=i{qEiA1}P(jYxUfms}lr67Q=9@ zzJB>!f2dx&r*=v%1D}d<$k%FQj-Qm8=efzq;C0Lmr9ovgmPS^4r#d$utM2Jk%DTY4 zww2bA>DE&%{PcR62P>gP*+ekmq< z--DSMbr_&e@YY$4ZfVs+&s~^$SN4w@4V6~pEK965hNi%>ME4lV0BTn=B#(g{4T~&< zIHj^nhWe)61hTXzSPjbwv6>-SS?W3IkhS4*;0be?UxRXmdkV1BGvF{XSh*aG9%Nw* zz}q*QStqHQwY6Il%#@H3vPcS(Kr__ulSD#bC^hG_m~-@ZfHJBF>2Ki=h;I~ZJ_yRR z90SCH!;)ehh9*);@D2ilH?$D!F=#S4Cz9lzQOFB%|He_;3?2d>gre-7j>0mMTZ2d$ zm*hxu%_K>xp}0s3(0A$R_x~D_M0-kMb?4&ml4QS4R8pWGge0Q7>I4{Wkhc@&XXqfq Z#S`?9;J@6f+am*aKLFDi)e~J9006FO>Yo4r literal 475 zcmV<10VMt(iwFo{&TM4@|8r?{Wo=<_E_iKh0Nt3)j@%#&$M5?Tqudi_XD@A)$=><| z?E_G75=(%y#+h{9z9ci3SXvu{T{>N0-TZ3xq5Dn)d7+tk7+np zU%z~=KUA;XQ#*6WAcx|d^0^vCrccH!%hF^Nh<3^i@nEtWi;>N}&>WkORrho#Y3<;a z+fp0Ib!#uVbTdMjnu%C?3P|+?+!IHe95k4EGLTGb)&`I5ZI(#BI~`9i_4BDdz7&^x z*@K%KZ5p6wc&xaKuD`hN~`w zY34FYhWcW|47#*4td3=eSly7kF7?7TW$UDDc*>^CuS&hbBPF=j3*aycc)c8g5p-b; zAlsVFVp*$Z>-}ben;8WmtE6xYR-k@wq!I#C$%SCm?4!Q}lv+Dz{|kRWe52&^PEh9S zK0rJKEFsozXeKHF-cDfff*z9J2Tg_$RFd2x3Vm1Hzi|{>AVQLzP?WKGFDxU4^%AM$ zkQ`~Lg)~XUcz+zwBsvnObxxE?qe=GLOeK!!K}j@sSIvOw0(o1eKhIwstC67xhW~On RZJ!L%{Q&ten3$p$003N};eY@D