PureBytes Links
Trading Reference Links
|
I agree this seems like the only solution. It is a pity however, as I
would have expected to be able to pick up the weakest signal as a
short position. In fact at this point I don't really understand how
the new functionality SeparateLongShortRank actually works.
In reality I was trying to use positionscore to speed up an earlier
code which directly computed the minimum and maximum values for the
watchlist, and went long/short on those. Worked perfectly, but very
slow. By having to calculate a median value in a similar way I'm back
to square one :)
Here is my earlier code, for reference. I guess it's a bit of a weird
way to do it, but it does work..
FirstHourUp = IIf (TimeNum() == 103000,True,False);
TickerList = CategoryGetSymbols(categoryWatchlist, 16); ;
NumBars = 13;
MaxRelPerf = -10000;
MinRelPerf = 10000;
for( i = 0; ( symbol = StrExtract( TickerList, i ) ) != ""; i++ )
{
SetForeign(symbol);
MaxRelPerf = Max(ROC(C,NumBars)/ATR(250),MaxRelPerf);
MinRelPerf = Min(ROC(C,NumBars)/ATR(250),MinRelPerf);
}
RestorePriceArrays();
Buy = FirstHourUp AND ROC(C,NumBars)/ATR(250)==MaxRelPerf;
Short = FirstHourUp AND ROC(C,NumBars)/ATR(250)==MinRelPerf;
cheers,
Claude
--- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@xxx> wrote:
>
> Deducting an average derived from anything other than the values of
> the watch list in question (e.g. deducting average of S&P500) would
> still be prone to the same problem since the elements of the watch
> list might all be on the high side of the average and thus still all
> end up positive (or conversely all be on the low side and all end up
> negative).
>
> Similarly, deducting an average of the watchlist itself would only be
> guaranteed to correctly handle the single long/single short scenario.
> If the strategy were to be expanded to handle 2 or more longs or 2 or
> more shorts, then a single extreme value could drag the average
> up/down such that only that single extreme value was above/below the
> average and the subsequent longs/shorts would never get recognized. If
> you're sure that you only ever want a single long and a single short,
> this can easily be accomplished by first running an AFL that uses
> AddToComposite with which to later derive an average in the main AFL
> on the second pass.
>
> The more robust solution would be to calculate the *median* value and
> subtract that from the individual ROC(C,NumBars)/ATR(250) values
> giving an equal number of positive results as negative results. You
> could then successfully employ your original logic for taking longs
> when > 0 and shorts when < 0 with the assurance that there will always
> be an equal number of each, thereby allowing any combination of longs
> and shorts.
>
> e.g.
>
> PositionScore = ROC(C,NumBars)/ATR(250) - MedianValue;
> Buy=FirstHourUp AND PositionScore > 0;
> Short=FirstHourUp AND PositionScore < 0;
>
> So, the question becomes how to get the median value? For that you
> would need to rank and sort the ROC(C,NumBars)/ATR(250) calculation
> across all members of the watch list, then pull out the value
> appearing in the center of the ordered list (if odd number of items in
> watch list) or the average of the two center items (if even number of
> items in watch list).
>
> So, how do you rank and sort across a watch list? You can refer to the
> following link for a solution where there are not too many items in
> the list:
>
> http://finance.groups.yahoo.com/group/amibroker/message/126400
>
> Mike
>
> --- In amibroker@xxxxxxxxxxxxxxx, "vlanschot" <vlanschot@> wrote:
> >
> > One way of solving this would be to deduct an average ROC from some
> > aggregate index from each of your individual scores, e.g. if your
> > stocks belong to the S&P500, deduct its ROC from each of your
> > individual ROCs (you can also create one yourself). You are correct
> > in using the new functionality to seperate your shorts from your
> > longs via the MaxOpenLong and MaxOpenShort functions.
> >
> > Hope this helps.
> >
> > PS
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "claudecaruana" <claudecaruana@>
> > wrote:
> > >
> > > Hi,
> > >
> > > Actually the code I supplied on my original message already does
> > > this.. Works ok if the positionscores for each iteration contain
> > both
> > > positive and negative values. If they are all positive or all
> > negative
> > > the code below would fail.
> > >
> > > BR
> > > C
> > > --- In amibroker@xxxxxxxxxxxxxxx, "Joe" <j0etr4der@> wrote:
> > > >
> > > > Hi,
> > > >
> > > > This bit me, too. From the AFL Reference Manual, section on
> Using
> > > > Position Score, "...AmiBroker will use the absolute value of
> > > > PositionScore variable to decide which trades are preferred."
> > > >
> > > > Try this (untested):
> > > >
> > > > PS = ROC(C,NumBars)/ATR(250);
> > > > PositionScore = PS;
> > > > .
> > > > .
> > > > .
> > > > Buy=FirstHourUp AND PS > 0;
> > > > Short=FirstHourUp AND PS < 0;
> > > >
> > > >
> > > > Good luck,
> > > >
> > > > Joe
> > > >
> > > >
> > > >
> > > > --- In amibroker@xxxxxxxxxxxxxxx, "claudecaruana"
> <claudecaruana@>
> > > > wrote:
> > > > >
> > > > > hi All,
> > > > >
> > > > > I am trying to implement a very simple intraday system using
> > > > > PositionScore, which buys the strongest symbol at a particular
> > time
> > > > > and shorts the weakest. Exit is at some particular time later.
> > > > >
> > > > > I am using ROC to determine strength. The code below works
> fine
> > when
> > > > > the symbols backtested have mixed positive and negative ROC's,
> > but if
> > > > > on a particular day all ROC's are positive, the short trade is
> > missed
> > > > > and vice versa for all ROC's negative.
> > > > >
> > > > > I think I understand why this is happening, however I cannot
> get
> > > > > around solving it!
> > > > >
> > > > > Here is the code: (I am using V5.17)
> > > > >
> > > > > FirstHourUp = IIf (TimeNum() == 103000,True,False);
> > > > > numbars=13;
> > > > >
> > > > > SetOption("SeparateLongShortRank", True );
> > > > > SetOption("MaxOpenPositions", 2);
> > > > > SetOption("MaxOpenLong", 1 );
> > > > > SetOption("MaxOpenShort",1);
> > > > >
> > > > > PositionScore = ROC(C,NumBars)/ATR(250);
> > > > >
> > > > > Buy=FirstHourUp AND PositionScore > 0;
> > > > > Short=FirstHourUp AND PositionScore < 0;
> > > > >
> > > > > Sell = TimeNum() == 113000;
> > > > > Cover = TimeNum() == 113000;
> > > > >
> > > > >
> > > > > Note: If I replace the buy/sell lines with the following:
> > > > >
> > > > > Buy=FirstHourUp ;
> > > > > Short=FirstHourUp ;
> > > > >
> > > > > then I get no short signals at all. I am not sure why.
> > > > >
> > > > > Any ideas on what I can do to resolve the issue?
> > > > >
> > > > > Thanks for any feedback,
> > > > > Claude
> > > > >
> > > >
> > >
> >
>
------------------------------------
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
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/
|