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

[amibroker] Re: AmiBroker 4.45.0 BETA released



PureBytes Links

Trading Reference Links

Colin,
The new TimeFrame functions are very important.
I was using long time ago the daily vs weekly Stochastic divergence 
and it was quite painful to use the results.
Now it is an excellent one-code story.
See, for example,
http://groups.yahoo.com/group/amibroker/message/47028
http://groups.yahoo.com/group/amibroker/message/47031
The premature exits [especially for futures trading] are precious...
Dimitris Tsokakis
--- In amibroker@xxxxxxxxxxxxxxx, "Colin Quinney" <crquin@xxxx> wrote:
> Hi Tomasz,
> 
> I'm just monitoring this list (among others) with the thought in 
mind of one
> day trying Amibroker and so far I like what I see here, and now I am
> suddenly curious about this thing called Time Frame Functions. TJ's 
response
> inspired me to do a Google search, and Wealth Lab referred to "Time 
Frame
> Functions" as:
> "You can now create Compressed Time Interval scripts.  For example, 
obtain
> the 15 minute RSI from a 1 minute chart, or the 60 minute MACD from 
a 5
> minute chart.  The new Time Frame functions are: SetScaleCompressed,
> GetIntradayBar, and IntradayFromCompressed."
> 
> That explanation is still kinda foggy to me, and clarity is 
requested, but
> surely perhaps I should really be first asking to what advantage do 
Time
> Frame Functions offer a trader? Thanks very much.
> 
> Best Regards,
> Colin Quinney
> ----- Original Message ----- 
> From: "Tomasz Janeczko" <amibroker@xxxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Sunday, October 19, 2003 2:02 PM
> Subject: Re: [amibroker] Re: AmiBroker 4.45.0 BETA released
> 
> 
> > For what is worth: Time Frame functions are here for more than 
one month
> since release 4.41.0
> >
> > Best regards,
> > Tomasz Janeczko
> > amibroker.com
> > ----- Original Message ----- 
> > From: "nkis22" <nkishor@xxxx>
> > To: <amibroker@xxxxxxxxxxxxxxx>
> > Sent: Sunday, October 19, 2003 7:02 PM
> > Subject: [amibroker] Re: AmiBroker 4.45.0 BETA released
> >
> >
> > > Time Frame Functions! Wow!!!!!!!!!!!!!!!!!!
> > > thanks TJ
> > > nand
> > >
> > >
> > >
> > >
> > >
> > > --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" 
<amibroker@xxxx>
> > > wrote:
> > > >
> > > > Hello,
> > > >
> > > > A new beta version (4.45.0) of AmiBroker has just been 
released.
> > > >
> > > > It is available for registered users only from the members 
area at:
> > > > http://www.amibroker.com/members/bin/ab4450beta.exe
> > > > and
> > > > http://www.amibroker.net/members/bin/ab4450beta.exe
> > > >
> > > > (File size: 510 416 bytes,  510 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.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
> > > >
> > > >   h.. fixed bug in RestorePriceArrays();
> > > > (sorry but support for adjusted close in importer is delayed 
and
> > > will appear in next beta)
> > > >
> > > > Best regards,
> > > > Tomasz Janeczko
> > > > Hope this helps.
> > > >
> > > > AmiBroker 4.45.0 Beta Read Me
> > > > October 19, 2003 14:20
> > > >
> > > > 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.45.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.. built-in stops in rotational trading mode. (stops in 
regular
> > > mode work already)
> > > >   b.. futures support (point value, margin deposit, ticksize)
> > > >   c.. calculation of interest earnings
> > > >   d.. pyramiding
> > > >   e.. intra-bar detailed timing
> > > >   f.. OLE interface
> > > >   g.. 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 Not yet available
> > > >       Interest earnings calculation Supported Not yet 
available
> > > >       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.
> > > >       Positions taken Uses "Positions" selector in the 
Settings to
> > > include long, short or both positions From version 4.43.0 
portfolio
> > > backtest behaves the same (uses "positions" selector)
> > > >       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.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
> > > >
> > > >   h.. fixed bug in RestorePriceArrays();
> > > > 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
> > >
> > >
> > >
> > > Send BUG REPORTS to bugs@xxxx
> > > Send SUGGESTIONS to suggest@xxxx
> > > -----------------------------------------
> > > 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/
> > >
> > >
> > >
> >
> >
> > Send BUG REPORTS to bugs@xxxx
> > Send SUGGESTIONS to suggest@xxxx
> > -----------------------------------------
> > 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/
> >
> >


------------------------ Yahoo! Groups Sponsor ---------------------~-->
Rent DVDs Online - Over 14,500 titles.
No Late Fees & Free Shipping.
Try Netflix for FREE!
http://us.click.yahoo.com/Tq9otC/XP.FAA/3jkFAA/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/