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

[amibroker] AmiBroker 4.41.2 BETA released



PureBytes Links

Trading Reference Links




 
Hello,A new beta version (4.41.2) of AmiBroker has 
just been released.It is available for registered users only from the 
members area at:<A 
href=""><FONT 
size=2>http://www.amibroker.com/members/bin/ab4412beta.exe<FONT 
size=2>If you forgot your user name / password to the members areayou can 
use automatic reminder service at: <A 
href=""><FONT 
size=2>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 
)
 




CHANGES FOR VERSION 4.41.2 (as compared to 4.41.1)
  
  now Sum produces values for periods upto and including BarCount, so Sum( 
  array, BarCount ) gives the value instead of Null 
  
  fixed problem with saving parameters on exit when the user did not 
  specify default value for string parameter using ParamStr("name", "")
  
  fixed 38-byte memory leak when returning values from user-defined 
  functions
  
  real-time mode: after AFL syntax error commentary AFL editor is not 
  refreshed until error is fixed and user presses 'apply'
  
  eSignal 1.6.0 plugin (available separately from<A 
  href=""> 
  http://www.amibroker.com/bin/eSignal160.exe):
  
    
    much quicker backfills
    
    implemented force-reconnect feature in eSignal plugin
    
    fixed minor timing issue in eSignal plugin 
    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.
Best regards,Tomasz Janeczkoamibroker.com
 

AmiBroker 4.41.2 Beta Read Me
September 12, 2003 20:34 
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.41.2 beta" written in the 
About box.
See CHANGE LOG below for detailed list of changes.
HELP ON NEW FEATURES
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: 

  switching time frame of build-in O, H, L, C, V, OI, Avg arrays: 
  TimeFrameSet, TimeFrameRestore 
  compressing/expanding single arrays to/from specified interval: 
  TimeFrameCompress, TimeFrameExpand 
  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 
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
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 priceTimeFrameGetPrice( "C", inWeekly, -3 ) - gives 
you weekly Close price 3 weeks agoTimeFrameGetPrice( "H", inWeekly, -2 
) - gives you weekly High price 2 weeks agoTimeFrameGetPrice( 
"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 
functionsTimeFrameExpand( 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 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)

EXAMPLES
EXAMPLE 1: Plotting weekly MACD and cross arrows from daily data 
TimeFrameSet( inWeekly );m = MACD(12, 26 ); // MACD from WEEKLY 
dataTimeFrameRestore();
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 
histogramTimeFrameRestore();
/* 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 
*/ANDbearpower < 0 and bearpower > Ref( bearpower, -1 ) /* 2nd 
screen bear power negative but rising */ANDH > Ref( H, -1 ); /* 3rd 
screen, if prices make a new high */
BuyPrice = Ref( H, -1 ); // buy stop level;

Sell = 0 ; // exit only by stopsApplyStop( stopTypeProfit, 
stopModePercent, 30, True );ApplyStop( stopTypeTrailing, stopModePercent, 
20, True );
CHANGE LOG



CHANGES FOR VERSION 4.41.2 (as compared to 4.41.1)
  
  now Sum produces values for periods upto and including BarCount, so Sum( 
  array, BarCount ) gives the value instead of Null 
  
  fixed problem with saving parameters on exit when the user did not 
  specify default value for string parameter using ParamStr("name", "")
  
  fixed 38-byte memory leak when returning values from user-defined 
  functions
  
  real-time mode: after AFL syntax error commentary AFL editor is not 
  refreshed until error is fixed and user presses 'apply'
  
  eSignal 1.6.0 plugin (available separately from<A 
  href=""> 
  http://www.amibroker.com/bin/eSignal160.exe):
  
    
    much quicker backfills
    
    implemented force-reconnect feature in eSignal plugin
    
    fixed minor timing issue in eSignal plugin 
    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)
  
  fixed chart refresh locking that happened when user was drawing some 
  object and abandonend it by pressing ESC key.
  
  View->Refresh and View->Refresh All menus now reset internal chart 
  refresh lock flag just in case.
  
  plugin status is refreshed more often
  
  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)
  
  TimeFrameSet() now affects result of Interval() AFL function. 
  TimeFrameRestore() resets it back.
  
  Plot() makes copies of OHL arrays when styleCandle or styleBar is used so 
  statements likeSetForeign("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()
  
  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)
  
  legacy 'stoch()' function removed. Use StochK and StochD instead.
  
  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. 
  
  
  Pref: Misc: auto-hide timeout field: added check for allowed values from 
  1...32
  
  
  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.
  
  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
  
  TimeFrameCompress( 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
  
  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:
  
    
    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.graph0 = TimeFrameExpand( 
    TimeFrameCompress( Close, inWeekly, compressLast ), inWeekly, expandLast 
    );graph1 = TimeFrameExpand( TimeFrameCompress( Open, inWeekly, 
    compressOpen ), inWeekly, expandFirst );
  
  TimeFrameGetPrice( pricefield, interval, shift = 0, mode 
  = expandFirst );- references OHLCV fields from other time 
  frames.This works immediatelly without need to call 
  TimeFrameSetTimeFrameGetPrice( "O", inWeekly, -1 ) - 
  gives you previous week OPEN priceTimeFrameGetPrice( "C", inWeekly, 
  -3 ) - gives you weekly Close price 3 weeks 
  agoTimeFrameGetPrice( "H", inWeekly, -2 ) - gives you weekly 
  High price 2 weeks agoTimeFrameGetPrice( "O", inWeekly, 0 ) - 
  gives you this week open price.TimeFrameGetPrice( "H", inDaily, -1 
  ) - gives previous day high when working on intraday 
  dataPrice 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 
  functionsTimeFrameExpand( 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.
  
  new interval / timeframe constants:in1Minute = 
  60in5Minute = 5 * 60 in15Minute = 15 
  * 60 inHourly = 3600 inDaily = 24 * 
  3600inWeekly = 5 * 24 * 3600 
  inMonthly = 25 * 24 * 3600 
  compressLast = 0 compressOpen 
  = 1 compressHigh = 2 compressLow = 3 
  compressVolume = 4 expandLast = 
  0 expandFirst = 1 expandPoint = 2 
  
  
  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 
  callRestorePriceArrays();EXAMPLE:SetForeign( "MSFT" 
  );dm = MACD(); // dm holds MACD of MSFT regardless of currently selected 
  symbolRestorePriceArrays();Plot( dm, "MACD of MSFT", colorRed 
  );Plot( MACD(), "MACD of " + Name(), colorBlue );
  
  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 <A 
href="">bugs@xxxxxxxxxxxxx 






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.