Command-line tool for MetaTrader 5
Project description
mt5cli
Command-line tool for exporting MetaTrader 5 data to CSV, JSON, Parquet, and SQLite3.
Built on top of pdmt5, a pandas-based data handler for MetaTrader 5.
Features
- Multi-format export: CSV, JSON, Parquet, and SQLite3 output formats
- Auto-detection: Format detection from file extensions
- Comprehensive data access: Rates, ticks, account info, symbols, orders, positions, and trading history
- Flexible timeframes: Named timeframes (M1, H1, D1, etc.) and numeric values
- Connection management: Optional credentials, server, and timeout configuration
Installation
pip install -U mt5cli MetaTrader5
Usage
# Export account information to CSV
mt5cli -o account.csv account-info
# Export EURUSD M1 rates to Parquet
mt5cli -o rates.parquet rates-from --symbol EURUSD --timeframe M1 \
--date-from 2024-01-01 --count 1000
# Export ticks to JSON
mt5cli -o ticks.json ticks-from --symbol EURUSD \
--date-from 2024-01-01 --count 500 --flags ALL
# Export symbols to SQLite3 with custom table name
mt5cli -o data.db --table symbols symbols --group "*USD*"
# Export with connection credentials
mt5cli --login 12345 --password mypass --server MyBroker-Demo \
-o positions.csv positions
Run as a Python module:
python -m mt5cli -o account.csv account-info
Commands
| Command | Description |
|---|---|
rates-from |
Export rates from a start date |
rates-from-pos |
Export rates from a start position |
rates-range |
Export rates for a date range |
ticks-from |
Export ticks from a start date |
ticks-range |
Export ticks for a date range |
ticks-recent |
Export ticks from a recent trailing window |
account-info |
Export account information |
terminal-info |
Export terminal information |
version |
Export MetaTrader 5 version information |
last-error |
Export the last error information |
symbols |
Export symbol list |
symbol-info |
Export symbol details |
symbol-info-tick |
Export the last tick for a symbol |
minimum-margins |
Export minimum-volume buy and sell margin requirements |
market-book |
Export market depth (order book) |
orders |
Export active orders |
positions |
Export open positions |
history-orders |
Export historical orders |
history-deals |
Export historical deals |
order-check |
Check funds sufficiency for a trade request |
order-send |
Send a trade request to the trade server (--yes required) |
collect-history |
Bundle rates, ticks, history-orders, and history-deals for one or more symbols into a single SQLite database |
Use order-check to validate a request payload before running order-send --yes.
collect-history
Collect several historical datasets per symbol into one SQLite database in a single MT5 session. Pick datasets with repeatable --dataset (default: all four), choose conflict behavior with --if-exists append|replace|fail (default: fail), and optionally derive cash_events / positions_reconstructed views from history_deals via --with-views.
mt5cli -o history.db collect-history \
--symbol EURUSD --symbol GBPUSD \
--date-from 2024-01-01 --date-to 2024-02-01 \
--dataset rates --dataset history-deals \
--timeframe M1 --flags ALL --if-exists append --with-views
History orders and deals are fetched per symbol and concatenated, so the symbol filter is applied consistently across all datasets. The cash_events view is derived from symbol-filtered history_deals, so account-level cash events with empty or non-matching symbols may be excluded. The rates table records the requested timeframe so appended runs at different timeframes remain distinguishable. The positions_reconstructed view aggregates trade deals by position_id, excludes positions without closing-side entries, and uses volume-weighted open/close prices; reversal deals (DEAL_ENTRY_INOUT) are reported via volume_reversal / reversal_count columns.
Incremental history SDK
For automated pipelines, use the importable incremental API instead of re-fetching fixed date ranges:
from pdmt5 import Mt5Config, Mt5DataClient
from mt5cli import Dataset, update_history, update_history_with_config
# Reuse an already-connected pdmt5 client (does not open/close MT5)
client = Mt5DataClient(config=Mt5Config(login=12345))
client.initialize_and_login_mt5()
try:
update_history(
client=client,
output="history.db",
symbols=["EURUSD", "GBPUSD"],
datasets={Dataset.rates, Dataset.history_deals},
timeframes=["M1", "H1"], # default: all fixed MT5 timeframes
lookback_hours=24,
create_rate_views=True,
with_views=True,
include_account_events=True,
)
finally:
client.shutdown()
# Standalone wrapper that opens and closes MT5 for you
update_history_with_config(
output="history.db",
symbols=["EURUSD"],
config=Mt5Config(login=12345),
)
collect-history: explicit date-range export into SQLite.update_history: incremental append based on existing SQLiteMAX(time)per symbol (and timeframe for rates); account-level deals use a separate cursor wheninclude_account_events=True.ratestable: normalized storage withsymbolandtimeframecolumns.- Rate compatibility views: mt5cli manages all
rate_*views. Naming israte_<symbol>__<timeframe>when a symbol has one timeframe, otherwiserate_<symbol>__<granularity>_<timeframe>(for examplerate_EURUSD__M1_1). Stalerate_*views are dropped and recreated when rates change for offline tools such as mteor optimize. - Rate view resolution: use
mt5cli.history.resolve_rate_view_name()/resolve_rate_view_names()to map symbols and granularities to existing SQLite compatibility views without creating databases. - SQLite export helpers: use
export_dataframe_to_sqlite()for append mode, optional index export, and post-write deduplication by key columns. - Recent ticks and margins:
recent_ticks()andminimum_margins()SDK helpers (and matching CLI commands) cover common downstream read-only queries.
Requirements
- Python 3.11+
- Windows OS (MetaTrader 5 requirement)
- MetaTrader 5 platform installed
Development
git clone https://github.com/dceoy/mt5cli.git
cd mt5cli
uv sync
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mt5cli-0.4.3.tar.gz.
File metadata
- Download URL: mt5cli-0.4.3.tar.gz
- Upload date:
- Size: 119.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7dfec97308adf80f2c3b59999f26087ab56391eb85dac4dea9eea547a8261c2
|
|
| MD5 |
2418cf92e3230560463b5f717051b28c
|
|
| BLAKE2b-256 |
66903d4f926852977678e79cde74238aeb497eed7d4ea7d6d82398d4c028796f
|
Provenance
The following attestation bundles were made for mt5cli-0.4.3.tar.gz:
Publisher:
release.yml on dceoy/mt5cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mt5cli-0.4.3.tar.gz -
Subject digest:
a7dfec97308adf80f2c3b59999f26087ab56391eb85dac4dea9eea547a8261c2 - Sigstore transparency entry: 1757041467
- Sigstore integration time:
-
Permalink:
dceoy/mt5cli@b2bb2ad0a0cd87aaa6b8fa4e0a204f28a2f2f963 -
Branch / Tag:
refs/tags/v0.4.3 - Owner: https://github.com/dceoy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b2bb2ad0a0cd87aaa6b8fa4e0a204f28a2f2f963 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file mt5cli-0.4.3-py3-none-any.whl.
File metadata
- Download URL: mt5cli-0.4.3-py3-none-any.whl
- Upload date:
- Size: 27.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d9889330c535e1caa19023cc7dd1f057027b753af897ef66053f09b5e4b40da
|
|
| MD5 |
19926fe0313b53afc60f6c5b3519208d
|
|
| BLAKE2b-256 |
f1bb6a01846ce5e3547822bba6e6c4c84910d17accf8993f54693438b0caab12
|
Provenance
The following attestation bundles were made for mt5cli-0.4.3-py3-none-any.whl:
Publisher:
release.yml on dceoy/mt5cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mt5cli-0.4.3-py3-none-any.whl -
Subject digest:
8d9889330c535e1caa19023cc7dd1f057027b753af897ef66053f09b5e4b40da - Sigstore transparency entry: 1757041518
- Sigstore integration time:
-
Permalink:
dceoy/mt5cli@b2bb2ad0a0cd87aaa6b8fa4e0a204f28a2f2f963 -
Branch / Tag:
refs/tags/v0.4.3 - Owner: https://github.com/dceoy
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@b2bb2ad0a0cd87aaa6b8fa4e0a204f28a2f2f963 -
Trigger Event:
workflow_dispatch
-
Statement type: