Issue 8/2001 (No. 16) |
AmiBroker Tips newsletter. Issue 8/2001. No 16. 25 March 2001. Copyright (C)2001 Tomasz Janeczko. All back issues available from: http://www.amibroker.com/newsletter/ |
Welcome to the 8th issue of AmiBroker Tips newsletter in the 2001. This week
I will focus on new functions in AFL introduced in AmiBroker 3.52 beta (available
for download from here: http://www.amibroker.net/bin/ab352beta.zip)
code for detecting channel breakouts.
Just a reminder: if you have any comments/suggestions or article ideas, please don't hesitate to drop a line to newsletter@amibroker.com
A new AmiBroker update (3.52 beta - available for download from here: http://www.amibroker.net/bin/ab352beta.zip) brings some exiting new features to AFL including access to hand-drawn studies from your formulas, adaptive moving averages, access to other stock data and more. In this issue of the newsletter I will describe these new functions along with application examples.
2.1 STRLEN - string length
SYNTAX | strlen( STRING) |
RETURNS | NUMBER |
FUNCTION | calculates the length of the string |
EXAMPLE |
This function could be used for (for example) filtering out only 3 letter stock codes: buy = something AND strlen( name() ) == 3; |
2.2 AMA - adaptive moving average
SYNTAX | ama( ARRAY, SMOOTHINGFACTOR ) |
RETURNS | ARRAY |
FUNCTION | calculates adaptive moving average - simliar to EMA() but smoothing factor could be time-variant (array). |
EXAMPLE |
The example of volatility-weighted adaptive moving average formula: graph0 = ema( close, 15 ); graph0 = ama( close, sc ); |
2.3 EXREM - remove excessive signals
SYNTAX | exrem( ARRAY1, ARRAY2 ) |
RETURNS | ARRAY |
FUNCTION | removes excessive signals: returns 1 on the first occurence of "true" signal in Array1 then returns 0 until Array2 is true even if there are "true" signals in Array1 |
EXAMPLE |
buy = ExRem( buy, sell ); |
2.4 FLIP
SYNTAX | flip( ARRAY1, ARRAY2 ) |
RETURNS | ARRAY |
FUNCTION | works as a flip/flop device (electronic/electric engineers will know
what I mean) returns 1 from the first occurence of "true" signal in Array1 until a "true" occurs in Array2 which resets the state back to zero unil next "true" is detected in Array1... |
EXAMPLE |
buy = ExRem( buy, sell ); buy = Flip( buy, sell ); // this essentially reverts the process of ExRem - multiple signals are back again |
2.5 ISEMPTY
SYNTAX | isempty( ARRAY ) |
RETURNS | ARRAY |
FUNCTION | returns 1 (or 'true') when given point in array is {empty} Note: {empty} value is used internaly by AFL to mark bars when the value is not available - for example for the first 20 bars the value of 20-day simple moving average is not available ({empty}) |
EXAMPLE |
movagv = ma( close, 30 ); WriteIF( IsEmpty( movavg ), "Moving average not available yet", WriteVal( movavg ) ); |
2.6 ISTRUE
SYNTAX | istrue( ARRAY ) |
RETURNS | ARRAY |
FUNCTION | returns 1 (or 'true') when given point is not {empty} AND not zero |
EXAMPLE |
|
2.7 FOREIGN
SYNTAX | foreign( TICKER, DATAFIELD ) |
RETURNS | ARRAY |
FUNCTION | Allows referencing other (than current) tickers in the AFL formulas.
TICKER is a string that holds the symbol of the stock. DATAFIELD defines
which array is referenced. Allowable data fields: "open", "close",
"high", "low", "volume", "interest". |
EXAMPLE |
This function provides an easy way to implement overlays, as shown in the following code: /* Red line - current security price */ graph0 = close; graph1 = lastvalue( highest( graph0 ) )/ lastvalue( highest( graph1 ) ) * graph1; |
2.8 STUDY
SYNTAX | study( STUDYID, CHARTID = 1 ) |
RETURNS | ARRAY |
FUNCTION |
generates an array equivalent to a trendline study drawn by the user
- allows detecting trendline breakouts from AFL. |
EXAMPLE |
buy = cross( close, study( "re" ) ); Detailed description on using studies in AFL is provided in the below. |
3 Tip of the week: Using studies in your AFL formulas
AmiBroker 3.52 introduces ability to reference hand-drawn studies from AFL formulas. This feature is quite unique among trading software (for example Metastock can not do this) and as you will find out using this feature is quite easy.
I will show you an example how to check if the trend line is broken from AFL code. All we need to do is three simple steps:
3.1 Drawing trend line
A trend line is a sloping line drawn between two prominent points on a chart. In this example we will draw the rising trend line that defines the uptrend. This kind of trend line is usually drawn between two (or more) troughs (low points) to illustrate price support. For sure you know how to draw a trend line in AmiBroker - just select a "Trend line" tool from "Draw" toolbar, find at least two recent troughs and just draw the line. |
3.2 Define study ID
As you probably know, you can modify the properties of each line drawn in AmiBroker by clicking with the right mouse button over the study and selecting "Properties" from the menu. The properties dialog that shows up allows you to define exact start/end points and choose line colour, style and left and/or right extension mode. For further analysis we will use the right-extended trend line (click on appropriate checkbox) to make sure that the trend line is automaticaly extended when new data are added. |
Since version 3.52 the properties dialog allows also to define "Study ID" (the combo below colour box). "Study ID" is a two-letter code of the study that can be assigned to any study within a chart that allows AmiBroker to reference it from AFL. Predefined identifiers are: "UP" - uptrend, "DN" - downtrend, "SU" - support, "RE" - resistance, "ST" - stop loss, however you can use ANY identifiers (there are no limitations except that AmiBroker accepts only 2 letter codes). This way if you draw the support lines in many stocks and give them all "SU" identifier then you will be able to reference the support line from AFL code.
So we will assign the "SU" study ID to the rising support trend line we have just drawn.
3.3 Write the formula that checks trend line break
In this example we will detect if the closing price drops BELOW support trend line. This is actually very simple:
sell = cross( study( "SU" ), close );
Note that study() function accepts two arguments: the first is StudyID two letter code that corresponds to one given in properites dialog; the second argument is chart ID - by default it is 1 (when it is not given at all) and then it references the studies drawn in the main price pane. For checking studies drawn in other panes you should use the codes given above (in the table describing study() function).
.... and that's all for this week - hope you enjoyed reading
AmiBroker Tips newsletter. Issue 8/2001. Copyright (C)2001 Tomasz Janeczko. All back issues available from: http://www.amibroker.com/newsletter/