def hilo(high, low, close, high_length=None, low_length=None, mamode=None, offset=None, **kwargs):
    'Indicator: Gann HiLo (HiLo)'
    high = verify_series(high)
    low = verify_series(low)
    close = verify_series(close)
    high_length = (int(high_length) if (high_length and (high_length > 0)) else 13)
    low_length = (int(low_length) if (low_length and (low_length > 0)) else 21)
    mamode = (mamode.lower() if isinstance(mamode, str) else 'sma')
    offset = get_offset(offset)
    m = close.size
    hilo = Series(npNaN, index=close.index)
    long = Series(npNaN, index=close.index)
    short = Series(npNaN, index=close.index)
    high_ma = ma(mamode, high, length=high_length)
    low_ma = ma(mamode, low, length=low_length)
    for i in range(1, m):
        if (close.iloc[i] > high_ma.iloc[(i - 1)]):
            hilo.iloc[i] = long.iloc[i] = low_ma.iloc[i]
        elif (close.iloc[i] < low_ma.iloc[(i - 1)]):
            hilo.iloc[i] = short.iloc[i] = high_ma.iloc[i]
        else:
            hilo.iloc[i] = hilo.iloc[(i - 1)]
            long.iloc[i] = short.iloc[i] = hilo.iloc[(i - 1)]
    if (offset != 0):
        hilo = hilo.shift(offset)
        long = long.shift(offset)
        short = short.shift(offset)
    if ('fillna' in kwargs):
        hilo.fillna(kwargs['fillna'], inplace=True)
        long.fillna(kwargs['fillna'], inplace=True)
        short.fillna(kwargs['fillna'], inplace=True)
    if ('fill_method' in kwargs):
        hilo.fillna(method=kwargs['fill_method'], inplace=True)
        long.fillna(method=kwargs['fill_method'], inplace=True)
        short.fillna(method=kwargs['fill_method'], inplace=True)
    _props = f'_{high_length}_{low_length}'
    data = {f'HILO{_props}': hilo, f'HILOl{_props}': long, f'HILOs{_props}': short}
    df = DataFrame(data, index=close.index)
    df.name = f'HILO{_props}'
    df.category = 'overlap'
    return df
Indicator: Gann HiLo (HiLo)
def hilo(high, low, close, high_length=None, low_length=None, mamode=None, offset=None, **kwargs):
    
    high = verify_series(high)
    low = verify_series(low)
    close = verify_series(close)
    high_length = (int(high_length) if (high_length and (high_length > 0)) else 13)
    low_length = (int(low_length) if (low_length and (low_length > 0)) else 21)
    mamode = (mamode.lower() if isinstance(mamode, str) else 'sma')
    offset = get_offset(offset)
    m = close.size
    hilo = Series(npNaN, index=close.index)
    long = Series(npNaN, index=close.index)
    short = Series(npNaN, index=close.index)
    high_ma = ma(mamode, high, length=high_length)
    low_ma = ma(mamode, low, length=low_length)
    for i in range(1, m):
        if (close.iloc[i] > high_ma.iloc[(i - 1)]):
            hilo.iloc[i] = long.iloc[i] = low_ma.iloc[i]
        elif (close.iloc[i] < low_ma.iloc[(i - 1)]):
            hilo.iloc[i] = short.iloc[i] = high_ma.iloc[i]
        else:
            hilo.iloc[i] = hilo.iloc[(i - 1)]
            long.iloc[i] = short.iloc[i] = hilo.iloc[(i - 1)]
    if (offset != 0):
        hilo = hilo.shift(offset)
        long = long.shift(offset)
        short = short.shift(offset)
    if ('fillna' in kwargs):
        hilo.fillna(kwargs['fillna'], inplace=True)
        long.fillna(kwargs['fillna'], inplace=True)
        short.fillna(kwargs['fillna'], inplace=True)
    if ('fill_method' in kwargs):
        hilo.fillna(method=kwargs['fill_method'], inplace=True)
        long.fillna(method=kwargs['fill_method'], inplace=True)
        short.fillna(method=kwargs['fill_method'], inplace=True)
    _props = f'_{high_length}_{low_length}'
    data = {f'HILO{_props}': hilo, f'HILOl{_props}': long, f'HILOs{_props}': short}
    df = DataFrame(data, index=close.index)
    df.name = f'HILO{_props}'
    df.category = 'overlap'
    return df