Use when you have a written implementation plan to execute in a separate session with review checkpoints
npx skills add dceoy/mt5-agent-skills --skill "mt5-trading"
Install specific skill from multi-skill repository
# Description
|
# SKILL.md
name: mt5-trading
description: |
Execute trades and manage positions on MetaTrader 5 using pdmt5 library. Use when you need to:
(1) Place market orders (buy/sell at current price)
(2) View and manage open positions
(3) Close positions (single or all)
(4) Update stop loss and take profit levels
(5) View pending orders and order history
(6) Access trade history and deals
Requires active MT5 connection (use mt5-connection skill first).
CAUTION: Trading involves financial risk. Use dry_run=True for testing.
MT5 Trading
Execute trades and manage positions using pdmt5.
Place Market Order
result = client.place_market_order(
symbol="EURUSD",
volume=0.01, # Lot size
order_side="BUY", # or "SELL"
sl=None, # Stop loss price (optional)
tp=None, # Take profit price (optional)
deviation=20, # Max slippage in points
comment="", # Order comment
magic=0, # Magic number for identification
dry_run=False # Set True to validate without executing
)
# Check result
if result.retcode == 10009: # TRADE_RETCODE_DONE
print(f"Order placed: deal={result.deal}, order={result.order}")
else:
print(f"Failed: {result.comment}")
View Positions
# All positions as DataFrame
positions_df = client.fetch_positions_with_metrics_as_df()
# Columns: ticket, time, symbol, type, volume, price_open, sl, tp,
# price_current, profit, swap, magic, comment
# Filter by symbol
positions_df = client.fetch_positions_with_metrics_as_df(symbols=["EURUSD"])
# As raw tuples
positions = client.positions_get()
positions = client.positions_get(symbol="EURUSD")
Close Positions
# Close all positions for specific symbols
results = client.close_open_positions(
symbols=["EURUSD", "GBPUSD"],
comment="Closing positions",
deviation=20
)
# Close all positions (no symbols filter)
results = client.close_open_positions()
# Close positions with specific magic number
results = client.close_open_positions(magic=12345)
Update Stop Loss / Take Profit
# Update SL/TP for all positions of a symbol
results = client.update_sltp_for_open_positions(
symbol="EURUSD",
sl=1.0800, # New stop loss
tp=1.1200 # New take profit
)
Pending Orders
# All pending orders as DataFrame
orders_df = client.orders_get_as_df()
# Filter by symbol
orders_df = client.orders_get_as_df(symbol="EURUSD")
Order History
from datetime import datetime, timedelta
# History for date range
orders_df = client.history_orders_get_as_df(
date_from=datetime.now() - timedelta(days=30),
date_to=datetime.now()
)
# Filter by symbol
orders_df = client.history_orders_get_as_df(symbol="EURUSD")
Deal History
# All deals in date range
deals_df = client.history_deals_get_as_df(
date_from=datetime.now() - timedelta(days=30),
date_to=datetime.now()
)
Order Return Codes
| Code | Constant | Meaning |
|---|---|---|
| 10009 | TRADE_RETCODE_DONE | Request completed |
| 10008 | TRADE_RETCODE_PLACED | Order placed |
| 10010 | TRADE_RETCODE_DONE_PARTIAL | Partial fill |
| 10006 | TRADE_RETCODE_REJECT | Request rejected |
| 10004 | TRADE_RETCODE_REQUOTE | Requote |
See references/return_codes.md for complete list.
Safety
- Always use
dry_run=Truefirst to validate orders - Verify account has sufficient margin before trading
- Use
scripts/place_order.pyfor command-line testing
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.