PureBytes Links
Trading Reference Links
|
That's a real problem, Salil.
I'm scrambling to keep from suspending
MY newsletter.
Bob
-----Original Message-----
From: salil_gangal
[mailto:salil_gangal@xxxxxxxxx]
Sent: Thursday, May 22, 2003 9:01 AM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Re: Image Copy
Problem even when copied to Word.
Friends,
Similar problem comes-up if the copied
image is pasted into Microsoft
WORD. So I guess there is a bug in
AmiBroker. Are there any others
who have noticed that there is a bar at
the bottom of the copied
image copied using 'Edit->Image Copy' ?
Regards,
- Salil V Gangal
--- In amibroker@xxxxxxxxxxxxxxx, Salil
V Gangal <salil_gangal@xxxx>
wrote:
> Tomasz,
>
> I am copying chart image using
'Edit->Copy As Image'.
>
> But I noticed that copied image gets a
black-band at the bottom.
Have you noticed
> anything like this ? Is this a bug ?
BTW, I import the image into
XnView, and I'm
> not sure if this is AmiBroker issue or
XnView issue.
>
> Regards,
>
> - Salil V Gangal
>
>
> --- Tomasz Janeczko <amibroker@xxxx>
wrote:
> > Hello,
> >
> > A new beta version (4.38.0) of
AmiBroker has just been released.
> >
> > It is available for registered users
only from the members area
at:
> >
http://www.amibroker.com/members/bin/ab4
380beta.exe
> >
> > If you forgot your user name /
password to the members area
> > you can use automatic reminder
service at:
http://www.amibroker.com/login.html
> >
> > Short list of changes in this beta
(read change log in the "read
me" below for the
> > details)
> >
> > a.. send e-mails with charts
directly from AmiBroker: Edit->Image-
>Send by email
> > and File->Send chart via e-mail
> > a.. added export chart image to PNG
(portable network graphics)
file:
> > Edit->Image->Export to PNG file
> >
> > a.. new setting for candlestick
appearance: Tools->Preferences-
>Charting, "Use
> > distinct color for" : "None, up
candle hollow" - it plots entire
candle with one
> > color but leaves interior of UP
candle body hollow.
> >
> > a.. fixed positioning of arrows in
image copies (Edit->Image-
>Copy)
> >
> > a.. fixed crash occurring when
printer device context did not
support bit blit
> > copies. added very simple arrow line
drawing for that case (will
be improved in
> > future releases)
> >
> > a.. fixed bug in handling Null with
new constructs: if, while and
for.
> >
> > a.. numbers (floats) are now
automatically 'upsized' to arrays on
first use of
> > l-value array subscript operator
without causing error.
> > .
> >
> > Best regards,
> > Tomasz Janeczko
> > amibroker.com
> >
> > AmiBroker 4.38.0 Beta Read Me
> > May 20, 2003 1:11
> >
> > THIS IS AN EARLY BETA VERSION OF THE
SOFTWARE. EXPECT BUGS !!!
> >
> > AGAIN: THIS IS AN EARLY BETA VERSION
OF THE SOFTWARE. EXPECT
BUGS !!!
> >
> >
> > Backup your data files and entire
AmiBroker folder first!
> >
> > INSTALLATION INSTRUCTIONS
> >
> > IMPORTANT: This archive is
update-only. You have to install full
version 4.30
> > first.
> >
> > Just run the installer and follow
the instructions.
> >
> > Then run AmiBroker. You should see
"AmiBroker 4.38.0 beta"
written in the About
> > box.
> >
> > See CHANGE LOG below for detailed
list of changes.
> >
> > HELP ON NEW FEATURES
> > USER-DEFINABLE FUNCTIONS,
PROCEDURES, LOCAL/GLOBAL VARIABLES
(4.34 or higher)
> >
> > Here is a sample code showing
user-defined function:
> >
> > // the following function is 2nd
order smoother
> >
> > function IIR2( input, f0, f1, f2 )
> > {
> > result[ 0 ] = input[ 0 ];
> > result[ 1 ] = input[ 1 ];
> >
> > for( i = 2; i < BarCount; i++ )
> > {
> > result[ i ] = f0 * input[ i ] +
> > f1 * result[ i - 1 ] +
> > f2 * result[ i - 2 ];
> > }
> >
> > return result;
> > }
> >
> > Plot( Close, "Price", colorBlack,
styleCandle );
> > Plot( IIR2( Close, 0.2, 1.4, -0.6 ),
"function example",
colorRed );
> >
> >
> > In this code IIR2 is a user-defined
function. input, f0, f1, f2
are formal
> > parameters of the functions.
> > At the time of function call the
values of arguments are passed
in these
> > variables. Formal parameters behave
like local variables.
> > Later we have result and i which are
local variables. Local
variables are visible
> > inside function only. If any other
function uses the same
variable name they won't
> > interfere between each other.
> >
> > Due to the fact that AFL does not
require to declare variables
the decision
> > whenever given variable is treated
as local or global is taken
depends on where it
> > is FIRST USED.
> >
> > If given identifier appears first
INSIDE function definition -
then it is treated
> > as LOCAL variable.
> > If given identifier appears first
OUTSIDE function definition -
then it is treated
> > as GLOBAL variable.
> >
> > This default behaviour can be
however overriden using global and
local keywords
> > (introduced in 4.36) - see example
2.
> >
> > Example (commentary):
> >
> > k = 4; // this is GLOBAL variable
> >
> > function f( x )
> > {
> > z = 3; // this is LOCAL variable
> > return z * x * k; // 'k' here
references global variable k
(first used above
> > outside function)
> > }
> >
> > z = 5; // this is GLOBAL variable
with the same name as local
variable in function
> > f
> >
> > "The value of z before function call
:" + WriteVal( z );
> >
> > // Now even if we call function
> > // the value of our global variable
z
> > // is not affected by function call
because
> > // global variable z and local
variable z are separate and
> > // arguments are passed by value
(not by reference)
> >
> > "The result of f( z ) = " +
WriteVal( f( z ) );
> >
> > "The value of z after function call
is unchanged : " +
teVal(
z );
> >
> >
> > Example 2: Using local and global keywords to override default
visibility rules:
> >
> > VariableA = 5; // implict global variable
> >
> > function Test()
> > {
> > local VariableA; // explicit local variable with the same
identifier as global
> > global VariableB; // explicit global variable not defined earlier
> > // may be used to return more than one value
from the function
> >
> > VariableA = 99;
> > VariableB = 333;
> > }
> >
> > VariableB = 1; // global variable
> >
> > "Before function call";
> > "VariableA = " + VariableA;
> > "VariableB = " + VariableB;
> >
> > Test();
> >
> > "After function call";
> > "VariableA = " + VariableA + " (not affected by function call )";
> > "VariableB = " + VariableB + " (affected by the function call )"
> >
> > At the end of the function we can see 'return' statement that is
used to return
> > the result to the caller. Note that currently return statement
must be placed at
> > the very end of the function.
> >
> > It is also possible to write a procedure (a function that returns
nothing (void))
> >
> > procedure SinePlotter( Freq, ColorIndex )
> > {
> > pname = "Line"+WriteVal(ColorIndex,1.0);
> > array = sin( Cum( Freq * 0.01 ) );
> > Plot( array, pname , colorRed + ColorIndex, styleThick );
> > }
> >
> > for( n = 1; n < 10; n++ )
> > {
> > SinePlotter( n/2+Cum(0.01), n );
> > }
> >
> > Note that although there are two separate keywords 'function'
and 'procedure'
> > AmiBroker currently treats them the same (they both accept return
values but not
> > require them), but in the future the rules maight get enforced to
use
> > return statement ONLY in conjunction with function keyword. So it
is advised to
> > use function keyword in case when your function returns any value
and procedure
> > keyword otherwise.
> >
> > Note also that recursion (having a function call itself from
within itself) is NOT
> > supported as for now.
> >
> >
> > FLOW CONTROL AND LOOPING (4.31 or higher)
> >
> > do-while Statement
> >
> > The do-while statement lets you repeat a statement or compound
statement until a
> > specified expression becomes false
.
> >
> > Syntax
> >
> > do statement while ( expression ) ;
> >
> > The expression in a do-while
statement is evaluated after the
body of the loop is
> > executed. Therefore, the body of the
loop is always executed at
least once.
> >
> > The expression must have numeric or
boolean type. Execution
proceeds as follows:
> >
> > 1.. The statement body is
executed.
> >
> >
> > 2.. Next, expression is evaluated.
If expression is false, the
do-while
> > statement terminates and control
passes to the next statement in
the program. If
> > expression is true (nonzero), the
process is repeated, beginning
with step 1.
> > This is an example of the do-while
statement:
> >
> > x=100;
> > do
> > {
> > y = sin( x );
> > x--;
> > } while ( x > 0 );
> > In this do-while statement, the two
statements y = sin( x ); and
x--; are
> > executed, regardless of the initial
value of x. Then x > 0 is
evaluated. If x is
> > greater than 0, the statement body
is executed again and x > 0 is
reevaluated. The
> > statement body is executed
repeatedly as long as x remains
greater than 0.
> > Execution of the do-while statement
terminates when x becomes 0
or negative. The
> > body of the loop is executed at
least once.
> >
> >
> > while Statement
> > The while statement lets you repeat
a statement until a specified
expression
> > becomes false.
> >
> > Syntax
> >
> > while ( expression ) statement
> >
> > The expression must have arithmetic
(numeric/boolean) type.
Execution proceeds as
> > follows:
> >
> > 1.. The expression is evaluated.
> >
> >
> > 2.. If expression is initially
false, the body of the while
statement is never
> > executed, and control passes from
the while statement to the next
statement in the
> > program.
> > If expression is true (nonzero),
the body of the statement is
executed and the
> > process is repeated beginning at
step 1.
> >
> > This is an example of the while
statement:
> >
> > i = 10;while( i <
{ Plot( MA( Close, i ), "MA" +
WriteVal(
i, 0 ), colorBlack
> > + i ); i = i + 1;}The example plots 10, 11, 12, 13, 14, 15, 16,
17, 18, 19 - bar
> > moving averages.
> >
> >
> > for Statement
> >
> > The for statement lets you repeat a statement or compound
statement a specified
> > number of times. The body of a for statement is executed zero or
more times until
> > an optional condition becomes false.
> >
> > Syntax
> >
> > for ( init-expression ; cond-expression ; loop-expression )
statement
> >
> > Execution of a for statement proceeds as follows:
> >
> > 1.. The init-expression, is evaluated. This specifies the
initialization for the
> > loop. There is no restriction on the type of init-expression.
> >
> >
> > 2.. The cond-expression, is evaluated. This expression must
have arithmetic
> > type. It is evaluated before each iteration. Three results are
possible:
> > a.. If cond-expression is true (nonzero), statement is
executed; then
> > loop-expression, if any, is evaluated. The loop-expression is
evaluated after each
> > iteration. There is no restriction on its type. Side effects will
execute in
> > order. The process then begins again with the evaluation of cond-
expression.
> >
> >
> > b.. If cond-expression is false (0), execution of the for
statement terminates
> > and control passes to the next statement in the program.
> > This example illustrates the for statement:
> >
> > myema[ 0 ] = Close[ 0 ];for( i = 1; i < BarCount; i++ ){ myema
[ i ] = 0.1 *
> > Close[ i ] + 0.9 * myema[ i - 1 ];}This example iterates all bars
of close array
> > to calculate exponential moving averageif, else Statements
> > if( expression )
> > statement1
> > [else
> > statement2]
> >
> > The if keyword executes statement1 if expression is true
(nonzero); if else is
> > present and expression is false (zero), it executes statement2.
After executing
> > statement1 or statement2, control passes to
the next statement.
> >
> > Example 1
> >
> > if ( i > 0 )
> > y = x / i;
> > else
> > {
> > x = i;
> > y = abs( x );
> > }In this example, the statement y =
x/i; is executed if i is
greater than 0. If i
> > is less than or equal to 0, i is
assigned to x and abs( x ) is
assigned to y. Note
> > that the statement forming the if
clause ends with a semicolon.
> >
> > When nesting if statements and else
clauses, use braces to group
the statements
> > and clauses into compound statements
that clarify your intent. If
no braces are
> > present, the compiler resolves
ambiguities by associating each
else with the
> > closest if that lacks an else.
> >
> > Example 2
> >
> > if ( i > 0 ) /* Without
braces */
> > if ( j > i )
> > x = j;
> > else
> > x = i;The else clause is
associated with the inner if
statement in this
> > example. If i is less than or equal
to 0, no value is assigned to
x.
> >
> > Example 3
> >
> > if ( i > 0 )
> > { /* With
braces */
> > if ( j > i )
> > x = j;
> > }
> > else
> > x = i;The braces surrounding the
inner if statement in this
example make the
> > else clause part of the outer if
statement. If i is less than or
equal to 0, i is
> > assigned to x.
> >
> > CHANGE LOG
> > CHANGES FOR VERSION 4.38.0 (as
compared to 4.37.0)
> >
> > a.. new setting for candlestick
appearance:
> > Tools->Preferences->Charting
> > "Use distinct color for" : "None,
up candle hollow" -
> > it plots entire candle with one
color but leaves interior of UP
candle body
> > hollow.
> >
> >
> > b.. added export chart image to
PNG (portable network graphics)
file
> > Edit->Image->Export to PNG file
> > (Please don't ask me to add GIF
support. GIF is patented and
requires $3500
> > license fee for Unisys. PNG is free,
supported by all browsers,
smaller and better
> > )
> >
> >
> > c.. added 'send chart by e-mail'
feature
> > Edit->Image->Send by email
> > and
> > File->Send chart via e-mail
> >
> >
> > d.. fixed positioning of arrows in
image copies (Edit->Image-
>Copy)
> >
> > e.. fixed crash occurring when
printer device context did not
support bit blit
> > copies. added very simple arrow line
drawing for that case (will
be improved in
> > future releases)
> >
> > f.. fixed bug in handling Null
with new constructs: if, while
and for.
> > In pre-4.38 versions Null used in
if, while for was treated as
True, which was
> > wrong
> > if( Null ) _TRACE("WRONG");
> > else _TRACE("CORRECT");
> > Now Null in if, while, for is
treated as False.
> > g.. numbers (floats) are now
automatically 'upsized' to arrays
on first use of
> > l-value array subscript operator
without causing error.
> > Also r-value subscript can be
applied to numbers and return the
number itself
> > without causing error, but the
underlying variable remains just a
single number.
> >
> > This allows to easily intialize
arrays to any value without
need to write loops.
> >
> > Example 1:
> > in previous versions you would
need to write:
> >
> > for( i = 0; i < BarCount; i++ )
myarray[ i ] = 0 ; // fill with
zeros
> > myarray[ 5 ] = 6; // write value
to 5th element of the array
> >
> > now you can write simply:
> >
> > myarray = 3; // initialize, at
this moment myarray is just a
number
> > myarray[ 5 ] = 6; // write value
to 5th element of the array,
the variable is
> > automatically
> > // upsized to array and all
elements are filled with a numeric
value
> > // that was originally placed in
myarray variable
> >
> > /* myarray is holds now the array
filled with values of 3
except element 5 that
> > has value of 6 */
> >
> > mynumber = 5;
> > test = mynumber[ 7 ]; // previous
versions would give an error
message here
> > // now subscript operator for
r-value numeric variable
> > // is allowed and returns just the
number
> > // and variable is not upsized to
array unless appears on left
side
> > // of assignment (l-value)
> > /* mynumber variable here is still
a number */
> > WriteVal( test );
> >
> > CHANGES FOR VERSION 4.37.0 (as
compared to 4.36.0)
> >
> > a.. printing improved, now all
open indicator panes are printed
and resolution
> > is increased
> > b.. Edit->Copy As Image and
Edit->Copy As Metafile now generate
an image
> > consisting of all indicator panes
(not just one)
> > c.. fixed problem with
non-resetting sort arrows in AA window
> > d.. fixed sometimes occuring crash
Signal() function
> > e.. increased size of error
message text buffer to prevent
overflow when
> > reporting syntax errors in formulas
having long unwrapped lines.
> > f.. grid lines are drawn with fine
dots instead of small dashes
(screen output
> > only)
> > g.. new AFL functions:
> > GetCategorySymbols( category,
index )
> > - retrieves comma-separated list
of symbols belonging to given
category
> >
> > supported categories:
> > categoryMarket categoryGroup
categorySector categoryIndustry
categoryWatchlist
> > categoryFavorite categoryIndex
> >
> > index =
(market/group/industry/sector/watchlist
number)
> > 0..255 for categoryMarket,
categoryGroup, categoryIndustry
> > 0..63 for categorySector,
categoryWatchlist
> > ignored for categoryFavorite,
categoryIndex
> >
> > StrExtract( list, item )
> > - extracts given item (zero-based)
from comma-separated string.
> >
> > Example:
> > StrExtract( "MSFT,AAPL,AMD,INTC",
2 )
> > will return AMD
> >
> > StrExtract( "MSFT,AAPL,AMD,INTC",
0 )
> > will return MSFT
> >
> > StrExtract( "MSFT,AAPL,AMD,INTC",
200 )
> > will return empty string ""
> >
> > + other minor fixes
> >
> > Example code for
GetCategorySymbols and StrExtract:
> >
> > /* note: if given watch list
contains lots of symbols
> > ** performance may be poor
> > */
> > function
CreateAverageForWatchList( listnum )
> > {
> > // retrive comma-separated list
of symbols in watch list
> > list =
etCategorySymbols( categoryWatchlist,
listnum );
> >
> > Average = 0; // just in case
there are no watch list members
> >
> > for( i = 0; ( sym =
trExtract( list, i ) ) != ""; i++ )
> > {
> > f = Foreign( sym, "C" );
> > if( i == 0 ) Average = f;
> > else Average = Average + f;
> > }
> >
> > return Average / i; // divide by
number of components
> > }
> >
> >
Plot( CreateAverageForWatchList( 1 ),
"Avg of WL 1",
colorGreen );
> >
> > CHANGES FOR VERSION 4.36.0 (as
compared to 4.35.0)
> >
> > a.. fixed problem with affecting 2
or more identifiers
referencing the same
> > array when using l-value subscript
operator []. Thanks Herman for
pointing this
> > out
> > b.. global and local keywords -
for explicit visibility/scope
declarations
> > Allow to override default scope
rules that assume that
variables defined outside
> > function are global, while those
identifiers that appear for the
first time inside
> > functions are local.
> >
> > Syntax:
> >
> > local var1 [, var2, ... ] ;
> > global var1 [, var2, ... ] ;
> >
> > (as you can see you can declare
more than one variable in one
line.
> >
> > Note: using these keywords outside
function definition has no
meaning
> > (global scope is used).
> >
> > Example:
> >
> > VariableA = 5; // implict global
variable
> >
> > function Test()
> > {
> > local VariableA; // explicit
local variable with the same
identifier as global
> >
> > global VariableB; // explicit
global variable not defined
earlier
> > // may be used
to return more than one value
from the
> > function
> >
> > VariableA = 99;
> > VariableB = 333;
> > }
> >
> > VariableB = 1; // global variable
> >
> > "Before function call";
> > "VariableA = " + VariableA;
> > "VariableB = " + VariableB;
> >
> > Test();
> >
> > "After function call";
> > "VariableA = " + VariableA + "
(not affected by function
call )";
> > "VariableB = " + VariableB + "
(affected by the function
call )";
> >
> > c.. syntax highligting modified so
keywords: #include, if,
else, while, do,
> > function, procedure, global, local,
return are colorised
differently than built-in
> > constants or functions.
Corresponding color/style setting added
to
> > Preferences->Editor
> >
> >
> > d.. #pragma nocache
> > pre-processor command added to
switch off #include file caching
mechanism.
> > Note: between '#pragma' and
'nocache' there must be exactly
SINGLE space
> > Note 2: disabling caching may slow
down execution of the
formula (especially
> > in indicators)
> > Note 3: #pragma nocache must be
placed before #includes
> >
> > Example:
> > #pragma nocache
> > #include <myfile.afl>
> >
> > a.. single line comments now work
with #includes (and #pragma
too) so you can
> > comment out include in regular way:
> > //#include <something> - will not
include
> >
> >
> > b.. changed error message from
"unknown identifier"
to "Variable 'name' used
> > without having been initialized."
which better decribes the
problem.
> >
> > For example:
> >
> > function Test( )
> > {
> > global x;
> > x = 3;
> > }
> >
> > WriteVal( x ); // variable used
without having been initialized,
> > // although declared inside Test()
function body
> >
> >
> > Test( ); // during function call
the value of 3 is assigned to
variable x
> >
> > WriteVal( x ); // and now no error
is reported
> >
> > a.. implemented shortcut
evaluation of logical operators
> > The operands of logical-AND and
logical-OR expressions are
evaluated from left
> > to right. Now if the value of the
first operand is sufficient to
determine the
> > result of the operation, the second
operand is not evaluated.
This is called
> > "short-circuit evaluation."
> >
> > The left operand of the
logical-AND operator is completely
evaluated and all
> > side effects complete before
continuing. If the left operand
evaluates to false
> > (0), the other operand is not
evaluated.
> >
> > The left operand of the logical-OR
operator is completely
evaluated
> > and all side effects complete
before continuing.
> > If the left operand evaluates to
true (nonzero), the other
operand is not
> > evaluated.
> >
> > (The above description applies to
operands that evaluate to
single boolean
> > value,
> > it does not apply to arrays.
Operands that evaluate to arrays
are evaluated
> > always )
> >
> > Example:
> > for( i = -3; i < BarCount; i++ )
> > {
> > // using old versions of
AMiBroker you would get subscipt out
of range
> > // but now
> > // the second operand (C[ i ] >
C[ i - 1 ]) is evaluated
> > // ONLY if first operand ( i >=
1 ) evaluates to TRUE
> >
> > if( i >= 1 && C[ i ] > C[ i -
1 ] )
> > {
> > _TRACE("TEST " + i);
> > }
> > }
> >
> >
> >
> > CHANGES FOR VERSION 4.35.0 (as
compared to 4.34.2)
> >
> > a.. do-while loop implemented:
> > Syntax:
> >
> > do statement while ( expression )
;
> >
> > The expression in a do-while
statement is evaluated after the
body of the loop
> > is executed.
> > Therefore, the body of the loop is
always executed at least
once.
> >
> > Example:
> >
> > i=0;
> > do
> > {
> > i++;
> > }
> > while( i < 100 );
> > WriteVal( i );
> >
> >
> > b.. it is now allowed to 'add' (or
rather concatenate) string
to a number /
> > array. This saves quite a bit of
typing. This works as in
JScript. The left-hand
> > operand of '+' has to be a string.
The right-hand operand may be
string, number or
> > array. Numbers are coerced to
strings using %g sprintf formatting
(prints out
> > decimal point only when necessary)
and then concatenated. In case
of arrays
> > SELECTED VALUE is coerced to string
and then concatenated.
> >
> > So now instead of
> >
> > i = 100;
> > "Value is " + WriteVal( i );
> > "Close : " + WriteVal( Close ) +
", Open : " + WriteVal( Open )
+ ", High : " +
> > WriteVal( High );
> >
> > you can write:
> >
> > i = 100;
> > "Value is " + i;
> > "Close : " + Close + ", Open : " +
Open + ", High : " + High;
> >
> > Note that
> >
> > "Test " + 100 + 1;
> >
> > will give you "Test 1001" because
statements are parsed from
left to right.
> > "Test " is added first to "100"
giving "Test 100" and then
to "1" giving
> > "Test 1001". If you want to
perform numeric adding first please
use braces:
> >
> > "Test " + ( 100 + 1 );
> > - this will give you "Test 101"
> >
> >
> > c.. additional tweaks in AFL
engine & garbage collection,
futher speed up of
> > execution of very long loops
> >
> > d.. more error checking in AFL
engine - will report using
uninitialized
> > variables that were accepted
silently in 4.31.x - 4.34.x
> > e.. #include now accepts new way
of specifying file names to
include:
> >
> > #include <filename.afl>
> >
> > (note < > braces instead of " " )
if you specify the file name
this way
> > AmiBroker will look for
> > the file in "standard include
path" that is definable using new
prefs setting in
> > Tools->Preferences->AFL
> > It makes much shorter to write
includes and you can move
include folder now
> > without changing all AFL codes using
#includes.
> >
> > For example if you have set
standard include path
to "C:\AFL\MyIncludes" and
> > write in your formula:
> >
> > #include <common.afl>
> >
> > AmiBroker will look for
C:\AFL\MyIncludes\common.afl file
> >
> > Also now #include reports file(s)
not found in regular error
message box.
> >
> >
> > f.. IIf/Min/Max are now overloaded
functions (have two variants
each)
> > IIF( Condition_ARRAY, True_Array,
False_Array ) (old one)
> > IIF( BoolValue, TrueValue,
FalseValue )
> >
> > Min( array1, array2 ) (old one)
> > Min( number1, number2 )
> >
> > Max( array1, array2 ) (old one)
> > Max( number1, number2 )
> >
> > The second one is choosen when all
arguments are numbers and it
is much much
> > faster and returns number so
LastValue() call is not neccessary
anymore.
> >
> > Example:
> >
> > // much faster and does not
require LastValue()
> > period = IIF( name() == "MSFT", 5,
10 );
> > result = Min( 7, 3 );
> > // (result is still a number not
array as in previous versions)
> >
> >
> > g.. added 'endless loop detection
threshold' setting to
Preferences "AFL" tab.
> > Recommended value 100000 or higher.
> >
> > h.. fixed parameter counting in
CallFunction plugin callback in
case of
> > overloaded functions
> > i.. fixed problem with premature
freeing of arrays passed in
default parameters
> > fields (causing for example problem
with color exploration
output - introduced in
> > 4.32)
> >
> > CHANGES FOR VERSION 4.34.2 (as
compared to 4.34.0)
> >
> > a.. improved crash recovery dialog
to include AFL engine state
information and
> > (in some cases) the source line of
the formula that causes an
exception
> > b.. added ability to catch all
exceptions in indicators and
commentaries
> > (switchabel via
Tools->Preferences->AFL, "catch system
exceptions...", ON by
> > default) - allows you to continue to
work even in case of serious
problem
> > c.. loop break by Shift+BREAK is
now more sensitive
> > d.. now you can control how often
Shift+BREAK key is checked
during formula
> > execution (Tools->Preferences->AFL,
"check SHIFT+Break every"
(1..100, default =
> > 50) (note that specifying low values
may degrade performance
slightly)
> > e.. tweaked AFL memory allocator
hash tables to get more speed
for large looping
> > formulas
> > f.. although I never reproduced
this problem I made some
changes so 'TAB' key
> > should not wipe the contents of AFL
editor anymore
> > CHANGES FOR VERSION 4.34.0 (as
compared to 4.33.0)
> >
> > a.. user-definable functions and
procedures with parameters and
local variables
> >
> > b.. 'A' is NO LONGER predefined
symbol. I decided to remove it
because people
> > tend to use A as user-variable
forgetting the fact that it was
build-in array
> > holding typical price (H+L+C)/3. Use
'Avg' instead.
> >
> > c.. indicator list column width
increased in Indicator Builder
> > d.. DayOfYear - returns the
calendar day number counting from
beginning of the
> > year January 1st is 1. Maximum
number returned is 366
> > CHANGES FOR VERSION 4.33.0 (as
compared to 4.32.2)
> >
> > a.. Database purify tool
implemented (available via Tools-
>Database Purify)
> > allows to detect missing/extra
quotes, possible splits, invalid
OHLC
> > relationship
> >
> > Apply to/range settings similar to
AA window. You can also
right click over
> > result list to add symbols to watch
list and copy the list to the
clipboard (and
> > paste it later to any other program
for futher use)
> >
> >
> > b.. further improvements to AFL
garbage collector, now looping
regardless of
> > loop count requires the same amount
of memory as just single pass
of the code (no
> > growing allocated memory during
loops).
> > This enormously lowered memory
consumption for some formulas
and increased the
> > speed of some loops 3..4 times.
> >
> >
> > c.. added variable period support
to the following functions:
> > LinRegSlope,
> > LinearReg,
> > LinRegIntercept,
> > StdErr,
> > TSF
> > Sample code:
> >
> > Plot( Close, "Test", colorBlack );
> >
> > range = 15 * MA( ATR( 15 ), 50 ) /
ATR( 15 );
> >
> > //Plot( range, "range", colorBlue,
styleOwnScale );
> > Plot( LinearReg( Close, range ),
"Test", colorRed );
> >
> > d.. fixed sometimes incorrect
output of variable-period version
of LLV/HHV
> >
> > e.. fixed crash occuring when bad
arguments were passed to the
function (bug
> > introduced in 4.32.x).
> >
> > CHANGES FOR VERSION 4.32.2 (as
compared to 4.32.1)
> >
> > a.. second bug in experimental
garbage collector fixed.
> > CHANGES FOR VERSION 4.32.1 (as
compared to 4.32.0)
> >
> > a.. garbage collector was
releasing memory too soon in some
cases, now fixed.
> > CHANGES FOR VERSION 4.32.0 (as
compared to 4.31.1)
> >
> > a.. added type check in IF/ELSE
statements
> > b.. added type check in array
element assignment
> > c.. error messages now numbered
and display changed slightly
> > d.. you can break running loop by
pressing Shift+BREAK (Pause)
key combination
> > e.. calling COM objects works
again (was broken in 4.31.x)
> > f.. changed slightly the way TAB
works in editor, if TAB is
pressed any
> > selection is deselected to avoid
accidential deletion of text
> > g.. experimental: added 'agressive
garbage collector' that
extremely decreases
> > the amount
> > of memory required to run AFL
formula by releasing the memory
> > used for temporary variables as
soon as possible (previously
> > temporary memory was released at
the end of formula execution).
> > A side-effect of new garbage
collector is some speed up in
formula execution.
> > h.. new tab in preferences for AFL
engine settings
> > i.. experimental feature, NOT for
beginners, may be
removed/modified in future
> > releases:
> > new _TRACE( "string" ) AFL
function added
> > that allows to write debug
messages from AFL code to system
debug viewer.
> > (it calls internally
OutputDebugString Win API function).
> > To view debug messages you have to
run DebugView freeware
program
> > from http://www.sysinternals.com/
> > CHANGES FOR VERSION 4.31.1 (as
compared to 4.31.0)
> >
> > a.. fixed bug introduced in 4.31.0
causing no text output in
> > commentary/interpretation
> > CHANGES FOR VERSION 4.31.0 (as
compared to 4.30.0)
> >
> > a.. Workspace window uses "icon
font" set in the Windows
settings instead of
> > hard coded Tahoma 8
> > b.. for better readability and
ClearType(tm) compatibility on
WinXP, all dialog
> > windows use now 'MS Shell Dlg' face
name that maps to standard MS
Sans Serif on
> > Win 9x/Me/NT and Tahoma on Win 2K
and XP.
> > c.. rewritten AFL parser, now
formula is parsed and coverted to
syntax tree and
> > then interpreted. This would allow
further improvements including
compilation.
> > This allowed also to add
loops/if-else statements.
> > d.. implemented IF/ELSE statement,
WHILE and FOR loops:
> > The same basic 'for' loop in AFL
is 2..3 times faster than in
JScript
> > Syntax follows C++/JScript style:
> > while( conditional_expression )
statement;
> >
> > for( initializer_part;
conditional_expression; iterator_part )
statement;
> >
> > if( conditional_expression )
statement;
> >
> > if( conditional_expression )
> > statement;
> > else
> > statement;
> >
> > e.. implemented compound
statements: these are blocks of
statements enclosed
> > in opening and closing curly brace
> >
> > {
> > statement1;
> > statement2;
> > ...
> > statementN;
> > }
> >
> > compound statement can appear
anywhere when simple statement
can.
> >
> > For example:
> >
> > i = 10;
> > while( i < 20 )
> > {
> > Plot( MA( Close, i ), "MA" +
WriteVal( i, 0 ), colorBlack + i );
> > i = i + 1;
> > }
> >
> > f.. implemented C-style postfix
and prefix increment/decrement
operators
> >
> > i = 10;
> > WriteIf( i++ );
> > WriteIf( ++i );
> > WriteIf( i );
> >
> > g.. implemented array element
access (subscript) operator []:
> >
> > WriteVal( Close[ 0 ] ); // prints
the first bar of close array
> >
> > /* a sample low-level
implementation of exponential moving
average in AFL */
> >
> > myema[ 0 ] = Close[ 0 ];
> >
> > for( i = 1; i < BarCount; i++ )
> > {
> > myema[ i ] = 0.1 * Close[ i ] +
0.9 * myema[ i - 1 ];
> > }
> >
> >
> >
> > h.. added built-in constant
'BarCount' that returns number of
bars available in
> > arrays (the number of elements of
array)
> > When QuickAFL is turned on it may
be less than true number of
bars because
> > QuickAFL feature attempts to use
only visible bars (and few
before). You can
> > control how many bars the formula
requires using SetBarsRequired
() function
> >
> > i.. implemented infinite-loop
protection. Nice if you forgot to
increment
> > counter variable in 'for' loop :-)
> >
> > j.. tab key now works without need
to press ALT/CTRL in AFL
editors
> >
> > k.. added C-like synonyms for
logical ADD/OR/NOT: &&, ||, !
> >
> >
> > /* a sample low-level
implementation of Profit-target stop in
AFL: */
> >
> > Buy = Cross( MACD(), Signal() );
> >
> > priceatbuy=0;
> >
> > for( i = 0; i < BarCount; i++ )
> > {
> > if( priceatbuy == 0 &&
Buy[ i ] )
> > priceatbuy = BuyPrice[ i ];
> >
> > if( priceatbuy > 0 &&
SellPrice[ i ] > 1.1 * priceatbuy )
> > {
> > Sell[ i ] = 1;
> > SellPrice[ i ] = 1.1 *
priceatbuy;
> > priceatbuy = 0;
> > }
> > else
> > Sell[ i ] = 0;
> > }
> >
> > /* sample EMA rainbow */
> >
> > Plot( Close, "Price", colorBlack,
styleCandle );
> > for( Range = 15; Range < 100;
Range++ )
> > Plot( EMA( Close, Range ),
"MA"+WriteVal(Range,0), colorRose
+ Range % 8,
> > styleNoLabel );
> >
> >
> > HOW TO REPORT BUGS
> >
> > If you experience any problem with
this beta version please send
detailed
> > description of the problem
(especially the steps needed to
reproduce it) to
> > bugs@xxxx
> >
>
>
> __________________________________
> Do you Yahoo!?
> The New Yahoo! Search - Faster.
Easier. Bingo.
> http://search.yahoo.com
------------------------ Yahoo! Groups
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/m
essages/)
----------------------------------------
----
Check group FAQ at:
http://groups.yahoo.com/group/amibroker/
files/groupfaq.html
Your use of Yahoo! Groups is subject to
http://docs.yahoo.com/info/terms/
------------------------ Yahoo! Groups Sponsor ---------------------~-->
Get A Free Psychic Reading!
Your Online Answer To Life's Important Questions.
http://us.click.yahoo.com/aM1XQD/od7FAA/uetFAA/GHeqlB/TM
---------------------------------------------------------------------~->
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
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
|