Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 267
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Nun, wenn ich, anstatt NA am Ende von"Y" hinzuzufügen und dann dieselbe NA zu löschen, einfach die letzte Zeile in SomeData lösche, wird es dann nicht dasselbe sein?
Ich verstehe den Unterschied wirklich nicht, vielleicht bin ich schon völlig überhitzt ((
Es tut mir nicht leid, aber ich weiß nicht wie, es funktioniert einfach nicht, wie oft habe ich es versucht, versuchen Sie es auf Ihre Weise, welches Ziel ich habe, wissen Sie, und sagen Sie mir, wie Sie es tun
Sie verpacken alles mit einem beliebigen Packer und fügen die Datei
Ich habe es schon oft versucht, es funktioniert nicht, ich werde aus dem Forum geworfen und das war's...
Nehmen Sie meine Codes, ich habe alles gepostet, der erste Code ist die Erstellung von Merkmalen, der zweite ist das Training des Modells, werden Sie genau das gleiche, tun das Training und zeigen, was Sie haben
Ich habe es schon oft versucht, es funktioniert nicht, ich werde aus dem Forum geworfen und das war's...
Nehmen Sie meine Codes, ich habe alles gepostet, der erste Code ist die Erstellung von Merkmalen, der zweite ist das Training des Modells, werden Sie genau das gleiche, tun das Training und zeigen, was Sie haben
Bei der Differenzierung erfolgt die Verschiebung automatisch, da die Reihe um ein Element kürzer wird. Dann brauchen Sie nur die Stichprobe (Tabelle mit Beobachtungen) um das letzte Element zu kürzen
Es gibt zwei Dinge in dem Kodex, die mich beunruhigen:
1) Da ohlc für die Vorhersage verwendet wird, kann der allerletzte Balken nicht für die Vorhersage verwendet werden, da wir die Vorhersage zu Beginn des Balkens machen und sich der hlc während der Lebensdauer des gesamten Balkens ändert. Wir lehren das Modell also anhand des vollständig geformten letzten Balkens und treffen dann die Vorhersage anhand des nicht geformten Balkens. Das ist nicht richtig, wir sollten das Ziel um 2 Takte verschieben, statt um 1.
Eine Verschiebung des Ziels auf 1 Bar wäre akzeptabel, wenn Sie nur den Eröffnungskurs für die Vorhersage verwenden und Hoch, Tief und Schluss ignorieren.
2) Sie verwenden Schließen statt Öffnen für das Ziel. Ist es wichtig für eine bestimmte Strategie oder nur zum Spaß? Schließlich gehen wir in der Regel zu Beginn eines Balkens in einen Handel ein, und beim nächsten neuen Balken drehen wir entweder um oder steigen aus oder verlassen den Handel. Und es ist wichtig, dass das trainierte Modell den Preisanstieg von der aktuellen Eröffnung bis zur nächsten Eröffnung vorhersagt.
Der Schluss des aktuellen Balkens muss nicht unbedingt mit dem Eröffnungsdatum des nächsten Balkens übereinstimmen, d.h. wenn Sie den Schluss als Ziel nehmen, können Sie den ersten Fehler vermeiden, erhalten aber möglicherweise stattdessen falsche Inkremente. Jetzt habe ich nachgeschaut, normalerweise fällt der Close in der Preistabelle nicht mit dem Open des nächsten Balkens zusammen, also sind Ihre Zielwerte sehr zweifelhaft.
Wenn der Kerzenständer überzeichnet ist, müssen Sie ihn umgehen.
Nehmen Sie ein gleitendes Fenster, die ersten hundert Balken (100 ist nur eine zufällige Zahl, für Ihren Code minimale Anzahl von Bars = 23, und wenn weniger als das Candlestick macht Fehler), finden Sie Indikatorwerte, lassen Sie nur die neuesten von ihnen, finden Sie relevante Ziel, fügen Sie sie alle auf die endgültige Tabelle. Wir verschieben das Fenster um 1 Takt nach vorne und wiederholen den Vorgang. Das alles ist dutzendfach langsamer als alles auf einmal zu zählen, aber es ist sicherer. Dann können wir beide Ergebnisse vergleichen und feststellen, ob ein Rollover vorliegt oder nicht.
Es wäre gut, die Größe des Schiebefensters zu ändern und zu sehen, ob sich die Ergebnisse ändern. Wenn dies der Fall ist, verwendet der Indikator seine eigenen vorherigen Werte für die Berechnung der neuen Werte. In diesem Fall wird die Fensterbreite als so etwas wie eine exponentielle Periode im Indikator selbst funktionieren. Wenn sich das Ergebnis ändert, sollte die Fensterbreite vergrößert werden, bis sich die Ergebnisse nicht mehr ändern. Der Indikator kann seine eigene interne Grenze für die Anzahl der verwendeten Balken haben, z.B. hat Zigzag in mt5 diesen Wert = 100 Balken, d.h. eine größere Fensterbreite als hundert hat keinen Einfluss auf das Ergebnis.
Probieren Sie zunächst diesen Code aus, um eine Trainings-/Testtabelle zu erstellen. Vergleichen Sie sie mit Ihrer Tabelle. Wenn sie zu 100 % übereinstimmt, werden Sie keine Überschreibungen sehen, und Sie können sich darauf verlassen, dass Candlestick frühere Werte verwendet, um neue Werte zu ermitteln.
Versuchen Sie dann, indicatorDepth - sliding window width zu erhöhen, um zu sehen, ob sich das Ergebnis dadurch ändert, und ob Sie einen solchen Wert von indicatorDepth finden können, bei dem selbst eine Erhöhung keine Auswirkungen auf das Ergebnis hat.
if(!require(rusquant)){ install.packages("rusquant", repos="http://r-forge.r-project.org", dependencies = TRUE); library(rusquant) }
if(!require(candlesticks)){ install.packages("candlesticks", repos="http://r-forge.r-project.org", dependencies = TRUE); library(candlesticks) }
tryCatch({
load("SPFB.RTS.rdata")
}, error = function(e){
getSymbols("SPFB.RTS", src = "Finam", period="5min", from = Sys.Date()-500)
save(SPFB.RTS, finam.stock.list, file = "SPFB.RTS.rdata")
SPFB.RTS <<- SPFB.RTS
finam.stock.list <<- finam.stock.list
})
chart_Series(tail(SPFB.RTS, 100))
indicatorDepth <- 23
tryCatch({
load("trainData.rdata")
}, error=function(e){
trainData <<- matrix(NA, ncol=60, nrow = nrow(SPFB.RTS)-2)
for(i in (indicatorDepth+1):(nrow(SPFB.RTS)-2)){
X1 <- as.numeric(tail(CandleBodyLength(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X2 <- as.numeric(tail(CandleLength(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X3 <- as.numeric(tail(CSPDarkCloudCover(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X4 <- as.numeric(tail(CSPDoji(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X5 <- as.numeric(tail(CSPEngulfing(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X6 <- as.numeric(tail(CSPGap(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X7 <- as.numeric(tail(CSPHammer(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X8 <- as.numeric(tail(CSPHarami(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X9 <- as.numeric(tail(CSPInsideDay(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X10 <- as.numeric(tail(CSPInvertedHammer(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X11 <- as.numeric(tail(CSPKicking(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X12 <- as.numeric(tail(CSPLongCandle(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X13 <- as.numeric(tail(CSPLongCandleBody(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X14 <- as.numeric(tail(CSPMarubozu(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X15 <- as.numeric(tail(CSPNHigherClose(SPFB.RTS[max(1, i-indicatorDepth):i,],N = 3), 1))
X16 <- as.numeric(tail(CSPNLowerClose(SPFB.RTS[max(1, i-indicatorDepth):i,],N = 3), 1))
X17 <- as.numeric(tail(CSPOutsideDay(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X18 <- as.numeric(tail(CSPPiercingPattern(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X19 <- as.numeric(tail(CSPShortCandle(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X20 <- as.numeric(tail(CSPShortCandleBody(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X21 <- as.numeric(tail(CSPStar(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X22 <- as.numeric(tail(CSPStomach(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X23 <- as.numeric(tail(CSPTasukiGap(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X24 <- as.numeric(tail(CSPThreeInside(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X25 <- as.numeric(tail(CSPThreeMethods(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X26 <- as.numeric(tail(CSPThreeOutside(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X27 <- as.numeric(head(tail(nextCandlePosition(SPFB.RTS[max(1, i-indicatorDepth):i,]), 2), 1))
X28 <- as.numeric(tail(TrendDetectionChannel(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
X29 <- as.numeric(tail(TrendDetectionSMA(SPFB.RTS[max(1, i-indicatorDepth):i,]), 1))
target <- as.numeric(SPFB.RTS[i+2,"SPFB.RTS.Open"]) - as.numeric(SPFB.RTS[i+1,"SPFB.RTS.Open"])
trainData[i,] <<- c(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12,X13,X14,X15,X16,X17,X18,X19,X20,X21,X22,X23,X24,X25,X26,X27,X28,X29,target)
cat(i, "/", nrow(SPFB.RTS)-2, "\n")
}
colnames(trainData)[-ncol(trainData)] <- paste0("pred",1:(ncol(trainData)-1))
colnames(trainData)[ncol(trainData)] <- "target"
save(trainData, file="trainData.rdata")
})
# trainData <- trainData[-(1:indicatorDepth),]
Ich bin besorgt über zwei Dinge im Code:
1) Da wir ohlc für die Vorhersage verwenden, kann der letzte Balken nicht für eine Vorhersage verwendet werden, da wir die Vorhersage zu Beginn des Balkens machen und sich hlc während der Laufzeit des Balkens ändert. Wir lehren das Modell also anhand des vollständig geformten letzten Balkens und sagen dann anhand des ungeformten Balkens voraus. Das ist nicht richtig, wir sollten das Ziel um 2 Takte verschieben, statt um 1.
Wenn Sie das Ziel auf 1 Balken verschieben, können Sie nur den Eröffnungskurs für die Prognose verwenden und Hoch, Tief und Schluss ignorieren.
Ich verstehe das Problem nicht: wir prognostizieren die Position des aktuellen Abschlusses relativ zum vorherigen Abschluss, wir kennen die aktuelle Kerze nicht, wir kennen die vorherige, weil sie bereits geschlossen ist, also ist es die vorherige, dann sind alle OHLC-Preise bereits gebildet worden, ich verstehe nicht, was die Vorsicht ist, was der Fehler ist
2) Sie verwenden Schließen statt Öffnen für das Ziel. Ist es wichtig für eine Art von Strategie oder nur zum Spaß? ........
Absolut umsonst genommen, für Geschwindigkeit und Bequemlichkeit
Wenn der Kerzenständer überzeichnet ist, müssen Sie ihn umgehen........
Ich verstehe diesen Teil nicht, was macht er? Was istSPFB.RTS.rdata?
woher kommt sie? und warum wird sie überschrieben? keine Ahnung(
tryCatch({
load("SPFB.RTS.rdata")
}, error = function(e){
getSymbols("SPFB.RTS", src = "Finam", period="5min", from = Sys.Date()-500)
save(SPFB.RTS, finam.stock.list, file = "SPFB.RTS.rdata")
SPFB.RTS <<- SPFB.RTS
finam.stock.list <<- finam.stock.list
})
Und das Wichtigste: Sicherlich haben Sie versucht, anhand der Daten etwas zu lehren, warum erwähnen Sie es nicht?
Und das Wichtigste: Sie müssen versucht haben, anhand der Daten etwas zu lehren, warum erwähnen Sie es nicht?
Der Fortschritt der Ausbildungstabelle ist 16527 von 55857. Sobald sie erstellt ist, werde ich versuchen, sie zu unterrichten.
Vorhersage der Position des aktuellen Lückentextes im Verhältnis zum vorherigen Lückentext
Das liegt an Ihnen. Es ist nur seltsam, wie übliche Strategien Entscheidungen treffen und Trades zu Beginn eines neuen Balkens eröffnen.
Dann müssen Sie eine Vorhersage treffen und am Ende des Balkens einen Handel eröffnen. Ein bisschen unbequem, eine neue Bar im Terminal ist leicht zu erwischen. Aber "am Ende des aktuellen Balkens, eine Sekunde vor der Eröffnung eines neuen Balkens, einen Handel eröffnen, in der Hoffnung, dass der aktuelle Schlusskurs bereits endgültig ist" ist mir zu vage.
Ich verstehe diesen Teil nicht, was macht er? Was istSPFB.RTS.rdata?
Heruntergeladene Zitate. Heruntergeladen, in rdata gespeichert, um nicht jedes Mal, wenn wir dieses Skript ausführen, Müll zu machen und nicht sekundenlang zu warten, bis sie heruntergeladen sind. Wenn sie zuvor heruntergeladen und in einer rdata-Datei gespeichert wurden, werden sie aus dieser Datei übernommen.
Dankeschön
Es gibt zwei Dinge in dem Kodex, die mich beunruhigen:
1) Da wir ohlc für die Vorhersage verwenden, können wir nicht den letzten Balken für die Vorhersage verwenden, da wir dies zu Beginn des Balkens tun und hlc sich während der Lebensdauer des Balkens ändern wird. Wir lehren das Modell also anhand des vollständig geformten letzten Balkens und treffen dann die Vorhersage anhand des nicht geformten Balkens. Das ist nicht richtig, wir sollten das Ziel um 2 Takte verschieben, statt um 1.
Eine Verschiebung des Ziels auf 1 Bar wäre akzeptabel, wenn Sie nur den Eröffnungskurs für die Vorhersage verwenden und Hoch, Tief und Schluss ignorieren.
2) Sie verwenden Schließen statt Öffnen für das Ziel. Ist es wichtig für eine bestimmte Strategie oder nur zum Spaß? Schließlich gehen wir in der Regel zu Beginn eines Balkens in einen Handel ein, und beim nächsten neuen Balken drehen wir entweder um oder steigen aus oder verlassen den Handel. Und es ist wichtig, dass das trainierte Modell den Preisanstieg von der aktuellen Eröffnung bis zur nächsten Eröffnung vorhersagt.
Der Schluss des aktuellen Balkens muss nicht unbedingt mit dem Eröffnungsdatum des nächsten Balkens übereinstimmen, d.h. wenn Sie den Schluss als Ziel nehmen, können Sie den ersten Fehler vermeiden, erhalten aber möglicherweise stattdessen falsche Inkremente. Jetzt habe ich nachgeschaut, in der Regel fällt der Abschluss in der Preistabelle nicht mit der Eröffnung des nächsten Balkens zusammen, so dass die Zielwerte sehr zweifelhaft sind.
Ich habe den Eindruck, dass Sie die Dinge verkomplizieren.
1. Das erste Problem ist eng mit dem zweiten verbunden. Wenn wir Close als Ziel verwenden, werden alle anderen drei Preise gebildet und ändern sich nicht. Bei einer Vorausschätzung um einen Schritt müssen Sie das Ziel um eine Position verschieben.
2. Ich kann auch Ihre Argumente zum Unterschied zwischen Schluss- und Eröffnungskurs nicht akzeptieren. Es kommt darauf an, welche TF oder welcher Tag der Woche. Wenn wir H1 nehmen, dann haben wir drei verschiedene Varianten:
Das ist das, was mir gerade einfällt. Und es könnte noch viel mehr Situationen geben. Sie alle sagen, dass sich der reale Handel stark vom Modell unterscheidet. Im Moment ist es sinnvoller, sich auf eine idealisierte Version zu konzentrieren und den Rest der Drags und andere separat zu programmieren.
3. Zum Thema Überbietungen.
Heilige Kuh der TA. Sie gilt seit Ewigkeiten als eine unveränderliche Wahrheit.
Auf welcher Grundlage?
Für alle ANALYSE-Praktiker ist es inakzeptabel, die Daten zu ändern, auf deren Grundlage sie ihre epochalen Schlussfolgerungen über die Vergangenheit ziehen. Noch einmal: Die Vergangenheit ist inakzeptabel.
Unsere Aufgabe ist es, Prognosen zu erstellen, und unsere Sicht auf die Vergangenheit kann sich nicht nur ändern, sondern muss sich auch aufgrund neu verfügbarer Daten ändern. Daten, die nicht neu gezeichnet werden, haben ihren Preis: Verzögerung.
Hier kommt ein neuer Balken, der eine Marktumkehr ankündigt. Aber wir füttern zwar weiterhin die heilige Kuh, aber wir ändern unser Geschichtsbild nicht um irgendeiner Idee aus der Rubrik "Analyse" willen.
Wir sollten keine Angst vor Indikatoränderungen haben.
Eine neue Bar ist da. Und wenn sie kommt, müssen wir unter den Bedingungen, die diese neue Bar geschaffen hat, Entscheidungen treffen. Wir müssen die Zukunft bis zur nächsten Prognose mit minimalem Fehler vorhersagen. Ich habe keine Veröffentlichung gesehen, in der das Ausmaß des Vorhersagefehlers mit Veränderungen bei der Art der Indikatoren in der Geschichte in Verbindung gebracht wird.
Das ist alles nur theoretisches Gerede. Wir sollten ein Modell erstellen und seine Schätzung erhalten. Genau das werde ich tun.
Erstellung eines kleinen Datensatzes von 5000 Preisen
Das Skript hat nicht richtig funktioniert.
Als alles gezählt war, bekam ich eine Warnung.
....
....
5677 / 5688
5678 / 5688
5679 / 5688
5680 / 5688
5681 / 5688
5682 / 5688
5683 / 5688
5684 / 5688
5685 / 5688
5686 / 5688
5687 / 5688
5688 / 5688
Warning message:
In readChar(con, 5L, useBytes = TRUE) :
cannot open compressed file 'trainData.rdata', probable reason 'No such file or directory'
die Daten selbst
<NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[1,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[2,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[3,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[4,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[5,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[6,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
<NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[1,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[2,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[3,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[4,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[5,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[6,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
<NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[1,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[2,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[3,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[4,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[5,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[6,] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
<NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> target
[1,] NA NA NA NA NA NA NA NA NA
[2,] NA NA NA NA NA NA NA NA NA
[3,] NA NA NA NA NA NA NA NA NA
[4,] NA NA NA NA NA NA NA NA NA
[5,] NA NA NA NA NA NA NA NA NA
[6,] NA NA NA NA NA NA NA NA NA
<NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[5683,] 8.621061e-05 10 0.0016378604 190 0 1 0 0 0 0 0 0 0
[5684,] 6.036304e-04 70 0.0010346611 120 0 0 0 0 0 1 0 0 0
[5685,] 1.208355e-03 140 0.0018122977 210 0 0 0 0 0 0 0 0 0
[5686,] 6.911447e-04 80 0.0019009764 220 0 0 0 0 0 0 0 0 0
[5687,] 2.592577e-04 30 0.0007778402 90 0 0 0 0 0 0 0 0 0
[5688,] 9.501188e-04 110 0.0016415396 190 0 0 0 0 0 0 0 0 0
<NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[5683,] 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
[5684,] 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0
[5685,] 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0
[5686,] 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0
[5687,] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
[5688,] 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0
<NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
[5683,] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
[5684,] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[5685,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
[5686,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[5687,] 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
[5688,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
<NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> target
[5683,] NA NA NA NA NA NA 0 1 0 0 0 0 1 -1 -70
[5684,] NA NA NA NA NA NA 0 1 0 0 0 0 1 -1 -140
[5685,] NA NA NA NA NA NA 0 0 1 -1 0 0 1 -1 -90
[5686,] NA NA NA NA NA NA 0 0 1 -1 0 0 1 -1 20
[5687,] NA NA NA NA NA NA 0 0 1 -1 0 0 1 -1 100
[5688,] NA NA NA NA NA NA 0 0 1 -1 0 0 1 -1 50
Es gibt immer NA in den Daten, obwohl ich nicht ausschließe, dass ich es selbst getan habe