My Portfolio: What We've Been Building
An insight into the development of our latest build, and early release invite to Koyfin's latest project
“I have multiple brokerage accounts, and no place to aggregate them”.
Account aggregation is a common dilemma for investors; our portfolio is often a collection of multiple accounts. You might have a retirement account, a taxable one, a tax-advantaged one, etc. A few months ago I was tasked with leading a project to tackle this dilemma at Koyfin. I was excited because it resonated with me. I too, have this problem. I now had the reigns to ideate something. Something I’d be excited about as a user and investor. When I started to scope this project it confirmed my hunch that this was a common problem.
Regardless of sophistication, investors still rely on tools that are either not built for purpose, unnecessarily expensive, or antiquated. Most people I spoke to rely on Microsoft Excel to track a portfolio. Don’t get me wrong, Excel is fantastic. But it’s not a portfolio tracking tool. Koyfin has a lot of ambitions in this space, but decided to tackle the most fundamental issue first; “I have multiple accounts and no place to accurately aggregate and monitor them”.
This month, we will release this effort's first version (v1). I wanted to walk through this process, what v1 looks like, some of the issues we faced, why it’s differentiated, and some of the small “delight” features we worked hard on to create utility for investors. All credit goes to the fantastic roster of engineering talent we have at Koyfin and the folks who tirelessly tested the feature, the product team, and the design team. Once we ideated, planned, and wrote up this project, they were the ones who brought it to life and did all the heavy lifting.
If you’d like to get access to the early release of this project before it publicly announced, we’d love your feedback. If you are interested in doing so, reply to this email, shoot me a DM on Twitter or DM me directly on Substack.
If you don’t have a Koyfin account, you can create one here.
Tackling the biggest issue first
What v1 is and future functionality
The first version of My Portfolio is the beginning of a multi-stage development process. At the beginning of this project, we had a lot of ideas and had to focus on solving the most fundamental requirement first, and well. I will opine on what future developments might include also. The fundamental issue we sought to address in v1 was giving investors a tool to track and aggregate their existing portfolio, break down profit & loss, and understand their exposures.
What v1 is: My Portfolio v1 will allow you to track current holdings. These holdings can be aggregated across multiple accounts and lots. We will show you the breakdown of your P/L by lot and parent, converted into a single portfolio currency and include the impact of FX rate changes over time. Investors will be able to analyse the P/L of their portfolio, view exposure exhibits, and create views to fundamentally analyse their positions.
Future functionality: The concept of historic transactions (sells) and a time series of performance will come later. While this was part of our planning, we wanted to ensure we limited the scope of v1. Both of these projects would require considerable time to implement, but we plan to include performance and historic positions in future versions. My Portfolio is not something which plugs into existing brokerages via API; positions are updated manually or via CSV.
Starting BIG and narrowing the focus
Prioritising and the key features of v1
Most projects start similarly. You have a grand vision of what you want to build, where a product will stand a year from today, and what future versions should look like. The ideation phase often starts from the finishing line and works backwards. Once you have a picture of the end state, you then have to narrow that focus down to something achievable. When I say achievable, I don’t mean easy. It’s the difference between releasing something within a 3-month window and having the opportunity to put it in users’ hands, get feedback, and iterate vs. spending twice as long building something twice as technical, but without a user ever touching it. Long before I ever started working in a product role, a mentor gave me a scrap of advice that I often remember. You can ideate and plan but you have no idea what users will do with a product once they get their hands on it. Sometimes, the best ideas come from observing how users interact with a product in ways you hadn’t originally imagined.
When Koyfin launched the Model Portfolio feature late last year, the same attitude was applied. Just 3-4 months after launch, the feature has come so far that it’s unrecognisable compared to the version we initially launched. This was aided by listening to what users wanted and building it. Both as a user and observer, I have already witnessed interesting ways Koyfin users have engaged with Model Portfolios. Some have used it as a back-testing engine. Others have created custom benchmarks and ETFs using the tool; each model acts like a security within the terminal which facilitates this use case. I even realised that you can use a model portfolio to proxy the USD returns of GBP-denominated security to compare against other US assets. Model Portfolios wasn’t explicitly designed for any of these use cases, but the way users have adopted it provides us with valuable insight into (a) what additional tools/features investors want and (b) how we can modify the existing product.
Our focus for v1 in My Portfolio was delivering a great current portfolio tracker. Once that foundation has been set, we move on to the next leg.
Four key elements
Creation, Profit / Loss, Exposures, Analysis
Please note that screenshots are taken from a beta version of My Portfolios and don’t fully reflect the final product.
My Portfolios introduces a lot of new functionality to Koyfin. Things like FX adjusted returns, P/L, and lot entry which were brand-new features created specifically for this feature (which I will comment on shortly). There are plenty of doo-dads and whistles to comment on, but for now, I’ll cover the four key elements of My Portfolio; beginning with the creation flow.
Creation & Ongoing Management
Because of this feature’s novelty, we had to design a new creation flow. This flow had to incorporate manual lot entry, multiple accounts, separate cash balances for accounts, an overarching portfolio currency, and the ability to upload accounts via CSV.
We settled on a sleek dialogue box that facilitates all of these needs. At long last, Koyfin users can now enter individual lots from their portfolio, reflect multiple cash balances, and edit the positions within individual accounts. This can be done manually, or by uploading a CSV to each account with information on the ticker, quantity, cost per share, and purchase date.
For Koyfin users who currently use Watchlist to track their positions, you can download that Watchlist as a CSV in the platform and use this as your CSV upload.
Once completed and saved, your data will be aggregated into a unified portfolio and the feature will open up.
Profit / Loss
The vision for the Profit / Loss tab was inspired by brokerages; who are often the source of truth for P/L data. While brokerages generally offer the greatest level of detail about our P/L, they are seldom the place where investors conduct fundamental analysis because they are ill-equipped to handle it. We realised that investors are used to performing these activities as two separate workflows.
Therefore, the Profit / Loss tab is where we present lot-level data, context on P/L, account aggregation and grouping, as well as security-level and performance-related data.
Here, users can build a table to monitor their P/L as a collective portfolio or group by account, sector, industry or asset class. When grouping by account, the use of summary rows (like “sum”) will allow you to identify the weighting, market value, and P/L of separate accounts relative to your aggregated portfolio.
Exposure
The exposure page will break down your portfolio in pie and table form across securities, sectors, industries, asset classes, and countries. We created a custom, interactive, pie chart for this feature.
The v1 of the exposure handles the basics well. Some quick follow-up improvements to this feature may include the ability to show account-level exposures, exposure by P/L, currency exposure, and I am sure we will get some great suggestions for users too. Those familiar with the Model Portfolios feature will know how powerful that feature’s exposure exhibits are.
As the development of My Portfolio progresses, I am hoping to borrow functionality from the Model Portfolio exposure exhibits. Here, we present data in bar chart form, against a benchmark (the concept of a benchmark doesn’t exist in v1 of My Portfolio). We also present more choices for exposures including fixed-income, credit quality, and maturity exposure. I am also excited at the prospect of adopting some of the logic from Model Portfolios. In the image above, for example, clicking on a sector will populate the table to the right of the chart, breaking down the constituents of that sector in the portfolio, their weight, exposure to that sector (for funds), and their portfolio contribution. Another aspect I like in Model Portfolios is that we have x-ray fund logic. In simple terms, you could have a 100% SPY portfolio and Koyfin breaks out the exposures as per the constituents of that fund. The holdings matrix tab will also break down the constituents of that fund and show overlapping exposures between directly held positions and other funds.
I digress. The point is, that there is a lot more we plan to introduce with exposure.
Analysis
The analysis section will be the most familiar to regular Koyfin users. It has a likeness to the Watchlist, with the concept of views, currency presentation, grouping, summary rows, and the full selection of columns. This table will be pre-populated with your portfolio companies, where you can use summary rows like “portfolio weighted average” to show the weighted average multiples or margins of your portfolio.
Relative to the Profit / Loss column selection, Analysis is considerably richer (having the full spectrum of columns available) and is the place where investors will conduct more fundamental and valuation-centric analysis. Analysis also allows users to utilise a library of different views, which they can cycle between seamlessly. For users who have spent time creating views inside of Watchlists, fear not. Because views from Watchlists can be imported to the Analysis table.
Next, I want to highlight some of the “little delights” of this project. Many of these are new features to Koyfin, and while seemingly simple required a lot of thought to implement successfully.
Little delights
Features that I want to praise
Before having a dedicated portfolio tracking tool, Koyfin users would commonly perform this workflow in a Watchlist; a great feature but one that wasn’t purpose-built for this activity. The Watchlist, with its variety of portfolio tools, would allow a user to populate aggregate-level positions, add average cost, and purchase date, and see returns and P/L. There were some flaws, however.
To emphasise the value of adopting My Portfolio in place of Watchlists, we had to introduce a variety of new features to Koyfin.
Lot Level Transactions & Duplicate Tickers in Tables
Investors have asked about lots for some time. Watchlists are not built to house duplicates of the same ticker inside of a single table. Suppose you owned Starbucks in two separate accounts or that you owned 40 shares of Starbucks that were purchased in 10-share increments. Expressing either of these situations was not possible in a Watchlist and users would have to populate columns with aggregate-level portfolio data. For example, showing the 40 shares of Starbucks that they own in one line item, with a single average cost.
Now users can populate each lot and see both the aggregate and lot-level data, including P/L. They can also populate lots across multiple accounts; meaning that if you own the same asset across multiple accounts we aggregate this for you under a single parent-level position (see NVDA below).
Alternatively, if you want to group your portfolio by account, you can now see the same ticker appear multiple times in the same table. E.g, you can see Nvidia in the ISA, Retirement, and Taxable account.
Currency Conversion and the Concept of Portfolio Currency
A niggling issue in the Watchlist was that the market values of a position in a table could all be converted into a single security. Meaning that if I wanted to convert all of my US investments into GBP, I could. The problem, however, was that all profit/loss items would be shown in the security’s trading currency. While the conversion of market value was useful, the unreconciled nature of the P/L series meant that summary rows were not.
With My Portfolio, we introduced the concept of a portfolio currency. This means that any securities you hold in the portfolio will automatically be converted into the portfolio currency. You can add the cost basis in USD, for example, and while we present the cost basis in USD, we convert everything else into GBP (or whatever currency your portfolio is denominated in). This includes P/L.
FX-adjusted P/L
Showing an investor their P/L converted to portfolio currency at current FX rates wasn’t going to be enough. If I, as a UK-based investor, purchased META (USD stock) 5 years ago, I likely made a nice profit on that trade. Over those 5 years, however, the fluctuation between the FX rate of GBP and USD will have impacted my returns too. We know that a lot of Koyfin users invest outside of their domestic market and want to account for this.
That’s why we introduced three new data series to Koyfin relating to P/L which reflect these FX impacts. Each of these three data series is reflected as both notional and percentage values.
P/L (excl. FX): The notional profit or loss from an investment, converted to the portfolio currency at the most recent FX rate.
You can think of this as solely the “security-level” P/L.
P/L (from FX): The notional gain or loss from the change in currency conversion since the position was opened.
This reflects the impact of currency movements throughout your holding period.
P/L: The notional profit or loss from an investment, including the P/L from FX. I.e. after the impact of currency conversion fluctuation.
You can think of this as the “true” P/L. The amount of cash you would receive (excluding costs) for selling the position in your domestic currency.
When the security trades in the same currency as the portfolio, P/L (excl. FX) and P/L will be the same, while P/L from FX will read zero. To produce these data outputs, add a purchase date for each position so we know the FX rate on the purchase date.
Total Return
At the position level, a Koyfin Watchlist can show you the price return of your investment since purchase. Showing the total return was a commonly requested feature from users; which factors in the influence of dividends on the return profile. My Portfolio introduces this and calculates total return which includes the impact of FX changes over time.
Koyfin shows users the price and total return of securities throughout the platform and in charts at the security level. However, the infrastructure of a watchlist is slightly different and wasn’t built to be able to retrieve specific dates in history; required to access the adjusted prices necessary for the total return calculation. Different databases, different logic. We overcame that challenge with My Portfolio and now show both price and total return. This adds more granularity to the return analysis an investor can conduct on their investments.
In the below example see Greggs, a UK company. The portfolio is GBP-based, so the FX impact is null; hence why P/L (excl. FX) and P/L are identical. The company pays dividends, however, and this is now reflected, as per the purchase date, in the Total Return field.
Something to note, however, is that total return assumes the reinvestment of every dividend, while price return ignores them completely. If the company has never paid a dividend, the price and total return will be identical. If the company has paid dividends, the total return should be greater. As an investor, it’s unlikely your true return % reflects either of these metrics perfectly. You might not reinvest every dividend into that same company, so your true return is likely somewhere between price and total return if the company pays dividends.
Nonetheless, having both data series at your disposal provides you with more context and understanding.
Quote box
The quote box at the top of the screen displays the market value of the portfolio, the 1D change, number of holdings, cash, cash weighting, and P/L of the portfolio and will tick away during the day. In the future, we plan to add portfolio valuation data here too. The quote box also contains portfolio news and a button to edit holdings.
Portfolio News
One of my favourite features in the Koyfin Watchlist is Watchlist News which, at the click of a button, generates a feed populated with news, filings, transcripts, and press releases tailored to the basket of securities inside of that watchlist. You can use the settings to filter various types of news and filings too. I remove all news and ownership filings from mine, due to personal preferences.
This feature was particularly useful in the context of portfolio monitoring, so naturally, we migrated this over to My Portfolio too.
Import Watchlist Views
Koyfin users spend hours creating unique views in their watchlists. Asking them to recreate those views in the Analysis section would create friction.
We like to eliminate friction where we can, so we ensured that users could import the views they have created directly into the Analysis section.
Looking ahead
This project tested us in many ways. It’s easy to conceptualise what we want from a product perspective. But while a product like Koyfin is dense with data, it doesn’t act and behave like an Excel spreadsheet. For instance, understanding the formula and logic to calculate FX-adjusted P/L and returns is easy. Historically, tables inside Koyfin have not been built to retrieve data in such a way. This was something we had to solve for. Showing the same security in a table multiple times as well as the concept of aggregating lots; we had to build an entirely new table to handle this. Believe it or not, the idea of having cash as a standalone asset which could then interact with other securities and influence the value of a portfolio was new and required a solution too.
What excites me is how these learnings and new features may eventually be adopted across the platform more broadly. We have a lot more work to do with My Portfolio. First, by enhancing what we have already built. I have no doubt the user feedback we get early on will fuel this. Second, introducing new functionality like performance, historic transactions, the concept of having multiple portfolios, and potentially custodial integration. I feel immensely proud of what we built in this first version, and I can’t wait to get it into the hands of users. To see an idea that was once a collection of documents and some ugly wireframes transform into what we have built, is a magical feeling.
I hope you will take me up on the offer and check out the early release, your feedback will be warmly welcomed.
Thanks for reading,
Conor
Discovering new tools like Koyfin and incorporating them into our routine can lead to even greater success. We're excited to see how it can enhance our experience alongside Tradingview, thx!