PureBytes Links
Trading Reference Links
|
I have a question at the end of this wordy
dialog. In order to capture a chart image, someone taught me to press
Control and then PRINTSCREEN. Then I hit the start button, and click
on RUN, and PAINTBRUSH always shows up as the default choice the OPEN window. I
then click OK. Paintbrush then presents me with a blank page. I then
click EDIT at the top of the blank page of paintbrush, and then click
copy. The chart image then appears in the blank page. I would
like to be able to immediately zip the image before I save it. As it is
now, I click save, and then have to go get the saved folder, and then zip
it. Is it possible to zip it while it is still in paintbrush, just before
I save it? Also, is there an easier way to capture and zip
images? Any thoughts will be appreciated. Ron D
<BLOCKQUOTE
>
----- Original Message -----
<DIV
>From:
<A title=salil_gangal@xxxxxxxxx
href="">salil_gangal
To: <A title=amibroker@xxxxxxxxxxxxxxx
href="">amibroker@xxxxxxxxxxxxxxx
Sent: Thursday, May 22, 2003 11:00
AM
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 <A
href="">amibroker@xxxxxxxxxxxxxxx, Salil V
Gangal <salil_gangal@x...>
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> > 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!> > > > 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 : " +
WriteVal( 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 < 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 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 =
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> >
(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 <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> > 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.> <A
href="">http://search.yahoo.comSend
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
ADVERTISEMENT
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.
|