[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Re: Custom Backtest Software



PureBytes Links

Trading Reference Links

hi Marlin,
 
BuyAdjusted I define myself, see example. Probably this can be done with arrays only but I have done it in the past like this so I use this example. I defined Sell with a number 5 but 1 can be used as well.
 
See example and chart. This code enters on the limit. As a limit I take the low of the day on which I get the signal. I enter the next bar. If the  price goes below the low then the trade is entered. If the price does not go below the low the a "void" trade is created (in the chart I show an open circle). The trade is entered at the open but the exit is on the same price also on the open. This way the money will be reserved for this trade and will simulate that your money sits in the market waiting fro this trade and is not used for another trade,
 
rgds, Ed
 
 
procedure sellAtLimit_proc(Buy,BuyPrice,buyLimit,sellLimit) {

global Sell
;
global SellPrice
;
global
BuyAdjusted;
global
BuyPriceAdjusted;


// initialise arrays

SellPrice = 0
;
Sell = 0
;
BuyAdjusted =
0
;
BuyPriceAdjusted =
0
;

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


   
// case where it is likely to enter a long position

   
if (Buy[ i ] == 1 AND Low
[ i ] < buyLimit[ i ]) {
   
   
      
// buy at limit

      BuyAdjusted[ i ] =
1
;
      
      
if (Open
[ i ] < buyLimit[ i ]) {
      
      
         BuyPriceAdjusted[ i ] =
Open
[ i ];
         
      }
else
{
      
         BuyPriceAdjusted[ i ] = buyLimit[ i ];
      
      }
      
   
      
// find a sell position + sellprice

      
for (j = i; j < BarCount; j++) {
      
         
if (O
[ j ] > sellLimit[ j ]) {
         
            
Sell[ j ] = 1
;
            
SellPrice[ j ] = O
[ j ];
            i = j;
            
break
;
            
         }
else if (O[ j ] < sellLimit[ j ] AND H
[ j ] > sellLimit[ j ]) {
         
            
Sell[ j ] = 1
;
            
SellPrice
[ j ] = sellLimit[ j ];      
            i = j;
            
break
;   
                                       
         }
else if (j == BarCount - 1
) {
         
            i =
BarCount
;
         
         }                     
         
         
         
         
      
      }
      
   }
else if (Buy[ i ] == 1 AND Low
[ i ] >= buyLimit[ i ]) {
      
      
// enter and exit at the same price and time ("VOID" trade)

      BuyAdjusted[ i ] =
1
;
      BuyPriceAdjusted[ i ] =
Open
[ i ];

      
Sell[ i ] = 1
;
      
SellPrice[ i ] = Open
[ i ];
      
      
   }
   
}


}
// end procedure




SetBarsRequired(10000,10000
);
SetOption("MaxOpenPositions", 100
);
PositionSize = -5
;
SetTradeDelays(0,0,0,0
);
PositionScore = Random
();

pds =
10
;
mav =
MA(C
,pds);

Buy = StochK(pds) < 15
;;
Buy = Ref(Buy,-1
);
BuyPrice = O
;

buyLimit =
Ref(L,-1
);
sellLimit =
Ref(mav,-1
);

sellAtLimit_proc(
Buy,BuyPrice
,buyLimit,sellLimit);
Buy
= BuyAdjusted;
BuyPrice
= BuyPriceAdjusted;

SetChartOptions(0, chartShowDates
);
GraphXSpace = 5
;
Plot(C,"C",1,64
);
Plot(sellLimit,"SellLimit",colorGold,styleThick
);

PlotShapes(IIf((Buy AND !Sell),shapeUpTriangle,0),colorWhite, layer = 0, yposition = BuyPrice, offset = 0
);
PlotShapes(IIf((Sell AND !Buy),shapeDownTriangle,0),colorYellow, layer = 0, yposition = SellPrice, offset = 0
);
PlotShapes(IIf((Buy AND Sell),shapeHollowCircle,0),colorAqua, layer = 0, yposition = BuyPrice, offset = 0 );
 
 
 
 
 
 
 
 
 
----- Original Message -----
Sent: Thursday, July 26, 2007 10:10 PM
Subject: [amibroker] Re: Custom Backtest Software

Ed,

Cute trick.. I understand in principle, but I need a little
clarification on your code. If you could answer these questions.

Are the BuyAdjusted and BuyPriceAdjusted vectors special variables
that get used by the backtester?

Why did you set Sell to 5 instead of 1?

My exit is when today's close > 10 day moving average. I can't see
how placing that in the (>>> exit code here) would work since it will
only execute during a buy? help?

You have already cleared up some mystery for me.

Thanks ed for your help
redlion (marlin)

--- In amibroker@xxxxxxxxxps.com, "Edward Pottasch" <empottasch@...>
wrote:
>
> hi,
>
> you will not need the CBI for this. The trick here is to select
your signals as you normally do. However, if the limit is not hit you
want to exit at the same bar at the same price. The backtester will
now only charge commission. The backtester now reserves this amount
of money for this trade however it will not buy anything.
>
> As an example I show a snapshot of how you can do this, Ed
>
>
>
> // case where it is likely to enter a long position
> } else if (Buy[ i ] == 1 AND Low[ i ] < buyLimit[ i ]) {
>
> >>>>> exit code here
>
> // case where limit is not reached, creat a "VOID" trade
> } else if (Buy[ i ] == 1 AND Low[ i ] >= buyLimit[ i ]) {
>
> // enter and exit at the same price and time ("VOID" trade)
> BuyAdjusted[ i ] = 1;
> BuyPriceAdjusted[ i ] = Open[ i ];
>
> Sell[ i ] = 5;
> SellPrice[ i ] = Open[ i ];
>
> }
>
>
> ----- Original Message -----
> From: redliontrader
> To: amibroker@xxxxxxxxxps.com
> Sent: Wednesday, July 25, 2007 12:58 AM
> Subject: [amibroker] Custom Backtest Software
>
>
> Attempting to work my way up the learning curve. I am trying to
> implement a system that scans through a list of stock, finds the
10
> best trades for the day and then enters limit orders at 2% below
the
> current day's close for those 10 trades.
>
> I want to be able to backtest my system. I don't think the
standard
> portfolio testing will work because my system uses limit orders
to buy.
> So they may fill or may not fill. I can't quite get my head
around
> the backtesting object to get started.
>
> Any help would be appreciated.
>
> RLT
>

__._,_.___

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 NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html





SPONSORED LINKS
Investment management software Investment property software Investment software
Investment tracking software Return on investment software

Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___