Tailoring Investment Strategies With InvestOS

"With our software, tools, and expertise, this exercise could be repeated to tailor any institutional investment strategy to any unique client mandate or market demand."

In this article, we are going to showcase using InvestOS to tailor an existing investment strategy to a hypothetical investment mandate with specific factor, thematic, and fundamental exposure requirements / demands.

More specifically, we are going to use InvestOS to customize our in-house quantitative market, industry, and factor neutral investment strategy to:

  • have 25% negative exposure to the momentum factor (i.e. desired factor exposure),
  • have 5.0% net long exposure to AI infrastructure stocks (i.e. desired thematic exposure),
  • have 0.5% short exposure to ORCL (i.e. desired fundamental / idiosyncratic exposure), and
  • have 10% positive exposure to the top 20 ESG stocks (i.e. desired investment mandate exposure).

Our portfolio will otherwise maintain the same factor / industry neutrality, leverage, and position sizing constraints. It will intelligently increase and decrease position sizing as needed to satisfy hypothetical factor, thematic, fundamental, and investment mandate preferences.

With our software, tools, and expertise, this exercise could be repeated to tailor any institutional investment strategy to any unique client mandate or market demand.

A Brief Note: Our In-House Quantitative Investment Strategy

We've covered our in-house ML-powered market, industry, and factor neutral investment strategy previously, so we won't spend much time on it here. If you'd like to:

  • understand how it works, or
  • see ForecastOS pre-engineered data, software, and tools our in-house investment strategy uses to run,

please check out the below YouTube demo. Otherwise, we'll carry on.

Starting Performance

Before we make any alterations, our in-house quantitative market and factor neutral investment strategy has the below performance characteristics.

# Annualized portfolio return (%)                        22.59%
# Annualized risk over risk-free (%)                     13.54%
# Sharpe ratio (x)                                        1.47x
# Max drawdown (%)                                       10.94%
# Portfolio hit rate (%)                                 55.07%

Tailoring Factor Exposure: Momentum

Note: Our momentum factor, which captures previous 252 trading day returns, ranges from -1.0 (for very negative relative trailing returns) to +1.0 (for very positive relative trailing returns) for each stock in our universe at each point in time. It is split into 5 quantiles, meaning each stock has a value of -1.0, -0.5, 0.0, 0.5, or 1.0 at each point in time. When we say 25% negative exposure, we mean the portfolio weighted net momentum factor value is -0.25.

In our hypothetical investment mandate, 25% negative exposure to the momentum factor is required.

Why a prospective client might want this: compared to market, value, and size factors, momentum has historically been both an outperforming factor and the most susceptible to large crashes; factor-based momentum strategies are unappealing to investors with strong risk aversion. Further, given the historical performance of the factor, it's likely that large clients already have positive exposure to the factor through other investment vehicles, making a strategy with (slightly) negative exposure both attractive and diversifying.

Altering our in-house investment strategy, built on InvestOS, for this requirement couldn't be simpler. Since we are already neutralizing the momentum factor in our strategy, all we need to do is adjust momentum factor values slightly to neutralize to the new -25% target:

# Force 25% negative exposure to momentum factor 
# --> by neutralizing +25% to 0%

factor_dfs['mom'] = factor_dfs['mom'] + 0.25

Rerunning InvestOS portfolio construction with the new -25% momentum factor target results in the below backtest performance:

# Annualized portfolio return (%)                        22.77%
# Annualized risk over risk-free (%)                     13.56%
# Sharpe ratio (x)                                        1.49x
# Max drawdown (%)                                       10.97%
# Portfolio hit rate (%)                                 55.07%

Over our backtest window, applying negative momentum exposure to our in-house investment strategy actually results in a slight return improvement! That's because momentum (as a factor) performed negatively over our backtest window.

Let's tune our thematic exposure to AI infrastructure next!

Tailoring Thematic Exposure: AI Infrastructure

Note: For thematic AI infrastructure exposure, we're going to use a static stock basket, but there's no reason that this needs to be the case. InvestOS supports datetime-delineated exposure baskets, so your exposures can change / evolve with your portfolio over time!

Our hypothetical investment mandate also requires 5.0% net long exposure to AI infrastructure stocks. For this example, as suggested by ChatGPT, we'll use the following stocks in our basket: AMD, NVDA, ANET, DELL, MSFT, DOCN, AVGO, AMZN, CSCO, GOOGL, INTC, WDC, EQIX, HPE, QCOM, CEG, SO, TSLA

To enforce our desired thematic exposure, we'll use the DesiredExposureDeviationUtilityCost model in InvestOS. This model penalizes deviations from desired exposure. This ultimately forces the optimizer to realize our desired exposure while still optimizing our holdings for our predictions, constraints, and estimated costs:

# Create static exposure basket

ai_infra_id_li = id_map_df[id_map_df.value.isin([
    "AMD", "NVDA", "ANET", "DELL", "MSFT",
    "DOCN", "AVGO", "AMZN", "CSCO", "GOOGL",
    "INTC", "WDC", "EQIX", "HPE", "QCOM",
    "CEG", "SO", "TSLA"
])].id.to_list()

# Update investment strategy

strategy = inv.portfolio.strategy.SPOTranches(
    # ...
    costs = [
        # Add exposure deviation penalty to cost models:
        DesiredExposureDeviationUtilityCost(
            include_assets=ai_infra_id_li,
            desired_exposure=0.05,
        )
    ],
    # ...
)

Rerunning InvestOS portfolio construction with A) -25% momentum factor exposure and B) 5% net long AI infrastructure thematic exposure results in the below backtest performance:

# Annualized portfolio return (%)                        23.18%
# Annualized risk over risk-free (%)                      11.5%
# Sharpe ratio (x)                                        1.79x
# Max drawdown (%)                                        6.32%
# Portfolio hit rate (%)                                 56.29%

Over our backtest window, applying 5% net long AI infrastructure thematic exposure to our in-house investment strategy results in a material performance improvement! Over the last few years, the AI trend is your friend.

Let's tune fundamental / idiosyncratic exposure next.

Tailoring Fundamental / Idiosyncratic Exposure: ORCL

Sometimes, you just want to set exposure to a certain stock or set of stocks. Maybe it's because you have fundamentally-driven conviction on a specific company, maybe it's a client request, or maybe it's for some other reason altogether. Let's assume we have one of those things and set our exposure to ORCL to -0.5% over our entire backtest window.

Reminder: InvestOS supports datetime-delineated exposures; they can be set to change / evolve with your portfolio over time!

We'll once again reach for the DesiredExposureDeviationUtilityCost model in InvestOS to enforce our exposure:

# Create static exposure to ORCL

orcl_id = id_map_df[id_map_df.value.isin([
    "ORCL",
])].id.iloc[0]

# Update investment strategy

strategy = inv.portfolio.strategy.SPOTranches(
    # ...
    costs = [
        # Add exposure deviation penalty to cost models:
        DesiredExposureDeviationUtilityCost(
            include_assets=[orcl_id],
            desired_exposure=-0.005,
        )
    ],
    # ...
)

Rerunning InvestOS portfolio construction with A) -25% momentum factor exposure, B) 5% net long AI infrastructure thematic exposure, and C) -0.5% ORCL exposure results in the below backtest performance:

# Annualized portfolio return (%)                         23.0%
# Annualized risk over risk-free (%)                     11.44%
# Sharpe ratio (x)                                        1.78x
# Max drawdown (%)                                        6.23%
# Portfolio hit rate (%)                                 55.78%

Over our backtest window, applying a -0.5% ORCL exposure results in a slight decrease in our annualized returns (ORCL performed well over our backtest window). It also results in a slight decrease in our annualized risk and max drawdown. All things considered, it didn't have a material impact on our strategy's performance.

Let's tune our ESG exposure next.

Tailoring Mandate Exposure: ESG

Let's further tune our in-house strategy for a specific ESG mandate that requires 10% net long exposure in the following top 20 ESG stocks: GOOGL, MSFT, NVDA, BBY, ADBE, CRM, CDNS, INTU, IDXX, LRCX, KEYS, RELX, HD, AAPL, AMZN, META, TSLA, JNJ, PG, CSCO

Again, we'll use the DesiredExposureDeviationUtilityCost model in InvestOS:

# Create static exposure basket

esg_id_li = id_map_df[id_map_df.value.isin([
     "GOOGL", "MSFT", "NVDA", "BBY", "ADBE", 
     "CRM", "CDNS", "WM", "INTU", "IDXX", 
     "LRCX", "KEYS", "HD", "AAPL", "AMZN", 
     "META", "TSLA", "JNJ", "PG", "CSCO"
])].id.to_list()

# Update investment strategy

strategy = inv.portfolio.strategy.SPOTranches(
    # ...
    costs = [
        # Add exposure deviation penalty to cost models:
        DesiredExposureDeviationUtilityCost(
            include_assets=esg_id_li,
            desired_exposure=0.1,
        )
    ],
    # ...
)

Rerunning InvestOS portfolio construction with A) -25% momentum factor exposure, B) 5% net long AI infrastructure thematic exposure, C) -0.5% ORCL exposure, and D) 10% net long ESG exposure results in the below backtest performance:

# Annualized portfolio return (%)                        22.42%
# Annualized risk over risk-free (%)                     10.51%
# Sharpe ratio (x)                                        1.88x
# Max drawdown (%)                                        5.89%
# Portfolio hit rate (%)                                 55.58%

Over our backtest window, applying 10% net long ESG exposure results in a slight decrease in our annualized returns, but a larger relative decrease in our annualized risk and max drawdown. It improved our risk-adjusted performance.

Summary Review

As we've shown, it's easy to use InvestOS to customize an investment strategy for any market or client demand. With our tools, it's easy to meet any factor, thematic, or fundamental exposure preference / requirement while retaining an optimized portfolio!

You could even build an investment strategy comprised of quantitative, thematic, and fundamental components blended together - a quantathemental strategy of everything! Einstein would be jealous.

Closing thoughts

  • Tailoring investment strategies to market demands: your investment strategy should be built to be easily customizable for different market and client demands. It's easier to sell people what they want.
  • Management fees: asset management is a service based industry; fees are commensurate with the service level provided. If your investment offering is more advanced or more bespoke, higher fees are more justifiable. Quantathemental and customizeable is worthy of a 2 and 20 management fee!
  • Email us at [email protected] or [email protected]; we'd love to help you make your investment strategy tooling more flexible, just like we showcased above!

Subscribe to The ForecastOS Blog

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
[email protected]
Subscribe