PureBytes Links
Trading Reference Links
|
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 amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> 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" <olivermannion@xxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> 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
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/amibroker/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:amibroker-digest@xxxxxxxxxxxxxxx
mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx
<*> 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/
|