Hello,

You can be sure that if that happens, the trade price that you set is NOT 
within H-L range.
You can easily see that if you add
SetOption("PriceBoundChecking", False );

then you will see that the price is outside H-L range.

Your plots may not take into account trade delays that you have have set in the 
settings.
Think about it.
Also with raw mode, the entry point may not be the very first bar when
signal occurred, but later (when cash becomes available because other trade 
end).

Also read the manual section:
http://www.amibroker.com/guide/a_equity.html

Equity() function performs in-place single-security backtest, and it does not 
take into account portfolio (i.e. other symbols),
so it will always perform backtestRegular (as there were no other symbols).
(Technically it is allowed to use it anywhere, but it will still perform 
single-security backtest, therefore
it will not take into account raw mode and all its portfolio-level consequences)
Read more about modes
http://www.amibroker.com/guide/h_backtest.html

Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message ----- 
From: "pmxgs" <[email protected]>
To: <[email protected]>
Sent: Tuesday, June 09, 2009 2:38 AM
Subject: [amibroker] Re: Equity(1) modifies sell price ignoring ceil


Hello Tomasz,

 regarding this subject of buyprice array I am getting strange results in the 
baktester. I define my buyprice variable and plot it 
on the chart so that I can check if it is being calculated correctly, and 
apparently it is, but when I run the backtester the trades 
are executed at different prices.

>From the code below do you see any reason why the backtester doesn't agree 
>with the buyprice variable ploted on the chart.

Below is just a part of the code which allows you to see what I'm talking 
about. Below this I pasted the entire code if it is 
usefull.

thanks very much
.......

PH =TimeFrameGetPrice("H", inDaily, -1);
PL =TimeFrameGetPrice("L", inDaily, -1);
PC =TimeFrameGetPrice("C", inDaily, -1);

PP=(PH+PL+PC)/3;
R3=(PH + (2 * (PP - PL)));
S3=(PL - (2 * (PH - PP) ));

// trading system

SetBacktestMode( backtestRegularRawMulti );

intrade=0;
step1=0;
step2=0;
step3=0;
step4=0;
step5=0;
step6=0;
step7=0;
npos=0;
stackplot=0;
entrypriceplot=0;
entryprice=0;
HighestSinceentry=0;
stacks=0;

entry=Cross(H,R3);
exit=Cross(pp,L);
SellPrice=PP; //stop loss selling price
Buy=0;

for(i=1 ; i<(BarCount-1) ; i++)
{

     if( entryprice[i]==0 AND entry[i]==1 AND npos[i]==0) // entry bar check
     {

        entryprice=R3[i];
        HighestSinceentry=H[i];
        stacks[i]=Min(int((H[i]-entryprice[i])*10000/10),4)+1;
  npos[i]=stacks[i];
        BuyPrice[i]=(2*entryprice[i]+((stacks[i]-1)*10/10000))/2;
        Buy[i]=1;
        intrade=1;
        step1[i]=1;
......

Entire code:

//begin
//Pivot Points Indicator

PH =TimeFrameGetPrice("H", inDaily, -1);
PL =TimeFrameGetPrice("L", inDaily, -1);
PC =TimeFrameGetPrice("C", inDaily, -1);

PP=(PH+PL+PC)/3;
//R1 = (2 * PP) - PL;
//S1 = (2 * PP) - PH;
//R2 = PP + R1 - S1;
//S2 = PP + S1 - R1;
R3=(PH + (2 * (PP - PL)));
S3=(PL - (2 * (PH - PP) ));
PPcolor=ParamColor("PP",colorYellow);
SRcolor=ParamColor("S/R color",colorSkyblue);
SRstyle=ParamStyle("S/R style",styleDots|styleNoLine|styleNoRescale);
//Plot(PP,"",PPcolor,styleThick);
//Plot(S3,"",SRcolor,SRstyle);
//Plot(R3,"",SRcolor,SRstyle);

// trading system

SetBacktestMode( backtestRegularRawMulti );


intrade=0;
step1=0;
step2=0;
step3=0;
step4=0;
step5=0;
step6=0;
step7=0;
npos=0;
stackplot=0;
entrypriceplot=0;
entryprice=0;
HighestSinceentry=0;
stacks=0;

entry=Cross(H,R3);
//BuyPrice=R3; //entryprice
exit=Cross(pp,L);
SellPrice=PP; //stop loss selling price
Buy=0;

for(i=1 ; i<(BarCount-1) ; i++)
{

     if( entryprice[i]==0 AND entry[i]==1 AND npos[i]==0) // entry bar check
     {

        Buy[i]=1;
        entryprice=R3[i];
        HighestSinceentry=H[i];
        stacks[i]=Min(int((H[i]-entryprice[i])*10000/10),4)+1; // inclui mais 
uma posiçao que é a inicial
  npos[i]=stacks[i];
        BuyPrice[i]=(2*entryprice[i]+((stacks[i]-1)*10/10000))/2; // retirar um 
pois esta incluido nos stacks
        intrade=1;
        step1[i]=1;

         if(H[i]>=(entryprice[i]+50/10000)AND intrade[i]) //profit target hit 
on entry bar
       {

BuyPrice=(2*entryprice[i]+(4*10/10000))/2;
Sell[i]=1;
SellPrice[i]=entryprice[i]+50/10000;
          entryprice=0;
HighestSinceentry=0;
npos[i+1]=0;

     step2[i]=2;
        intrade=0;
          }

      }



if (H[i]>HighestSinceentry[i] AND intrade[i]) //increase number of positions
{

HighestSinceentry=H[i];

stacks[i]=Min(int((H[i]-entryprice[i])*10000/10),4)-npos[i]+1; //calculate 
number of stacks
if(stacks[i]<0) stacks[i]=0;
    npos[i]=Min(stacks[i]+npos[i],5); // keep highest number of stacks
    step3[i]=3;
         if(stacks[i]>0 AND npos[i]<=5)  // doesn't buy if stacks is zero and 
doesn't buy if # of positions is > 5
           {
            Buy[i]=1;
        BuyPrice[i]=(2*entryprice[i]+(stacks[i]*10/10000))/2;
        step4[i]=4;
            }
   }


      npos[i+1]=Min(npos[i],5);
   step5[i]=5;


   if(H[i]>=(entryprice[i]+50/10000) AND intrade[i]) //profit target hit
{

Sell[i]=1;
entryprice=0;
SellPrice[i]=entryprice[i]+50/10000;
    HighestSinceentry=0;
npos[i+1]=0;

step6[i]=6;
    intrade=0;
    }

if(exit[i]==1 AND intrade[i]) //stop loss hit
{

Sell[i]=1;
entryprice=0;
HighestSinceentry=0;
npos[i+1]=0;
   intrade=0;
   step7[i]=7;
}



 stackplot[i]=stacks[i];
 entrypriceplot[i]=entryprice ;

}
Plot(Buy,"buy",colorLime,styleOwnScale);
Plot(step1,"st1",colorLime,styleOwnScale);
Plot(step2,"st2",colorLime,styleOwnScale);
Plot(step3,"st3",colorLime,styleOwnScale);
Plot(step4,"st4",colorLime,styleOwnScale);
Plot(step5,"st5",colorLime,styleOwnScale);
Plot(step6,"st6",colorLime,styleOwnScale);
Plot(step7,"st7",colorLime,styleOwnScale);

Plot(Sell,"sell",colorRed,styleOwnScale);

Plot(BuyPrice,"buyprice",colorViolet,styleOwnScale);
Plot(npos,"npos",colorPink,styleOwnScale);
Plot(stackplot,"stack",colorAqua,styleOwnScale);

Plot(entrypriceplot,"entryprice",colorBlue,styleOwnScale);

SetPositionSize(stackplot,spsShares);

//end

--- In [email protected], "Tomasz Janeczko" <gro...@...> wrote:
>
> Hello,
>
> ceil may be higher than high, that's why.
>
> Please read the manual
> http://www.amibroker.com/guide/h_backtest.html
>
> Quote:
> "During back-testing AmiBroker will check if the values you assigned to 
> buyprice, sellprice, shortprice, coverprice fit into
> high-low range of given bar. If not, AmiBroker will adjust it to high price 
> (if price array value is higher than high) or to the 
> low
> price (if price array value is lower than low)"
>
> You can turn that behaviour off using
> http://www.amibroker.com/f?setoption
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message ----- 
> From: "only_accept_the_real_thing" <olivermann...@...>
> To: <[email protected]>
> Sent: Monday, June 08, 2009 11:12 AM
> Subject: [amibroker] Equity(1) modifies sell price ignoring ceil
>
>
> > Hi,
> >
> > Running the code below on price data that includes decimals, the SellPrice 
> > used is the Close price (with decimals) rather than 
> > the
> > ceil price.
> >
> > If SellPrice is changed to round(C) it is correctly rounded, so why doesn't 
> > ceil(C) work??
> >
> >
> > NB: Remove Equity(1) and the SellPrice is correctly ceil(C).
> >
> >
> > ------
> > BuyPrice = Open;
> > SellPrice = ceil(C);
> >
> > Equity(1);
> >
> > // Extra columns to display in Exploration
> > Filter=1;
> > AddColumn(Open,"Open");
> > AddColumn(High,"High");
> > AddColumn(Low,"Low");
> > AddColumn(Close,"Close");
> > AddColumn(BuyPrice,"BuyPrice");
> > AddColumn(SellPrice,"SellPrice");
> >
> >
> >
> >
> >
> > ------------------------------------
> >
> > **** 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/
> >
> > Yahoo! Groups Links
> >
> >
> >
>




------------------------------------

**** 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/

Yahoo! Groups Links



Reply via email to