AmiBroker 5.50.0 BETA Read Me
November 30, 2011 18:36
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.40 first.
Just run the installer and follow the instructions.
Then run AmiBroker. You should see "AmiBroker 5.50.0 BETA" written
in the About box.
See CHANGE LOG below for detailed list of changes.
CHANGE LOG
CHANGES FOR VERSION 5.50.0 (as compared to 5.49.2)
- New Analysis: "Save" creates now a Analysis project (.apx) file
that includes all settings and formula needed in single file. The file itself
is in human readable XML format. When such file is loaded on somebodys' else
computer it will recreate original formula if one is not present. It will
warn if there is a name conflict and
let you decide to keep existing formula or overwrite.
- UI: File open dialog now has "All supported
files" option in the "Files
of type"
- UI: PopupWindow is now resizable (see size gripper in the lower-right
corner)
- AFL: PopupWindow function has additional parameters to control width/height
and flag that controls whenever popup window captures input focus
PopupWindow( "bodytext","captiontext", timeout = 5, left
= -1, top = -1, width = -1, height = -1, captureFocus = True );
width = width in pixels, -1 - use default width
height = height in pixels, -1 - use default height
captureFocus - decides whenever popup window captures input focus or not
Example: popup window that does not change input focus:
PopupWindow("test", "caption", 30, -1, -1, -1, -1, False);
- New Analysis:
ApplyStops applied in non-regular modes are passed to 2nd phase properly
now.
- New Analysis: "Show current trade arrows" fixed.
- New Analysis:
View->Filtering menu options were not available when New
Analysis was active. Fixed.
- New Analysis: Standard Edition has a limit of
max 2 threads per Analysis window instance.
- UI: Log window clicking on error
displayed AFL Editor and marked Line+1, Col+1 char position instead of proper
place. Fixed
- New Analysis: Errors are now displayed in a modern message bar
instead of dialog box
- UI: holding down Ctrl and Q keys simultaneously while
AmiBroker is starting resets all menus/command bars to defaults
- New Analysis:
scroll bar properly works when "Walk forward" tab
is active
- New Analysis: Walk forward tab content can be now copied using Edit->Copy
/ Ctrl+C
- New Analysis: when "wait for backfill" was turned on and
external data source was very slow to repond (like IQFeed during backfill)
subsequent
calls to Status('stocknum') could give non-unique numbers. Fixed.
- New
Analysis: Copy to clipboard includes headers now
- New Analysis: Column customization/state
persistence implemented
- Charts: New Y axis grid algorithm for clearer display
on condensed charts
- AFL: CategoryGetSymbols supports new categoryAll (all
symbols in the database) and new Mode parameter
CategoryGetSymbols( category, number, mode = 0 );
Mode parameter decides what field is retrived:
0 (default value) - ticker symbol
1 - full name
Example: to get all symbols existing in the database simply call
CategoryGetSymbols( categoryAll, 0 );
to get full names of all symbols use:
CategoryGetSymbols( categoryAll, 0, 1 );
- AFL: Added Warning 503. Using
OLE / CreateObject / CreateStaticObject is not multi-threading friendly.
See Users' Guide ""Efficient use of multithreading"" for
more details.
- AFL: Added ThreadSleep( milliseconds ) function. It suspends
current thread for specified number of milliseconds (maximum is 100 ms).
Works only from
NON-UI threads. When called from UI thread the function does NOTHING and
returns immediatelly.
Please do NOT abuse this function. Using it may negatively impact performance.
- AFL:
Added StaticVarCompareExchange function. Provides atomic interlocked compare/exchange
functionality
Parameters
"
varname"
Specifies the name of the destination static variable. Static variable
if exists must be scalar numeric type. If static variable is not initialized,
the function assumes that it has value of zero.
exchange
Specifies the exchange value. Scalar numeric.
Comperand
Specifies the value to compare to the destination static variable. Scalar
numeric.
Return Values
The return value is the initial value of the destination static variable.
If variable did not exist, it returns zero.
The StaticVarCompareExchange function performs an atomic comparison
of the "varname" static variable value with the Comperand value.
If the static variable value is equal to the Comperand value, the Exchange
value is stored in the static variable. Otherwise, no operation is performed.
The function StaticVarCompareExchange provides a simple mechanism for
synchronizing access to static variables that are shared by multiple
threads. The following examples show how
to implement semaphore and critical section in AFL using StaticVarCompareExchange
function:
// EXAMPLE 1 : Simple semaphore (no waiting)
if( StaticVarCompareExchange( "semaphore", 1, 0 )
== 0 ) //
obtain semaphore
{
// protected section here
// Here you have exclusive
access (no other threads that check for semaphore will enter simultaneously)
/////////////////////////
StaticVarSet("semaphore", 0 ); //
reset semaphore
}
else
{
_TRACE("Can
not obtain semaphore");
}
///////////////
// EXAMPLE 2 HOW TO IMPLEMENT CRITICAL SECTION
IN AFL
///////////////
function _TryEnterCS(
secname )
{
global _cursec;
_cursec= "";
// try obtaining semaphore for
1000 ms
for(
i = 0; i < 1000;
i++ )
if(
StaticVarCompareExchange( secname, 1, 0 )
== 0 )
{
_cursec = secname;
break;
}
else ThreadSleep( 1 ); //sleep
one millisecond
return _cursec
!= "";
}
// call it ONLY when _TryEnterCS returned TRUE !
function _LeaveCS()
{
global _cursec;
if(
_cursec != "" )
{
StaticVarSet(
_cursec, 0 );
_cursec = "";
}
}
function TimeConsumingWork()
{
// WARNING: the Percentile is CPU
hungry as it involves lots of sorting, the loop below may take > 1 second
to complete
for(
i = 0; i< 10;
i++ ) Percentile( C, 100, 10 );
}
//_TRACE("Without CS Begin " + GetChartID() );
//TimeConsumingWork(); // some time consuming calculation
//_TRACE("Without CS End" + GetChartID() );
// Example usage (critical section)
if( _TryEnterCS( "mysemaphore" )
)
{
// you are inside critical section now
_TRACE("Begin
CS " + GetChartID()
);
TimeConsumingWork(); // some time consuming calculation
_TRACE("End
CS " + GetChartID()
);
_LeaveCS();
}
else
{
_TRACE("Unable
to enter CS");
}
CHANGES FOR VERSION 5.49.2 (as compared to 5.49.1)
- New Analysis: added Optimize->3D Optimization chart menu
- New Analysis:
buttons for Portfolio Equity/Individual Equity charts added
- New Analysis:
Info Bar added (that duplicates some of the info that normally appears on
the Info Tab). It can be turned on using Settings->Info Bar
- New Analysis:
Report generation is now OFF by default when running optimization/walk forward
as in old AA. This gives about 0.9 sec gain per step.
- New Analysis: Single-symbol
optimization made faster by caching already compressed quote array on subsequent
steps
- New Analysis: the check for Status("StockNum") was sensitive
to blanks between parenthesis, function name and string parameter. Now it
is
made insensitive
to blanks.
- New Analysis: when "Range" was "n last bars" or "n
last days", Status("rangefromdate") gave date of preceding
bar. Fixed.
- UI: "Performance" tooltip title was not always updated
on time. Fixed.
- UI: "Wait for plugin" window displays progress bar
with "marquee" style
instead of circle of dots
CHANGES FOR VERSION 5.49.1 (as compared to 5.49.0)
- New Analysis: Testing on unaligned data sometimes took longer than expected
because of the work necessary to bring signals in order. Now a smart method
avoids most of the memory transfers and can give 10x speedup on backtesting
very long unaligned intraday data.
- New Analysis: "Backtest started", "Exploration started" text
in the info tab appeared twice per run (instead of once). Fixed
- New Analysis:
Backtest report did not include formula code. Fixed.
- New Analysis: Fixed crash
that could occur when running analysis with Range set to "N recent bars" and
N was exceeding number of quotes.
- New Analysis: Float/Normal/Close popup
menu RMB menu was active everywhere in floating window instead of only caption
area. Fixed.
- New Analysis: Implement single-thread start when Status("StockNum")
is detected in the code. Other threads are started when first symbol processing
is completed.
- New Analysis: Send to Analysis did not update formula combo
box properly in certain scenarios: when formula X was selected, then formula
Y, then formula
X again. Fixed.
- Old AA: status bar displays true timing
for fair comparisons between old AA and new Analysis. Watching progress
bar numbers was misleading
as it
closed before all processing was truly complete, so it looked like
old AA completed
sooner than it really did
- UI: menu item for Old Automatic Analysis restored
as apparently some users got lost. Also attempt to run old Automatic analysis
displays
an information
about new Analysis window
CHANGES FOR VERSION 5.49.0 (as compared to 5.48.0)
- New
Analysis: when floating pane is made normal from/to dates were reset to today.
Fixed.
- New Analysis: when Apply To: Filter is defined so NO symbol matches
the criteria, appropriate message is displayed when trying to run Analysis
and action is
terminated instead of displaying progress bar forever
- New Analysis: when analysis
window is "floating" double click/show
arrows/sync affects active MDI chart just like old AA did, as opposed to
last one (when analysis is not floating)
- New Analysis: Optimization parameter
setup stage uses now not more than 100 bars. This reduces setup time.
- New
Analysis: implemented import / export, File menu now has Import HTML and
Export HTML/CSV commands
- New Analysis: Implemented "Wait for backfill" option.
This slows down analysis sequence so AmiBroker waits for external RT data
source to
deliver backfill data
When "wait for backfill" option is turned on, AmiBroker checks if
data for given symbol are complete, if not, it sends request to external source
to backfill the data and waits 1 second.
After one second, it checks again, it data are complete, if not, it waits another
1 second, and so on. Once data are complete given symbol is used for formula
execution.
- New Analysis: Custom backtester uses "last backtest
settings" when
calling GetStatus() instead of old AA settings
- New Analysis: auto-repeat interval
edit field did not allow to enter values if moved to main toolbar via customization.
Fixed.
- Formula Editor Analysis toolbar button now operates on New Analysis
window
- Default for timestamping of intraday compression changed to "Show
START time of interval"
- Charts: AFL error message color is now definable
in Tools->Preferences, "Color" tab
- Charts: Tooltips automatically
display also OHL prices (in addition to close) when Plot style is set to
candlestick, bar or when PlotOHLC was used
- UI: Adjusted item Y offset for owner
drawn listviews for consitent look with old layout of system listviews
in Windows XP and earlier OSes
- UI: Account, Analysis and Web research windows
don't use client edge/border anymore - gives slicker / less crowded look
- UI: when focus is switched to floating document window, the application
menu is switched to proper context
- UI: When File->Close was used on floating pane, document was closed
but docking pane was not. Fixed.
- UI: The toolbar button and menu option to launch old Automatic Analysis
window are now hidden (can be brought back by using Tools->Customize),
old AA can also be launched from new Analysis via Analysis->Old Analysis
menu
- UI: New menu options and toolbar button to launch new analysis window
- UI: Moved all menu items controlling visibility of docking windows to "Window" menu
- UI: floating state of windows can now be turned on/off using right-click
menu over tab / floating window caption
- UI: File->Save (when currently selected window is a chart) command now
saves Chart template. To save database use "Save database" instead.
- UI: Defaults for data window are changed, so extra OHL display is turned
off by default as currently PlotOHLC displays all 4 prices in the tooltip
and data window already
- UI: Data window scroll bars are hidden and do not flicker when updating
- UI: "Save All" toolbar button removed, "Save database" button
added to replace it
- Web Research: turned on "silent" mode - should prevent error
message boxes displayed by IE engine.
- QuoteEngine: Range bars algorithm improved significantly
- Quote array uses 20480 bytes (512 quotes) allocation chunk size (exactly
5x4KB page) for better alignment with Windows virtual memory pages
CHANGES FOR VERSION 5.48.0 (as compared to 5.47.0)
- New Analysis: custom metrics columns were invisible in backtest/optimizations.
Fixed. (#91031)
- New Analysis: backtest did not display proper column names
when Report mode was different than trade list. Fixed. Also added support
for changing report
mode via SetOption().
- New Analysis: Auto-repeat Scan/Explore implemented (aka. "Run
every" in
old AA) (use drop down menu next to "Settings" button)
- New Analysis:
Showing arrows by double click implemented
- New Analysis: Sync chart on select
option implemented (use drop down menu next to "Settings" button)
- Fixed
window activation issue after RMB click in chart window when non-chart floating
windows are active
- New Analysis: Cancelling walk-forward did not restore date
range and settings and didn't reset internal step counter. Fixed.
- New Analysis:
Formula path disappeared when window was made floating. Fixed.
- New Analysis:
in 5.47 non-exhaustive optimizers sometimes stopped after first step in walk-forward.
Fixed.
- Charting: scroll bar zoom function remains active even at extreme zoom
in levels
- New Analysis: Fixed problem with opt steps warning dialog appearing
sometimes in the out-of-sample tests in walk forward sequence
- New Analysis:
Signal heaps are separated now, allowing to run concurrent backtest/optimizations
in many analysis windows
- New Analysis: removed unnecessary refreshes of symbol
list during optimizations that caused slowdowns when user had large database
- New
Analysis: The size of control fields is properly adjusted with regards to
DPI
- New Analysis: Status("StockNum") was always zero in 5.47 and
earlier. Now it is set properly.
Caveat: be careful when you run codes that use Status("StockNum")==0
for special processing in multithreading mode.
Other threads with "StockNum" = 1, 2, 3,... will run simultaneously!
If you store static variables in step 0 these variables may be empty if you
access them from other parallel running threads.
- Fixed Error 53 message that was giving an
error when proper \" (quotation
mark espace sequence) was used
CHANGES FOR VERSION 5.47.0 (as compared to 5.46.0)
- New Analysis: last used ApplyTo/Range/From/to dates/filters and other settings
are saved when Analysis window is closed
- Fix to "slow response" problems
some users reported when switching symbols
- Fibonacci retracement- modifying
Z-order affected only control trendline, not all lines as it should. Fixed.
- New
Analysis: implemented Walk-Forward testing (use drop arrow next to Optimization
button)
- AFL engine: new error 53: incorrect \ espace sequence. Error is issued
when user forgets that single slash must be written as \\
- Default title for
new analysis window is "AnalysisX" (instead of "Unnamed")
where X is consecutive number 1, 2..
- attempt to use Say() on
computer without sound card or without driver installed does not result
in throwing exception/crash report, but it is rather silently
ignored
CHANGES FOR VERSION 5.46.0 (as compared to 5.45.0)
- New Analysis: Exhaustive multi-threaded optimization implemented
- New Analysis: Smart (non-exhaustive) multi-threaded
optimization implemented
in a way compatible with existing optimizer plugins
Note however that due to the fact that most non-exhaustive optimization plugins
are not re-entrant, AmiBroker prevents from running more than one non-exhaustive
multi-threaded optimization at a time.
You can however, run many exhaustive optimizations in parallel, as they don't
require external plugins.
- Slight modification to the way how compressed bar charts are drawn (so
bars with H==L are better visible)
CHANGES FOR VERSION 5.45.0 (as compared to 5.44.1)
- 64-bit version compiled with new version of C runtime (Microsoft security
update)
- Fixed date/time column sorting in virtual list views when regional
date format was different than yyyy-MM-dd
- AFL: ClipboardSet() returns True
(1) when clipboard has been successfully set. Sometimes clipboard is locked
by another applications and then write
can fail
(ClipboardSet() will return zero/False then)
- New Analysis: Changed alignment
of Date/Time column to left in backtest result list.
- Most AFL engine setup
moved to worker threads. Result - smaller UI thread load in MT charts (better
scalability) and much faster (upto 2x) explorations/scans
in New Analysis window
- New Analysis: added "Info" tab that provides
some summary information about analysis (number of rows, timings, backtest
summary) - contents can be
copied using Ctrl+C / Edit->Copy
NOTE:
End users should only look at "Completed in... sec" line that shows
actual run time of the analysis (scan/exploration/backtest).
The times shown in "timings" row are for Amibroker.com internal
use. In development/testing they help us tweak the performance of various
parts of analysis engine. The detailed timings do not sum up to actual run
time. No further infomation is available at the moment. The "timings" row
is subject to change/removal in the future versions.
If you have problems/questions with the performance of new Analysis window
please copy (Ctrl+C) the contents of Info tab and send to support.
- New Analysis: first-phase backtest signal
processing and ranking moved to non-UI threads, enabling better parallelism,
results in better backtest performance
(upto 2x in with trivial codes)
CHANGES FOR VERSION 5.44.0 (as compared to 5.43.1)
- New Analysis: fixed AddToComposite()
- New Analysis: Interval() function was
working incorrectly in new analysis window. Fixed.
- New Analysis: Backtest
~~~EQUITY symbol did not have "use only local
database" set in 5.43.1. Fixed.
- New Analysis: Backtest performance improved
by removing some unnecessary list view refreshes (now it should never be
slower than old AA even with
simplest formulas)
CHANGES FOR VERSION 5.43.1 (as compared to 5.43.0)
- When range different than "All quotes" was selected, backtest in
new Analysis window could produce incorrect results in 5.43.0. Fixed.
CHANGES FOR VERSION 5.43.0 (as compared to 5.42.0)
- New Analysis Window: multi-threaded Backtest feature implemented (experimental)
Note that only first phase of backtest is multithreaded (each symbol in separate
thread). 2nd phase (custom backtest) is executed in main thread as there
is only one symbol to work on (i.e. equity) and it needs to talk with OLE
which is single threaded and GUI.
- Load/Unload
buttons removed from Plugins dialog. This was developer-only feature and
it was abused by ordinary people who were unloading plugins that were
actually in -use (such as data plugins when being connected to given data
source)
- ListViews: the last line (partially shown) in RT quote window was
not easily selectable. Fixed
- New Analysis window: Implemented Parameters dialog
- AFL: GetCursorMouseButtons()
sometimes missed clicks when multithreading was on and formula took ages
to execute. Now it is now 100% reliable.
- Auto-selection of proper layer based
on selected viewing interval
NOTE: This feature can be turned off by click with RIGHT mouse button over
layers window and UNCHECKING "Auto-select layer"
- IRA accounts support - implemented Settlement
delay in backtester, via SetOption("SettlementDelay",
x )
"SettlementDelay" option describes the number of days (not bars)
it takes for sale proceeds to settle and be available for opening new positions.
SetOption("SettlementDelay", 3 ); // this will cause that proceeds
from sale are only available for trading on 3rd day after sale
For detailed tracking
"
Detailed log" report option now shows available and unsettled funds for
T+1, T+2 and so on
Note: when using this option it is recommended to use backtestRegularRaw
instead of backtestRegular, otherwise some trades may not be entered
because funds are not settled immediately and you need to be able to enter
not on first but subsequent buy signals and that is exactly what backtestRegularRaw
offers.
Note2: old backtester (Equity() function) ignores settlement delay
- Zoom in/out toolbar buttons zoom in finer steps (+/-10%)
- Analysis ListView,
RMB menu new option: "Add Rank column" - adds
a column with ordinal rankings based on current sort or just row number column
when list is not sorted
- New feature: Adding new chart/research/account/analysis
via (+) tab
- New Analysis window: Implemented SetSortColumns
- New Analysis window: Implemented
AddSummaryRows
CHANGES FOR VERSION 5.42.0 (as compared to 5.41.0)
- Implemented right click menu in new Analysis windows (Add symbols to watchlist/Show
arrows functionality)
- Zoom in/out toolbar buttons now have auto-repeat feature
- In 5.41.0 Ctrl+C from
list view copied text without tabs (column separators). Fixed
- In 5.41.0 did not
refresh progress dialog optimization status list. Fixed. (owner draw list
view initial size is retrieved in PreSubclass now)
- In 5.41.0 did not display
Time&Sales in reverse order (newest on top). Fixed.
CHANGES FOR VERSION 5.41.0 (as compared to 5.40.3)
-
New Analysis window (File->New->Analysis) - featuring multithreaded
Scan and Exploration
Performance note:
to fully benefit from multithreading it is best to use AmiBroker local NATIVE
database (not external)
as it is the only database that can deliver data quickly enough.
Tests show that on AmiBroker native databases scans and explorations are
100% scalable to multiple cores
- i.e. for example would run upto 8 times faster on 8 CPU/core machine.
IMPORTANT: This window is work-in-progress. Multithreaded Backtest and Optimization
features will be added later.
- AFL: AddColumn - added mini bar charts to explorations
Exploration now features ability to create mini bar charts in individual cells.
AddColumn has new parameter 'barchart'
AddColumn( ARRAY, "Caption", format = 1.2, fgcolor = colorDefault,
bkcolor = colorDefault, width = -1, barchart = null )
'barchart' parameter accepts values from 0...100 represening percentage width
of bar chart displayed in a cell
the in-cell bar chart is drawn with bkcolor (background color).
Example usage:
Filter=1;
AddColumn( Close, "Close" );
rank = PercentRank( Close, 100 );
Color = ColorHSB( rank * 64/100, 255, 255 );
AddColumn( rank, "100-day percent rank", 1.2, colorDefault, Color,
-1, rank );
Note that although this example uses same value for numeric display and chart
bar width, it does NOT need
to be the same, i.e. numerical value of the cell is independent from bar chart.
- Totally rewritten listview with very efficient owner draw code speeds up
list view scrolling/resizing/repainting more than 10 times. Native system
ListView control is terribly slow on Windows XP/Vista/7 (surprisingly it
was many
times faster in Win9x!)
- AFL: Percentile()
does a param check for range > 0 now
- Mini-chart in RT Quote window - Mini chart shows where LAST price is within
LOW-HIGH range.
- Errors and
warnings are now displayed in red color in the indicator pane
- During actual
GDI chart rendering AmiBroker measures time and if it exceeds 500ms timeout
it stops rendering with Warning 901.
This check is required because GDI rendering occurs in GUI thread and if GUI
thread does not process messages for half second Windows will think that application
is "not responding".
This prevents making application stuck with some overly complex, possibly incorrect
formulas that call hundreds of Plot()s
- Warning 502: Calling Plot()/PlotOHLC
over 500 times is displayed in indicator in runtime to prevent abuse
- All list
views, pressing Ctrl and NumPad'+' automatically adjusts column widths to
content
- if data are missing in the in-memory cache, Foreign()
calls from non-GUI threads use synchronous retrieval method for reliability.
This provides reliable results in AA but may slow down the multi-threaded operations
if cache size is too small and user uses more Foreign() calls than in-memory
cache size.
IMPORTANT:
For optimum performance in-memory cache setting (Tools->Preferences->Data)
should be GREATER than number of Foreign() calls in any single formula used.
Values lower than that cause lots of disk activity and serialization of all
Foreign calls that means that additional threads must wait for data retrieval
to complete.
- Old
and new Analysis window: outputting millions of rows to listview is much
faster now
- All list views - Ctrl+A (Select All) made much faster
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