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