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

[amibroker] Re: some looping help needed .......



PureBytes Links

Trading Reference Links

I realize that, but I'm stuck! Seems I can't find the S way. Help!

--- In amibroker@xxxxxxxxxxxxxxx, "Fred" <ftonetti@xxxx> wrote:
> You still have nested loops ... you got rid of one and added 
> another ... KISS ...
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "treliff" <treliff@xxxx> wrote:
> > Fred, it took me several days to work on/off on this. Your 
> > Cycleconstant definition without loops: brilliant! So 
array+number 
> > results in new array where number is added to each array element. 
> > Cool, I did not know that. 
> > 
> > I have worked to define StDevCum for individual bars through 
> > recursion which was a painful but useful exercise in itself:
> > 
> > // function StDevCum recursion-style:
> > 
> > array = C ;  // set array here
> > mean[0] = array[0] ;
> > StDevcum[0] = 0 ;
> > for (i = 1 ; i < BarCount ; i++ )
> > {
> > mean[i] = (i/(i+1))*mean[i-1] + (array[i])/(i+1) ;
> > StDevCum[i] = sqrt( (i/(i+1))*(StDevCum[i-1])^2 + (1/i)*(array
[i] - 
> > mean[i])^2 ) ;
> > }
> > 
> > //
> > 
> > 
> > But blending this into the larger code does not improve the 
speed. 
> > This is what I came up with:
> > 
> > // code start
> > 
> > /* NOTE: the first few lines below are IRrelevant, only to create 
> > random Cycle values between 10 and 50 and some Oscillator 
function, 
> > in order for the lower part to work */
> > 
> > function Randomize(a,b)
> > { return Random(1)*(b-a)+a ; }
> > 
> > Cycle = int( Randomize(10,50) ) ;
> > 
> > function Oscillator(n) 
> > { return Randomize(-50,n) ; } 
> > 
> > /* Here starts the relevant part */
> > 
> > //SetBarsRequired( 100000, 100000 );
> > 
> > function Cycleconstant(number)
> > { return Cum(0) + Cycle[ number ] ; }
> > 
> > for (i = BarCount - 1 ; i > 0 ; i-- )
> > {
> > array = Oscillator( Cycleconstant(i) ) ;
> > mean[0] = array[0] ;
> > StDevcumOfOscillator[0] = 0 ;
> > 
> > for (j = 1 ; j <= i ; j++ )
> > {
> > mean[j] = (j/(j+1)) * mean[j-1] + (array[j])/(j+1) ; 
> > StDevCumOfOscillator[j] = sqrt( (j/(j+1))*(StDevCumOfOscillator[j-
> 1])
> > ^2 + (1/j)*(array[j] - mean[j])^2 ) ;
> > }
> > }
> > 
> > Plot(0,"",colorBlack);
> > Plot(Oscillator(Cycle),"Oscillator(Cycle)",colorBlue);
> > Plot(StDevCumOfOscillator,"StDevCumOfOscillator",colorGreen);
> > GraphZOrder = 1;
> > 
> > // code end
> > 
> > Although this gives the correct result it actually takes a bit 
> longer 
> > to execute. Probably I misinterpreted your suggestion ("you can
> > write 
> > the full calc for indivdual bars w/o loops as well") because
> > although 
> > this works on individual bars it contains a loop with a sub-loop 
> > here. But how to do without ??
> > 
> > And then i (in the first loop) I have to let run from high to low 
> > otherwise previously calculated StDevCumOfOscillator array 
elements 
> > are overridden. Oeeff..... I find this very complex stuff, sure 
way 
> > to a quick headache.....
> > 
> > If you could give any additional advice this will be gratefully 
> > received. If not, thanks very much for your help so far.
> > 
> > -treliff
> > 
> > 
> > --- In amibroker@xxxxxxxxxxxxxxx, "Fred" <ftonetti@xxxx> wrote:
> > > In any case ... writing loops for stuff is leftover programmer 
> > > ability if you will ... I suffered from the same thing for 
awhile 
> > > back when I first started using AB ...
> > > 
> > > For example ...
> > > 
> > > Your ...
> > > 
> > > function CycleConstant(number)
> > > {
> > >     for ( i = 0 ; i < BarCount ; i++ )
> > >     {
> > >         result[ i ] = Cycle[ number ] ; 
> > >     }
> > >     return result; 
> > > }
> > > 
> > > Can be written ...
> > > 
> > > Result = Cum(0) + Cycle[number];
> > > 
> > > This at least takes the lowest level loop out of play ... 
> > > 
> > > When you get around to writing the standard dev part you can 
> write 
> > > the full calc for indivdual bars w/o loops as well ... so there 
> > > should only be one loop necessary ...
> > > 
> > > --- In amibroker@xxxxxxxxxxxxxxx, "treliff" <treliff@xxxx> 
wrote:
> > > > Fred, ALL bars indeed. This is not short-term-TA but long-
term-
> > > > statistics (an attempt at least :-). 3 years of daily bars is 
> > > > minimum, 10 years would be better.
> > > > 
> > > > Your amazement (Is that really what you are wanting ?) though 
> may 
> > > > have pointed me in the right direction: perhaps I should de-
> link 
> > > > these long term standevs from the code. I am thinking about 
> > > > artificial AddToComposite tickers to store these 
measurements. 
> No 
> > > > real "Composites" but multiple per-stock tickers like 
> > > > 
> > > > Ticker+"Cycle"+"10to13"
> > > > Ticker+"Cycle"+"14to17" etc
> > > > 
> > > > (certainly incorrect code, I'd have to work this out) 
> > > > 
> > > > That would be about 10 ATC tickers per stock (40 different 
> cycles 
> > > > with 4 storage spaces OHLC for each ticker). One time-
consuming 
> > ATC 
> > > > run over multiple stocks.  
> > > > 
> > > > Remains to be seen though if the code finds accessing data in 
> > > > truckloads of ATC tickers much more pleasant than doing the 
> > > > calculations itself..... 
> > > > 
> > > > Thanks for thinking along.
> > > > 
> > > > -treliff
> > > > 
> > > > --- In amibroker@xxxxxxxxxxxxxxx, "Fred" <ftonetti@xxxx> 
wrote:
> > > > > Is that really what you are wanting ?
> > > > > 
> > > > > Standard deviation of all numbers from the first bar 
through 
> > the 
> > > > > current bar ?  or at the current bar are you wanting 
standard 
> > > > > deviation  of the numbers of the most current n bars where 
n 
> is 
> > > the 
> > > > > current cycle ?
> > > > > 
> > > > > --- In amibroker@xxxxxxxxxxxxxxx, "treliff" <treliff@xxxx> 
> > wrote:
> > > > > > Fred, thanks for your comments.
> > > > > > 
> > > > > > Correct about standard deviation, the defined StDevCum
> (array) 
> > > is 
> > > > > > really StDev(array, BarIndex() + 1) but this one does not 
> > work.
> > > > > > 
> > > > > > However I'm not sure this is what you are referring to 
> > because 
> > > > this 
> > > > > > is not really a "loop". 
> > > > > > 
> > > > > > Could you perhaps be more specific, maybe point me in the 
> > > > direction 
> > > > > > of a loop-less re-write? Highly appreciated.
> > > > > > 
> > > > > > -treliff
> > > > > > 
> > > > > > --- In amibroker@xxxxxxxxxxxxxxx, "Fred" <ftonetti@xxxx> 
> > wrote:
> > > > > > > Regardless ... It would appear the only loop that's 
> > required 
> > > is 
> > > > > the 
> > > > > > > one that calc's standard deviation as the built in AFL 
> > > version 
> > > > > does 
> > > > > > > not take an array for length.  The rest of the loops 
can 
> be 
> > > > > > replaced 
> > > > > > > by arrays and in some cases totally done away with.
> > > > > > > 
> > > > > > > --- In amibroker@xxxxxxxxxxxxxxx, "Terry" 
<MagicTH@xxxx> 
> > > wrote:
> > > > > > > > No, I'm not sure, but this has been discussed before. 
> The 
> > > > last 
> > > > > I 
> > > > > > > recall
> > > > > > > > Tomasz said not to use this anymore...but we're 
> counting 
> > on 
> > > > > > > my "recall"
> > > > > > > > so that's not reliable ;-)
> > > > > > > > 
> > > > > > > > I do know that AB will use as many bars as necessary 
to 
> > get 
> > > > > > > the "right"
> > > > > > > > answer. It's very smart in that regard. Why don't you 
> > > record 
> > > > > some
> > > > > > > > results, take out the SetBarsRequired and see if the 
> > > answers 
> > > > > are 
> > > > > > > the
> > > > > > > > same and if the speed is improved?
> > > > > > > > --
> > > > > > > > Terry
> > > > > > > > 
> > > > > > > > | -----Original Message-----
> > > > > > > > | From: amibroker@xxxxxxxxxxxxxxx 
> > > > > > > [mailto:amibroker@xxxxxxxxxxxxxxx] On
> > > > > > > > | Behalf Of treliff
> > > > > > > > | Sent: Tuesday, August 23, 2005 09:04
> > > > > > > > | To: amibroker@xxxxxxxxxxxxxxx
> > > > > > > > | Subject: [amibroker] Re: some looping help 
> > needed .......
> > > > > > > > | 
> > > > > > > > | Terry, no I don't need 100,000 bars (currently 
> testing 
> > on 
> > > > > > several
> > > > > > > > | years of daily bars) but I do want the calculation 
> > > (standard
> > > > > > > > | deviation) over all bars, so back to bar zero from 
> any 
> > > > > starting 
> > > > > > > bar.
> > > > > > > > | 
> > > > > > > > | While AB Help menu says that SetBarsRequired is 
only 
> > > > necessary
> > > > > > > > | outside pure AFL (having to do with "QuickAFL") I 
> find 
> > > many 
> > > > > > pure 
> > > > > > > AFL
> > > > > > > > | code examples that contain looping having this
> > > > > > > > | 
> > > > > > > > | setbarsrequired( 100000, 100000 ) // require all 
past 
> > and 
> > > > all 
> > > > > > > future
> > > > > > > > | bars
> > > > > > > > | 
> > > > > > > > | statement at the beginning (like in AFL library or 
in 
> > > this 
> > > > > > > forum).
> > > > > > > > | 
> > > > > > > > | Are you sure it can be left out?
> > > > > > > > | 
> > > > > > > > | I appreciate your help. Thanks.
> > > > > > > > | 
> > > > > > > > | -treliff
> > > > > > > > | 
> > > > > > > > | --- In amibroker@xxxxxxxxxxxxxxx, "Terry" 
> > <MagicTH@xxxx> 
> > > > > wrote:
> > > > > > > > | > Do you really need 100,000 bars to get the right 
> > answer?
> > > > > > > > | > Seems like not forcing this many bars would speed 
> > > things 
> > > > up 
> > > > > a 
> > > > > > > lot.
> > > > > > > > | > --
> > > > > > > > | > Terry
> > > > > > > > | > | -----Original Message-----
> > > > > > > > | > | From: amibroker@xxxxxxxxxxxxxxx
> > > > > > > > | [mailto:amibroker@xxxxxxxxxxxxxxx] On
> > > > > > > > | > | Behalf Of treliff
> > > > > > > > | > | Sent: Monday, August 22, 2005 20:10
> > > > > > > > | > | To: amibroker@xxxxxxxxxxxxxxx
> > > > > > > > | > | Subject: [amibroker] some looping help 
> > needed .......
> > > > > > > > | > |
> > > > > > > > | > | Hoping for some help from Expert Coders.
> > > > > > > > | > |
> > > > > > > > | > | Code in question is part of a larger code and 
> > creates 
> > > an
> > > > > > > > | incredible
> > > > > > > > | > | drag, slow chart scrolling etc., understandably 
> so 
> > in 
> > > > > view 
> > > > > > > of the
> > > > > > > > | > | amount of procedures. Hope this can be 
> > > > > simplified/improved.
> > > > > > > > | > | Appreciate anyone's time to take a look and 
> > possibly 
> > > > help 
> > > > > > me 
> > > > > > > out.
> > > > > > > > | > |
> > > > > > > > | > | I have an array called "Cycle" that contains 
> > integers 
> > > > > > between
> > > > > > > > | > | 10 and
> > > > > > > > | > | 50.
> > > > > > > > | > |
> > > > > > > > | > | I have a function called "Oscillator" that, 
> working 
> > > on 
> > > > any
> > > > > > > > | > | Cycle
> > > > > > > > | > | array, returns some oscillator, meaning it is 
> > limited 
> > > > on 
> > > > > up-
> > > > > >  
> > > > > > > and
> > > > > > > > | > | downside and has Mean approximately zero (like 
an 
> > > > > irregular
> > > > > > > > | Sinus).
> > > > > > > > | > |
> > > > > > > > | > | My challenge is that once Cycle has been 
> generated 
> > > > > (earlier 
> > > > > > > in my
> > > > > > > > | > | code) I want to calculate the standard 
deviation 
> of 
> > > > > > > Oscillator
> > > > > > > > | over
> > > > > > > > | > | all previous bars using strictly the Cycle 
value 
> of 
> > > that
> > > > > > > > | particular
> > > > > > > > | > | Bar (not the Cycle array which has different 
> > values).
> > > > > > > > | > |
> > > > > > > > | > | For example:
> > > > > > > > | > | - Bar 300 has cycle value 27
> > > > > > > > | > | - I create an array with value "27" in all 
array 
> > > > elements
> > > > > > > > | > | - then calculate Oscillator of this "27" array
> > > > > > > > | > | - calculate the standard deviation of all 
> > Oscillator 
> > > > > values 
> > > > > > > up to
> > > > > > > > | Bar
> > > > > > > > | > | 300
> > > > > > > > | > | - place this particular value in Bar 300 of a 
new 
> > > array
> > > > > > > > | > | - execute this procedure for all Bars separately
> > > > > > > > | > |
> > > > > > > > | > | Below is the code I made. TIA for any advice.
> > > > > > > > | > |
> > > > > > > > | > | // code start
> > > > > > > > | > |
> > > > > > > > | > | /* NOTE: the first few lines below are 
> IRrelevant, 
> > > only 
> > > > > to 
> > > > > > > create
> > > > > > > > | > | random Cycle values between 10 and 50 and some 
> > > > Oscillator
> > > > > > > > | function,
> > > > > > > > | > | in order for the lower part to work */
> > > > > > > > | > |
> > > > > > > > | > | function Randomize(a,b)
> > > > > > > > | > | { return Random(1)*(b-a)+a ; }
> > > > > > > > | > |
> > > > > > > > | > | Cycle = int( Randomize(10,50) ) ;
> > > > > > > > | > |
> > > > > > > > | > | function Oscillator(n)
> > > > > > > > | > | { return Randomize(-50,n) ; }
> > > > > > > > | > |
> > > > > > > > | > | /* HERE starts the relevant part */
> > > > > > > > | > |
> > > > > > > > | > | SetBarsRequired( 100000, 100000 );
> > > > > > > > | > |
> > > > > > > > | > | function StDevCum(array)
> > > > > > > > | > | { return sqrt( ( (BarIndex()+1) * Cum(array^2) -
 
> > (Cum
> > > > > > (array))
> > > > > > > > | ^2 ) /
> > > > > > > > | > | (BarIndex()+1)^2 ); }
> > > > > > > > | > |
> > > > > > > > | > | /* StDevCum calculates standard deviation of 
> array 
> > > from 
> > > > > Bar 
> > > > > > > zero
> > > > > > > > | up
> > > > > > > > | > | to current Bar. */
> > > > > > > > | > |
> > > > > > > > | > | function Cycleconstant(number)
> > > > > > > > | > | { for ( i = 0 ; i < BarCount ; i++ )
> > > > > > > > | > | { result[ i ] = Cycle[ number ] ; }
> > > > > > > > | > |   return result; }
> > > > > > > > | > |
> > > > > > > > | > | /* Cycleconstant fills a complete array with a 
> > Cycle 
> > > > > array 
> > > > > > > element
> > > > > > > > | > | value (number). */
> > > > > > > > | > |
> > > > > > > > | > | for (j = 0 ; j < BarCount ; j++ )
> > > > > > > > | > | { y = StDevCum( Oscillator( Cycleconstant( 
> j ) ) ) ;
> > > > > > > > | > |   StDevCumOfOscillator[ j ] = y[ j ] ; }
> > > > > > > > | > |
> > > > > > > > | > | /* for each separate Bar this first works 
> > Oscillator 
> > > on
> > > > > > > > | Cycleconstant
> > > > > > > > | > | array of that Bar, then calculates standard 
> > deviation 
> > > > > (from 
> > > > > > > Bar 0)
> > > > > > > > | > | and places result in Bar value (array element) 
of 
> > new 
> > > > > array
> > > > > > > > | > | StDevCumOfOscillator. */
> > > > > > > > | > |
> > > > > > > > | > | Plot(0,"",colorBlack);
> > > > > > > > | > | Plot(Oscillator(Cycle),"Oscillator
> > (Cycle)",colorBlue);
> > > > > > > > | > | Plot
> > > > > (StDevCumOfOscillator,"StDevCumOfOscillator",colorRed);
> > > > > > > > | > | GraphZOrder = 1;
> > > > > > > > | > |
> > > > > > > > | > | // code end
> > > > > > > > | > |
> > > > > > > > | > |
> > > > > > > > | > |
> > > > > > > > | > |
> > > > > > > > | > |
> > > > > > > > | > | ------------------------ Yahoo! Groups Sponsor -
--
> --
> > --
> > > --
> > > > --
> > > > > --
> > > > > > -
> > > > > > > -----
> > > > > > > > | -~--
> > > > > > > > | > | >
> > > > > > > > | > | <font face=arial size=-1><a
> > > > > > > > | > |
> > > > > > > > | 
> > > > > > > 
> > > > > > 
> > > > > 
> > > > 
> > > 
> > 
> 
href="http://us.ard.yahoo.com/SIG=12h0dd89q/M=362131.6882500.7825259.
> > > > > > > 1
> > > > > > > > | > |
> > > > > > > > | 
> > > > > > > 
> > > > > > 
> > > > > 
> > > > 
> > > 
> > 
> 
493532/D=groups/S=1705632198:TM/Y=YAHOO/EXP=1124770234/A=2889190/R=0/
> > > > > > > S
> > > > > > > > | > | IG=10r90krvo/*http://www.thebeehive.org
> > > > > > > > | > | ">Put more honey in your pocket. (money matters 
> > made 
> > > > easy)
> > > > > > > > | Welcome to
> > > > > > > > | > | the Sweet Life - brought to you by One 
> > > > Economy</a>.</font>
> > > > > > > > | > | ------------------------------------------------
--
> --
> > --
> > > --
> > > > --
> > > > > --
> > > > > > -
> > > > > > > -----
> > > > > > > > | --~-
> > > > > > > > | > | >
> > > > > > > > | > |
> > > > > > > > | > | Please note that this group is for discussion 
> > between 
> > > > > users 
> > > > > > > only.
> > > > > > > > | > |
> > > > > > > > | > | To get support from AmiBroker please send an e-
> mail 
> > > > > > directly 
> > > > > > > to
> > > > > > > > | > | SUPPORT {at} amibroker.com
> > > > > > > > | > |
> > > > > > > > | > | For other support material please check also:
> > > > > > > > | > | http://www.amibroker.com/support.html
> > > > > > > > | > |
> > > > > > > > | > |
> > > > > > > > | > | Yahoo! Groups Links
> > > > > > > > | > |
> > > > > > > > | > |
> > > > > > > > | > |
> > > > > > > > | > |
> > > > > > > > | > |
> > > > > > > > | 
> > > > > > > > | 
> > > > > > > > | 
> > > > > > > > | 
> > > > > > > > | 
> > > > > > > > | ------------------------ Yahoo! Groups Sponsor -----
--
> --
> > --
> > > --
> > > > --
> > > > > --
> > > > > > -
> > > > > > > --~--
> > > > > > > > | >
> > > > > > > > | <font face=arial size=-1><a
> > > > > > > > | 
> > > > > > > 
> > > > > > 
> > > > > 
> > > > 
> > > 
> > 
> 
href="http://us.ard.yahoo.com/SIG=12hhmiq6u/M=362131.6882500.7825259.
> > > > > > > 1
> > > > > > > > | 
> > > > > > > 
> > > > > > 
> > > > > 
> > > > 
> > > 
> > 
> 
493532/D=groups/S=1705632198:TM/Y=YAHOO/EXP=1124816731/A=2889190/R=0/
> > > > > > > S
> > > > > > > > | IG=10r90krvo/*http://www.thebeehive.org
> > > > > > > > | ">Put more honey in your pocket. (money matters 
made 
> > > easy) 
> > > > > > > Welcome to
> > > > > > > > | the Sweet Life - brought to you by One 
> > Economy</a>.</font>
> > > > > > > > | ----------------------------------------------------
--
> --
> > --
> > > --
> > > > --
> > > > > --
> > > > > > -
> > > > > > > ---~-
> > > > > > > > | >
> > > > > > > > | 
> > > > > > > > | Please note that this group is for discussion 
between 
> > > users 
> > > > > > only.
> > > > > > > > | 
> > > > > > > > | To get support from AmiBroker please send an e-mail 
> > > > directly 
> > > > > to
> > > > > > > > | SUPPORT {at} amibroker.com
> > > > > > > > | 
> > > > > > > > | For other support material please check also:
> > > > > > > > | http://www.amibroker.com/support.html
> > > > > > > > | 
> > > > > > > > | 
> > > > > > > > | Yahoo! Groups Links
> > > > > > > > | 
> > > > > > > > | 
> > > > > > > > | 
> > > > > > > > |




------------------------ Yahoo! Groups Sponsor --------------------~--> 
Get fast access to your favorite Yahoo! Groups. Make Yahoo! your home page
http://us.click.yahoo.com/dpRU5A/wUILAA/yQLSAA/GHeqlB/TM
--------------------------------------------------------------------~-> 

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For other support material please check also:
http://www.amibroker.com/support.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:
    http://docs.yahoo.com/info/terms/