Exemplo n.º 1
0
def average_true_range(high_arr, low_arr, close_arr, n):
    """Calculate the Average True Range
    See https://www.investopedia.com/terms/a/atr.asp for details

    :param high_arr: high price of the bar, expect series from cudf
    :param low_arr: low price of the bar, expect series from cudf
    :param close_arr: close price of the bar, expect series from cudf
    :param n: time steps
    :return: average true range indicator
    """
    tr = true_range(high_arr.data.to_gpu_array(), low_arr.data.to_gpu_array(),
                    close_arr.data.to_gpu_array())
    ATR = Ewm(n, tr).mean()
    return cudf.Series(ATR)
Exemplo n.º 2
0
def vortex_indicator(high_arr, low_arr, close_arr, n):
    """Calculate the Vortex Indicator for given data.
    Vortex Indicator described here:

        http://www.vortexindicator.com/VFX_VORTEX.PDF

    :param high_arr: high price of the bar, expect series from cudf
    :param low_arr: low price of the bar, expect series from cudf
    :param close_arr: close price of the bar, expect series from cudf
    :param n: time steps to do EWM average
    :return:  Vortex Indicator in cudf.Series
    """
    TR = true_range(high_arr.to_gpu_array(), low_arr.to_gpu_array(),
                    close_arr.to_gpu_array())

    VM = lowhigh_diff(high_arr.to_gpu_array(), low_arr.to_gpu_array())

    VI = division(Rolling(n, VM).sum(), Rolling(n, TR).sum())
    return cudf.Series(VI, nan_as_null=False)
Exemplo n.º 3
0
def average_directional_movement_index(high_arr, low_arr, close_arr, n, n_ADX):
    """Calculate the Average Directional Movement Index for given data.

    :param high_arr: high price of the bar, expect series from cudf
    :param low_arr: low price of the bar, expect series from cudf
    :param close_arr: close price of the bar, expect series from cudf
    :param n: time steps to do EWM average
    :param n_ADX: time steps to do EWM average of ADX
    :return: Average Directional Movement Index in cudf.Series
    """
    UpI, DoI = upDownMove(high_arr.to_gpu_array(), low_arr.to_gpu_array())
    last_ele = len(high_arr) - 1
    tr = true_range(high_arr.to_gpu_array(), low_arr.to_gpu_array(),
                    close_arr.to_gpu_array())
    ATR = Ewm(n, tr).mean()
    PosDI = division(Ewm(n, UpI).mean(), ATR)
    NegDI = division(Ewm(n, DoI).mean(), ATR)
    NORM = division(abs_arr(substract(PosDI, NegDI)), summation(PosDI, NegDI))
    NORM[last_ele] = math.nan
    ADX = cudf.Series(Ewm(n_ADX, NORM).mean(), nan_as_null=False)
    return ADX