使用Pandas从头开始的技术指标

2024-04-26 23:41:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从头开始实现Chaikin振荡器,但与真正的API相比,它给出了错误的结果(例如TradingView)

代码:

def exponential_moving_average_series(ts, n):
    """
    :param df: pandas.DataFrame
    :param n:
    :return: pandas.DataFrame
    """
    EMA = pd.Series(pd.ewma(ts, span = n, min_periods = n - 1), name = 'EMA_' + str(n))
    return EMA


def chaikin_oscillator(df):
    """Calculate Chaikin Oscillator for given data.
    :param df: pandas.DataFrame
    :return: pandas.DataFrame
    """
    ad = (2 * df['Close'] - df['High'] - df['Low']) * df['Volume'] / (df['High'] - df['Low'])
    ad = ad + ad.shift(1)

    ema3 = exponential_moving_average_series(ad,3);
    ema10 = exponential_moving_average_series(ad,10);

    Chaikin = pd.Series((ema3-ema10), name='Chaikin')

    df = df.join(Chaikin)
    return df

结果:

Chaikin oscillator from this code comparing to asset's closing positions graph

Chaikin oscillator reference from TradingView

数据格式为:

index Timestamp Open Close High Low Volume Chaikin


Tags: dataframepandasdfreturnparamadseriespd