Mustererkennung am Finanzmarkt

8

Welches Modell für maschinelles Lernen oder tiefes Lernen ( muss überwachtes Lernen sein ) eignet sich am besten zum Erkennen von Mustern auf den Finanzmärkten?

Was ich unter Mustererkennung auf dem Finanzmarkt verstehe: Das folgende Bild zeigt, wie ein Beispielmuster (dh Kopf und Schulter) aussieht:

Bild 1:

Prototyp des Kopf- und Schultermusters

Das folgende Bild zeigt, wie es sich tatsächlich in realen Diagrammereignissen bildet:

Bild 2:

Kopf und Schulter bei echten Chart-Events

Ich versuche Folgendes zu tun: Jedes Muster, das Bild 1 ähnelt, kann als Kopf- und Schultermuster definiert werden, aber in einem Diagramm (Preisdiagramm) wird es nicht so deutlich wie in Bild 1 dargestellt. Bild 2 ist das Beispiel für Kopf und Schulter Musterform im Diagramm (Preisdiagramm). Wie es in Bild 2 scheint, kann es durch normale Algorithmen oder Analysen nicht als Kopf- und Schultermuster identifiziert werden (da es viele Höhen und Tiefen gibt, die eine Menge Struktur bilden, die leicht in viele Schultern oder den Kopf oder in die Irre führen kann sonstige Strukturen). Ich erwarte, die Maschine so zu trainieren, dass sie das Kopf- und Schultermuster erkennt, wenn ein ähnliches Muster (wie in Bild 2) gebildet wird.

Vielen Dank für Ihre Zeit.

Lassen Sie mich wissen, wenn ich es falsch verstehe. Ich habe nur Anfängerwissen über maschinelles Lernen.

Suraj Neupane
quelle
1
Sie möchten also einen binären Klassifikator (bärisch vs. bullisch)? Hier rumhängen
Emre
Meine Absicht war es, das obige Muster im Diagramm zu erkennen. Die im Diagramm verwendeten Daten können beliebige Datentypen sein (z. B. Börsendaten). Ich hätte ein saubereres Bild der Karte verwenden sollen.
Suraj Neupane
@ SurajNeupane Die Frage ist etwas unklar, bitte erläutern Sie mehr. Basierend auf dem, was Sie erwähnt haben, denke ich, dass Sie Features in einem sich bewegenden Fenster erstellen und es als überwachtes Klassifizierungsproblem behandeln können.
Iratzhash
Ich entschuldige mich, wenn ich Sie irreführe. Ich habe mehr auf das Thema eingegangen. Lassen Sie mich wissen, wenn es noch unklar ist, ich werde mir einen anderen Weg überlegen, um zu erklären.
Suraj Neupane

Antworten:

1

Dies sind einige Vorschläge, die nützlich sein könnten.

  1. Die Daten auf der Kurve sind holpriger als die Straßen in meinem Land. Ich denke, Sie sollten zunächst die Kurve glätten. Es gibt viele Glättungsfilter wie von der einfachsten mittleren Glättung auf lokale Regressionsmodelle wie LOESS . Es gibt einige Parameter zu optimieren. Schauen Sie sich das Beispiel an.
  2. Finden der lokalen Maxima. Pythons Numpy hat eine Implementierung dafür und dies sollte helfen.

Meine Idee ist es, im Grunde zu glätten, bis Sie Ihren Kopf und Ihre Schultern bekommen, dh drei Maxima.

Warnung : Durch das Glätten wird zwar das Rauschen (nicht im wörtlichen Rauschsinn) der Kurve verringert, die Kurve wird jedoch tendenziell von ihrer ursprünglichen Position verschoben, um sie darzustellen.

Eine Beispiel-Python-Implementierung wird wie folgt aussehen

from statsmodels.nonparametric.smoothers_lowess import lowess
import numpy as np
from scipy.signal import argrelextrema
import matplotlib.pyplot as plt
sample_points =  np.array([1,2.3,3.5,3,4.5,5,2.25,33.3,5,6.7,7.3,56.0,70.1,4.2,5.4,6.2,4.4,100,2.9,45,10,3.4,4.8,50,2.3,3.45,5.5,6.7,7.9,8.7,6.1])
for i in np.arange(0,0.5,0.05):
    # i in the loop is the percentage of data points we are inputing for the loess regression. Wiki atricle explains it, I guess
    filtered = lowess(sample_points,range(len(sample_points)), is_sorted=True, frac=i, it=0)
    maxima = argrelextrema(filtered[:,1], np.greater)
    if len(maxima[0]) == 3:
        plt.plot(filtered[:,1])
        plt.show()

Ich hoffe, diese Art gibt die Richtung an, wo Sie möglicherweise eine Überprüfung benötigen.

Kiritee Gak
quelle
sample_points = np.array([1,2.3,3.5,3,4.5,5,2.25,33.3,5,6.7,7.3,56.0,70.1,4.2,5.4,6.2,4.4,100,2.9,45,10,3.4,4.8,50,2.3,3.45,5.5,6.7,7.9,8.7,6.1]) plt.plot(lowess(sample_points,range(len(sample_points)), is_sorted=True, frac=0.2, it=0),'b-'); plt.show(); Dies kommt dem Muster sehr nahe. Ich wollte dieses Muster trainieren, damit es erkannt wird, wenn es tatsächlich im Diagramm angezeigt wird. Ist das möglich ?
Suraj Neupane
@ SurajNeupane Ja, das kann durch Dynamic Time Warping gemacht werden. Da es jedoch kein spezifisches Muster für die linke und rechte Schulter gibt und diese zu jedem Zeitpunkt auf der Kurve auftreten können, schlug ich vor, nach dem Glätten Maxima zu finden.
Kiritee Gak
5

Sie sollten sich einen Klassifikator ansehen, der auf der DTW-Entfernung (Dynamic Time Warping) basiert . DTW ist eine Methode, die eine optimale Übereinstimmung zwischen zwei gegebenen Sequenzen (z. B. Zeitreihen) berechnet. Es wurde in einem überwachten Lernaufbau verwendet, insbesondere wurde berichtet , dass es Ergebnisse auf dem neuesten Stand der Technik erzielt, wenn es in einem Klassifikator für den nächsten Nachbarn verwendet wird.

Dani Mesejo
quelle
2

Hast du diese These gesehen ? Der Autor verwendet DTW, um eine Sammlung von Diagrammmustern zu identifizieren.

Ray Ng
quelle
0

Es scheint, Sie könnten das Muster mit Prozentsätzen nachahmen. Wie hoch sind die beiden Schultern in der Spitze? (Kopf) Sollten die beiden Schultern gerade sein, was gerade ist? Perfekt oder geben Sie einen kleinen Unterschied, was ist dieser kleine Unterschied. Das Finden der Antwort kann nach dem Studium der Diagramme erfolgen, um festzustellen, wie viel Prozent der erfolgreichen Muster waren. Dann ahme ich das nach.

Jonathan Holloway
quelle