mcpField
M
mql-developer

mql-developer

github.com/thomaspraunDevelopment55437 installsUpdated 37w ago
Repository

About mql-developer

mql-developer is a reference and workflow guide for building MQL4 and MQL5 projects on MetaTrader. It serves developers working on Expert Advisors, indicators, trading operations, external communication, and testing, with topic-specific references and practical cautions.

Key features

  1. 01Navigate MQL4 and MQL5 references
  2. 02Choose EA architecture and design patterns
  3. 03Guide order, position, and risk management
  4. 04Cover indicators and chart interfaces
  5. 05Document API communication and backtesting

Use cases

  1. 01Plan an Expert Advisor project
  2. 02Implement trade handling and risk controls
  3. 03Build a custom indicator or chart panel
  4. 04Set up Strategy Tester and validation

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/thomaspraun/mql-developer --skill mql-developer

After installing, type/mql-developerin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

LICENSE
README.md
references/
trading-operations.md
external-communication.md
mql5-reference.md
architecture-patterns.md
mql4-reference.md
backtesting.md
indicators-and-ui.md
security-licensing.md

Details

From the project README

MQL Developer

Guide for professional MQL4/MQL5 development on MetaTrader platforms.

Quick Reference Navigation

Load the appropriate reference file based on the task:

TaskReference File
MQL4 syntax, types, functions, predefined varsreferences/mql4-reference.md
MQL5 syntax, OOP, CTrade, Standard Libraryreferences/mql5-reference.md
Project structure, EA architecture, design patternsreferences/architecture-patterns.md
Orders, positions, risk management, trailing stopsreferences/trading-operations.md
Custom indicators, UI panels, scripts, chart objectsreferences/indicators-and-ui.md
WebRequest, JSON, REST API, Node.js integrationreferences/external-communication.md
Strategy Tester, optimization, walk-forward, Monte Carloreferences/backtesting.md
Code protection, licensing, anti-decompilationreferences/security-licensing.md
Search Patterns for Large References

For targeted lookup in large files, grep for these section headers:

mql4-reference.md: Data Types, Variables, Operators, Arrays, Strings, Program Types, Predefined Variables, Technical Indicator Functions, Order Management, Market Information, Account Functions, Preprocessor, Error Handling, Common Gotchas, File Operations, WebRequest, Utility Functions, Global Terminal Variables

architecture-patterns.md: Project Structure, Simple Single-File, Modular EA, State Machine, Multi-Timeframe, Multi-Symbol, Singleton, Strategy Pattern, Observer, Include File Design, Complete Templates

mql5-reference.md: OOP Features, Trade Functions, CTrade, Native Trade, Event Handlers, Standard Library, Key Enumerations, SQLite, Sockets, Resources, OpenCL

MQL4 vs MQL5 Key Differences

AspectMQL4MQL5
ParadigmProcedural (C-like)Full OOP (C++-like)
Trade modelOrders only (OrderSend)Orders + Deals + Positions (CTrade)
Account modelHedging onlyNetting + Hedging
Indicator buffersMax 8Max 512
Draw styles6 basic18 (basic + color)
Standard LibraryMinimalComprehensive
DatabaseNoneSQLite built-in
SocketsNoneTCP + TLS
OpenCLNoYes

Core Workflow

Creating an Expert Advisor
  1. Define strategy signal logic (entry/exit conditions)
  2. Choose architecture: simple (single-file) or modular (Signal + Trade + Risk + Filter)
  3. Implement order/position management with proper error handling and retries
  4. Add risk management (position sizing, drawdown control)
  5. Add filters (time, spread, volatility)
  6. Backtest with Strategy Tester (Open Prices first, then Every Tick)
  7. Walk-forward validate and Monte Carlo test
Creating a Custom Indicator
  1. Choose window: indicator_chart_window or indicator_separate_window
  2. Define buffers and plots (indicator_buffers, indicator_plots in MQL5)
  3. Implement OnCalculate() with efficient recalculation using prev_calculated
  4. Set draw styles, colors, labels
  5. Handle multi-timeframe data if needed
Communicating with External APIs
  1. Whitelist URL in Tools > Options > Expert Advisors
  2. Use WebRequest() for REST calls (POST/GET)
  3. Build JSON manually (MQL has no native JSON)
  4. Parse response with string functions
  5. Use EventSetTimer() for polling patterns
  6. Handle network errors with retries

Critical Gotchas

  • Double comparison: Never use == with doubles. Use NormalizeDouble() or tolerance
  • 4-digit vs 5-digit brokers: 1 pip = 1 point (4-digit) or 10 points (5-digit). Always detect
  • Reverse loop for closing: Iterate OrdersTotal()-1 down to 0 when closing orders (MQL4)
  • ECN brokers: Some require two-step: OrderSend() without SL/TP, then OrderModify()
  • Filling policy (MQL5): Always detect via SYMBOL_FILLING_MODE, never hardcode FOK
  • WebRequest limitations: Synchronous/blocking, not available in indicators or Strategy Tester
  • Trade context busy (MQL4): Only one EA can trade at a time per terminal
  • Array indexing: Series arrays index 0 = newest bar. Use ArraySetAsSeries() to control

Project Structure (Recommended)

MQL5/                          (or MQL4/)
├── Experts/
│   └── MyEA/
│       └── MyEA.mq5           // EA entry point
├── Indicators/
│   └── MyIndicator.mq5
├── Scripts/
│   └── MyScript.mq5
├── Include/
│   ├── Core/
│   │   ├── CTradeManager.mqh  // Order execution + retries
│   │   ├── CRiskManager.mqh   // Position sizing + drawdown
│   │   └── CSignalBase.mqh    // Signal interface
│   ├── Communication/
│   │   ├── CHttpClient.mqh    // WebRequest wrapper
│   │   └── CJsonHelper.mqh    // JSON build/parse
│   ├── UI/
│   │   └── CPanel.mqh         // Trading panel
│   └── Utils/
│       ├── CTimeFilter.mqh    // Session/time filters
│       └── CSymbolHelper.mqh  // Multi-market helpers
└── Libraries/

For simpler projects, a single-file EA with inline functions is acceptable.

Code Style Conventions

  • Prefix member variables with m_ (e.g., m_magicNumber)
  • Prefix global variables with g_ (e.g., g_isInitialized)
  • Use input for user parameters, not extern
  • Always use #property strict in MQL4
  • Normalize all prices before sending to server: NormalizeDouble(price, Digits)
  • Always check return values of OrderSelect(), OrderSend(), trade operations
  • Comment magic numbers and explain non-obvious trading logic

Official Documentation

Comments

Markdown supported