amibroker

HomeDevLog

AmiBroker 6.26.0 BETA released

Stability: Rank 3 – regular BETA should work fine in most environments

This is a BETA version. Make a backup first

A new beta version (6.26.0) of AmiBroker, with lots of new AFL functionality has been released.

32-bit version:
http://www.amibroker.com/members/bin/ab6260beta.exe
(2 265 960 bytes)

64-bit version:
http://www.amibroker.com/members/bin/AmiBroker6260x64.exe
(10 619 152 bytes)

If you can not log in into members’ area please get your new password by filling the form at: http://www.amibroker.com/login.html

IMPORTANT: Unauthorized copying and/or distribution of materials found on members’ only page is STRICTLY PROHIBITED and will result in IMMEDIATE termination of license.

UPGRADE POLICY
This version is a free upgrade only for users who registered AmiBroker after September 26, 2015. Users who registered earlier, would need to purchase license upgrade. To find out the version you currently have use Account Information page at http://www.amibroker.com/members/info.php

Remember to BACKUP YOUR FILES FIRST !
Note that this version can only be installed onto previous full installation of version 6.20 or higher from http://www.amibroker.com/download.html

FEATURE HIGHLIGHT 6.26

This version brings static variable declaration, new Voice functions, clickable links in Analysis result list, comment folding in the editor, new mouse hover notifications in GUI controls (notifyMouseEnter / notifyMouseLeave), and many many more – make sure to check CHANGE LOG below.

FEATURE HIGHLIGHT 6.25

This version brings new Gui controls (toggle button, checkbox, radio button), new AFL functions, passing variables by reference, Auto-optimization framework, HTML5 compatibility in Web Research and many more.

FEATURE HIGHLIGHT 6.22

This version is experimental because we are migrating 64-bit version to brand new compiler (VC++ 2017). Such migrations pretty often brings some compatibility risks therefore backup is highly recommended (although you can always go back by just installing previous version). We needed to migrate not only the program itself but many internal libraries taking care not to break backward compatibility.

Note that migration does NOT affect 32-bit version. It is still compiled with old compiler.

Why do we migrate to new compiler with 64-bit version?

  1. New compiler supports new CPU instructions (SSE3/AVX) that we can use to offer better performance
  2. According to our tests new compiler support produces faster code by itself (better optimizations, auto-vectorization, etc)
  3. New compiler is better with error checking (less bugs to slip through)
  4. We don’t need to care about compatibility with pre-Vista systems in 64-bits version and all 64-bit capable CPUs are “modern” enough.

Why do we stay with old compiler in 32-bit version?

  1. New compiler does not produce code compatible with older operating systems (XP or earlier). Old compiler offers 100% compatibility with all Windows versions
  2. New compiler requires modern CPUs

Exact performance improvement is function dependent and hardware dependent. Many functions are faster by 30-50% but in some cases such as Min()/Max() functions as large as 8x speed up can be observed in 64-bit version.

FEATURE HIGHLIGHT 6.21
This version features preliminary support for native chart GUI (buttons and edits at the moment). Please be reasonable with Gui* functions and be aware of Windows limits. As all controls in Windows (buttons, edit boxes, etc) are actual Window objects they are subject to Windows limitation. And there is a limit of 10000 windows PER PROCESS. So don’t try to create thousands of buttons (like a button for every bar of data) because first you will see huge performance decrease and next you will hit the limit and run into problems (crash), see https://blogs.msdn.microsoft.com/oldnewthing/20070718-00/?p=25963.

Best practice is to keep the number under 100-200. If you need more consider using low-level graphics instead.

For more details, instructions and examples how to use new features see the 6.21.0 BETA READ ME

Here is a sample formula that shows basic usage of Gui* functions:

GuiButton"Custom button"1104010030);GuiButton"Dynamic "+Date(), 21204015030);GuiButton"System button"33204010030);GuiEdit5450401002031 );GuiSetColors132colorRedcolorBlackcolorRedcolorWhitecolorBluecolorYellowcolorRedcolorBlackcolorYellow );GuiSetColors33); // default (system) lookeditText GuiGetText);Title "Text entered: " editText "\nLast event: " GuiGetEvent0);id GuiGetEvent0);event GuiGetEvent0);if( id == && event == GuiSetText("Button clicked",5);

CHANGES FOR VERSION 6.26.0 (as compared to 6.25.0)

  1. AFL: new static keyword: declare identifier as static variable – a little ‘revolution’ in static variable use, declare variable as static and use as ‘regular’ variable, no need to call functions
  2. AFL Editor: contrast of error location indicator on dark backgrounds increased
  3. AFL Editor: C-style comments /* … */ are now foldable in the editor
  4. AFL Editor: new menu choices View->Fold Comments / Unfold Comments – allow to fold/unfold all multi-line comments (enclosed with /* …. */)
  5. AFL: added constants notifyClicked, notifySetFocus, notifyKillFocus, notifyHitReturn, notifyEditChange, notifySelChange, notifyMouseEnter, notifyMouseLeave
  6. AFL: Another protection against users shooting themselves in foot, VarSet/VarGet now displays error when you try to use characters different than A-Z, 0-9 and ‘_’ in variable names
  7. AFL: Attempt to use single subscript on matrix variable now results in error message “Accessing Matrix elements requires two subscript operators”
  8. AFL: Due to the fact that Windows may send WM_MOUSEMOVE message even if mouse did not move, AmiBroker now has internal check that prevents ReqestMouseMoveRefresh from triggering if mouse position did not change
  9. AFL: GetLastOSError (for getting last error message from Windows)
  10. AFL: GuiButton and GuiToggle in native OS style use background color of the chart for small border instead of default grey
  11. AFL: GuiButton/GuiCHeckBox/GuiToggle/GuiRadio support now new events MouseEnter (64) and MouseLeave(128) which detect hovering without need for constant refreshes
  12. AFL: GuiCheckBox and GuiRadio now support custom colors of text and background
  13. AFL: In 6.25 Gui* keyboard navigation interferred with delete key and possibly other shortcuts due to the way how windows works. Implemented workaround so keys are only intercepted if child window (control) has focus.
  14. AFL: In 6.25 Gui* keyboard navigation was turned on by default, now it is off by default but can be turned on if you use SetOption(“GuiEnableKeyboard”, True )
  15. AFL: In 6.25 GuiGetCheck returned -1 on unchanged. Now it returns only 0 (unchecked) or 1 (checked)
  16. AFL: In case of Windows INET API error, Internet* functions now report Warning 507 instead of generic error 47. Warning 507 is Level-3 warning, i.e. editor-only, which means it will pop up in the formula editor, but won’t break execution in runtime
  17. AFL: Now can use subscript operator [ ] on references to arrays and matrices
  18. AFL: Passing by reference does not create nested references in user-defined function calls
  19. AFL: VoiceSetRate( rate ) – sets SAPI voice (speech synthesis) rate. Rate of 0 (zero) is “normal”, negative is slower, positive is faster (allowable range -10..+10)
  20. AFL: VoiceSetVolume( volume ) – sets SAPI voice (speech synthesis) volume (0..100)
  21. AFL: VoiceWaitUntilDone( timeout ) – waits until voice has finished speaking or specified timeout (1..100ms) has elapsed. Returns True if voice finished, False if the timeout elapsed
  22. broker.master file is saved to a new name and renamed later to avoid corruption when Windows decides to shutdown, restart or sleep during save
  23. Dev: 64-bit new compiler (VC2017) broke backward compatibility with singletons that UI lib uses causing infinite loop when High Contrast scheme was used. Workaround implemented.
  24. Misc: 64-bit: Restored correct manifest (from pre6.22) with compat records so Win 10 does not lie about version number and re-added 24-bit large PNG icon
  25. New Analysis: Added support for clickable links. If you put @link URL in any cell of Analysis result list it creates a clickable row. If you double click on the row while holding down ALT key it will open the link

CHANGES FOR VERSION 6.25.0 (as compared to 6.22.0)

  1. 64-bit: In 6.22 the array division could produce 1ulp (units at least place) rounding errors due to too excessive new VC++2017 compiler optimizations. Workaround implemented to avoid that.
  2. Added support for formatDateTimeISON (ISO format NO dashes: YYYYMMDD for end of day and YYYYMMDD HHMMSS for intraday)
  3. AFL Editor: added one-time message “In the Debug mode number of bars is limited to 200 bars. You can change it in Tools->Preferences, Debugger tab” because users don’t read docs
  4. AFL: ApplyStop now has 8th argument: ActivationFloor that defines the amount of profit (in dollars or percents, according to stopmode) that must be exceeded before stop is activated
  5. AFL: Gui* – controls are created in the order of occurence in AFL formula (instead shuffled or reverse as in previous version)
  6. AFL: Gui* – keyboard navigation is now enabled (you can tab between controls and use arrows to navigate control groups such as radio boxes)
  7. AFL: IsNull() accepts matrix input and returns 0 (False), i.e. “variable is not null” if variable is of matrix type
  8. AFL: math functions such as sin(), sqrt(), etc can now be applied to matrices (element-wise operation) (previously such attempt resulted in access violation)
  9. AFL: New feature: Passing arguments as reference (allows modification of arguments passed – easy way to return multiple values), to pass by reference use & (address-of) operator before variable identifier
  10. AFL: new function GuiCheckBox – creates check box
  11. AFL: new function GuiGetCheck( id ) – gets ‘checked’ or “ON” state of toggle, checkbox and radio buttons
  12. AFL: new function GuiRadio – creates radio button
  13. AFL: new function GuiSetCheck( id, checked ) – sets ‘checked’ or ‘ON’ state of toggle, checkbox and radio buttons
  14. AFL: new function GuiSetFont( “fontface”, size )
  15. AFL: new function GuiToggle – creates toggle button (like normal button but it toggles between “on” and “off” state with each click)
  16. AFL: SetOption(“OptimizeSaveParams”, True ); – turns on generation of AFL file that contains values of optimization parameters producing best result. The generated file has the same name as formula run but has .opt.afl extension
  17. AFL: When using TimeFrame functions, QuickAFL now uses ratio of requested_interval/current_interval multipled by 30 to better estimate required bars
  18. Analysis: Detailed log displays information about ignored ScaleIn/Outs because of insufficient funds or trade size constraints
  19. Analysis: Detailed log now displays all warnings about skipped/ignored signals in RED color so they are easier to spot
  20. Data: when performing X:Y split and X or Y exceeded 255 the factor was incorrectly displayed (negative) in the Symbol window. Fixed.
  21. formatDateTimeISO and formatDateTimeISON added to syntax highlighter definitions
  22. Scheduler: Repeat “Daily” mode repeated batch run every day even if some days were unchecked. Fixed.
  23. UI: Place Order dialog – allows typing stop distances smaller than 0.1 now
  24. UI: Prefs/Charting: Turning on “Collapse parameter sections” option causes all sections in Parameter window to be collapsed (NOT good idea for newbies as they wont see the controls !)
  25. Web Research: many HTML5 pages did not display properly because of the fact that web browser used old IE7 mode. Now browser uses IE11 mode at minimum for proper HTML5 rendering

CHANGES FOR VERSION 6.22.0 (as compared to 6.21.0)

  1. 64-bit: migrated all code to new compiler VC++2017 which seems to produce better code for x64 resulting in 30…50% speed improvements for many AFL functions. The only negative seems to be much bigger runtime libs
  2. 64-bit: AFL: Sum() function 2x faster
  3. 64-bit: AFL: Max() and Min() functions 8x faster
  4. 64-bit: AFL: Ref() funciton 2x faster
  5. 64-bit: AFL: MACD(), ROC(), StDev(), LinearReg() and many other functions faster by 30-50%
  6. AFL: GetExtraData does not trigger code check and profile warning about referencing future quotes if plugin implements new GetExtraDataEx function
  7. AFL: GuiEdit complained about 2nd parameter instead of 1st (being less than zero)

CHANGES FOR VERSION 6.21.0 (as compared to 6.20.1)

  1. AFL: decreased memory fragmentation when user changes type of variable from array to scalar and back thousands of times
  2. AFL: GuiButton( “Text”, id, x, y, width , height , notifyflags ) – creates a button
  3. AFL: GuiEdit( id, x, y, width, height, notifyflags ); – creates an edit field
  4. AFL: GuiGetEvent( num, what = 0 )
  5. AFL: GuiGetText( id ) – get text from control
  6. AFL: GuiSetColors( idFrom, idTo, border , clrText = -1, clrBack = -1, clrBorder = -1, clrSelText = -1, clrSelBack = -1, clrSelBorder = -1, clrHoverText = -1, clrHoverBack = -1, clrHoverBorder = -1, clrDisText = -1, clrDisBack = -1, clrDisBorder = -1
  7. AFL: GuiSetText( “text”, id ) – set text of the control
  8. AFL: RequestMouseMoveRefresh() – request formula execution / refresh when mouse is moved INSIDE given chart pane (so it only triggers for ONE window under the cursor)
  9. If Quote.exe is missing and AmiBroker can’t do auto-update of quotes, a detailed information is displayed of where it expects Quote.exe file to be present
  10. Plugin loading changed: first AmiBroker attempts to load plugins for “Plugins” subfolder from where Broker.EXE file is located (new behavior) and if subfolder is NOT found, it then defaults to old behavior (using “Plugins” subfolder under current working

KNOWN ISSUES:

  1. None

For more details, instructions and examples how to use new features see the 6.26.0 BETA READ ME

Comments are closed.