PureBytes Links
Trading Reference Links
|
I see
a black area if my picture viewer window is sized slightly larger than your
chart, but this is true of all picture files. It is just the viewer's background
color.
Rik RasmussenStock Analyzer mailing list moderator<A
href=""
target=_blank>http://groups.yahoo.com/group/stockanalyzer/
<BLOCKQUOTE
>
<FONT face=Tahoma
size=2>-----Original Message-----From: Salil V Gangal
[mailto:salil_gangal@xxxxxxxxx]Sent: Thursday, May 22, 2003 1:21
PMTo: amibroker@xxxxxxxxxxxxxxxSubject: RE: [amibroker]
Re: Image Copy Problem even when copied to Word.
Ken and Ara,
I re-installed AmiBroker over the existing installation and applied the
latest Beta patch. I'll attach what I get as copied image. Still the
black-bar at the bottom of the image is visible. I used XnView to copy the
image.
Regards,
- Salil V GangalKen Close
<closeks@xxxxxxxx> wrote:
<BLOCKQUOTE
>Salil:
no problems with my setup, copying with both bitmap and metafile.I see
that TJ put in a message along the bottom "Created with Amibroker... "
so perhaps this added text message is somehow causing your bitmapto show
a black border. My graph background is black and the message isin
white text along the bottom.Ken-----Original
Message-----From: salil_gangal [mailto:salil_gangal@xxxxxxxxx] Sent:
Thursday, May 22, 2003 12:01 PMTo: amibroker@xxxxxxxxxxxxxxxSubject:
[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:> > <A
href="">http://www.amibroker.com/members/bin/ab4380beta.exe>
> > >! If you forgot your user name / password to the members
area> & gt; you can use automatic reminder service at: <A
href="">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!&! gt; > > > 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++ )> >
{> >&n! bsp; 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 : " + WriteVal( z );> > >
> > > Example 2: Using local and global keywords to override
default visibility rules:> > > > VariableA = 5; //
implict global variable> > > > function Test()>
> {> > local Variabl! eA; // explicit local
variable with the same identifier as g lobal > > 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 curre! ntly 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 conj! unction with function keyword. So it is advised
to> > us e 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: > > &!
gt; > 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 a! s 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 < 20 ){ 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 n o 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: > > > >
myem! a[ 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 val! ue 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 l eaves 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 ve! ry 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.> >
> > &nbs p; 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 win!
dow > > d.. fixed sometimes occuring crash Signa l()
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 categorySecto! r,
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 > > */> >&n!
bsp; function CreateAverageForWatchList( listnum )> >&
nbsp; {> > // retrive comma-separated list
of symbols in watch list> > list =
GetCategorySymbols( categoryWatchlist, listnum );> > >
> Average = 0; // just in case there are no watch list
members> > > > for( i = 0; ( sym =
StrExtract( 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> >&nbs! p; (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> > & nbsp; 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 <!
BR>evaluates to false> > (0), the other operand is not evalu
ated.> > > > 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 >
> &n! bsp; // 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;> >&nbs! p; do>
> {> > & nbsp;
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&g! t;> >
> > 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.> > > > Examp!
le:> > > > // 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 anym ore > > 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,&! gt;
> 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 memo! ry 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
va! riables as soon as possible (previously> > tempo
rary 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 <A
href="">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> >&nb! sp;
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:> > > >&nb! sp; 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: &&, ||, ! > >
> > > > &! nbsp; /* 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;> > ! }>
> & nbsp; 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.> <A
href="">http://search.yahoo.c!
omSend BUG REPORTS to bugs@xxxxxxxxxxxxxSend
SUGGESTIONS to
suggest@xxxxxxxxxxxxx-----------------------------------------Post
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page:
<A
href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check
group FAQ at:<A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to<A
href="">http://docs.yahoo.com/info/terms/
Send BUG REPORTS to
bugs@xxxxxxxxxxxxxSend SUGGESTIONS to
suggest@xxxxxxxxxxxxx-----------------------------------------Post
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page:
<A
href="">http://groups.yahoo.com/group/amiquote/messages/)-------
-------------------------------------Check group FAQ at: <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to the <A
href="">Yahoo! Terms of Service.
Do you Yahoo!?<A
href="">The New
Yahoo! Search - Faster. Easier. Bingo. Send
BUG REPORTS to bugs@xxxxxxxxxxxxxSend SUGGESTIONS to
suggest@xxxxxxxxxxxxx-----------------------------------------Post
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check
group FAQ at: <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to the <A
href="">Yahoo! Terms of Service.
Yahoo! Groups Sponsor
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 the Yahoo! Terms of Service.
|