PureBytes Links
Trading Reference Links
|
Hello,
> Wrong ... You can not have the equivalent of doubly dimensioned
> arrays i.e. tables in AFL
Actually.... you can. Via VarGet/VarSet
http://www.amibroker.com/f?varset
http://www.amibroker.com/f?varget
you can create equivalent of arrays of any dimension simply using dynamic variables.
Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message -----
From: "Fred" <ftonetti@xxxxxxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Monday, August 29, 2005 5:11 AM
Subject: [amibroker] Re: some looping help needed .......
> Wrong ... You can not have the equivalent of doubly dimensioned
> arrays i.e. tables in AFL ... one dimension is all you get ... or at
> least not without using something external i.e. Osaka or ABTool
> plugins ...
>
> If you can get your "oscillator" into an array "X" then the AFL I
> wrote will give you the standard deviation at each bar using all the
> prior elements of X ( your osciallator ) ... That is what you were
> looking for, wasn't it ?
>
> Is there something about your osciallator that doesn't allow it to
> fit into a single dimension array ?!
>
> --- In amibroker@xxxxxxxxxxxxxxx, "treliff" <treliff@xxxx> wrote:
>> More food for thought... I have to chew on all that but one thing
>> right away:
>>
>> "X(i) is an ELEMENT of the array X."
>>
>> NO: each X(i) is a separate array (otherwise it would be X[i]
> right?
>> Or wrong?)
>>
>> In my code:
>>
>> Cycle is an array
>> bar i has Cycle[i]
>> Cycleconstant(i) = Cum(0)+Cycle[i] is an array (a "constant" array)
>> X(i) = Oscillator(Cycleconstant(i))is an **ARRAY** for each i.
>>
>>
>> --- In amibroker@xxxxxxxxxxxxxxx, "Fred" <ftonetti@xxxx> wrote:
>> > It appears you don't understand the array .vs. element of an
> array
>> > concept ...
>> >
>> > Is the equation
>> >
>> > X(i) = BarIndex() + i
>> >
>> > even meaningful ? X(i) is an ELEMENT of the array X. BarIndex()
>> is
>> > an ARRAY. How does one equate an ELEMENT of an array i.e. X(i)
> to
>> > the entire contents of another array i.e. BarIndex() + a modifier
>> i ?
>> >
>> > Not doable, is it ?. Further more why do you think you need or
>> want
>> > to do this ? With regards to ...
>> >
>> > "Note however that in real life the X(i)'s are independent.
> There
>> is
>> > no way to express X(i) in terms of X(i-1)"
>> >
>> > Nor is there a need to ...
>> >
>> > "Can the StDvX definition create the FinalArray without a loop ?"
>> >
>> > Did you play with the code ? Look at the results ? ... Doesn't it
>> do
>> > precisely that ? It matters not what is in the array of X in
> terms
>> > of being able to calc the StDev of it's elements from the first
> one
>> > to each bar along the way. In fact that code with minor mods
> could
>> > be used to calc a variable length StDev based on a changing value
>> of
>> > n where n was an array of elements based on whatever calc one
>> wanted.
>> >
>> > --- In amibroker@xxxxxxxxxxxxxxx, "treliff" <treliff@xxxx> wrote:
>> > > So far so good, but now suppose that the array in question, the
>> one
>> > > we need to calculate the standard deviation over, changes with
>> each
>> > > bar. In other words, there is not one array
>> > >
>> > > X = BarIndex() + 100;
>> > >
>> > > but there are different arrays like for example
>> > >
>> > > X(i) = BarIndex() + i;
>> > >
>> > > (In my code this would be Oscillator(Cycleconstant(i)) but that
>> is
>> > > not of the essence. >
>> > > In my opinion this now is the remaining problem and the real
> time-
>> > > consumer:
>> > >
>> > > for (i = 0 ; i < BarCount ; i++ )
>> > > { y = StDvX( X( i ) ) ) ;
>> > > FinalArray[ i ] = y[ i ] ; }
>> > >
>> > > >
>> > >
>> > > --- In amibroker@xxxxxxxxxxxxxxx, "Fred" <ftonetti@xxxx> wrote:
>> > > > The question simplifies to ... how do I calculate standard
>> > > deviation
>> > > > at the current bar for all past values of some array without
>> > using
>> > > a
>> > > > loop, thereby eliminating the innermost loop and leaving only
>> the
>> > > > outer one.
>> > > >
>> > > > When looking at most problems like this where the solution
> may
>> > not
>> > > be
>> > > > immediately obvious, the simplest way is to break the problem
>> > down
>> > > > into its individual components and use EXPLORE to see that
> each
>> > > > calculation is doing what it's supposed to and from the
>> > perspective
>> > > > of speed it won't be any slower to do it this way, in some
>> cases
>> > it
>> > > > may actually be faster i.e. here's the way most people write
> a
>> > > > stochastic calc ...
>> > > >
>> > > > Sto = (C - LLV(C, Length)) / (HHV(C, Length) - LLV(C,
> Length));
>> > > >
>> > > > The problem of course is that one has done the calc LLV(C,
>> > Length)
>> > > > twice ... Simpler and of course faster is ...
>> > > >
>> > > > LLVX = LLV(C, Length)
>> > > > Sto = (C - LLVX) / (HHV(C, Length) - LLVX);
>> > > >
>> > > > Back to your problem ...
>> > > >
>> > > > StDevX = Sqrt(Cum ((X - Average(X)) ^ 2) / n)
>> > > >
>> > > > Let's assume we want to see how to get the calculations
> correct
>> > at
>> > > > BarIndex() == 10 ( The 11th Bar ) without using a loop and
> for
>> > the
>> > > > moment we won't care if the calc is correct at BI() = 9 or 11
>> > > because
>> > > > we know we can always write a loop to go around all of this
> if
>> we
>> > > > need to ...
>> > > >
>> > > > // Let's generate some simple dummy data "X" to
>> > > > // use where we can easily eyeball the results
>> > > > // "X" can always be replaced by something real
>> > > >
>> > > > X = BarIndex() + 100;
>> > > >
>> > > > // The components
>> > > >
>> > > > n = BarIndex() + 1;
>> > > > CumX = Cum(X);
>> > > > MeanX = CumX / n;
>> > > > XMean = X - MeanX;
>> > > > Mean2 = XMean ^ 2;
>> > > > CumM2 = Cum(Mean2);
>> > > > nCumM = CumM2 / n;
>> > > > StDvX = sqrt(nCumM);
>> > > >
>> > > > Filter = BarIndex() <= 10;
>> > > >
>> > > > AddColumn(X, "X", 1.0);
>> > > > AddColumn(n, "n", 1.0);
>> > > > AddColumn(CumX, "CumX", 1.0);
>> > > > AddColumn(MeanX, "MeanX", 1.2);
>> > > > AddColumn(XMean, "X-MeanX", 1.2);
>> > > > AddColumn(Mean2, "Mean2", 1.2);
>> > > > AddColumn(CumM2, "CumM2", 1.2);
>> > > > AddColumn(nCumM, "nCumX", 1.2);
>> > > > AddColumn(StDvX, "StDevX", 1.2);
>> > > >
>> > > > Try taking what's above and running it as an EXPLORE ... see
>> the
>> > > > columns (below "hopefully") it shows i.e. one for each
>> component
>> > > > including the data "X" ... It would appear that StDevX is
>> correct
>> > > not
>> > > > only for BI() == 10 but for ALL the other bars as well
> without
>> > ANY
>> > > > loops.
>> > > >
>> > > > X n CumX MeanX X-MeanX Mean2 CumM2 nCumX
> StDevX
>> > > > 100 1 100 100.00 0.00 0.00 0.00 0.00
>> 0.00
>> > > > 101 2 201 100.50 0.50 0.25 0.25 0.13
>> 0.35
>> > > > 102 3 303 101.00 1.00 1.00 1.25 0.42
>> 0.65
>> > > > 103 4 406 101.50 1.50 2.25 3.50 0.88
>> 0.94
>> > > > 104 5 510 102.00 2.00 4.00 7.50 1.50
>> 1.22
>> > > > 105 6 615 102.50 2.50 6.25 13.75 2.29
>> 1.51
>> > > > 106 7 721 103.00 3.00 9.00 22.75 3.25
>> 1.80
>> > > > 107 8 828 103.50 3.50 12.25 35.00 4.38
>> 2.09
>> > > > 108 9 936 104.00 4.00 16.00 51.00 5.67
>> 2.38
>> > > > 109 10 1045 104.50 4.50 20.25 71.25 7.13
>> 2.67
>> > > > 110 11 1155 105.00 5.00 25.00 96.25 8.75
>> 2.96
>> > > >
>> > > > Since the rest of your AFL doesn't require any loops, one
> would
>> > > > conclude that your AFL really needs NO loops at all.
>
>
>
>
>
> 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/
|