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

[amibroker] Re: AmiBroker 4.40.1 BETA released



PureBytes Links

Trading Reference Links

Tomasz,

Just curious, was the drawing tool 'speed resistence lines' added to 
version 4.40?  


--- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <amibroker@xxxx> 
wrote:
> MessageDale,
> 
> I have checked it and it works as follows:
> 1. if AA is in normal state scanning and we minimize AB and 
restore AB then AA is restored correctly.
> 2. if AA is hidden (progress window minimized) and we minimize AB 
and restore AB then AA is still hidden but progress window
>  is restored. 
> 
> So this is actualy expected behaviour except the fact than in case 
2) progress bar should remain minimized.
> 
> Best regards,
> Tomasz Janeczko
> amibroker.com
>   ----- Original Message ----- 
>   From: dingo 
>   To: amibroker@xxxxxxxxxxxxxxx 
>   Sent: Monday, July 07, 2003 7:47 PM
>   Subject: RE: [amibroker] AmiBroker 4.40.1 BETA released
> 
> 
>   TJ:
> 
>   If I manually minimize the AB window it minimizes the AA window 
(as expected) but when I restore the AB window it doesn't restore 
the AA window as it used to (I think it did anyway). Is this by 
design?
> 
>   d
>     -----Original Message-----
>     From: Tomasz Janeczko [mailto:amibroker@x...] 
>     Sent: Monday, July 07, 2003 1:07 PM
>     To: amibroker@xxxxxxxxxxxxxxx
>     Subject: [amibroker] AmiBroker 4.40.1 BETA released
> 
> 
>     Hello,
> 
>     A new beta version (4.40.1) of AmiBroker has just been 
released.
> 
>     It is available for registered users only from the members 
area at:
>     http://www.amibroker.com/members/bin/ab4401beta.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
> 
>     List of changes in this beta (read change log in the "read me" 
below for the details)
> 
>       a.. added ability to minimize progress window. If progress 
window is minized then the window 'owning' it is HIDDEN. So for 
example if you minimize AA scan progress window then Automatic 
analysis window will be HIDDEN. To re-show simply maximize progress
> 
>       b.. added Volume-At-Price (VAP) histogram chart overlay to 
price chart added new settings for VAP to Tools->Preferences->Main 
price (to turn it off go to Tools->Preferences : Main chart,
>       and set "Volume At Price overlay" to "None"
> 
>       c.. added new AFL function 
>       PlotVAPOverlay( lines = 300, width = 5, color = colorGreen, 
rightside = False);
>       that plots Volume-At-Price (VAP) overlay chart. 
>       Please note that there must be at least one regular Plot 
function in your formula for this to work, and there can be only one 
PlotVAPOverlay in one indicator
> 
>       Example:
>       Plot( Close, "Price", colorBlack, styleCandle );
>       PlotVAPOverlay( 350, 4, colorYellow, True );
> 
>       Example 2:
>       Plot( Close, "Price", colorBlack, styleCandle );
>       PlotVAPOverlay( Param("lines",300,10,1000,1), Param
("width",10,1,99,1), ParamColor("color", colorYellow), Param
("mode",0,0,1,1) );
> 
>       d.. fixed 'X' close button in Param window.
>       e.. Parameters window now shows parameter list in 
alphabetical order
>       f.. fixed problem with plotting zero values at log scale. 
Note that Log( 0 ) is minus inifinity and it really can not be 
plotted, however many people attempted to plot zero data in log 
scale, so AMiBroker now adjusts zero to 0.0001 when log scale is 
used to allow plotting.
>       Example faulty code that did not work in 4.40, but works now:
>       Plot(IIf(Month() != Ref(Month(),-1),1,0),"", color, 
styleHistogram | styleOwnScale | styleNoLabel)
> 
>       g.. added new setting to Tools->Preferences : Charting "draw 
vertical line between months"
> 
>     Best regards,
>     Tomasz Janeczko
>     amibroker.com
> 
> 
>     AmiBroker 4.40.1 Beta Read Me
>     July 7, 2003 19:00 
> 
>     THIS IS A BETA VERSION OF THE SOFTWARE. EXPECT BUGS !!!
> 
>     AGAIN: THIS IS A 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.40.1 beta" 
written in the About box.
> 
>     See CHANGE LOG below for detailed list of changes.
> 
>     HELP ON NEW FEATURES
>     'WAIT FOR BACKFILL' FEATURE
> 
>     The users of eSignal, myTrack and IQFeed real-time plugins may 
now check "wait for backfill" box in the Automatic analysis window 
and all scans, explorations and backfills will wait for completion 
of backfill process for given symbol. This flag has no effect on 
databases that do not use plugins (external data sources) or use end-
of-day plugins (like FastTrack, QP2, TC2000/TCNet, etc). This flag 
has also no effect when using QT plugin due to the fact that 
QuoteTracker manages backfills by itself and does not provide any 
control of backfill process to 3rd party applications.
> 
> 
>     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.40.1 (as compared to 4.40.0)
> 
>       a.. added ability to minimize progress window. If progress 
window is minized then the window 'owning' it is HIDDEN. So for 
example if you minimize AA scan progress window then Automatic 
analysis window will be HIDDEN. To re-show simply maximize progress
> 
>       b.. added Volume-At-Price (VAP) histogram chart overlay to 
price chart added new settings for VAP to Tools->Preferences->Main 
price (to turn it off go to Tools->Preferences : Main chart,
>       and set "Volume At Price overlay" to "None"
> 
>       c.. added new AFL function 
>       PlotVAPOverlay( lines = 300, width = 5, color = colorGreen, 
rightside = False);
>       that plots Volume-At-Price (VAP) overlay chart. 
>       Please note that there must be at least one regular Plot 
function in your formula for this to work, and there can be only one 
PlotVAPOverlay in one indicator
> 
>       Example:
>       Plot( Close, "Price", colorBlack, styleCandle );
>       PlotVAPOverlay( 350, 4, colorYellow, True );
> 
>       Example 2:
>       Plot( Close, "Price", colorBlack, styleCandle );
>       PlotVAPOverlay( Param("lines",300,10,1000,1), Param
("width",10,1,99,1), ParamColor("color", colorYellow), Param
("mode",0,0,1,1) );
> 
>       d.. fixed 'X' close button in Param window.
>       e.. Parameters window now shows parameter list in 
alphabetical order
>       f.. fixed problem with plotting zero values at log scale. 
Note that Log( 0 ) is minus inifinity and it really can not be 
plotted, however many people attempted to plot zero data in log 
scale, so AMiBroker now adjusts zero to 0.0001 when log scale is 
used to allow plotting.
>       Example faulty code that did not work in 4.40, but works now:
>       Plot(IIf(Month() != Ref(Month(),-1),1,0),"", color, 
styleHistogram | styleOwnScale | styleNoLabel)
> 
>       g.. added new setting to Tools->Preferences : Charting "draw 
vertical line between months"
> 
>     CHANGES FOR VERSION 4.40.0 (as compared to 4.39.0)
> 
>       a.. fixed crash when global or local keyword was used 
elsewhere than on top of the function definition 
>       b.. fixed crash that occurred when interpretation code part 
required more bars than indicator code part 
>       c.. fixed handling of 1st hour after midnight in Metastock 
plugin / intraday data 
>       d.. fixed problem with calling the same user-defined 
function multiple times in single simple arithmetic expression. 
>       e.. memory allocated by Equity(0) was freed at the end of 
the formula execution, now it is freed immediatelly, making possible 
to create large loops with Equity(0) without memory problems. Note 
that Equity(1) and Equity(2) released memory immediatelly already. 
>       f.. when Y-axis grid spacing is lower than or equal to 0.02 
then Y axis is displayed with 4 decimal digits (usefull for 
currencies) 
>       g.. logarithmic scaling improved, Y-scale shifting and 
zooming in log scale works better too. 
>       h.. fixed date column formatting when SetOption
("nodefaultcolumns", flag) is switched off and back on 
>       i.. Param()s in Indicator Builder are set back to defaults 
only when formula is edited, setting grid line/scalling options do 
not reset params. 
>       j.. time compression algorithm modified, now alignment is 
available in two options:
>       1. align to midnight (00:00:00) 2. align to trading hours 
START time 
>       and four time stamp display modes:
>       1. display time of first tick in bar, 2. display time of 
last tick in bar
>       3. display start time of interval bar, 4. display end time 
of interval bar
>       These settings are available in Tools->Preferences->Intraday
>       Fixed also problems with alignment occurred in some cases in 
previous versions. 
>     CHANGES FOR VERSION 4.39.0 (as compared to 4.38.0)
> 
>       a.. added Param dialog to AA window. Note that AA-defined 
parameters are reset back to defaults only when you LOAD the formula 
from the file or when you click on 'Reset' button in Parameter 
dialog. 
> 
>       b.. colorAqua now has correct value of 36
> 
>       c.. when Printing charts (or using Print Preview ) in Real 
Time mode, 
>       auto-refresh is temporarily disabled to avoid problems with 
printing
> 
>       d.. fixed problem with non-updating last bar of trade arrays 
by Equity(1) 
>       applied in exploration when built-in trade delays where 
greater than zero
> 
>       e.. operands of arithmetic expressions are evaluated from 
left to right again (as it was in 4.30) so statements like this 
>       (y = 7)*1000 + y;
>       (note assignment within expression) do not cause error 
messages about uninitialized variable
> 
>       f.. new feature "Wait for Backfill" in Auto-Analysis window. 
Causes scans/explorations/backtests
>       to wait for the plugin to finish data backfill.
>       The setting applies to real-time plugins only, and only to 
those that support
>       this feature. 
> 
>       g.. three new versions of plugins that support 'wait for 
backfill' feature are included in the beta archive:
>       eSignal plugin 1.5.0
>       myTrack plugin 1.5.3
>       IQFeed plugin 1.3.1
> 
>       'Wait for backfill' feature is not supported by QT plugin, 
and it won't be supported because
>       QuoteTracker has no interface to allow forcing backfills 
from 3rd party applications.
> 
>       h.. other minor fixes
> 
>     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 
> 
> 
> 
>     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 
>               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 ---------------------~-->
Buy Coral Calcium for Greater Health - $23.95
http://www.challengerone.com/t/l.asp?cid=2805&lp=calcium2.asp
http://us.click.yahoo.com/MmkSQC/NTVGAA/ySSFAA/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/