Hello,

I managed to do the following:

Buy=True;
Sell=False;

PositionScore=C;

SetPositionSize(IIf(C<Ref(C,-1),1,99),spsPercentOfEquity);

SetCustomBacktestProc("");
if (Status("action") == actionPortfolio) 
{
bo = GetBacktesterObject();     
bo.PreProcess();        
        for (i = 0; i < BarCount; i++)  
        {
        CounterEntryLong[i]=0;
                for (sig = bo.GetFirstSignal(i); sig; sig = bo.GetNextSignal(i))
       {         
                        if(sig.IsEntry() AND sig.IsLong())
                        {
                        CounterEntryLong[i]=CounterEntryLong[i]+1;
                        if (CounterEntryLong[i]>Rank OR 
sig.PosSize==-99){sig.PosSize=0;}
                        }
                }       
       bo.ProcessTradeSignals(i);       
        }       
        bo.PostProcess();
}

It simply assigns positionsize of 99 percent of equity to the condition which 
is undesirable and later recognized in the backtester and reset to 0 so no 
trades are taken. 

Anyone care to comment whether is this the feasible approach? Is it correct?

Thank you.


--- In [email protected], "mkecera" <mkec...@...> wrote:
>
> Hello,
> 
> Thank you. I will try it and report here on the progress.
> 
> Best regards,
> 
> Michal
> 
> --- In [email protected], Tomasz Janeczko <groups@> wrote:
> >
> > Hello,
> > 
> > "BUT that is different than applying condition Buy:RSI(2)<5 ONLY on 
> > three highest priced stocks in a watchlist of 100 stocks "
> > 
> > Remember that what the signal is depends on you.
> > 
> > In that case you can simply replace your buy condition with
> > Buy = 1;
> > 
> > and do the RSI(2)<5 condition checking inside custom backtest part.
> > 
> > Or use rotational mode to the same effect.
> > 
> > Best regards,
> > Tomasz Janeczko
> > amibroker.com
> > 
> > On 2010-04-09 12:31, mkecera wrote:
> > > Hello,
> > >
> > > This will rank signals. If I have
> > >
> > > Buy:RSI(2)<5;
> > > PositionScore=Close;
> > > SetOption("MaxOpenPositions",3);
> > >
> > > It will buy 3 highest priced stocks with low RSI.
> > >
> > > BUT that is different than applying condition Buy:RSI(2)<5 ONLY on three 
> > > highest priced stocks in a watchlist of 100 stocks.
> > >
> > > First one might get a trade where the second one wont because there might 
> > > be no stock within three highest priced that has RSI(2) lower than 5.
> > >
> > > This is how I understood PositionScore and therefore didnt use it. Am I 
> > > wrong?
> > >
> > > --- In [email protected], Tomasz Janeczko<groups@>  wrote:
> > >    
> > >> Hello,
> > >>
> > >> You are doing things wrong way.
> > >> Leave the processing to the backtester.
> > >> Generate BUY/Sell signals FIRST, REGARDLESS of score,
> > >> and assign the score to PositionScore
> > >> AmiBroker will sort all signals based on their score and then decide
> > >> which ones
> > >> are FIRST (top ranked) and trade them.
> > >> It will NOT trade all signals, but only top-ranked ones.
> > >> The amount is controllable by the user using MaxOpenPositions.
> > >> You don't need to do this processing on your own, it is all built-in
> > >> and many times faster than you could ever do in your formula.
> > >> You don't need any custom backtester code to do the ranking and trading
> > >> top-N symbols as
> > >> it is integral and built in part of the backtest process.
> > >> Why re-invent the wheel ?
> > >>
> > >> It is explained here:
> > >> http://www.amibroker.com/guide/h_portfolio.html
> > >>
> > >>
> > >> Best regards,
> > >> Tomasz Janeczko
> > >> amibroker.com
> > >>
> > >> On 2010-04-09 08:47, mkecera wrote:
> > >>      
> > >>> Hello,
> > >>>
> > >>> Thank you.
> > >>>
> > >>> I came up with the code below. So signal array has ALL the symbols 
> > >>> sorted or just the ones which passed the BUY rules? Because I want to 
> > >>> sort ALL the symbols first and then apply some BUY rules on the first 
> > >>> five symbols.
> > >>>
> > >>> Again thanks for your help.
> > >>>
> > >>> SetCustomBacktestProc("");
> > >>> if (Status("action") == actionPortfolio)
> > >>>         {
> > >>>       bo = GetBacktesterObject();       
> > >>>       bo.PreProcess();  
> > >>>       for (i = 0; i<   BarCount; i++)   
> > >>>       {
> > >>>          Counter[i]=0;
> > >>>           for (sig = bo.GetFirstSignal(i); sig; sig = 
> > >>> bo.GetNextSignal(i))
> > >>>           {     
> > >>>                  Counter[i]=Counter[i]+1;
> > >>>                         if (Counter[i]>5){sig.PosSize=0;}
> > >>>              }  
> > >>>           bo.ProcessTradeSignals(i);    
> > >>>       } 
> > >>>       bo.PostProcess();
> > >>> }
> > >>>
> > >>>
> > >>> --- In [email protected], Tomasz Janeczko<groups@>   wrote:
> > >>>
> > >>>        
> > >>>> Hello,
> > >>>>
> > >>>> Using GetFirstSignal/GetNextSignal methods.
> > >>>> When you iterate using those functions you will get the list of
> > >>>> symbols sorted by absolute value of positionscore.
> > >>>> For more info see:
> > >>>> http://www.amibroker.com/guide/a_custombacktest.html
> > >>>> and
> > >>>> http://www.amibroker.org/userkb/2008/03/16/amibroker-custom-backtester-interface-2/
> > >>>>
> > >>>> Best regards,
> > >>>> Tomasz Janeczko
> > >>>> amibroker.com
> > >>>>
> > >>>> On 2010-04-08 22:23, mkecera wrote:
> > >>>>
> > >>>>          
> > >>>>> Fast response! Thank you. Can you be more specific on how to access 
> > >>>>> rankings using custom backtester?
> > >>>>>
> > >>>>> --- In [email protected], Tomasz Janeczko<groups@>    wrote:
> > >>>>>
> > >>>>>
> > >>>>>            
> > >>>>>> Hello,
> > >>>>>>
> > >>>>>> Oh my God! It does not only re-iterates for all stocks BUT repeating 
> > >>>>>> it
> > >>>>>> for ALL bars
> > >>>>>> A MUST-READ is this: 
> > >>>>>> http://www.amibroker.com/guide/x_performance.html
> > >>>>>>
> > >>>>>> Follow advice given in the article and MOVE LOOP INVARIANTS OUTSIDE 
> > >>>>>> THE
> > >>>>>> LOOP !
> > >>>>>>
> > >>>>>> Better yet REMOVE THIS code altogether.
> > >>>>>> You don't need this.
> > >>>>>> Instead use PositionScore that does the ranking for you !
> > >>>>>> This is a 2nd must read:
> > >>>>>> http://www.amibroker.com/guide/h_portfolio.html
> > >>>>>>
> > >>>>>> If you need to access rankings use custom backtester - the signal 
> > >>>>>> array
> > >>>>>> will have all symbols sorted by absolute
> > >>>>>> value of position score on bar by bar basis - it will be many orders 
> > >>>>>> of
> > >>>>>> magnitude
> > >>>>>> faster than your code.
> > >>>>>>
> > >>>>>> Best regards,
> > >>>>>> Tomasz Janeczko
> > >>>>>> amibroker.com
> > >>>>>>
> > >>>>>> On 2010-04-08 21:52, mkecera wrote:
> > >>>>>>
> > >>>>>>
> > >>>>>>              
> > >>>>>>> Hi All,
> > >>>>>>>
> > >>>>>>> I am using the function below to get ranking of particular stock in 
> > >>>>>>> the watchlist according to defined function. Problem is that for 
> > >>>>>>> backtest its too slow as it recalculates for each stock.
> > >>>>>>>
> > >>>>>>> Is there a way to store the rankings once and then just read them 
> > >>>>>>> or pass them between different stocks during portfolio backtest?
> > >>>>>>>
> > >>>>>>> Any pointers are greatly appreciated. Thank you.
> > >>>>>>>
> > >>>>>>> function GetValue(index)
> > >>>>>>>     {
> > >>>>>>>     return C[index];
> > >>>>>>>     }
> > >>>>>>>
> > >>>>>>> for (z=1; z<=BarCount-1; z++)
> > >>>>>>> {
> > >>>>>>>     local List;
> > >>>>>>>
> > >>>>>>>        List = CategoryGetSymbols( categoryWatchlist, 
> > >>>>>>> WatchlistNumber );
> > >>>>>>>
> > >>>>>>>        for( i = 0; ( SymbolNumber= StrExtract( List, i ) ) != ""; 
> > >>>>>>> i++ )
> > >>>>>>>        {
> > >>>>>>>     SetForeign(SymbolNumber);
> > >>>>>>>     TemporaryValue = GetValue(z);
> > >>>>>>>     RestorePriceArrays();
> > >>>>>>>     TickersValue[i] = TemporaryValue;
> > >>>>>>>        }
> > >>>>>>>
> > >>>>>>>     MyPosition[z]=0;
> > >>>>>>>     for( n = 0; n<=i; n++ )
> > >>>>>>>        {
> > >>>>>>>     
> > >>>>>>> MyPosition[z]=IIf(MyValue[z]<TickersValue[n],MyPosition[z]+1,MyPosition[z]);
> > >>>>>>>        }
> > >>>>>>> }
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> ------------------------------------
> > >>>>>>>
> > >>>>>>> **** 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
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>>            
> > >>>>
> > >>>>          
> > >>>
> > >>>
> > >>> ------------------------------------
> > >>>
> > >>> **** 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