Hello everyone.

I am trying to apply following rule of estimating position size:
(f*q*E)/(m*ATR),
where f - fraction of current equity, q - currency pair quotation, E -
current equity, m - multiplier of volatility measure (ATR).

Assuming that SetPositionSize(...,spsPercentOfEquity) would be adequate,
I prepered following formula (here only parts):


//Backtest for AUDJPY//

a=45000/2.6729;//initial Equity = 16865,65 //

spread=0.025;

SetOption("InitialEquity",a);

SetOption("PriceBoundChecking",False);

SetOption("CommissionMode",2);

SetOption("CommissionAmount",0);

SetOption("AccountMargin",1);

/*RoundLotSize=0.01*/

TickSize=0.001;

PointValue=1;

//here comes trading rules...//

//among them there is a line with a following variable:

start[i]=BuyPrice[i];//start is a trade open price//

StaticVarSet("kurs_"+Name(),kurs);

//finally there is a MM part of the code:

f=Optimize("capital",1,0,100,0.25);

SetPositionSize((f*start)/(e*ATR(20)),2);

Unfortunately backtest results (positions' sizes) are weird. For example
in last trade variables are as follows:

f=1, start=61.525, e=2.25 (for profitable system it should be much
higher, however, such a value helps to show the embarassing differences)
, ATR(20)=0,1255 and Equity(=Cash)=3493,15.

For such values position for the last transaction should be equal to
2741,08.  However, backtester set it to 7169,57.

I decided to use CBT to achieve some stability as far as Equity() is
concerned. This is my code:

SetCustomBacktestProc("");

if(Status("action")==actionPortfolio)

{

bo=GetBacktesterObject();

bo.PreProcess();

for(i=0;i<BarCount;i++)

{

for(sig=bo.GetFirstSignal(i);sig;sig=bo.GetNextSignal(i))

{

kurs2=StaticVarGet("kurs_"+sig.Symbol);

kurs3=kurs2[i];

  pozycja=(f/100*kurs3*bo.Equity)/(e*ATR(20));

sig.PosSize=pozycja;

}

bo.ProcessTradeSignals(i);

}

bo.PostProcess();

}

Again bad results...

What is especially confusing when bo.Equity is higher than initial
equity (that is when system is profitable) everything is good. I really
don't know where the problem is.

Do you have any ideas? Please help.

Tomasz

Reply via email to