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

Re: [amibroker] Re: if (Buy[i] >= 0) not behaving as expected



PureBytes Links

Trading Reference Links

These comments assume I am correct in my interpretation of the questions

When using array bar identifiers like [barcount-1] you would normally
need to turn off the fastAFL in the chart, using setbarsrequired
function

In your original code you had Buy[i] where i was defined as the list
number of a string of symbols. This is not correct usage because
buy[i] would automatically refer to the bar i of the array.

Another small item is that Buy would either have values of 0 or 1, so
Buy>=0 would always be true

for this type of situation would probably be better using this type of
method, although I am not sure what exactly you want plotted
Plot( iif( buy, 100 * ( fc - fc[ fvb ] )/ fc[ fvb ], null ), symbol,
colorLightOrange + ( (2*i) % 15 ), styleLine );

I am not clear on where you have defined the variables ROCt  ROCc RSIt
 RSIc. If these are not using foreign functions to calculate them,
then they will all be based on the underlying selected symbol

-- 
Cheers
Graham Kav
AFL Writing Service
http://www.aflwriting.com



2009/5/9 Mike <sfclimbers@xxxxxxxxx>:
> I see no reason why your function should be taking an argument named R14. You never use that value, but rather immediately clobber it.
>
> Also, there is no need for an IIF here. Any non zero value is true. And your expression evaluates to a boolean already (1 vs. 0). Just return the last element as is:
>
> function MyPlot(fc) {
>  R14 = (RSIa(fc, 14) > 50);
>  return R14[BarCount - 1];
> }
>
> Mike
>
> --- In amibroker@xxxxxxxxxxxxxxx, "gmorlosky" <gmorlosky@xxx> wrote:
>>
>> I got it. I was not using RSIa...here is what I replaced your ShouldPlot with, and it works:
>>
>> function MyPlot(fc,R14)
>> {
>> R14 = IIf(RSIa(fc,14) > 50,1,-1);
>> return (R14[BarCount -1] >= 1 );
>> }
>>
>> function ShouldPlot(price, fvb)
>> {
>> return (fc[fvb] >= 35);
>> }
>>
>> --- In amibroker@xxxxxxxxxxxxxxx, "gmorlosky" <gmorlosky@> wrote:
>> >
>> > I spoke a little too soon. It does work well with anything associated with the last bar (i.e. close, open, etc.), BUT what I need is reference to something like RSI(14) > 50, which it isn't working (error 6, error 4, etc.) no matter how I try to code it. Any thoughts ???
>> >
>> >
>> > --- In amibroker@xxxxxxxxxxxxxxx, "tuzo_wilson" <j.tuzo.wilson@> wrote:
>> > >
>> > > --- In amibroker@xxxxxxxxxxxxxxx, "gmorlosky" <gmorlosky@> wrote:
>> > > >
>> > > > Thanks Tuzo (and Mike), but I can't get it to work yet. I used fc >= 500; as my logic to represent the ShouldPlot. I get all plots, even though each stock is under $500. I tried various combination of price to get a partial group of plots, but it's always all of them.
>> > > >
>> > > > Any other ideas on how to make each "foreign" the "active" for each plotting ???
>> > >
>> > > ShouldPlot is hardcoded to return true right now.  Change it to only return true when your condition is true.
>> > >
>> > > In this case it will only display the symbol if the closing price of the first bar visible is greater than 500. Note that you will also have to also change the call to ShouldPlot to pass in the first visible bar i.e. if (ShouldPlot(fc,fvb))
>> > >
>> > > function ShouldPlot(price, fvb)
>> > > {
>> > >   return (fc[fvb] >= 30);
>> > > }
>> > >
>> > >
>> > > Tuzo
>> > >
>> > > > _SECTION_BEGIN("RelativePerformance");
>> > > > fc = "";
>> > > > function ShouldPlot(price, fvb)
>> > > > {
>> > > >         return (fc[fvb] >= 30);
>> > > > }
>> > > > function GetWatchListSymbols(watchListName)
>> > > > {
>> > > >    wlNumber = CategoryFind(watchListName, categoryWatchlist );
>> > > >    return CategoryGetSymbols(categoryWatchlist, wlNumber );
>> > > > }
>> > > > SetChartOptions(0,chartShowArrows|chartShowDates);
>> > > > WatchListName = ParamStr("Watch List Name","RelStrength"); // replace with a valid watchlist
>> > > > SymbolList = GetWatchListSymbols(WatchListName);
>> > > > fvb = Status("firstvisiblebar");
>> > > > ColorCode = colorBrown;
>> > > > for( i = 0; ( sym = StrExtract( SymbolList, i ) ) != ""; i++ )
>> > > > {
>> > > >    fc = Foreign(sym, "Close");
>> > > >    if (ShouldPlot(fc,fvb))
>> > > >    {
>> > > >        ColorCode++;
>> > > >        // wrap color codes if too many
>> > > >        if (ColorCode == colorTan)
>> > > >        {
>> > > >           ColorCode = colorBrown;
>> > > >        }
>> > > >         Plot( 100 * ( fc - fc[ fvb ] )/ fc[ fvb ], sym, ColorCode, styleLine);
>> > > >    }
>> > > > }
>> > > > _N( Title = "{{NAME}} {{DATE}} - Relative Performance [%]: {{VALUES}}" );
>> > > > _SECTION_END();
>> > > >
>> > > >
>> > > >
>> > > > --- In amibroker@xxxxxxxxxxxxxxx, "tuzo_wilson" <j.tuzo.wilson@> wrote:
>> > > > >
>> > > > >
>> > > > > --- In amibroker@xxxxxxxxxxxxxxx, "gmorlosky" <gmorlosky@> wrote:
>> > > > > >
>> > > > > > Okay - I have gone over the array info and I think I'm doing this
>> > > > > right, But here it is step by step;
>> > > > >
>> > > > > That's a bit more organized.  :)
>> > > > >
>> > > > > The only question I have is around step 4.  How do you know if a ticker
>> > > > > is a "Buy".  Is it if it meets some conditions for the visible bars or
>> > > > > is it for all time or some other date/time range or something else?  If
>> > > > > it is on visible bars, the behavior might be a bit odd because as you
>> > > > > scroll symbols could be appearing and disappearing.
>> > > > >
>> > > > > Here's something that will take a watch list as a parameter and plot the
>> > > > > relative performance of all symbols in the watch list if it meets a
>> > > > > criteria.  Just modify ShouldPlot to return true or false depending on
>> > > > > your specific logic.
>> > > > >
>> > > > >
>> > > > >
>> > > > > _SECTION_BEGIN("RelativePerformance");
>> > > > >
>> > > > >
>> > > > >
>> > > > > function ShouldPlot(price)
>> > > > >
>> > > > > {
>> > > > >
>> > > > >     //TODO: Implement logic
>> > > > >
>> > > > >     return True;
>> > > > >
>> > > > > }
>> > > > >
>> > > > >
>> > > > >
>> > > > > function GetWatchListSymbols(watchListName)
>> > > > >
>> > > > > {
>> > > > >
>> > > > >     wlNumber = CategoryFind(watchListName, categoryWatchlist );
>> > > > >
>> > > > >     return CategoryGetSymbols(categoryWatchlist, wlNumber );
>> > > > >
>> > > > > }
>> > > > >
>> > > > >
>> > > > >
>> > > > > SetChartOptions(0,chartShowArrows|chartShowDates);
>> > > > >
>> > > > >
>> > > > >
>> > > > > WatchListName = ParamStr("Watch List Name","RelStrength");
>> > > > >
>> > > > >
>> > > > >
>> > > > > SymbolList = GetWatchListSymbols(WatchListName);
>> > > > >
>> > > > >
>> > > > >
>> > > > > fvb = Status("firstvisiblebar");
>> > > > >
>> > > > >
>> > > > >
>> > > > > ColorCode = colorBrown;
>> > > > >
>> > > > >
>> > > > >
>> > > > > for( i = 0; ( sym = StrExtract( SymbolList, i ) ) != ""; i++ )
>> > > > >
>> > > > > {
>> > > > >
>> > > > >     fc = Foreign(sym, "Close");
>> > > > >
>> > > > >
>> > > > >
>> > > > >     if (ShouldPlot(fc))
>> > > > >
>> > > > >     {
>> > > > >
>> > > > >         ColorCode++;
>> > > > >
>> > > > >
>> > > > >
>> > > > >         // wrap color codes if too many
>> > > > >
>> > > > >         if (ColorCode == colorTan)
>> > > > >
>> > > > >         {
>> > > > >
>> > > > >            ColorCode = colorBrown;
>> > > > >
>> > > > >         }
>> > > > >
>> > > > >
>> > > > >
>> > > > >         Plot( 100 * ( fc - fc[ fvb ] )/ fc[ fvb ], sym, ColorCode,
>> > > > > styleLine);
>> > > > >
>> > > > >     }
>> > > > >
>> > > > > }
>> > > > >
>> > > > >
>> > > > >
>> > > > > _N( Title = "{{NAME}} {{DATE}} - Relative Performance [%]: {{VALUES}}"
>> > > > > );
>> > > > >
>> > > > >
>> > > > >
>> > > > > _SECTION_END();
>> > > > >
>> > > > >
>> > > > > Tuzo
>> > > > >
>> > > > > > 1. Deteremine BUY based on criteria and assign value of 1 else 0.
>> > > > > (works fine)
>> > > > > > 2. Determeine SELL based on criteria and assign value of -1 else
>> > > > > 0.(works fine - these values are now stored in the array)
>> > > > > > 3. From a given list (example: IndustryID() == 4) (the StrExtract
>> > > > > works fine).
>> > > > > > 4. PLOT only those tickers that meet BUY. (I get all or none)
>> > > > > > 5. Plot each ticker in a different color, in the same pane, hence the
>> > > > > inner loop. (the colors plot fine)
>> > > > > >
>> > > > > > Basically it is the Relative Performance indicator, with a BUY
>> > > > > criteria and StrExtract from any given list (sector, Industry, watch,
>> > > > > etc.), because of the multiple plots, Foreign is used.
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > > --- In amibroker@xxxxxxxxxxxxxxx, dingo waledingo@ wrote:
>> > > > > > >
>> > > > > > > write it out step by step in English.  I'm not uderstanding what you
>> > > > > want to
>> > > > > > > do.
>> > > > > > >
>> > > > > > > d
>> > > > > > >
>> > > > > > > On Thu, May 7, 2009 at 4:37 PM, gmorlosky gmorlosky@ wrote:
>> > > > > > >
>> > > > > > > > Thanks - clearly I got something backwards - while I study arrays,
>> > > > > do you
>> > > > > > > > have an example of code similar to this that works, to help me
>> > > > > understand ?
>> > > > > > > > I just want to loop through certain tickers that pass some formula
>> > > > > first.
>> > > > > > > > Basically a loop inside a loop.
>> > > > > > > >
>> > > > > > > >
>> > > > > > > > --- In amibroker@xxxxxxxxxxxxxxx, dingo <waledingo@> wrote:
>> > > > > > > > >
>> > > > > > > > > You've got a basic misunderstanding of loops and arrays.  In AFL
>> > > > > You
>> > > > > > > > > shouldn't have arrary operators like IIF inside a loop.
>> > > > > > > > >
>> > > > > > > > > You need to go back an reread the help file on arrays.
>> > > > > > > > >
>> > > > > > > > > d
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > >  > On Thu, May 7, 2009 at 3:32 PM, gmorlosky <gmorlosky@> wrote:
>> > > > > > > > >
>> > > > > > > > > > Seriously - it works nicely, except for that one line of code.
>> > > > > > > > > >
>> > > > > > > > > > Any other thoughts
>> > > > > > > > > >
>> > > > > > > > > > --- In amibroker@xxxxxxxxxxxxxxx, Aron <aron.groups@> wrote:
>> > > > > > > > > > >
>> > > > > > > > > > > everything..
>> > > > > > > > > > >
>> > > > > > > > > > > gmorlosky wrote:
>> > > > > > > > > > > > In the line ~9 "if(Buy[i] >= 0", if I change that to 1,
>> > > > > which is
>> > > > > > > > equal
>> > > > > > > > > > to a Buy, I get no Plots, even though the Explore shows 1s for
>> > > > > half the
>> > > > > > > > > > tickers, else with 0, I get all plots. What is wrong ?
>> > > > > > > > > > > >
>> > > > > > > > > > > > NumBars = 20;
>> > > > > > > > > > > > fvb = Status("firstvisiblebar");
>> > > > > > > > > > > > for( i = 0; ( symbol = StrExtract( TickerList, i ) ) !=
>> > > > > ""; i++ )
>> > > > > > > > > > > > {
>> > > > > > > > > > > > Buy = IIf(ROCt > ROCc AND RSIt > RSIc, 1,0);
>> > > > > > > > > > > > Sell = IIf(ROCt < ROCc AND RSIt < RSIc, -1,0);
>> > > > > > > > > > > >
>> > > > > > > > > > > > fc = Foreign( symbol, "C" );
>> > > > > > > > > > > > if (Buy[i] >= 0) // something not right here ???
>> > > > > > > > > > > >  {
>> > > > > > > > > > > >   if( ! IsNull( fc[ 0 ] ) )
>> > > > > > > > > > > >   {
>> > > > > > > > > > > >     Plot( 100 * ( fc - fc[ fvb ] )/ fc[ fvb ], symbol,
>> > > > > > > > colorLightOrange
>> > > > > > > > > > + ( (2*i) % 15 ), styleLine );
>> > > > > > > > > > > >   }
>> > > > > > > > > > > >  }
>> > > > > > > > > > > > }
>> > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > > > ------------------------------------


------------------------------------

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

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