Here is an examples of Acceleration/Deceleration oscillator as it is described at
Accelerator/Decelerator Oscillator - Bill Williams - Technical Indicators - Technical Analysis
How to install:
1) Create the file AC.lua
2) Copy the code below into this file
3) Save the file
or
1,2,3) Just right-click on
this link and choose "Save As..." from the menu.
4) Go to "Charts/Chart/Manage Custom Indicators" menu of the Trading Station
5) Click "Load"
6) Choose the AC.lua file create at the previous steps
Please note that Awesome Oscillator indicator must be also installed (
Example: Awesome Oscillator) and named AO.lua
Code:
function Init()
indicator:name("Acceleration/Deceleration");
indicator:description("No description");
indicator:requiredSource(core.Bar);
indicator:type(core.Oscillator);
indicator.parameters:addInteger("FM", "Fast Moving Average for Awesome oscillator", "The number of periods to calculate the fast moving average of the median price", 5, 2, 10000);
indicator.parameters:addInteger("SM", "Slow Moving Average for Awesome oscillator", "The number of periods to calculate the slow moving average of the median price", 35, 2, 10000);
indicator.parameters:addInteger("M", "Moving Average for Acceleration/Deceleration", "The number of periods to calculate the moving average of the AO", 5, 2, 10000);
indicator.parameters:addColor("CL_color", "Color for covering line", "Color for covering line", core.rgb(255, 255, 255));
indicator.parameters:addColor("GO_color", "Color for higher bars", "Color for higher bars", core.rgb(0, 255, 0));
indicator.parameters:addColor("RO_color", "Color for lower bars", "Color for lower bars", core.rgb(255, 0, 0));
end
local FM;
local SM;
local M;
local first;
local source = nil;
-- Streams block
local CL = nil;
local GO = nil;
local RO = nil;
local AO = nil;
local MVA = nil;
function Prepare()
FM = instance.parameters.FM;
SM = instance.parameters.SM;
M = instance.parameters.M;
source = instance.source;
AO = core.indicators:create("AO", source, FM, SM);
MVA = core.indicators:create("MVA", AO.DATA, M);
first = MVA.DATA:first();
local name = profile:id() .. "(" .. source:name() .. ", " .. FM .. ", " .. SM .. ", " .. M .. ")";
instance:name(name);
CL = instance:addStream("AC", core.Line, name .. ".AC", "AC", instance.parameters.CL_color, first);
CL:addLevel(0);
GO = instance:addStream("GO", core.Bar, name .. ".GO", "GO", instance.parameters.GO_color, first);
RO = instance:addStream("RO", core.Bar, name .. ".RO", "RO", instance.parameters.RO_color, first);
end
function Update(period, mode)
AO:update(mode);
MVA:update(mode);
if (period >= first) then
CL[period] = AO.DATA[period] - MVA.DATA[period];
end
if (period >= first + 1) then
if (CL[period] > CL[period - 1]) then
GO[period] = CL[period];
else
RO[period] = CL[period];
end
end
end