Create a Symphony
Symphonies are built from a set of simple but infinitely combinable building blocks: assets, weights, conditionals, filters, and groups.
Let’s take a look at each type of block by itself and then how they can be combined. After that, we’ll explore how to build and test a symphony from start to finish.
In practical terms, a symphony is a set of instructions about what assets to hold, in what amount, and at what time. The assets that a symphony can contain are individual stocks and exchange-traded funds--ETFs.
To add assets into a symphony, click Add a Block and select “Asset.”
You can search for an asset by its name or ticker using the Ticker Search.
You can also use the Screener to add a set of assets that meet certain criteria.
Weights determine how funds are allocated to the blocks making up your symphony. There are four types of weights. Two of these types--equal and specified weights--can apply to all block types.
Equal weights split funds equally among all child blocks.
Specified weights let you specify the percentage or fraction allocated for each block.
There are two additional weighting options that can only be used with assets. You can use inverse volatility weighting to assign greater weight to less volatile assets.
You can also weight assets by their market capitalization -- market cap. This kind of weighting can only be used with equities (stocks)
A top-level weight is automatically added into each new symphony. You can change the type of weight using the dropdown menu.
You can add another level of weighting under the top-level weight by clicking Add a Block and selecting “Weight (Allocation).”
An if-else conditional allows you to switch between different assets or strategies based on the value of a signal.
To add a conditional into a symphony, click Add a Block and select “If/Else (Conditional).” Within the conditional, start by setting a condition that, if it is met, will trigger an outcome. Your condition can be a comparison between two metrics or between a metric and a fixed value.
Next, set what you’d like the outcome to be if the condition is met by putting it under the IF part of the conditional.
Finally, set what outcome should happen if the condition is not met by putting it under the ELSE part of the conditional.
With a filter, you can dynamically sort and filter a set of assets.
To add a filter into a symphony, click Add a Block and select “Filter.”
Add in the assets you’d like to sort and filter. To do that, move under the filter, click Add a Block and select “Asset”.
Within the filter, choose a function to sort this set of assets.
Finally, choose how the assets will be selected and how many will be selected.
Groups let you label and treat any set of blocks as a single unit. A group can be any size and you can name it whatever you’d like.
To add a group, click Add a Block and select “Group.” You can use a group to organize part of a symphony or to make a note.
Combining blocks to create a symphony
Using these nestable building blocks, you can explore and let your imagination run free. Do you want to put a conditional inside a weight? Or a filter inside a conditional? You can do that!
We have guardrails in place to prevent combinations of building blocks that don’t work together.
Symphony trading frequency
A symphony’s trading frequency determines how often the symphony will be executed. Symphonies can be traded at frequencies from daily to yearly.
When a symphony is executed, Composer will run through all of the symphony logic and update the intended symphony asset allocations. If you are invested in the symphony, Composer will automatically make all of the trades necessary in your brokerage account to bring your holdings in line with the symphony’s intended asset allocations.
Building and testing a symphony from start to finish
To put the ideas you learned about above into practice, let’s go through building and testing two full symphonies.
Simple symphony example
Let’s start with a simple symphony that uses only three building blocks--assets, groups, and weights. This symphony reflects a classic 60-40 portfolio consisting of 60% equities and 40% bonds. It uses two ETFs each within the equity and bond categories.
We begin by building the outer structure of the symphony using specified weights of 60% and 40%.
Next, we add in groups and label them with the two categories we want to use--Equities and Bonds.
Finally, we add in the assets making up each group. Using equal weights underneath each group means that the specified weight assigned to the group will be split equally among the assets. For example, the 60% weight assigned to the group Equities will be split equally between MDY and QQQ, which will receive 30% each.
We set the trading frequency of this symphony to quarterly, which means that Composer will execute the symphony on the first trading day of each quarter.
Let’s backtest this symphony to model how it would have performed in the past using historical data.
To backtest the symphony, we click the run icon on the backtest preview or navigate down to the backtest using the menu.
You can see the symphony’s hypothetical performance over the time period of the backtest.
You can change the time period of the backtest by using the date selector or time period presets at the top of the graph.
If you’d like, you can add benchmarks against which to compare the symphony’s performance. Let’s add AOM, an ETF tracking the investment results of an index made up of a portfolio of equity and fixed income funds.
You can see that this symphony would have outperformed AOM over the timespan of the backtest.
Underneath the graph, you can see measures comparing the performance of the symphony and the benchmark. We have tooltips and reference articles to help you learn about these measures if you haven’t used them before.
Below, you’ll see performance metrics for the symphony and the benchmark. Again, we have tooltips and articles if these terms are new to you and you’d like to learn more.
Finally, you can see what assets the symphony would’ve actually held over the time period of the backtest in table and graph form. You’ll notice jumps in the allocations around the start of quarters, as that is when the symphony would have been executed.
Advanced symphony example
Next, let’s take a look at a more advanced symphony that includes all of the possible building blocks. This one is called Risk On Risk Off Momentum and you can find it in Composer’s Discover section of ready-made symphonies.
This symphony uses the strength of the bond market as a risk signal to decide what to do. To respond to the signal, the full weight of the symphony is assigned to an If/Then conditional. We begin by adding in a conditional under the top-level weight and filling in its details.
Within the conditional, we set the condition that, if met, will trigger an outcome. In this case, we want to test if the overall bond market is doing better than short-term U.S. Treasury bills. If it is, we want to take on more risk.
To do this, we test whether the 60 day cumulative return of BND, which is an ETF which aims to track the performance of a broad bond index, is higher than that of BIL, an ETF which seeks to provide investment results corresponding to the performance of 1-3 Month U.S. Treasury bills. The number of days here--60--refers to the number of trading days we use to calculate the measure.
Next, we set what outcome we’d like to happen if this condition is met. In this case, we want to take on more risk. To organize this thought, we add in a group and label it “Risk On”.
Underneath this group, we’ll add a momentum part to this strategy. What is momentum? In brief, we could summarize it as “buy winners, sell losers”. Here, we’ll select the best performer out of three possible assets. To do so, we add a filter.
Next, we add in assets to sort and filter. These three assets might look familiar, since they’re three of the four assets we used in the simpler Classic Equity Bond Portfolio we built above.
Within the filter, we choose a function to sort the assets. In this case, we want to sort them by their 90 day cumulative return.
Finally, we choose how the assets will be selected and how many will be selected. To pick one winner, we select the Top 1 asset based on cumulative return.
After creating the momentum part of our strategy, let’s move down to set what we want to happen if the conditional is not met -- if the overall bond market is not doing better than short-term U.S. Treasury bills. In this case, we want to minimize risk. To organize this thought, we add in a group under the ELSE part of the conditional and label it “Risk Off”.
In the Risk Off condition, we’ll hold a less risky asset -- IEF, the ETF tracking 7-10 year U.S. Treasury bonds. If you recall, this was the final asset held by the Classic Equity Bond Portfolio.
Finally, we set the trading frequency of the symphony to quarterly, which means that Composer will execute the symphony on the first trading day of each quarter.
Let’s backtest this symphony by clicking the Run icon in the backtest preview. To see the full backtest details, click “Jump to backtest”.
Let’s add benchmarks against which to compare the symphony’s performance. First, let’s look at a comparison with AOM, the ETF tracking the investment results of an index made up of a portfolio of equity and fixed income funds. Like the last symphony, you can see that this symphony would have outperformed AOM over the timespan of the backtest.
In addition to comparing a symphony to benchmarks that are equities or ETFs, you can add in another symphony as a benchmark. Since this symphony is made up of the same four assets as the last symphony we looked at, the Classic Equity and Bond Portfolio, let’s add it in as a benchmark for comparison.
To do so, click Add under “Your symphonies” in the benchmark selection area. You’ll be able to see any symphonies you’ve created in Composer as well as symphonies from the Composer collection. Let’s select the Classic Equity and Bond Portfolio symphony to add it to the graph.
The Risk On Risk Off Momentum strategy was created to handle turbulent times. Let’s take a look at how both symphonies performed over the Covid market crash by starting the backtest in December 2019. As you can see, the symphony avoided the March 2020 crash, unlike the Classic Equity Bond Portfolio.
Looking at the comparison metrics, you can see that this symphony generated returns in excess of the benchmark over the backtest. In addition, the R2 is relatively low, which means that movements in the Classic Equity Bond Portfolio are not good at predicting movement in the Risk On Risk Off Momentum symphony.
As you’re creating new symphonies, you can use the backtest measures to compare their performance and to build out a portfolio of strategies that are not strongly correlated or even negatively correlated to each other.
Symphony building features
Let’s go over a few final features to help you with symphony building.
To save a symphony you built or to save changes to a symphony you’ve previously built, click “Save”.
Let’s say you want to make changes to a symphony but also keep the symphony as you have it currently. To do so, you can make a copy of the current symphony by selecting “Make a copy” under the save menu. You can then open up the copy and make any changes you’d like and save that symphony.
You can copy parts of your symphony and paste them into the same or to a different symphony. To do so, hover next to a block that you want to copy, and click copy.
After that, move to the part of a symphony you’d like to paste the block into. Click “Add a block” and select the Paste option. This will paste the copied block into the new location.
Finally, if there’s a block in your symphony that has a lot of child blocks you’d like to remove, you don’t have to delete each one individually. Instead, hover next to the block and select “Remove Child Blocks”. All of the blocks underneath it will be deleted.
Share a symphony
Would you like to share a symphony you’ve created with someone? Head over to the symphony details page, which you can access from the Follow menu if you’ve followed the symphony or the Invest page if you’re invested.
Click “Share” to generate a URL that you can send to people to share the symphony details. Select to let anyone with this link to see the details of the symphony logic and add it to their own Composer account.