Die Anpassung eines linearen Trends an eine Datenmenge ist einfach. Aber wie kann ich mehrere Trendlinien an eine Zeitreihe anpassen? Ich definiere Trends als Preise über oder unter einem exponentiellen gleitenden Durchschnitt. Wenn der Preis über dem EMA liegt, muss ich einen positiven Trend anpassen und wenn der Trend negativ wird, eine neue negative Trendlinie und so weiter. In meinem Code unter der market_data['Signal']
in meinem Pandas Dataframe sagt mir, ob der Trend +1 oder -1 ist.Wie berechnet und plottet man mehrere lineare Trends für eine Zeitreihe?
Ich vermute, ich irgendeine Art einer Schleife müssen, aber ich kann die Logik nicht funktioniert ...
import pandas as pd
import pandas_datareader.data as web
import datetime as dt
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import matplotlib.dates as mdates
#Colecting data
market = '^DJI'
end = dt.datetime(2016, 12, 31)
start = dt.date(end.year-10, end.month, end.day)
market_data = web.DataReader(market, 'yahoo', start, end)
#Calculating EMA and difference
market_data['ema'] = market_data['Close'].ewm(200).mean()
market_data['diff_pc'] = (market_data['Close']/market_data['ema']) - 1
#Defining bull/bear signal
TH = 0
market_data['Signal'] = np.where(market_data['diff_pc'] > TH, 1, 0)
market_data['Signal'] = np.where(market_data['diff_pc'] < -TH, -1, market_data['Signal'])
die Trendlinien passen I wan numpy polyfit verwenden
x = np.array(mdates.date2num(market_data.index.to_pydatetime()))
fit = np.polyfit(x, market_data['Close'], 1)
Idealerweise würde ich nur die Trends grafisch darstellen, wo das Signal mehr als n Perioden dauert.
Das Ergebnis sollte wie folgt aussehen:
Ich bin mir nicht sicher, ob ich verstanden habe vollständig ... Sie wollen also mehrere lineare Anpassungen für Segmente der Daten erstellen, die jeweils durch +1 oder -1 in 'market_data ['Signal']' begrenzt sind. Ist das korrekt? – jdehesa
Ja, das ist richtig. Im Idealfall nur wenn ich mehr als n +1 oder -1 hintereinander habe. – cJc