[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [amibroker] Re: Image Copy Problem even when copied to Word.



PureBytes Links

Trading Reference Links










There are a number of screen capture programs, I use Snagit
but there is also MWSnap, XNview and Irfanview that I am aware of. I save the
charts as GIF files which are fairly small files compared to other formats and
rarely need zipping to make smaller.

 



<font size=3 color=teal
face="Times New Roman">Cheers,
Graham

<font size=2
color="#339966" face="Times New Roman"><font
color="#339966">http://groups.msn.com/ASXShareTrading

<font size=2
color="#339966" face="Times New Roman"><font
color="#339966">http://groups.msn.com/FMSAustralia



<span
>-----Original Message-----
From: mrdavis9
[mailto:mrdavis9@xxxxxxxxxx] 
Sent: Friday, 23 May 2003 7:58 AM
To: amibroker@xxxxxxxxxxxxxxx
Cc: jeff davis
Subject: Re: [amibroker] Re: Image
Copy Problem even when copied to Word.

<font size=2
face="Times New Roman"> 



<span
>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





<font size=2
face="Times New Roman"> 





<font size=2
face="Times New Roman"> 





<font size=2
face="Times New Roman"> 





<font size=2
face="Times New Roman"> 







<span
>----- Original Message ----- 





<font
size=2 face=Arial>From: <a
href="" title="salil_gangal@xxxxxxxxx">salil_gangal






<span
>To:<font
face=Arial> <a
href="" title="amibroker@xxxxxxxxxxxxxxx">amibroker@xxxxxxxxxxxxxxx






<span
>Sent:<font
face=Arial> Thursday, May 22, 2003 11:00 AM





<span
>Subject:<font
face=Arial> [amibroker] Re: Image Copy Problem
even when copied to Word.





<font size=2
face="Times New Roman"> 



<font size=2
face="Courier New">Friends,<font
face="Courier New">

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@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: 
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 <font
face="Courier New">
> > 
> > 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.
> http://search.yahoo.com



Send BUG REPORTS to bugs@xxxxxxxxxxxxx<font
face="Courier New">
Send 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.




<font size=2
face="Times New Roman">



Send
BUG REPORTS to bugs@xxxxxxxxxxxxx<span
>
Send 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.