GOOGLE ADS

Mittwoch, 4. Mai 2022

Kauf-/Verkaufsstrategie mit Indikatoren?

Ich habe einen Datenrahmen ähnlich dem unten;


























PreisRückkehrIndikator
50,05ein
60,20-ein
5-0,16ein

Lösung des Problems

Ich bin mir nicht sicher, ob die Renditen und Preise an der richtigen Stelle sind (sie sollten nicht wirklich in derselben Zeile stehen, wenn sie den Kaufpreis (vermutlich der Schlusskurs von gestern) und die Tagesrendite darstellen (vorausgesetzt, die Position wurde für gehalten). ganzen Tag) Aber trotzdem...

import pandas as pd
# the data you provided
df = pd.read_csv("Data.csv", header=0)
# an initial starting row (explanation provided)
starting = pd.DataFrame({'Price': [0], 'return': [0], 'indicator': [0]})
# concatenate so starting is first row
df = pd.concat([starting, df]).reset_index(drop=True)
# setting holding to 0 at start (no shares), and cash at 1000 (therefore portfolio = 1000)
df[["Holding", "Cash", "Portfolio"]] = [0, 1000, 1000]
# buy/sell is the difference (explanation provided)
df["BuySell"] = df["indicator"].diff()
# simulating every day
for i in range(1, len(df)):
# buying
if df["BuySell"].iloc[i] > 0:
df["Holding"].iloc[i] += df["Cash"].iloc[i-1] / df["Price"].iloc[i]
df["Cash"].iloc[i] = 0
# selling
elif df["BuySell"].iloc[i] < 0:
df["Cash"].iloc[i] = df["Holding"].iloc[i-1] * df["Price"].iloc[i]
df["Holding"].iloc[i] = 0
# holding position
else:
df["Cash"].iloc[i] = df["Cash"].iloc[i-1]
df["Holding"].iloc[i] = df["Holding"].iloc[i-1]
# multiply holding by return (assuming all-in, so holding=0 not affected)
df["Holding"].iloc[i] *= (1 + df["return"].iloc[i])
df["Portfolio"].iloc[i] = df["Holding"].iloc[i] * df["Price"].iloc[i] + df["Cash"].iloc[i]

Erläuterungen:

Startreihe:


  • Dies ist erforderlich, damit die Schleife auf die vorherigen Bestände und Barmittel verweisen kann (es wäre umständlicher, eine if-Anweisung in die Schleife if einzufügen i=0).


Kaufen Verkaufen:


  • Die Differenz ist hier notwendig, als ob die Position von Kauf zu Verkauf wechselt und dann die Aktien offensichtlich verkauft werden (und umgekehrt). Wenn die vorherige Zeile jedoch Kaufen/Verkaufen war, genau wie die aktuelle Zeile, würde es keine Änderung (diff=0) geben, ohne dass Aktien gekauft oder verkauft würden.


Portfolio:


  • Dies ist ein "äquivalenter" Betrag (der Betrag, den Sie halten würden, wenn Sie zu diesem Zeitpunkt alle Aktien in Bargeld umwandeln würden).


Halten:


  • Dies ist die Anzahl der gehaltenen Aktien.


HINWEIS: Soweit ich Ihre Frage verstanden habe, ist dies eine All-in-Strategie - es gibt keinen Prozentsatz, was diese Strategie vereinfacht, aber einfacher zu programmieren gemacht hat.

Ausgabe:

#Out: 
# Price return indicator Holding Cash Portfolio BuySell
#0 0 0.00 0 0.00 1000 1000.0 NaN
#1 5 0.05 1 210.00 0 1050.0 1.0
#2 6 0.20 -1 0.00 1260 1260.0 -2.0
#3 5 -0.16 1 211.68 0 1058.4 2.0

Hoffentlich gibt Ihnen dies einen guten Ausgangspunkt, um etwas zu erstellen, das Ihren Spezifikationen entspricht und fortgeschrittener ist, z. B. mit mehreren Freigaben oder einer bestimmten prozentualen Offenlegung usw.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...