Rust-ZMQ-MQL5 / summary.md
algorembrant's picture
Upload 68 files
cbe113f verified
|
raw
history blame
3.81 kB

Project Summary

Techstack

  • Rust: The core language for the client application (mt5-chart).
  • MQL5 (MetaQuotes Language 5): Used for the Expert Advisor on the MetaTrader 5 platform.
  • ZeroMQ (ZMQ): High-performance asynchronous messaging library used for communication between MT5 and Rust.
  • Bat/Shell: Used for running build commands via PowerShell.

Dependencies

Rust (Client)

Defined in mt5-chart/Cargo.toml:

  • eframe (0.27.1): Framework for writing GUI apps using egui.
  • egui (0.27.1): Immediate mode GUI library.
  • egui_plot (0.27.1): Plotting library for egui.
  • zeromq (0.5.0-pre): Rust bindings for ZeroMQ.
  • serde (1.0.197): Serialization/deserialization framework.
  • serde_json (1.0.114): JSON support for Serde.
  • tokio (1.36.0): Asynchronous runtime for Rust.
  • futures (0.3.30): Utilities for asynchronous programming.

MQL5 (Server)

  • Zmq.mqh: Custom ZeroMQ wrapper library for MQL5.
  • libzmq.dll: 64-bit ZeroMQ dynamic link library.
  • libsodium.dll: Cryptography library required by libzmq.

Applications

  • Visual Studio Code: Code editor used for Rust development.
  • MetaTrader 5 (MT5): Trading platform running the MQL5 Expert Advisor.
  • MetaEditor 5: IDE for compiling MQL5 scripts.
  • Visual Studio C++ Build Tools: Required for compiling Rust on Windows (Linker).
  • Windows PowerShell: Used for executing Cargo commands.
  • Google Gemini: AI assistant used for project development aid.

Project Structure & Files

  • MQL5/: Contains the Publisher logic.
    • Experts/ZmqPublisher.mq5: The main EA publishing tick data.
    • Include/Zmq/Zmq.mqh: Helper library for ZMQ binding.
    • Libraries/*.dll: Required DLLs for ZMQ execution in MT5.
  • mt5-chart/: Contains the Subscriber logic (Rust).
    • src/main.rs: Main entry point for the GUI and ZMQ subscriber.
    • Cargo.toml: Rust package configuration.
  • Documentation:
    • README.md: Project documentation.

Mechanics & Workflow

The system operates on a Publisher-Subscriber model using ZeroMQ (ZMQ) to bridge MetaTrader 5 (MQL5) and the external Rust application.

Data Flow

  1. Publisher (MQL5):

    • The ZmqPublisher.mq5 Expert Advisor initializes a ZMQ PUB socket and binds it to tcp://*:5555.
    • On every market tick (OnTick()), it retrieves the current Bid/Ask prices.
    • It constructs a JSON object (e.g., {"symbol": "XAUUSD", "bid": 2025.50, ...}) and publishes it as a message.
  2. Subscriber (Rust):

    • The mt5-chart application initializes a ZMQ SUB socket and connects to tcp://127.0.0.1:5555.
    • It runs an asynchronous Tokio task that listens for incoming ZMQ messages.
    • Upon receiving a message, it deserializes the JSON data into a Rust struct (TickData).
    • The data is sent via an internal channel (mpsc) to the GUI thread.
    • The eframe/egui interface updates the chart and labels in real-time.

Workflow Algorithm

sequenceDiagram
    participant MT5 as MetaTrader 5 (MQL5)
    participant ZMQ as ZeroMQ (PUB/SUB)
    participant Rust as Rust Client (mt5-chart)
    participant GUI as GUI (egui)

    Note over MT5, Rust: Initialization
    Rust->>ZMQ: Connect (SUB) to tcp://127.0.0.1:5555
    MT5->>ZMQ: Bind (PUB) to tcp://0.0.0.0:5555
    
    Note over MT5, GUI: Real-time Tick Loop
    loop Every Tick
        MT5->>MT5: Get SymbolInfoTick
        MT5->>ZMQ: Publish JSON {"symbol":..., "bid":...}
        ZMQ->>Rust: Receive Message
        Rust->>Rust: Parse JSON to TickData
        Rust->>GUI: Send Data via Channel
        GUI->>GUI: Update Plot & Request Repaint
    end