Diskussion zum Artikel "Integration von Computer Vision in den Handel in MQL5 (Teil 1): Erstellen von Grundfunktionen"
Hallo, wie geht es Ihnen, Mann?
Ich schätze wirklich diesen Artikel, den Sie für uns zur Verfügung gestellt haben. Aber ich habe noch etwas zu sagen für jemanden wie mich, der Handelssysteme (EA) mit MQL5 Sprache erstellt hat, aber haben sehr wenig Ahnung, wenn es um maschinelles Lernen oder sogar Python im Allgemeinen kommt.
Ich möchte ML in mein Handelssystem integrieren, um es von einem gewöhnlichen Programm, das, wie Sie sagten, "geistlos" ist, zu besseren Entscheidungen zu bringen.
Soweit ich weiß, scheint Ihr Artikel einige Anfängerschritte zu vermissen. Ihr erster Code sagt uns nicht, welche IDE wir verwenden werden (ist es Meta Quotes IDE?) Ich würde das gerne wissen und Schritte, um es für all die Arbeit einzurichten, die wir später tun werden.
Außer vielleicht Ihr Artikel ist nicht gerade Lehre Anfänger von Grund auf (nicht einführend).
import MetaTrader5 as mt5 import numpy as np import pandas as pd import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import train_test_split from tensorflow.keras.models import Model from tensorflow.keras.layers import Dense, Conv1D, MaxPooling1D, Flatten, Dropout, BatchNormalization, Input from tensorflow.keras.callbacks import EarlyStopping from datetime import datetime # --- KONFIGURATION --- SYMBOL = "EURUSD" TIMEFRAME = mt5.TIMEFRAME_H1 DATA_LOAD = 6200 # Erhöht auf ~1 Jahr der H1-Daten WINDOW_SIZE = 48 # Eingabefenster (48 Stunden) PRED_WINDOW = 24 # Vorhersagehorizont (24 Stunden) BACKTEST_ROWS = 20 # Anzahl der letzten manuell zu überprüfenden Balken def connect_to_mt5(): if not mt5.initialize(): print("Error initializing MetaTrader5") return False return True def get_historical_data(num_bars): # Ziehen einer bestimmten Anzahl von der aktuellen Position rates = mt5.copy_rates_from_pos(SYMBOL, TIMEFRAME, 0, num_bars) if rates is None or len(rates) == 0: return None df = pd.DataFrame(rates) df['time'] = pd.to_datetime(df['time'], unit='s') df.set_index('time', inplace=True) return df[['open', 'high', 'low', 'close']] def create_images(data, window_size=48, prediction_window=24): images, targets = [], [] for i in range(len(data) - window_size - prediction_window): window = data.iloc[i:i+window_size] # Das Etikett basiert auf dem Preis nach 24 Stunden. target_val = 1 if data.iloc[i+window_size+prediction_window-1]['close'] > window['close'].iloc[-1] else 0 scaler = MinMaxScaler() window_scaled = scaler.fit_transform(window) images.append(window_scaled) targets.append(target_val) return np.array(images), np.array(targets) def train_cv_model(images, targets): X_train, X_val, y_train, y_val = train_test_split(images, targets, test_size=0.15, shuffle=True) inputs = Input(shape=(X_train.shape[1], X_train.shape[2])) # CNN-Architektur gemäß CV_Model.py-Logik x = Conv1D(64, 3, padding='same', activation='relu')(inputs) x = BatchNormalization()(x) x = MaxPooling1D(2)(x) x = Conv1D(128, 3, padding='same', activation='relu')(x) x = BatchNormalization()(x) x = MaxPooling1D(2)(x) x = Flatten()(x) x = Dense(64, activation='relu')(x) x = Dropout(0.3)(x) outputs = Dense(1, activation='sigmoid')(x) model = Model(inputs, outputs) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) model.fit(X_train, y_train, epochs=40, batch_size=64, validation_data=(X_val, y_val), callbacks=[EarlyStopping(patience=10, restore_best_weights=True)], verbose=0) return model def run_author_backtest(model, full_data, num_checks=20): """ Backtests the last 20 hours to see if a 24-hour prediction made at that time would have been correct. """ print(f"\n--- BACKTEST TABLE (Last {num_checks} Prediction Points) ---") print(f"{'Time (UTC)':<20} | {'Pred (24h)':<10} | {'Actual (24h)':<12} | {'Result'}") print("-" * 75) wins = 0 # Wir gehen zurück, um sicherzustellen, dass das 24-Stunden-Fenster für den Backtest tatsächlich beendet ist. for i in range(num_checks + PRED_WINDOW, PRED_WINDOW, -1): idx = len(full_data) - i # 1. Holen Sie sich das zu diesem Zeitpunkt verfügbare 48-Stunden-Fenster window = full_data.iloc[idx - WINDOW_SIZE : idx] timestamp = full_data.index[idx-1] # 2. Ermitteln Sie das TATSÄCHLICHE Ergebnis genau 24 Stunden später actual_price_then = window['close'].iloc[-1] actual_price_future = full_data.iloc[idx + PRED_WINDOW - 1]['close'] actual_dir = "UP ▲" if actual_price_future > actual_price_then else "DOWN ▼" # 3. Modell Vorhersage basierend auf Fenster scaler = MinMaxScaler() window_scaled = scaler.fit_transform(window) pred_val = model.predict(np.array([window_scaled]), verbose=0)[0][0] pred_dir = "UP ▲" if pred_val > 0.5 else "DOWN ▼" # 4. Ergebnis res = "✅ WIN" if pred_dir == actual_dir else "❌ VERLUST" if res == "✅ WIN": wins += 1 print(f"{str(timestamp):<20} | {pred_dir:<10} | {actual_dir:<12} | {res}") print("-" * 75) print(f"TOTAL BACKTEST ACCURACY: {(wins/num_checks)*100:.2 f}% ({wins}/{num_checks})") def main(): if not connect_to_mt5(): return print(f"Loading {DATA_LOAD} bars for EURUSD...") data = get_historical_data(DATA_LOAD) if data is None: mt5.shutdown() return # Trainieren Sie nur mit Daten, die nicht Teil unseres Backtest-Fensters sind. train_data = data.iloc[:-(BACKTEST_ROWS + PRED_WINDOW)] images, targets = create_images(train_data, WINDOW_SIZE, PRED_WINDOW) print("Training model on ~1 year of data...") model = train_cv_model(images, targets) # Führen Sie den Backtest genau wie angegeben aus. run_author_backtest(model, data, BACKTEST_ROWS) # Live-Vorhersage für JETZT (die nächsten 24 Stunden) last_window = data.iloc[-WINDOW_SIZE:] scaler = MinMaxScaler() live_pred = model.predict(np.array([scaler.fit_transform(last_window)]), verbose=0)[0][0] live_dir = "UP ▲" if live_pred > 0.5 else "DOWN ▼" print(f"\nLIVE FORECAST FOR NEXT 24 HOURS: {live_dir}") print(f"Confidence: {live_pred*100 if live_pred > 0.5 else (1-live_pred)*100:.2 f}%") input("Process complete. Press Enter to close this window...") mt5.shutdown() if __name__ == "__main__": main()Eine kleine Änderung an den Backtest-Vorhersagen wurde vorgenommen.
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
Neuer Artikel Integration von Computer Vision in den Handel in MQL5 (Teil 1): Erstellen von Grundfunktionen :
Haben Sie sich jemals gefragt, was ein neuronales Netzwerk fühlt, wenn es den EURUSD-Markt betrachtet? Wie nimmt sie jede Volatilitätsspitze, jede Trendumkehr, jede schwer fassbare Musterbildung wahr?
Stellen Sie sich einen Computer vor, der nicht nur gedankenlos vorprogrammierte Regeln anwendet, sondern den Markt wirklich wahrnimmt – und die feinen Nuancen der Kursbewegungen erfasst, die für das menschliche Auge unsichtbar sind. Künstliche Intelligenz, die den EURUSD-Chart wie ein erfahrener Kapitän den Meereshorizont betrachtet und einen herannahenden Sturm erkennt, lange bevor die ersten Anzeichen für schlechtes Wetter auftreten.
Heute lade ich Sie auf eine Reise zur Spitze der Finanztechnologie ein, wo Computer Vision auf Marktanalysen trifft. Wir werden ein System schaffen, das den Markt nicht einfach nur analysiert, sondern ihn visuell versteht und komplexe Preismuster so selbstverständlich erkennt, wie Sie das Gesicht eines Freundes in einer Menschenmenge erkennen.
Mit dieser Funktion wird eine echte Zuordnungsmodell des Bewusstseins erstellt, aus dem hervorgeht, welchen Bereichen des Charts es bei der Entscheidungsfindung die größte Aufmerksamkeit schenkt. Rote Zonen mit erhöhter Aufmerksamkeit fallen oft mit wichtigen Niveaus und Umkehrpunkten zusammen, was bestätigt, dass unser Modell tatsächlich gelernt hat, bedeutende Preisformationen zu erkennen.
Autor: Yevgeniy Koshtenko