d, sorry for the delay... This is not the best example but may
do for starters. I am still playing with it and the display varies
depending on the system's state. I set Blank Bars to the Right of the chart to
2 to give space for text beyond the last bar. Using "\n" I
concatenate various Status msgs I want to see, then display that
with one PlotText(). Typically i would like to know the states of my next
trade or the trade in progress: qualifiers, stops and limits, etc. Global
system status is displayed in the title, not shown here. I trade 1 minute
RT.
I sure find it easier to trade having all relevant information
around the last bar...
best regards,
herman
//
On Chart Bar info
LMsg
=
//"Ask:"+PadStringL(NumToStr(AskPrice,1.2),8)+"\n"+
WriteIf(
IBPosSize>0," LONG \n"+" "+PadStringL(NumToStr(IBPosSize,1.0,False),6)+"
\n","")+
//WriteIf( RTBuy," "+ORderType+" \n","")+
WriteIf(
LastValue(LQualifier1), " Q1True \n","")+
WriteIf( LastValue(LQualifier2),
" Q2True \n","")+
WriteIf( LastValue(LBreakOut),
"BreakOut\n","")+
WriteIf( LastValue(LQualifier1) AND
LastValue(LQualifier2) AND LastValue(LBreakOut)," BUY \n","")+
WriteIf(
IBPosSize>0, "PT: "+NumToStr(LongPTPrice,1.2),"");
SMsg=
WriteIf(
IBPosSize<0," SHORT \n"+"
"+PadStringL(NumToStr(abs(IBPosSize),1.0,False),6)+" \n","")+
//WriteIf(
RTShort," "+ORderType+" \n","")+
WriteIf( LastValue(SQualifier1), " Q1True
\n","")+
WriteIf( LastValue(SQualifier2), " Q2True \n","")+
WriteIf(
LastValue(SBreakOut), "BreakOut \n","")+
WriteIf( LastValue(SQualifier1)
AND LastValue(SQualifier2) AND LastValue(SBreakOut)," SELL
\n","")+
WriteIf( IBPosSize<0,
"PT:"+NumToStr(ShortPTPrice,1.2),"");
PlotText( LMsg, BarCount,
LastValue(O)+0.03, 5, 1);
PlotText( SMsg, BarCount, LastValue(O)-0.03, 4,
1);
PlotShapes(IIf(LastBar,shapeHollowSquare,shapeNone),1,0,C,0);
//PlotText(
" Bid \n"+NumToStr(BidPrice,1.2), BarCount+3, Max(AskPrice+0.02,BidPrice),
5);
//PlotText( " Ask \n"+NumToStr(AskPrice,1.2), BarCount+3,
Min(askPrice,BidPrice-0.02), 4);
PlotText( NumToStr(LongLimitPrice,1.2),
BarCount-2, LongLimitPrice+0.01, 5);
PlotText(
NumToStr(ShortLimitPrice,1.2), BarCount-2, ShortLimitPrice-0.02,
4);
If you get a chance could take a pic of this and send it?
And a code snippet of how you do this would be
great!!
d
From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx]
On Behalf Of Herman van den Bergen
Sent: Wednesday, February 15, 2006 7:20
AM
To: amibroker@xxxxxxxxxxxxxxx
Subject: RE: [amibroker] AmiBroker
4.77.0 BETA released
Hi Chuck,
Normally i display Trading
and System stats (Recent Trades, Equity, Critical Param, etc. ) in table
format in the Chart Title. I also displayed there action information on the
current trade, such as various levels of Trade entry, partials fills, order
status, etc. I know you can use the interpretation screen for this but i
prefer all the "action" in one window. The problem is that in Real-Time
trading the tile is far removed from the action at the last bar and one tends
to miss events because of the continual refocusing that is
required.
The new PlotText() allows me to show all the "action"
information right above/below the last bar in nice colors, now I only have to
pay attention to a few square inches of the chart during trading, instead of
two opposite corners of the monitor. Much more relaxing, no more eye fatigue
:-)
best regards,
herman
-----Original
Message-----
From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx]On
Behalf Of cstrader
Sent: Tuesday, February 14, 2006 8:12 PM
To:
amibroker@xxxxxxxxxxxxxxx
Subject: Re: [amibroker] AmiBroker 4.77.0 BETA
released
Herman. What do you mean by this:
....working
on code to move trade-stats from the Title to the RT
bar.
Thanks!
----- Original Message -----
From: Herman van
den Bergen
To: amibroker@xxxxxxxxxxxxxxx
Sent: Tuesday, February 14,
2006 7:33 PM
Subject: RE: [amibroker] AmiBroker 4.77.0 BETA
released
Thank you Tomasz, some great new features!
I love
the PlotText and i am already working on code to move trade-stats from the
Title to the RT bar. Also, now RT trading information can be placed right at
the last bar for easy viewing. Good stuff!!!
best
regards,
herman
-----Original Message-----
From:
amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx]On
Behalf Of Tomasz Janeczko
Sent: Tuesday, February 14, 2006 5:07 PM
To:
amibroker@xxxxxxxxxxxxxxx; amibroker-beta@xxxxxxxxxxxxxxx;
amibroker-news@xxxxxxxxxxxxxxx
Subject: [amibroker] AmiBroker 4.77.0 BETA
released
Hello,
A new beta version (4.77.0) of AmiBroker
has just been released.
It is available for registered users only from
the members area at:
http://www.amibroker.com/members/bin/ab4770beta.exe
(File
size: 1 093 693 bytes, 1 MB)
If you forgot your user name / password to
the members area
you can use automatic reminder service at: http://www.amibroker.com/login.html
The instructions
are available below and in the "ReadMe" file
( Help->Read Me menu from
AmiBroker )
IMPORTANT NOTES:
If you are using Firewall
you may need to check if it did not block Broker.EXE file after upgrade. (It
happened to some users that firewall blocked AmiBroker after upgrade and they
could not connect to RT data sources due to that)
Best
regards,
Tomasz Janeczko
amibroker.com
AmiBroker 4.77.0 Beta Read
Me
February 14, 2006 22:51
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 4.70 first.
Just run the
installer and follow the instructions.
Then run AmiBroker. You should see
"AmiBroker 4.77.0 beta" written in the About box.
UPGRADE
ALERT
Version 4.75.x beta requires license for v4.30 or higher. Users
who registered before March 5th, 2003 (version 4.20 or older) need to purchase
upgrade - in such case you will see "LICENSE EXPIRED" message in the About
box.
See CHANGE LOG below for detailed list of changes.
CHANGE
LOG
CHANGES FOR VERSION 4.77.0 (as compared to 4.76.0)
styleDashed now
uses correct background color when it is modified using
SetChartBkColor
AFL Editor: when there is nothing more to undo/redo
beep sound is produced
AFL: OBV() and AccDist() now work correctly
with TimeFrameSet (#26768)
AFL Editor: Edit->Replace implemented
(Ctrl+H shortcut)
CBT: AddCustomMetric now has new parameter that
controls number of decimal places used to display custom
metric
Trade.AddCustomMetric( "Name", value, [optional] decplaces = 2
);
Backtester.AddCustomMetric( "Name", Value, [optional] LongOnlyValue
= Null, [optional] ShortOnlyValue = Null, [optional] decplaces = 2
);
where
decplaces defines how many decimal places are used to
display given metric in the report.If not specified it defaults to 2 decimal
places.
Example code:
bo.AddCustomMetric( "Somestat", 100*kr,
Null, Null, 4 ); // 5th parameter controls number of decimal
places
Tooltip "value" field now uses Prefs setting
(Tools->Preferences->Misc: "Decimal places in chart titles/tools") + 1
digit decimal points
All Fibonbacci tools now use user-defined
number of decimal places (Tools->Preferences->Misc: "Decimal places in
chart titles/tools").
Note that this setting applies to NEWLY drawn or
MODIFIED fibonacci retracements. Already existing ones won't be affected until
you modify/move them.
Added new submenu under "Symbol": "Real Time
Quote" with 3 new options: Add selected symbol / Add watch list / Remove all
symbols
IMPORTANT NOTE: to see new menu you need to go to
Tools->Customize, select "MENU" bar and press "RESET"
button
AFL: PlotText("Text", x, y, color, bkcolor = colorDefault
)
New AFL function:
PlotText( "text", x, y, color, bkcolor =
colorDefault )
Writes text in specified co-ordinates
where
x
- is x-coordinate in bars (like in LineArray)
y - is y-coordinate in
dollars
color is text color
bkcolor is background color
If
bkcolor is NOT specified (or equal to colorDefault) text is written with
TRANSPARENT background
any other value causes solid background with
specified background color
Example:
Plot(C,"Price", colorBlack,
styleLine );
Plot(MA(C,20),"MA20", colorRed );
Buy=Cross( C, MA(C,20
) );
Sell= Cross( MA( C, 20 ), C );
dist = 1.5*ATR(10);
for(
i = 0; i < BarCount; i++ )
{
if( Buy[i] ) PlotText( "Buy\n@" + C[ i
], i, L[ i ]-dist[i], colorGreen );
if( Sell[i] ) PlotText( "Sell\n@" + C[
i ], i, H[ i ]+dist[i], colorRed, colorYellow );
}
PlotShapes( Buy *
shapeUpArrow + Sell * shapeDownArrow, IIf( Buy, colorGreen, colorRed )
);
AFL: VarGetText
New function
VarGetText( "varname"
)
the same as VarGet but always returns always string values
(if
underlying variable has different type it is converted to
string)
Allows for example appending to text variable no matter if it
is defined earlier or not:
Title = VarGetText("Title") + "something";
// this will work correctly regardless of whenever title was defined earlier
or not]
VarSetText
New function
VarSetText( "varname",
"value" )
the same as VarSet but operates on string
values.
Auto-analysis backtest result summary modified (added row
count and removed wordwrap)
Enlarged "Additional commands" field in
ASCII Import Wizard
CBT: Fixed "Out of range" message generated by
OLE wrappers when GetValue method of CBT Metrics object returned infinite
value (for example as result of division by zero)
Fixed handling of
CLICK - DRAW - CLICK drawing mode (#26994) during RT refresh
Fixed
incorrect candle color occuring sometimes when candle body was only 1-pixel
high
Fixed potential crash occuring sometimes when RTQ window was
never shown but RT update arrived
Fixed problem with double arrows
appearing on chart with ID == 1
Fixed problem with selected date in
Print/PrintPreview/Image copy
RTQ context menu "Delete symbol"
renamed to "Remove symbol"
UI: simplification, Removed (default)
from File->Database Settings Base Time interval Combo and "(default)" from
local data storage and removed "IMPORTANT ..." static
CHANGES FOR
VERSION 4.76.0 (as compared to 4.75.2)
Renamed "Number of bars to load" to
just "Number of bars"
Fixed problem with weird Time&sales
background colors (bug introduced in 4.75.x)
Fixed 1.#INF in P/E
colum (RT quote window)
Editor: fixed actionBacktest /
actionExplore mix in auto-complete dropdown
Chart Y-axis can now be
displayed as fractions (1/4, 1/8, 1/16, 1/32, 1/64, 1/128) - to switch this
use Parameters -> GRID -> FORMAT
CBT: Trade object has now
"Handle" property that can be passed to ExitTrade and ScaleTrade methods
instead of symbol to allow control over exiting/scaling multiple positions of
the same symbol
// This is sample formula that allows
// to open
multiple, separate positions on the same symbol
// without averaging effect
(i.e. each position on the same
// symbol is completely
independent).
//
// Sample code is provided for trading one symbol
//
Enter symbol you want to trade below
Symbol =
"MSFT";
Buy=Sell=Short=Cover=0; // real rules are defined inside custom
backtest proc
SetCustomBacktestProc(""); // enable custom
backtest
if( Status("action") == actionPortfolio )
{
// actual backtest routine
// (low-level)
bo = GetBacktesterObject();
SetForeign( Symbol
);
// make sure to calculate actual buy and buyprice arrays
for symbol we need to backtest
Buy = 1; // For testing
purposes just enter new position every bar
BuyPrice =
Open;
RestorePriceArrays();
// actual
backtest loop
bo.PreProcess();
for( i = 1;
i < BarCount; i++ )
{
//
first update backtest stats and handle
stops
bo.UpdateStats( i, 0
);
bo.HandleStops( i
);
bo.RawTextOutput("Bar " + i );
if( Buy[ i -
1 ] ) // if buy signal in previous bar
{
bo.EnterTrade( i,
Symbol, True, BuyPrice[ i ], 500 /* $5000 into one trade
*/);
}
for( OpenPos =
bo.GetFirstOpenPos(); OpenPos; OpenPos = bo.GetNextOpenPos()
)
{
// exit
positions if their age is > 5 bars and they are
profitable
if(
OpenPos.BarsInTrade > 5 AND OpenPos.GetProfit() > 0
)
{
//
HERE IS A NEW PART
!!!
//
WE ARE PASSING HANDLE instead of ticker
symbol
// THIS ENSURES PROPER OPERATION even if we have multiple positions of the
same
//
stock
bo.ExitTrade( i, OpenPos.Handle, OpenPos.GetPrice( i, "O" )
);
}
}
bo.RawTextOutput("Number of open
positions: " + bo.GetOpenPosQty()
);
bo.UpdateStats( i, 2
);
}
bo.PostProcess();
}
CBT: Small fix for low-level CBT backtest -
internal current bar counter is set now via UpdateStats
ASCII
import wizard: Additional commands field accepts "ENTER" key alone (previously
one needed CTRL+ENTER to create new line)
ASCII importer limits the
volume to 2147483647 so after convertion to 32bit integer it never becomes
negative
Added parameter list to backtest report (Settings
page)
CHANGES FOR VERSION 4.75.2 (as compared to 4.75.1)
when no
data we available chart background is correct now (it was black instead of one
choosen in prefs in 4.75.x)
Added ability to disable fixed ruin
stop
When you add
SetOption("DisableRuinStop", True);
to your
formula the backtester will not use built in 99.96% loss stop (ruin) Note: it
is recommended NOT to use it unless you really have to.
added new
option to SetOption:
SetOption("EveryBarNullCheck",
True)
SetOption("EveryBarNullCheck", True)- allows to turn on checking
for Nulls in arithmetic operations on every bar in the array(by default it is
OFF - i.e. AmiBroker checks for nulls that appear in the beginning of the
arrayand in the end of the array and once non-null value is detected it
assumes no further holes (nulls) in the middle). Turning "EveryBarNullCheck"
to True allows to extend these checks to each and every barwhich is the way
4.74.x and earlier versions worked.
Note however that turning it on
gives huge performance penalty (arithmetic operations are performed even 4x
slower when this option is ON, so don't use it unless you really have
to).
Added small result summary after backtest in the status
line
Fixed problem with plotting xshifted charts occuring when
formula referenced future bars
logical (boolean) operators check
for nulls on every bar and treat null as "false" to maintain backward
compatibility with formulas written for previous versions
Modified
file dialog buffer size from 262144 (0x40000) bytes to 262143 (0x3FFFF) to
workaround 16 bit (64KB) buffer limit of Windows 95/98/NT4 (yes surprisingly
NT4 is limited to 64K buffer in file dialogs)
16-bit windows (95/98)
and NT4 were treating 0x40000 as 0 (zero) because only lower 16 bits were
interpreted. Thanks to move to 0x3FFFF it is now interpreted as 0xFFFF on 16
bit windows.
Potential crash fixed when formula using
AddToComposite atcEnableInBacktest is verified in the AFL
editor
Added XShift parameter to PlotOHLC and PlotForeign
functions
fixed re-mapping of built-in and custom colors in grid
color picker
CHANGES FOR VERSION 4.75.1 (as compared to
4.75.0)
ParamColor now accepts 24 bit colors without
crashing
Null values appearing at the end of data series (array)
are handled appropriately (propagate through arithmetic operators)
This
fixes problem that 4.75.0 had with "trendline" formulas that used Null values
put into the array at the end of the data series.
Most recently
picked drawing tool color is preserved between runs
EncodeColor was
not handling all 24 bit color combinations correctly. Fixed
now.
Chart tree fix: Moving or renaming formula in charts tree now
updates all paths in indicators that use this formula
CHANGES FOR
VERSION 4.75.0 (as compared to 4.74.6)
New chart style (styleCloud) to be
used to create "cloud" chart as in Ichimoku charts. Also useful for indicator
charts like MACD.
This style fills non-rectangular (free shaped) area
between HIGH and LOW arrays provided
by PlotOHLC function. Open and Close
arrays are not relevant for plotting however Close
is used as usual to
display value label and title. So recommended use is to use "upper" bounding
value
in Open and High arrays and "lower" bounding value in "Low" and
"Close" arrays
Sample Ichimoku cloud:
SL = ( HHV( H, 26 ) + LLV( L, 26)
)/2;
TL = ( HHV( H, 9 ) + LLV( L, 9 ) )/2;
DL = Ref( C, 25 );
Span1 =
Ref( ( SL + TL )/2, -25 );
Span2 = Ref( (HHV( H, 52) + LLV(L, 52))/2,
-25);
Plot( C, "Price", colorBlack, styleCandle );
Plot( SL,
"SL", colorRed, styleThick );
Plot( TL, "TL", colorGreen, styleThick
);
PlotOHLC( 0, span1, span2, span2, "Cloud", colorLightOrange, styleCloud
);
Simple MACD cloud:
m = MACD();
Plot( Signal(), "Signal",
colorBlue, styleThick );
PlotOHLC( m,m,0,m, "MACD", IIf( m > 0,
colorGreen, colorRed ), styleCloud );
Another MACD cloud (difference):
m
= MACD();
s = Signal();
Plot( s, "Signal", colorBlue);
Plot( m,
"MACD", colorRed );
PlotOHLC( m,m,s,m, "MACD", IIf( m > s, colorLime,
colorLightOrange), styleCloud );
when File->Open database or MRU
list is choosen then old database is saved first
When default
database is deleted, AB now asks for new default database folder, instead of
re-creating it
when database is deleted from the outside and user
picks it via MRU list -then gets removed from MRU list and is not recreated
anymore
When AmiBroker is launched with incorrect "Start in"
(working directory) then it automatically switches to "last good"
path
" Last good" path is saved in the registry
HKEY_CURRENT_USER\TJP\Broker\Defaults\LastGoodPath, during successful launch
in correct directory (whenever working directory is correct or not it is
determined by checking for presence of Broker.chm file (help
file))
Using correct working directory is important because AmiBroker
uses relative paths to most components.
AFL: new function:
StaticVarRemove()
StaticVarRemove("varname")
removes static variable
and releases associated memory
Start-up time decreased
significantly by implementation of on-demand loading of formulas
(on
slow, low-end machines loading time decreases from 10 seconds to just 0.5
second)
printf/StrFormat/SelectedValue functions no longer affect
number of extra future bars calculated by QuickAFL
Minor plugin
status change (as in IB backfill) does not cause sound (only tooltip is
displayed)
Increased the limit of files that can be selected using
Windows file dialog
Now import wizard and ascii importer file dialogs use
256KB buffer for file names that on average should allow 20000 files to be
selected at once.
Further speed improvements by rewriting chart ID
lookup routine (GetChartInfoByID)
Chart title string is clipped so
Y axis is never obscured
Chart title can be automatically wrapped
now
Use 'Parameters' window,
" Axes & Grid"
tab,
Miscellaneous->Wrap title: YES
If you want to set it
programmatically from the formula use
SetChartOptions( 2, chartWrapTitle
);
Auto-hide panes slide slightly faster
All basic array
arithmetic and logical operators inlined and hand optimized on assembly level
for speed, gives upto 450% speed increase in basic array
calculations
Example speed increases:
a) purely "theoretical"
example
million iterations of array addition
for( i = 0; i < 1000;
i++ )
for( k = 0; k < 1000; k++ )
Sumh = H +
L;
runs 4.8 times (+480%) faster (5 seconds in 4.75 compared to 24
seconds in 4.74 and older, Athlon64@xxxx)
2000 data bars.
This gives
( 2000 * 1000000 additions ) / 5 sec = 400 MEGAFLOPS (millions of floating
point operations per second) AFL array-based AFL execution speed.
b)
"real-world" examples:
" Projection Oscillator"
http://www.amibroker.com/library/detail.php?id=344
single
security optimization runs 85% faster
(13 seconds (4.75) compared to 24
seconds (4.74 or older) )
" RSIS"
http://www.amibroker.com/library/detail.php?id=153
single-security
optimization 5000 iterations runs 21% faster
(28 seconds (4.75) compared to
34 seconds (4.74 or older))
NOTE: Performance increase depends on
complexity of the formula. Biggest gains can be observed for formula doing
LOTS of mathematical calculations on arrays (using lots of +, -, *, /, ^, %,
comparisions <, >, ==, !=, <=, >=, etc).
AFL: new
function: SetChartBkColor( color )
sets chart background to user-specified
color
Added View->Time & Sales menu back
Added
chart timing display (you can turn it on via Tools->Preferences->Display
chart timing)
when turned on, in the bottom of each chart the following
information is displayed:
Total time X sec, AFL exec time Y sec (Z %), #
extra bars back Q, fwd R
where
X - is total time in second spent
during chart refresh ( this includes AFL execution and actual screen
painting/drawing, grid / scale calculations, etc)
Y - is time spent in
chart AFL execution only (without any actual screen painting, grid / scale
calcs)
Z - is percentage of time that AFL execution takes compared to total
time required for refresh
Q - is a number of previous bars (before first
visible bar) that are needed to calculate the indicator (QuickAFL
estimation)
R - is the number of future bars (after last visible bar) that
are needed to calculate the indicator (QuickAFL estimation)
Added
asin/acos to the AFL function reference
AFL: 24-bit (16 million)
truecolor support for indicators and exploration output.
new
ColorRGB() and ColorHSB functions to access full 24 bit
palette
ColorRGB( red, green, blue )
returns color value to be
used in Plot/PlotOHLC/AddColumn/AddTextColumn
red, green, blue - represent
color component values in range 0..255 each
For more information about
RGB color model please read:
http://en.wikipedia.org/wiki/RGB_color_model
ColorHSB(
hue, saturation, brightness )
returns color value to be used in
Plot/PlotOHLC/AddColumn/AddTextColumn
hue - represents gradation of
color within the optical spectrum (as in rainbow)
saturation represents
"vibrancy" of the color
brightness represents brightness.
Each
parameter ranges from 0 to 255, where 0 represents 0%
saturation/brightness
or 0 degree hue in HSV color wheel,
and 255
represents 100% saturation/brightness or 360degrees hue in HSV color
wheel
When you modify hue from 0 to 255 you will see
consecutive
rainbow colors starting from red, through yellow and green to
blue and violet.
For more information about HSB color space please
read:
http://en.wikipedia.org/wiki/HSB_color_space
Example
MA rainbow chart (bring up parameters dialog and play with it):
side =
1;
increment = Param("Increment",2, 1, 10, 1 );
for( i = 10; i < 80;
i = i + increment )
{
up = MA( C, i
);
down = MA( C, i + increment );
if( ParamToggle("3D effect?", "No|Yes" ) )
side =
IIf(up<=down AND Ref( up<=down, 1 ), 1, 0.6 );
PlotOHLC( up,up,down,down, "MA"+i, ColorHSB( 3*(i - 10),
Param("Saturation", 128, 0, 255 ),
side *
Param("Brightness", 255, 0, 255 ) ), styleCloud | styleNoLabel
);
}
///////
Color-parade exploration
Filter=1;
for( i
= 0; i < 256; i = i + 16 )
AddColumn( C, "C", 1.2, colorDefault,
ColorHSB( ( BarIndex() + i ) % 256, 255-i, 255 ) );
CHANGES FOR
VERSION 4.74.6 (as compared to 4.74.5)
Fixed problem with RTQuote failing
to load symbol list during first show
Fixed problem in AA-Apply
To-Date that was introduced because of tab order change
CHANGES FOR
VERSION 4.74.5 (as compared to 4.74.4)
Toolbar theme was reset when
entering Formula Editor, now it is fixed
Quote Editor list now
remembers columns size and order between runs
Keyboard shortcut
editor now allows using punctation characters like Ctrl+[, Ctrl+], - =,
etc
Automatic Analysis: Pick button now has shortcut on Alt+I to
avoid conflict with Alt+P (Parameters), also fixed tab order
Fixed
ParamDate to return DateNum instead of YYYYMMDD (4 digit year)
CHANGES
FOR VERSION 4.74.4 (as compared to 4.74.3)
New "Appearance" tab in
Tools->Customize, allowing to select menu/toolbar/docking pane themes and
tab location
Layout and Symbol trees are marked for refresh when
database is changed and refreshed when user brings them up
Fixed
exception that occurred after customization when ticker bar was removed from
all toolbars
Fixed ticker bar losing focus when
Shift/Insert/CapsLock/NumLock pressed
Real-time Quote column
order/size is remembered correctly again
CHANGES FOR VERSION 4.74.3 (as
compared to 4.74.2)
Fixed losing focus by ticker combobox when Shift,
CapsLock, NumLock, Insert keys were pressed
CHANGES FOR VERSION 4.74.2 (as
compared to 4.74.1)
Ticker combo is now correctly refreshed on database
change even if moved to other toolbar than default
Previously when
Reset was used on Ticker toolbar it became blank - now it is fixed, ticker
combo is refilled after closing customization mode
Edit field in
Ticker combobox does not scroll horizontally now when edited text is too
long
Numeric keypad keys now work with File MRU menu (most recently
used files)
Global shortcuts continue to work when focus is inside
ticker combo
"Profile" button in View toolbar works correctly
now
CHANGES FOR VERSION 4.74.1 (as compared to 4.74.0)
Fixed
incorrect message displayed in the progress window during some longer
explorations
CHANGES FOR VERSION 4.74.0 (as compared to 4.73.0)
New user
interface: fully user-customizable advanced docking
panes/toolbars/menus.
New UI features:
Tear-Off Tabs
Nested
docking pane grouping
WYSIWYG docking
sliding auto-hide pinnable
windows
modern "Whidbey" look
Tear-Off menus and
toolbars
Add/copy/Delete/Modify/drag-drop commands
User-defined
toolbars
For a little video presentation see:
http://www.amibroker.com/video/uicustomize.htmlNote: toolbar and keyboard
customizations made in old versions need to be re-done because they can not be
imported by new system due to fundamental differences (I am sorry about
that)]
GroupID(), IndustryID(), SectorID, MarketID(),
InWatchList(), IsIndex() and IsContinuous() functions are now affected by
SetForeign
Removed debug messages cluttering DebugView output (that
appeared in 4.73)
Changed the way drawing color picker is working:
now it works like in Word (or other text editor) - keeps selected color even
if drawing with different color is clicke
Fixed false message "The
note has been modified outside the notepad editor." occuring when file did not
exist
OLE: Changed Window.LoadTemplate to return FALSE when file
can not be found
OLE: Window.LoadTemplate now refreshes display so
it is not necessary to use SelectedTab = 0
Removed constant RT
refreshes in interpretation window when text does not
change
ZoomToRange: last selected bar in range is visible after
zooming now
CHANGES FOR VERSION 4.73.0 (as compared to 4.72.1)
OLE:
Window object, new method ZoomToRange( From, To )
ZoomToRange( From, To
)
From and To parameters are of any type that can be converted to date(you
can use string or OLE date for example).
Example code
(JScript):
AB=new ActiveXObject("Broker.Application");
AW =
AB.ActiveWindow;
if( AW.ZoomToRange( "2005-04-01", "2005-08-01" )
)
{
WScript.Echo("Zoom successfull"
);
}
Fixed: Chart got shrinked a bit with each overlaid plot,
now the Y scale does not change (unless really needed)
Fixed:
XShift now works correctly with styleOwnScale and
styleLeftScale
Fixed: Volume chart overlaid on price chart in log
scale (overlay) was compressed to flat line, now it is fixed (volume chart
overlay uses linear scale always)
[#22262]
AFL: Added
AlmostEqual function (completed: 2005-09-16)
AlmostEqual( x, y, ulps =
5 )
this is a helper function for comparing floating point numbers.It
returns True if x and y are equal or almost equal upto defined accurracy
(ulps).It is recommended to use this function instead of equality check (==)
as itleads to more reliable comparisons and less headache caused by IEEE
floating pointacurracy issues.
Parameters:x, y - the numbers or arrays
to be compared,Ulps stands for "units in last place" and represents maximum
relative error of the comparison. Since 32 bit IEEE floating point numbers
have accurracy of 7 significant digits, 1 unit in last place(ulp) represents
relative error of 0.00001 %. The default value of ulps parameter is 5 which
gives roughtly 0.00005% "comparison sensitivity".
Example
code:
if( 1/3 == 0.3333333 )
{
printf("32-bit Floating
point IEEE exact equality\n");
}
if( AlmostEqual( 1/3, 0.3333333 )
)
{
printf("Numbers are almost equal\n");
}
Thanks to
Bruce Dawson for his fast routine.
Optimize() function now checks
if min < max, step > 0 and checks if parameter name is not
empty
Made Time&Sales case insensitive (when "case sensitive
tickers" option is turned off")
OBV/AccDist/Chaikin functions
adjusted to be SetForeign-aware
OLE: Application object new
methods
BOOL LoadLayout( filename )
BOOL SaveLayout( filename
)
AB = new
ActiveXObject("Broker.Application");
AB.LoadLayout("C:\\Program
Files\\AmiBroker\\Data\\Layouts\\Default.awl");
OLE: Window object
new property: SelectedTab
AB = new
ActiveXObject("Broker.Application");
AW = AB.ActiveWindow;
tabindex =
AW.SelectedTab; // read selected tab
AW.SelectedTab = 3; //switch to tab
3
AW.SelectedTab = tabindex; // restore originally selected
tab
Fixed: Exception was generated when GetRTDataForeign was called
with non-existing ticker
OLE: Window object new methods:
LoadTemplate, SaveTemplate
AB = new
ActiveXObject("Broker.Application");
AW =
AB.ActiveWindow;
AW.SaveTemplate("Test.abt");
AW.LoadTemplate("Test.abt");
CHANGES
FOR VERSION 4.72.1 (as compared to 4.72.0)
fixed out-of-memory problem
sometimes occuring during scan of large (>512MB) databases
CHANGES FOR
VERSION 4.72.0 (as compared to 4.71.1)
" Currency" field support in
ASCII importer
added command:
$CURRENCY USD
and
field:
$FORMAT Name,Currency$OVERWRITE 1$AUTOADD 1]
Added
"Additional commands" field in the Import wizard for typing any extra $-
commands that are not available via checkboxes
Added parameter to
AddColumn/AddTextColumn to control column width
AddColumn( ARRAY,
"Caption", format = 1.2, color = colorDefault, bgcolor = colorDefault, width =
-1);
AddTextColumn( "Text", "Caption", format = 1.2, color = colorDefault,
bgcolor = colorDefault, width = -1 );
AddToComposte new flag to
work when Status("action")== actionPortfolio (completed: 2005-09-09)
new
flag is called atcEnableInPortfolio
Example:
if( Status("action"
) == actionPortfolio )
{
... Custom backtest mode here
....
AddToComposite( some_array, "~COMPOSITE", "X",
atcFlagEnableInPortfolio | atcFlagDefaults );
}
AFL added:
tanh(), sinh(), cosh() functions
Hyperbolic tangent, sine and cosine
function
AFL functions: StrToUpper and StrToLower
Fixed:
Tick ASCII import: last tick of previous import was deleted on subsequent
import, now it is corrected
Function to detect mouse button
state
GetCursorMouseButtons() returns mouse button state at the time
when chart formula is executed
0 - if no mouse button is pressed
1 -
if left mouse button is pressed
2 - if right mouse button is pressed
4 -
if middle mouse button is pressed
plus combinations:3 - left + right5 -
left + middle6 - right + middle 7 - left + right +
middle]
GetRTDataForeign (retrieving values for other
symbols)
GetRTDataForeign( "field", "symbol")
Pane is not
deleted if shrinked down to zero (prevents from accidential deletion of
panes)
Plot function now has xshift parameter that allows to
visually shift the chart past the last bar
Example 20-bar Moving average
shifted 10 bars into the future past the last
bar:
Plot(Close,"Close",colorBlack,styleCandle);Plot(MA(Close,20),
"Shifted MA", colorRed, styleLine, Null, Null, 10 );
Note that shift
occurs during plotting and does not affect source array
Removed
data source selection from preferences because it caused user confusion way
too often
Stock.Currency available via OLE
Title
variable now supports new special token {{OHLCX}} which is replaced at runtime
by string "Open ..., Hi .... Lo ... Close (...%)" showing current
price
This way it is possible to implement formula that will show OHLC
prices with number of decimal places set in the
preferences.
Example:
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title
= "{{NAME}} - {{INTERVAL}} {{DATE}} {{OHLCX}} {{VALUES}}" );
Plot( C,
"Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style")
| GetPriceStyle() );
user-definable number of decimal places in
chart titles (completed: 2005-09-09)
Number of decimal places displayed in
default chart title is now user-definable
inTools->Preferences->Miscellaneous"Decimal places in chart
titles".
Allowable values:
-1 - dynamic mode (number of decimal
places automatically adjusted)
0..6 - fixed number of decimal
places
QuoteArray resizing now uses heuristic algorithm to minimize
memory fragmentation and increase performance
atcFlagDeleteValues
now highlighted properly in the AFL editor
CHANGES FOR VERSION 4.71.1
(as compared to 4.71.0)
fixed compatibility problem with AmiQuote (due to
changed order of OLE properties/method while AmiQuote was using old
ones)
now ASCII importer in $TICKMODE does not delete quotes older than
oldest (first) record in the imported file, so you can safely import tick data
from subsequent files (older first, newest later)
CHANGES FOR VERSION
4.71.0 (as compared to 4.70.5)
AFL: added GetCursorXPosition() and
GetCursorYPosition() functions
Functions return current mouse cursor
position.
Values returned are equal to those visible in the status bar, and
these functions require status bar to be visible. Returned values represent
cursor position at the formula execution time (or few milliseconds before it)
and accurracy is subject to pixel resolution of the screen (first cursor
position is read in screen pixels (integer) and then converted to actual value
therefore for example when screen resolution is 1024x768 maximum obtainable
resolution in X direction is 0.1% and in Y direction 0.13%), also X values are
snap to datetime of nearest data bar.
It only makes sense to use these
functions in indicator/interpretation code.
Using them in AA window may
yield random values.GetCursorXPosition() function returns X position in
DateTime format (the same as used by DateTime() function).You can convert it
to string using DateTimeToStr() function.GetCursorYPosition() returns Y
position (as displayed in Y axis of the
chart).
Example:
ToolTip="X="+DateTimeToStr(GetCursorXPosition())
+"\nY="+GetCursorYPosition();
AFL: added DateTimeToStr() and
StrToDateTime() functions
These functions allow to convert string to
datetime format and vice
versa.
Example:
ToolTip="X="+DateTimeToStr(GetCursorXPosition())
+"\nY="+GetCursorYPosition();]
Added ability to store charts as .GIF (in
addition to PNG)
ASCII importer maximum supported line length is increased
to 2048 characters
Fixed: .aflsafe files didn't get deleted
automatically
Added N-volume bars charts and timeframe
support.
Custom N-volume bar intervals are definable (as usual) in
Tools->Preferences->Intraday.
TimeFrame functions were also
extended to support N-volume bars using new TimeFrameMode() function
calling
TimeFrameMode( 0 );
- switches time frame functions to
time-based operation (the default)
TimeFrameMode( 1 );
-
switches time frame functions to N-tick operation (positive values passed to
TimeFrameSet are treated now as N-tick)
TimeFrameMode( 2 );
-
switches time frame functions to N-volume bar operation (positive values
passed to TimeFrameSet are treated nowas N-volme
bars)
Example:
TimeFrameMode( 2 );
TimeFrameSet( 50000 ); //
50'000 share bars..
...do something ...
TimeFrameRestore();
Note:
N-volume bars are somewhat weird (compression of data to N-volume bar may
actually deliver MORE output bars - for example if one tick is 1000 shares and
you have specified 100V bars then single tick will be expanded to TEN 100V
bars - ten times original size)
TimeFrame functions are protected against
array overrun and will not decompress beyond original array size (you will get
an "Error 47. N-volume bar compressed data longer than base time
frame").
Also switching main time frame to some weird N-volume bar value
will result in limiting the output to maximum twice original data size(without
error message).
You should keep that in mind and avoid using too small
N-volume bar intervals that could lead to such condition.
Also due to the
nature of N-volume bars the only TimeFrameSet() function will yield correct
N-volume bar values, TimeFrameGetPrice() may give slightly distorted
results.
It is also possible to use n-volume bars in TimeFrame functions
without calling TimeFrameMode() - it is then necessary to specify n-volume
bars as negative number offset by -1000000 (minus one
million):
TimeFrameSet( -1000000 - 2000 );
// gives 2000V
barsSimilarly formatted negative numbers will be reported by Interval()
function when n-volume bars are selected.
OLE: Save As PNG / GIF
callable from automation
Example script:
AB = new
ActiveXObject("Broker.Application");
AB.ActiveWindow.ExportImage("Test.png");
Plugin
is not called when GetExtraData is used for symbol that has "use only local
database" flag turned on, and NULL is returned instead of an
error
Protected against changing application's current working directory by
printing to file
Toolbar does not get wrapped when main frame window is
resized
OLE: Analysis object has new method MoveWindow( x, y, width,
height) that allows to control position and size of automatic analysis
window
AB = new
ActiveXObject("Broker.Application");
AB.Analysis.MoveWindow( 10, 10, 200,
200 );
It has some restrictions on size: specified size can not
besmaller than 10x10 pixels and can not be bigger than entire screen
dimensions.
Also when "No minimum size for resizing dialogs" box in
UNCHECKED in Tools->Prefs->Misc it won't shink AA window below default
size necessary to fully display all controls.
ASCII importer: added ability
to import tick data from text files
ASCII importer now allows tick data
files to be imported.
Tick data files consist of several records having the
same timestamp.This makes it impossible to use normal import mode which
assumes different (unique) timestampsfor each data row (when same timestamp is
found then new data overwrites old).
To turn on TICK mode you need to
add manually
$TICKMODE 1
line to ASCII importer definition
file.
$TICKMODE is a special mode of importer that allows to import
quotes that haveduplicate time stamps.
It makes two assumptions:
a)
input data should come in the ascending time order (i.e. OLDER records first,
LATEST records last)
b) input data should consist of entire tick history
because importer will DELETE any existing quotes (to avoid creating multiple
copies of the same ticks).
Once again: Turning on
$TICKMODE 1
will
DELETE ANY QUOTES that already exist in the database and then will import all
ticks from input data file.
You have been warned.
For example data
files like
this:
MOL,0,20050606,162959,16400.0000,16400.0000,16400.0000,16400.0000,2MOL,0,20050606,162959,16400.0000,16400.0000,16400.0000,16400.0000,11MOL,0,20050606,162959,16400.0000,16400.0000,16400.0000,16400.0000,40
Can
be imported using the following definition file:
$FORMAT Ticker, Skip,
Date_YMD, Time, Open, High, Low, Close, Volume
$SKIPLINES 1
$SEPARATOR
,
$CONT 1
$GROUP 255
$AUTOADD 1
$DEBUG 1
$TICKMODE
1
Sometimes it happens that input files have invalid timestamps
(seconds > 59).
For
example:
MOL,0,20050606,162970,16400.0000,16400.0000,16400.0000,16400.0000,2
Please
take a closer look at first line shown in this example it has time:16:29:70
(you see 70 seconds !)
So I had to add a special flag to the importer that
works around such data errors.
It is called $ALLOW99SECONDS 1 and will
convert all records with invalid seconds (i.e greater than 59)to 59s.
So
record stamped 16:29:70 will be treated as 16:29:59
Now for tick mode to
work with such incorrect records you would need to add two lines to ASCII
importer definition:
$TICKMODE 1
$ALLOW99SECONDS 1
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
Please note that this
group is for discussion between users only.
To get support from
AmiBroker please send an e-mail directly to
SUPPORT {at}
amibroker.com
For other support material please check also:
http://www.amibroker.com/support.html
SPONSORED
LINKS Investment management software Real estate investment software
Investment property software
Software support Real estate investment
analysis software Investment software
YAHOO! GROUPS
LINKS
Visit your group "amibroker" on the web.
To
unsubscribe from this group, send an email
to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
Your use of
Yahoo! Groups is subject to the Yahoo! Terms of Service.
Please note that this group is for discussion between users only.
To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com
For other support material please check also:
http://www.amibroker.com/support.html
SPONSORED LINKS
YAHOO! GROUPS LINKS