June 13, 2008 11:24
THIS IS A BETA VERSION OF THE SOFTWARE. EXPECT BUGS !!!
Backup your data files and entire AmiBroker folder
IMPORTANT: This archive is update-only. You have to install full version 5.10 first.
Just run the installer and follow the instructions.
Then run AmiBroker. You should see "AmiBroker 5.11.0 beta" written in the About box.
See CHANGE LOG below for detailed list of changes.
CHANGES FOR VERSION 5.11.0 (as compared to 5.10.1)
When separate long/short ranking is enabled, the backtester maintains
TWO separate "top-ranked" signal lists, one
for long signals and one for short signals. This ensures that long and short candidates are independently even if position score
is not symetrical (for example when long candidates have very high positive scores while short candidates have only fractional negative scores).
That contrasts with the default mode where only absolute value of position score matters, therefore one side (long/short) may completely dominate ranking if score values are asymetrical.
When SeparateLongShortRank is enabled, in the second phase of backtest,
two separate ranking lists are interleaved to form final signal list by
first taking top ranked long, then top ranked short, then 2nd top ranked long, then 2nd top ranked short, then 3rd top ranked long
and 3rd top ranked short, and so on... (as long as signals exist in BOTH long/short lists, if there is no more signals of given kind, then
remaining signals from either long or short lists are appended)
Entry signals(score):ESRX=Buy(60.93), GILD=Short(-47.56), CELG=Buy(57.68), MRVL=Short(-10.75), ADBE=Buy(34.75), VRTX=Buy(15.55), SIRI=Buy(2.79),
As you can see Short signals get interleaved between Long signals even though their absolute values of scores are smaller than corresponding scores of long signals. Also there were only 2 short signals for that particular bar so, the rest of the list shows long signals in order of position score
Although this feature can be used independently, it is intended to be used in combination with MaxOpenLong and MaxOpenShort options.
SetOption("MaxOpenPositions", 15 );
SetOption("MaxOpenLong", 11 );
SetOption("MaxOpenShort", 7 );
The value of ZERO (default) means NO LIMIT. If both MaxOpenLong and MaxOpenShort
are set to zero (
or not defined at all) the backtester works old way - there is only global limit active (MaxOpenPositions) regardless of type of trade.
Note that these limits are independent from global limit (MaxOpenPositions).
This means that MaxOpenLong + MaxOpenShort may or may not be equal to MaxOpenPositions.
If MaxOpenLong + MaxOpenShort is greater than MaxOpenPositions
then total number of positions allowed will not exceed MaxOpenPositions, and individual long/short limits will apply too.
For example if your system MaxOpenLong is set to 7 and maxOpenShort is set to 7 and MaxOpenPositions is set to 10
and your system generated 20 signals: 9 long (highest ranked) and 11 short, it will open 7 long and 3 shorts.
If MaxOpenLong + MaxOpenShort is smaller than MaxOpenPositions (but greater
than zero), the system won't be able to
open more than (MaxOpenLong+MaxOpenShort).
Please also note that MaxOpenLong and MaxOpenShort only cap the number of
open positions of given type (long/short).
They do NOT affect the way ranking is made. I.e. by default ranking is performed using ABSOLUTE value of positionscore.
If your position score is NOT symetrical, this may mean that you are not
getting desired top-ranked signals from one side.
Therefore, to fully utilise MaxOpenLong and MaxOpenShort in rotational balanced ("market neutral") long/short systems
it is desired to perform SEPARATE ranking for long signals and short signals.
To enable separate long/short ranking use:
SetOption("SeparateLongShortRank", True );
AB = new ActiveXObject("Broker.Application");
AA = AB.Analysis;
It returns the number of days that passed since January 1st, 1900, counting from 1. January 1, 1900 is serial number 1, and January 1, 2008 is serial number 39448 because it is 39,448 days after January 1, 1900. Technically is equal to Windows OLEDATE and Excel's DATEVALUE function.
The function can be used for calculations that involve calendar days as
opposed to trading days and replaces previously proposed AFL solution
Now RefDays can be implemeted as follows:
SetBarsRequired( 365, 0 );
function RefDays( Array, Days )
td = DaysSince1900();
result = Null;
if( Days < 0 )
for( i = BarCount -1; i >= -Days; i = i - 1 )
backday = td[ i ] + Days; // Days is negative
for( j = -Days/2; j < i; j++ )
if( td[ i - j ] <= backday )
result[ i ] = Array[ i - j ];
Plot( C, "C", colorRed );
Plot( Ref( C, -252 ), "Close 252 bars back", colorBlue );
Plot( RefDays( C, -365 ), "Close 365 days back", colorGreen );
HOW TO REPORT BUGS
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