PureBytes Links
Trading Reference Links
|
Hello,
When you enter an expression that contains more than one operator, then it may not be clear which operation should be performed
first. For example, in the expression 6 + 3 * 4 one might choose to perform the addition first and the multiplication later,
yielding (6 + 3) * 4 = 9 * 4 = 36, or one might choose to perform the multiplication first and the addition later, yielding 6 + (3 *
4) = 6 + 12 = 18. To take care of situations like this, the operators are assigned an order of precedence: an indication of which
operator goes first in any situation.
The following list shows groups containing operators of equal precedence, with the groups listed in order of decreasing precedence:
> 1 ^ Exponentiation
> 2 - Negation - Unary minus
> 3 * Multiplication
> 4 / Division
> 5 + Addition
> 6 - Subtraction
> 7 < Less than
> 8 > Greater than
> 9 <= Less than or equal to
> 10 >= Greater than or equal to
> 11 == Equal to
> 12 != Not equal to
> 13 NOT Logical "Not"
> 14 AND Logical "And"
> 15 OR Logical "Or"
> 16 = Variable assignment operator
For example, multiplication (*) has a higher precedence than addition (+), so in our example 6 + 3 * 4, multiplication goes first
and addition second. You can make the addition go first after all by making the order explicit using grouping with parentheses
(which has the highest precedence): (6 + 3) * 4 yields 36.
All operators except power-taking (^), unary minus, logical NOT and assignment have left associativity: if they are combined with
operators of equal precedence, then the operations are evaluated from left to right. For example, in 3 * 4 / 5, the multiplication
and the division have the same order of precedence and are both left associative, so the leftmost operation, in this case the
multiplication, goes first, yielding 2 (remember that the example involves integers only). With enforced precedence for the
division, through 3 * (4 / 5), we get 0.
The operators with the greatest precedence are grouping with parentheses, and selecting a member from a list or structure (.). Unary
minus refers to a minus sign applied to a single argument, and it has high precedence. For example, - 3 + 4 yields 1, and not -7.
However, the precedence of power-taking is higher than that of unary minus, so -3^2 is equal to -9. Power-taking has right
associativity, so 3 ^ 4 ^ 2 is interpreted as 3 ^ (4 ^ 2) = 3 ^ 16.
Using parentheses, one can explicitly indicate any desired precedence.
Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message -----
From: "dtsokakis" <TSOKAKIS@xxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Tuesday, April 30, 2002 9:07 AM
Subject: [amibroker] Re: Are your Composites accurate???
Richard,
Note please that in AFL the following results are true:
10-3^2=1
10+-3^2=19
!!!
Dimitris Tsokakis
--- In amibroker@xxxx, "Richard Alford" <richard.alford@xxxx> wrote:
> not in this universe :) It may not, in fact, matter since the
exponentiation operator always (by some other convention?) follows
the operand. Actually the "unitary" is a relatively new term (in the
past 20 years) jumping out after I was well out of grad school (in
mathematical physics) and before the programmers began to worry about
the difference between subtraction and what I always interpreted as a
simple negative number - the computer worries about such things,
people don't. (I do realize the mathematical distinction has been
around for centuries - just ignored like most math in the real world
until it found a use.)
>
> BTW - Multiplication and division are not generally on the same
level ( My Dear Aunt Sally) for the antiques in the group; although,
when in doubt most simply just hammer in parens by reflex - similar
to the way a horse runs first and asks questions latter....
>
>
> I still think that this is a simple documentation error on TJ's
part , and,personally, I find that comforting :)
>
> Cheers,
>
> Richard
> ----- Original Message -----
> From: Steve Dugas
> To: amibroker@xxxx
> Sent: Monday, April 29, 2002 8:34 PM
> Subject: Re: [amibroker] Re: Are your Composites accurate???
>
>
> It just occurred to me - maybe they are on the same level (like
multiplication and division), so it does the negation first because
it comes to it first?
>
> Steve
> ----- Original Message -----
> From: Steve Dugas
> To: amibroker@xxxx
> Sent: Monday, April 29, 2002 9:08 PM
> Subject: Re: [amibroker] Re: Are your Composites accurate???
>
>
> Hi DT,
>
> I must be missing something. I tried your plot, and -1^10 did
evaluate to 1, like you say. But, if exponentiation takes precedence
over negation (as shown in your table), how come it doesnt evaluate
to -1, like this? :
>
> -1^10 = -(1^10) = -(1) = -1
>
> Steve
> ----- Original Message -----
> From: dtsokakis
> To: amibroker@xxxx
> Sent: Monday, April 29, 2002 12:16 PM
> Subject: [amibroker] Re: Are your Composites accurate???
>
>
> Herman,
> I really donīt know how do you realise things.
> Well, -1^10 is equal to 1.
> [It acts like (-1)^10 because of priorities in operators**
> [try Plot(-1^10,"",1,1);]
> -1*10^10 is a huge negative number
> Another Amibroker expression is -1e10, also negative enough.
> Your formula was not correct, because it was excuding stocks
with
> open==1 from counting.[see previous mails to you]
> DT
> **Operator precedence and the parentheses
> AFL supports parentheses in formulas.
>
> Parentheses can be used to control the operation precedence
(the
> order in which the operators are calculated). AmiBroker
always does
> operations within the innermost parentheses first. When
parentheses
> are not used, the precedence is as follows (higher precedence
listed
> first):
>
> No Symbol Meaning
> 1 ^ Exponentiation
> 2 - Negation - Unary minus
> 3 * Multiplication
> 4 / Division
> 5 + Addition
> 6 - Subtraction
> 7 < Less than
> 8 > Greater than
> 9 <= Less than or equal to
> 10 >= Greater than or equal to
> 11 == Equal to
> 12 != Not equal to
> 13 NOT Logical "Not"
> 14 AND Logical "And"
> 15 OR Logical "Or"
> 16 = Variable assignment operator
>
> The expression
>
> H + L / 2;
> (without parenthesis) would be calculated by AmiBroker
as "L / 2"
> plus "H", since division has a higher precedence. This would
result
> in a much different value than
>
> (H + L)/2;
>
> --- In amibroker@xxxx, "Herman van den Bergen" <psytek@xxxx>
wrote:
> > > -----Original Message-----
> > > From: dtsokakis [mailto:TSOKAKIS@x...]
> > > Sent: Sunday, April 28, 2002 11:13 AM
> > > To: amibroker@xxxx
> > > Subject: [amibroker] Re: Are your Composites accurate???
> > >
> > >
> > > Herman,
> > > I just noticed that your EMPTY is -1^10, ie equal to 1.
> > > So, your equivalent formula is
> > > EMPTY = 1;
> >
> > Just realized that -1^10 is not equal to 1 but is -1 * 10^10
> >
> > perhaps my code was OK anyway?
> >
> > Take care,
> > Herman.
> >
> >
> >
> >
> > > AddToComposite(IIf(Open == 1,0,1),"~DataPresent","v",3);
> > > Do you have in the group of your gif some stocks with
open==1 ?
> > > This would give some explanation.
> > > DT
> > > PS The huge negative symbol in AFL is -1e10
> > > --- In amibroker@xxxx, "dtsokakis" <TSOKAKIS@xxxx> wrote:
> > > > Of course I receive an identical result list with your
> > > > EMPTY = -1^10;
> > > > AddToComposite(IIf(Open ==
EMPTY,0,1),"~DataPresent","v",3);
> > > > Buy= 0;
> > > > f=Foreign("~datapresent","v");
> > > > Filter=f!=101;
> > > > AddColumn(f,"");
> > > > EXACTLY the same results.
> > > > To avoid any misuderstanding :your formula works, I
just think
> > > > Amibroker does not use the open==EMPTY hypothesis,
because if
> the
> > > > ADLAC is not present on 16/4/2002, there is no
reference for
> ADLAC
> > > > this date.
> > > > My opinion is from experience, Tomasz knows how
AddToComposite()
> > > > works.
> > > > DT
> > > > --- In amibroker@xxxx, "Dimitris Tsokakis"
<TSOKAKIS@xxxx>
> wrote:
> > > > > I respectfully disagree. If you are not concerned
about bar-
> by-
> > > bar
> > > > accuracy
> > > > > than you are correct. In that case the "1" method
works fine.
> As
> > > > long as you
> > > > > know that this method will pick up holes of several
days but
> that
> > > > it will
> > > > > not pick up single bar holes.
> > > > >
> > > > >
> > > > > Herman,
> > > > > Of course we speak for daily search, bar-by-bar.
> > > > > I have in my ^NDX 4 experimental holes on
> > > > > 6/1/2000 [1], 15/2/2000 [1] and 1/3/2000[2]
> > > > > plus the missing ADLAC after 15/4/2002.
> > > > > As you see from the exploration, the population
> > > > > is different from 101 exactly these dates.
> > > > > I do not understand the conditions of your graph.
> > > > > The
> > > > > AddToComposite(1,"~count","v");
> > > > > Buy=0;
> > > > > scans bar-by-bar every stock for each date.
> > > > > If the stock is present, it adds an 1 and moves to
the next
> stock.
> > > > > If ADLAC is not present on 16/4/2002, then the sum
will be 100
> > > > > for the certain date.
> > > > > It is impossible to have a 20% error, there should be
another
> > > > > reason for your results.
> > > > > Dimitris Tsokakis
> > >
> > >
> > >
> > >
> > >
> > > Your use of Yahoo! Groups is subject to
> http://docs.yahoo.com/info/terms/
> > >
> > >
>
>
> Your use of Yahoo! Groups is subject to the Yahoo! Terms of
Service.
>
>
>
> Your use of Yahoo! Groups is subject to the Yahoo! Terms of
Service.
>
>
> Yahoo! Groups Sponsor
> ADVERTISEMENT
>
>
>
>
> Your use of Yahoo! Groups is subject to the Yahoo! Terms of
Service.
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
|