def DF2HEIKIN_ASHI(df, datetime='datetime', open='Open', high='High', low=
    'Low', close='Close', volume='Volume'):
    """
    DataFeed 2 Heikin-Ashi DataFeed
    Returns: dict of tuples of floats = jhta.DF2HEIKIN_ASHI(df, datetime='datetime', open='Open', high='High', low='Low', close='Close', volume='Volume')
    """
    ha_Open_list = []
    ha_High_list = []
    ha_Low_list = []
    ha_Close_list = []
    for i in range(len(df[close])):
        if i is 0:
            ha_Open = (df[open][i] + df[close][i]) / 2
            ha_Close = (df[open][i] + df[high][i] + df[low][i] + df[close][i]
                ) / 4
            ha_High = df[high][i]
            ha_Low = df[low][i]
        else:
            ha_Open = (ha_Open_list[i - 1] + ha_Close_list[i - 1]) / 2
            ha_Close = (df[open][i] + df[high][i] + df[low][i] + df[close][i]
                ) / 4
            ha_High = max([df[high][i], ha_Open, ha_Close])
            ha_Low = min([df[low][i], ha_Open, ha_Close])
        ha_Open_list.append(float(ha_Open))
        ha_High_list.append(float(ha_High))
        ha_Low_list.append(float(ha_Low))
        ha_Close_list.append(float(ha_Close))
    return dict({datetime: tuple(df[datetime]), open: tuple(ha_Open_list),
        high: tuple(ha_High_list), low: tuple(ha_Low_list), close: tuple(
        ha_Close_list), volume: tuple(df[volume])})
