PureBytes Links
Trading Reference Links
|
Yup,
Your solution is more direct. If you want it to perform even faster,
then just calculate RSI(14) once and store it in a local variable.
Then use the local variable throughout the rest of the code, rather
than recalculating over and over again.
Currently, you've got 5 occurences of the same calculation, this can
be reduced to a single occurence, resulting in better performance.
Mike
--- In amibroker@xxxxxxxxxxxxxxx, "alogicalinvestor"
<alogicalinvestor@xxx> wrote:
>
> Mike,
>
> Thanks! The formula you gave does exactly what I wanted to do.
>
> However, I wrote the following which gives the same result but is a
> bit faster.
>
> // RSI going below 70 after being above for 3 days or more and RSI
> going above 30 after being below 30 for 3 days or more
> Buy = Cross(RSI(14),30) AND (BarsSince(Cross(30,RSI(14))) >= 3);
> Sell = Cross(70,RSI(14)) AND (BarsSince(Cross(RSI(14),70)) >= 3);
>
> Filter = (Buy OR Sell);
>
> AddTextColumn(FullName(), "Security", 1.0, colorDefault,
> colorDefault,200);
> AddColumn(RSI(14),"RSI(14)",1.2, colorDefault, colorDefault,200);
> AddTextColumn( WriteIf(Buy, "BULLISH", WriteIf
(Sell, "BEARISH", "")),
> "BULLBEAR", 1.0, colorDefault, colorDefault,100);
>
> However, I learned a couple of new things with your approach.
>
> Best,
> vps
> --- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@> wrote:
> >
> > Have a look at the Sum function. I believe that the following
will do
> > what you are looking for.
> >
> > Change the values of UpDays and Threshold to be any number of
> > consecutive up days (e.g. 3) and the threshold required to cross
> > (e.g. 70). Change the CountRSIAbove comparrison to an inequality
for
> > more flexibility
> > e.g.
> > ... AND CountRSIAbove >= 2; // 2 of last 3 days
> > ... AND CountRSIAbove >= UpDays - 1; // Generic x-1 of x last days
> >
> > UpDays = 3;
> > Threshold = 70;
> >
> > CurrentRSI = RSI();
> > PreviousRSIAbove = Ref(CurrentRSI, -1) >= Threshold;
> > CountRSIAbove = Sum(PreviousRSIAbove, UpDays);
> > RSIBelow = Cross(Threshold, CurrentRSI);
> > Filter = RSIBelow AND CountRSIAbove == UpDays;
> >
> > for (i = UpDays; i > 0; i--) {
> > AddColumn(Ref(CurrentRSI, -i), "" + i + " days ago");
> > }
> >
> > AddColumn(CurrentRSI, "Today");
> >
> > Mike
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "alogicalinvestor"
> > <alogicalinvestor@> wrote:
> > >
> > > Friends,
> > >
> > > A very basic Amibroker formula question from a newbie.
> > >
> > > I am trying to write an exploration that finds stocks whose RSI
line
> > > moved below 70 today after being above 70 for the previous
three
> > days.
> > >
> > > I am not sure how to handle the 'previous three days' part.
> > >
> > > One way I can think of is Ref(RSI, -1), Ref(RSI,-2) and then
> > checking
> > > these RSI values individually to determine if they were above
70.
> > >
> > > But I am sure there is a simpler way.
> > >
> > > Thanks,
> > > vps
> > >
> >
>
------------------------------------
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/
|