AmiBroker 5.36.0 BETA Read Me
March 25, 2011 11:47
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
5.30 first.
Just run the installer and follow the instructions.
Then run AmiBroker. You should see "AmiBroker 5.36.0 BETA" written
in the About box.
See CHANGE LOG below for detailed list of changes.
CHANGE LOG
CHANGES FOR VERSION 5.36.0 (as compared to 5.35.0)
- AFL Editor more detailed code checks implemented - now displays *warnings*
(for code parts that are syntactically correct but likely errorneous in practice)
Example: Warning 501. Assigment within conditional. Did you mean == instead
of = ?
The warning will display if you use = (assignment operator) as a condition
in
if(), while(), do-while(), and for() statements and IIf() function
The result of an = assignment statement is the value of the right-hand side
of the = statement. You can use an assignment statement as a conditional
test, but it is not recommended. It usually is the result of a typo where
a == equality test was intended, as the following example shows:
Example:
if( x = 3 ) // x will be assigned with 3 then it is used as "true" value
so condition is always met - AmiBroker will display warning 501. Assignment
within conditional
{
// this if will ALWAYS be executed
}
Probably the user meant:
if( x == 3 ) // x will be compared to 3
{
// this is true conditional part
}
If you want to overcome warning 501 while still doing assigment within conditional
perform a check like this:
if( ( x = 3 ) == True ) // this NOT cause warning 501
{
printf("test");
}
- Temporary
workaround for docking window crash when Internet Explorer 9 is installed
and web research window resized
- AFL: GicsID and InGICS added
GicsID( mode )
returns STRING
- gives information about current symbol GICS category
mode = 0 - returns string containing GICS code alone (such as " 15103020")
mode = 1 - returns string containing GICS category name (such as "Paper
Packaging")
mode = 2 - returns string containing both code and name (such as "15103020
Paper Packaging")
InGics( "gics_code" )
- performs yes/no test if current symbol belongs to given GICS category
for example
if GICS set for the symbol is 15103020
InGics("15"), InGICS("1510"), InGics("151030")
and InGics("15103020") will ALL return true
but all others (like InGics("20")) will return false.
Example usage:
"GICS(0) = " + GicsID( 0 );
"
GICS(1) = " + GicsID( 1 );
"
GICS(2) = " + GicsID( 2 );
for( i = 10; i < 90; i+= 1 )
{
gics_code = StrFormat("%02.0f", i );
printf("In Gics '"+ gics_code + "' = %g\n", InGics( gics_code
) );
}
- In minimised windows RequestTimedRefresh with
onlyvisible parameter set to False worked unreliably when multithreading
was ON. Fixed.
- AFL engine gives more detailed information about exceptions
(including line numbers and file path)
- Formula editor, indicators and commentary
catch all exceptions, not only system exceptions
- Fixed potential crash when
param dialog is referring to non-existing view (NO_CHART_ID)
- AFL: "Unknown
exception" should now be reported with line numbers
for easier identification of ofending function
- AFL: for/while/do-while loops
were not executed if syntax or runtime error occured before them and "stop
parsing on first error" was turned
off. Fixed
CHANGES FOR VERSION 5.35.0 (as compared to 5.34.5)
- AFL Editor: "firstvisiblebarindex" and "lastvisiblebarindex" are
initialized with first and last data bar when using "Verify syntax" to
avoid problems. Although these Status fields should only be used in indicators,
it is quite common mistake among users to use them unconditionally
- AFL: Sum()
function displays Error 52. Invalid argument value when range argument is
negative (instead of random crash)
- Account manager: fixed OLE exception in
date conversion occuring randomly due to uninitialized exit date when trade
has been opened.
- Indicator Maintenance Wizard now creates log (indmaint.log
in AmiBroker directory) that reports all layout files read and eventual errors
found. It also attempts
to read corrupted layouts in a "safe" way so it does not crash
- Parameter
window: fixed handling of mixed section and section-less parameters
- Quote
Editor: fixed editing when timeshift was not zero plus added ability to turn
on/off timeshift (so quotes can be edited in original exchange zone)
- Fix:
Click on items in param() window did not set focus ( fix @ line 1505 HotPropCtrl.cpp
)
- AFL: Error 10. Subcript out of range message now gives information about
exactly which array element was accessed
- AFL: Added new error message "Error
51. Array subscript has Null value"
- /STACK:2097152,16384 (2M/16K) option
for x64 compilation - to allow deep nesting in AFL, also reduced stack
usage by Execute() function
- Removed (evil) IsBadReadPtr function
- OLE: AB.RefreshAll( [optional] Flags
= 1 ) - takes now new optional parameter Flags. Flags = 1 means refresh only
charts (fast), Flags = 3 means refresh
charts, dialogs, symbol list, chart list, etc (SLOW!)
- OLE: AB.RefreshAll()
changed for improved consistency (marks for refresh and it is refreshed every
1 second regardless of number of requests within
one
second)
- //--Indicator-End-- special marker is now obsolete and does nothing
(entire formula is executed). For conditional execution of interpretation
code use
conditional statement if with Status() function
- Fix: switch( str_function_call_here
) did not work properly when expression was a function call returning string
such as StrLeft(). Fixed
- Fix: internal time conversion (flocaltime) made thread
safe using TLS
- AFL: Equity() now uses thread local storage for keeping stop
state variables to prevent interference when multiple threads call Equity()
- AFL:
mtRandom(A) now uses thread local storage, so using non-null seed yields
reproducible sequence even if multiple threads are calling mtRandom in parallel
- Foreign()
uses SendNotifyMessage instead of PostMessage if symbol data are not already
cached to trigger loading quicker (solves support #78278)
- Implemented cross-thread
bidirectional communication mechanism that allows to call functions across
threads in safe way. This allows among other things
to make non-threading safe APIs (like Quotes Plus) to operate properly with
multi-threading enabled. (Fixes GetExtraData crash with QP2 - FC#2072)
- Prefs/Misc/"Show
interpretation in tooltips" checkbox removed as
this functionality has been removed in 5.32.0. Use Interpretation window
instead (View->Interpretation)
- OLE: AB.Import() - UI is automatically refreshed
after import so there is no need to call RefreshAll() anymore. Also the refresh
is "smart" it
only updates symbol lists if any symbols were added
CHANGES FOR VERSION 5.34.5 (as compared to 5.34.0)
- Worked around Microsoft OS bug #248760 and #209467 - writing to
metafiles from multiple threads causes lost object selections. This has
caused display
unstability for Gfx function-generated output. The only way to fix that
was NOT to use metafiles at
all. Gfx code was rewritten not to use Microsoft metafiles. As a result
of custom implementation Gfx functions work now 3 times faster and are
multi-threading safe.
- GfxDrawText automatically falls back to much (4x) faster ExtTextOut when
format is 0 or DT_NOCLIP and string does not contain any new line characters
CHANGES FOR VERSION 5.34.0 (as compared to 5.33.0)
- Fix: Gfx functions when run in multithreaded mode slowed down over time
due to Micosoft MFC library GDI wrappers not being thread-safe. Fixed by
replacing
MFC calls with straight WINAPI calls.
- Multi-threading charts are now ON by default
and will be reset to ON on each restart. This change is temporary but added
because some people forget to turn
this on.
- Fix: When Symbol Lock was ON, currently focused chart did not update
its quote cache. Fixed
- Fix: Status("redrawaction") was giving 0
result for timed refreshes in 5.31-5.33 while it should give 1. Fixed.
- Fix:
GDI leak found when using Gfx* functions in Automatic Analysis that resulted
in resource exception after long use. Fixed
- Fix: GDI leak found after Parameter
windows "Reset all". Fixed
- Fix: Black screen in Edit->Image->Copy
as bitmap/Metafile/Export/Send e-mail. Fixed. Now uses separate instance
of AFL engine not to interfere with
execution running in the background.
- Fix: AFL engine did not release memory
buffer for pre-processed parts (#include). Fixed
- AmiBroker now has requestedExecutionLevel
set to "asInvoker" in its
manifest file and that prevents Vista/Windows 7 folder virtualization. It also
displays a warning message when it does not have write access to its working
directory.
CHANGES FOR VERSION 5.33.0 (as compared to 5.32.1)
- OLE: Analysis object - added IsBusy property that allows OLE programs to
check whenever AA is currently running asynchronous AA operation
- In 5.32.1
only active window was refreshed automatically by streaming data
- others required mouse click. Fixed.
- In 5.32 formulas using Status("actionex")
== actionIndicator caused blank pane when focused because actionex was NOT
indicator. Compatibility
shim implemented.
- Fixed bad crash occuring when using AddToComposite with
atcFlagsEnableInIndicator in multi-threaded mode
- Fix: Interval linked charts
did not update immediatelly and multi-window layouts required click to update
after loading. Fixed.
- Fix: Crash @501C30 when doing double right click on
Data window
- Dangling pointer to view (after its deletion) removed from timedrefresh
map and parameter window. This prevents some crashes
- Compat: In 5.32 when
SetOption() was placed AFTER custom backtester procedure code in user formula
- such options did not affect CBT results. Technically
5.32 was correct one and 5.30 incorrect (such options affected CBT results),
but because probably too many user formulas are poorly written without taking
attention on placement of SetOption() calls and that created false bug reports,
an old compatible behaviour was restored till the time when error messages
about wrong placement of SetOption() calls are implemented, so users become
aware about their coding errors.
- Bug recovery/report dialog now allows the user to type steps required
to reproduce the crash and select how often given problem occurs
- Attempts
to run AA asynchronous operation (Backtest/Optimize/Scan/Explore) via OLE
while another one is still running are detected and prevented (with
error message "Automatic Analysis is Busy processing")
- AFL thread
termination routine checks for possible same-process COM call deadlock
and pumps COM messages if necessary to complete thread gracefully
CHANGES FOR VERSION 5.32.1 (as compared to 5.32.0)
- Fix: when "stop parsing at first error" option was turned on "Reset
all" button in parameters window caused params to disappear. Fixed
- Fix:
random crash @7792E25B (small alloc heap corruption) fixed
- Fix: random crash
@4BFFF7 (when accessing static variables from multiple threads at once).
Fixed.
- Fix: Eliminated multi-threaded race condition that randomly caused
blank charts.
CHANGES FOR VERSION 5.32.0 (as compared to 5.31.2)
- Parameters work also without _SECTION_BEGIN/_SECTION_END, Parameters 'Reset
All' operation improved
- Interpretation does not use extra
execution cycle anymore (text evaluation is done within normal indicator
execution)
- Formula Editor: Syntax check, Apply indicator, Insert work faster
because it only uses 100 bars to perform syntax check instead of all bars
- Formula
Editor: Code check & profile uses not more than 100K bars
- Fix: Timing
display in the chart shows correctly AFL execution and redraw time when
multi-threading is ON and does not flicker
- Fix: Say() function works properly
when multithreading is ON
- Fix: Errors occuring in JScript/VBScript parts
do not result in crash anymore
- Data Window now allows to choose which of
default data elements (OHLCV, OI, Aux1/2) to display - use Right click
context menu
- Data window display is immediate and does not require extra AFL
execution
- Data tooltip readout is immediate - does not use extra execution
cycle anymore (implemented internal cache)
- When there are no parameters for given indicator - empty brackets are not
added anymore for display in tooltip/data window and as a return value of
_DEFAULT_NAME().
CHANGES FOR VERSION 5.31.2 (as compared to 5.31.1)
- Fixed: Problems with Gfx functions in 5.31.1
- Fixed: Parameters window was
not refreshed properly after ResetAll in 5.31.1
- Fixed: Crash when switching
layouts in 5.31.1
- Fixed: Crash @004C297D - Foreign returned wrong interval
in 5.31.1
- Fixed: Crash @0040F91C / @0040FA2B (all references to ChartInfo
removed from AFL engine) in 5.31.1
- Fixed: Automatic Analysis ignored changes
done via SetOption and other runtime settings-related changes in 5.31.1
- Fixed:
Changing chart display interval did not work immediatelly in 5.31.1
CHANGES FOR VERSION 5.31.1 (as compared to 5.31.0)
- fixed crash @0040BACD (using Gfx... functions)
when multi-threading was enabled
- fixed crash @0041E27C (JScript/VBScript embedded code)
when multi-threading was enabled
- fixed crash @7686F05D and @004B83EC (load/create new database)
when multi-threading was enabled
CHANGES FOR VERSION 5.31.0 (as compared to 5.30.4)
- Major change: AFL Engine rewritten completely to allow multi-threaded
execution
CAVEAT: this is very new code and may not be stable
This change will lead to several improvements that will be added
in future versions. First public release of multi-threaded AFL engine (5.31.0
BETA) features support for multi-threading in commentary and charts.
By default multi-threaded execution in charts is disabled. To
enable multi-threaded execution of charts, go to Tools->Preferences, "AFL"
tab
and check "Multi-threaded
charts".
Note that once you turn this option on, each chart PANE will execute in
separate thread, so refreshes of each pane will become completely asynchronous,
non-blocking. This has quite dramatic (positive) effect on perceived snappiness
of user interface.
However, there are also things you need to keep in mind. If
your formulas rely on certain order of execution of panes, they may work incorrectly
because
generally
all
panes
will
be executing
in parallel, and it depends on complexity of formula which one will finish
earlier. Also a formula that is quick to execute may run several times
while the other lenghty one is only finishing one run.
This has also another side effect that Foreign and AddToComposite functions
when they are used in chart formulas, will operate in asynchronous way
(what you write with AddToComposite may not necesarily appear instantly
if you
read it back right after using Foreign()), therefore it is recommended
to use static variables when you need synchronized access between threads.
Since each thread uses approximatelly 1 MB of RAM for thread stack, the
memory consumption when using multi-threading may be slightly larger.
There are some things that do not work properly yet when "multi-threading
charts" are turned on:
- Performance meter / chart timing display do not show AFL execution
times (the values reported are minimal).
- Data tooltips / Data window are still executed in main GUI thread and
this in theory can lead to problems (to
improve stability it is recommended to turn off price data tooltips in
Tools->Preferences->Miscellaneous)
- $HYBRID now allows importing OpenInterest, Aux1, Aux2 onto existing data
without need to specify price
- New AFL function: PlaySound( "filename" )
The function plays back specified .WAV file
returns 1 on success, 0 on failure
Example:
PlaySound("c:\\windows\\media\\ding.wav");
- New AFL function: ShellExecute( "filename", "arguments", "workingdir",
showcmd = 1 )
The function opens a file or runs executable.
It is equivalent of Windows API ShellExecute, with one difference, it always
uses "open" verb.
This allows running executables, scripts, opening document files using their
associated editors, etc.
If the function succeeds, it returns a value greater than 32. If the function
fails, it returns an error value that indicates the cause of the failure.
For possible error codes, consult Microsoft documentation:
http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
Example:
ShellExecute("notepad.exe", "", "" );
- Multiple file open dialogs now use 1MB buffer (instead of 256K)
- OptimizerSetOption
and OptimizerSetEngine are now no-ops for anything but backtest/optimization
action
This prevents random problems when one used OptimizerSetOption or OptimizerSetEngine
within indicator code.
- Value labels are drawn with a little offset from the Y axis. First
Plot() label is drawn with an arrow pointing out exactly price level
- When
main application window is in modal state (displaying File open dialog
for example), RequestTimedRefresh is held
This fixes problem with file dialog changing current working directory while
browsing for directory (FC #1670)
- When multiple MDI windows are open
and one is maximized, the windows in back that are completely obscured
by others and minimized windows
are not
redrawn
during normal RT refresh
It is worth noting that if you use RequestTimedRefresh the chart
will continue to be refreshed periodically even if obscured by
other windows.
If you use RequestTimedRefresh with "onlyvisible" parameter
set to False, the chart will be also refreshed if it is minimized
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