February 3, 2015
When and how often AFL code is executed?
All analysis in AmiBroker including charting, Analysis window or commentaries is based on underlying AFL code, which is being executed by the program to produce the required output. Therefore – any changes we see in the charts or analysis results (for example – chart updated with new ticks) mean that the program has received some input, then based on this information has recalculated the formula and presented the updated results.
These refreshes / formula recalculations depend on several factors:
- In a local database, which is not updated by a realtime plugin, the formula would get refreshed if we perform any actions, such as clicking, scrolling, zooming, changing parameters, choosing another symbol or interval, importing new data etc.
- In addition to the actions listed in (1), if we are running a plugin-based realtime feed, then the chart is refreshed based on “Intraday refresh interval” defined in Tools –> Preferences –> Intraday. If we enter 0 into this field, then it will result in chart being refreshed with every new tick (up to 10-times per sec).
- It is also possible to force certain refresh rate using dedicated RequestTimedRefresh() function in the AFL code: http://www.amibroker.com/f?RequestTimedRefresh
- It is also possible to manually refresh chart (or all chart and windows) using View->Refresh (or View->Refresh All) menu.
It is worth noting that chart formulas are refreshed only when they are placed on the active chart sheets. Non-active sheets just ‘don’t exist’, they are only created when you click on a bottom tab (sheet tab) to make them visible and destroyed immediately when other sheet becomes active. This ensures that precious CPU resources are not wasted on invisible chart sheets.
Additionally – by default charts in minimized chart windows or when multiple MDI windows are open and one is maximized, the windows in background that are completely obscured by others and/or minimized windows are not redrawn/refreshed during normal RT refresh. We can however call RequestTimedRefresh function with onlyvisible argument set to False and that will force regular refreshes in such windows as well.
RequestTimedRefresh( 1 , False ); // force refresh for minimized MDI window or obscured MDI windo
With regards to Analysis window – in general the formula is executed when we run e.g. Scan, Exploration, Backtest etc. Analysis window executes the formulas in multiple threads running in parallel (this tutorial explains multi-threading aspects: http://www.amibroker.com/guide/h_multithreading.html).
Repeated execution (to keep the code running over and over) in Analysis window can be also enabled with “Auto-repeat” option, the following Knowledge Base article explains it in details:
Last but definitely not least, we need to remember that AmiBroker may and will perform some executions internally for its own purposes such as:
- during AFL Syntax Check that happens when applying the chart, or sending the code to Analysis window, or updating existing formula
- when it is about to display Parameters window for the first time for given chart or during Parameters’ “Reset All” operation
- at the beginning of Optimization when it reads Optimize() statements to configure the optimization process and/or smart optimization engines
- at the beginning of each In-sample walk-forward step again to setup optimization parameters
Bottom line: we should never assume that certain formula will only be executed e.g. N-times during certain time-frame, because all really depends on the above factors, our actions and changing input.
Filed by Tomasz Janeczko at 5:35 pm under AFL
Comments Off on When and how often AFL code is executed?