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

Re: [amibroker] Re: Variable scoping problem, I think



PureBytes Links

Trading Reference Links




<SPAN 
class=395093920-03022004>Thanks for your further investigations, good work. 
Interesting that it's only direct uses of the reserved variables that 
causes this. Besides your stack overflow idea, maybe there's an issue with 
how input parameters are handled. I'd think stack issues would affect any 
repeated call to the function, regardless of what the input vars were, but of 
course I don't have much context for even guessing.
<SPAN 
class=395093920-03022004> 
<SPAN 
class=395093920-03022004>I did write Tomasz, haven't heard back, we'll see what 
he says.
<SPAN 
class=395093920-03022004> 
<SPAN 
class=395093920-03022004>Thanks again for checking, glad to know I'm not just 
completely losing it over here. I think...
<SPAN 
class=395093920-03022004> 
<SPAN 
class=395093920-03022004>Dave 
<BLOCKQUOTE 
>I 
  went a little further.  I'd encourage you to send it to TJ.  I 
  think that it may be a serious problem.  I instrumented the code and 
  played with it a little.  Using a ticker of DJ-30, my conclusion was 
  that a call to StochTransform with any of the reserved variables (O, 
  C, etc.) overwrote the variable that was used in the previous call.  
  Note in the example how StochDiff is overwritten.  In traditional 
  languages, this type of thing is usually indicative of a stack problem 
  in the function processing.Here's what I played with -function 
  StochTransform(array, period) {      local 
  LowValue;      LowValue = LLV(array, 
  period);      return 100 * (array - LowValue) / 
  (HHV(array, period) - LowValue);}Filter = 1;Diff = 
  Signal(12, 26, 9);_TRACE(WriteVal(Diff, 8.3));AddColumn(Diff, 
  "DIFF BEFORE", 8.3);StochDiff = StochTransform(Diff, 
  5);//  It looks like a call to StochDiff with Close as the first 
  parm wipes//  out the variable that was used in the last call to 
  StochDiffJunkIgnored = StochTransform(Diff, 14); // <<< BUT THIS 
  DOESN'TJunkIgnored = StochTransform(StochDiff, 14); // <<< AND 
  THIS DOESN'T//JunkIgnored = StochTransform(C + 0, 14); // <<< AND 
  THIS DOESN'TJunkIgnored = StochTransform(C, 14); // <<< ENABLING 
  THIS CHANGES Diff,WHY???_TRACE(WriteVal(Diff, 
  8.3));AddColumn(Close, "CLOSE", 8.3);AddColumn(Diff, "DIFF AFTER", 
  8.3);AddColumn(StochDiff, "STOCHDIFF", 8.3);AddColumn(JunkIgnored, 
  "JUNK", 8.3);-- Bruce--- In amibroker@xxxxxxxxxxxxxxx, 
  "Dave Merrill" <dmerrill@xxxx> wrote:> Thanks for checking it 
  out Bruce, I appreciate it. The msg I posted was a> simplification 
  of the more complicated code where I first found the problem,> and 
  that was the last work I've had time to do on it. (That j.o.b. 
  thing...)> > Do I gather that you saw the same results I 
  did? Puzzling, isn't it?> > Dave>   I was up 
  early this morning and took at quick look at the problem>   
  that you found.  Have you made any headway?> >   
  -- Bruce> > >   --- In 
  amibroker@xxxxxxxxxxxxxxx, "Dave Merrill" 
  <dmerrill@xxxx>>   wrote:>   > I'm 
  seeing a weird problem that I think may be the result of>   
  something I>   > don't understand about variable scoping. 
  Check this out:>   >>   > 
  ---------------------->   > function StochTransform(array, 
  period) {>   >       local 
  LowValue;>   >       
  LowValue = LLV(array, period);>   
  >       return 100 * (array - LowValue) / 
  (HHV(array, period) ->   LowValue);>   > 
  }>   >>   > Diff = Signal(12, 26, 
  9);>   > StochDiff = StochTransform(Diff, 
  5);>   >>   > //JunkIgnored = 
  StochTransform(C, 14);      // <<< ENABLING 
  THIS>   CHANGES Diff,>   > 
  WHY???>   > //JunkIgnored = StochTransform(Diff, 
  14);      // <<< BUT 
  THIS>   DOESN'T>   > 
  ---------------------->   >>   > First 
  enter it into IB as given above, look at the chart, then>   
  enable the>   > first of the two commented out lines at 
  the bottom. Notice that>   Diff (blue>   
  > histogram) changes drastically. Now enable the second one and 
  not>   the first,>   > and things go 
  back to "normal".>   >>   > I don't 
  get this at all. It seems like it must be due to>   
  interaction between>   > the two calls to StochTransform, 
  and in fact, if you create a copy>   of 
  the>   > function called StochTransform2, and call that 
  the second time, no>   problem.>   > 
  Guessing further from the fact that using the same value 
  for>   the 'array'>   > parameter in both 
  cases also prevents the problem, most likely the>   
  conflict>   > is with the reuse of that formal parameter 
  when the function is>   called the>   > 
  second time.>   >>   > I've never seen 
  this behavior before, and I don't understand it.>   Among 
  other>   > things, if it's really true that you can't call 
  the same function>   more than>   > 
  once without interactions like this, a lot of code I've 
  written>   that I>   > thought worked, 
  didn't. Or is there some simple stupid bug in this>   
  test that>   > I'm missing?>   
  >>   > Ideas? Tomasz?>   
  >>   > Dave


Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html





Yahoo! Groups Links
To visit your group on the web, go to:http://groups.yahoo.com/group/amibroker/ 
To unsubscribe from this group, send an email to:amibroker-unsubscribe@xxxxxxxxxxxxxxx 
Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.