b5e82e71c7
* Add trading session helpers and extend ThrottledHistoryUpdater Introduce mt5cli.trading with mt5_trading_session() for Mt5TradingClient lifecycle management and reusable operational helpers for position-side detection, margin/volume sizing, and protective order price derivation. Extend ThrottledHistoryUpdater to validate inputs before updates and to optionally suppress ValueError, OSError, and missing-method errors without advancing the throttle timestamp. Export the new helpers from mt5cli.__init__, add unit tests with mocked clients, and document migration guidance for downstream projects such as mteor. Co-authored-by: Daichi Narushima <dceoy@users.noreply.github.com> * Narrow ThrottledHistoryUpdater suppress_errors handling (#27) * Narrow ThrottledHistoryUpdater suppress_errors for MT5 capability only Remove broad AttributeError/TypeError handling from recoverable errors. Add _is_mt5_client_capability_error() to detect missing history API methods or non-callable client attributes by message and attribute name. Generic AttributeError/TypeError values always propagate even when suppress_errors=True. Update docs and tests accordingly. Co-authored-by: Daichi Narushima <dceoy@users.noreply.github.com> * Detect non-callable history client methods in suppress_errors Address review feedback: when a history API attribute exists but is not callable, Python raises a generic TypeError. Inspect the traceback for mt5cli.history client call sites so these capability mismatches are still suppressed without matching all TypeError values. Co-authored-by: Daichi Narushima <dceoy@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Daichi Narushima <dceoy@users.noreply.github.com> * Address PR review feedback on trading helpers - Resolve history module path once at import time - Only treat non-callable TypeErrors as capability errors at the raise site - Validate SL/TP ratios in determine_order_limits - Add tests for margin_free edge cases, body-raise shutdown, and internal TypeError propagation - Clarify ThrottledHistoryUpdater suppress_errors docs - Split README migration example into trading vs read-only history sessions Co-authored-by: Daichi Narushima <dceoy@users.noreply.github.com> * Tighten protective ratio validation and clamp negative margin_free Add _require_protective_ratio enforcing 0 <= ratio < 1 for SL/TP limits so a ratio of 1.0 cannot produce zero protective prices. Clamp negative margin_free to 0.0 in calculate_margin_and_volume before sizing. Add boundary and negative-margin tests; document constraints in trading API docs. Co-authored-by: Daichi Narushima <dceoy@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Daichi Narushima <dceoy@users.noreply.github.com>
154 lines
3.6 KiB
Python
154 lines
3.6 KiB
Python
"""mt5cli: Command-line tool and SDK for MetaTrader 5."""
|
|
|
|
from importlib.metadata import version
|
|
|
|
from .history import (
|
|
RateTarget,
|
|
build_rate_targets,
|
|
build_rate_view_name,
|
|
drop_forming_rate_bar,
|
|
load_rate_data,
|
|
load_rate_data_from_connection,
|
|
load_rate_series_by_granularity,
|
|
load_rate_series_from_sqlite,
|
|
resolve_history_datasets,
|
|
resolve_history_tick_flags,
|
|
resolve_history_timeframes,
|
|
resolve_rate_tables,
|
|
resolve_rate_view_name,
|
|
resolve_rate_view_names,
|
|
)
|
|
from .sdk import (
|
|
AccountSpec,
|
|
Mt5CliClient,
|
|
ThrottledHistoryUpdater,
|
|
account_info,
|
|
build_config,
|
|
collect_history,
|
|
collect_latest_closed_rates_by_granularity,
|
|
collect_latest_closed_rates_for_accounts,
|
|
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,
|
|
)
|
|
from .sdk import (
|
|
version as mt5_version,
|
|
)
|
|
from .trading import (
|
|
calculate_margin_and_volume,
|
|
detect_position_side,
|
|
determine_order_limits,
|
|
mt5_trading_session,
|
|
)
|
|
from .utils import (
|
|
TICK_FLAG_MAP,
|
|
TIMEFRAME_MAP,
|
|
Dataset,
|
|
IfExists,
|
|
detect_format,
|
|
export_dataframe,
|
|
export_dataframe_to_sqlite,
|
|
parse_datetime,
|
|
parse_tick_flags,
|
|
parse_timeframe,
|
|
)
|
|
|
|
__version__ = version(__package__) if __package__ else None
|
|
|
|
__all__ = [
|
|
"TICK_FLAG_MAP",
|
|
"TIMEFRAME_MAP",
|
|
"AccountSpec",
|
|
"Dataset",
|
|
"IfExists",
|
|
"Mt5CliClient",
|
|
"RateTarget",
|
|
"ThrottledHistoryUpdater",
|
|
"account_info",
|
|
"build_config",
|
|
"build_rate_targets",
|
|
"build_rate_view_name",
|
|
"calculate_margin_and_volume",
|
|
"collect_history",
|
|
"collect_latest_closed_rates_by_granularity",
|
|
"collect_latest_closed_rates_for_accounts",
|
|
"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",
|
|
"detect_format",
|
|
"detect_position_side",
|
|
"determine_order_limits",
|
|
"drop_forming_rate_bar",
|
|
"export_dataframe",
|
|
"export_dataframe_to_sqlite",
|
|
"history_deals",
|
|
"history_orders",
|
|
"last_error",
|
|
"latest_rates",
|
|
"load_rate_data",
|
|
"load_rate_data_from_connection",
|
|
"load_rate_series_by_granularity",
|
|
"load_rate_series_from_sqlite",
|
|
"market_book",
|
|
"minimum_margins",
|
|
"mt5_session",
|
|
"mt5_summary",
|
|
"mt5_summary_as_df",
|
|
"mt5_trading_session",
|
|
"mt5_version",
|
|
"orders",
|
|
"parse_datetime",
|
|
"parse_tick_flags",
|
|
"parse_timeframe",
|
|
"positions",
|
|
"recent_history_deals",
|
|
"recent_ticks",
|
|
"resolve_account_spec",
|
|
"resolve_account_specs",
|
|
"resolve_history_datasets",
|
|
"resolve_history_tick_flags",
|
|
"resolve_history_timeframes",
|
|
"resolve_rate_tables",
|
|
"resolve_rate_view_name",
|
|
"resolve_rate_view_names",
|
|
"substitute_env_placeholders",
|
|
"symbol_info",
|
|
"symbol_info_tick",
|
|
"symbols",
|
|
"terminal_info",
|
|
"update_history",
|
|
"update_history_with_config",
|
|
]
|