EjtraderMT
Metatrader 5 API - Trading and history OHLC Dataframe in Nano Seconds
Install / Use
/learn @ejtraderLabs/EjtraderMTREADME
EjtraderMT Python Metatrader 5 API
Install stable version using pip
pip install ejtraderMT -U
From source code
for developers attention may contain countless bugs
git clone https://github.com/ejtraderLabs/ejtraderMT
cd ejtraderMT
python setup.py install
or
pip install git+https://github.com/ejtraderLabs/ejtraderMT.git
Runing Metatrader 5 on Docker or windows machine
Easy way is using docker make sure to have docker runing on your machine
docker volume create ejtraderMT
docker run -d --restart=always -p 5900:5900 -p 15555:15555 -p 15556:15556 -p 15557:15557 -p 15558:15558 --name ejtraderMT -v ejtraderMT:/data ejtrader/metatrader:5
or docker compose
version: '3.8'
services:
app:
container_name: metatrader
image: ejtrader/metatrader:5
restart: unless-stopped
ports:
- '5900:5900'
- '15555:15555'
- '15556:15556'
- '15557:15557'
- '15558:15558'
volumes:
- ejtraderMT:/data
volumes:
ejtraderMT: {}
Dockerfile and source for Docker wine vnc github
Access Metatrader 5 via VNC
download VNC VIEWER or any other vnc client of your preference: Download
username: root
password: root
harder way installing direct to your Metatrader 5 on Windows Machine
First download MQL5 source code and install it on the Metatrader 5 github
second download and install Microsoft Visual C++ 2015 Download
import
from ejtraderMT import Metatrader
Connect Metatrader 5
make sure ejtraderMT expert are load on the chart
'''
to change the host IP example Metatrader("192.168.1.100") ou
you can use doman example "metatraderserverdomain.com"
for you local time on the Dataframe Metatrader(tz_local=True)
attention utc time is the default for Dataframe index "date"
for real volume for active like WIN futures ou centralized market use Metatrader(real_volume=True)
attention tick volume is the default
to use more than one option just use , example Metatrader(host='hostIP',tz_local=True)
'''
api = Metatrader()
Account information
accountInfo = api.accountInfo()
print(accountInfo)
print(accountInfo['broker'])
print(accountInfo['balance'])
Economic Calendar
symbol = "EURUSD"
fromDate = "20/08/2021"
toDate = "24/08/2022"
calendar = api.calendar(symbol,fromDate,toDate)
print(calendar)
currency impact event country actual forecast previous
date
2021-08-20 06:00:00 EUR 2 PPI m/m(ppi-mm) Germany(DE) 1.9 0.9 1.3
2021-08-20 06:00:00 EUR 1 PPI y/y(ppi-yy) Germany(DE) 10.4 9.4 8.5
2021-08-20 17:00:00 USD 2 Baker Hughes US Oil Rig Count(baker-hughes-us-... United States(US) 405 None 397
2021-08-20 17:00:00 USD 2 Baker Hughes US Total Rig Count(baker-hughes-u... United States(US) 503 None 500
2021-08-20 19:30:00 EUR 1 CFTC EUR Non-Commercial Net Positions(cftc-eur... European Union(EU) 57.6 K None 33.9 K
... ... ... ... ... ... ... ...
2022-08-24 14:30:00 USD 1 EIA Heating Oil Stocks Change(eia-heating-oil-... United States(US) 0.845 M -0.013 M 0.249 M
2022-08-24 14:30:00 USD 1 EIA Gasoline Stocks Change(eia-gasoline-stocks... United States(US) -0.027 M -1.829 M -4.642 M
2022-08-24 14:30:00 USD 1 EIA Refinery Crude Oil Daily Inputs Change(eia... United States(US) -0.168 M None -0.158 M
2022-08-24 14:30:00 USD 1 EIA Refinery Utilization Rate Change(eia-refin... United States(US) 0.3 None -0.8
2022-08-24 17:00:00 USD 1 5-Year Note Auction(5-year-note-auction) United States(US) 3.23 None 2.86
History Dataframe Ready
History from Date to Date
# you can add unlimited actives to list ["EURUSD","GBPUSD","AUDUSD"]
symbol = "EURUSD"
timeframe = "M1"
fromDate = "20/02/2021"
toDate = "24/02/2021"
history = api.history(symbol,timeframe,fromDate,toDate)
print(history)
open high low close volume spread
date
2021-02-21 23:00:00 1.21135 1.21138 1.21131 1.21134 7.0 35
2021-02-21 23:01:00 1.21130 1.21135 1.21130 1.21135 6.0 43
2021-02-21 23:04:00 1.21150 1.21184 1.21134 1.21184 13.0 31
2021-02-21 23:05:00 1.21163 1.21207 1.21148 1.21181 39.0 42
2021-02-21 23:06:00 1.21189 1.21193 1.21182 1.21182 17.0 64
... ... ... ... ... ... ...
2021-02-24 02:56:00 1.21629 1.21629 1.21590 1.21594 51.0 5
2021-02-24 02:57:00 1.21592 1.21592 1.21574 1.21574 34.0 5
2021-02-24 02:58:00 1.21574 1.21579 1.21572 1.21575 35.0 5
2021-02-24 02:59:00 1.21576 1.21588 1.21573 1.21582 55.0 5
2021-02-24 03:00:00 1.21583 1.21601 1.21578 1.21598 80.0 5
[3104 rows x 6 columns]
History by period unit like 27 candles
# you can add unlimited actives to list ["EURUSD","GBPUSD","AUDUSD"]
symbol = "EURUSD"
timeframe = "M1"
fromDate = 27
history = api.history(symbol,timeframe,fromDate)
print(history)
open high low close volume spread
date
2021-02-26 19:23:00 1.20846 1.20857 1.20837 1.20856 84.0 5
2021-02-26 19:24:00 1.20855 1.20858 1.20842 1.20847 71.0 5
2021-02-26 19:25:00 1.20846 1.20849 1.20832 1.20845 69.0 5
2021-02-26 19:26:00 1.20844 1.20845 1.20823 1.20833 64.0 5
2021-02-26 19:27:00 1.20833 1.20836 1.20821 1.20834 53.0 5
... ... ... ... ... ... ...
2021-02-26 22:55:00 1.20721 1.20730 1.20718 1.20719 46.0 13
2021-02-26 22:56:00 1.20718 1.20738 1.20718 1.20731 39.0 12
2021-02-26 22:57:00 1.20730 1.20731 1.20716 1.20717 45.0 18
2021-02-26 22:58:00 1.20716 1.20731 1.20694 1.20704 77.0 16
2021-02-26 22:59:00 1.20702 1.20705 1.20702 1.20704 16.0 37
History for lastest period gread for predict
# you can add unlimited actives to list ["EURUSD","GBPUSD","AUDUSD"]
symbol = "EURUSD"
timeframe = "M1"
fromDate = 27
history = api.history(symbol,timeframe)
print(history)
open high low close volume spread
date
2021-02-26 19:23:00 1.20846 1.20857 1.20837 1.20856 84.0 5
2021-02-26 19:24:00 1.20855 1.20858 1.20842 1.20847 71.0 5
2021-02-26 19:25:00 1.20846 1.20849 1.20832 1.20845 69.0 5
2021-02-26 19:26:00 1.20844 1.20845 1.20823 1.20833 64.0 5
2021-02-26 19:27:00 1.20833 1.20836 1.20821 1.20834 53.0 5
History for multiple symbols merged dataframe
# you can add unlimited actives to list ["EURUSD","GBPUSD","AUDUSD"] etc
symbol = ["EURUSD","GBPUSD"]
timeframe = "M1"
fromDate = "20/02/2021"
toDate = "24/02/2021"
history = api.history(symbol,timeframe,fromDate,toDate)
print(history)
open high low close volume spread gbpusd_open gbpusd_high gbpusd_low gbpusd_close gbpusd_volume gbpusd_spread
date
2021-02-21 23:00:00 1.21135 1.21138 1.21131 1.21134 7.0 35 1.40113 1.40113 1.40110 1.40110 2.0 130
2021-02-21 23:04:00 1.21150 1.21184 1.21134 1.21184 13.0 31 1.40119 1.40119 1.40119 1.40119 1.0 102
2021-02-21 23:05:00 1.21163 1.21207 1.21148 1.21181 39.0 42 1.40174 1.40174 1.40167 1.40168 11.0 61
2021-02-21 23:06:00 1.21189 1.21193 1.21182 1.21182 17.0 64 1.40156 1.40170 1.40132 1.40155 10.0 46
2021-02-21 23:07:00 1.21181 1.21182 1.21180 1.21182 4.0 82 1.40156 1.40156 1.40156 1.40156 1.0 63
... ... ... ... ... ... ... ... ... ... ... ... ...
2021-02-24 02:56:00 1.21629 1.21629 1.21590 1.21594 51.0 5 1.41833 1.41835 1.41786 1.41800 62.0 8
2021-02-24 02:57:00 1.21592 1.21592 1.21574 1.21574 34.0 5 1.41798 1.41801 1.41765 1.41766 54.0 8
2021-02-24 02:58:00 1.21574 1.21579 1.21572 1.21575 35.0 5 1.41767 1.41789 1.41767 1.41768 64.0 8
2021-02-24 02:59:00 1.21576 1.21588 1.21573 1.21582 55.0 5 1.41769 1.41782 1.41764 1.41769 42.0 9
2021-02-24 03:00:00 1.21583 1.21601 1.21578 1.21598 80.0 5 1.41770 1.41797 1.41746 1.41784 95.0 8
[3097 rows x 12 columns]
Live streaming Price
from ejtraderMT import Metatrader
api = Metatrader()
symbols = ["EURUSD","GBPUSD","AUDUSD"]
timeframe = "TICK"
# stream price
while True:
price = api.price(symbols,timeframe)
print(price)
Live streaming events
from ejtraderMT import Metatrader
api = Metatrader()
symbols = ["EURUSD","GBPUSD","AUDUSD"]
timeframe = "TICK"
# stream event
while True:
event = api.event(symbols,timeframe)
print(event)
Trading and Orders Manipulation
You can create market or pending order with the commands.
Market Orders
# symbol, volume, stoploss,
Related Skills
gh-issues
348.2kFetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]
node-connect
348.2kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
oracle
348.2kBest practices for using the oracle CLI (prompt + file bundling, engines, sessions, and file attachment patterns).
taskflow-inbox-triage
348.2kname: taskflow-inbox-triage description: Example TaskFlow authoring pattern for inbox triage. Use when messages need different treatment based on intent, with some routes notifying immediately, some w
