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

Re: [amibroker] AmiBroker 4.40.1 BETA released



PureBytes Links

Trading Reference Links




Dale,
 
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 Janeczkoamibroker.com
<BLOCKQUOTE 
>
  ----- Original Message ----- 
  <DIV 
  >From: 
  dingo 
  To: <A title=amibroker@xxxxxxxxxxxxxxx 
  href="">amibroker@xxxxxxxxxxxxxxx 
  Sent: Monday, July 07, 2003 7:47 PM
  Subject: RE: [amibroker] AmiBroker 4.40.1 
  BETA released
  
  <FONT face=Arial color=#0000ff 
  size=2>TJ:
  <FONT face=Arial color=#0000ff 
  size=2> 
  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?
  <FONT face=Arial color=#0000ff 
  size=2> 
  <FONT face=Arial color=#0000ff 
  size=2>d
  
    
    <FONT 
    face=Tahoma size=2>-----Original Message-----From: Tomasz 
    Janeczko [mailto:amibroker@xxxxxx] Sent: Monday, July 07, 2003 
    1:07 PMTo: <A 
    href="">amibroker@xxxxxxxxxxxxxxxSubject: 
    [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:
    <FONT 
    size=2>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: <A 
    href=""><FONT 
    size=2>http://www.amibroker.com/login.html
     
    
    List of changes in this beta (read change 
    log in the "read me" below for the details)
    
      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
      
      
      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"
      
      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) );
      
      fixed 'X' close button in Param window.
      
      Parameters window now shows parameter list in alphabetical 
order
      
      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)
      
      added new setting to Tools->Preferences : Charting "draw vertical 
      line between months"
    Best regards,Tomasz 
    Janeczkoamibroker.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 variablefunction 
    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 usereturn 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: 
    
      The statement body is executed.
      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. <FONT 
    size=2>
    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: 
    
      The expression is evaluated.
      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: 
    
      The init-expression, is evaluated. This specifies the 
      initialization for the loop. There is no restriction on the type of 
      init-expression.
      The cond-expression,  is evaluated. This expression must 
      have arithmetic type. It is evaluated before each iteration. Three results 
      are possible: 
      
        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.
        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 average
    
    if, 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 1if ( 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 <FONT 
    face="Courier New">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 2if ( 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 3if ( 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)
    
    
      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
      
      
      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"
      
      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) );
      
      fixed 'X' close button in Param window.
      
      Parameters window now shows parameter list in alphabetical 
order
      
      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)
      
      added new setting to Tools->Preferences : Charting "draw vertical 
      line between months"
    CHANGES FOR VERSION 
    4.40.0 (as compared to 4.39.0)
    
      fixed crash when global or local keyword was used elsewhere than on 
      top of the function definition 
      fixed crash that occurred when interpretation code part required more 
      bars than indicator code part 
      fixed handling of 1st hour after midnight in Metastock plugin / 
      intraday data 
      fixed problem with calling the same user-defined function multiple 
      times in single simple arithmetic expression. 
      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. 
      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) 
      logarithmic scaling improved, Y-scale shifting and zooming in log 
      scale works better too. 
      fixed date column formatting when SetOption("nodefaultcolumns", flag) 
      is switched off and back on 
      Param()s in Indicator Builder are set back to defaults only when 
      formula is edited, setting grid line/scalling options do not reset params. 

      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 bar3. display start 
      time of interval bar, 4. display end time of interval barThese 
      settings are available in Tools->Preferences->IntradayFixed also 
      problems with alignment occurred in some cases in previous versions. 
    
    CHANGES FOR VERSION 
    4.39.0 (as compared to 4.38.0)
    
      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. 
      colorAqua now has correct value of 36
      when Printing charts (or using Print Preview ) in Real Time mode, 
      auto-refresh is temporarily disabled to avoid problems with 
      printing
      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
      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
      new feature "Wait for Backfill" in Auto-Analysis window. Causes 
      scans/explorations/backteststo wait for the plugin to finish data 
      backfill.The setting applies to real-time plugins only, and only to 
      those that supportthis feature. 
      three new versions of plugins that support 'wait for backfill' feature 
      are included in the beta archive:eSignal plugin 1.5.0myTrack 
      plugin 1.5.3IQFeed plugin 1.3.1'Wait for backfill' feature is 
      not supported by QT plugin, and it won't be supported 
      becauseQuoteTracker has no interface to allow forcing backfills from 
      3rd party applications.
      other minor fixes
    CHANGES FOR VERSION 
    4.38.0 (as compared to 4.37.0)
    
    
    
    
      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.
      added export chart image to PNG (portable network graphics) 
      fileEdit->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 
      )
      added 'send chart by e-mail' feature Edit->Image->Send by 
      emailandFile->Send chart via e-mail 
      fixed positioning of arrows in image copies 
      (Edit->Image->Copy)
      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)
      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 wrongif( Null ) _TRACE("WRONG");else 
      _TRACE("CORRECT");Now Null in if, while, for is treated as 
      False. 
      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 zerosmyarray[ 5 ] = 6; // write value to 5th 
      element of the arraynow you can write 
      simply:myarray = 3; // initialize, at this moment myarray is 
      just a numbermyarray[ 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)
    
      printing improved, now all open indicator panes are printed and 
      resolution is increased 
      Edit->Copy As Image and Edit->Copy As Metafile now generate an 
      image consisting of all indicator panes (not just one) 
      fixed problem with non-resetting sort arrows in AA window 
      fixed sometimes occuring crash Signal() function 
      increased size of error message text buffer to prevent overflow when 
      reporting syntax errors in formulas having long unwrapped lines. 
      grid lines are drawn with fine dots instead of small dashes (screen 
      output only) 
      new AFL functions:GetCategorySymbols( category, index ) - 
      retrieves comma-separated list of symbols belonging to given 
      categorysupported categories:categoryMarket categoryGroup 
      categorySector categoryIndustry categoryWatchlistcategoryFavorite 
      categoryIndex index = (market/group/industry/sector/watchlist 
      number)0..255 for categoryMarket, categoryGroup, 
      categoryIndustry0..63 for categorySector, categoryWatchlistignored 
      for categoryFavorite, categoryIndexStrExtract( 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 
      MSFTStrExtract( "MSFT,AAPL,AMD,INTC", 200 ) will return empty 
      string ""+ other minor fixesExample 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)
    
    
      
      
      
      fixed problem with affecting 2 or more identifiers referencing the 
      same array when using l-value subscript operator []. Thanks Herman for 
      pointing this out
      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 variablefunction 
      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 )";
      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
      #pragma nocache pre-processor command added to switch off #include 
      file caching mechanism.Note: between '#pragma' and 'nocache' there 
      must be exactly SINGLE spaceNote 2: disabling caching may slow down 
      execution of the formula (especiallyin indicators)Note 3: #pragma 
      nocache must be placed before #includesExample: 
    
      #pragma nocache#include 
    <myfile.afl>
    
      single line comments now work with #includes (and #pragma too) so you 
      can comment out include in regular way://#include <something> - 
      will not include
      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
    
      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)
    
      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 );
      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"
      additional tweaks in AFL engine & garbage collection, futher speed 
      up of execution of very long loops 
      more error checking in AFL engine - will report using uninitialized 
      variables that were accepted silently in 4.31.x - 4.34.x 
      #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 forthe file in "standard include path" that is 
      definable using new prefs setting in Tools->Preferences->AFLIt 
      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 fileAlso 
      now #include reports file(s) not found in regular error message 
      box.
      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)
      added 'endless loop detection threshold' setting to Preferences "AFL" 
      tab. Recommended value 100000 or higher.
      fixed parameter counting in CallFunction plugin callback in case of 
      overloaded functions 
      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)
    
      improved crash recovery dialog to include AFL engine state information 
      and (in some cases) the source line of the formula that causes an 
      exception 
      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 
      loop break by Shift+BREAK is now more sensitive 
      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) 
      tweaked AFL memory allocator hash tables to get more speed for large 
      looping formulas 
      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)
    
      user-definable 
      functions and procedures with parameters and local variables 
      '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.
      indicator list column width increased in Indicator Builder 
      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)
    
      Database purify tool implemented (available via Tools->Database 
      Purify)allows to detect missing/extra quotes, possible splits, invalid 
      OHLC relationshipApply 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)
      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.
      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 );
      
      fixed sometimes incorrect output of variable-period version of 
      LLV/HHV
      
      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)
    
      second bug in experimental garbage collector fixed. 
    CHANGES FOR VERSION 
    4.32.1 (as compared to 4.32.0)
    
      garbage collector was releasing memory too soon in some cases, now 
      fixed. 
    CHANGES FOR VERSION 
    4.32.0 (as compared to 4.31.1)
    
      added type check in IF/ELSE statements 
      added type check in array element assignment 
      error messages now numbered and display changed slightly 
      you can break running loop by pressing Shift+BREAK (Pause) key 
      combination 
      calling COM objects works again (was broken in 4.31.x) 
      changed slightly the way TAB works in editor, if TAB is pressed any 
      selection is deselected to avoid accidential deletion of text 
      experimental: added 'agressive garbage collector' that 
      extremely decreases the amountof memory required to run AFL formula by 
      releasing the memoryused for temporary variables as soon as possible 
      (previouslytemporary memory was released at the end of formula 
      execution).A side-effect of new garbage collector is some speed up in 
      formula execution. 
      new tab in preferences for AFL engine settings 
      experimental feature, NOT for beginners, may be removed/modified in 
      future releases: new _TRACE( "string" ) AFL function addedthat 
      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)
    
      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)
    
      Workspace window uses "icon font" set in the Windows settings instead 
      of hard coded Tahoma 8 
      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. 
      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. 
      implemented IF/ELSE statement, WHILE and FOR loops:The same basic 
      'for' loop in AFL is 2..3 times faster than in JScriptSyntax follows 
      C++/JScript style: 
      while( conditional_expression ) statement;
      for( initializer_part; conditional_expression; iterator_part ) 
      statement;
      if( conditional_expression ) statement;
      if( conditional_expression ) 
      statement;elsestatement;
      
      implemented compound statements: these are blocks of statements 
      enclosedin 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;}
      
      implemented C-style postfix and prefix increment/decrement 
operators
      i = 10;WriteIf( i++ );WriteIf( ++i );WriteIf( i 
      );
      
      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 ];}
      
      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
      
      implemented infinite-loop protection. Nice if you forgot to increment 
      counter variable in 'for' loop :-)
      
      tab key now works without need to press ALT/CTRL in AFL editors
      
      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@xxxxxxxxxxxxx 
    Send BUG REPORTS to bugs@xxxxxxxxxxxxxSend 
    SUGGESTIONS to 
    suggest@xxxxxxxxxxxxx-----------------------------------------Post 
    AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: 
    <A 
    href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
    group FAQ at: <A 
    href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
    Your use of Yahoo! Groups is subject to the <A 
    href="">Yahoo! Terms of Service. 
    Send 
  BUG REPORTS to bugs@xxxxxxxxxxxxxSend SUGGESTIONS to 
  suggest@xxxxxxxxxxxxx-----------------------------------------Post 
  AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A 
  href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
  group FAQ at: <A 
  href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
  Your use of Yahoo! Groups is subject to the <A 
  href="">Yahoo! Terms of Service. 







Yahoo! Groups Sponsor


  ADVERTISEMENT 









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



Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.