PureBytes Links
Trading Reference Links
|
You can run the backtest to find the number of open positions. I am
not aware of a direct function but in AFL, I have some code you might
consider using:
/* the following line uses Flip function to get "1" after the buy
signal and reset it back to "0" after sell appears. */
in_trade_long = Flip( Buy, Sell );
in_trade_short = Flip( Short, Cover);
AddToComposite( in_trade_long, "~OpenLongPosCount", "V" );
AddToComposite( in_trade_short, "~OpenShortPosCount", "V" );
/* We use "~OpenPosLongCount" and "~OpenPosShortCount" artificial
ticker to store the results. Again we should run just Scan of the
formula AND these tickers would become available.
Use */
Graph1 = Foreign( "~OpenLongPosCount", "V");
Graph2 = Foreign( "~OpenShortPosCount", "V");
/* in Indicator Builder after running the back-test to see the chart
of the number of Open long and short positions of your system. */
e = Equity(1);
tradeend1 = Sell;
tradeend2 = Cover;
profit1 = e - ValueWhen( Buy, e );
profit2 = e - ValueWhen( Short, e);
endprofit1 = IIf( tradeend1 , profit1, 0 );
endprofit2 = IIf( tradeend2 , profit2, 0 );
LosingLongTrades = LastValue( Cum( endprofit1 < 0 ) );
LosingShortTrades = LastValue( Cum( endprofit2 < 0 ) );
WiningLongTrades = LastValue( Cum( endprofit1 > 0 ) );
WiningShortTrades = LastValue( Cum( endprofit2 > 0 ) );
TotalLongTrades = LastValue( Cum( tradeend1 ) );
TotalShortTrades = LastValue( Cum( tradeend2 ) );
AddColumn( LosingLongTrades, "Losing Long trades", 1 );
AddColumn( WiningLongTrades, "Wining Long trades", 1 );
AddColumn( TotalLongTrades, "Total Long trades", 1 );
AddColumn( LosingShortTrades, "Losing Short trades", 1 );
AddColumn( WiningShortTrades, "Wining Short trades", 1 );
AddColumn( TotalShortTrades, "Total Short trades", 1 );
Filter = Status("lastbarinrange");
// now we will count the number of
// count trades winning in given $ ranges
NumRanges = 25; // number of ranges to generate
RangeSize = 100; // controls $ size of the range
NumColumns = 6;
for( i = 0; i < NumRanges; i++ )
{
rangestart = i * RangeSize;
rangeend = (i+1)*RangeSize;
if( i == NumRanges - 1 ) rangeend = 999999;
AddColumn(
LastValue( 100* Cum( endprofit1 > rangestart AND endprofit1 <
rangeend ) /TotalLongTrades ),
"% with profit " + rangestart + ".." + rangeend );
AddColumn(
LastValue( 100* Cum( endprofit2 > rangestart AND endprofit2 <
rangeend ) /TotalShortTrades ),
"% with profit " + rangestart + ".." + rangeend );
}
for( i = 0; i < NumRanges; i++ )
{
rangestart = (-i - 1 ) * RangeSize;
rangeend = -i*RangeSize;
if( i == NumRanges - 1 ) rangestart = -999999;
AddColumn(
LastValue( 100* Cum( endprofit1 > rangestart AND endprofit1 <
rangeend ) /TotalLongTrades ),
" % with loss " + rangeend + ".." + rangestart );
AddColumn(
LastValue( 100* Cum( endprofit2 > rangestart AND endprofit2 <
rangeend ) /TotalShortTrades ),
" % with loss " + rangeend + ".." + rangestart );
}
// Expectation analysis
dBuy = Ref( Buy,-1);
dSell = Ref( Sell,-1);
dShort = Ref(Short,-1);
dCover = Ref(Cover,-1);
LongProfit = IIf(dSell,E - ValueWhen(dBuy,E),0);
ShortProfit = IIf(dCover,E-ValueWhen(dShort,E),0);
Winnings = Cum(IIf(LongProfit>0,LongProfit,0) +
IIf(ShortProfit>0,ShortProfit,0));
Losses = Cum(IIf(LongProfit<0,LongProfit,0) +
IIf(ShortProfit<0,ShortProfit,0));
NumWinTrades = Cum(((LongProfit>0) OR (ShortProfit>0)) AND
Status("BarInRange"));
NumLosTrades = Cum(((LongProfit<0) OR (ShortProfit<0)) AND
Status("BarInRange"));
TotalTrades = Cum(dSell OR dCover);
WinningTrades = Cum((LongProfit > 0) OR (ShortProfit >0));
LosingTrades = Cum((shortProfit < 0) OR (LongProfit < 0));
AveWinTrade = Winnings / WinningTrades;
AveLosTrade = Losses / LosingTrades;
PercentWinners = WinningTrades / TotalTrades;
Expectation = ( 1 + AveWinTrade/abs(AveLosTrade)) * PercentWinners -
1;
Ex = LastValue(expectation);
IC = Pd-Pd1+LB-LB1+(Pd2-Pd1)*(LB-LB1);
IC = LastValue(Cum(1)) - IC;
AddToComposite(IIf(Cum(1)== IC,Ex,0),"~Expectation","C",10+OptStart);
AddToComposite(IIf(Cum(1)== IC,Pd,0),"~Expectation","V",10+OptStart);
AddToComposite(IIf(Cum(1)== IC,LB,0),"~Expectation","I",10+OptStart);
AddToComposite(IIf(Cum(1)== IC,LastValue(E),0),"~Exp-
Equity","X",10+OptStart);
AddColumn(AveWinTrade,"AveWTr",1.2);
AddColumn(AveLosTrade,"AveLTr",1.2);
AddColumn(PercentWinners*100,"%Winners",1.4);
AddColumn(Expectation, "Expectation",1.3);
GraphXSpace = 5;
Filter = Status("LastBarInRange");
Plot(E,"Equity",1,1);
/*
I use two indicators to display the results:
Displaying the Expectancy and Equity curves: */
Plot(Foreign("~Expectation","C"),"Expectation",1,1+4);
Plot(Foreign("~Exp-Equity","X"),"Exp-Equity",4,16384 +65536 );
GraphXSpace = 10;
/*Displaying the parameters being optimized:
Introduction to the AmiBroker AddToComposite()
By Herman van den Bergen [ psytek@xxxxxxxxxx ]
Last Updated: 2002-11-12
Page 32 of 32 */
Plot(Foreign("~Expectation","V"),"Expectation-Pd",4,1+4);
Plot(Foreign("~Expectation","I"),"Expectation-LB",6,1+4);
GraphXSpace = 10;
rgds, Pal
--- In amibroker@xxxxxxxxxxxxxxx, "pip_hunter_2003"
<pip_hunter_2003@xxxx> wrote:
> Thx for the information.
>
> I am testing some of my trading systems with Amibroker. If it will
> work ok I think I will purchase the system.
>
> Btw. Could you tell me is there anything in AFL to check number of
> open positions? And the type (Long or short) of the open positions?
>
> --- In amibroker@xxxxxxxxxxxxxxx, "Pal Anand" <palsanand@xxxx>
wrote:
> > I have it for Mini-Forex as:
> >
> > Initial equity = 1000
> > Positions = Long and Short
> > Periodicity = Daily
> > Allow position size shrinking
> > Reverse entry signal forces exit
> > Allow single bar trade (same bar trade)
> > MinShares = 130
> > Round Lot Size = 10 (Assuming 1 contract = 10 Lots)
> > Tick Size = 1
> > Commissions & rates = 0 //Assuming no slippages, would set it to
> 0.5
> > for trades > $1,000,000.00
> > Annual interest rate = 0
> > Margin requirement = 2
> >
> > LB1=5;LB2=16;
> > //MaxOpenPos= LB = Optimize
("MaxOpenPos",5,LB1,LB2,1); //Optimized
> > using UPI
> > MaxOpenPos= LB = Param("MaxOpenPos",5,LB1,LB2,1);
> > SetOption("MaxOpenPositions", MaxOpenPos );
> >
> > MS1=130;MS2=390;
> > //MinShares = Optimize("MinShares",130,MS1,MS2,100);
> > MinShares = Param("MinShares",130,MS1,MS2,100);
> > SetOption("MinShares", MinShares);
> >
> > PositionSize=-100/MaxOpenPos=-100/5=-20 Lots(-2 Contracts)
> > =MaxRisk*Equity/(-MDD/2);
> >
> > /* Assuming MDD of 30% and verified by MCS. In reality, I limit
my
> > MaxRisk to 10% per trade, eventhough Optimalf% based on Win/Loss
> > ratio of 96/4 comes out with a MaxRisk (Optimalf%) of 92%.
> > Historical Kelly Value for MaxRisk = 0.45 */
> >
> > MaxRisk/trade=-2*(-300/2)/1000=0.3 = 30%
> >
> > //TR1 = Optimize("TotalReturn1",0.25,0.10,0.50,0.05);
> > TR1 = Param("TotalReturn1",0.25,0.10,0.50,0.05);
> > //TR2 = Optimize("TotalReturn2",0.45,0.10,0.50,0.05);
> > TR2 = Param("TotalReturn2",0.45,0.10,0.50,0.05);
> > //TR3 = Optimize("TotalReturn3",0.45,0.10,0.50,0.05);
> > TR3 = Param("TotalReturn3",0.45,0.10,0.50,0.05);
> > //TR4 = Optimize("TotalReturn4",0.45,0.10,0.50,0.05);
> > TR4 = Param("TotalReturn4",0.45,0.10,0.50,0.05);
> >
> > tr13 = TR1 * (C - Ref(C, -63)) / Ref(C, -63) * 100;
> > tr26 = TR2 * (C - Ref(C, -126)) / Ref(C, -126) * 100;
> > tr37 = TR3 * (C - Ref(C, -189)) / Ref(C, -189) * 100;
> > tr52 = TR4 * (C - Ref(C, -252)) / Ref(C, -252) * 100;
> >
> > RSW = tr13 + tr26 + tr37 + tr52; //Plan to experiment with Most
> > Anchored Momentum (MAM) later
> >
> > PositionScore = RSW;
> >
> > Would be curious to know what you come up with. Feedback
> appreciated
> > from all.
> >
> > rgds, Pal
> >
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "pip_hunter_2003"
> > <pip_hunter_2003@xxxx> wrote:
> > > How to set up the AmiBroker 4.50 std for EURUSD Forex
backtesting?
> > >
> > > I want to buy and sell only 1 slot / trade.
Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Yahoo! Groups Links
To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|