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

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



PureBytes Links

Trading Reference Links

Tomasz,

Even before re-installing AmiBroker I was getting similar black-bar 
at the bottom of the image.  See the image ===>

   http://fundvision.com/wwwboard/messages/43686.shtml

It will be helpful if this black-bar is eliminated.

Regards,

- Salil V Gangal


--- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <amibroker@xxxx> 
wrote:
> Salil,
> 
> Thank you for posting the image. Indeed it should look different.
> The bottom bar should be in the background color (in your setup 
grey)
> and show "created with Amibroker.." text.
> Will check this out.
> 
> Best regards,
> Tomasz Janeczko
> amibroker.com
>   ----- Original Message ----- 
>   From: Salil V Gangal 
>   To: amibroker@xxxxxxxxxxxxxxx 
>   Sent: Thursday, May 22, 2003 7:21 PM
>   Subject: 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 Gangal
> 
> 
>   Ken Close <closeks@xxxx> wrote:
>     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 bitmap
>     to show a black border.  My graph background is black and the 
message is
>     in white text along the bottom.
> 
>     Ken
> 
>     -----Original Message-----
>     From: salil_gangal [mailto:salil_gangal@x...] 
>     Sent: Thursday, May 22, 2003 12:01 PM
>     To: amibroker@xxxxxxxxxxxxxxx
>     Subject: [amibroker] Re: Image Copy Problem even when copied to 
Word.
> 
>     Friends,
> 
>     Similar problem comes-up if the copied image is pasted into 
Microsoft 
>     WORD.  So I guess there is a bug in AmiBroker.  Are there any 
others 
>     who have noticed that there is a bar at the bottom of the 
copied 
>     image copied using 'Edit->Image Copy' ?
> 
>     Regards,
> 
>     - Salil V Gangal
> 
> 
>     --- In amibroker@xxxxxxxxxxxxxxx, Salil V Gangal 
<salil_gangal@xxxx> 
>     wrote:
>     > Tomasz,
>     > 
>     > I am copying chart image using 'Edit->Copy As Image'.
>     > 
>     > But I noticed that copied image gets a black-band at the 
bottom.  
>     Have you noticed
>     > anything like this ?  Is this a bug ?  BTW, I import the 
image into 
>     XnView, and I'm
>     > not sure if this is AmiBroker issue or XnView issue.
>     > 
>     > Regards,
>     > 
>     > - Salil V Gangal
>     > 
>     > 
>     > --- Tomasz Janeczko <amibroker@xxxx> wrote:
>     > > Hello,
>     > > 
>     > > A new beta version (4.38.0) of AmiBroker has just been 
released.
>     > > 
>     > > It is available for registered users only from the members 
area 
>     at:
>     > > http://www.amibroker.com/members/bin/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 
>     > > 
>     > > 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 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@xxxx
>     Send SUGGESTIONS to suggest@xxxx
>     -----------------------------------------
>     Post AmiQuote-related messages ONLY to: 
amiquote@xxxxxxxxxxxxxxx 
>     (Web page: http://groups.yahoo.com/group/amiquote/messages/)
>     --------------------------------------------
>     Check group FAQ at:
>     http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
> 
>     Your use of Yahoo! Groups is subject to
>     http://docs.yahoo.com/info/terms/ 
> 
> 
> 
> 
> 
>     Send BUG REPORTS to bugs@xxxx
>     Send SUGGESTIONS to suggest@xxxx
>     -----------------------------------------
>     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. 
> 
> 
> 
> --------------------------------------------------------------------
----------
>   Do you Yahoo!?
>   The New Yahoo! Search - Faster. Easier. Bingo. 
>         Yahoo! Groups Sponsor 
>               ADVERTISEMENT
>              
>        
>        
> 
>   Send BUG REPORTS to bugs@xxxx
>   Send SUGGESTIONS to suggest@xxxx
>   -----------------------------------------
>   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. 
> 
> 
> 
> --------------------------------------------------------------------
----------


------------------------ Yahoo! Groups Sponsor ---------------------~-->
Get A Free Psychic Reading! Your Online Answer To Life's Important Questions.
http://us.click.yahoo.com/Lj3uPC/Me7FAA/uetFAA/GHeqlB/TM
---------------------------------------------------------------------~->

Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/