ttrpy.trend.wma module

Source code
# Author: joelowj
# License: Apache License, Version 2.0

import pandas as pd


def wma(df, price, wma, n):
    """
    The Weighted Moving Average calculates a weight for each value in the series.
    The more recent values are assigned greater weights. The Weighted Moving
    Average is similar to a Simple Moving average in that it is not cumulative,
    that is, it only includes values in the time period (unlike an Exponential
    Moving Average). The Weighted Moving Average is similar to an Exponential
    Moving Average in that more recent data has a greater contribution to the
    average.

    Parameters:
        df (pd.DataFrame): DataFrame which contain the asset price.
        price (string): the column name of the price of the asset.
        wma (string): the column name for the n-day weighted moving average results.
        n (int): the total number of periods.

    Returns:
        df (pd.DataFrame): Dataframe with n-day weighted moving average of the asset calculated.

    """

    def wa(x):
        return sum([(i + 1) * p for i, p in enumerate(x)]) / (n * (n + 1) / 2)

    df[wma] = df[price].rolling(window=n).apply(lambda x: wa(x), raw=True)

    return df

Functions

def wma(df, price, wma, n)

The Weighted Moving Average calculates a weight for each value in the series. The more recent values are assigned greater weights. The Weighted Moving Average is similar to a Simple Moving average in that it is not cumulative, that is, it only includes values in the time period (unlike an Exponential Moving Average). The Weighted Moving Average is similar to an Exponential Moving Average in that more recent data has a greater contribution to the average.

Parameters

df : pd.DataFrame
DataFrame which contain the asset price.
price : string
the column name of the price of the asset.
wma() : string
the column name for the n-day weighted moving average results.
n : int
the total number of periods.

Returns

df : pd.DataFrame
Dataframe with n-day weighted moving average of the asset calculated.
Source code
def wma(df, price, wma, n):
    """
    The Weighted Moving Average calculates a weight for each value in the series.
    The more recent values are assigned greater weights. The Weighted Moving
    Average is similar to a Simple Moving average in that it is not cumulative,
    that is, it only includes values in the time period (unlike an Exponential
    Moving Average). The Weighted Moving Average is similar to an Exponential
    Moving Average in that more recent data has a greater contribution to the
    average.

    Parameters:
        df (pd.DataFrame): DataFrame which contain the asset price.
        price (string): the column name of the price of the asset.
        wma (string): the column name for the n-day weighted moving average results.
        n (int): the total number of periods.

    Returns:
        df (pd.DataFrame): Dataframe with n-day weighted moving average of the asset calculated.

    """

    def wa(x):
        return sum([(i + 1) * p for i, p in enumerate(x)]) / (n * (n + 1) / 2)

    df[wma] = df[price].rolling(window=n).apply(lambda x: wa(x), raw=True)

    return df