These two pages from manual contain answers to your problems: http://www.amibroker.com/guide/h_understandafl.html
http://www.amibroker.com/guide/a_mistakes.html Best regards, Tomasz Janeczko amibroker.com ----- Original Message ----- From: "gmorlosky" <[email protected]> To: <[email protected]> Sent: Friday, May 08, 2009 11:08 PM Subject: [amibroker] Re: if (Buy[i] >= 0) not behaving as expected >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 [email protected], "tuzo_wilson" <j.tuzo.wil...@...> wrote: >> >> --- In [email protected], "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 [email protected], "tuzo_wilson" <j.tuzo.wilson@> wrote: >> > > >> > > >> > > --- In [email protected], "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 [email protected], 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 [email protected], 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 [email protected], 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 > > >
