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

Re: [amibroker] Re: AmiBroker 4.45.0 BETA released



PureBytes Links

Trading Reference Links




Hi Dimitris,
 
I read the messages you referenced and I have 
filed it with my "best indicators" section. Thank 
you!
 
Best, 
Colin
<BLOCKQUOTE 
>
  ----- Original Message ----- 
  <DIV 
  >From: 
  DIMITRIS 
  TSOKAKIS 
  To: <A title=amibroker@xxxxxxxxxxxxxxx 
  href="">amibroker@xxxxxxxxxxxxxxx 
  Sent: Monday, October 20, 2003 3:34 
  PM
  Subject: [amibroker] Re: AmiBroker 4.45.0 
  BETA released
  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,<A 
  href="">http://groups.yahoo.com/group/amibroker/message/47028<A 
  href="">http://groups.yahoo.com/group/amibroker/message/47031The 
  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:> > > > 
  <A 
  href="">http://www.amibroker.com/members/bin/ab4450beta.exe> 
  > > > and> > > > <A 
  href="">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:> > > <A 
  href="">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 <A 
  href="">http://www.stanford.edu/~wfsharpe/art/sr/sr.htm 
  .> > > Calculation: first average percentage return and standard 
  deviation> > > of returns is calculated. Then these two 
  figures are annualized by> > > multipling them by ratio 
  (NumberOfBarsPerYear)/> > > (AvgNumberOfBarsPerTrade). Then the 
  risk free rate of return is> > > subtracted (currently hard-coded 
  5) from annualized average return> > > and then divided by 
  annualized standard deviation of returns.> > > >> > 
  > > 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> > > <A 
  href="">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: <A 
  href="">http://groups.yahoo.com/group/amiquote/messages/)> 
  > > --------------------------------------------> > > Check 
  group FAQ at:> <A 
  href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html> 
  > >> > > Your use of Yahoo! Groups is subject to> <A 
  href="">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: <A 
  href="">http://groups.yahoo.com/group/amiquote/messages/)> 
  > --------------------------------------------> > Check group FAQ 
  at:> <A 
  href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html> 
  >> > Your use of Yahoo! Groups is subject to <A 
  href="">http://docs.yahoo.com/info/terms/> 
  >> >Send 
  BUG REPORTS to bugs@xxxxxxxxxxxxxSend SUGGESTIONS to 
  suggest@xxxxxxxxxxxxx-----------------------------------------Post 
  AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A 
  href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
  group FAQ at: <A 
  href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
  Your use of Yahoo! Groups is subject to the <A 
  href="">Yahoo! Terms of Service. 







Yahoo! Groups Sponsor












Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html



Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.