Files

160 lines
4.5 KiB
Python
Raw Permalink Normal View History

2026-01-05 05:37:33 +01:00
"""
Complete Example Workflow for ONNX + MT5
This script demonstrates the complete workflow:
1. Train an ONNX model
2. Test predictions
3. Show how to use in MT5
Run this to see the full process in action.
"""
import os
import sys
from datetime import datetime
import MetaTrader5 as mt5
# Import our modules
from train_onnx_model import ONNXModelTrainer
from predict_with_onnx import ONNXPredictor
def main():
"""Complete workflow example."""
print("="*60)
print("ONNX + MetaTrader 5 - Complete Workflow Example")
print("="*60)
# Configuration
symbol = 'XAUUSD'
timeframe_str = 'H1'
lookback = 60
epochs = 20 # Reduced for quick demo
# Convert timeframe
timeframe_map = {
'M1': mt5.TIMEFRAME_M1,
'M5': mt5.TIMEFRAME_M5,
'M15': mt5.TIMEFRAME_M15,
'M30': mt5.TIMEFRAME_M30,
'H1': mt5.TIMEFRAME_H1,
'H4': mt5.TIMEFRAME_H4,
'D1': mt5.TIMEFRAME_D1
}
timeframe = timeframe_map[timeframe_str]
# Create output directory
models_dir = 'models'
os.makedirs(models_dir, exist_ok=True)
# Step 1: Train Model
print("\n" + "="*60)
print("STEP 1: Training ONNX Model")
print("="*60)
trainer = ONNXModelTrainer(
symbol=symbol,
timeframe=timeframe,
lookback=lookback
)
try:
print(f"\nTraining model for {symbol} on {timeframe_str} timeframe...")
print(f"Lookback: {lookback} bars")
print(f"Epochs: {epochs}")
print("\nThis may take several minutes...\n")
trainer.train(epochs=epochs, batch_size=32, verbose=1)
# Export model
model_name = f"{symbol}_{timeframe_str}_model.onnx"
model_path = os.path.join(models_dir, model_name)
print(f"\nExporting model to ONNX format...")
trainer.export_to_onnx(model_path)
print(f"\n✓ Model saved to: {model_path}")
except Exception as e:
print(f"\n✗ Training failed: {e}")
import traceback
traceback.print_exc()
trainer.cleanup()
return
finally:
trainer.cleanup()
# Step 2: Test Predictions
print("\n" + "="*60)
print("STEP 2: Testing Predictions")
print("="*60)
predictor = ONNXPredictor(model_path)
try:
# Get current price
symbol_info = mt5.symbol_info(symbol)
if symbol_info:
current_price = symbol_info.bid
print(f"\nCurrent {symbol} price: {current_price:.5f}")
else:
print(f"\nWarning: Could not get current price for {symbol}")
current_price = 0
# Make predictions
print(f"\nMaking predictions...")
predictions = predictor.predict_batch(symbol, timeframe, n_predictions=3)
print("\nPredictions:")
for i, pred in enumerate(predictions, 1):
if current_price > 0:
change = pred - current_price
change_pct = (change / current_price) * 100
print(f" {i}. {pred:.5f} (change: {change:+.5f}, {change_pct:+.2f}%)")
else:
print(f" {i}. {pred:.5f}")
except Exception as e:
print(f"\n✗ Prediction failed: {e}")
import traceback
traceback.print_exc()
finally:
predictor.cleanup()
# Step 3: Instructions for MT5
print("\n" + "="*60)
print("STEP 3: Using in MetaTrader 5")
print("="*60)
print(f"\nTo use this model in MetaTrader 5:")
print(f"\n1. Copy the model file to MT5's Files folder:")
print(f" {model_path}")
print(f" → <MT5 Data Folder>\\MQL5\\Files\\models\\{os.path.basename(model_path)}")
print(f"\n2. Open ONNX_EA.mq5 in MetaEditor")
print(f"\n3. Set EA parameters:")
print(f" - Model Path: models\\{os.path.basename(model_path)}")
print(f" - Lookback: {lookback}")
print(f" - Your trading parameters")
print(f"\n4. Compile and attach to chart")
print(f"\n5. Monitor performance")
print("\n" + "="*60)
print("Workflow completed!")
print("="*60 + "\n")
if __name__ == '__main__':
# Check MT5 connection first
if not mt5.initialize():
print("ERROR: Failed to initialize MT5")
print("Make sure MetaTrader 5 is running and you're logged in.")
sys.exit(1)
try:
main()
except KeyboardInterrupt:
print("\n\nInterrupted by user")
finally:
mt5.shutdown()