Given that this same question gets asked over and over again, it might be worth adding an example to that tutorial explicitly illustrating what would happen in a self referencing calculation.
Yes, many people simply have not read the tutorial. But for those that have, it would seem that a significant percentage of readers still do not realize that a temporary array is being created in that situation. Mike --- In [email protected], "Tomasz Janeczko" <[EMAIL PROTECTED]> wrote: > > It is easy to understand, if only you READ THE > tutorial section of the guide: > > http://www.amibroker.com/guide/h_understandafl.html > > All tutorial is must-read. > ================= > > People are crying for help while in fact > everything you need to read is in the TUTORIAL section > of the guide. > This single short section of the tutorial > http://www.amibroker.com/guide/h_understandafl.html > > is absolute must-read and should be read and repeated. > > Best regards, > Tomasz Janeczko > amibroker.com > ----- Original Message ----- > From: "ian_rosbif" <[EMAIL PROTECTED]> > To: <[email protected]> > Sent: Tuesday, November 18, 2008 6:52 PM > Subject: [amibroker] Re: What is wrong with these 3 lines of code? > > > > You're not dumb, it is rather difficult to understand! Using your > > example and assuming 11 bars in each array: > > Before the 1st statement, auxCrossedIntermed = "00000000000", > > After the 1st statement, auxCrossedIntermed = "00000000010" > > > > Before the 2nd statement, CrossedIntermed = "00000000000", > > and Ref(CrossedIntermed, -1) = "0000000000"... Amibroker effectivley > > treats the Ref... part of the statement as if it was a temporary copy > > of the CrossedIntermed statement taken before the 2nd statement began > > execution (note that there are only 10 elements in this copy array). > > Changes made to CrossIntermed during the 2nd statement by moving > > values from AuxCrossedIntermed are not reflected in the copy array. > > therefore the Ref... clause always copies zero in this scenario. > > > > I hope this clarifies it, but as I said before, the same thing got me > > when I first started out with AB...took me a couple of weeks to > > finally realise what was going on. > > > > > > --- In [email protected], "nunopires2001" <nunopires2001@> > > wrote: > >> > >> Thanks for the answer. > >> > >> To be honest, i am feeling really dumb, since i didn't understand > > the > >> explanation. > >> > >> Please suppose the following scenario: > >> > >> Low[9]=950 > >> Intermed[9]=970 > >> High[9]=1000 > >> > >> auxCrossedIntermed=IIf(Low< Intermed AND High> Intermed,1,0); > >> CrossedIntermed=auxCrossedIntermed OR Ref(CrossedIntermed,-1); > >> > >> On the bar #10, how will Amibroker evaluate the second formula? > >> During the evaluation, what will be the values for > > auxCrossedIntermed > >> and Ref(CrossedIntermed,-1) ? > >> > >> > >> Best Regards! > >> > >> > >> --- In [email protected], "ian_rosbif" <ian_rosbif@> wrote: > >> > > >> > Hi, > >> > Are you trying use "...OR Ref(CrossedIntermed,-1);" to get the > > cross > >> > to persist in CrossedIntermed? In other words, if the cross > > occurs at > >> > 11:45, the following 15 elements of Crossintermed should be "1" > > until > >> > 12:01, when they should then all have "666" in them? > >> > > >> > In which case, the problem lies with the "circular" nature of: > >> > >>CrossedIntermed=auxCrossedIntermed OR Ref(CrossedIntermed,- 1); > >> > > >> > auxCrossedIntermed will have a combination of 1s & 0s in it, but > >> > these aren't actually "moved" to Crossedintermed until the > > statement > >> > hase been fully evaluated. Therefore Ref(Crossedintermed, -1) > > will > >> > always evaluate to 0 at the time it's executed, even though the 1 > >> > appears in the array element representing the cross event after > > the > >> > statement has been executed. > >> > > >> > This is something that drove me mad before I cottoned onto it. > >> > maybe this would work: > >> > > >> > // initialise final values > >> > CrossedIntermed=IIf(TimeNum()>120000, 666, 0); > >> > // set cross events > >> > auxCrossedIntermed=IIf(Low< Intermed AND High> Intermed, 1, 0); > >> > // cross persists for whole day after it occurs once > >> > auxCrossedIntermed = Flip(auxCrossedIntermed, True==False); > >> > // finalise values > >> > CrossedIntermed=IIf(TimeNum()>120000, 666, auxCrossedIntermed); > >> > > >> > If you want the "1" to persist after midday, change the last > >> > statement to: > >> > CrossedIntermed=IIf(auxCrossedIntermed, auxCrossedIntermed, > >> > CrossedIntermed); > >> > > >> > > >> > --- In [email protected], "nunopires2001" > > <nunopires2001@> > >> > wrote: > >> > > > >> > > Hello, > >> > > > >> > > After a encouraging start with Amibroker, i am realizing that > >> > writing > >> > > code on AFL is not all that simple... > >> > > > >> > > Anyone can explain me what is wrong with these lines of code? > >> > > > >> > > CrossedIntermed=0; > >> > > auxCrossedIntermed=IIf(Low< Intermed AND High> > > Intermed,1,0); > >> > > CrossedIntermed=auxCrossedIntermed OR Ref(CrossedIntermed,- > > 1); > >> > > CrossedIntermed=IIf(TimeNum()>120000,666,CrossedIntermed); > >> > > > >> > > I am working with intraday, 1min data. The market opens at > > 110000 > >> > and > >> > > closes at 193000. > >> > > > >> > > I just want to check the CrossedIntermed Value after 12.00h, > > and the > >> > > value returned should be: > >> > > -> 1: If the security crossed Intermed > >> > > -> 0: Otherwise > >> > > -> 666: If TimeNum()>120000 > >> > > > >> > > > >> > > Thanks alot! > >> > > > >> > > >> > > > > > > > > ------------------------------------ > > > > **** IMPORTANT **** > > This group is for the discussion between users only. > > This is *NOT* technical support channel. > > > > ********************* > > TO GET TECHNICAL 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 > > > > > > >
