I have made a few changes to TJ's Discretionary
Equity code if anyone is interested. Chart now shows date and 3rd line for
"always out" ( interest, fixed rate of return ). Start date changed to
FVB or Beginning Range Marker. New params for Points/Pct, Margin and
Positionsize. I also have a couple of questions if anyone
knows:
1. It appears that AB ignores Positionsize
unless Margin = 100. Is this correct?
2. It appears Positionsize is ignored for
sell/cover. Is this correct?
Thank you!
Steve
====================================================================================
// Discretionary Equity
// in AA settings, set trades to "close"/delay of 0 so sigs aren't delayed
and equity is calculated with close instead of open.
/* To place signal for particular bar, first select the bar by clicking on
the chart once in desired place and then press one of the
buttons in Parameter dialog. Red line shows discretionary system Equity while
blue line will show Buy-and-Hold Equity. Valid trade
entry and exit signals are marked with arrows while redundant signals (for
example a Buy that comes when the system is already during
the long position) are marked with triangles. */
// set chart options
SetChartOptions ( 0,
chartShowDates|chartShowArrows|chartWrapTitle );
GraphXSpace = Param( "GraphXSpace",
7, -50, 100, 1 );
// get params
scalePts = ParamToggle(
"Scale $/%", "%|$", 1 );
Margin = Param(
"Margin", 100, 50, 100, 1
);
SetOption ( "AccountMargin", Margin );
if ( Margin == 100 )
PositionSize = Param( "Position Size ( set margin to 100
)", -100, -100,
1000000, 1 );
setcover = ParamTrigger("Cover",
"Cover" );
setbuy = ParamTrigger("Buy",
"Buy" );
setsell = ParamTrigger("Sell",
"Sell" );
setshort = ParamTrigger("Short",
"Short" );
clear = ParamTrigger("Clear",
"Clear" );
clearall = ParamTrigger("Clear All",
"Clear All"
);
// set range
dn = DateNum();
bi = BarIndex();
from = LastValue(
ValueWhen( bi ==
Status( "FirstVisibleBar" ), dn ) );
to = LastValue(
ValueWhen( bi ==
Status( "LastVisiblebar" ) - 1, dn ) );
if ( BeginValue( bi ) )
{
from = BeginValue( dn
);
to = EndValue( dn
);
}
//set initial equity
iEq = GetOption(
"InitialEquity"
);
// calculate interest-only equity
Buy = Sell = Cover = Short = 0;
ioEq = Equity(
0, 3, from, to );
ioChg = ( ioEq - iEq ) / iEq * 100;
// calculate buy-and-hold equity
Buy = dn == from;
Sell = Cover = Short = 0;
bhEq = Equity(
0, 3, from, to );
bhChg = ( bhEq - iEq ) / iEq * 100;
// calculate discretionary equity
sbi = SelectedValue( bi
);
qty = LastValue( bi
);
Varname = Name() +
sbi;
if ( setbuy )
StaticVarSet( Varname,
1 );
if ( setsell )
StaticVarSet( Varname,
-1 );
if ( setshort )
StaticVarSet( Varname,
-2 );
if ( setcover )
StaticVarSet( Varname,
2 );
if ( clear )
StaticVarRemove(
Varname );
if ( clearall )
for( i =
0; i < qty; i++ )
StaticVarRemove(
Name() + i );
Buy = Sell = Short = Cover = 0;
for ( i = 0; i < qty; i++ )
{
sig = StaticVarGet(
Name() + i );
if( sig ==
1 ) Buy[ i ] =
True;
if( sig ==
-1 ) Sell[ i ] =
True;
if( sig ==
-2 ) Short[ i ] =
True;
if( sig ==
2 ) Cover[ i ] =
True;
}
RedundantBuy = Buy;
RedundantSell = Sell;
RedundantShort = Short;
RedundantCover = Cover;
syEq = Equity(
1, 3, from, to );
syChg = ( syEq - iEq ) / iEq * 100;
// plot $/% arrays
if ( scalePts )
{
Plot( iEq, "", colorBrown,
styleNoLabel );
Plot( syEq,
EncodeColor(
colorBlack ) + Date() + EncodeColor(
colorBrightGreen ) + " $
Sys", colorBrightGreen );
Plot( bhEq,
"$ B&H",
colorRed );
Plot( ioEq,
"$ Int", colorBlue
);
SigColor = IIf(
Buy OR Cover, colorBrightGreen, colorRed
);
Ypos = syEq;
}
else
{
Plot( 0, "", colorBrown, styleNoLabel );
Plot( syChg,
EncodeColor(
colorBlack ) + Date() + EncodeColor(
colorPaleGreen ) + " % Sys", colorPaleGreen );
Plot( bhChg,
"% B&H",
colorRose );
Plot( ioChg,
"% Int",
colorSkyblue );
SigColor = IIf(
Buy OR Cover, colorPaleGreen, colorRose
);
Ypos = syChg;
}
// plot signals
PlotShapes ( Buy * shapeUpArrow +
Sell * shapeDownArrow + Short * shapeHollowDownArrow
+ Cover * shapeHollowUpArrow, SigColor, 0, Ypos, -12 );
RedundantBuy = RedundantBuy AND NOT Buy;
RedundantSell = RedundantSell AND NOT Sell;
RedundantShort = RedundantShort AND NOT Short;
RedundantCover = RedundantCover AND NOT
Cover;
PlotShapes ( RedundantBuy * shapeSmallUpTriangle +
RedundantSell * shapeSmallDownTriangle + RedundantShort *
shapeHollowSmallDownTriangle
+ RedundantCover * shapeHollowSmallUpTriangle, SigColor, 0, Ypos, -30 );
Please note that this group is for discussion between users only.
To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com
For other support material please check also:
http://www.amibroker.com/support.html
SPONSORED LINKS
YAHOO! GROUPS LINKS
|