Re: [amibroker] RE: Question

 

Thank you so much and much appreciated!

Pontric

On Sun, Jan 24, 2016 at 3:39 PM, trendxplorer@gmail.com [amibroker] <amibroker@yahoogroups.com> wrote:
 
[Attachment(s) from trendxplorer@gmail.com [amibroker] included below]

Pontric,

The attached code (copied below for review) re-balances a stock/bond portfolio (default: SPY/TLT, but adjustable through parameter window) every month, but it assumes trading at the close of the month. The code is for monthly data.
The model's equity curve is saved as composite symbol ( "~~~BH_60_40" ).
The exploration view shows monthly gain/loss per symbol.

JW

/* --- BH_60_40_v1.afl ---
**
** model re-balances SPY/TLT portfolio 60/40
** trading at the close of every month
**
*/

// --- start of code ---

// --- backtester settings ---
SetOption( "CommissionAmount", 0.00 );
SetOption( "InitialEquity", 100000 );
SetTradeDelays( 0, 0, 0, 0 );
SetOption( "WorstRankHeld", 2 );
SetOption( "MaxOpenLong", 2 );
SetOption( "MaxOpenPositions", 2);
SetOption( "AllowPositionShrinking", True );
SetBacktestMode( backtestRegular );

// --- inputs ---
_StockSymbol = ParamStr( "Stock Symbol?", "SPY" );
_BondSymbol  = ParamStr( "Bond Symbol?" , "TLT" );
StockPerc    = Param( "Stock Percentage (%)?", 60, 0, 100 );
BondPerc     = 100 - StockPerc;

// --- set lot size ---
RoundLotSize = 1;

// --- detect tradelist ---
wlnumber        = GetOption( "FilterIncludeWatchlist" );
watchlist       = GetCategorySymbols( categoryWatchlist, wlnumber );

// --- init ---
PosSize = 0;

// --- position allocation routine ---
if ( Status( "stocknum" ) == 0 )
{
    StaticVarRemove( "Pos*" );
    StaticVarRemove( "ret*" );

    for ( i = 0; ( symbol = StrExtract( watchlist, i ) )  != "";  i++ )
    {
        SetForeign( symbol );
            ret1m  = ROC( Close, 1 );
        RestorePriceArrays();
       
        if ( symbol == _StockSymbol ) PosSize = StockPerc;
        if ( symbol == _BondSymbol  ) PosSize = BondPerc;
                  
        StaticVarSet( "ret1m"   + symbol, ret1m   );
        StaticVarSet( "PosSize" + symbol, PosSize );
    }
}   

// --- get values and ranks for Momentum ---
symbol    = Name();
ret1m     = StaticVarGet( "ret1m"    + symbol );
PosSize  = StaticVarGet( "PosSize" + symbol );

// --- trade logic ---
Buy       = PosSize > 0;
Sell      = 0;
Short     = Cover = 0;
BuyPrice  = Close;
SellPrice = Close;

// --- set position sizes ---
PositionSize = -PosSize; // "-" sign for spsPercentOfEquity

// --- exit at EoM for rebalancing ---
ApplyStop( stopTypeNBar, stopModeBars, numbars = 1, exitatstop = 0 );

// --- exploration filter ---
ExploreFilter = ParamToggle( "ExploreFilter", "LastBarInTest|All", 1 );
if ( ExploreFilter )
    Filter = 1;
else
    Filter = Status( "LastBarInTest" );
   
// --- sort for exploration only (not on backtest) ---
if ( Status( "actionex" ) == actionExplore )
{
    SetSortColumns( 2, 1 );

    ColorRet  = IIf( ret1m > 0, colorLime, colorRed );
   
    AddColumn( Close           , "Close (current)", 1.2              );
    AddColumn( Ref( Close, -1 ), "Close (prior)"  , 1.2              );
    AddColumn( ret1m           , "ret1m%"         , 3.3, 1, ColorRet );
    AddColumn( PosSize         , "PosSize (%)"    , 1.0              );
}

// --- save portfolio equity ---
_PortfolioName = ParamStr( "~~~PortfolioName", "~~~BH_60_40" );

SetCustomBacktestProc("");

if( Status("action") == actionPortfolio )
{
 bo = GetBacktesterObject();
 bo.Backtest();
 AddToComposite( bo.EquityArray,
                 _PortfolioName, "X",
                 atcFlagDeleteValues | atcFlagEnableInPortfolio );
}

// --- end of code ---


__._,_.___

Posted by: pontric inc <pontricinc@gmail.com>
Reply via web post Reply to sender Reply to group Start a New Topic Messages in this topic (13)
**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/


.

__,_._,___


EmoticonEmoticon