[PYTHON] Versuchen Sie, das LWMA von MetaTrader mit der FIR-Filterfunktion von scipy zu implementieren

Dies ist mein erster Beitrag, aber ich werde plötzlich auf das Hauptthema eingehen. Kürzlich habe ich versucht, die technische Indexfunktion von MetaTrder5 (MT5) in Python zu implementieren. → GitHub

In MT5 gibt es SMA, EMA, SMMA, LWMA als Arten des gleitenden Durchschnitts, aber SMA (einfacher gleitender Durchschnitt) war mit Pandas leicht zu schreiben.

import numpy as np
import pandas as pd
def MAonSeries(s, ma_period, ma_method):
    if ma_method == 'SMA':    
    return s.rolling(ma_period).mean()

Ich suchte nach einer Methodenfunktion, die leicht LWMA (Linear Weighted Moving Average) schreiben kann, aber ich wusste es nicht, also berechnete ich es so wie es war.

def MAonSeries(s, ma_period, ma_method):
    if ma_method == 'LWMA':
        y = pd.Series(0.0, index=s.index)
        for i in range(len(y)):
            if i<ma_period-1: y[i] = 'NaN'
            else:
                y[i] = 0
                for j in range(ma_period):
                    y[i] += s[i-j]*(ma_period-j)
                y[i] /= ma_period*(ma_period+1)/2
        return y

Ich wollte es jedoch einfacher schreiben, also habe ich es nachgeschlagen und festgestellt, dass das Modul zur Signalverarbeitung von scipy lfilter () war. Es gab eine Filterfunktion namens lfilter.html # scipy.signal.lfilter). Dies scheint sowohl mit dem FIR-Filter als auch mit dem IIR-Filter kompatibel zu sein, und ich könnte es so schreiben.

from scipy.signal import lfilter    
def MAonSeries(s, ma_period, ma_method):
    if ma_method == 'LWMA':
        h = np.arange(ma_period, 0, -1)*2/ma_period/(ma_period+1)
        y = lfilter(h, 1, s)
        y[:ma_period-1] = 'NaN'
        return pd.Series(y, index=s.index)

Dies machte es ein wenig sauberer.

Recommended Posts

Versuchen Sie, das LWMA von MetaTrader mit der FIR-Filterfunktion von scipy zu implementieren
Versuchen Sie die Funktionsoptimierung mit Optuna
Versuchen Sie, RBM mit Chainer zu implementieren.
Versuchen Sie, XOR mit PyTorch zu implementieren