AmiBroker 6.40.4  Read Me
 
  February 2, 2022  13:17
Backup your data files and entire AmiBroker folder
first! 
INSTALLATION INSTRUCTIONS
 Run the installer and follow the instructions. 
Then run AmiBroker. You should see "AmiBroker 6.40.4" written
   in the About box.
See CHANGE LOG below for detailed list of changes. Note that only changes
    that affect end-user directly are listed here. Internal code changes/refactoring
is usually not mentioned.
UPGRADE POLICY: This version is a free upgrade for users
  who purchased AmiBroker license after December 30, 2019.
WHAT'S NEW IN 6.40:
  - 
QuickGFX - brand new chart rendering engine
    
  delivering
    upto 100x performance boost in chart rendering time as compared to GDI.
  GDI rendering speed also improved upto 2x.
    
    In-house developed QuickGFX direct rendering technology completely bypasses
    Windows GDI and offers amazing 10x-100x performance gain as compared to GDI
    rendering
    To enable QuickGFX experimental tech go to Tools->Preferences, "Miscellaneous" tab,
      click "Experimental: Use QuickGFX render" and press "Apply" or "OK"
      You can see when it is enabled, chart timing footnote (when enabled) will
      say "QuickGFX render ...ms" instead of "GDI render ...ms"
    This is PROFESSIONAL edition feature only. Users of Standard version would
      need to purchase upgrade in order to use this feature.
   
  - 
Automatic Analysis improvements
      
        - 
 Easy Sequencing of multiple Analysis actions via
        #pragma sequence(scan,exploration) and new "Run Sequence" button
          without need to write batches. Allows for example single click two-step
          analysis runs creating composites or static variables in first step
          and using them in second step 
        - Backtester - added "Max. position value" option in the
          settings allowing to specify maximum dollar value of position. Zero
          (0) means no maximum. Positions larger will be shinked (if shrinking
          is enabled) or won't be entered at all (if shrinking is disabled)
 
        - huge speedups in running large explorations, dark theme and 5x speed
          up for rendering huge list views like (as compared to 6.31)
         
      
   
  - 
 AmiBroker Formula Language new functions / features
      
        - FindIndex( array, value, start_from
          = 0, dir = 1 ) - find index of array item matching specified value 
 
        - BarsSinceCompare( past, comparison,
          current ) - for every bar, compare past array values with current bar
          value and return the number of bars since last time comparision was
          true
 
        - InternetSetHeaders( "headers" )
          - set custom HTTP headers for subsequent web requests
 
        - InternetSetOption( option,
          value ) - set HTTP option for internet session
 
        - MxCopy() - in-place copy of rectangular
          blocks from one matrix to the other (copy portions of one matrix to
          the other matrix)
 
        - _exit() - gracefully ends AFL execution
          at the point of the call
 
        -  InternetGetStatusCode()
          - returns HTTP status code of last InternetOpenURL or InternetPostRequest
          call
 
        - Chr( code ) returns string representing
          single character of given ascii code
 
        - GetObject( path, class ) providing
          functionality equivalent to JScript GetObject and VBScript GetObject
 
        - GuiSendKeyEvents("ED")
          - register given characters to be sent as Gui event when keyboard key
          is pressed. GuiGetEvent will return code == notifyKeyDown and id of
          given character, for example id == 'D' for D letter
 
        -  inverf(x) - inverse of erf function 
 
        -  erf(x) - computes Error function https://en.wikipedia.org/wiki/Error_function
 
        - SafeDivide( x, y, valueifzerodiv
          )- safe division that handles division by zero using special handling
          (replace result with user-defined value)
 
        - new Javascript engine (Chakra) featuring native JSON support (EnableScript("chakra"))
         
      
   
  - 
AmiBroker Formula Language improvements, enhancements and fixes 
      
        - exponentation operator is made 50-100x faster in cases of small integer
          exponents of 2, 3, 4 and 5
 
        - GuiSetText() function avoids sending change notifications to prevent
          update loops
 
        - ADX function vectorized (2x faster than before)
 
        - added extra parameter for Error() function to stop execution
 
        - internal function signatures changed to allow flexible ordering of
          arguments regardless of their type and varargs with
          less overhead
 
        - GfxDrawImage with PNG images exclusive file lock removed
 
        - parser warns if empty body is used in 'for' or 'while' statements
 
        - support for gzip and deflate compression in Internet functions
 
        - plugin interface backward compatibility with changing function signatures
 
        - more runtime checks to prevent user errors and other fixes
                 
 
      
   
  - 
Batch window new features / improvements
      
        - Clipboard Cut/Copy/Paste implemented in batch editor
 
        - Edit->Delete (from main menu) and Edit-Delete All implemented
          for completeness
 
        - list view uses virtual mode now (owner data)
 
        - added "add results to watchlist" action / WatchlistAddResults
 
        - added "clear watchlist" action / WatchlistClear
 
        - added "comment" action
 
        - added optional parameter to Data Import ASCII command to allow specify
          format definition file
 
        - added optional parameter to Execute and Wait command to specify current
          working directory for command
 
        - added optional parameter to Export to File / Export walk-forward
          to file to specify column separator in CSV files
        -optional parameter defines the column SEPARATOR used for export. Only
        single character is used. When it is not supplied, comma is used.
         
      
   
  - 
AFL editor enhancements
      
        - call tips (parameter information tooltips) now provide extra description
          about the function and its parameters (as of v6.39 only 20 functions
          have this extra info)
 
        -  debugging session is automatically terminated with appropriate notice
          when user attempts to edit the code during debugging (this saves mouse
          clicks that were needed to stop debug session in order to edit)
 
        - previously when no text was selected and Prettify Code was choosen,
          the message box caused main frame to get focus instead of focus staying
          in AFL frame. Fixed
 
        - when an runtime error is detected debugging session the message bar
          shows now number of detected errors (as it did previously during normal "verify"
 
        -  when dark mode list views are used watch window default text color
          was black making it hardly visible, changed to white
 
      
      
   
  - 
User Interface new features and improvements:
      
        - Dark theme for all owner-draw list views (NOT in dialogs) now feature
          customizable theme (currently available "system (light) theme" and "black
          theme") - go to Tools->Customize, "Appearance" tab, "Dark
          mode for listviews" checkbox
 
        - 5x speed up for rendering huge list views (bypassing Windows rendering) 
 
        - Preferences: added Text Tool font setting independent from Axis font
          (Preferences->Miscellaneous page)
 
        - Charts: improved text tool with per-study selectable font size
 
        - Parameter names are not truncated in HighDPI screens
         
      
   
  - 
Database improvements
      
        -  new 8-digit ICB structure implemented: https://www.ftserussell.com/data/industry-classification-benchmark-icb
 
        -  Database Purify is 10x faster
 
        - OLE: added Stock.Quotations.Adjust function to perform adjustments
          programmatically OLE: added Stock.Quotations.Adjust() function. long
          Adjust(BSTR pszFieldList, float fMultiplier, float fOffset, DATE dDateTime,
          boolean bBefore)
 
      
   
CHANGE LOG
CHANGES FOR VERSION 6.40.4 (as compared to 6.40.3)
  - Charts: on specifically prepared formulas producing sparse array a moire
  effect with histogram chart can be seen under rare circumstances. Fixed.
 
  - UI:
    when Tickerbar was customized in previous versions it could come up as
  empty in 6.40.2 until it is RESET via customize dialog. Fixed.
 
  - QuickGFX, simple
    bar chart, width > 2, end caps are drawn to ensure that
    open/close ticks are visible in high zoom out levels
 
  - Toolbar Zoom in/out auto-repeat
      period decreased to 100ms (from 150ms)
 
  - QuickGFX:
      styleGradient wasn't supported in 6.40.2-6.40.3. Now it works again (fallback
    to GDI)
 
  - Docs: added GuiSetColors to help file
 
  - Charts: 3-color gradient charts could
      be drawn incorrectly if user-defined base line level was outside chart
    Y axis range. Fixed
 
CHANGES FOR VERSION 6.40.3 (as compared to 6.40.2)
  - OLE: new Quotations.Adjust could enter infinite loop. Fixed
 
  - QuickGFX: fixed
  division by zero on gradient fill when top == bottom
 
  - QuickGFX: styleDashed
  implemented
 
  - UI: on HiDPI screens Tickerbar dropdown item height was too small
  in 6.40.2. FIxed
 
  - UI: Ticker bar has been reimplemented to allow quick handling
  of millions of symbols (done in 6.40.2 but missing in change log)
 
  - UI: Ticker
    bar search / auto-complete is re-introduced (it was not working in 6.40.2
    because TickerBar no longer uses standard combo box and combo box "built-in" features
    were absent)
 
  - UI: when Tickerbar was customized in previous versions it could
      come up as empty in 6.40.2 until it is RESET via customize dialog. Fixed.
 
CHANGES FOR VERSION 6.40.2 (as compared to 6.40.0)
  - AFL: regression new Error 72 was incorrectly generated when amount was
    zero but mode was set to Disable (like in Equity.afl file). The combination
    of zero
    amount and disable is of course valid and error is no longer produced in
  such case.
 
  - New Analysis window: #pragma sequence(scan,backtest) - and new "Run
    Sequence" button
    to run same formula with same settings several times in sequence using different
  modes
 
  - Charts: QuickGFX rendering of cloud style charts is now 100x faster
 
  - Charts:
  GDI rendering of cloud style charts is now 2x faster
 
  - 32-bit/Charts: x87 assembly
    code used for faster conversion from float to int. This gives +20% performance
    improvement in both GDI and QuickGFX rendering
  modes
 
  - 64-bit: the size of internal exit signal structure increased to allow
    backtest with more than 1 million symbols (at the cost of increased RAM usage).
    32-bit
  version still uses smaller structure and 1 million symbol limit
 
  - AFL Editor:
    Defunct Print menu option removed from context (right-click) menu. Working
  Print option is available in File->Print menu
 
  - AFL: _SECTION_BEGIN() - section
  name is checked against not allowed control characters
 
  - AFL: array version
  of ColorHSB function is 50% faster now
 
  - AFL: new function BarsSinceCompare(
    past, comparison, current ) - for every bar, compare past array values with
    current bar value and return the number
  of bars since last time comparision was true
 
  - AFL: New warning 511 for incorrect
    usage of IIF function: "Assignment
  within IIF function arguments. Use IIF() return value instead"
 
  - AFL: Param*()
    functions check if user passed non-printable/control characters, that are
  forbidden in parameter names and display appropriate error message
 
  - AFL: Status("baseinterval")
    - new field "baseinterval" returns
  database base time interval setting in seconds
 
  - AFL: Warning 501 (assignment
    within conditional) is silenced if assignment is made to the variable that
    wasn't intitialized before (i.e. it is first
  assignment of given variable ever in code)
 
  - ASCII import: combination of $HYBRID
    1 without "autoadd" mode produces
  an error on non-existing symbols now.
 
  - Charts: 40% speedup in determination
    of auto-scale min/max (signficantly affects chart rendering performance for
  very large number of bars >500K)
 
  - Charts: Bar-to-XPixel coordinate conversions
      speeded up 3x by using assembly in 32-bit and _div64/__emul intrinsics
    in 64-bit versions
 
  - Charts: when QuickGFX was enabled multi-color title text
      was slightly truncated at the color boundaries. Fixed.
 
  - DB: when user renames
      the symbol corresponding Note text file name is renamed accordingly now
 
  - Fixed
      regression introduced in 6.39 when the very last value in MA was non-Null
      even if there was not enough data
 
  - OLE: added Stock.Quotations.Adjust() function.
      long Adjust(BSTR pszFieldList, float fMultiplier, float fOffset, DATE dDateTime,
      boolean bBefore)
 
  - QuickGFX: New lines in Title variables caused double spacing.
      Fixed
 
  - QuickGFX: styleHistogram was invisible for negative values. Fixed
 
  - UI: Param
      window, names of parameters are not tructated on HighDPI screens anymore
 
  - When
      worker thread attempted to read string from resources sometimes resource
      handle was set incorrectly, this caused
                      COleException
                      / unknown error.
                      Fixed by replacing faulty MS CString::LoadString implementation.
 
  - QuickGFX: Line width > 1 implemented
 
  - AFL: ADX/PDI/MDI protected against
      division by zero when data are completely flat (H == L == C for long periods
    of time)
 
  - AFL: Warning 512 added to detect overusage of Foreign/SeForeign
      calls
 
  - Analysis report charts: regression: when QuickGFX was enabled, report charts
  could cause exception. Fixed.
 
CHANGES FOR VERSION 6.40.0 (as compared to 6.39.1)
CHANGES FOR VERSION 6.39.1 (as compared to 6.39.0)
  - 64-bit uses a bit faster float versions powf and modf instead of double
  pow/mod for ^ and % operators (non integers)
 
  - Analysis/Settings: added 3 checks
      and warnings to prevent users from entering
    combination of MinPosValue/MaxPosValue/AllowPosShrinking/RoundLotSize that
    are likely to prevent all trades from being taken at all
 
  - array ^ (exponentation)
      operator made 50-100x faster in special cases of small INTEGER, scalar
    exponents of 2, 3, 4 and 5 by using multiplication
          instead
      of calls to C runtime powf()
 
  - calling GuiSetText from AFL formula caused
      notifyEditChange notification to be sent. If user formula responded to
    notification with another
            GuiSetText this could create loops. Now notifications are silenced
            if changes come
            from
        user code
 
  - When one pane had Gui controls and the other pane on another
      chart sheet was completely blank, then GUI controls from populated tab
              remained displayed
              after
          switching to completely blank sheet. Fixed
 
CHANGES FOR VERSION 6.39.0 (as compared to 6.38.0)
  - 64-bit: AmiBroker, AmiQuote, AFL Code Wizard migrated to newest VC++ 2019
  for even better performance
 
  - AFL Editor: @link commands are executed at mouse
    up (instead of previous mouse down) to prevent unwanted text selection when
  message boxes are dismissed
 
  - AFL Editor: call tips (parameter information tooltips)
    now provide extra description about the function and its parameters (as of
    v6.39 only 20 functions
    have this
  extra info)
 
  - AFL Editor: debugging session is automatically terminated with
    appropriate notice when user attempts to edit the code during debugging (this
    saves mouse
  clicks that were needed to stop debug session in order to edit)
 
  - AFL Editor:
    previously when no text was selected and Prettify Code was choosen, the message
    box caused main frame to get focus instead of focus staying in
  AFL frame. Fixed
 
  - AFL Editor: when an runtime error is detected debugging session
    the message bar shows now number of detected errors (as it did previously
  during normal "verify"
 
  - AFL Editor: when dark mode list views are
    used watch window default text color was black making it hardly visible,
  changed to white
 
  - AFL/CBT: AmiBroker now displays an error when user passes
    incorrect bar number to ProcessTradeSignals() instead of silently skipping
  wrong arguments
 
  - AFL: added protection against assigning wrong types to some
    built-in variables such as *Price arrays. If wrong type is assigned the error
    71 Type mismatch
  in assignment is displayed
 
  - AFL: ADX() function vectorized in 64-bit version
  (2x faster than before)
 
  - AFL: backtester crashed when user incorrectly assigned
  string value to BuyPrice/ShortPrice/CoverPrice arrays. Fixed.
 
  - AFL: Error("text",
    stop=False) function - added extra parameter to stop execution regardless
    of "stop execution at first error" preference
  setting
 
  - AFL: FindIndex( array, value, start_from = 0, dir = 1 ) - find index of
    array item matching specified value
    
Returns:
      NUMBER - the index of matching array item 
      if value is not found in the array, the function returns -1
    Parameters:
      array - input data
      value - what we are looking for
      start - the index to start the search from
      dir - the direction of the search, 1 is up, -1 is down
    
      Notes:
      start can be positive - then it refers to index number counting from the
      beginning of array
      or it can be negative then it refers to index counting from the END of
      the array
    
      // example find all indices when condition
      was true 
       
      condition = Cross( C, MA( C, 20 )
      ); 
      
      // search forwards 
      printf( "Search
      forwards:\n" ); 
      for( index = 0;
      ( index = FindIndex( condition, True, index ) ) != -1;
      index++ ) 
      { 
          
      printf( "condition is
      true at index %g\n", index ); 
      } 
      
      // search backwards 
      printf( "Search
      backwards:\n" ); 
      for( index = -1;
      ( index = FindIndex( condition, True, index, -1 )
      ) != -1; index-- ) 
      { 
          
      printf( "condition is
      true at index %g\n", index ); 
    }    
   
  - AFL: If warning
    level >= 3, InternetOpenURL() function now displays a
    warning 507 if OS generated exception when accessing remote resource, the
    same way
  as InternetPostRequest
 
  - AFL: increased calculated bar requirements for Wilders()
  function for better conformance with QuickAFL
 
  - AFL: Last OS error code is set
    by Internet* functions regardless of warning level so you can always retrieve
  it using GetLastOSError()
 
  - AFL: MA( C, BarCount ), StDev( C, BarCount ) return
  non-Null value
 
  - AFL: new field added to SetOption/GetOpion function calls "MaxPosValue" (per
  backtest setting)
 
  - AFL: new function InternetSetHeaders( "headers" )
  - set custom HTTP headers for subsequent web requests
  For example to enable GZIP compression you need to use:
  INTERNET_OPTION_HTTP_DECODING = 65; 
      InternetSetOption( INTERNET_OPTION_HTTP_DECODING, 1 ); 
      InternetSetHeaders("Accept-Encoding:
    gzip, deflate");
  - note that InternetPostRequest will automatically add "Content-Type:
    application/x-www-form-urlencoded" header unless user specifies their
    own Content-Type in the InternetSetHeaders call
   
  - AFL: new function InternetSetOption(
  option, value ) - set HTTP option for internet session. Internet Options can
  be found here: https://docs.microsoft.com/en-us/windows/win32/WinInet/option-flags
  
  // how to request and handle GZIP compressed HTTP 
   
  INTERNET_OPTION_HTTP_DECODING = 65; 
  InternetSetOption( INTERNET_OPTION_HTTP_DECODING, 1 ); 
  InternetSetHeaders("Accept-Encoding:
  gzip, deflate"); 
  ih = InternetOpenURL("http://www.amibroker.com/news.html" ); 
  if( ih ) 
  { 
     
  while( ( text = InternetReadString(
  ih ) ) != "" ) 
     
  { 
        
  printf( "%s", text
  ); 
     
  } 
     
  InternetClose(ih); 
  } 
  
     
  - AFL: new function MxCopy
    - for copying rectangular blocks from one matrix to the other (copy portions
  of one matrix to the other matrix)
  
  The function works in-place (ie. no allocation occurs - first argument is a
  reference to existing array and that array content would be overwritten)
  MxCopy( & dstmatrix, dst_start_row, dst_endrow, dst_start_col, dst_end_col,
    src_matrix, src_start_row = -1, src_end_row = -1, src_start_col = -1, src_end_col
    = -1 )
  src_start/src_end values equal to -1 mean "same value as corresponding
    dst_start/dst_end value"
  To perform a copy the number of columns multiplied by number of rows in
    source and destination "rectangles" must be the same
    In other words:
    (dst_end_row-dst_start_row+1)*(dst_end_col-dst_start_col+1) == (src_end_row-src_start_row+1)*(src_end_col-src_start_col+1)
  
   
  - AFL: new function: _exit() - that gracefully
  ends AFL execution at the point of the call
 
  - AFL: new function: InternetGetStatusCode
    function - returns HTTP status code of last InternetOpenURL or InternetPostRequest
  call. HTTP status codes are listed here: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
  
  // Example: 
  // NON existing page (should result in status code 404) 
  ih = InternetOpenUrl("http://www.amibroker.com/index3434.html" ); 
  if( ih ) 
  { 
     
  printf("HTTP status code:
  %g", InternetGetStatusCode( ih ) ); 
     
  InternetClose( ih ); 
  } 
  else 
  { 
     
  printf("Internet connection
  can not be open because: %s", GetLastOSError()
  ); 
  } 
  
   
  - Analysis/Backtest: added "Max. position value" option in the
    settings allowing to specify maximum dollar value of position. Zero (0) means
    no maximum.
    Positions larger will be shinked (if shrinking is enabled) or won't be entered
  at all (if shrinking is d
 
  - Charts/Preferences: added Text Tool font setting
  independent from Axis font (Preferences->Miscellaneous page)
 
  - Charts: Text
    Box tool supports user-selectable font size now (selectable in Study Properties
  window)
 
  - Database: new 8-digit ICB structure implemented: https://www.ftserussell.com/data/industry-classification-benchmark-icb
 
  - Got
    rid of obsolete "Request data on save" setting that wasn't
  performing as expected
 
  - Plugin interface: added compatibility layer allowing
      old plugins to safely call functions even when they have modified signature
      (added new default
      parameters). When plugin calls function with less than expected number
    of arguments, missing
    some of defaul
 
  - When variable was passed to user function by reference, ++
      operator inside had no effect on referenced variable (outside of function).
      Fixed.
 
CHANGES FOR VERSION 6.38.0 (as compared to 6.35.1)
  - 64-bit version could produce "Invalid parameter" exception from
    CRT after backtesting when symbols under test had forbidden characters in
  them like "%". Fixed
 
  - 64-bit version: address space layout randomization
    disabled by /DYNAMICBASE:NO linker option to facilite easier crash location
    finding
 
  - AFL: assignment new matrix value to a variable already holding matrix
    value did not immediately free memory (at the time of assignment). This memory
    was only freed at the end of the formula. Now it is freed earlier (at assignment)
    to lower memory usage.
 
  - AFL: GetFnData("lastsplitdate") returns empty
    val instead of zero if last split date is not set
 
  - AFL: GfxDrawImage with PNG
    file could fail if very same file was accessed simultaneously from multiple
    threads due to "no-sharing" mode that
    3rd party XTP lib used. Fixed by using shareDenyWrite
 
  - AFL: new function Chr(
    code ) returns string representing single character of given ascii code
 
  - AFL:
    new function GetObject( path, class ) providing functionality equivalent
    to JScript GetObject and VBScript GetObject
 
  - AFL: new function GuiSendKeyEvents("ED")
    - register given characters to be sent as Gui event when keyboard key is
    pressed. GuiGetEvent will return
    code == notifyKeyDown and id of given character, for example id == 'D' for
    D letter
 
  - AFL: StaticVarAdd when scalar value was added to already existing
    static var array sometimes random value would appear. Fixed. 
 
  - AFL: when file
    creation or modication date was exact midnight fgetstatus() returned datetime
    indicating "eod mark" (date without time), now
    it gives 00:00:00
 
  - Analysis: Maximum number of threads per single Analysis
    window has been increased to 64 (from 32)
 
  - Backtester: generation of Buy&Hold
    stats was not working when "Allow
    position shrinking" was turned OFF by the user and commission > 0.
    Fixed
 
  - Chart: Data window can now display upto 40 values per single chart pane
 
  - Chart:
    Horizontal line snap to open price (keypress O) or close price (keypress
    C) was snapping to H-L instead. Fixed
 
  - Charts: Snap to price - the meaning
    of threshold is changed - instead of % of price it now means % of chart height.
    So 5% will snap within +/-5 of
    chart
    height. This allows it to work universally across different securities (stocks/forex)
    and different zo
 
  - IQFeed: improved IQFeed plugin (better support for long EOD
    histories in mixed mode)
 
  - New Analysis: the name of column "contracts/shares" changes
    each time you change futures mode to prevent confusion among newbies
 
  - Plugins:
      when AFL plugin crashes (throws structured exception) the editor and indicator
      windows will display call stack for easier debugging of 3rd
      party
    plugins
 
  - UI: Dialog boxes are moved back main display screen if multi-monitor
      configuration was changed and multi-monitor setup is not rectangular (for
      example monitors
    of different sizes)
 
  - UI: Listview sorting by (single) date column is now
    10+ times faster
 
  - UI: Listview uses non optimized parsing for str to date
      conversion for date formats that include names of the months instead of
    numbers (avoids
            problems
    with different names of months in different languages)
 
  - UI: Main window
      and AFL Editor frame is moved back to (0,0) if multi-monitor configuration
      was changed and multi-monitor setup is not rectangular
              (for example monitors of different sizes), so saved position falls
              outside currently
              available
              working area 
 
  - UI: MDI Close/Minimize/Restore buttons are now HighDPI
      aware
 
  - UI: MDI Tab client window buttons are now HighDPI aware
 
  - UI: Minimized flicker
      during docking panes resize by disabling Windows copy bits
 
  - UI: Toolbar split-popup
    buttons are now HighDPI aware
 
  - x64 eSignal: reverted to more compatible version
      compiled with VC2005
 
CHANGES FOR VERSION 6.35.1 (as compared to 6.35.0)
  - When .abb file was saved in older version and was missing Param2 then Param
  was incorrectly used as default value. Fixed.
 
  - Changed threshold year for two
    digit year data files to 25 (previously it was 20). So YY is now interpreted
    as 19YY when YY < 25, otherwise it is
  interpreted as 20YY
 
CHANGES FOR VERSION 6.35.0 (as compared to 6.31.0)
  - AFL: new function inverf(x) - inverse of erf function 
 
  - AFL Editor: added function
    navigation combo box in the toolbar - detects user defined functions and
    allows to quicky navigate to function definition
 
  - AFL: GetOption("PadAndAlignToReference")
    allows to query Pad and align setting status (note that this is read-only
    field, so it will
      not work
    with SetOption)
 
  - AFL: new function erf(x) - computes Error function https://en.wikipedia.org/wiki/Error_function
 
  - AFL: parser warns if
    empty body is used in 'for' statement, like this: for( i = 0; i < 10;
    i++) ; // extra semicolon at the end - empty body Warning 510
 
  - AFL: parser
    warns if empty body is used in 'while' statement, like this: while( condition
    ) ; // extra semicolon at the end - empty body Warning 510
 
  - AFL: SafeDivide(
    x, y, valueifzerodiv )- safe division that handles division by zero using
    special handling (replace result with user-defined value)
 
  - Batch: added optional
    parameter to Data Import ASCII command to allow specify format definition
    file
 
  - Batch: added optional parameter to Execute and Wait command to specify
    current working directory for command
 
  - Batch: added optional parameter to Export
    to File / Export walk-forward to file to specify column separator in CSV
    files
    -optional parameter defines the column SEPARATOR used for export. Only single
  character is used. When it is not supplied, comma is used.   
  - Batch: Clipboard Cut/Copy/Paste implemented in batch editor
 
  - Batch: Edit->Delete
    (from main menu) and Edit-Delete All implemented for completeness
 
  - Batch: list
    view uses virtual mode now (owner data)
 
  - UI: All owner-draw list views (NOT
    in dialogs) now feature customizable theme (currently available "system
    (light) theme" and "black theme")
    - go to Tools->Customize, "Appearance" tab, "Dark mode
    for listviews" checkbox
 
  - UI: Analysis and RT quote window use now exactly
    the same RGB values for up/down (green/red) colors for consistency
 
  - UI: Custom
      virtual listview (owner data) supports per-item data now (SetItemData/GetItemData
    work with LVS_OWNERDATA)
 
  - UI: Found workaround to avoid terrible flicker
      and bad rendering of list view controls during fast page up/down and side
      scrolls (even though
          they are double
    buffered by Windows and in theory should be smooth).
 
  - UI: Identified
      even more bottlenecks in Windows OS that caused even owner data and owner
      draw Listview performance to suffer with large
            number
            of columns. OS code circumvented. Listview redraw speeds increased
            more than
            5x compared
            to previous speedy implementation
 
  - UI: Implemented resizing of Listview
              column customization dialog
 
CHANGES FOR VERSION 6.31.0 (as compared to 6.30.0)
  - AFL: Access violation in PercentRank when period is wrong (Null/unitialized).
    Now error 52 is displayed instead.
 
  - AFL: InternetPostRequest now silently (or with warning
    507 under debugger) returns NULL handle instead of error when remote server
    responds with HTTP
  Status 50x
 
  - Analysis: manual column re-sorting could be bit off if scientific
  output format (xxxEyyy) was used with different exponents. Fixed.
 
  - ASCII importer
    now handles LastSplitRatio of X:Y where X and Y are 1...32767 (previously
  only 1..127)
 
  - Batch: add "add results to watchlist" action / WatchlistAddResults
 
  - Batch:
  add "clear watchlist" action / WatchlistClear
 
  - Batch: add "comment" action
 
  - Core/DB: fixed access violation when
  all data were removed while QuickData was turned on
 
  - DebugView: eliminated
  some internal messages from DebugView output (from release version)
 
  - InternetPostRequest
    - even if URL started with https, previous version wanted to connect to port
  80, instead of 443. Fixed.
 
  - UI/Listview: since 6.28 exception could occur if
  single cell text length exceeded 1024 characters. Fixed.
 
  - When database is
    empty, ticker box displays <No symbol> grayed text
  instead of blank or reminiscent of previous database symbol
 
If you experience any problem with this beta version please send detailed
  description  of the problem (especially the steps needed to reproduce it) to
  support at amibroker.com