d654b82f9d
Co-authored-by: Cursor <cursoragent@cursor.com>
71 lines
2.3 KiB
Markdown
71 lines
2.3 KiB
Markdown
# Trading Module
|
|
|
|
::: mt5cli.trading
|
|
|
|
## Trading-capable MT5 sessions
|
|
|
|
`mt5_trading_session()` complements the read-only `mt5_session()` helper in
|
|
`sdk.py`. It yields a connected `pdmt5.Mt5TradingClient`, uses
|
|
`Mt5Config.path` to launch the terminal when configured, and always calls
|
|
`shutdown()` on exit.
|
|
|
|
```python
|
|
from pdmt5 import Mt5Config
|
|
|
|
from mt5cli import mt5_trading_session
|
|
|
|
with mt5_trading_session(
|
|
Mt5Config(path=r"C:\Program Files\MetaTrader 5\terminal64.exe", login=12345),
|
|
retry_count=2,
|
|
) as client:
|
|
positions = client.positions_get_as_df(symbol="EURUSD")
|
|
```
|
|
|
|
The read-only `Mt5CliClient` / `mt5_session()` API is unchanged.
|
|
|
|
## Operational trading helpers
|
|
|
|
These helpers are strategy-agnostic and do not depend on signal detection,
|
|
betting logic, or scheduling code in downstream applications.
|
|
|
|
```python
|
|
from mt5cli import (
|
|
calculate_margin_and_volume,
|
|
detect_position_side,
|
|
determine_order_limits,
|
|
)
|
|
|
|
side = detect_position_side(client, "EURUSD")
|
|
sizing = calculate_margin_and_volume(
|
|
client,
|
|
"EURUSD",
|
|
unit_margin_ratio=0.5,
|
|
preserved_margin_ratio=0.2,
|
|
)
|
|
limits = determine_order_limits(
|
|
client,
|
|
"EURUSD",
|
|
side="long",
|
|
stop_loss_limit_ratio=0.01,
|
|
take_profit_limit_ratio=0.02,
|
|
)
|
|
```
|
|
|
|
Protective ratios must satisfy `0 <= ratio < 1`; `0` omits that level.
|
|
`calculate_margin_and_volume()` clamps negative `margin_free` to `0.0`
|
|
before sizing.
|
|
|
|
## Migration from mteor-local helpers
|
|
|
|
| mteor-local concern | mt5cli replacement |
|
|
| -------------------------------------------------------- | ----------------------------------------------- |
|
|
| Manual terminal spawn/kill around trading code | `mt5_trading_session()` |
|
|
| Local position-side detection | `detect_position_side()` |
|
|
| Local margin/volume sizing | `calculate_margin_and_volume()` |
|
|
| Local SL/TP price derivation | `determine_order_limits()` |
|
|
| Throttled SQLite history loop with ad-hoc error handling | `ThrottledHistoryUpdater(suppress_errors=True)` |
|
|
|
|
Keep read-only data collection on `mt5_session()` / `Mt5CliClient`; use
|
|
`mt5_trading_session()` only where order placement or trading calculations are
|
|
required.
|