[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: AmiBroker 4.48.0 BETA released->MAE



PureBytes Links

Trading Reference Links

hello,

read 

Maximum adverse excursion

john sweeney - wiley's trader's advantage


$tephane

> Anyone have any sage advice regarding how to interpret:
> 
>   + added profit distribution chart
>   + added MAE distribution chart (Pro version only)
>   + added MFE distribution chart (Pro version only)
>   # portfolio trade list: Max. Adverse Excursion (MAE) and 
Max.      
>   Favorable Excurison (MFE) added
> 
> Phsst
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <amibroker@xxxx>
> wrote:
> > Hello,
> > 
> > A new beta version (4.48.0) of AmiBroker has just been released.
> > 
> > Includes "window linking" (different intervals in cloned windows),
> futures support in portfolio backtester,
> > Profit distribution chart, MAE/MFE in trade list and other 
improvements.
> > 
> > It is available for registered users only from the members area 
at:
> > http://www.amibroker.com/members/bin/ab4480beta.exe
> > and
> > http://www.amibroker.net/members/bin/ab4480beta.exe
> > 
> > (File size: 620 822 bytes,  620 KB)
> > 
> > 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 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 )
> > 
> > CHANGES FOR VERSION 4.48.0 (as compared to 4.47.0)
> > 
> >   a.. 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.
> > 
> >   b.. cloned windows are now properly saved in a layout. (note 
that
> format has changed slightly and you may get problems
> >   trying to load into old version the layout saved with NEW 
version)
> > 
> >   c.. portfolio backtester: added support for backtesting futures
> > 
> >   d.. 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)
> > 
> >   e.. portfolio trade list: Max. Adverse Excursion (MAE) and Max.
> Favorable Excurison (MFE) added
> > 
> >   f.. 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)
> > 
> >   g.. 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 
> > 
> > Hope this helps.
> > 
> > Best regards,
> > Tomasz Janeczko
> > amibroker.com
> > 
> > 
> > AmiBroker 4.48.0 Beta Read Me
> > November 8, 2003 21:21 
> > 
> > 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.40 first. 
> > 
> > Just run the installer and follow the instructions. 
> > 
> > Then run AmiBroker. You should see "AmiBroker 4.48.0 beta" written
> in the About box.
> > 
> > See CHANGE LOG below for detailed list of changes.
> > 
> > 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:
> > 
> > Exposure % - 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.
> > 
> > Net Risk Adjusted Return % - Net profit % divided by Exposure %
> > 
> > Annual Return % - Compounded Annual Return % (CAR)
> > 
> > Risk Adjusted Return % - Annual return % divided by Exposure %
> > 
> > Avg. Profit/Loss - (Profit of winners + Loss of losers)/(number of
> trades)
> > 
> > Avg. Profit/Loss % - '(% Profit of winners + % Loss of
> losers)/(number of trades)
> > 
> > Avg. Bars Held - sum of bars in trades / number of trades
> > 
> > Max. trade drawdown - The largest peak to valley decline 
experienced
> in any single trade
> > 
> > Max. trade % drawdown - The largest peak to valley percentage
> decline experienced in any single trade
> > 
> > Max. system drawdown - The largest peak to valley decline
> experienced in portfolio equity
> > 
> > Max. system % drawdown - The largest peak to valley percentage
> decline experienced in portfolio equity
> > 
> > Recovery Factor - Net profit divided by Max. system drawdown
> > 
> > CAR/MaxDD - Compound Annual % Return divided by Max. system % 
drawdown
> > 
> > RAR/MaxDD - Risk Adjusted Return divided by Max. system % 
drawdown 
> > 
> > Profit Factor - Profit of winners divided by loss of losers
> > 
> > Payoff Ratio - Ratio average win / average loss
> > 
> > Standard Error - Standard error measures chopiness of equity line.
> The lower the better.
> > 
> > Risk-Reward Ratio - 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.
> > 
> > Ulcer Index - Square root of sum of squared drawdowns divided by
> number of bars
> > 
> > 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.
> > 
> > Sharpe Ratio of trades - Measure of risk adjusted return of
> investment. Above 1.0 is good, more than 2.0 is very good. More
> information 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.
> > 
> > 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
> > 
> > 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
> > IMPORTANT: Since the new backtester is not yet complete. If you
> think that there is a bug please report it to bugs@xxxx 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. 
> > 
> > Old backtester is untouched and it works exactly the same way as 
in
> pre-4.42 versions. 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. 
> > 
> > IMPORTANT: 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:
> > 
> > PositionSize = -25; // invest 25% of portfolio equity in single 
security
> > 
> > or
> > 
> > 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.
> > 
> > /*****
> > ** REGULAR PORTFOLIO mode 
> > ** This sample optimization
> > ** finds what is optimum number of positions open simultaneously
> > ** 
> > ****/
> > 
> > SetOption("InitialEquity", 20000 );
> > SetTradeDelays(1,1,1,1);
> > RoundLotSize = 1; 
> > 
> > posqty = Optimize("PosQty", 4, 1, 20, 1 );
> > SetOption("MaxOpenPositions", posqty);
> > 
> > // desired position size is 100% portfolio equity
> > // divided by PosQty positions
> > 
> > PositionSize = -100/posqty; 
> > 
> > // The system is very simple...
> > // MA parameters could be optimized too...
> > p1 = 10;
> > p2 = 22;
> > // simple MA crossover
> > Short=Cross( MA(C,p1) , MA(C,p2) );
> > Buy=Cross( MA(C,p2) , MA(C,p1) );
> > // always in the market 
> > Sell=Short; 
> > Cover=Buy;
> > 
> > // now additional score 
> > // that is used to rank equities 
> > // when there are more ENTRY signals that available
> > // positions/cash
> > PositionScore = 100-RSI(); // prefer stocks that have low RSI;
> > 
> > 
> > 
> > Things NOT IMPLEMENTED yet in new portfolio backtester, to be 
done soon
> >   a.. pyramiding 
> >   b.. intra-bar detailed timing 
> >   c.. OLE interface 
> >   d.. etc... 
> > 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 
> >         Old backtester New (portfolio) backtester 
> >       System and trade drawdown calculations based on 
Open/Close/H-L
> range (worst case) selectable in settings Close price only 
(regardless
> of settings) - subject to change 
> >       Max. % trade drawdown Calculated based on total equity
> Calculated based on ACTUAL trade value at entry point. 
> >       Stats available  for all trades only separately for long,
> short and all trades 
> >       Futures backtesting (MarginDeposit, TickSize, PointValue)
> Supported Supported (from 4.48.0) 
> >       PositionSizing Based on individual symbol equity  Based on
> portfolio equity.
> > 
> >       PositionSize = -25; 
> > 
> >       will enter 25% of current porfolio equity
> >      
> >       Trade statistics Include only closed trades, open trade is
> reported separately Include all trades (closed and those still open 
at
> the end of analysis period). Any open trades are closed out 
at 'close'
> price always. 
> >       Exposure 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) 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. 
> >       Multiple security testing N independent accounts (multiple
> single equity) Portfolio equity common to all symbols under test 
> > 
> > 
> > 
> > 
> > 
> > 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: 
> > 
> >   1.. switching time frame of build-in O, H, L, C, V, OI, Avg
> arrays: TimeFrameSet, TimeFrameRestore 
> >   2.. compressing/expanding single arrays to/from specified
> interval: TimeFrameCompress, TimeFrameExpand 
> >   3.. immediate access to price/volume arrays in different time
> frame: TimeFrameGetPrice 
> > First group 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:
> > 
> > TimeFrameSet( 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 ); 
> > 
> > TimeFrameSet( inHourly ); // switch now to hourly
> > 
> > mah_9 = EMA( C, 9 ); // 9 bar moving average from hourly data
> > 
> > TimeFrameRestore(); // restore time frame to original
> > 
> > Plot( Close, "Price", colorWhite, styleCandle );
> > 
> > // plot expanded average
> > 
> > Plot( TimeFrameExpand( ma5_13, in5Minute), "13 bar moving average
> from 5 min bars", colorRed );
> > Plot( TimeFrameExpand( mah_9, inHourly), "9 bar moving average 
from
> hourly bars", colorRed );
> > 
> > 
> > TimeFrameSet( 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.
> > 
> > TimeFrameRestore() - 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.
> > 
> > Second group: 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.
> > 
> > TimeFrameExpand( 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.
> > 
> > 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 */
> > 
> > weeklyma = MA( wc, 14 ); // note that argument is time-compressed 
array
> > 
> > Plot( dailyma, "DailyMA", colorRed );
> > 
> > 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.
> > 
> > TimeFrameCompress( array, interval, mode = compressLast )
> > - compresses single array to given interval using given 
compression
> mode available modes:
> > compressLast - last (close) value of the array within interval
> > compressOpen - open value of the array within interval
> > compressHigh - highest value of the array within interval
> > compressLow - lowest value of the array within interval
> > compressVolume - sum of values of the array within interval
> > 
> > graph0 = TimeFrameExpand( TimeFrameCompress( Close, inWeekly,
> compressLast ), inWeekly, expandLast );
> > graph1 = TimeFrameExpand( TimeFrameCompress( Open, inWeekly,
> compressOpen ), inWeekly, expandFirst );
> > Third group 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.
> > 
> > TimeFrameGetPrice( 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).
> > 
> > Examples:
> > 
> > TimeFrameGetPrice( "O", inWeekly, -1 ) - gives you previous week
> OPEN price
> > TimeFrameGetPrice( "C", inWeekly, -3 ) - gives you weekly Close
> price 3 weeks ago
> > TimeFrameGetPrice( "H", inWeekly, -2 ) - gives you weekly High 
price
> 2 weeks ago
> > TimeFrameGetPrice( "O", inWeekly, 0 ) - gives you this week open 
price.
> > 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
> > 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.
> > 
> >   Note on performance of TimeFrame functions:
> > 
> >   a) Measurements done on Athlon 1.46GHz, 18500 daily bars
> compressed to weekly time frame
> > 
> >   TimeFrameGetPrice( "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)
> > 
> > EXAMPLES
> > 
> > EXAMPLE 1: Plotting weekly MACD and cross arrows from daily data 
> > 
> > TimeFrameSet( inWeekly );
> > m = MACD(12, 26 ); // MACD from WEEKLY data
> > TimeFrameRestore();
> > m1 = TimeFrameExpand( m, inWeekly );
> > Plot( m1, "Weekly MACD", colorRed );
> > PlotShapes( Cross( m1, 0 ) * shapeUpArrow, colorGreen );
> > PlotShapes( Cross( 0, m1 ) * shapeDownArrow, colorGreen );
> > 
> > EXAMPLE 2: weekly candlestick chart overlaid on line daily price 
chart
> > 
> > wo = TimeFrameGetPrice( "O", inWeekly, 0, expandPoint );
> > wh = TimeFrameGetPrice( "H", inWeekly, 0, expandPoint );
> > wl = TimeFrameGetPrice( "L", inWeekly, 0, expandPoint );
> > wc = TimeFrameGetPrice( "C", inWeekly, 0, expandPoint );
> > PlotOHLC( wo, wh, wl, wc, "Weekly Close", colorWhite, 
styleCandle );
> > Plot( Close, "Daily Close", colorBlue ); 
> > 
> > EXAMPLE 3: Simplified Triple screen system 
> > 
> > /* switch to weekly time frame */
> > TimeFrameSet( inWeekly );
> > whist = MACD( 12, 26 ) - Signal( 12, 26, 9 );
> > wtrend = ROC( whist, 1 ); // weekly trend - one week change of
> weekly macd histogram
> > TimeFrameRestore();
> > /* expand calculated MACD to daily so we can use it with daily
> signals */
> > wtrend = TimeFrameExpand( wtrend, inWeekly );
> > 
> > /* elder ray */
> > bullpower= High - ema(Close,13);
> > bearpower= Low - ema(Close,13);
> > Buy = wtrend > 0 /* 1st screen: positive weekly trend */
> > AND
> > bearpower < 0 and bearpower > Ref( bearpower, -1 ) /* 2nd screen
> bear power negative but rising */
> > AND
> > H > Ref( H, -1 ); /* 3rd screen, if prices make a new high */
> > BuyPrice = Ref( H, -1 ); // buy stop level;
> > Sell = 0 ; // exit only by stops
> > ApplyStop( stopTypeProfit, stopModePercent, 30, True );
> > ApplyStop( stopTypeTrailing, stopModePercent, 20, True );
> > 
> > CHANGE LOG
> > 
> > CHANGES FOR VERSION 4.48.0 (as compared to 4.47.0)
> > 
> >   a.. 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.
> > 
> >   b.. cloned windows are now properly saved in a layout. (note 
that
> format has changed slightly and you may get problems
> >   trying to load into old version the layout saved with NEW 
version)
> > 
> >   c.. portfolio backtester: added support for backtesting futures
> > 
> >   d.. portfolio backtest report:
> >   + added profit distribution chart 
> >   + added MAE distribution chart (Pro version only)
> >   + added MFE distribution chart (Pro version only)
> > 
> >   e.. portfolio trade list: Max. Adverse Excursion (MAE) and Max.
> Favorable Excurison (MFE) added
> > 
> >   f.. 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)
> > 
> >   g.. 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 
> > 
> > CHANGES FOR VERSION 4.47.0 (as compared to 4.46.3)
> > 
> >   a.. 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.
> > 
> >   b.. Regular mode: "Max # of tracked signals" setting removed. 
Now
> _all_ exit signals are tracked.
> > 
> >   c.. fixed offset in day numbers returned by DayOfWeek() function
> for dates prior to 1970
> > 
> >   d.. added InterestEarning calculation to Portfolio backtest 
> > 
> >   e.. 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)
> > 
> >   f.. other minor fixes
> > 
> > CHANGES FOR VERSION 4.46.3 (as compared to 4.46.2)
> > 
> >   a.. thousand separator is removed automatically in StrToNum to
> prevent problems with conversion of numbers > 1000 when thousand
> separator is enabled 
> >   b.. fixed issue with rotational mode, entering other symbols 
when
> trade on top ranked symbol has been stopped and re-entry delay > 0 
> >   c.. 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.) 
> >   d.. still open trades are listed in HTML report too.
> > 
> >   e.. 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).
> > 
> > CHANGES FOR VERSION 4.46.2 (as compared to 4.46.1)
> > 
> >   a.. 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)
> > 
> >   b.. new AFL function:
> >   Median( array, period ) - finds median (middle element) value 
over
> period elements 
> >   c.. now trade list in portfolio mode displays reason for exit 
(if
> trade has been closed by stop)
> > 
> >   d.. trade list is now included in the report
> > 
> >   e.. rotational mode: profit target stop was broken, now it is 
fixed
> > 
> > CHANGES FOR VERSION 4.46.1 (as compared to 4.46.0)
> > 
> >   a.. scoreNoRotate now works again 
> >   b.. small fix in regarding month boundary handling in "Use local
> time for daily compression" mode.
> > 
> >   c.. 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.
> > 
> >   d.. two functions (where present in 4.46.0 but not documented)
> >   IsFavourite() - returns 'true' if current symbol belongs to 
favorites
> >   IsIndex() - returns 'true' if current symbol belongs to index 
category
> > 
> > CHANGES FOR VERSION 4.46.0 (as compared to 4.45.0)
> > 
> >   a.. New AFL functions
> > 
> >     a.. added NumToStr as synonum of WriteVal (as this function 
did
> not 'write' anything, just returned string) 
> >     b.. added StrToNum( string ) - converts string to numbe 
> >     c.. added StrFind( string, substring ) - finds first 
occurrence
> of substring in string. returns 0 if not found, otherwise returns
> character index (one-based) of first occurrence 
> >     d.. added StrFormat( formatstr, ... ) that performs sprintf-
like
> formatting and returns string 
> >     e.. CategoryGetName( category, number) function - returns name
> of category (market/group/sector/industry/watchlist) 
> >     f.. CategoryGetSymbols( category, number ) added - synonym to
> GetCategorySymbols
> > 
> >     g.. CategoryAddSymbol( 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. 
> >     h.. CategoryRemoveSymbol( 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.
> > 
> >   b.. added new AFL functions for output/file handling (almost
> exactly like in C run-time): 
> >     a.. printf( 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) 
> >     b.. fopen( 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) 
> >     c.. fclose( filehandle ); - closes file 
> >     d.. fputs( string, filehandle ) - puts (writes) string to 
file 
> >     e.. fgets( filehandle ) - gets (reads) string from file 
(returns
> string) 
> >     f.. feof( filehandle ) - detects end-of-file marker ( gives 
True
> - if end of file reached ) 
> >   c.. 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 delays
> >   to allow code for purchasing N stocks working with any delay,
> example PositionSize = 5 * BuyPrice 
> >   a.. 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)
> > 
> >   b.. ASCII importer: support for importing unadjusted Yahoo data
> performing adjustment on the fly: 
> > 
> >     a.. new field 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.
> > 
> >     b.. new command $ROUNDADJ decimaldigits - causes split-
adjusted
> prices (see above) to be rounded to 'decimaldigits' precision. By
> default no rounding is done.
> > 
> >     c.. new command $RECALCSPLITS 1 - (off by default) causes that
> splits are recalculated by AmiBroker
> >     by 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 calculated
> >     2. if the ratio changes in two consecutive bars by more than 
10%
> it means that
> >     split happened that bar. True split ratio is guessed by 
matching
> true fraction
> >     in 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.
> > 
> >     d.. new command $RAWCLOSE2OI 1 - (off by default) - causes 
that
> OpenInterest field gets assigned CLOSE (raw close) field value
> multiplied by 100
> > 
> >   c.. 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. 
> > CHANGES FOR VERSION 4.45.0 (as compared to 4.44.1)
> > 
> >   a.. score of 999999 is no longer recognized. Use constant
> scoreNoRotate instead.
> > 
> >   b.. 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 );
> > 
> >   c.. 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)
> > 
> >   d.. re-entry delay implemented for all kind of stops
> > 
> >   e.. user interface added in the settings for n-bar stops
> > 
> >   f.. ApplyStop function now takes 6 parameters:
> >   ApplyStop( Type, Mode, Amount, ExitAtStop = True, Volatile =
> False, ReentryDelay = 0 )
> > 
> >   g.. rotational mode docs moved to this page 
> > CHANGES FOR VERSION 4.44.1 (as compared to 4.44.0)
> > 
> >   a.. fixed problem with rotational mode, trading price: open 
> > CHANGES FOR VERSION 4.44.0 (as compared to 4.43.2)
> > 
> >   a.. fixed crash with 'detail mode' and large number of open
> positions/ranks used
> > 
> >   b.. max. in-memory cache size can be set now to 20000 (please 
note
> that this large cache requires lots of RAM (more than 512MB))
> > 
> >   c.. listview copy to clipboard feature now copies also column
> header names
> > 
> >   d.. SetForeign( ticker, fixup = True, tradeprices = False) and 
> >   RestorePriceArrays( tradeprices = False ) 
> >   have new flag now: tradeprices (False by default)
> >   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.
> >   This allows Equity() to work well with SetForeign.
> >   Example:
> >   // your rules
> >   buy = ...
> >   sel = ...
> >   SetForeign("MSFT", True, True );
> >   e = Equity(); // backtest on MSFT
> >   RestorePriceArrays( True ); // <- should match parameter used in
> SetForeign
> > 
> >   e.. Name(), FullName(), GetExtraData() work well with SetForeign
()
> (i.e. give foreign name/data instead of currently selected)
> > 
> >   f.. SetOption("PriceBoundChecking", False ); - disables checking
> and adjusting buyprice/sellprice/coverprice/shortprice arrays to
> current symbol High-Low range.
> > 
> >   g.. % profit added to detailed log mode
> > 
> >   h.. 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
> > 
> >   i.. Auto Analysis/Settings,setting modified "portfolio report
> mode: trade list/detailed log" moved to "report" tab
> > 
> >   j.. Auto Analysis/Settings, rotational mode: added selection of
> trade price and trade delay to portfolio settings page
> > 
> >   k.. 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.
> > 
> >   l.. Auto Analysis/Settings, report tab: added ability to define
> risk-free rates for Sharpe and Ulcer Performance Index calculations.
> > 
> > CHANGES FOR VERSION 4.43.2 (as compared to 4.43.0)
> >   a.. backtester generates now error message when someone attempts
> to use buy/sell/short/cover signals in rotational mode
> >   b.. column headings fixed in AA porfolio backtest report 
> > CHANGES FOR VERSION 4.43.0 (as compared to 4.42.0)
> > 
> >   a.. Portfolio Optimize mode added 
> >   b.. 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.
> >   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.
> > 
> >   c.. rotational-trading mode must now be turned on by calling new
> EnableRotationalTrading() function at the top of your formula.
> >   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"
> > 
> >   d.. "Allow same day exit (single bar trade)" now affects 
Portfolio
> test too.
> > 
> >   e.. SetOption() calls affect Portfolio backtest now added:
> >   SetOption("MaxOpenPositions") 
> >   SetOption("WorstRankHeld")
> >   SetOption("MinShares")
> > 
> >   f.. fixed Avg Profit/Loss figures in "all trades" section of
> portfolio report
> > 
> >   g.. added average PERCENT profit/loss figures
> > 
> >   h.. internal accuracy of calculations of LinearReg, LinRegSlope,
> LinRegIntercept, StdErr, TSF raised from 32 bit floating point to 64
> bit floating point
> > 
> >   i.. fix: rotational trading mode does not enter position when
> score is 999999
> > 
> >   j.. fixed column setup in AA
> > 
> >   k.. other minor fixes
> > 
> >   l.. 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.
> > 
> > CHANGES FOR VERSION 4.42.0 (as compared to 4.41.2)
> >   a.. first (incomplete) early beta version of the portfolio 
backtester
> >   b.. fixed plot of Null arrays using styleArea 
> >   c.. fixed display problem with % progress in single-stock
> optimization 
> >   d.. other minor fixes
> > 
> > CHANGES FOR VERSION 4.41.2 (as compared to 4.41.1)
> > 
> >   a.. now Sum produces values for periods upto and including
> BarCount, so Sum( array, BarCount ) gives the value instead of Null 
> >   b.. fixed problem with saving parameters on exit when the user 
did
> not specify default value for string parameter using ParamStr
("name", "")
> >   c.. fixed 38-byte memory leak when returning values from
> user-defined functions
> >   d.. real-time mode: after AFL syntax error commentary AFL editor
> is not refreshed until error is fixed and user presses 'apply'
> > 
> >   e.. eSignal 1.6.0 plugin 
> >   (available separately from
> http://www.amibroker.com/bin/eSignal160.exe):
> >     a.. much quicker backfills
> >     b.. implemented force-reconnect feature in eSignal plugin
> >     c.. fixed minor timing issue in eSignal plugin 
> >     d.. implemented workaround to invalid tick numbers sent
> sometimes by eSignal's data manager. 
> >   thanks to all users for reporting errors and helping ironing out
> outstanding issues.
> > 
> > CHANGES FOR VERSION 4.41.1 (as compared to 4.41.0)
> >   a.. fixed chart refresh locking that happened when user was
> drawing some object and abandonend it by pressing ESC key.
> >   b.. View->Refresh and View->Refresh All menus now reset internal
> chart refresh lock flag just in case.
> >   c.. plugin status is refreshed more often
> > 
> >   d.. 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)
> >   e.. TimeFrameSet() now affects result of Interval() AFL 
function.
> TimeFrameRestore() resets it back.
> >   f.. Plot() makes copies of OHL arrays when styleCandle or 
styleBar
> is used so statements like
> >   SetForeign("AAPL");
> >   Plot( C, "Price", colorYellow, styleCandle );
> >   SetForeign("MSFT");
> >   Plot( C, "Price 2", colorBlue, styleCandle );
> >   plot correctly. Previously one would need to use PlotOHLC() or
> PlotForeign()
> > 
> >   g.. 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.
> > 
> > CHANGES FOR VERSION 4.41.0 (as compared to 4.40.4)
> > 
> >   a.. legacy 'stoch()' function removed. Use StochK and StochD 
instead.
> >   b.. 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. 
> >   c.. Pref: Misc: auto-hide timeout field: added check for allowed
> values from 1...32
> > 
> > 
> >   d.. TimeFrameSet( 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.
> > 
> >   e.. TimeFrameRestore()
> >   - 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 use 
TimeFrameExpand
> > 
> >   f.. TimeFrameCompress( array, interval, mode = compressLast )
> >   - compresses single array to given interval using given mode,
> available modes:
> >   compressLast - last (close) value of the array within interval
> >   compressOpen - open value of the array within interval
> >   compressHigh - highest value of the array within interval
> >   compressLow - lowest value of the array within interval
> >   compressVolume - sum values of the array within interval
> > 
> >   g.. TimeFrameExpand( array, interval, mode = expandLast )
> >   - expands time-compressed array from 'interval' time frame
> >   ('interval' must match the value used in TimeFrameCompress or
> TimeFrameSet)
> >   Available modes:
> > 
> >     a.. 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)
> >     b.. expandFirst - the compressed value is expanded starting 
from
> first bar within given period
> >     (so for example weekly open is available from Monday's bar)
> > 
> >     c.. 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.
> > 
> >     graph0 = TimeFrameExpand( TimeFrameCompress( Close, inWeekly,
> compressLast ), inWeekly, expandLast );
> >     graph1 = TimeFrameExpand( TimeFrameCompress( Open, inWeekly,
> compressOpen ), inWeekly, expandFirst );
> > 
> >   h.. TimeFrameGetPrice( pricefield, interval, shift = 0, mode =
> expandFirst );
> >   - references OHLCV fields from other time frames.
> >   This works immediatelly without need to call TimeFrameSet
> > 
> >   TimeFrameGetPrice( "O", inWeekly, -1 ) - gives you previous week
> OPEN price
> >   TimeFrameGetPrice( "C", inWeekly, -3 ) - gives you weekly Close
> price 3 weeks ago
> >   TimeFrameGetPrice( "H", inWeekly, -2 ) - gives you weekly High
> price 2 weeks ago
> >   TimeFrameGetPrice( "O", inWeekly, 0 ) - gives you this week open
> price.
> >   TimeFrameGetPrice( "H", inDaily, -1 ) - gives previous day high
> when working on intraday data
> > 
> >   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
> >   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.
> > 
> >   i.. new interval / timeframe constants:
> >   in1Minute = 60
> >   in5Minute = 5 * 60 
> >   in15Minute = 15 * 60 
> >   inHourly = 3600 
> >   inDaily = 24 * 3600
> >   inWeekly = 5 * 24 * 3600 
> >   inMonthly = 25 * 24 * 3600 
> > 
> >   compressLast = 0 
> >   compressOpen = 1 
> >   compressHigh = 2 
> >   compressLow = 3 
> >   compressVolume = 4 
> > 
> >   expandLast = 0 
> >   expandFirst = 1 
> >   expandPoint = 2 
> > 
> >   j.. SetForeign( '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.
> > 
> >   Equivalent to the following sequence:
> >   C = Foreign( "ticker", "C" );
> >   O = Foreign( "ticker", "O" );
> >   H = Foreign( "ticker", "H" );
> >   L = Foreign( "ticker", "L" );
> >   V = Foreign( "ticker", "V" );
> >   OI = Foreign( "ticker", "I" );
> >   Avg = ( C + H + L )/3;
> > 
> >   but 6x faster (SetForeign takes about the same time as single
> foreign). To restore original prices call
> >   RestorePriceArrays();
> > 
> >   EXAMPLE:
> >   SetForeign( "MSFT" );
> >   dm = MACD(); // dm holds MACD of MSFT regardless of currently
> selected symbol
> >   RestorePriceArrays();
> >   Plot( dm, "MACD of MSFT", colorRed );
> >   Plot( MACD(), "MACD of " + Name(), colorBlue );
> > 
> >   k.. RestorePriceArrays();
> >   restores arrays overwritten by SetForeign/TimeFrameSet
> > 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 bugs@xxxx


------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Ink Cartridges or Refill Kits for your HP, Epson, Canon or Lexmark
Printer at MyInks.com. Free s/h on orders $50 or more to the US & Canada.
http://www.c1tracking.com/l.asp?cid=5511
http://us.click.yahoo.com/mOAaAA/3exGAA/qnsNAA/GHeqlB/TM
---------------------------------------------------------------------~->

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 http://docs.yahoo.com/info/terms/