SDK Module¶
mt5cli.sdk ¶
Programmatic SDK for MetaTrader 5 data collection.
__all__
module-attribute
¶
__all__ = [
"AccountSpec",
"Mt5CliClient",
"ThrottledHistoryUpdater",
"account_info",
"build_config",
"collect_history",
"collect_latest_rates",
"collect_latest_rates_for_accounts",
"collect_latest_rates_for_accounts_with_retries",
"copy_rates_from",
"copy_rates_from_pos",
"copy_rates_range",
"copy_ticks_from",
"copy_ticks_range",
"history_deals",
"history_orders",
"last_error",
"latest_rates",
"market_book",
"minimum_margins",
"mt5_session",
"mt5_summary",
"mt5_summary_as_df",
"orders",
"positions",
"recent_history_deals",
"recent_ticks",
"resolve_account_spec",
"resolve_account_specs",
"substitute_env_placeholders",
"symbol_info",
"symbol_info_tick",
"symbols",
"terminal_info",
"update_history",
"update_history_with_config",
"version",
]
AccountSpec
dataclass
¶
AccountSpec(
symbols: Sequence[str],
login: int | str | None = None,
password: str | None = None,
server: str | None = None,
path: str | None = None,
timeout: int | None = None,
)
Connection parameters and symbols for one MT5 account group.
Attributes:
| Name | Type | Description |
|---|---|---|
symbols |
Sequence[str]
|
Symbols to load latest rates for under this account. |
login |
int | str | None
|
Trading account login. String values are coerced to int when non-empty. |
password |
str | None
|
Trading account password. |
server |
str | None
|
Trading server name. |
path |
str | None
|
Path to the MetaTrader5 terminal EXE file. |
timeout |
int | None
|
Connection timeout in milliseconds. |
Mt5CliClient ¶
Mt5CliClient(
*,
path: str | None = None,
login: int | None = None,
password: str | None = None,
server: str | None = None,
timeout: int | None = None,
config: Mt5Config | None = None,
client: Mt5DataClient | None = None,
)
Programmatic client for read-only MetaTrader 5 data access.
Initialize the SDK client.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
path
|
str | None
|
Path to MetaTrader5 terminal EXE file. |
None
|
login
|
int | None
|
Trading account login. |
None
|
password
|
str | None
|
Trading account password. |
None
|
server
|
str | None
|
Trading server name. |
None
|
timeout
|
int | None
|
Connection timeout in milliseconds. |
None
|
config
|
Mt5Config | None
|
Optional pre-built |
None
|
client
|
Mt5DataClient | None
|
Optional already-connected |
None
|
Source code in mt5cli/sdk.py
__enter__ ¶
Open a persistent MT5 connection for multiple calls.
Returns:
| Type | Description |
|---|---|
Self
|
This client instance. |
Source code in mt5cli/sdk.py
__exit__ ¶
Shut down the persistent MT5 connection.
Source code in mt5cli/sdk.py
account_info ¶
collect_latest_rates ¶
collect_latest_rates(
symbols: Sequence[str],
timeframes: Sequence[int | str],
*,
count: int,
start_pos: int = 0,
) -> dict[tuple[str, int], DataFrame]
Return latest rates for each symbol/timeframe pair.
Returns:
| Type | Description |
|---|---|
dict[tuple[str, int], DataFrame]
|
Mapping keyed by |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
Source code in mt5cli/sdk.py
copy_rates_from ¶
copy_rates_from(
symbol: str,
timeframe: int | str,
date_from: datetime | str,
count: int,
) -> DataFrame
Return rates starting from a date.
Source code in mt5cli/sdk.py
copy_rates_from_pos ¶
Return rates starting from a bar position.
Source code in mt5cli/sdk.py
copy_rates_range ¶
copy_rates_range(
symbol: str,
timeframe: int | str,
date_from: datetime | str,
date_to: datetime | str,
) -> DataFrame
Return rates for a date range.
Source code in mt5cli/sdk.py
copy_ticks_from ¶
copy_ticks_from(
symbol: str,
date_from: datetime | str,
count: int,
flags: int | str,
) -> DataFrame
Return ticks starting from a date.
Source code in mt5cli/sdk.py
copy_ticks_range ¶
copy_ticks_range(
symbol: str,
date_from: datetime | str,
date_to: datetime | str,
flags: int | str,
) -> DataFrame
Return ticks for a date range.
Source code in mt5cli/sdk.py
from_connected_client
classmethod
¶
Bind to an already-connected Mt5DataClient without owning it.
The returned Mt5CliClient never initializes or shuts down the
injected client, including when used as a context manager.
Returns:
| Type | Description |
|---|---|
Self
|
Client wrapper bound to the injected connection. |
Source code in mt5cli/sdk.py
history_deals ¶
history_deals(
date_from: datetime | str | None = None,
date_to: datetime | str | None = None,
group: str | None = None,
symbol: str | None = None,
ticket: int | None = None,
position: int | None = None,
) -> DataFrame
Return historical deals.
Source code in mt5cli/sdk.py
history_orders ¶
history_orders(
date_from: datetime | str | None = None,
date_to: datetime | str | None = None,
group: str | None = None,
symbol: str | None = None,
ticket: int | None = None,
position: int | None = None,
) -> DataFrame
Return historical orders.
Source code in mt5cli/sdk.py
last_error ¶
latest_rates ¶
Return the latest rates from a bar position.
Source code in mt5cli/sdk.py
market_book ¶
minimum_margins ¶
Return minimum-volume buy and sell margin requirements.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
symbol
|
str
|
Symbol name. |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
One-row DataFrame with columns |
DataFrame
|
|
Source code in mt5cli/sdk.py
mt5_summary ¶
Return a compact terminal/account status summary.
Source code in mt5cli/sdk.py
mt5_summary_as_df ¶
Return an export-safe one-row terminal/account summary DataFrame.
Source code in mt5cli/sdk.py
orders ¶
orders(
symbol: str | None = None,
group: str | None = None,
ticket: int | None = None,
) -> DataFrame
Return active orders.
Source code in mt5cli/sdk.py
positions ¶
positions(
symbol: str | None = None,
group: str | None = None,
ticket: int | None = None,
) -> DataFrame
Return open positions.
Source code in mt5cli/sdk.py
recent_history_deals ¶
recent_history_deals(
hours: float,
date_to: datetime | str | None = None,
group: str | None = None,
symbol: str | None = None,
) -> DataFrame
Return historical deals from a recent trailing window.
Source code in mt5cli/sdk.py
recent_ticks ¶
recent_ticks(
symbol: str,
seconds: float,
*,
date_to: datetime | str | None = None,
count: int = 10000,
flags: int | str = "ALL",
) -> DataFrame
Return ticks from a recent time window.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
symbol
|
str
|
Symbol name. |
required |
seconds
|
float
|
Lookback window in seconds ending at |
required |
date_to
|
datetime | str | None
|
Window end time. When |
None
|
count
|
int
|
Maximum ticks to return. Values |
10000
|
flags
|
int | str
|
Tick flags as |
'ALL'
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
Tick DataFrame with MT5 tick columns such as |
DataFrame
|
|
Source code in mt5cli/sdk.py
symbol_info ¶
symbol_info_tick ¶
symbols ¶
terminal_info ¶
ThrottledHistoryUpdater ¶
ThrottledHistoryUpdater(
*,
output: Path | str,
datasets: set[Dataset] | None = None,
timeframes: Sequence[int | str] | None = None,
flags: int | str = "ALL",
lookback_hours: float = 24.0,
with_views: bool = False,
include_account_events: bool = True,
interval_seconds: float = 0.0,
suppress_errors: bool = False,
)
Throttled incremental SQLite history updater for long-running apps.
Wraps :func:update_history with a minimum interval between successful
updates, so a tight application loop can call :meth:update every
iteration without re-fetching MT5 history more often than desired. Timing
uses a monotonic clock, so it is unaffected by wall-clock changes.
Initialize the throttled updater.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
output
|
Path | str
|
SQLite database path. |
required |
datasets
|
set[Dataset] | None
|
Datasets to include (defaults to all). |
None
|
timeframes
|
Sequence[int | str] | None
|
Rate timeframes to update (defaults to all fixed MT5 timeframes). |
None
|
flags
|
int | str
|
Tick copy flags as integer or name (e.g. |
'ALL'
|
lookback_hours
|
float
|
First-run lookback when a table has no prior rows. |
24.0
|
with_views
|
bool
|
Create |
False
|
include_account_events
|
bool
|
Include account-level cash events. |
True
|
interval_seconds
|
float
|
Minimum seconds between successful updates. Values
|
0.0
|
suppress_errors
|
bool
|
When True, |
False
|
Source code in mt5cli/sdk.py
last_update_monotonic
property
¶
Return the monotonic timestamp of the last successful update.
should_update ¶
Return whether enough time has elapsed to run another update.
Returns:
| Type | Description |
|---|---|
bool
|
True when |
bool
|
yet, or when at least |
bool
|
last successful update. |
Source code in mt5cli/sdk.py
update ¶
Run a throttled incremental history update.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
client
|
Mt5DataClient
|
Connected MT5 data client. |
required |
symbols
|
Sequence[str]
|
Symbols to update. |
required |
Returns:
| Type | Description |
|---|---|
bool
|
True if an update ran successfully, False if it was throttled or |
bool
|
(when |
Raises:
| Type | Description |
|---|---|
Mt5TradingError
|
If the update fails and |
Mt5RuntimeError
|
If the update fails and |
Error
|
If the SQLite write fails and |
Source code in mt5cli/sdk.py
account_info ¶
build_config ¶
build_config(
*,
path: str | None = None,
login: int | None = None,
password: str | None = None,
server: str | None = None,
timeout: int | None = None,
) -> Mt5Config
Build an Mt5Config from optional connection parameters.
Returns:
| Type | Description |
|---|---|
Mt5Config
|
Configured |
Source code in mt5cli/sdk.py
collect_history ¶
collect_history(
output: Path,
symbols: list[str],
date_from: datetime | str,
date_to: datetime | str,
*,
datasets: set[Dataset] | None = None,
timeframe: int | str = 1,
flags: int | str = 1,
if_exists: IfExists = FAIL,
with_views: bool = False,
config: Mt5Config | None = None,
) -> None
Collect historical datasets into a single SQLite database.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
output
|
Path
|
SQLite database path. |
required |
symbols
|
list[str]
|
Symbols to collect. |
required |
date_from
|
datetime | str
|
Start date. |
required |
date_to
|
datetime | str
|
End date. |
required |
datasets
|
set[Dataset] | None
|
Datasets to include (defaults to all). |
None
|
timeframe
|
int | str
|
Rates timeframe as integer or name (e.g. |
1
|
flags
|
int | str
|
Tick copy flags as integer or name (e.g. |
1
|
if_exists
|
IfExists
|
Behavior when a target table already exists. |
FAIL
|
with_views
|
bool
|
Create |
False
|
config
|
Mt5Config | None
|
MT5 connection configuration. |
None
|
Source code in mt5cli/sdk.py
1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 | |
collect_latest_rates ¶
collect_latest_rates(
symbols: Sequence[str],
timeframes: Sequence[int | str],
*,
count: int,
start_pos: int = 0,
config: Mt5Config | None = None,
) -> dict[tuple[str, int], DataFrame]
Return latest rates for each symbol/timeframe pair.
Source code in mt5cli/sdk.py
collect_latest_rates_for_accounts ¶
collect_latest_rates_for_accounts(
accounts: Sequence[AccountSpec],
timeframes: Sequence[int | str],
count: int,
*,
start_pos: int = 0,
base_config: Mt5Config | None = None,
) -> dict[tuple[str, int], DataFrame]
Collect latest rates across multiple MT5 account groups.
Each account is connected in turn, its symbols are read for every timeframe, and the resulting frames are merged into a single mapping.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
accounts
|
Sequence[AccountSpec]
|
Account groups to read. Each must define at least one symbol. |
required |
timeframes
|
Sequence[int | str]
|
MT5 timeframes as integers or names (for example |
required |
count
|
int
|
Number of most recent bars to read per symbol/timeframe. |
required |
start_pos
|
int
|
Initial bar position offset. |
0
|
base_config
|
Mt5Config | None
|
Optional base configuration whose fields fill any value not set on an individual account. |
None
|
Returns:
| Type | Description |
|---|---|
dict[tuple[str, int], DataFrame]
|
Mapping keyed by |
dict[tuple[str, int], DataFrame]
|
symbol/timeframe pair, the last account processed wins. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
Source code in mt5cli/sdk.py
collect_latest_rates_for_accounts_with_retries ¶
collect_latest_rates_for_accounts_with_retries(
accounts: Sequence[AccountSpec],
timeframes: Sequence[int | str],
count: int,
*,
start_pos: int = 0,
base_config: Mt5Config | None = None,
retry_count: int = 0,
backoff_base: float = 2.0,
) -> dict[tuple[str, int], DataFrame]
Collect latest rates across accounts, retrying transient MT5 failures.
Wraps :func:collect_latest_rates_for_accounts with bounded exponential
backoff. Only pdmt5.Mt5TradingError and pdmt5.Mt5RuntimeError are
retried; other exceptions propagate immediately. The final failure is
re-raised once retries are exhausted.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
accounts
|
Sequence[AccountSpec]
|
Account groups to read. Each must define at least one symbol. |
required |
timeframes
|
Sequence[int | str]
|
MT5 timeframes as integers or names (for example |
required |
count
|
int
|
Number of most recent bars to read per symbol/timeframe. |
required |
start_pos
|
int
|
Initial bar position offset. |
0
|
base_config
|
Mt5Config | None
|
Optional base configuration whose fields fill any value not set on an individual account. |
None
|
retry_count
|
int
|
Maximum number of retries after the first attempt. |
0
|
backoff_base
|
float
|
Base for exponential backoff. The delay before retry
attempt |
2.0
|
Returns:
| Type | Description |
|---|---|
dict[tuple[str, int], DataFrame]
|
Mapping keyed by |
dict[tuple[str, int], DataFrame]
|
for invalid inputs (see :func: |
dict[tuple[str, int], DataFrame]
|
re-raises the last |
dict[tuple[str, int], DataFrame]
|
once retries are exhausted. |
Source code in mt5cli/sdk.py
copy_rates_from ¶
copy_rates_from(
symbol: str,
timeframe: int | str,
date_from: datetime | str,
count: int,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return rates starting from a date.
Source code in mt5cli/sdk.py
copy_rates_from_pos ¶
copy_rates_from_pos(
symbol: str,
timeframe: int | str,
start_pos: int,
count: int,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return rates starting from a bar position.
Source code in mt5cli/sdk.py
copy_rates_range ¶
copy_rates_range(
symbol: str,
timeframe: int | str,
date_from: datetime | str,
date_to: datetime | str,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return rates for a date range.
Source code in mt5cli/sdk.py
copy_ticks_from ¶
copy_ticks_from(
symbol: str,
date_from: datetime | str,
count: int,
flags: int | str,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return ticks starting from a date.
Source code in mt5cli/sdk.py
copy_ticks_range ¶
copy_ticks_range(
symbol: str,
date_from: datetime | str,
date_to: datetime | str,
flags: int | str,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return ticks for a date range.
Source code in mt5cli/sdk.py
history_deals ¶
history_deals(
date_from: datetime | str | None = None,
date_to: datetime | str | None = None,
group: str | None = None,
symbol: str | None = None,
ticket: int | None = None,
position: int | None = None,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return historical deals.
Source code in mt5cli/sdk.py
history_orders ¶
history_orders(
date_from: datetime | str | None = None,
date_to: datetime | str | None = None,
group: str | None = None,
symbol: str | None = None,
ticket: int | None = None,
position: int | None = None,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return historical orders.
Source code in mt5cli/sdk.py
last_error ¶
latest_rates ¶
latest_rates(
symbol: str,
timeframe: int | str,
count: int,
start_pos: int = 0,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return the latest rates from a bar position.
Source code in mt5cli/sdk.py
market_book ¶
minimum_margins ¶
Return minimum-volume buy and sell margin requirements.
See Mt5CliClient.minimum_margins for return details.
Source code in mt5cli/sdk.py
mt5_session ¶
mt5_session(
config: Mt5Config | None = None,
) -> Iterator[Mt5CliClient]
Open an MT5 terminal session and yield a connected client.
Launches the MetaTrader 5 terminal using Mt5Config.path (when set),
logs in, yields a connected :class:Mt5CliClient, and always shuts the
terminal down on exit.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
config
|
Mt5Config | None
|
MT5 connection configuration. Defaults to an empty config that attaches to a running terminal. |
None
|
Yields:
| Type | Description |
|---|---|
Mt5CliClient
|
Connected |
Source code in mt5cli/sdk.py
mt5_summary ¶
mt5_summary_as_df ¶
Return an export-safe terminal/account status summary DataFrame.
orders ¶
orders(
symbol: str | None = None,
group: str | None = None,
ticket: int | None = None,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return active orders.
Source code in mt5cli/sdk.py
positions ¶
positions(
symbol: str | None = None,
group: str | None = None,
ticket: int | None = None,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return open positions.
Source code in mt5cli/sdk.py
recent_history_deals ¶
recent_history_deals(
hours: float,
date_to: datetime | str | None = None,
group: str | None = None,
symbol: str | None = None,
*,
config: Mt5Config | None = None,
) -> DataFrame
Return historical deals from a recent trailing window.
Source code in mt5cli/sdk.py
recent_ticks ¶
recent_ticks(
symbol: str,
seconds: float,
*,
date_to: datetime | str | None = None,
count: int = 10000,
flags: int | str = "ALL",
config: Mt5Config | None = None,
) -> DataFrame
Return ticks from a recent time window ending at date_to or now.
See Mt5CliClient.recent_ticks for parameter and return details.
Source code in mt5cli/sdk.py
resolve_account_spec ¶
resolve_account_spec(
account: AccountSpec,
*,
login: int | str | None = None,
password: str | None = None,
server: str | None = None,
path: str | None = None,
timeout: int | None = None,
) -> AccountSpec
Resolve an account's credentials from overrides and ${ENV_VAR} values.
Explicit override arguments take precedence over the corresponding
:class:AccountSpec fields. The resolved string fields (login,
password, server, path) have any ${ENV_VAR} placeholders
substituted from the environment.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
account
|
AccountSpec
|
Source account specification. |
required |
login
|
int | str | None
|
Optional explicit login override. |
None
|
password
|
str | None
|
Optional explicit password override. |
None
|
server
|
str | None
|
Optional explicit server override. |
None
|
path
|
str | None
|
Optional explicit terminal path override. |
None
|
timeout
|
int | None
|
Optional explicit connection timeout override. |
None
|
Returns:
| Type | Description |
|---|---|
AccountSpec
|
A new :class: |
AccountSpec
|
symbols preserved. Raises |
AccountSpec
|
func: |
AccountSpec
|
variable is not set. |
Source code in mt5cli/sdk.py
resolve_account_specs ¶
resolve_account_specs(
accounts: Sequence[AccountSpec],
*,
login: int | str | None = None,
password: str | None = None,
server: str | None = None,
path: str | None = None,
timeout: int | None = None,
) -> list[AccountSpec]
Resolve credentials for multiple accounts.
Applies the same overrides and ${ENV_VAR} substitution as
:func:resolve_account_spec to every account.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
accounts
|
Sequence[AccountSpec]
|
Source account specifications. |
required |
login
|
int | str | None
|
Optional explicit login override applied to each account. |
None
|
password
|
str | None
|
Optional explicit password override applied to each account. |
None
|
server
|
str | None
|
Optional explicit server override applied to each account. |
None
|
path
|
str | None
|
Optional explicit terminal path override applied to each account. |
None
|
timeout
|
int | None
|
Optional explicit timeout override applied to each account. |
None
|
Returns:
| Type | Description |
|---|---|
list[AccountSpec]
|
Resolved account specifications in the original order. Raises |
list[AccountSpec]
|
|
list[AccountSpec]
|
environment variable is not set. |
Source code in mt5cli/sdk.py
substitute_env_placeholders ¶
Replace ${ENV_VAR} placeholders in a string with environment values.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
str
|
String that may contain one or more |
required |
Returns:
| Type | Description |
|---|---|
str
|
The string with every placeholder replaced by its environment value. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If a referenced environment variable is not set. |
Source code in mt5cli/sdk.py
symbol_info ¶
symbol_info_tick ¶
symbols ¶
terminal_info ¶
update_history ¶
update_history(
*,
client: Mt5DataClient,
output: Path | str,
symbols: Sequence[str],
datasets: set[Dataset] | None = None,
timeframes: Sequence[int | str] | None = None,
flags: int | str = "ALL",
lookback_hours: float = 24.0,
date_to: datetime | str | None = None,
deduplicate: bool = True,
create_rate_views: bool = True,
with_views: bool = False,
include_account_events: bool = True,
) -> None
Incrementally append MT5 history into a SQLite database.
Uses an already-connected Mt5DataClient and does not create or close
the MT5 connection. For first-time tables, data is fetched from
date_to - lookback_hours. Subsequent runs resume from existing
MAX(time) per symbol (and timeframe for rates); when
include_account_events=True, account-level deals use a separate cursor
over type NOT IN (0, 1) / empty-symbol rows.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
client
|
Mt5DataClient
|
Connected MT5 data client. |
required |
output
|
Path | str
|
SQLite database path. |
required |
symbols
|
Sequence[str]
|
Symbols to update. |
required |
datasets
|
set[Dataset] | None
|
Datasets to include (defaults to all). |
None
|
timeframes
|
Sequence[int | str] | None
|
Rate timeframes to update (defaults to all fixed MT5 timeframes when None). |
None
|
flags
|
int | str
|
Tick copy flags as integer or name (e.g. |
'ALL'
|
lookback_hours
|
float
|
First-run lookback when a table has no prior rows. |
24.0
|
date_to
|
datetime | str | None
|
Optional update end datetime. Defaults to now (UTC). |
None
|
deduplicate
|
bool
|
Remove duplicate rows after append, keeping latest ROWID. |
True
|
create_rate_views
|
bool
|
Create |
True
|
with_views
|
bool
|
Create |
False
|
include_account_events
|
bool
|
Include account-level cash events in
|
True
|
Source code in mt5cli/sdk.py
update_history_with_config ¶
update_history_with_config(
*,
output: Path | str,
symbols: Sequence[str],
config: Mt5Config | None = None,
datasets: set[Dataset] | None = None,
timeframes: Sequence[int | str] | None = None,
flags: int | str = "ALL",
lookback_hours: float = 24.0,
date_to: datetime | str | None = None,
deduplicate: bool = True,
create_rate_views: bool = True,
with_views: bool = False,
include_account_events: bool = True,
) -> None
Incrementally append MT5 history, opening and closing the MT5 connection.
Convenience wrapper around :func:update_history for standalone use.
Source code in mt5cli/sdk.py
version ¶
Resilient multi-account orchestration¶
The SDK ships strategy-agnostic helpers for building long-running collectors on top of the read-only client. None of them depend on a particular trading application.
Retrying transient rate collection¶
collect_latest_rates_for_accounts_with_retries() wraps
collect_latest_rates_for_accounts() with bounded exponential backoff. Only
pdmt5.Mt5TradingError and pdmt5.Mt5RuntimeError are retried; the final
failure is re-raised once retry_count is exhausted.
from mt5cli import AccountSpec, collect_latest_rates_for_accounts_with_retries
accounts = [AccountSpec(symbols=["EURUSD"], login=12345)]
rates = collect_latest_rates_for_accounts_with_retries(
accounts,
["M1", "H1"],
count=500,
retry_count=3,
backoff_base=2, # sleeps 2s, 4s, 8s between attempts
)
Resolving credentials and ${ENV_VAR} placeholders¶
resolve_account_spec() / resolve_account_specs() merge explicit override
values over AccountSpec fields and expand ${ENV_VAR} placeholders, keeping
secrets out of plan/config files. A missing environment variable raises
ValueError.
import os
from mt5cli import AccountSpec, resolve_account_specs
os.environ["MT5_LOGIN"] = "12345"
os.environ["MT5_PASSWORD"] = "secret"
accounts = [
AccountSpec(symbols=["EURUSD"], login="${MT5_LOGIN}", password="${MT5_PASSWORD}")
]
resolved = resolve_account_specs(accounts, server="Broker-Demo")
# resolved[0].login == "12345", resolved[0].server == "Broker-Demo"
Throttled incremental history updates¶
ThrottledHistoryUpdater wraps update_history() with a minimum interval
between successful runs (using a monotonic clock), so an application loop can
call it every iteration without over-fetching.
from pdmt5 import Mt5Config, Mt5DataClient
from mt5cli import Dataset, ThrottledHistoryUpdater
updater = ThrottledHistoryUpdater(
output="history.db",
datasets={Dataset.rates},
timeframes=["M1"],
interval_seconds=60, # <= 0 updates on every call
)
client = Mt5DataClient(config=Mt5Config(login=12345))
client.initialize_and_login_mt5()
try:
while True:
updater.update(client, ["EURUSD", "GBPUSD"]) # no-op until 60s elapse
# ... do other work; break when shutting down ...
finally:
client.shutdown()
By default Mt5TradingError, Mt5RuntimeError, and sqlite3.Error propagate so
the caller controls logging; pass suppress_errors=True to swallow them and
return False without advancing the throttle.