PureBytes Links
Trading Reference Links
|
Ken,
Edit->Copy is provided to copy TRENDLINES !
To copy AA window formula use either CTRL+C (FOCUS has to be
INSIDE EDITOR WINDOW)
or right click in the AFL editor and "Copy"
Best regards,Tomasz Janeczkoamibroker.com
<BLOCKQUOTE
>
----- Original Message -----
<DIV
>From:
Ken Close
To: <A title=amibroker@xxxxxxxxxxxxxxx
href="">amibroker@xxxxxxxxxxxxxxx
Sent: Sunday, November 09, 2003 1:50
PM
Subject: RE: [amibroker] AmiBroker 4.48.1
BETA released
<SPAN
>Brand new morning
here in the states. Crisp, bright, and cold.
<SPAN
>
<SPAN
>Also, the new code
does not allow me to paste into Word editor when copying from AA
window.
<SPAN
>
<SPAN
>The instructions say
to Edit>Copy, yet when the AA window is open and there is a selection,
Ctrl-C is the only way to copy. Or right mouse click and then Copy
(which is still Ctrl-C)
<SPAN
>
<SPAN
>When I go into my
browser window (or the window of any other program), and I select some text,
and I click Ctrl-C, a little icon opens on the lower right corner of my screen
and says x of 24 – Clipboard Item collected.
<SPAN
>
<SPAN
><IMG height=92
src="jpg00334.jpg" width=159>
<SPAN
>
<SPAN
>When I do this within
the AA window, the little icon does not appear. Ctrl-C is NOT capturing
so there is nothing in the clipboard to Paste. Except, unfortunately for
this logic, when trying to paste into Notepad, in which case, the selection is
pasted.
<SPAN
>
<SPAN
>Darn!! Tomasz:
can you think of any windows setting that might have to be changed to allow
this to work on the machines that are having difficulty??
<SPAN
>
<SPAN
>Ken
<SPAN
>
<SPAN
>-----Original
Message-----From: Tomasz
Janeczko [mailto:amibroker@xxxxxx] <SPAN
>Sent: Sunday, November 09, 2003 6:13
AMTo:
amibroker@xxxxxxxxxxxxxxx<SPAN
>Subject: [amibroker] AmiBroker 4.48.1
BETA released
<SPAN
>
<SPAN
>
<SPAN
>Hello,A new beta version (4.48.1) of AmiBroker
has just been released.
<SPAN
>Includes "window linking" (different intervals in
cloned windows), futures support in portfolio
backtester,
<SPAN
>Profit distribution chart, MAE/MFE in trade list and
other improvements.
<SPAN
>It is available for registered users only from the
members area at:<A
href="">http://www.amibroker.com/members/bin/ab4481beta.exeand<A
href="">http://www.amibroker.net/members/bin/ab4481beta.exe(File
size: 621 071 bytes, 620 KB)If you forgot your user
name / password to the members areayou can use automatic reminder service
at: <A
href="">http://www.amibroker.com/login.htmlThe
highlight of this new version is multiple time frame support in
AFL.The instructions are available below and in the "ReadMe" file(
Help->Read Me menu from AmiBroker )
<SPAN
>CHANGES FOR VERSION 4.48.1 (as
compared to 4.48.0)
<SPAN
>Changed code that copies HTML format from AFL editor
to clipboard. (this hopefully will address problems with pasting on some
machines)
<SPAN
>MFE/MAE distribution charts are now available in
Professional Edition only
<SPAN
>zooming is now independent in cloned windows
<SPAN
>CHANGES FOR VERSION 4.48.0 (as
compared to 4.47.0)
<SPAN
>window linking with different bar interval works
now.Just use Window->Clone menu ... this will create a clone of
currently selected window. The difference from previous version is that you
can now select different interval for this cloned window. Cloned windows are
numbered. You can have infinite number of cloned windows and they are linked
within group (change symbol in one window causes change in every linked
window) but the viewing interval is independent.
<SPAN
>cloned windows are now properly saved in a layout.
(note that format has changed slightly and you may get problemstrying to
load into old version the layout saved with NEW version)
<SPAN
>portfolio backtester: added support for backtesting
futures
<SPAN
>portfolio backtest report:+ added profit
distribution chart + added MAE distribution chart (Professional
/previosly known as RealTime/ edition only)+ added MFE distribution
chart (Professional /previosly known as RealTime/ edition
only)
<SPAN
>portfolio trade list: Max. Adverse Excursion (MAE)
and Max. Favorable Excurison (MFE) added
<SPAN
>ApplyStop / ExitAtStop=False feature in rotational
mode works as in regular mode now (checks only trade price for stops, not
H-L range. H-L is checked when ExitAtStop is True)
<SPAN
>AFL Editor - Edit->Copy puts "HTML Format" and
"DwHt" (Dreamweaver HTML format) into clipboard in addition to TXT and RTF
formats. This provides ability to paste nicely formatted codes directly into
Outlook Express and Macromedia Dreamweaver
<SPAN
>Hope this helps.
<SPAN
>
<SPAN
>Best regards,Tomasz
Janeczkoamibroker.com
<SPAN
>AmiBroker 4.48.1 Beta Read Me
<SPAN
>November 9, 2003 12:03
<SPAN
>THIS IS A BETA VERSION OF THE
SOFTWARE. EXPECT BUGS !!!
<SPAN
>Backup your data
files and entire AmiBroker folder first!
<SPAN
>INSTALLATION
INSTRUCTIONS
<SPAN
>IMPORTANT: This archive is
update-only. You have to install full version 4.40
first.
Just run
the installer and follow the instructions.
Then run
AmiBroker. You should see "AmiBroker 4.48.1 beta" written in the About
box.
<SPAN
>See CHANGE LOG below for detailed
list of changes.
<SPAN
>HELP ON NEW FEATURES
New
backtest report
New
report is hugely enhanced compared to old one. It includes separate statistics
for all, long and short sides as well as large number of new metrics. You can
get short help on given figure by hovering your mouse over given field name.
You will see the description in the tooltip. Short explanations are provided
also below:
<SPAN
>Exposure %<FONT
size=2> - <FONT
face="Times New Roman">modified since last release
-'Market exposure of the trading system calculated on bar by bar basis. Sum of
bar exposures divided by number of bars. Single bar exposure is the value of
open positions divided by portfolio equity.
<SPAN
>Net Risk Adjusted Return
% - Net
profit % divided by Exposure %
<SPAN
>Annual Return % <FONT
size=2>- Compounded Annual Return %
(CAR)
<SPAN
>Risk Adjusted Return %
- Annual
return % divided by Exposure %
<SPAN
>Avg. Profit/Loss<FONT
size=2> - (Profit of winners + Loss of
losers)/(number of trades)
<SPAN
>Avg. Profit/Loss %<FONT
size=2> - '(% Profit of winners + % Loss of
losers)/(number of trades)
<SPAN
>Avg. Bars Held<FONT
size=2> - sum of bars in trades / number of
trades
<SPAN
>Max. trade drawdown <FONT
size=2>- The largest peak to valley decline
experienced in any single trade
<SPAN
>Max. trade % drawdown <FONT
size=2>- The largest peak to valley percentage
decline experienced in any single trade
<SPAN
>Max. system drawdown<FONT
size=2> - The largest peak to valley decline
experienced in portfolio equity
<SPAN
>Max. system % drawdown<FONT
size=2> - The largest peak to valley percentage
decline experienced in portfolio equity<FONT
face="Times New Roman">Recovery Factor - Net profit
divided by Max. system drawdown<FONT
face="Times New Roman">CAR/MaxDD - Compound Annual %
Return divided by Max. system % drawdown
<SPAN
>RAR/MaxDD<SPAN
> - Risk Adjusted Return divided by Max. system %
drawdown
<SPAN
>Profit Factor <FONT
size=2>- Profit of winners divided by loss of
losers
<SPAN
>Payoff Ratio<FONT
size=2> - Ratio average win / average
lossStandard Error
- Standard error measures chopiness of equity line. The
lower the better.
<SPAN
>Risk-Reward Ratio<FONT
size=2> - Measure of the relation between the
risk inherent in a trading the system compared to its potential gain. Higher
is better. Calculated as slope of equity line (expected annual return) divided
by its standard error.
<SPAN
>Ulcer Index<FONT
size=2> - Square root of sum of squared
drawdowns divided by number of bars
<SPAN
>Ulcer Performance
Index -
(Annual profit - Tresury notes profit)/Ulcer Index'>Ulcer Performance
Index. Currently tresury notes profit is hardcoded at 5.4. In future version
there will be user-setting for this.
<SPAN
>Sharpe Ratio of trades<FONT
size=2> - Measure of risk adjusted return of
investment. Above 1.0 is good, more than 2.0 is very good. More information <A
href="">http://www.stanford.edu/~wfsharpe/art/sr/sr.htm
. Calculation: first average percentage return and standard deviation of
returns is calculated. Then these two figures are annualized by multipling
them by ratio (NumberOfBarsPerYear)/(AvgNumberOfBarsPerTrade). Then the risk
free rate of return is subtracted (currently hard-coded 5) from annualized
average return and then divided by annualized standard deviation of
returns.<FONT
face="Times New Roman">K-Ratio - Detects inconsistency in
returns. Should be 1.0 or more. The higher K ratio is the more consistent
return you may expect from the system. Linear regression slope of equity line
multiplied by square root of sum of squared deviations of bar number divided
by standard error of equity line multiplied by square root of number of bars.
More information: Stocks & Commodities V14:3 (115-118): Measuring System
Performance by Lars N. Kestner
<SPAN
>Optimization in new portfolio
backtester
From
version 4.43.0 BETA AmiBroker is able to perform optimizations on portfolio
level. The portfolio optimization uses familar function Optimize and allows
upto 10 variables to be optimized. You are able not only to optimize
parameters of indicators but you can also optimize portfolio-level settings
like maximum number of open positions, portfolio level position sizing, etc.
These settings are available via SetOption() function. New fields accepted by
SetOption include: SetOption("MaxOpenPositions"), SetOption("MinShares"). More
are on the way.
Also the
portfolio optimizer gives much more statistics than old one including metrics
like Sharpe ratio, Risk Reward ratio, etc.
New
portfolio backtester
<SPAN
>IMPORTANT:<FONT
size=2> Since the new backtester is
not yet complete.
If you think that there is a bug please report it to <A
href="">bugs@xxxxxxxxxxxxx with all details you
can give including: the formula, HTML report generated by AmiBroker, trade
list or detailed log, etc.
From
version 4.42.0 BETA through some future betas there will be TWO backtesters.
The OLD one that is triggered by pressing "Backtest" or "Optimize" button in
the Automatic Analysis window. And NEW one, portfolio-level backtester that is
triggered by pressing "Portfolio BackTest" or "Portfolio Optimize" button in
Automatic Analysis window.
<SPAN
>Old backtester is untouched and it works exactly the
same way as in pre-4.42 versions<SPAN
>. I have decided to leave it for a while so you can
continue using old your own formulas, results, etc while checking out new
backtester.
New
backtester is not complete yet, but already provides substantial amount of
functionality to make it worthwhile to check it out.
New
backtester works on PORTFOLIO
LEVEL, it means that there is single portfolio equity and
position sizing refers to portfolio equity. Portfolio equity is equal to
available cash plus sum of all simultaneously open positions at given time.
<SPAN
>IMPORTANT:<FONT
size=2> to enable more than one symbol to be
traded you have to add PositionSize variable to your formula, so less than
100% of funds are invested in single security:
<SPAN
>PositionSize = -25; // invest 25% of portfolio equity
in single security
<SPAN
>or
<SPAN
>PositionSize = 5000; // invest $5000 into single
security
You can
use new PositionScore variable to decide which trades should be entered if
there are more entry signals on different securities than maximum allowable
number of open positions or available funds. In such case AmiBroker will use
the absolute value of PositionScore variable to decide which trades are
preferred. See the code below. It implements simple MA crossover system, but
with additional flavour of preferring entering trades on symbols that have low
RSI value. If more buy signals occur than available cash/max. positions then
the stock with lower RSI will be preferred. You can watch selection process if
you backtest with "Detailed log" report mode turned on.
The code
below includes also the example how to find optimum number of simultaneously
open positions using new Optimization in Porfolio mode.
<SPAN
>/*****<FONT face="Courier New"
size=2><SPAN
><FONT
face="Courier New">** REGULAR PORTFOLIO mode <FONT
face="Courier New">** This sample optimization<FONT
face="Courier New">** finds what is optimum number of positions open
simultaneously**
<FONT
face="Courier New">****/
<SPAN
>SetOption("InitialEquity", 20000
);<SPAN
><FONT
face="Courier New">SetTradeDelays(1,1,1,1);<FONT
face="Courier New">RoundLotSize = 1;
posqty
= Optimize("PosQty", 4, 1, 20, 1 );<FONT
face="Courier New" size=2><SPAN
><FONT
face="Courier New">SetOption("MaxOpenPositions",
posqty);
//
desired position size is 100% portfolio equity<FONT
face="Courier New" size=2><SPAN
><FONT
face="Courier New">// divided by PosQty
positionsPositionSize =
-100/posqty;
// The
system is very simple...<FONT face="Courier New"
size=2><SPAN
><FONT
face="Courier New">// MA parameters could be optimized
too...p1 =
10;p2 =
22;// simple MA
crossoverShort=Cross(
MA(C,p1) , MA(C,p2) );<FONT
face="Courier New">Buy=Cross( MA(C,p2) , MA(C,p1)
);// always in the market
Sell=Short;
<FONT
face="Courier New">Cover=Buy;
// now
additional score <SPAN
><FONT
face="Courier New">// that is used to rank equities
// when there are more ENTRY
signals that available//
positions/cashPositionScore =
100-RSI(); // prefer stocks that have low RSI;
<SPAN
>
<SPAN
>Things NOT IMPLEMENTED yet in new portfolio
backtester, to be done soon
<SPAN
>pyramiding
<SPAN
>intra-bar detailed timing
<SPAN
>OLE interface
<SPAN
>etc...
<SPAN
>Automatic Analysis Settings - Portfolio
page
- Max.
Open Positions (previously known as "Max. traded") - the maximum number of
simultaneously open positions. .Settable also using
SetOption("MaxOpenPositions", number ) function.
- Max. #
of signals tracked per bar- the maximum number of buy/sell/short/cover signals
per single bar that AmiBroker will track. Should be set to at least 2 * (Max.
Open Positions) or more. Default of 100 should be fine for most applications.
May be removed in the future. Settable also using SetOption("MaxTracked",
number ) function.
- Report
mode - Trade list - shows regular trade list (as old backtester), Detailed log
- shows very detailed bar-by-bar log with scores, each entry and exit
separately reported, etc.
- Min.
shares - the minimum number of shares that are allowed to buy/short.
Backtester will not enter trades below that limit. Default = 1 is good for
stocks.
Known
differencies between statistics produced by 'old' and 'new' (portfolio)
backtester
<TABLE class=MsoNormalTable cellSpacing=0 cellPadding=0
width="100%" border=1>
<TD
>
<SPAN
>
<TD
>
<SPAN
>Old backtester
<TD
>
<SPAN
>New (portfolio)
backtester
<TD
>
<SPAN
>System and trade drawdown calculations based
on
<TD
>
<SPAN
>Open/Close/H-L range (worst case) selectable in
settings
<TD
>
<SPAN
>Close price only (regardless of settings) -
subject to change
<TD
>
<SPAN
>Max. % trade drawdown
<TD
>
<SPAN
>Calculated based on total
equity
<TD
>
<SPAN
>Calculated based on ACTUAL trade value at entry
point.
<TD
>
<SPAN
>Stats available
<TD
>
<SPAN
>for all trades only
<TD
>
<SPAN
>separately for long, short and all
trades
<TD
>
<SPAN
>Futures backtesting (MarginDeposit, TickSize,
PointValue)
<TD
>
<SPAN
>Supported
<TD
>
<SPAN
>Supported (from 4.48.0)
<TD
>
<SPAN
>PositionSizing
<TD
>
<SPAN
>Based on individual symbol equity
<TD
>
<SPAN
>Based on portfolio equity.
<SPAN
>PositionSize = -25;
<SPAN
>will enter 25% of current porfolio
equity
<TD
>
<SPAN
>Trade statistics
<TD
>
<SPAN
>Include only closed trades, open trade is
reported separately
<TD
>
<SPAN
>Include all trades (closed and those still open
at the end of analysis period). Any open trades are closed out at
'close' price always.
<TD
>
<SPAN
>Exposure
<TD
>
<SPAN
>calculated regardless of position size (no
matter on what is position size if trade is taken for particular bar it
assumes 100% exposure at that bar)
<TD
>
<SPAN
>calculations include now (in 4.43.0) the total
amount of open positions compared to total portfolio equity. Exposure is
calculated on bar by bar basis so if only 50% funds are in open trade,
then exposure for this bar is 0.5. Then individual bar exposures are
summed up and divided by number of bars to produce exposure figure. This
way true market exposure is calculated.
<TD
>
<SPAN
>Multiple security testing
<TD
>
<SPAN
>N independent accounts (multiple single
equity)
<TD
>
<SPAN
>Portfolio equity common to all symbols under
test
<SPAN
>
<SPAN
>
<SPAN
>Multiple time frame
support
Release
4.41 brings ability to use multiple time frames (bar intervals) in single
formula. The time frame functions can be divided into 3 functional groups:
<SPAN
>switching time frame of build-in O, H, L, C, V, OI,
Avg arrays: <FONT
face="Times New Roman">TimeFrameSet, <FONT
face="Times New Roman">TimeFrameRestore
<SPAN
>compressing/expanding single arrays to/from
specified interval: <FONT
face="Times New Roman">TimeFrameCompress,
TimeFrameExpand
<SPAN
>immediate access to price/volume arrays in different
time frame: <FONT
face="Times New Roman">TimeFrameGetPrice
<SPAN
>First group<FONT
size=2> is used when your formula needs to
perform some calculations on indicators in different time frame than currently
selected one. For example if you need to calculate 13-bar moving average on 5
minute data and 9 bar exponential avarage from hourly data while current
interval is 1 minute you would write:
<SPAN
>TimeFrameSet<FONT
face="Courier New" size=2>( in5Minute ); //
switch to 5 minute frame
/* MA
now operates on 5 minute data, ma5_13 holds time-compressed 13 bar MA of 5min
bars */
ma5_13
= MA( C, 13 );
<SPAN
>TimeFrameSet( inHourly );
<SPAN
>// switch now to hourly
mah_9 =
EMA( C, 9 ); // 9 bar moving average from hourly data
<SPAN
>TimeFrameRestore<FONT
face="Courier New" size=2>(); // restore time
frame to original
Plot(
Close, "Price", colorWhite, styleCandle );
// plot
expanded average
Plot(
<SPAN
>TimeFrameExpand<FONT
face="Courier New" size=2>( ma5_13, in5Minute),
"13 bar moving average from 5 min bars", colorRed );<FONT
face="Courier New" size=2><SPAN
><FONT
face="Courier New">Plot( <FONT
face="Courier New"><SPAN
>TimeFrameExpand<FONT
face="Courier New">( mah_9, inHourly), "9 bar moving average from hourly
bars", colorRed );
<SPAN
>TimeFrameSet<FONT
size=2>( <FONT
face="Times New Roman">interval ) - replaces current
built-in price/volume arrays: open, high, low, close, volume, openint, avg
with time-compressed bars of specified interval once you switched to a
different time frame all calculations and built-in indicators operate on
selected time frame. To get back to original interval call TimeFrameRestore()
funciton. Interval is time frame interval in seconds. For example: 60 is one
minute bar. You should use convenient constants for common intervals:
in1Minute, in5Minute, in15Minute, inHourly, inDaily, inWeekly,
inMonthly.
<SPAN
>TimeFrameRestore<FONT
size=2>() - restores price arrays replaced by
SetTimeFrame.Note that only OHLC, V, OI and Avg built-in variables are
restored to original time frame when you call TimeFrameRestore().All other
variables created when being in different time frame remain compressed. To
de-compress them to original interval you have to use
TimeFrameExpand.
Once you
switch the time frame using TimeFrameSet, all AFL functions operate on this
time frame until you switch back the time frame to original interval using
TimeFrameRestore or set to different interval again using TimeFrameSet. It is
good idea to ALWAYS call TimeFrameRestore when you are done with processing in
other time frames.
When time
frame is switched to other than original interval the results of all functions
called since TimeFrameSet are time-compressed too. If you want to display them
in original time frame you would need to 'expand' them as described later.
Variables created and assigned before call to TimeFrameSet() remain in the
time frame they were created. This behaviour allows mixing unlimited different
time frames in single formula.
Please
note that you can only compress data from shorter interval to longer interval.
So when working with 1-minute data you can compress to 2, 3, 4, 5, 6,
....N-minute data. But when working with 15 minute data you can not get
1-minute data bars. In a similar way if you have only EOD data you can not
access intraday time frames.
<SPAN
>Second group: <FONT
size=2>TimeFrameCompress/TimeFrameExpand allow
to compress and expand single arrays to / from different time frames.
Especially worth mentioning is TimeFrameExpand that is used to decompress
array variables that were created in different time frame. Decompressing is
required to properly display the array created in different time frame. For
example if you want to display weekly moving average it must be 'expanded' so
the data of one weekly bar covers five daily bars (Monday-Friday) of
corresponding week.
<SPAN
>TimeFrameExpand<FONT
size=2>( array, interval, mode = expandLast ) -
expands time-compressed array from 'interval' time frame to base time frame
('interval' must match the value used in TimeFrameCompress or
TimeFrameSet)Available modes:expandLast - the compressed value is
expanded starting from last bar within given period (so for example weekly
close/high/low is available on Friday's bar)expandFirst - the compressed
value is expanded starting from first bar within given period (so for example
weekly open is available from Monday's bar)expandPoint - the resulting
array gets not empty values only for the last bar within given period (all
remaining bars are Null (empty)).
Caveat:
expandFirst used on price different than open may look into the future. For
example if you create weekly HIGH series, expanding it to daily interval using
expandFirst will enable you to know on MONDAY what was the high for entire
week.
<SPAN
>TimeFrameCompress is provided for completeness and it
can be used when you want to compress single array without affecting built-in
OHLC,V arrays. If you call TimeFrameCompress it does not affect results of
other functions.
wc =
TimeFrameCompress( Close, inWeekly );
/* now
the time frame is still unchanged (say daily) and our MA will operate on daily
data */
dailyma
= MA( C, 14 );
/* but
if we call MA on compressed array, it will give MA from other time frame
*/
<SPAN
>weeklyma = MA( wc, 14 ); // note that argument is
time-compressed array
Plot(
dailyma, "DailyMA", colorRed );
<SPAN
>weeklyma = TimeFrameExpand( weeklyma, inWeekly ); //
expand for display
Plot(
weeklyma, "WeeklyMA", colorBlue );
During
this formula the time frame remained at original setting we only compressed
single array.
<SPAN
>TimeFrameCompress<FONT
size=2>( array, interval, mode = compressLast
)- compresses single array to given interval using given compression mode
available modes:compressLast - last (close) value of the array within
intervalcompressOpen - open value of the array within
intervalcompressHigh - highest value of the array within
intervalcompressLow - lowest value of the array within
intervalcompressVolume - sum of values of the array within
interval
<SPAN
>graph0 = TimeFrameExpand( TimeFrameCompress( Close,
inWeekly, compressLast ), inWeekly, expandLast );graph1 = TimeFrameExpand(
TimeFrameCompress( Open, inWeekly, compressOpen ), inWeekly, expandFirst
);
<SPAN
>Third group <FONT
size=2>consist of just one useful function:
TimeFrameGetPrice which allows to reference price and volume from other time
frames without switching /compressing/expanding time frames. Just one function
call to retrieve price from higher time frame. It allows also to reference not
only current but past bars from different time frames.
<SPAN
>TimeFrameGetPrice<FONT
size=2>( pricefield, interval, shift = 0, mode =
expandFirst );- references OHLCV fields from other time frames. This works
immediatelly without need to call TimeFrameSet at all.Price field is one
of the following: "O", "H", "L", "C", "V", "I" (open interest). Interval is
bar interval in seconds. shift allows to reference past (negative values) and
future (positive values) data in higher time frame. For example -1 gives
previous bar's data (like in Ref function but this works in higher time
frame).
<SPAN
>Examples:
<SPAN
>TimeFrameGetPrice( "O", inWeekly, -1
) - gives you
previous week OPEN price<FONT face="Courier New"
size=2>TimeFrameGetPrice( "C", inWeekly, -3
) - gives you
weekly Close price 3 weeks ago<FONT face="Courier New"
size=2>TimeFrameGetPrice( "H", inWeekly, -2
) - gives you
weekly High price 2 weeks ago<FONT face="Courier New"
size=2>TimeFrameGetPrice( "O", inWeekly, 0
) - gives you
this week open price.
<SPAN
>TimeFrameGetPrice( "H", inDaily, -1
) - gives
previous day high when working on intraday data
Shift
works as in Ref() function but it is applied to compressed time
frame.
Note
these functions work like these 3 nested
functions<SPAN
>TimeFrameExpand( Ref( TimeFrameCompress( array,
interval, compress(depending on field used) ), shift ), interval, expandFirst
)therefore
if shift = 0 compressed data may look into the future ( weekly high can be
known on monday ). If you want to write a trading system using this function
please make sure to reference PAST data by using negative shift
value.The only difference is that TimeFrameGetPrice is 2x faster than
nested Expand/Compress.
<SPAN
>Note on performance of TimeFrame
functions:<SPAN
>a) Measurements done on Athlon 1.46GHz,
18500 daily bars compressed to weekly time frameTimeFrameGetPrice(
"C", inWeekly, 0 ) - 0.0098 sec (9.8 milliseconds)TimeFrameSet( inWeekly
) - 0.012 sec (12 milliseconds)TimeFrameRestore( ) - 0.006 sec (6
milliseconds)TimeFrameCompress( Close, inWeekly, compressLast ); -
0.0097 sec (9.7 milliseconds)TimeFrameExpand( array, inWeekly,
expandLast ); - 0.0098 sec (9.8 milliseconds)
b)
Measurements done on Athlon 1.46GHz, 1000 daily bars compressed to weekly
time frameall functions below 0.0007 sec (0.7
millisecond)
<SPAN
>EXAMPLES
EXAMPLE
1: Plotting weekly MACD and cross arrows from daily data
<SPAN
>TimeFrameSet( inWeekly );<FONT
face="Courier New" size=2><SPAN
><FONT
face="Courier New">m = MACD(12, 26 ); // MACD from WEEKLY
data<FONT
face="Courier New">TimeFrameRestore();
<SPAN
>m1 = TimeFrameExpand( m, inWeekly
);
<SPAN
>Plot( m1, "Weekly MACD", colorRed
);<SPAN
><FONT
face="Courier New">PlotShapes( Cross( m1, 0 ) * shapeUpArrow, colorGreen
);PlotShapes( Cross( 0, m1 )
* shapeDownArrow, colorGreen );
<SPAN
>EXAMPLE 2: weekly candlestick chart overlaid on
line daily price chart
<SPAN
><FONT face="Courier New"
size=2>wo = TimeFrameGetPrice( "O", inWeekly, 0,
expandPoint );<SPAN
><FONT
face="Courier New">wh = TimeFrameGetPrice( "H", inWeekly, 0, expandPoint
);wl = TimeFrameGetPrice(
"L", inWeekly, 0, expandPoint );<FONT
face="Courier New">wc = TimeFrameGetPrice( "C", inWeekly, 0, expandPoint
);
<SPAN
>PlotOHLC( wo, wh, wl, wc, "Weekly Close", colorWhite,
styleCandle );<SPAN
><FONT
face="Courier New">Plot( Close, "Daily Close", colorBlue );
EXAMPLE
3: Simplified Triple screen system
<SPAN
>/* switch to weekly time frame
*/<SPAN
><FONT
face="Courier New">TimeFrameSet( inWeekly );<FONT
face="Courier New">whist = MACD( 12, 26 ) - Signal( 12, 26, 9
);wtrend = ROC( whist, 1 );
// weekly trend - one week change of weekly macd
histogram<FONT
face="Courier New">TimeFrameRestore();
<SPAN
>/* expand calculated MACD to daily so we can use it
with daily signals */<FONT face="Courier New"
size=2><SPAN
><FONT
face="Courier New">wtrend = TimeFrameExpand( wtrend, inWeekly
);
<SPAN
><FONT
face="Courier New">/* elder ray */<FONT
face="Courier New">bullpower= High -
ema(Close,13);bearpower= Low
- ema(Close,13);
<SPAN
>Buy = wtrend > 0 /* 1st screen: positive weekly
trend */<SPAN
><FONT
face="Courier New">AND<FONT
face="Courier New">bearpower < 0 and bearpower > Ref( bearpower, -1 ) /*
2nd screen bear power negative but rising */<FONT
face="Courier New">ANDH >
Ref( H, -1 ); /* 3rd screen, if prices make a new high
*/
<SPAN
>BuyPrice = Ref( H, -1 ); // buy stop
level;
Sell =
0 ; // exit only by stops<FONT face="Courier New"
size=2><SPAN
><FONT
face="Courier New">ApplyStop( stopTypeProfit, stopModePercent, 30, True
);ApplyStop(
stopTypeTrailing, stopModePercent, 20, True
);
<SPAN
>CHANGE LOG
<SPAN
>CHANGES FOR VERSION 4.48.1 (as
compared to 4.48.0)
<SPAN
>Changed code that copies HTML format from AFL editor
to clipboard. (this hopefully will address problems with pasting on some
machines)
<SPAN
>MFE/MAE distribution charts are now available in
Professional Edition only
<SPAN
>zooming is now independent in cloned windows
<SPAN
>CHANGES FOR VERSION 4.48.0 (as
compared to 4.47.0)
<SPAN
>window linking with different bar interval works
now.Just use Window->Clone menu ... this will create a clone of
currently selected window. The difference from previous version is that you
can now select different interval for this cloned window. Cloned windows are
numbered. You can have infinite number of cloned windows and they are linked
within group (change symbol in one window causes change in every linked
window) but the viewing interval is independent.
<SPAN
>cloned windows are now properly saved in a layout.
(note that format has changed slightly and you may get problemstrying to
load into old version the layout saved with NEW version)
<SPAN
>portfolio backtester: added support for backtesting
futures
<SPAN
>portfolio backtest report:+ added profit
distribution chart + added MAE distribution chart (Pro version
only)+ added MFE distribution chart (Pro version only)
<SPAN
>portfolio trade list: Max. Adverse Excursion (MAE)
and Max. Favorable Excurison (MFE) added
<SPAN
>ApplyStop / ExitAtStop=False feature in rotational
mode works as in regular mode now (checks only trade price for stops, not
H-L range. H-L is checked when ExitAtStop is True)
<SPAN
>AFL Editor - Edit->Copy puts "HTML Format" and
"DwHt" (Dreamweaver HTML format) into clipboard in addition to TXT and RTF
formats. This provides ability to paste nicely formatted codes directly into
Outlook Express and Macromedia Dreamweaver
<SPAN
>CHANGES FOR VERSION 4.47.0 (as
compared to 4.46.3)
<SPAN
>in regular detailed log does not show more than 2 *
MaxOpenPositions top ranked entry (buy/short) signals since anyway they
won't ever be entered.
<SPAN
>Regular mode: "Max # of tracked signals" setting
removed. Now <FONT
face="Times New Roman">_all_ exit signals are
tracked.
<SPAN
>fixed offset in day numbers returned by DayOfWeek()
function for dates prior to 1970
<SPAN
>added InterestEarning calculation to Portfolio
backtest
<SPAN
>now single bar 'long side' and 'short side' exposure
is calculated as value of long positions and short positions (respectively)
divided by overall equity value. (previously it was divided by long equity /
short equity value but it caused problems for systems that were constantly
loosing on short side causing that short side dropped below
zero)
<SPAN
>other minor fixes
<SPAN
>CHANGES FOR VERSION 4.46.3 (as
compared to 4.46.2)
<SPAN
>thousand separator is removed automatically in
StrToNum to prevent problems with conversion of numbers > 1000 when
thousand separator is enabled
<SPAN
>fixed issue with rotational mode, entering other
symbols when trade on top ranked symbol has been stopped and re-entry delay
> 0
<SPAN
>detailed log mode does not affect drawdown
calculation (previously it could result in slightly bigger drawdowns
reported in 'detailed log' mode due to the fact that exit bar close was
included in drawdown calculations even when exiting on open.)
<SPAN
>still open trades are listed in HTML report
too.
<SPAN
>trade list in HTML portfolio report can be turned
OFF using Settings: "Report", Trade list: <no trade list>
setting.(this setting page will be cleaned up at some point when there
will be one backtester only).
<SPAN
>CHANGES FOR VERSION 4.46.2 (as
compared to 4.46.1)
<SPAN
>AA settings, switch: "Add artificial future bar" -
now artificial future bar is has incremented date, volume set to zero and
all prices (OHLC) set to CLOSE price of last available data bar. (this is
done to prevent the closed-out value of open positions)
<SPAN
>new AFL function:Median( array, period ) - finds
median (middle element) value over period elements
<SPAN
>now trade list in portfolio mode displays reason for
exit (if trade has been closed by stop)
<SPAN
>trade list is now included in the
report
<SPAN
>rotational mode: profit target stop was broken, now
it is fixed
<SPAN
>CHANGES FOR VERSION 4.46.1 (as
compared to 4.46.0)
<SPAN
>scoreNoRotate now works again
<SPAN
>small fix in regarding month boundary handling in
"Use local time for daily compression" mode.
<SPAN
>AA settings, new switch: "Add artificial future
bar". When checked AmiBroker adds tommorrow's bar and this enables you to
see tommorrow's (or next bar) trade recommendations when your system uses
one bar delay. Artificial future bar is a copy of last available data bar
but has of course incremented date and volume set to zero.
<SPAN
>two functions (where present in 4.46.0 but not
documented)IsFavourite() - returns 'true' if current symbol belongs to
favoritesIsIndex() - returns 'true' if current symbol belongs to index
category
<SPAN
>CHANGES FOR VERSION 4.46.0 (as
compared to 4.45.0)
<SPAN
>New AFL functions
<SPAN
>added <FONT
face="Times New Roman">NumToStr as synonum of WriteVal
(as this function did not 'write' anything, just returned string)
<SPAN
>added <FONT
face="Times New Roman">StrToNum( string ) - converts
string to numbe
<SPAN
>added <FONT
face="Times New Roman">StrFind( string, substring ) -
finds first occurrence of substring in string. returns 0 if not found,
otherwise returns character index (one-based) of first occurrence
<SPAN
>added <FONT
face="Times New Roman">StrFormat( formatstr, ... )
that performs sprintf-like formatting and returns string
<SPAN
>CategoryGetName<FONT
size=2>( category, number) function -
returns name of category (market/group/sector/industry/watchlist)
<SPAN
>CategoryGetSymbols<FONT
size=2>( category, number ) added - synonym
to GetCategorySymbols
<SPAN
>CategoryAddSymbol<FONT
size=2>( symbol, category, number ); - adds
the symbol to given category, note that for markets, groups, industries
'adding' means moving from one category to another, since the symbol is
assigned always to one and only one market, group, industry and sector.
This limitation does not apply to watchlists, favorites, and index
categories. When symbol string is empty ("") then current symbol is used.
<SPAN
>CategoryRemoveSymbol<FONT
size=2>( symbol, category, number ); -
removes the symbol to given category, note that for markets, groups,
industries 'removing' means moving from given category to category with
number zero, since the symbol is assigned always to one and only one
market, group, industry and sector. This limitation does not apply to
watchlists, favorites, and index categories. When symbol string is empty
("") then current symbol is used.
<SPAN
>added new AFL functions for output/file handling
(almost exactly like in C run-time):
<SPAN
>printf<FONT
size=2>( formatstr, ... ) - output formatted
text to the commentary/interpretation (note 1: for numbers always use %f,
%e or %g formatting, %d or %x will not work because there are no integers
in AFL, note 2: as of now only numbers and arrays can now be printed. For
arrays 'selected value' is printed)
<SPAN
>fopen<SPAN
>( filename, mode ) - opens file, returns
filehandle . Mode can be "r" - for reading, "w" for writing, "a" for
appending (and all other regular C-runtime library modes)
<SPAN
>fclose<FONT
size=2>( filehandle ); - closes file
<SPAN
>fputs<SPAN
>( string, filehandle ) - puts (writes) string to
file
<SPAN
>fgets<SPAN
>( filehandle ) - gets (reads) string from file
(returns string)
<SPAN
>feof<SPAN
>( filehandle ) - detects end-of-file marker (
gives True - if end of file reached )
<SPAN
>PositionScore table is now shifted according to buy
trade delay in regular mode too. (it was shifted so in rotational mode
already). Caveat: make sure to set long and short delays to the same values
if you are trading both long and short sides, otherwise only long trades get
correct ranks. Note 2: PositionSize is not and was never shifted with trade
delaysto allow code for purchasing N stocks working with any delay,
example PositionSize = 5 * BuyPrice
<SPAN
>added new option to File->Database
Settings->Intraday settings "Use local time for daily
compression".All previous versions used exchange or data vendor time to
do build daily bars (this means that regardless of your time shift settings
daily bars looked the same because they used exchange or data source time
(for example if you are using QuoteTracker it was US EST time) - this caused
problems for Australian users using QuoteTracker as data source because
QuoteTracker reported ASX quotes with US time that lead to invalid daily
bars. Now if you check "Use local time for daily compression" AmiBroker will
use your local time (according to 'time shift' setting) to build daily bars.
Note that switching this on means that daily bars may look different when
you change time zone (i.e. time shift setting)
<SPAN
>ASCII importer: support for importing unadjusted
Yahoo data performing adjustment on the fly:
<SPAN
>new field <FONT
face="Times New Roman">ADJCLOSE - to read adj. close
column from Yahoo. Works _only_ in conjunction with CLOSE field. When both
CLOSE and ADJCLOSE are present in the ASCII format definition then
importer calculates split factor by dividing ADJCLOSE/CLOSE. It then
multiples OPEN, HIGH, LOW and CLOSE fields by this factor and divides
VOLUME field by this factor. This effectively converts unadjusted prices
to split adjusted prices. Split ratio gets locked once ADJCLOSE drops
below 0.05.
<SPAN
>new command <FONT
face="Times New Roman">$ROUNDADJ <FONT
face="Times New Roman">decimaldigits - causes
split-adjusted prices (see above) to be rounded to 'decimaldigits'
precision. By default no rounding is done.
<SPAN
>new command <FONT
face="Times New Roman">$RECALCSPLITS 1 - (off by
default) causes that splits are recalculated by AmiBrokerby the
algorithm that tries to construct correct adjusted price, based on
inaccurate information provided by Yahoo.Note that Yahoo provides only
2 decimal digits in adj. close field therefore the more adj. close
approaches zero due to adjustements the error grows. The option
$RECALCSPLITS 1 is intended to address this problem (at least
partially).It works as follows:1. for each bar ratio
ADJCLOSE/CLOSE is calculated2. if the ratio changes in two consecutive
bars by more than 10% it means thatsplit happened that bar. True split
ratio is guessed by matching true fractionin the format of X/Y, where
X and Y = 1..9, to the change in ratios.3. Then true split ratio is
used to adjust all past bars until new split is detected.
<SPAN
>new command <FONT
face="Times New Roman">$RAWCLOSE2OI 1 - (off by
default) - causes that OpenInterest field gets assigned CLOSE (raw close)
field value multiplied by 100
<SPAN
>new aqh.format file included in "formats" subfolder
using new ASCII importer commands to import and adjust prices from Yahoo.
Compatible with existing AmiQuote versions.
<SPAN
>CHANGES FOR VERSION 4.45.0 (as
compared to 4.44.1)
<SPAN
>score of 999999 is no longer recognized. Use
constant scoreNoRotate instead.
<SPAN
>UI simplification:Rotational mode: separate
settings for rotational mode trade price and delay and worst rank held have
been removed.Rotational mode now uses buy price and buy delay settings
from "Trade" tab. You can also set delay from the code SetTradeDelays( 1, 1,
1, 1 ); will give you one bar delay. To set 'worst rank held' use SetOption
function in your formula:SetOption("WorstRankHeld", 5 );
<SPAN
>stops implemented in rotational trading mode
(limitation: stops in rotational mode can only be static, they can not
change'stop amount' from symbol to symbol or from bar to bar like in
regular mode)
<SPAN
>re-entry delay implemented for all kind of
stops
<SPAN
>user interface added in the settings for n-bar
stops
<SPAN
>ApplyStop function now takes 6
parameters:ApplyStop( Type, Mode, Amount, ExitAtStop = True, Volatile =
False, ReentryDelay = 0 )
<SPAN
>rotational mode docs moved to <A
href=""
target=_blank>this page
<SPAN
>CHANGES FOR VERSION 4.44.1 (as
compared to 4.44.0)
<SPAN
>fixed problem with rotational mode, trading price:
open
<SPAN
>CHANGES FOR VERSION 4.44.0 (as
compared to
4.43.2)
<SPAN
>fixed crash with 'detail mode' and large number of
open positions/ranks used
<SPAN
>max. in-memory cache size can be set now to 20000
(please note that this large cache requires lots of RAM (more than
512MB))
<SPAN
>listview copy to clipboard feature now copies also
column header names
<SPAN
>SetForeign( ticker, fixup = True, tradeprices =
False) and RestorePriceArrays( tradeprices = False ) have new flag
now: tradeprices (False by default)
<FONT face="Times New Roman"
size=2>when tradeprices is set to TRUE, then not
only OHLC, V, OI, Avg arrays are set to foreign symbol values, but also
BuyPrice, SellPrice, ShortPrice, CoverPrice, PointValue, TickSize,
RoundLotSize, MarginDeposit variables are set to correspond to foreign
security.
<FONT face="Times New Roman"
size=2>This allows Equity() to work well with
SetForeign.
<FONT face="Times New Roman"
size=2><SPAN
>Example:
<FONT face="Courier New"
size=2>// your rules<FONT
face="Courier New" size=2><SPAN
><FONT
face="Courier New">buy = ...<FONT
face="Courier New">sel = ...<FONT
face="Courier New">SetForeign("MSFT", True, True
);e = Equity(); // backtest
on MSFTRestorePriceArrays(
True ); // <- should match parameter used in
SetForeign
<SPAN
>Name(), FullName(), GetExtraData() work well with
SetForeign() (i.e. give foreign name/data instead of currently
selected)
<SPAN
>SetOption("PriceBoundChecking", False ); - disables
checking and adjusting buyprice/sellprice/coverprice/shortprice arrays to
current symbol High-Low range.
<SPAN
>% profit added to detailed log mode
<SPAN
>fixed bug in portfolio backtester occuring when
'allow same bar exit' was turned off and 'immediate stops' was turned on 2
buys and 2 sells occurred the in 2 bars in row
<SPAN
>Auto Analysis/Settings,setting modified "portfolio
report mode: trade list/detailed log" moved to "report" tab
<SPAN
>Auto Analysis/Settings, rotational mode: added
selection of trade price and trade delay to portfolio settings
page
<SPAN
>Auto Analysis/Settings, portfolio backtester (both
regular and rotational modes): added ability to pad and align all symbols to
reference symbol. Note: by default this setting is OFF. Use responsibly. It
may slow down backtest and introduce some slight changes to indicator values
when your data has holes and holes are filled with previous bar data. The
feature is intended to be used ONLY when your system uses general market
timing (generates global signals based on data and/or indicators calculated
using Foreign from 'reference' symbol). Note 2: if reference symbol does not
exist, data won't be padded.
<SPAN
>Auto Analysis/Settings, report tab: added ability to
define risk-free rates for Sharpe and Ulcer Performance Index
calculations.
<SPAN
>CHANGES FOR VERSION 4.43.2 (as
compared to 4.43.0)
<SPAN
>backtester generates now error message when someone
attempts to use buy/sell/short/cover signals in rotational
mode
<SPAN
>column headings fixed in AA porfolio backtest report
<SPAN
>CHANGES FOR VERSION 4.43.0 (as
compared to 4.42.0)
<SPAN
>Portfolio Optimize mode added
<SPAN
>in regular backtest mode now it is possible to
specify the score of the symbol (on bar-by-bar basis) via PositionScore
variable. In this mode the score is used only at trade ENTRY to decide which
securities should be traded in case when there are more simultaneous entry
signals than max. allowable positions or available funds. AmiBroker will
'prefer' securities with higher absolute value of the score. If
PositionScore is not used then it is assumed to be 1 for all
securities.
<FONT face="Times New Roman"
size=2>NOTE: regular mode must be used for all
your backtesting except the cases when you want rotational-trading (fund
switching). Only regular mode uses buy/sell/short/cover
signals.
<SPAN
>rotational-trading mode must now be turned on by
calling new EnableRotationalTrading() function at the top of your
formula.
<FONT face="Times New Roman"
size=2>AA / Settings / Portfolio:1. Max.
Traded renamed to more meaningfull "Max. Open Positions" - defines the maximum
number of positions (trades) that can be open simultaneously (at any
time)2. Max. Ranked renamed to more meaningfull "Worst Rank Held"
(rotational trading mode only) - must be equal or greater than max. open
positions, if it is greater than Max. open positions then once a position is
taken in a security it will not be exited until the ranking of that security
drops below "Worst Rank Held"
<SPAN
>"Allow same day exit (single bar trade)" now affects
Portfolio test too.
<SPAN
>SetOption() calls affect Portfolio backtest now
added:SetOption("MaxOpenPositions")
SetOption("WorstRankHeld")SetOption("MinShares")
<SPAN
>fixed Avg Profit/Loss figures in "all trades"
section of portfolio report
<SPAN
>added average PERCENT profit/loss
figures
<SPAN
>internal accuracy of calculations of LinearReg,
LinRegSlope, LinRegIntercept, StdErr, TSF raised from 32 bit floating point
to 64 bit floating point
<SPAN
>fix: rotational trading mode does not enter position
when score is 999999
<SPAN
>fixed column setup in AA
<SPAN
>other minor fixes
<SPAN
>as a temporary solution for people using Rx new
version now uses HTMLView2.exe (that is shipped with the beta) to display
the portfolio report.
<SPAN
>CHANGES FOR VERSION 4.42.0 (as
compared to 4.41.2)
<SPAN
>first (incomplete) early beta
version of the portfolio backtester
<SPAN
>fixed plot of Null arrays using styleArea
<SPAN
>fixed display problem with % progress in
single-stock optimization
<SPAN
>other minor fixes
<SPAN
>CHANGES FOR VERSION 4.41.2 (as
compared to 4.41.1)
<SPAN
>now Sum produces values for periods upto and
including BarCount, so Sum( array, BarCount ) gives the value instead of
Null
<SPAN
>fixed problem with saving parameters on exit when
the user did not specify default value for string parameter using
ParamStr("name", "")
<SPAN
>fixed 38-byte memory leak when returning values from
user-defined functions
<SPAN
>real-time mode: after AFL syntax error commentary
AFL editor is not refreshed until error is fixed and user presses
'apply'
<SPAN
>eSignal 1.6.0 plugin (available separately
from
http://www.amibroker.com/bin/eSignal160.exe):
<SPAN
>much quicker backfills
<SPAN
>implemented force-reconnect feature in eSignal
plugin
<SPAN
>fixed minor timing issue in eSignal plugin
<SPAN
>implemented workaround to invalid tick numbers
sent sometimes by eSignal's data manager.
<SPAN
>thanks to all users for reporting errors and helping
ironing out outstanding
issues.
<SPAN
>CHANGES FOR VERSION 4.41.1 (as
compared to 4.41.0)
<SPAN
>fixed chart refresh locking that happened when user
was drawing some object and abandonend it by pressing ESC key.
<SPAN
>View->Refresh and View->Refresh All menus now
reset internal chart refresh lock flag just in case.
<SPAN
>plugin status is refreshed more often
<SPAN
>maximum number of chart sheets increased to 60
(Caveat: when you increase the number of sheets you would not be able to use
the layouts with OLDER versions of the software)
<SPAN
>TimeFrameSet() now affects result of Interval() AFL
function. TimeFrameRestore() resets it back.
<SPAN
>Plot() makes copies of OHL arrays when styleCandle
or styleBar is used so statements like<FONT
face="Courier New" size=2><SPAN
>SetForeign("AAPL");<FONT
face="Courier New" size=2><SPAN
><FONT
face="Courier New">Plot( C, "Price", colorYellow, styleCandle
);<FONT
face="Courier New">SetForeign("MSFT");<FONT
face="Courier New">Plot( C, "Price 2", colorBlue, styleCandle
);<SPAN
>plot correctly. Previously one would need to use
PlotOHLC() or PlotForeign()
<SPAN
>separate heap for syntax tree walker implemented, so
larger AFL programs like PortfolioTrader should execute faster while
retaining the speed improvement gained in 4.40.4 for small
formulas.
<SPAN
>CHANGES FOR VERSION 4.41.0 (as
compared to 4.40.4)
<SPAN
>legacy 'stoch()' function removed. Use StochK and
StochD instead.
<SPAN
>weekly / monthly charts are not affected by intraday
compression settingsin preferences any more and always use last available
day date for time stamp of time-compressed bar.
<SPAN
>Pref: Misc: auto-hide timeout field: added check for
allowed values from 1...32
<FONT face="Times New Roman"
size=2>
<SPAN
>TimeFrameSet<FONT
size=2>( interval ) function implemented-
replaces current price/volume arrays: open, high, low, close, volume,
openint, avg with time-compressed bars of specified interval once you
switched to a different time frame all calculations and built-in indicators
operate on selected time frame. To get back to original interval call
TimeFrameRestore() funciton.
<SPAN
>TimeFrameRestore<FONT
size=2>()- restores price arrays replaced
by SetTimeFrame.
<FONT face="Times New Roman"
size=2>Note that only OHLC, V, OI and Avg
built-in variables are restored to original time frame when you call
TimeFrameRestore(). All other variables created when being in different time
frame remain compressed. To de-compress them to original interval use
TimeFrameExpand
<SPAN
>TimeFrameCompress<FONT
size=2>( array, interval, mode = compressLast
)- compresses single array to given interval using given mode, available
modes:compressLast - last (close) value of the array within
intervalcompressOpen - open value of the array within
intervalcompressHigh - highest value of the array within
intervalcompressLow - lowest value of the array within
intervalcompressVolume - sum values of the array within
interval
<SPAN
>TimeFrameExpand<FONT
size=2>( array, interval, mode = expandLast
)- expands time-compressed array from 'interval' time
frame('interval' must match the value used in TimeFrameCompress or
TimeFrameSet)Available modes:
<SPAN
>expandLast - the compressed value is expanded
starting from last bar within given period (so for example weekly
close/high/low is available on Friday's bar)
<SPAN
>expandFirst - the compressed value is expanded
starting from first bar within given period(so for example weekly open
is available from Monday's bar)
<SPAN
>expandPoint - the resulting array gets not empty
values only for the last bar within given period (all remaining bars are
Null (empty))Caveat: expandFirst used on price different than open may
look into the future.For example if you create weekly HIGH series,
expanding it to daily interval using expandFirst will enable you to know
on MONDAY what was the high for entire
week.<SPAN
>graph0 = TimeFrameExpand( TimeFrameCompress(
Close, inWeekly, compressLast ), inWeekly, expandLast
);<SPAN
><FONT
face="Courier New">graph1 = TimeFrameExpand( TimeFrameCompress( Open,
inWeekly, compressOpen ), inWeekly, expandFirst
);
<SPAN
>TimeFrameGetPrice<FONT
size=2>( pricefield, interval, shift = 0, mode
= expandFirst );- references OHLCV fields from other time
frames.This works immediatelly without need to call
TimeFrameSet<FONT face="Courier New"
size=2>TimeFrameGetPrice( "O", inWeekly, -1
) - gives
you previous week OPEN price<FONT face="Courier New"
size=2>TimeFrameGetPrice( "C", inWeekly, -3
) - gives
you weekly Close price 3 weeks ago<FONT
face="Courier New" size=2>TimeFrameGetPrice(
"H", inWeekly, -2 )<SPAN
> - gives you weekly High price 2 weeks
ago<SPAN
>TimeFrameGetPrice( "O", inWeekly, 0
) - gives
you this week open price.<FONT face="Courier New"
size=2>TimeFrameGetPrice( "H", inDaily, -1
) - gives
previous day high when working on intraday data
<FONT face="Times New Roman"
size=2>Price field is one of the
following"O", "H", "L", "C", "V", "I" (open interest)Shift works
as in Ref() function but it is applied to compressed time frame.Note these
functions work like these 3 nested functions<FONT
face="Courier New" size=2>TimeFrameExpand( Ref(
TimeFrameCompress( array, interval, compress(depending on field used) ), shift
), interval, expandFirst )<SPAN
>therefore if shift = 0 compressed data may look
into the future ( weekly high can be known on monday ). If you want to write a
trading system using this function please make sure to reference PAST data by
using negative shift value.The only difference is that TimeFrameGetPrice
is 2x faster than nested Expand/Compress.
<SPAN
>new interval / timeframe
constants:<FONT
face="Times New Roman">in1Minute =
60in5Minute
= 5 * 60 <FONT
face="Times New Roman">in15Minute = 15 * 60
inHourly =
3600 inDaily
= 24 * 3600<FONT
face="Times New Roman">inWeekly = 5 * 24 * 3600
inMonthly =
25 * 24 * 3600
<FONT face="Times New Roman"
size=2><FONT
face="Times New Roman">compressLast = 0
compressOpen =
1 compressHigh
= 2 <FONT
face="Times New Roman">compressLow = 3
compressVolume
= 4 <FONT
face="Times New Roman">expandLast = 0 <FONT
face="Times New Roman">expandFirst = 1
expandPoint =
2
<SPAN
>SetForeign<FONT
size=2>( 'ticker' )- replaces current
price/volume arrays with those of foreign security, returns True if ticker
exists, False otherwise.If ticker does not exist (and function returns
false) price arrays are not changed at all.
<FONT face="Times New Roman"
size=2>Equivalent to the following
sequence:<SPAN
>C = Foreign( "ticker", "C"
);<SPAN
><FONT
face="Courier New">O = Foreign( "ticker", "O" );<FONT
face="Courier New">H = Foreign( "ticker", "H" );<FONT
face="Courier New">L = Foreign( "ticker", "L" );<FONT
face="Courier New">V = Foreign( "ticker", "V" );<FONT
face="Courier New">OI = Foreign( "ticker", "I" );<FONT
face="Courier New">Avg = ( C + H + L )/3;<FONT
size=2>but 6x faster (SetForeign takes
about the same time as single foreign). To restore original prices
callRestorePriceArrays();EXAMPLE:<FONT
face="Courier New" size=2>SetForeign( "MSFT"
);<SPAN
><FONT
face="Courier New">dm = MACD(); // dm holds MACD of MSFT regardless of
currently selected symbol<FONT
face="Courier New">RestorePriceArrays();<FONT
face="Courier New">Plot( dm, "MACD of MSFT", colorRed
);Plot( MACD(), "MACD of " +
Name(), colorBlue );
<SPAN
>RestorePriceArrays<FONT
size=2>();restores arrays overwritten by
SetForeign/TimeFrameSet
<SPAN
>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 <A
href="">bugs@xxxxxxxxxxxxx
<SPAN
>
<SPAN
><FONT
face="Courier New" size=2>Send BUG REPORTS to
bugs@xxxxxxxxxxxxx<SPAN
><FONT
face="Courier New">Send SUGGESTIONS to
suggest@xxxxxxxxxxxxx<FONT
face="Courier New">-----------------------------------------<FONT
face="Courier New">Post AmiQuote-related messages ONLY to:
amiquote@xxxxxxxxxxxxxxx (Web
page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)<FONT
face="Courier New">--------------------------------------------<FONT
face="Courier New">Check group FAQ at: <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your
use of Yahoo! Groups is subject to the <A
href="">Yahoo! Terms of
Service.
Send
BUG REPORTS to bugs@xxxxxxxxxxxxxSend SUGGESTIONS to
suggest@xxxxxxxxxxxxx-----------------------------------------Post
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check
group FAQ at: <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to the <A
href="">Yahoo! Terms of Service.
Yahoo! Groups Sponsor
Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
Attachment:
Description: ""
|