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

Re: [amibroker] AmiBroker 4.48.1 BETA released



PureBytes Links

Trading Reference Links




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

  
  
  
  
  
    <SPAN 
    >% profit added to detailed log mode 
    
  
  
  
  
  
    <SPAN 
    >fixed bug in portfolio backtester occuring when 
    'allow same bar exit' was turned off and 'immediate stops' was turned on 2 
    buys and 2 sells occurred the in 2 bars in row 
  
  
  
  
  
  
    <SPAN 
    >Auto Analysis/Settings,setting modified "portfolio 
    report mode: trade list/detailed log" moved to "report" tab 
    
  
  
  
  
  
    <SPAN 
    >Auto Analysis/Settings, rotational mode: added 
    selection of trade price and trade delay to portfolio settings 
    page 
  
  
  
  
  
    <SPAN 
    >Auto Analysis/Settings, portfolio backtester (both 
    regular and rotational modes): added ability to pad and align all symbols to 
    reference symbol. Note: by default this setting is OFF. Use responsibly. It 
    may slow down backtest and introduce some slight changes to indicator values 
    when your data has holes and holes are filled with previous bar data. The 
    feature is intended to be used ONLY when your system uses general market 
    timing (generates global signals based on data and/or indicators calculated 
    using Foreign from 'reference' symbol). Note 2: if reference symbol does not 
    exist, data won't be padded. 
  
  
  
  
  
    <SPAN 
    >Auto Analysis/Settings, report tab: added ability to 
    define risk-free rates for Sharpe and Ulcer Performance Index 
    calculations. 
  
  
  
  
  <SPAN 
  >CHANGES FOR VERSION 4.43.2 (as 
  compared to 4.43.0)
  
  
  
  
  
    <SPAN 
    >backtester generates now error message when someone 
    attempts to use buy/sell/short/cover signals in rotational 
    mode 
  
    <SPAN 
    >column headings fixed in AA porfolio backtest report 
    
  
  
  
  
  <SPAN 
  >CHANGES FOR VERSION 4.43.0 (as 
  compared to 4.42.0)
  
  
  
  
  
    <SPAN 
    >Portfolio Optimize mode added 
  
  
  
  
  
  
    <SPAN 
    >in regular backtest mode now it is possible to 
    specify the score of the symbol (on bar-by-bar basis) via PositionScore 
    variable. In this mode the score is used only at trade ENTRY to decide which 
    securities should be traded in case when there are more simultaneous entry 
    signals than max. allowable positions or available funds. AmiBroker will 
    'prefer' securities with higher absolute value of the score. If 
    PositionScore is not used then it is assumed to be 1 for all 
    securities. 
  
  
  
  
  <FONT face="Times New Roman" 
  size=2>NOTE: regular mode must be used for all 
  your backtesting except the cases when you want rotational-trading (fund 
  switching). Only regular mode uses buy/sell/short/cover 
  signals.
  
  
  
  
  
    <SPAN 
    >rotational-trading mode must now be turned on by 
    calling new EnableRotationalTrading() function at the top of your 
    formula. 
  
  
  
  
  <FONT face="Times New Roman" 
  size=2>AA / Settings / Portfolio:1. Max. 
  Traded renamed to more meaningfull "Max. Open Positions" - defines the maximum 
  number of positions (trades) that can be open simultaneously (at any 
  time)2. Max. Ranked renamed to more meaningfull "Worst Rank Held" 
  (rotational trading mode only) - must be equal or greater than max. open 
  positions, if it is greater than Max. open positions then once a position is 
  taken in a security it will not be exited until the ranking of that security 
  drops below "Worst Rank Held"
  
  
  
  
  
    <SPAN 
    >"Allow same day exit (single bar trade)" now affects 
    Portfolio test too. 
  
  
  
  
  
    <SPAN 
    >SetOption() calls affect Portfolio backtest now 
    added:SetOption("MaxOpenPositions") 
    SetOption("WorstRankHeld")SetOption("MinShares") 
  
  
  
  
  
  
    <SPAN 
    >fixed Avg Profit/Loss figures in "all trades" 
    section of portfolio report 
  
  
  
  
  
    <SPAN 
    >added average PERCENT profit/loss 
    figures 
  
  
  
  
  
    <SPAN 
    >internal accuracy of calculations of LinearReg, 
    LinRegSlope, LinRegIntercept, StdErr, TSF raised from 32 bit floating point 
    to 64 bit floating point 
  
  
  
  
  
    <SPAN 
    >fix: rotational trading mode does not enter position 
    when score is 999999 
  
  
  
  
  
    <SPAN 
    >fixed column setup in AA 
  
  
  
  
  
  
    <SPAN 
    >other minor fixes 
  
  
  
  
  
  
    <SPAN 
    >as a temporary solution for people using Rx new 
    version now uses HTMLView2.exe (that is shipped with the beta) to display 
    the portfolio report. 
  
  
  
  
  <SPAN 
  >CHANGES FOR VERSION 4.42.0 (as 
  compared to 4.41.2)
  
  
  
  
  
    <SPAN 
    >first (incomplete) early beta 
    version of the portfolio backtester 
  
  
    <SPAN 
    >fixed plot of Null arrays using styleArea 
    
    <SPAN 
    >fixed display problem with % progress in 
    single-stock optimization 
    <SPAN 
    >other minor fixes 
  
  
  
  
  <SPAN 
  >CHANGES FOR VERSION 4.41.2 (as 
  compared to 4.41.1)
  
  
    <SPAN 
    >now Sum produces values for periods upto and 
    including BarCount, so Sum( array, BarCount ) gives the value instead of 
    Null 
  
  
    <SPAN 
    >fixed problem with saving parameters on exit when 
    the user did not specify default value for string parameter using 
    ParamStr("name", "") 
  
  
    <SPAN 
    >fixed 38-byte memory leak when returning values from 
    user-defined functions 
  
  
    <SPAN 
    >real-time mode: after AFL syntax error commentary 
    AFL editor is not refreshed until error is fixed and user presses 
    'apply' 
  
  
    <SPAN 
    >eSignal 1.6.0 plugin (available separately 
    from 
    http://www.amibroker.com/bin/eSignal160.exe): 
  
  
  
    
      <SPAN 
      >much quicker backfills 
  
  
  
    
      <SPAN 
      >implemented force-reconnect feature in eSignal 
      plugin 
  
  
    
      <SPAN 
      >fixed minor timing issue in eSignal plugin 
      
  
    
      <SPAN 
      >implemented workaround to invalid tick numbers 
      sent sometimes by eSignal's data manager. 
  
  
    
    
    
    <SPAN 
    >thanks to all users for reporting errors and helping 
    ironing out outstanding 
  issues.
  
  
  <SPAN 
  >CHANGES FOR VERSION 4.41.1 (as 
  compared to 4.41.0)
  
  
    <SPAN 
    >fixed chart refresh locking that happened when user 
    was drawing some object and abandonend it by pressing ESC key. 
    
  
  
    <SPAN 
    >View->Refresh and View->Refresh All menus now 
    reset internal chart refresh lock flag just in case. 
  
  
  
    <SPAN 
    >plugin status is refreshed more often 
    
  
  
    <SPAN 
    >maximum number of chart sheets increased to 60 
    (Caveat: when you increase the number of sheets you would not be able to use 
    the layouts with OLDER versions of the software) 

  
  
    <SPAN 
    >TimeFrameSet() now affects result of Interval() AFL 
    function. TimeFrameRestore() resets it back. 
  
  
    <SPAN 
    >Plot() makes copies of OHL arrays when styleCandle 
    or styleBar is used so statements like<FONT 
    face="Courier New" size=2><SPAN 
    >SetForeign("AAPL");<FONT 
    face="Courier New" size=2><SPAN 
    ><FONT 
    face="Courier New">Plot( C, "Price", colorYellow, styleCandle 
    );<FONT 
    face="Courier New">SetForeign("MSFT");<FONT 
    face="Courier New">Plot( C, "Price 2", colorBlue, styleCandle 
    );<SPAN 
    >plot correctly. Previously one would need to use 
    PlotOHLC() or PlotForeign() 
  
  
    <SPAN 
    >separate heap for syntax tree walker implemented, so 
    larger AFL programs like PortfolioTrader should execute faster while 
    retaining the speed improvement gained in 4.40.4 for small 
    formulas. 
  
  <SPAN 
  >CHANGES FOR VERSION 4.41.0 (as 
  compared to 4.40.4)
  
  
    <SPAN 
    >legacy 'stoch()' function removed. Use StochK and 
    StochD instead. 
  
  
    <SPAN 
    >weekly / monthly charts are not affected by intraday 
    compression settingsin preferences any more and always use last available 
    day date for time stamp of time-compressed bar. 
  
  
  
    <SPAN 
    >Pref: Misc: auto-hide timeout field: added check for 
    allowed values from 1...32 
  <FONT face="Times New Roman" 
  size=2> 
  
  
    <SPAN 
    >TimeFrameSet<FONT 
    size=2>( interval ) function implemented- 
    replaces current price/volume arrays: open, high, low, close, volume, 
    openint, avg with time-compressed bars of specified interval once you 
    switched to a different time frame all calculations and built-in indicators 
    operate on selected time frame. To get back to original interval call 
    TimeFrameRestore() funciton. 
  
  
    <SPAN 
    >TimeFrameRestore<FONT 
    size=2>()- restores price arrays replaced 
    by SetTimeFrame. 
  
  <FONT face="Times New Roman" 
  size=2>Note that only OHLC, V, OI and Avg 
  built-in variables are restored to original time frame when you call 
  TimeFrameRestore(). All other variables created when being in different time 
  frame remain compressed. To de-compress them to original interval use 
  TimeFrameExpand
  
  
    <SPAN 
    >TimeFrameCompress<FONT 
    size=2>( array, interval, mode = compressLast 
    )- compresses single array to given interval using given mode, available 
    modes:compressLast - last (close) value of the array within 
    intervalcompressOpen - open value of the array within 
    intervalcompressHigh - highest value of the array within 
    intervalcompressLow - lowest value of the array within 
    intervalcompressVolume - sum values of the array within 
    interval 
  
  
    <SPAN 
    >TimeFrameExpand<FONT 
    size=2>( array, interval, mode = expandLast 
    )- expands time-compressed array from 'interval' time 
    frame('interval' must match the value used in TimeFrameCompress or 
    TimeFrameSet)Available modes: 
  
  
    
      <SPAN 
      >expandLast - the compressed value is expanded 
      starting from last bar within given period (so for example weekly 
      close/high/low is available on Friday's bar) 
  
  
  
    
      <SPAN 
      >expandFirst - the compressed value is expanded 
      starting from first bar within given period(so for example weekly open 
      is available from Monday's bar) 
  
    
      <SPAN 
      >expandPoint - the resulting array gets not empty 
      values only for the last bar within given period (all remaining bars are 
      Null (empty))Caveat: expandFirst used on price different than open may 
      look into the future.For example if you create weekly HIGH series, 
      expanding it to daily interval using expandFirst will enable you to know 
      on MONDAY what was the high for entire 
      week.<SPAN 
      >graph0 = TimeFrameExpand( TimeFrameCompress( 
      Close, inWeekly, compressLast ), inWeekly, expandLast 
      );<SPAN 
      ><FONT 
      face="Courier New">graph1 = TimeFrameExpand( TimeFrameCompress( Open, 
      inWeekly, compressOpen ), inWeekly, expandFirst 
      ); 
  
  
    <SPAN 
    >TimeFrameGetPrice<FONT 
    size=2>( pricefield, interval, shift = 0, mode 
    = expandFirst );- references OHLCV fields from other time 
    frames.This works immediatelly without need to call 
    TimeFrameSet<FONT face="Courier New" 
    size=2>TimeFrameGetPrice( "O", inWeekly, -1 
    ) - gives 
    you previous week OPEN price<FONT face="Courier New" 
    size=2>TimeFrameGetPrice( "C", inWeekly, -3 
    ) - gives 
    you weekly Close price 3 weeks ago<FONT 
    face="Courier New" size=2>TimeFrameGetPrice( 
    "H", inWeekly, -2 )<SPAN 
    > - gives you weekly High price 2 weeks 
    ago<SPAN 
    >TimeFrameGetPrice( "O", inWeekly, 0 
    ) - gives 
    you this week open price.<FONT face="Courier New" 
    size=2>TimeFrameGetPrice( "H", inDaily, -1 
    ) - gives 
    previous day high when working on intraday data 
  <FONT face="Times New Roman" 
  size=2>Price field is one of the 
  following"O", "H", "L", "C", "V", "I" (open interest)Shift works 
  as in Ref() function but it is applied to compressed time frame.Note these 
  functions work like these 3 nested functions<FONT 
  face="Courier New" size=2>TimeFrameExpand( Ref( 
  TimeFrameCompress( array, interval, compress(depending on field used) ), shift 
  ), interval, expandFirst )<SPAN 
  >therefore if shift = 0 compressed data may look 
  into the future ( weekly high can be known on monday ). If you want to write a 
  trading system using this function please make sure to reference PAST data by 
  using negative shift value.The only difference is that TimeFrameGetPrice 
  is 2x faster than nested Expand/Compress.
  
  
    <SPAN 
    >new interval / timeframe 
    constants:<FONT 
    face="Times New Roman">in1Minute = 
    60in5Minute 
    = 5 * 60 <FONT 
    face="Times New Roman">in15Minute = 15 * 60 
    inHourly = 
    3600 inDaily 
    = 24 * 3600<FONT 
    face="Times New Roman">inWeekly = 5 * 24 * 3600 
    inMonthly = 
    25 * 24 * 3600 
  <FONT face="Times New Roman" 
  size=2><FONT 
  face="Times New Roman">compressLast = 0 
  compressOpen = 
  1 compressHigh 
  = 2 <FONT 
  face="Times New Roman">compressLow = 3 
  compressVolume 
  = 4 <FONT 
  face="Times New Roman">expandLast = 0 <FONT 
  face="Times New Roman">expandFirst = 1 
  expandPoint = 
  2 
  
  
    <SPAN 
    >SetForeign<FONT 
    size=2>( 'ticker' )- replaces current 
    price/volume arrays with those of foreign security, returns True if ticker 
    exists, False otherwise.If ticker does not exist (and function returns 
    false) price arrays are not changed at all. 
  <FONT face="Times New Roman" 
  size=2>Equivalent to the following 
  sequence:<SPAN 
  >C = Foreign( "ticker", "C" 
  );<SPAN 
  ><FONT 
  face="Courier New">O = Foreign( "ticker", "O" );<FONT 
  face="Courier New">H = Foreign( "ticker", "H" );<FONT 
  face="Courier New">L = Foreign( "ticker", "L" );<FONT 
  face="Courier New">V = Foreign( "ticker", "V" );<FONT 
  face="Courier New">OI = Foreign( "ticker", "I" );<FONT 
  face="Courier New">Avg = ( C + H + L )/3;<FONT 
  size=2>but 6x faster (SetForeign takes 
  about the same time as single foreign). To restore original prices 
  callRestorePriceArrays();EXAMPLE:<FONT 
  face="Courier New" size=2>SetForeign( "MSFT" 
  );<SPAN 
  ><FONT 
  face="Courier New">dm = MACD(); // dm holds MACD of MSFT regardless of 
  currently selected symbol<FONT 
  face="Courier New">RestorePriceArrays();<FONT 
  face="Courier New">Plot( dm, "MACD of MSFT", colorRed 
  );Plot( MACD(), "MACD of " + 
  Name(), colorBlue );
  
  
    <SPAN 
    >RestorePriceArrays<FONT 
    size=2>();restores arrays overwritten by 
    SetForeign/TimeFrameSet 
  <SPAN 
  >HOW TO REPORT 
  BUGS
  If you 
  experience any problem with this beta version please send detailed description 
  of the problem (especially the steps needed to reproduce it) to <A 
  href="">bugs@xxxxxxxxxxxxx 
  
  
  <SPAN 
  > 
  <SPAN 
  ><FONT 
  face="Courier New" size=2>Send BUG REPORTS to 
  bugs@xxxxxxxxxxxxx<SPAN 
  ><FONT 
  face="Courier New">Send SUGGESTIONS to 
  suggest@xxxxxxxxxxxxx<FONT 
  face="Courier New">-----------------------------------------<FONT 
  face="Courier New">Post AmiQuote-related messages ONLY to: 
  amiquote@xxxxxxxxxxxxxxx (Web 
  page: <A 
  href="">http://groups.yahoo.com/group/amiquote/messages/)<FONT 
  face="Courier New">--------------------------------------------<FONT 
  face="Courier New">Check group FAQ at: <A 
  href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
  Your 
  use of Yahoo! Groups is subject to the <A 
  href="">Yahoo! Terms of 
  Service. 
  Send 
  BUG REPORTS to bugs@xxxxxxxxxxxxxSend SUGGESTIONS to 
  suggest@xxxxxxxxxxxxx-----------------------------------------Post 
  AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A 
  href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
  group FAQ at: <A 
  href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
  Your use of Yahoo! Groups is subject to the <A 
  href="">Yahoo! Terms of Service. 







Yahoo! Groups Sponsor












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



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


Attachment: Description: ""