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

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



PureBytes Links

Trading Reference Links

Excellent...That makes perfect sense...the IF and FOR should work...it's the "active ticker" that held control...I'll try that tommorrow...Thanks for the exceptional explanation.

--- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@xxx> wrote:
>
> To the original poster; It appears that you have a few misconceptions. I apologize in advance if I have misread you.
> 
> 1. You are iterating through a list of symbol names. But, that does not have any impact on the Buy and Sell arrays. The Buy and Sell arrays are still the one and only Buy and Sell of the symbol upon which the chart is rooted (i.e. the active symbol).
> 
> You are calculating the same Buy/Sell values over and over again. This is likely why you are getting all or nothing. You're always only ever referring to the Buy/Sell of the active symbol, regardless of which item in the list you have iterated to.
> 
> You have not indicated where you calculated your ROC and RSI values, but they probably are also based only on the active symbol.
> 
> 2. When you reference Buy[i], you are not referencing the Buy array of the i'th symbol in the list, you are referencing the i'th bar in the Buy array of the active symbol.
> 
> I don't have AmiBroker available to test. But, building on Tuzo's example, I would suggest that you probably want to pass the name of the symbol to his ShouldPlot function, then in the body of that function use SetForeign for your calculations. The function would return an array.
> 
> e.g.
> 
> function ShouldPlot(symbol) {
> SetForeign(symbol);
> ROCt = ...;
> ROCc = ...;
> RSIt = ...;
> RSIc = ...;
> RestorePriceArrays();
> 
> Result = (ROCt > ROCc AND RSIt > RSIc);
> return Result;
> }
> 
> Similarly, your Plot statement would use the returned result of ShouldPlot, masking out the plot when no trigger was found. Something like this:
> 
> for( i = 0; ( sym = StrExtract( SymbolList, i ) ) != ""; i++ ) {
>   ColorCode++;
> 
>   // wrap color codes if too many
>   if (ColorCode == colorTan) {
>     ColorCode = colorBrown;
>   }
> 
>   fc = Foreign(sym, "Close");
>   Change = 100 * ( fc - fc[ fvb ] )/ fc[ fvb ];
>   Plot(IIF(ShouldPlot(sym), Change, Null), sym, ColorCode, styleLine);
> }
> 
> As Tuzo indicated, the actual lines plotted would vary bar by bar. But that appears to be what you wanted.
> 
> Mike
> 
> --- 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
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > ------------------------------------
> > > > > > >
> > > > > > > **** 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

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