Meb Faber’s Three-Way Model Momentum Strategy (Amibroker Code)

The strategy can be found here.

The strategy is plain English:

Amibroker code:

SetOption(“initialEquity”,100000);
Leverage=1.5 ;
SetOption(“accountmargin”,100/leverage);
setOption(“MaxOpenPositions”,3);
setOption(“holdminbars”,1);
SetTradeDelays( 0, 0, 0, 0 ); // SetTradeDelays( buydelay, selldelay, shortdelay, coverdelay )

Fremmed=Foreign(“SPY”,”close”,fixup=1);
Fremmed1=Foreign(“TLT”,”close”,fixup=1);
Fremmed2=Foreign(“GLD”,”close”,fixup=1);

oddis=Optimize(“Short-term average”,3,1,6,1);
oddis1=Optimize(“Long-term average”,10,10,15,1);

pos1= IIf( MA(fremmed,oddis)>MA(fremmed,oddis1),1,0) ;
pos2= IIf( MA(fremmed1,oddis)>MA(fremmed1,oddis1),1,0) ;
pos3= IIf( MA(fremmed2,oddis)>MA(fremmed2,oddis1),1,0) ;

posSize = sum( (pos1+pos2+pos3),1);
posSize1 = IIf(posSize==3,33*leverage, IIf(posSize==2,49*leverage,99*leverage) );

Plot(posSize,”Meb Faber Momentum”,colorRed,styleLine);

if( Name() == “SPY” )
{

setPositionSize( posSize1 ,spsPercentOfEquity) ;

Buy= MA(fremmed,oddis)>MA(fremmed,oddis1) ;
BuyPrice=Close;
Sell= Close>0 ;
SellPrice=Close;

 

}

if( Name() == “TLT” )
{

setPositionSize( posSize1 ,spsPercentOfEquity) ;

Buy= MA(fremmed1,oddis)>MA(fremmed1,oddis1) ;
BuyPrice=Close;
Sell= Close>0 ;
SellPrice=Close;

 

}

if( Name() == “GLD” )
{

setPositionSize( posSize1 ,spsPercentOfEquity) ;

Buy= MA(fremmed2,oddis)>MA(fremmed2,oddis1) ;
BuyPrice=Close;
Sell= Close>0 ;
SellPrice=Close;

 

}