Ich versuche, die Trading-Logik aus Spaß zu testen, aber ich kann nachvollziehen, wie man numpy benutzt, um Entscheidungen zu treffen. Zum Beispiel möchte ich df ['position'] = 1 oder -1 basierend darauf setzen, ob die Daten unterhalb oder oberhalb der oberen und unteren Zeilen liegen. Wenn die Daten < = die untere Zeile ist, möchte ich die Position = 1 setzen und sie auf 1 halten, bis Data> = die obere Zeile ist. Sobald Daten> = die obere Zeile ist, möchte ich Position = -1 setzen und bei -1 bleiben und dann wiederholen.Pandas DataFrame Logic - Python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = np.random.standard_normal((5, 100)).flatten()
data = data.cumsum()
df = pd.DataFrame({'Data': data})
df['std'] = df['Data'].rolling(50).std()
df['SMA'] = df['Data'].rolling(50).mean()
df['upper'] = df['SMA'] + (2 * df['std'])
df['lower'] = df['SMA'] - (2 * df['std'])
df[['Data', 'SMA', 'upper', 'lower']].plot(figsize=(10, 6))
df['position'] = 0
plt.show()
Hier versuche ich, genau das aber nicht zu tun, weil ich weiß nicht, wie diese richtig zu machen.
df['islower'] = np.where(df['Data'] < df['lower'], 1, 0)
df['isupper'] = np.where(df['Data'] > df['upper'], 1, 0)
df['position'] = np.where(df['isupper']==1, -1, 0) | np.where(df['islower']==1, 1, 0)
Was meinen Sie, dass Sie scheitern? Was ist der Fehler, den Sie bekommen? Oder möchten Sie die Daten zeigen, die Sie erhalten? – splinter
Ich kann nicht herausfinden, wie man df ['position'] = 1 setzt, wenn df ['Data'] df ['oben']. Ich kann dies mit Zustandslogik ohne Pandas machen, aber das Ziel ist, dies mit einem Datenrahmen zu tun. –
BillyRay
Ist nicht die Antwort unten, was Sie suchen? Wenn nicht, schlage ich vor, dass Sie die Ausgabe zeigen, die Sie gegen die Ausgabe erhalten möchten, die Sie tatsächlich bekommen – splinter