AmiBroker 6.39.1 RC released

A new release candidate version (6.39.1) of AmiBroker is available now.


32-bit version:
(10 316 744 bytes)

64-bit version:
(10 924 560 bytes)


DevLog announcement: AmiBroker DevLog » AmiBroker 6.39.1 RC released

For the details see ReadMe.html and ReleaseNotes.html inside AmiBroker folder.


This version is a free upgrade only for users who registered AmiBroker after March 5, 2019 . Users who registered earlier, would need to purchase license upgrade. To find out the version you currently have use Account Information page at


6.39 provides 35 new features and enhancements

  • AFL editor enhancements
  • new AFL functions
  • support for gzip and deflate compression in Internet functions
  • in-place matrix copy
  • backtester enhancements
  • improved text tool with per-study selectable font size
  • new 8-digit ICB structure
  • plugin interface backward compatibility with changing function signatures
  • improved performance
  • more runtime checks to prevent user errors and other fixes

CHANGES FOR VERSION 6.39.1 (as compared to 6.39.0)

  1. 64-bit uses a bit faster float versions powf and modf instead of double pow/mod for ^ and % operators (non integers)
  2. 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
  3. 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()
  4. 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
  5. 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)

  1. 64-bit: AmiBroker, AmiQuote, AFL Code Wizard migrated to newest VC++ 2019 for even better performance
  2. AFL Editor: @link commands are executed at mouse up (instead of previous mouse down) to prevent unwanted text selection when message boxes are dismissed
  3. 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)
  4. 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)
  5. 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
  6. 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"
  7. AFL Editor: when dark mode list views are used watch window default text color was black making it hardly visible, changed to white
  8. AFL/CBT: AmiBroker now displays an error when user passes incorrect bar number to ProcessTradeSignals() instead of silently skipping wrong arguments
  9. 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
  10. AFL: ADX() function vectorized in 64-bit version (2x faster than before)
  11. AFL: backtester crashed when user incorrectly assigned string value to BuyPrice/ShortPrice/CoverPrice arrays. Fixed.
  12. AFL: Error("text", stop=False) function - added extra parameter to stop execution regardless of "stop execution at first error" preference setting
  13. AFL: FindIndex( array, value, start_from = 0, dir = 1 )
  14. 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
  15. AFL: increased calculated bar requirements for Wilders() function for better conformance with QuickAFL
  16. AFL: Last OS error code is set by Internet* functions regardless of warning level so you can always retrieve it using GetLastOSError()
  17. AFL: MA( C, BarCount ), StDev( C, BarCount ) return non-Null value
  18. AFL: new field added to SetOption/GetOpion function calls "MaxPosValue" (per backtest setting)
  19. AFL: new function InternetSetHeaders( "headers" ) - set custom HTTP headers for subsequent web requests
  20. AFL: new function InternetSetOption( option, value ) - set HTTP option for internet session
  21. AFL: new function MxCopy - for copying rectangular blocks from one matrix to the other (copy portions of one matrix to the other matrix)
  22. AFL: new function: _exit() - that gracefully ends AFL execution at the point of the call
  23. AFL: new function: InternetGetStatusCode function - returns HTTP status code of last InternetOpenURL or InternetPostRequest call
  24. 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
  25. Charts/Preferences: added Text Tool font setting independent from Axis font (Preferences->Miscellaneous page)
  26. Charts: Text Box tool supports user-selectable font size now (selectable in Study Properties window)
  27. Database: new 8-digit ICB structure implemented: Industry Classification Benchmark (ICB) | FTSE Russell
  28. Got rid of obsolete "Request data on save" setting that wasn't performing as expected
  29. 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
  30. When variable was passed to user function by reference, ++ operator inside had no effect on referenced variable (outside of function). Fixed.

For list of changes in the previous version 6.38 see: AmiBroker 6.38.0 RC released


Well done. This addresses what @alligator reported here.

1 Like

When will the official version of Mr Tomasz release ?. Thanks

6.39.1 was just released 15 days ago and it is problem-free. You can use it as official version.
As to next version - it will be released when it is ready. Quality is more important than artificial schedule.


2 posts were split to a new topic: Microsoft 64bit C/C++ runtime

I'm running version 6.28 and would like to know the potential improvement in run time performance (especially in using the File-> import ASCII function to update the database) if I upgrade to version 6.39.

Please check the DevLog AmiBroker DevLog all changes are listed in ReadMe. File->Import ASCII is already super fast (orders of magnitude faster than other software) so it is hardly any room for improvement. It is not like this that I write software "slower" in first place and later make it "faster". I write the best way from the very start. Performance improvements in AmiBroker don't come from "fixing" something that was written badly, because it was written as close to perfect as possible in first place. Performance improvements may come from providing new functions that do things differently or from new instructions that modern CPUs may offer (like SSE2 and 64 bit instructions) or compiler improvements (modern compiler may produce better machine code for same C++ source). But as far as ASCII import is considered none of those happen.


No offence intended Tomasz...Amibroker is a marvellous piece of software that I've been using since version 6.0 on my windows 10 pc (with the latest built). Hardware is a Ryzen 3900X with 16GB ram and a 1TB PCIE 4 nvme ssd..
Importing ASCII file for AMEX, Nasdaq and NYSE from my hard disk took approximately 55sec, 90 sec and 110sec respectively on my pc. Donno if this is normal and this is the background for me raising my previous question. I'll upgrade to the latest version immediately if it can take shorter time than the one listed above to do the import....

@hollowman85, just for curiosity, could you specify what are you importing?

A file with only the EOD data for a single day for all the symbols (how many do you have in your database?), intraday (which periodicity?), multiple days?

Is your data arranged as per these guidelines?

As @beppe wrote, there are many factors to it, you would need to be more specific with regards to number of records (lines in the file), number of symbols, whenever the data are sorted by symbol or not, etc.
A sample file showing actual data format could be useful.

Attached is the snapshot of the first few line of the ASCII file for AMEX on a particular day. The AMEX file on this day has 2377 lines. NASDAQ has 4442 lines while NYSE has 3469 lines. I do import on a day-by-day basis (i.e. 3 text files per day)
The database in Amibroker holds daily records starting with 1st Jan 2013.
The symbols kept in AB are updated periodically using Tool->Update US symbol list and categories.
Obviously the tickers in the text file are not in sorted order. Perhaps that's the recent for the import to take a (relatively) longer time?amex

So this is one quote per symbol. In that case sorting does not matter. Sorting only makes sense if you import more quotes per single symbol. Such imports should be fast if database is already loaded in RAM, if it isn't, the limiting factor is not CPU or any code, but file reading speed, as quotes need to be read from the database before they get updated. They also need to be saved if you exceed the in-memory cache, so you may see if Toos->Preferences, "Data" tab "in-memory cache" setting is greater than the number of symbols you are importing. You can also invest in SSD drive that offers faster read speeds.
Other than that importing update for ALL US stocks (6288) in something like 3 minutes once a day is not something to worry about.
If you did that more than one time a day - all subsequent imports AFTER data are already in RAM should be much faster.
If you want me to test, send actual files and I can test it and tell you what time I get when I import your files.

1 Like

This thread is closed as NEW version is available now: AmiBroker 6.40.0 RC released