How To Compute Average Directional Index (ADX) using Lua?

by clarabelle , in category: SEO Tools , a month ago

How To Compute Average Directional Index (ADX) using Lua?

Facebook Twitter LinkedIn Telegram Whatsapp Pocket

1 answer

by creola.ebert , a month ago

@clarabelle 

To compute the Average Directional Index (ADX) in Lua, you can use the following code snippet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function calculate_ADX(high, low, close, period)
    local sum_TR = 0
    local sum_DMplus = 0
    local sum_DMminus = 0

    local TR_list = {}
    local DMplus_list = {}
    local DMminus_list = {}

    for i=2, #close do
        local TR = math.max(high[i] - low[i], math.abs(high[i] - close[i-1]), math.abs(low[i] - close[i-1]))
        TR_list[i] = TR

        local DMplus = 0
        local DMminus = 0

        if high[i] - high[i-1] > low[i-1] - low[i] and high[i] - high[i-1] > 0 then
            DMplus = high[i] - high[i-1]
        end

        if low[i-1] - low[i] > high[i] - high[i-1] and low[i-1] - low[i] > 0 then
            DMminus = low[i-1] - low[i]
        end

        DMplus_list[i] = DMplus
        DMminus_list[i] = DMminus

        if i > period then
            sum_TR = sum_TR + TR_list[i]
            sum_DMplus = sum_DMplus + DMplus_list[i]
            sum_DMminus = sum_DMminus + DMminus_list[i]
        end
    end

    local DX = (math.abs(sum_DMplus - sum_DMminus) / sum_TR) * 100
    local ADX = (DX + ((period - 1) * previous_ADX)) / period

    return ADX
end


In this code, you need to pass in arrays for high, low, and close containing the high, low, and closing prices for each period, as well as the period for which you want to calculate the ADX. This function will calculate the True Range (TR), the Directional Movement (DM) values, and then compute the ADX based on the formula.