PureBytes Links
Trading Reference Links
|
Colin,
You may read about TimeFrame functions from the read me
(it is included with each post about new beta, for example this:
http://groups.yahoo.com/group/amibroker/message/49968
Look at the "Multiple time frame support" paragraph
in the middle of the post.
It includes description of all functions and examples.
In short multiple time frame functions allow you
to MIX different time frames in one formula, for example
generate some signals using weekly time frame
and combine them with signals from daily time frame.
Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message -----
From: "Colin Quinney" <crquin@xxxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Monday, October 20, 2003 4:17 PM
Subject: Re: [amibroker] Re: AmiBroker 4.45.0 BETA released
> 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@xxxxxx>
> 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@xxxxxxxxx>
> > 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@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/
> > >
> > >
> > >
> >
> >
> > 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/
> >
> >
>
>
>
>
> 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/
>
>
>
------------------------ 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/
|