Creating a simple ETF strategy - Accelerating Dual Momentum (EngineeredPortfolio.com)

The strategy is as follows (https://allocatesmartly.com/taa-strategy-accelerating-dual-momentum/):

This strategy allocates 100% of the portfolio to a single asset each month.

At the close on the last trading day of the month, calculate a “momentum score” for two asset classes: the S&P 500 (represented by SPY) and international small cap equities (SCZ), by averaging each asset’s 1, 3 and 6-month total return.
If the momentum score of SPY > SCZ and > 0, go long SPY at the close.
If the momentum score of SCZ > SPY and > 0, go long SCZ at the close.
If neither condition is true, go long either long-term US Treasuries (TLT) or US TIPS (TIP), whichever has the highest 1-month return.
Hold position until the final trading day of the following month.

Is there anyone much smarter than me who gets to produce this as a strategy that can be explored on this platform?

The link no longer exists.

Now it should work https://allocatesmartly.com/taa-strategy-accelerating-dual-momentum/

It may be this can be done better, and I still lack a code that forces the system to buy TLT, if the other ETF`s are not more than> 0. It is built up with ranking system, and a screen, at the same time it is set to 1 position

Does anyone have suggestions on how I can solve the problem, by forcing through a purchase of TLT, if the others have not passed 0

Update: “Sorry, I used: (Pr4W%Chg+Pr13W%Chg+Pr26W%Chg)>0 in the screening”


Ranking DM.png


Screen DM.png

Is it possible to set a purchase condition, that when there are no open positions in SPY, SCZ, then buy TLT ?

Data for ETF SCZ has only been available since Dec-2007. How do you perform a backtest with it from 1990.
Also switching to TLT or TIP makes no sense.

I used VNQ instead of SCZ and switch to QQQ for a 17.4% annualized return since Jan-2000.

Thanks Georg, you’re right about Scz, I saw the same thing as you after I posted.

I will examine the use of other ETFs.

But what I was wondering is whether it is possible to impose a condition for the purchase of TLT, which is that SCZ or SPY is less than 0 in the last 21, 63, 120 days?

I think this Accelerating Dual Momentum strategy is a lot of nonsense, but you can run a simulation with it.

eval(($MomScoreQQQ <0 | $MomScoreVNQ <0), TICKER(“TLT”), Accelerating Dual Momentum formula). From 1999 there is no occurrence which would have selected TLT.

$MomScoreQQQ = (close(0,getseries(“QQQ”))-close(21,getseries(“QQQ”))/close(21,getseries(“QQQ”)) + close(0,getseries(“QQQ”))-close(63,getseries(“QQQ”))/close(63,getseries(“QQQ”)) + close(0,getseries(“QQQ”))-close(126,getseries(“QQQ”))/close(126,getseries(“QQQ”)))/3

$MomScoreVNQ = (close(0,getseries(“VNQ”))-close(21,getseries(“VNQ”))/close(21,getseries(“VNQ”)) + close(0,getseries(“VNQ”))-close(63,getseries(“VNQ”))/close(63,getseries(“VNQ”)) + close(0,getseries(“VNQ”))-close(126,getseries(“VNQ”))/close(126,getseries(“VNQ”)))/3

Thanks Georg, I’m very interested in knowing more about why you do not think such a strategy will work. Take a look at Member Login - Allocate Smartly, here is one of the few strategies that over time gives a reasonably good result.

I’m also a little surprised that you have not received any purchases of TLT since 1999. Watch “Timing Periods” in this:[url=https://www.portfoliovisualizer.com/test-market-timing-model?s=y&coreSatellite=false&timingModel=6&timePeriod=4&startYear=1985&firstMonth=1&endYear=2021&lastMonth=12&calendarAligned=true&includeYTD=false&initialAmount=10000&periodicAdjustment=0&adjustmentAmount=0&inflationAdjusted=true&adjustmentPercentage=0.0&adjustmentFrequency=4&symbols=SPY+SCZ&singleAbsoluteMomentum=false&volatilityTarget=9.0&downsideVolatility=false&outOfMarketStartMonth=5&outOfMarketEndMonth=10&outOfMarketAssetType=2&outOfMarketAsset=TLT&movingAverageSignal=1&movingAverageType=1&multipleTimingPeriods=true&periodWeighting=2&windowSize=1&windowSizeInDays=105&movingAverageType2=1&windowSize2=10&windowSizeInDays2=105&excludePreviousMonth=false&normalizeReturns=false&volatilityWindowSize=0&volatilityWindowSizeInDays=0&assetsToHold=1&allocationWeights=1&riskControlType=0&riskWindowSize=10&riskWindowSizeInDays=0&stopLossMode=0&stopLossThreshold=2.0&stopLossAssetType=1&rebalancePeriod=1&separateSignalAsset=false&tradeExecution=0&comparedAllocation=0&benchmark=VFINX&timingPeriods%5B0%5D=1&timingUnits%5B0%5D=2&timingWeights%5B0%5D=33&timingPeriods%5B1%5D=3&timingUnits%5B1%5D=2&timingWeights%5B1%5D=33&timingPeriods%5B2%5D=6&timingUnits%5B2%5D=2&timingWeights%5B2%5D=34&timingUnits%5B3%5D=2&timingWeights%5B3%5D=0&timingUnits%5B4%5D=2&timingWeights%5B4%5D=0&volatilityPeriodUnit=2&volatilityPeriodWeight=0]Test Market Timing Models


momentum.png

You are getting an error message because you have not defined the formula $MomScoreQQQ and $MomScoreVNQ. The formulas are in my previous post.

Forget about this Accelerating Dual Momentum strategy.
I have set up my own Triple Momentum/Growth ranking system and am getting a 25% annualized return since 1999, and only positive calendar year returns.
Slippage= Variable
Here are the rules:
[Buy1] eval(portbars<252,TICKER(“QQQ,VNQ”),Eval($modsum>1,TICKER(“QQQ,VNQ”),TICKER(“IEF, TLT”)))
[Buy2] eval(portbars<5,1,100*(close(0,#Equity)-close(5,#Equity)) / close(5,#Equity) > -4)

[Sell1] $1stWeekofMonth & nodays >25

$modsum is a market timer which only works from 2000 onward.
https://imarketsignals.com/2021/the-im-modsum-yieldcurve-timer-model/

[Buy2] https://www.portfolio123.com/mvnforum/viewthread_thread,12961



Hi Georg,

A question about $Modsum - I still get an error message. Is the formula a modified version of the $modsum formula in that blog post? And the same question applies for the components, ie the formulas for $model1, $model2. I’ve experimented without success, maybe I’m missing something obvious. Any clarification would be appreciated. Thank you.

Of course you will get an error because you don’t have the formula for $modsum.
But you can try the old standard market timer SMA 50-200 crossover system of S&P500.
Eval(SMA(50,0,#bench) > SMA(200,0,#bench),TICKER(“QQQ,VNQ”),TICKER(“TLT,TIP”)) , where bench = S&P500.

This returns still a respectable 17.4% with my ranking system.