Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 1557

 
Mihail Marchukajtes: Das ist der Grund, warum ZZ nicht das beste Ziel ist

Ich benutze ZZ nun schon seit etwa 15 Jahren. Ich kenne alle Nachteile dieses Instruments. Und ich weiß noch viele andere Dinge, deshalb habe ich oben von meiner Idee erzählt.

---

Das System sollte selbständig Kauf-/Verkaufspunkte finden. Sie konkurriert nicht mit den Akteuren auf dem Markt, sondern mit dem Markt selbst (entschuldigen Sie bitte die Tautologie).

 
Eugeni Neumoin:

Ich praktiziere jetzt seit etwa 15 Jahren mit ZZ. Ich kenne alle Unzulänglichkeiten dieses Instruments. Und ich weiß noch viel mehr, deshalb habe ich Ihnen ja oben von meiner Idee erzählt.

---

Das System sollte selbständig Kauf-/Verkaufspunkte ermitteln. Sie konkurriert nicht mit den Akteuren auf dem Markt, sondern mit dem Markt selbst (entschuldigen Sie bitte die Tautologie).

Können Sie mir mehr darüber sagen? Wie haben Sie es umgesetzt? Wenn es einen Kampf zwischen Käufern und Verkäufern gibt, der zu einer Notierung führt, verstehe ich das, aber wenn der Gegner in diesem Spiel der Markt selbst ist, verstehe ich es nicht. Wenn wir von Alpha sprechen, hat es gelernt, selbst nach bestimmten Regeln zu spielen. Man kann dem Markt nicht die Regeln diktieren, es geht also nicht darum, mit dem Markt zu konkurrieren, sondern zu versuchen, wie er zu sein. Sie studiert den Markt, aber sie konkurriert nicht mit ihm. Wenn der Markt ein idealer Akteur ist und wir versuchen, besser zu werden als er. Nun, ja. Ich stimme zu, aber dann ist das Alpha-Beispiel irrelevant. Denn Alpha war Autodidakt. Selbstlernend mit sich selbst. Beschreiben Sie doch kurz und knapp, wie Sie es geschafft haben, dass es sich um einen Wettbewerb zwischen dem Markt und ns handelt, bei dem der Markt von vornherein als Gewinner dasteht. ZZ hat a priori keine endgültigen Werte und ist daher nutzlos.
 

ein Artikel auf Habra mit dem viel beachteten Titel "KI für Menschen: einfache Worte über Technologie"https://habr.com/ru/company/jetinfosystems/blog/471626/

Ich blätterte durch den Artikel - alles drehte sich um maschinelles Lernen, .... und erinnerte mich an eine alte Anekdote:

Ein Student schreibt eine Zoologieprüfung. Er kennt sich nur mit Flöhen aus. Bei der Prüfung wird ihm eine Frage über Hunde gestellt.

Der Student beginnt:

- Hunde sind Säugetiere, die mit Haaren bedeckt sind. Sie haben Flöhe im Fell... dann dreht sich alles um Flöhe....

Prediger:

- Okay, junger Mann, erzähl uns etwas über Katzen.

Student:

- Katzen sind haarbewachsene Säugetiere. Sie haben Flöhe in ihrem Fell...mehr zu den Flöhen....

Student:

- Lassen Sie uns über Fisch sprechen.

Student:

- Fische sind keine Säugetiere. Sie haben kein Fell. Sie sind mit Schuppen bedeckt, aber wenn sie mit Fell bedeckt wären, gäbe es Flöhe in ihnen....

 
 

Das Finale der Rückkehrerausbildung


 
Eugeni Neumoin:

Verwenden Sie weder ZZ noch irgendwelche zusätzlichen Indikatoren. Nur OHLC von mehreren tf's (tf's sollten sich um einen Faktor 4-6 unterscheiden. Zum Beispiel, 1-5-30-H3... einen Zeitraum von bis zu einem Monat. Wählen Sie es selbst aus) und vielleicht mehr Zecken für die Frühwarnung.

Durch die Preise der Maxima und Minima getrennt faltbare Strukturen. Durch OHLC - die Rekursionsstruktur. Und so weiter bei allen gebrauchten Preisen. All diese Signale werden beispielsweise an das gesamte Mesh-Netzwerk weitergeleitet.

Geben Sie auch die Ticks ein, die durch das Rekursionsnetz an einen der Eingänge des vollständigen Maschennetzes geleitet werden.

Optimieren Sie die Geschwindigkeit der Einlagenerhöhung. Infolgedessen sollte das Netz selbst über das Losvolumen entscheiden und die Eröffnungs- und Schließungspunkte auswählen. Es ist ungefähr so.

Zeichnen Sie einfach die Struktur des von Ihnen vorgeschlagenen Netzes. Und Sie werden eine Menge Fragen bekommen.

Aber das ist nur heiße Luft. Die Idee ist richtig, aber die Richtung ist falsch.

 
Maxim Dmitrievsky:

Das Finale der Rückkehrerausbildung


Und können Sie einen selbstgebauten Tester anbringen, ich frage mich, ob Sie einen sehr häufigen Fehler vermieden haben? Oder in einer privaten Nachricht.

Viel Glück!

 
Vladimir Perervenko:

Und können Sie einen selbstgebauten Tester anbringen, ich frage mich, ob Sie einen sehr häufigen Fehler vermieden haben? Oder in einer privaten Nachricht.

Viel Glück!

Wird das Jupiter-Notebook funktionieren?

 
Maxim Dmitrievsky:

Wird der Jupiter-Laptop funktionieren?

(lacht) Natürlich. Danke. (lacht) Ich werde einen Blick darauf werfen und berichten

 
Maxim Dmitrievsky:

Ist der Jupiter-Laptop in Ordnung? Ich schicke Ihnen das ganze Ding, nicht heimlich, denn der ganze Code ist im Video enthalten.

Es ist eine Menge Arbeit, den Code eines anderen zu zerlegen. Sehen Sie sich nur die Funktion custom_tester() und nur den hervorgehobenen Teil an.

def custom_tester(symbol, timeframe, frompos, pricesnumber, lag, num, markup = 0.0):   
    symbols_list = [symbol]
    pr_test = pd.DataFrame()
    for i in symbols_list:
        rates = MT5CopyRatesFromPos(i, timeframe, frompos, pricesnumber)
        pr_test[i] = [y.close for y in rates]

    #creating price returns with lag
    returns = np.array(np.log(1 + pr_test.pct_change(lag)))
    returns = returns[lag:]
    comp_returns = np.array(returns)
    #                   
    for i in range(num-1):
        comp_returns = np.c_[comp_returns, returns]
    #putting returns into dataframe    
    comp_returns = pd.DataFrame(comp_returns)
    #shifting columns to use it as delayed features
    for i in range(num):
        comp_returns[i] = comp_returns.shift(i)
    #deleting first 'num' rows with NaN's
    comp_returns_shifted = pd.DataFrame(comp_returns[num:]).reset_index(drop=True)
    
    testpr = np.array(pr_test[lag+num:])
    X = pd.DataFrame(comp_returns_shifted)
    p = model.predict_proba(X) # непрерывное предсказание классификатора (типа вероятность)
    
    result = np.array([0])
    
    lastdeal = int(2)
    lastpr = float(0.0)

    for i in range (X[0].size):
# При первом входе
        if lastdeal == 2:
# переводим непрерывное предсказание в номинальные значенияю Порог 0.5
            if p[i][0] > 0.5:
                lastdeal = 1
            else:
                lastdeal = 0
            lastpr = testpr[i] # сохраняем значение Close 
            continue
# при следующей итерации
        if lastdeal == 1 and p[i][0] > 0.5:
            lastdeal = 0 # это я не понял зачем
# При вычислении результата ошибка
            result = np.append(result, result[-1] - markup + lastpr - testpr[i])
            lastpr = testpr[i]
            continue
# при последующей итерации
        if lastdeal == 0 and p[i][0] < 0.5:
            lastdeal = 1 # здесь не должно быть -1?
# и здесь ошибка
            result = np.append(result, result[-1] - markup + testpr[i] - lastpr)
            lastpr = testpr[i]
            continue
            
    plt.figure(figsize=(20,5))
    plt.plot(result)
    
    from sklearn.linear_model import LinearRegression
    y = result.reshape(-1,1)
    X = np.arange(result.size).reshape(-1,1)
    lr = LinearRegression()
    lr.fit(X,y)
#     print(lr.score(X,y))
    return lr.score(X,y)

Wie groß ist der Fehler bei der Berechnung des Ergebnisses? Sie berechnen das Ergebnis für jede Iteration, indem Sie result +=testpr[i] - lastpr zum vorherigen Wert addieren. Es handelt sich um die Differenz zwischen dem Close des aktuellen Balkens und dem des vorherigen. Idealerweise wäre es besser, Schließen - Öffnen zu verwenden, aber das spielt keine Rolle. Wichtig ist, dass Sie ein Signal, das Sie am Ende des aktuellen Balkens erhalten haben, als ein Signal diff(Close) desselben Balkens betrachten. Dies ist falsch. Der Signalaufschlag des aktuellen Balkens ist diff(Close) des nächsten Balkens. Das Signal muss um einen Balken nach rechts verschoben werden, um das Ergebnis korrekt zu berechnen. p = model.predict_proba(X) um einen Balken nach rechts zu verschieben. Ich werde weitere Berechnungen mit R durchführen, das ist für mich einfacher.

ifelse(p >= 0.5, 1, -1)%>% lag()%>% na.omit() -> sig
cumsum(sig * {diff(testpr) %>% tail(lenght(sig))})-> result

In der ersten Zeile konvertieren Sie die Vorhersage in den Nominalwert (1,-1), verschieben sie um einen Balken nach rechts, entfernen NA und erhalten einen Vektor von Signalen. Die zweite Zeile fasst das Produkt aus Signalvektor und diff(Close)-Vektor kumulativ zusammen, nachdem es zuvor in der Länge an den Signalvektor angepasst wurde. Das wird uns das richtige Ergebnis liefern.

Viel Glück!

Документация по MQL5: Основы языка / Операции и выражения / Побитовые операции
Документация по MQL5: Основы языка / Операции и выражения / Побитовые операции
  • www.mql5.com
Дополнение до единицы значения переменной. Значение выражения содержит 1 во всех разрядах, в которых значение переменной содержит 0, и 0 во всех разрядах, в которых значения переменной содержит 1. Сдвиг вправо Двоичное представление x сдвигается вправо на y разрядов. Если сдвигаемое значение имеет беззнаковый тип, то осуществляется логический...
Grund der Beschwerde: