2026-06-11 10:33:27 +00:00
<!DOCTYPE html>
< html lang = "en" data-bs-theme = "light" >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< meta name = "author" content = "dceoy" >
< link rel = "canonical" href = "https://github.com/dceoy/mt5cli/api/trading/" >
< link rel = "shortcut icon" href = "../../img/favicon.ico" >
< title > Trading - mt5cli API Documentation</ title >
< link href = "../../css/bootstrap.min.css" rel = "stylesheet" >
< link href = "../../css/fontawesome.min.css" rel = "stylesheet" >
< link href = "../../css/brands.min.css" rel = "stylesheet" >
< link href = "../../css/solid.min.css" rel = "stylesheet" >
< link href = "../../css/v4-font-face.min.css" rel = "stylesheet" >
< link href = "../../css/base.css" rel = "stylesheet" >
< link id = "hljs-light" rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" >
< link id = "hljs-dark" rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github-dark.min.css" disabled >
< link href = "../../assets/_mkdocstrings.css" rel = "stylesheet" >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js" ></ script >
< script > hljs . highlightAll ();</ script >
</ head >
< body >
< div class = "navbar fixed-top navbar-expand-lg navbar-dark bg-primary" >
< div class = "container" >
< a class = "navbar-brand" href = "../.." > mt5cli API Documentation</ a >
<!-- Expander button -->
< button type = "button" class = "navbar-toggler" data-bs-toggle = "collapse" data-bs-target = "#navbar-collapse" aria-controls = "navbar-collapse" aria-expanded = "false" aria-label = "Toggle navigation" >
< span class = "navbar-toggler-icon" ></ span >
</ button >
<!-- Expanded navigation -->
< div id = "navbar-collapse" class = "navbar-collapse collapse" >
<!-- Main navigation -->
< ul class = "nav navbar-nav" >
< li class = "nav-item" >
< a href = "../.." class = "nav-link" > Home</ a >
</ li >
< li class = "nav-item dropdown" >
< a href = "#" class = "nav-link dropdown-toggle active" aria-current = "page" role = "button" data-bs-toggle = "dropdown" aria-expanded = "false" > API Reference</ a >
< ul class = "dropdown-menu" >
< li >
< a href = "../" class = "dropdown-item" > Overview</ a >
</ li >
2026-06-18 10:12:55 +00:00
< li >
< a href = "../public-contract/" class = "dropdown-item" > Public API Contract</ a >
</ li >
2026-06-12 16:32:35 +00:00
< li >
< a href = "../client/" class = "dropdown-item" > Client</ a >
</ li >
< li >
< a href = "../schemas/" class = "dropdown-item" > Schemas</ a >
</ li >
< li >
< a href = "../converters/" class = "dropdown-item" > Converters</ a >
</ li >
< li >
< a href = "../exceptions/" class = "dropdown-item" > Exceptions</ a >
</ li >
2026-06-11 10:33:27 +00:00
< li >
< a href = "../cli/" class = "dropdown-item" > CLI</ a >
</ li >
< li >
< a href = "../sdk/" class = "dropdown-item" > SDK</ a >
</ li >
< li >
< a href = "./" class = "dropdown-item active" aria-current = "page" > Trading</ a >
</ li >
< li >
< a href = "../history/" class = "dropdown-item" > History Collection (SQLite)</ a >
</ li >
2026-07-03 16:04:05 +00:00
< li >
< a href = "../telemetry/" class = "dropdown-item" > Telemetry</ a >
</ li >
< li >
< a href = "../grafana/" class = "dropdown-item" > Grafana</ a >
</ li >
2026-06-11 10:33:27 +00:00
< li >
< a href = "../utils/" class = "dropdown-item" > Utils</ a >
</ li >
</ ul >
</ li >
</ ul >
< ul class = "nav navbar-nav ms-md-auto" >
< li class = "nav-item" >
< a href = "#" class = "nav-link" data-bs-toggle = "modal" data-bs-target = "#mkdocs_search_modal" >
< i class = "fa fa-search" ></ i > Search
</ a >
</ li >
< li class = "nav-item" >
< a rel = "prev" href = "../sdk/" class = "nav-link" >
< i class = "fa fa-arrow-left" ></ i > Previous
</ a >
</ li >
< li class = "nav-item" >
< a rel = "next" href = "../history/" class = "nav-link" >
Next < i class = "fa fa-arrow-right" ></ i >
</ a >
</ li >
< li class = "nav-item" >
< a href = "https://github.com/dceoy/mt5cli/edit/master/docs/api/trading.md" class = "nav-link" > Edit on dceoy/mt5cli
</ a >
</ li >
</ ul >
</ div >
</ div >
</ div >
< div class = "container" >
< div class = "row" >
< div class = "col-md-3" >< div class = "navbar-expand-md bs-sidebar hidden-print affix" role = "complementary" >
< div class = "navbar-header" >
< button type = "button" class = "navbar-toggler collapsed" data-bs-toggle = "collapse" data-bs-target = "#toc-collapse" title = "Table of Contents" >
< span class = "fa fa-angle-down" ></ span >
</ button >
</ div >
< div id = "toc-collapse" class = "navbar-collapse collapse card bg-body-tertiary" >
< ul class = "nav flex-column" >
< li class = "nav-item" data-bs-level = "1" >< a href = "#trading-module" class = "nav-link" > Trading Module</ a >
< ul class = "nav flex-column" >
< li class = "nav-item" data-bs-level = "2" >< a href = "#mt5cli.trading" class = "nav-link" > trading</ a >
< ul class = "nav flex-column" >
</ ul >
</ li >
< li class = "nav-item" data-bs-level = "2" >< a href = "#trading-capable-mt5-sessions" class = "nav-link" > Trading-capable MT5 sessions</ a >
< ul class = "nav flex-column" >
</ ul >
</ li >
2026-06-14 17:47:52 +00:00
< li class = "nav-item" data-bs-level = "2" >< a href = "#state-and-order-helpers" class = "nav-link" > State and order helpers</ a >
2026-06-11 10:33:27 +00:00
< ul class = "nav flex-column" >
</ ul >
</ li >
2026-06-18 10:12:55 +00:00
< li class = "nav-item" data-bs-level = "2" >< a href = "#order-planning-return-contracts" class = "nav-link" > Order planning return contracts</ a >
< ul class = "nav flex-column" >
</ ul >
</ li >
2026-06-29 20:29:14 +00:00
< li class = "nav-item" data-bs-level = "2" >< a href = "#retrieving-recent-history-deals" class = "nav-link" > Retrieving recent history deals</ a >
< ul class = "nav flex-column" >
</ ul >
</ li >
2026-06-18 10:12:55 +00:00
< li class = "nav-item" data-bs-level = "2" >< a href = "#migration-from-application-local-helpers" class = "nav-link" > Migration from application-local helpers</ a >
2026-06-11 10:33:27 +00:00
< ul class = "nav flex-column" >
</ ul >
</ li >
</ ul >
</ li >
</ ul >
</ div >
</ div ></ div >
< div class = "col-md-9" role = "main" >
< h1 id = "trading-module" > Trading Module< a class = "headerlink" href = "#trading-module" title = "Permanent link" > ¶ </ a ></ h1 >
< div class = "doc doc-object doc-module" >
< h2 id = "mt5cli.trading" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-module-name" > mt5cli.trading</ span >
< a href = "#mt5cli.trading" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h2 >
< div class = "doc doc-contents first" >
< p > Trading-capable MetaTrader 5 session helpers and operational utilities.</ p >
< div class = "doc doc-children" >
2026-06-18 10:12:55 +00:00
< div class = "doc doc-object doc-attribute" >
< h3 id = "mt5cli.trading.ExecutionStatus" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > ExecutionStatus</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-module-attribute" >< code > module-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.ExecutionStatus" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > ExecutionStatus</ span > < span class = "o" > =</ span > < span class = "n" >< span title = "typing.Literal" > Literal</ span ></ span >< span class = "p" > [</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "s2" > " executed" </ span >< span class = "p" > ,</ span > < span class = "s2" > " dry_run" </ span >< span class = "p" > ,</ span > < span class = "s2" > " skipped" </ span >< span class = "p" > ,</ span > < span class = "s2" > " failed" </ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
2026-06-14 17:47:52 +00:00
< div class = "doc doc-object doc-attribute" >
< h3 id = "mt5cli.trading.OrderFillingMode" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > OrderFillingMode</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-module-attribute" >< code > module-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderFillingMode" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > OrderFillingMode</ span > < span class = "o" > =</ span > < span class = "n" >< span title = "typing.Literal" > Literal</ span ></ span >< span class = "p" > [</ span >< span class = "s1" > ' IOC' </ span >< span class = "p" > ,</ span > < span class = "s1" > ' FOK' </ span >< span class = "p" > ,</ span > < span class = "s1" > ' RETURN' </ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
2026-06-11 10:33:27 +00:00
< div class = "doc doc-object doc-attribute" >
< h3 id = "mt5cli.trading.OrderSide" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > OrderSide</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-module-attribute" >< code > module-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderSide" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
2026-06-14 17:47:52 +00:00
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > OrderSide</ span > < span class = "o" > =</ span > < span class = "n" >< span title = "typing.Literal" > Literal</ span ></ span >< span class = "p" > [</ span >< span class = "s1" > ' BUY' </ span >< span class = "p" > ,</ span > < span class = "s1" > ' SELL' </ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h3 id = "mt5cli.trading.OrderTimeMode" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > OrderTimeMode</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-module-attribute" >< code > module-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderTimeMode" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > OrderTimeMode</ span > < span class = "o" > =</ span > < span class = "n" >< span title = "typing.Literal" > Literal</ span ></ span >< span class = "p" > [</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "s2" > " GTC" </ span >< span class = "p" > ,</ span > < span class = "s2" > " DAY" </ span >< span class = "p" > ,</ span > < span class = "s2" > " SPECIFIED" </ span >< span class = "p" > ,</ span > < span class = "s2" > " SPECIFIED_DAY" </ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h3 id = "mt5cli.trading.POSITION_COLUMNS" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > POSITION_COLUMNS</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-module-attribute" >< code > module-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.POSITION_COLUMNS" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > POSITION_COLUMNS</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "s2" > " ticket" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "s2" > " time" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "s2" > " symbol" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "s2" > " type" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "s2" > " volume" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "s2" > " price_open" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "s2" > " sl" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a > < span class = "s2" > " tp" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a > < span class = "s2" > " price_current" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-11" name = "__codelineno-0-11" href = "#__codelineno-0-11" ></ a > < span class = "s2" > " profit" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-12" name = "__codelineno-0-12" href = "#__codelineno-0-12" ></ a > < span class = "s2" > " swap" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-13" name = "__codelineno-0-13" href = "#__codelineno-0-13" ></ a > < span class = "s2" > " comment" </ span >< span class = "p" > ,</ span >
2026-07-04 05:20:25 +00:00
< a id = "__codelineno-0-14" name = "__codelineno-0-14" href = "#__codelineno-0-14" ></ a > < span class = "s2" > " magic" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-15" name = "__codelineno-0-15" href = "#__codelineno-0-15" ></ a >< span class = "p" > )</ span >
2026-06-11 10:33:27 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h3 id = "mt5cli.trading.PositionSide" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > PositionSide</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-module-attribute" >< code > module-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.PositionSide" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > PositionSide</ span > < span class = "o" > =</ span > < span class = "n" >< span title = "typing.Literal" > Literal</ span ></ span >< span class = "p" > [</ span >< span class = "s1" > ' long' </ span >< span class = "p" > ,</ span > < span class = "s1" > ' short' </ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
2026-06-25 01:40:44 +00:00
< h3 id = "mt5cli.trading.ProjectionMode" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > ProjectionMode</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-module-attribute" >< code > module-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.ProjectionMode" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > ProjectionMode</ span > < span class = "o" > =</ span > < span class = "n" >< span title = "typing.Literal" > Literal</ span ></ span >< span class = "p" > [</ span >< span class = "s1" > ' add' </ span >< span class = "p" > ,</ span > < span class = "s1" > ' replace_symbol' </ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
2026-06-11 10:33:27 +00:00
< h3 id = "mt5cli.trading.__all__" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > __all__</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-module-attribute" >< code > module-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.__all__" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > __all__</ span > < span class = "o" > =</ span > < span class = "p" > [</ span >
2026-06-14 17:47:52 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "s2" > " POSITION_COLUMNS" </ span >< span class = "p" > ,</ span >
2026-06-18 10:12:55 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "s2" > " ExecutionStatus" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "s2" > " MarginVolume" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "s2" > " OrderExecutionResult" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "s2" > " OrderFillingMode" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "s2" > " OrderLimits" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "s2" > " OrderSide" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a > < span class = "s2" > " OrderTimeMode" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a > < span class = "s2" > " PositionSide" </ span >< span class = "p" > ,</ span >
2026-06-25 01:40:44 +00:00
< a id = "__codelineno-0-11" name = "__codelineno-0-11" href = "#__codelineno-0-11" ></ a > < span class = "s2" > " ProjectionMode" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-12" name = "__codelineno-0-12" href = "#__codelineno-0-12" ></ a > < span class = "s2" > " calculate_account_projected_margin_ratio" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-13" name = "__codelineno-0-13" href = "#__codelineno-0-13" ></ a > < span class = "s2" > " calculate_margin_and_volume" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-14" name = "__codelineno-0-14" href = "#__codelineno-0-14" ></ a > < span class = "s2" > " calculate_new_position_margin_ratio" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-15" name = "__codelineno-0-15" href = "#__codelineno-0-15" ></ a > < span class = "s2" > " calculate_positions_margin" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-16" name = "__codelineno-0-16" href = "#__codelineno-0-16" ></ a > < span class = "s2" > " calculate_positions_margin_by_symbol" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-17" name = "__codelineno-0-17" href = "#__codelineno-0-17" ></ a > < span class = "s2" > " calculate_positions_margin_safe" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-18" name = "__codelineno-0-18" href = "#__codelineno-0-18" ></ a > < span class = "s2" > " calculate_projected_margin_ratio" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-19" name = "__codelineno-0-19" href = "#__codelineno-0-19" ></ a > < span class = "s2" > " calculate_spread_ratio" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-20" name = "__codelineno-0-20" href = "#__codelineno-0-20" ></ a > < span class = "s2" > " calculate_symbol_group_margin_ratio" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-21" name = "__codelineno-0-21" href = "#__codelineno-0-21" ></ a > < span class = "s2" > " calculate_trailing_stop_updates" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-22" name = "__codelineno-0-22" href = "#__codelineno-0-22" ></ a > < span class = "s2" > " calculate_volume_by_margin" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-23" name = "__codelineno-0-23" href = "#__codelineno-0-23" ></ a > < span class = "s2" > " close_open_positions" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-24" name = "__codelineno-0-24" href = "#__codelineno-0-24" ></ a > < span class = "s2" > " create_trading_client" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-25" name = "__codelineno-0-25" href = "#__codelineno-0-25" ></ a > < span class = "s2" > " detect_position_side" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-26" name = "__codelineno-0-26" href = "#__codelineno-0-26" ></ a > < span class = "s2" > " determine_order_limits" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-27" name = "__codelineno-0-27" href = "#__codelineno-0-27" ></ a > < span class = "s2" > " ensure_symbol_selected" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-28" name = "__codelineno-0-28" href = "#__codelineno-0-28" ></ a > < span class = "s2" > " estimate_order_margin" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-29" name = "__codelineno-0-29" href = "#__codelineno-0-29" ></ a > < span class = "s2" > " extract_tick_price" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-30" name = "__codelineno-0-30" href = "#__codelineno-0-30" ></ a > < span class = "s2" > " fetch_latest_closed_rates_for_trading_client" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-31" name = "__codelineno-0-31" href = "#__codelineno-0-31" ></ a > < span class = "s2" > " fetch_latest_closed_rates_indexed" </ span >< span class = "p" > ,</ span >
2026-06-29 20:29:14 +00:00
< a id = "__codelineno-0-32" name = "__codelineno-0-32" href = "#__codelineno-0-32" ></ a > < span class = "s2" > " fetch_recent_history_deals_for_trading_client" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-33" name = "__codelineno-0-33" href = "#__codelineno-0-33" ></ a > < span class = "s2" > " get_account_snapshot" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-34" name = "__codelineno-0-34" href = "#__codelineno-0-34" ></ a > < span class = "s2" > " get_positions_frame" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-35" name = "__codelineno-0-35" href = "#__codelineno-0-35" ></ a > < span class = "s2" > " get_symbol_snapshot" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-36" name = "__codelineno-0-36" href = "#__codelineno-0-36" ></ a > < span class = "s2" > " get_tick_snapshot" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-37" name = "__codelineno-0-37" href = "#__codelineno-0-37" ></ a > < span class = "s2" > " mt5_trading_session" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-38" name = "__codelineno-0-38" href = "#__codelineno-0-38" ></ a > < span class = "s2" > " normalize_order_volume" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-39" name = "__codelineno-0-39" href = "#__codelineno-0-39" ></ a > < span class = "s2" > " place_market_order" </ span >< span class = "p" > ,</ span >
2026-07-04 05:20:25 +00:00
< a id = "__codelineno-0-40" name = "__codelineno-0-40" href = "#__codelineno-0-40" ></ a > < span class = "s2" > " resolve_broker_filling_mode" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-41" name = "__codelineno-0-41" href = "#__codelineno-0-41" ></ a > < span class = "s2" > " update_sltp_for_open_positions" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-42" name = "__codelineno-0-42" href = "#__codelineno-0-42" ></ a > < span class = "s2" > " update_trailing_stop_loss_for_open_positions" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-43" name = "__codelineno-0-43" href = "#__codelineno-0-43" ></ a >< span class = "p" > ]</ span >
2026-06-11 10:33:27 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
2026-06-18 10:12:55 +00:00
< div class = "doc doc-object doc-class" >
2026-06-11 10:33:27 +00:00
2026-06-18 10:12:55 +00:00
< h3 id = "mt5cli.trading.MarginVolume" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-class-name" > MarginVolume</ span >
2026-06-11 10:33:27 +00:00
2026-06-18 10:12:55 +00:00
< a href = "#mt5cli.trading.MarginVolume" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
2026-06-11 10:33:27 +00:00
< div class = "doc doc-contents " >
2026-06-18 10:12:55 +00:00
< p class = "doc doc-class-bases" >
Bases: < code >< span title = "typing.TypedDict" > TypedDict</ span ></ code ></ p >
2026-06-11 10:33:27 +00:00
2026-06-18 10:12:55 +00:00
< p > Affordable volume bounds derived from account margin and symbol constraints.</ p >
2026-06-11 10:33:27 +00:00
2026-06-18 10:12:55 +00:00
< div class = "doc doc-children" >
2026-06-11 10:33:27 +00:00
2026-06-18 10:12:55 +00:00
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.MarginVolume.available_margin" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > available_margin</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.MarginVolume.available_margin" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > available_margin</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.MarginVolume.buy_volume" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > buy_volume</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.MarginVolume.buy_volume" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > buy_volume</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.MarginVolume.margin_free" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > margin_free</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.MarginVolume.margin_free" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > margin_free</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.MarginVolume.sell_volume" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > sell_volume</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.MarginVolume.sell_volume" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > sell_volume</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.MarginVolume.trade_margin" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > trade_margin</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.MarginVolume.trade_margin" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > trade_margin</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.MarginVolume.volume_max" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > volume_max</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.MarginVolume.volume_max" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > volume_max</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.MarginVolume.volume_min" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > volume_min</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.MarginVolume.volume_min" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > volume_min</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.MarginVolume.volume_step" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > volume_step</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.MarginVolume.volume_step" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > volume_step</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
</ div >
</ div >
</ div >
< div class = "doc doc-object doc-class" >
< h3 id = "mt5cli.trading.OrderExecutionResult" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-class-name" > OrderExecutionResult</ span >
< a href = "#mt5cli.trading.OrderExecutionResult" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc doc-contents " >
< p class = "doc doc-class-bases" >
Bases: < code >< span title = "typing.TypedDict" > TypedDict</ span ></ code ></ p >
< p > Normalized result from market-order and position-management helpers.</ p >
< div class = "doc doc-children" >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderExecutionResult.comment" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > comment</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderExecutionResult.comment" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > comment</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderExecutionResult.dry_run" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > dry_run</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderExecutionResult.dry_run" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > dry_run</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "bool" > bool</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderExecutionResult.order_side" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > order_side</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderExecutionResult.order_side" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > order_side</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderSide
module-attribute
(mt5cli.trading.OrderSide)" href = "#mt5cli.trading.OrderSide" > OrderSide</ a ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderExecutionResult.request" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > request</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderExecutionResult.request" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > request</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "dict" > dict</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span > < span class = "n" >< span title = "object" > object</ span ></ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderExecutionResult.response" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > response</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderExecutionResult.response" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > response</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "dict" > dict</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span > < span class = "n" >< span title = "object" > object</ span ></ span >< span class = "p" > ]</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderExecutionResult.retcode" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > retcode</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderExecutionResult.retcode" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > retcode</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderExecutionResult.status" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > status</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderExecutionResult.status" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > status</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "ExecutionStatus
module-attribute
(mt5cli.trading.ExecutionStatus)" href = "#mt5cli.trading.ExecutionStatus" > ExecutionStatus</ a ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderExecutionResult.symbol" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > symbol</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderExecutionResult.symbol" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderExecutionResult.volume" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > volume</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderExecutionResult.volume" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > volume</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
</ div >
</ div >
</ div >
< div class = "doc doc-object doc-class" >
< h3 id = "mt5cli.trading.OrderLimits" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-class-name" > OrderLimits</ span >
< a href = "#mt5cli.trading.OrderLimits" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc doc-contents " >
< p class = "doc doc-class-bases" >
Bases: < code >< span title = "typing.TypedDict" > TypedDict</ span ></ code ></ p >
< p > Protective order prices derived from current quotes and ratio parameters.</ p >
< div class = "doc doc-children" >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderLimits.entry" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > entry</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderLimits.entry" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > entry</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderLimits.stop_loss" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > stop_loss</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderLimits.stop_loss" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > stop_loss</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-attribute" >
< h4 id = "mt5cli.trading.OrderLimits.take_profit" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-attribute-name" > take_profit</ span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-instance-attribute" >< code > instance-attribute</ code ></ small >
</ span >
< a href = "#mt5cli.trading.OrderLimits.take_profit" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h4 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "n" > take_profit</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
</ div >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
2026-06-23 18:44:34 +00:00
< h3 id = "mt5cli.trading.calculate_account_projected_margin_ratio" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_account_projected_margin_ratio</ span >
< a href = "#mt5cli.trading.calculate_account_projected_margin_ratio" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_account_projected_margin_ratio</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-23 18:44:34 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderSide
module-attribute
(mt5cli.trading.OrderSide)" href = "#mt5cli.trading.OrderSide" > OrderSide</ a ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > =</ span > < span class = "mf" > 0.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return account-wide current plus optional new-position margin over equity.</ p >
< p > Current exposure comes from the broker account snapshot < code > margin</ code > field so
unrelated open positions remain in the baseline. Optional projected
exposure is added via :func:< code > estimate_order_margin</ code > only when a symbol, side,
and positive volume are all supplied.</ p >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1072" > 1072</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1073" > 1073</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1074" > 1074</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1075" > 1075</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1076" > 1076</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1077" > 1077</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1078" > 1078</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1079" > 1079</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1080" > 1080</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1081" > 1081</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1082" > 1082</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1083" > 1083</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1084" > 1084</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1085" > 1085</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1086" > 1086</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1087" > 1087</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1088" > 1088</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1089" > 1089</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1090" > 1090</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1091" > 1091</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1092" > 1092</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1093" > 1093</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1094" > 1094</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1095" > 1095</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1096" > 1096</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1097" > 1097</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1072" name = "__codelineno-0-1072" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_account_projected_margin_ratio</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1073" name = "__codelineno-0-1073" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1074" name = "__codelineno-0-1074" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1075" name = "__codelineno-0-1075" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1076" name = "__codelineno-0-1076" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > :</ span > < span class = "n" > OrderSide</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1077" name = "__codelineno-0-1077" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > =</ span > < span class = "mf" > 0.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1078" name = "__codelineno-0-1078" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1079" name = "__codelineno-0-1079" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return account-wide current plus optional new-position margin over equity.</ span >
< a id = "__codelineno-0-1080" name = "__codelineno-0-1080" ></ a >
< a id = "__codelineno-0-1081" name = "__codelineno-0-1081" ></ a >< span class = "sd" > Current exposure comes from the broker account snapshot ``margin`` field so</ span >
< a id = "__codelineno-0-1082" name = "__codelineno-0-1082" ></ a >< span class = "sd" > unrelated open positions remain in the baseline. Optional projected</ span >
< a id = "__codelineno-0-1083" name = "__codelineno-0-1083" ></ a >< span class = "sd" > exposure is added via :func:`estimate_order_margin` only when a symbol, side,</ span >
< a id = "__codelineno-0-1084" name = "__codelineno-0-1084" ></ a >< span class = "sd" > and positive volume are all supplied.</ span >
< a id = "__codelineno-0-1085" name = "__codelineno-0-1085" ></ a >
< a id = "__codelineno-0-1086" name = "__codelineno-0-1086" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1087" name = "__codelineno-0-1087" ></ a > < span class = "n" > account</ span > < span class = "o" > =</ span > < span class = "n" > get_account_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1088" name = "__codelineno-0-1088" ></ a > < span class = "n" > equity</ span > < span class = "o" > =</ span > < span class = "n" > _required_account_number</ span >< span class = "p" > (</ span >< span class = "n" > account</ span >< span class = "p" > ,</ span > < span class = "s2" > " equity" </ span >< span class = "p" > ,</ span > < span class = "n" > allow_zero</ span >< span class = "o" > =</ span >< span class = "kc" > False</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1089" name = "__codelineno-0-1089" ></ a > < span class = "n" > margin</ span > < span class = "o" > =</ span > < span class = "n" > _required_account_number</ span >< span class = "p" > (</ span >< span class = "n" > account</ span >< span class = "p" > ,</ span > < span class = "s2" > " margin" </ span >< span class = "p" > ,</ span > < span class = "n" > allow_zero</ span >< span class = "o" > =</ span >< span class = "kc" > True</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1090" name = "__codelineno-0-1090" ></ a > < span class = "k" > if</ span > < span class = "n" > symbol</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span > < span class = "ow" > and</ span > < span class = "n" > new_position_side</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span > < span class = "ow" > and</ span > < span class = "n" > new_position_volume</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1091" name = "__codelineno-0-1091" ></ a > < span class = "n" > margin</ span > < span class = "o" > +=</ span > < span class = "n" > estimate_order_margin</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1092" name = "__codelineno-0-1092" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1093" name = "__codelineno-0-1093" ></ a > < span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1094" name = "__codelineno-0-1094" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1095" name = "__codelineno-0-1095" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1096" name = "__codelineno-0-1096" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1097" name = "__codelineno-0-1097" ></ a > < span class = "k" > return</ span > < span class = "n" > margin</ span > < span class = "o" > /</ span > < span class = "n" > equity</ span >
2026-06-23 18:44:34 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
2026-06-18 10:12:55 +00:00
< h3 id = "mt5cli.trading.calculate_margin_and_volume" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_margin_and_volume</ span >
< a href = "#mt5cli.trading.calculate_margin_and_volume" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_margin_and_volume</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-18 10:12:55 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > unit_margin_ratio</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > preserved_margin_ratio</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "MarginVolume (mt5cli.trading.MarginVolume)" href = "#mt5cli.trading.MarginVolume" > MarginVolume</ a ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Calculate tradable margin and volumes from account free margin.</ p >
< p > Applies < code > preserved_margin_ratio</ code > to keep a reserve off < code > margin_free</ code > ,
then allocates < code > unit_margin_ratio</ code > of the remainder as the margin budget
for proportional volume sizing on both buy and sell sides. A
< code > unit_margin_ratio</ code > of < code > 0</ code > requests exactly one minimum valid unit per
side when the post-reserve margin can afford it.</ p >
< p >< span class = "doc-section-title" > Parameters:</ span ></ p >
< table >
< thead >
< tr >
< th > Name</ th >
< th > Type</ th >
< th > Description</ th >
< th > Default</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > client</ code >
</ td >
< td >
2026-06-26 13:28:39 +00:00
< code >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ code >
2026-06-18 10:12:55 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-26 13:28:39 +00:00
< p > Connected MT5 client instance.</ p >
2026-06-18 10:12:55 +00:00
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > symbol</ code >
</ td >
< td >
< code >< span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Symbol used for minimum-lot margin and volume calculations.</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > unit_margin_ratio</ code >
</ td >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Fraction of post-reserve margin to allocate per unit.</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > preserved_margin_ratio</ code >
</ td >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Fraction of < code > margin_free</ code > to preserve.</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< a class = "autorefs autorefs-internal" title = "MarginVolume (mt5cli.trading.MarginVolume)" href = "#mt5cli.trading.MarginVolume" > MarginVolume</ a ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Dictionary with < code > margin_free</ code > , < code > available_margin</ code > , < code > trade_margin</ code > ,</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< a class = "autorefs autorefs-internal" title = "MarginVolume (mt5cli.trading.MarginVolume)" href = "#mt5cli.trading.MarginVolume" > MarginVolume</ a ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p >< code > buy_volume</ code > , and < code > sell_volume</ code > . Negative < code > margin_free</ code > values are</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< a class = "autorefs autorefs-internal" title = "MarginVolume (mt5cli.trading.MarginVolume)" href = "#mt5cli.trading.MarginVolume" > MarginVolume</ a ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > clamped to < code > 0.0</ code > before sizing.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1205" > 1205</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1206" > 1206</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1207" > 1207</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1208" > 1208</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1209" > 1209</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1210" > 1210</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1211" > 1211</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1212" > 1212</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1213" > 1213</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1214" > 1214</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1215" > 1215</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1216" > 1216</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1217" > 1217</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1218" > 1218</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1219" > 1219</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1220" > 1220</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1221" > 1221</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1222" > 1222</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1223" > 1223</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1224" > 1224</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1225" > 1225</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1226" > 1226</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1227" > 1227</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1228" > 1228</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1229" > 1229</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1230" > 1230</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1231" > 1231</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1232" > 1232</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1233" > 1233</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1234" > 1234</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1235" > 1235</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1236" > 1236</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1237" > 1237</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1238" > 1238</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1239" > 1239</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1240" > 1240</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1241" > 1241</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1242" > 1242</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1243" > 1243</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1244" > 1244</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1245" > 1245</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1246" > 1246</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1247" > 1247</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1248" > 1248</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1249" > 1249</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1250" > 1250</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1251" > 1251</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1252" > 1252</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1253" > 1253</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1254" > 1254</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1255" > 1255</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1256" > 1256</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1257" > 1257</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1258" > 1258</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1259" > 1259</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1260" > 1260</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1261" > 1261</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1262" > 1262</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1263" > 1263</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1264" > 1264</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1265" > 1265</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1266" > 1266</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1267" > 1267</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1268" > 1268</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1269" > 1269</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1205" name = "__codelineno-0-1205" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_margin_and_volume</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1206" name = "__codelineno-0-1206" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1207" name = "__codelineno-0-1207" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1208" name = "__codelineno-0-1208" ></ a > < span class = "n" > unit_margin_ratio</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1209" name = "__codelineno-0-1209" ></ a > < span class = "n" > preserved_margin_ratio</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1210" name = "__codelineno-0-1210" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > MarginVolume</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1211" name = "__codelineno-0-1211" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Calculate tradable margin and volumes from account free margin.</ span >
< a id = "__codelineno-0-1212" name = "__codelineno-0-1212" ></ a >
< a id = "__codelineno-0-1213" name = "__codelineno-0-1213" ></ a >< span class = "sd" > Applies ``preserved_margin_ratio`` to keep a reserve off ``margin_free``,</ span >
< a id = "__codelineno-0-1214" name = "__codelineno-0-1214" ></ a >< span class = "sd" > then allocates ``unit_margin_ratio`` of the remainder as the margin budget</ span >
< a id = "__codelineno-0-1215" name = "__codelineno-0-1215" ></ a >< span class = "sd" > for proportional volume sizing on both buy and sell sides. A</ span >
< a id = "__codelineno-0-1216" name = "__codelineno-0-1216" ></ a >< span class = "sd" > ``unit_margin_ratio`` of ``0`` requests exactly one minimum valid unit per</ span >
< a id = "__codelineno-0-1217" name = "__codelineno-0-1217" ></ a >< span class = "sd" > side when the post-reserve margin can afford it.</ span >
< a id = "__codelineno-0-1218" name = "__codelineno-0-1218" ></ a >
< a id = "__codelineno-0-1219" name = "__codelineno-0-1219" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-1220" name = "__codelineno-0-1220" ></ a >< span class = "sd" > client: Connected MT5 client instance.</ span >
< a id = "__codelineno-0-1221" name = "__codelineno-0-1221" ></ a >< span class = "sd" > symbol: Symbol used for minimum-lot margin and volume calculations.</ span >
< a id = "__codelineno-0-1222" name = "__codelineno-0-1222" ></ a >< span class = "sd" > unit_margin_ratio: Fraction of post-reserve margin to allocate per unit.</ span >
< a id = "__codelineno-0-1223" name = "__codelineno-0-1223" ></ a >< span class = "sd" > preserved_margin_ratio: Fraction of ``margin_free`` to preserve.</ span >
< a id = "__codelineno-0-1224" name = "__codelineno-0-1224" ></ a >
< a id = "__codelineno-0-1225" name = "__codelineno-0-1225" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-1226" name = "__codelineno-0-1226" ></ a >< span class = "sd" > Dictionary with ``margin_free``, ``available_margin``, ``trade_margin``,</ span >
< a id = "__codelineno-0-1227" name = "__codelineno-0-1227" ></ a >< span class = "sd" > ``buy_volume``, and ``sell_volume``. Negative ``margin_free`` values are</ span >
< a id = "__codelineno-0-1228" name = "__codelineno-0-1228" ></ a >< span class = "sd" > clamped to ``0.0`` before sizing.</ span >
< a id = "__codelineno-0-1229" name = "__codelineno-0-1229" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1230" name = "__codelineno-0-1230" ></ a > < span class = "n" > _require_unit_ratio</ span >< span class = "p" > (</ span >< span class = "n" > unit_margin_ratio</ span >< span class = "p" > ,</ span > < span class = "s2" > " unit_margin_ratio" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1231" name = "__codelineno-0-1231" ></ a > < span class = "n" > _require_unit_ratio</ span >< span class = "p" > (</ span >< span class = "n" > preserved_margin_ratio</ span >< span class = "p" > ,</ span > < span class = "s2" > " preserved_margin_ratio" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1232" name = "__codelineno-0-1232" ></ a >
< a id = "__codelineno-0-1233" name = "__codelineno-0-1233" ></ a > < span class = "n" > account</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > account_info_as_dict</ span >< span class = "p" > ()</ span >
< a id = "__codelineno-0-1234" name = "__codelineno-0-1234" ></ a > < span class = "n" > margin_free</ span > < span class = "o" > =</ span > < span class = "nb" > max</ span >< span class = "p" > (</ span >< span class = "mf" > 0.0</ span >< span class = "p" > ,</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > account</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " margin_free" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >< span class = "p" > ))</ span >
< a id = "__codelineno-0-1235" name = "__codelineno-0-1235" ></ a > < span class = "n" > available_margin</ span > < span class = "o" > =</ span > < span class = "n" > margin_free</ span > < span class = "o" > *</ span > < span class = "p" > (</ span >< span class = "mf" > 1.0</ span > < span class = "o" > -</ span > < span class = "n" > preserved_margin_ratio</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1236" name = "__codelineno-0-1236" ></ a > < span class = "n" > trade_margin</ span > < span class = "o" > =</ span > < span class = "n" > available_margin</ span > < span class = "o" > *</ span > < span class = "n" > unit_margin_ratio</ span >
< a id = "__codelineno-0-1237" name = "__codelineno-0-1237" ></ a > < span class = "k" > if</ span > < span class = "n" > unit_margin_ratio</ span > < span class = "o" > ==</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1238" name = "__codelineno-0-1238" ></ a > < span class = "n" > buy_volume</ span > < span class = "o" > =</ span > < span class = "n" > _calculate_min_volume_if_affordable</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1239" name = "__codelineno-0-1239" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1240" name = "__codelineno-0-1240" ></ a > < span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1241" name = "__codelineno-0-1241" ></ a > < span class = "n" > available_margin</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1242" name = "__codelineno-0-1242" ></ a > < span class = "s2" > " BUY" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1243" name = "__codelineno-0-1243" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1244" name = "__codelineno-0-1244" ></ a > < span class = "n" > sell_volume</ span > < span class = "o" > =</ span > < span class = "n" > _calculate_min_volume_if_affordable</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1245" name = "__codelineno-0-1245" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1246" name = "__codelineno-0-1246" ></ a > < span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1247" name = "__codelineno-0-1247" ></ a > < span class = "n" > available_margin</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1248" name = "__codelineno-0-1248" ></ a > < span class = "s2" > " SELL" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1249" name = "__codelineno-0-1249" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1250" name = "__codelineno-0-1250" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1251" name = "__codelineno-0-1251" ></ a > < span class = "n" > buy_volume</ span > < span class = "o" > =</ span > < span class = "n" > calculate_volume_by_margin</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > trade_margin</ span >< span class = "p" > ,</ span > < span class = "s2" > " BUY" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1252" name = "__codelineno-0-1252" ></ a > < span class = "n" > sell_volume</ span > < span class = "o" > =</ span > < span class = "n" > calculate_volume_by_margin</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > trade_margin</ span >< span class = "p" > ,</ span > < span class = "s2" > " SELL" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1253" name = "__codelineno-0-1253" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1254" name = "__codelineno-0-1254" ></ a > < span class = "n" > symbol_info</ span > < span class = "o" > =</ span > < span class = "n" > get_symbol_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1255" name = "__codelineno-0-1255" ></ a > < span class = "n" > volume_min</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > symbol_info</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " volume_min" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1256" name = "__codelineno-0-1256" ></ a > < span class = "n" > volume_max</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > symbol_info</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " volume_max" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1257" name = "__codelineno-0-1257" ></ a > < span class = "n" > volume_step</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > symbol_info</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " volume_step" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1258" name = "__codelineno-0-1258" ></ a > < span class = "k" > except</ span > < span class = "ne" > AttributeError</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1259" name = "__codelineno-0-1259" ></ a > < span class = "n" > volume_min</ span > < span class = "o" > =</ span > < span class = "n" > volume_max</ span > < span class = "o" > =</ span > < span class = "n" > volume_step</ span > < span class = "o" > =</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-1260" name = "__codelineno-0-1260" ></ a > < span class = "k" > return</ span > < span class = "p" > {</ span >
< a id = "__codelineno-0-1261" name = "__codelineno-0-1261" ></ a > < span class = "s2" > " margin_free" </ span >< span class = "p" > :</ span > < span class = "n" > margin_free</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1262" name = "__codelineno-0-1262" ></ a > < span class = "s2" > " available_margin" </ span >< span class = "p" > :</ span > < span class = "n" > available_margin</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1263" name = "__codelineno-0-1263" ></ a > < span class = "s2" > " trade_margin" </ span >< span class = "p" > :</ span > < span class = "n" > trade_margin</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1264" name = "__codelineno-0-1264" ></ a > < span class = "s2" > " buy_volume" </ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > buy_volume</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1265" name = "__codelineno-0-1265" ></ a > < span class = "s2" > " sell_volume" </ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > sell_volume</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1266" name = "__codelineno-0-1266" ></ a > < span class = "s2" > " volume_min" </ span >< span class = "p" > :</ span > < span class = "n" > volume_min</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1267" name = "__codelineno-0-1267" ></ a > < span class = "s2" > " volume_max" </ span >< span class = "p" > :</ span > < span class = "n" > volume_max</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1268" name = "__codelineno-0-1268" ></ a > < span class = "s2" > " volume_step" </ span >< span class = "p" > :</ span > < span class = "n" > volume_step</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1269" name = "__codelineno-0-1269" ></ a > < span class = "p" > }</ span >
2026-06-18 10:12:55 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.calculate_new_position_margin_ratio" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_new_position_margin_ratio</ span >
< a href = "#mt5cli.trading.calculate_new_position_margin_ratio" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_new_position_margin_ratio</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-18 10:12:55 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderSide
module-attribute
(mt5cli.trading.OrderSide)" href = "#mt5cli.trading.OrderSide" > OrderSide</ a ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > =</ span > < span class = "mf" > 0.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
2026-06-23 07:31:36 +00:00
< div class = "doc doc-contents " >
< p > Return total margin/equity ratio after an optional hypothetical position.</ p >
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
2026-06-26 13:28:39 +00:00
< code >< a class = "autorefs autorefs-internal" title = "Mt5OperationError (mt5cli.exceptions.Mt5OperationError)" href = "../exceptions/#mt5cli.exceptions.Mt5OperationError" > Mt5OperationError</ a ></ code >
2026-06-23 07:31:36 +00:00
</ td >
< td >
< div class = "doc-md-description" >
< p > If equity or required tick data is invalid.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1007" > 1007</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1008" > 1008</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1009" > 1009</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1010" > 1010</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1011" > 1011</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1012" > 1012</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1013" > 1013</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1014" > 1014</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1015" > 1015</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1016" > 1016</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1017" > 1017</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1018" > 1018</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1019" > 1019</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1020" > 1020</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1021" > 1021</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1022" > 1022</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1023" > 1023</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1024" > 1024</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1025" > 1025</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1026" > 1026</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1027" > 1027</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1028" > 1028</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1029" > 1029</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1030" > 1030</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1031" > 1031</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1032" > 1032</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1033" > 1033</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1034" > 1034</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1035" > 1035</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1036" > 1036</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1037" > 1037</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1038" > 1038</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1039" > 1039</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1007" name = "__codelineno-0-1007" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_new_position_margin_ratio</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1008" name = "__codelineno-0-1008" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1009" name = "__codelineno-0-1009" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1010" name = "__codelineno-0-1010" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1011" name = "__codelineno-0-1011" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > :</ span > < span class = "n" > OrderSide</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1012" name = "__codelineno-0-1012" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > =</ span > < span class = "mf" > 0.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1013" name = "__codelineno-0-1013" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1014" name = "__codelineno-0-1014" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return total margin/equity ratio after an optional hypothetical position.</ span >
< a id = "__codelineno-0-1015" name = "__codelineno-0-1015" ></ a >
< a id = "__codelineno-0-1016" name = "__codelineno-0-1016" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-1017" name = "__codelineno-0-1017" ></ a >< span class = "sd" > Mt5OperationError: If equity or required tick data is invalid.</ span >
< a id = "__codelineno-0-1018" name = "__codelineno-0-1018" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1019" name = "__codelineno-0-1019" ></ a > < span class = "n" > account</ span > < span class = "o" > =</ span > < span class = "n" > get_account_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1020" name = "__codelineno-0-1020" ></ a > < span class = "n" > equity</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > account</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " equity" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1021" name = "__codelineno-0-1021" ></ a > < span class = "k" > if</ span > < span class = "n" > equity</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1022" name = "__codelineno-0-1022" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "s2" > " Account equity must be positive to calculate margin ratio." </ span >
< a id = "__codelineno-0-1023" name = "__codelineno-0-1023" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1024" name = "__codelineno-0-1024" ></ a > < span class = "n" > margin</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > account</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " margin" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1025" name = "__codelineno-0-1025" ></ a > < span class = "k" > if</ span > < span class = "n" > new_position_side</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span > < span class = "ow" > and</ span > < span class = "n" > new_position_volume</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1026" name = "__codelineno-0-1026" ></ a > < span class = "n" > side</ span > < span class = "o" > =</ span > < span class = "n" > _normalize_order_side</ span >< span class = "p" > (</ span >< span class = "n" > new_position_side</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1027" name = "__codelineno-0-1027" ></ a > < span class = "n" > price</ span > < span class = "o" > =</ span > < span class = "n" > extract_tick_price</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1028" name = "__codelineno-0-1028" ></ a > < span class = "n" > get_tick_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > ),</ span > < span class = "s2" > " ask" </ span > < span class = "k" > if</ span > < span class = "n" > side</ span > < span class = "o" > ==</ span > < span class = "s2" > " BUY" </ span > < span class = "k" > else</ span > < span class = "s2" > " bid" </ span >
< a id = "__codelineno-0-1029" name = "__codelineno-0-1029" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1030" name = "__codelineno-0-1030" ></ a > < span class = "k" > if</ span > < span class = "n" > price</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1031" name = "__codelineno-0-1031" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Tick price is unavailable for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-1032" name = "__codelineno-0-1032" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1033" name = "__codelineno-0-1033" ></ a > < span class = "n" > order_type</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-1034" name = "__codelineno-0-1034" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > ORDER_TYPE_BUY</ span > < span class = "k" > if</ span > < span class = "n" > side</ span > < span class = "o" > ==</ span > < span class = "s2" > " BUY" </ span > < span class = "k" > else</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > ORDER_TYPE_SELL</ span >
< a id = "__codelineno-0-1035" name = "__codelineno-0-1035" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1036" name = "__codelineno-0-1036" ></ a > < span class = "n" > margin</ span > < span class = "o" > +=</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1037" name = "__codelineno-0-1037" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > order_calc_margin</ span >< span class = "p" > (</ span >< span class = "n" > order_type</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > new_position_volume</ span >< span class = "p" > ,</ span > < span class = "n" > price</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1038" name = "__codelineno-0-1038" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1039" name = "__codelineno-0-1039" ></ a > < span class = "k" > return</ span > < span class = "n" > margin</ span > < span class = "o" > /</ span > < span class = "n" > equity</ span >
2026-06-23 07:31:36 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.calculate_positions_margin" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_positions_margin</ span >
< a href = "#mt5cli.trading.calculate_positions_margin" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_positions_margin</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-23 07:31:36 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbols</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "collections.abc.Sequence" > Sequence</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ]</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return the sum of estimated current margin for open positions.</ p >
< p >< span class = "doc-section-title" > Parameters:</ span ></ p >
< table >
< thead >
< tr >
< th > Name</ th >
< th > Type</ th >
< th > Description</ th >
< th > Default</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > client</ code >
</ td >
< td >
2026-06-26 13:28:39 +00:00
< code >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ code >
2026-06-23 07:31:36 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-26 13:28:39 +00:00
< p > Connected MT5 client instance.</ p >
2026-06-23 07:31:36 +00:00
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > symbols</ code >
</ td >
< td >
< code >< span title = "collections.abc.Sequence" > Sequence</ span > [< span title = "str" > str</ span > ] | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Optional symbol filter. When omitted, all open positions are
included.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Total estimated margin, or < code > 0.0</ code > when no matching positions exist.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-884" > 884</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-885" > 885</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-886" > 886</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-887" > 887</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-888" > 888</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-889" > 889</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-890" > 890</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-891" > 891</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-892" > 892</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-893" > 893</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-894" > 894</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-895" > 895</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-896" > 896</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-897" > 897</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-898" > 898</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-899" > 899</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-900" > 900</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-901" > 901</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-902" > 902</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-903" > 903</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-904" > 904</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-905" > 905</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-906" > 906</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-907" > 907</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-908" > 908</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-909" > 909</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-910" > 910</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-911" > 911</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-912" > 912</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-913" > 913</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-914" > 914</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-915" > 915</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-916" > 916</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-917" > 917</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-918" > 918</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-919" > 919</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-920" > 920</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-921" > 921</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-922" > 922</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-923" > 923</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-884" name = "__codelineno-0-884" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_positions_margin</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-885" name = "__codelineno-0-885" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-886" name = "__codelineno-0-886" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-887" name = "__codelineno-0-887" ></ a > < span class = "n" > symbols</ span >< span class = "p" > :</ span > < span class = "n" > Sequence</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ]</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-888" name = "__codelineno-0-888" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-889" name = "__codelineno-0-889" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return the sum of estimated current margin for open positions.</ span >
< a id = "__codelineno-0-890" name = "__codelineno-0-890" ></ a >
< a id = "__codelineno-0-891" name = "__codelineno-0-891" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-892" name = "__codelineno-0-892" ></ a >< span class = "sd" > client: Connected MT5 client instance.</ span >
< a id = "__codelineno-0-893" name = "__codelineno-0-893" ></ a >< span class = "sd" > symbols: Optional symbol filter. When omitted, all open positions are</ span >
< a id = "__codelineno-0-894" name = "__codelineno-0-894" ></ a >< span class = "sd" > included.</ span >
< a id = "__codelineno-0-895" name = "__codelineno-0-895" ></ a >
< a id = "__codelineno-0-896" name = "__codelineno-0-896" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-897" name = "__codelineno-0-897" ></ a >< span class = "sd" > Total estimated margin, or ``0.0`` when no matching positions exist.</ span >
< a id = "__codelineno-0-898" name = "__codelineno-0-898" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-899" name = "__codelineno-0-899" ></ a > < span class = "n" > frame</ span > < span class = "o" > =</ span > < span class = "n" > get_positions_frame</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-900" name = "__codelineno-0-900" ></ a > < span class = "k" > if</ span > < span class = "n" > frame</ span >< span class = "o" > .</ span >< span class = "n" > empty</ span > < span class = "ow" > or</ span > < span class = "s2" > " symbol" </ span > < span class = "ow" > not</ span > < span class = "ow" > in</ span > < span class = "n" > frame</ span >< span class = "o" > .</ span >< span class = "n" > columns</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-901" name = "__codelineno-0-901" ></ a > < span class = "k" > return</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-902" name = "__codelineno-0-902" ></ a > < span class = "k" > if</ span > < span class = "n" > symbols</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-903" name = "__codelineno-0-903" ></ a > < span class = "n" > frame</ span > < span class = "o" > =</ span > < span class = "n" > frame</ span >< span class = "p" > [</ span >< span class = "n" > frame</ span >< span class = "p" > [</ span >< span class = "s2" > " symbol" </ span >< span class = "p" > ]</ span >< span class = "o" > .</ span >< span class = "n" > isin</ span >< span class = "p" > (</ span >< span class = "nb" > list</ span >< span class = "p" > (</ span >< span class = "n" > symbols</ span >< span class = "p" > ))]</ span >
< a id = "__codelineno-0-904" name = "__codelineno-0-904" ></ a > < span class = "k" > if</ span > < span class = "n" > frame</ span >< span class = "o" > .</ span >< span class = "n" > empty</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-905" name = "__codelineno-0-905" ></ a > < span class = "k" > return</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-906" name = "__codelineno-0-906" ></ a > < span class = "n" > grouped_volumes</ span >< span class = "p" > :</ span > < span class = "nb" > dict</ span >< span class = "p" > [</ span >< span class = "nb" > tuple</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ,</ span > < span class = "n" > OrderSide</ span >< span class = "p" > ],</ span > < span class = "nb" > float</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "p" > {}</ span >
< a id = "__codelineno-0-907" name = "__codelineno-0-907" ></ a > < span class = "k" > for</ span > < span class = "n" > _</ span >< span class = "p" > ,</ span > < span class = "n" > row</ span > < span class = "ow" > in</ span > < span class = "n" > frame</ span >< span class = "o" > .</ span >< span class = "n" > iterrows</ span >< span class = "p" > ():</ span >
< a id = "__codelineno-0-908" name = "__codelineno-0-908" ></ a > < span class = "n" > symbol</ span > < span class = "o" > =</ span > < span class = "n" > row</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " symbol" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-909" name = "__codelineno-0-909" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "nb" > isinstance</ span >< span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "nb" > str</ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "ow" > not</ span > < span class = "n" > symbol</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-910" name = "__codelineno-0-910" ></ a > < span class = "k" > continue</ span >
< a id = "__codelineno-0-911" name = "__codelineno-0-911" ></ a > < span class = "n" > volume</ span > < span class = "o" > =</ span > < span class = "n" > row</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " volume" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-912" name = "__codelineno-0-912" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > _is_positive_finite_number</ span >< span class = "p" > (</ span >< span class = "n" > volume</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-913" name = "__codelineno-0-913" ></ a > < span class = "k" > continue</ span >
< a id = "__codelineno-0-914" name = "__codelineno-0-914" ></ a > < span class = "n" > order_side</ span > < span class = "o" > =</ span > < span class = "n" > _order_side_from_position_type</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > row</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " type" </ span >< span class = "p" > ))</ span >
< a id = "__codelineno-0-915" name = "__codelineno-0-915" ></ a > < span class = "k" > if</ span > < span class = "n" > order_side</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-916" name = "__codelineno-0-916" ></ a > < span class = "k" > continue</ span >
< a id = "__codelineno-0-917" name = "__codelineno-0-917" ></ a > < span class = "n" > key</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > order_side</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-918" name = "__codelineno-0-918" ></ a > < span class = "n" > finite_volume</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > cast</ span >< span class = "p" > (</ span >< span class = "s2" > " float | int" </ span >< span class = "p" > ,</ span > < span class = "n" > volume</ span >< span class = "p" > ))</ span >
< a id = "__codelineno-0-919" name = "__codelineno-0-919" ></ a > < span class = "n" > grouped_volumes</ span >< span class = "p" > [</ span >< span class = "n" > key</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > grouped_volumes</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "n" > key</ span >< span class = "p" > ,</ span > < span class = "mf" > 0.0</ span >< span class = "p" > )</ span > < span class = "o" > +</ span > < span class = "n" > finite_volume</ span >
< a id = "__codelineno-0-920" name = "__codelineno-0-920" ></ a > < span class = "n" > total</ span > < span class = "o" > =</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-921" name = "__codelineno-0-921" ></ a > < span class = "k" > for</ span > < span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > order_side</ span >< span class = "p" > ),</ span > < span class = "n" > volume</ span > < span class = "ow" > in</ span > < span class = "n" > grouped_volumes</ span >< span class = "o" > .</ span >< span class = "n" > items</ span >< span class = "p" > ():</ span >
< a id = "__codelineno-0-922" name = "__codelineno-0-922" ></ a > < span class = "n" > total</ span > < span class = "o" > +=</ span > < span class = "n" > estimate_order_margin</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > order_side</ span >< span class = "p" > ,</ span > < span class = "n" > volume</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-923" name = "__codelineno-0-923" ></ a > < span class = "k" > return</ span > < span class = "n" > total</ span >
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.calculate_positions_margin_by_symbol" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_positions_margin_by_symbol</ span >
< a href = "#mt5cli.trading.calculate_positions_margin_by_symbol" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_positions_margin_by_symbol</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbols</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "collections.abc.Sequence" > Sequence</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ],</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > suppress_errors</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "bool" > bool</ span ></ span > < span class = "o" > =</ span > < span class = "kc" > True</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "dict" > dict</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return per-symbol estimated margin for open positions.</ p >
< p > Computes margin for each unique input symbol independently using the strict
:func:< code > calculate_positions_margin</ code > helper. Duplicates are deduplicated in
first-seen order.</ p >
< p >< span class = "doc-section-title" > Parameters:</ span ></ p >
2026-06-23 07:31:36 +00:00
< table >
< thead >
< tr >
< th > Name</ th >
< th > Type</ th >
< th > Description</ th >
< th > Default</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > client</ code >
</ td >
< td >
2026-06-26 13:28:39 +00:00
< code >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ code >
2026-06-23 07:31:36 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-26 13:28:39 +00:00
< p > Connected MT5 client instance.</ p >
2026-06-23 07:31:36 +00:00
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > symbols</ code >
</ td >
< td >
< code >< span title = "collections.abc.Sequence" > Sequence</ span > [< span title = "str" > str</ span > ]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Symbols to compute margin for.</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > suppress_errors</ code >
</ td >
< td >
< code >< span title = "bool" > bool</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > When < code > True</ code > , log and skip symbols that raise
2026-06-26 13:28:39 +00:00
< code > Mt5OperationError</ code > , < code > Mt5RuntimeError</ code > , or < code > AttributeError</ code > .
2026-06-23 07:31:36 +00:00
When < code > False</ code > , re-raise the first failure.</ p >
</ div >
</ td >
< td >
< code > True</ code >
</ td >
</ tr >
</ tbody >
</ table >
2026-06-18 10:12:55 +00:00
2026-06-23 07:31:36 +00:00
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "dict" > dict</ span > [< span title = "str" > str</ span > , < span title = "float" > float</ span > ]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Mapping of symbol to margin total in first-seen unique-symbol order.</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "dict" > dict</ span > [< span title = "str" > str</ span > , < span title = "float" > float</ span > ]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Returns an empty dict when < code > symbols</ code > is empty or all symbols fail</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "dict" > dict</ span > [< span title = "str" > str</ span > , < span title = "float" > float</ span > ]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > with < code > suppress_errors=True</ code > .</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
2026-06-18 10:12:55 +00:00
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
2026-06-11 10:33:27 +00:00
< tbody >
< tr class = "doc-section-item" >
< td >
2026-06-26 13:28:39 +00:00
< code >< a class = "autorefs autorefs-internal" title = "Mt5OperationError (mt5cli.exceptions.Mt5OperationError)" href = "../exceptions/#mt5cli.exceptions.Mt5OperationError" > Mt5OperationError</ a ></ code >
2026-06-11 10:33:27 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-26 13:28:39 +00:00
< p > When a symbol raises < code > Mt5OperationError</ code > and
2026-06-23 07:31:36 +00:00
< code > suppress_errors=False</ code > .</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "pdmt5.Mt5RuntimeError" > Mt5RuntimeError</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > When a symbol raises < code > Mt5RuntimeError</ code > and
< code > suppress_errors=False</ code > .</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "AttributeError" > AttributeError</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > When a symbol raises < code > AttributeError</ code > and
< code > suppress_errors=False</ code > .</ p >
2026-06-11 10:33:27 +00:00
</ div >
</ td >
</ tr >
2026-06-14 17:47:52 +00:00
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-926" > 926</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-927" > 927</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-928" > 928</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-929" > 929</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-930" > 930</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-931" > 931</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-932" > 932</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-933" > 933</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-934" > 934</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-935" > 935</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-936" > 936</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-937" > 937</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-938" > 938</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-939" > 939</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-940" > 940</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-941" > 941</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-942" > 942</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-943" > 943</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-944" > 944</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-945" > 945</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-946" > 946</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-947" > 947</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-948" > 948</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-949" > 949</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-950" > 950</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-951" > 951</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-952" > 952</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-953" > 953</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-954" > 954</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-955" > 955</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-956" > 956</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-957" > 957</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-958" > 958</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-959" > 959</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-960" > 960</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-961" > 961</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-962" > 962</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-963" > 963</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-964" > 964</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-965" > 965</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-966" > 966</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-926" name = "__codelineno-0-926" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_positions_margin_by_symbol</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-927" name = "__codelineno-0-927" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-928" name = "__codelineno-0-928" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-929" name = "__codelineno-0-929" ></ a > < span class = "n" > symbols</ span >< span class = "p" > :</ span > < span class = "n" > Sequence</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ],</ span >
< a id = "__codelineno-0-930" name = "__codelineno-0-930" ></ a > < span class = "n" > suppress_errors</ span >< span class = "p" > :</ span > < span class = "nb" > bool</ span > < span class = "o" > =</ span > < span class = "kc" > True</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-931" name = "__codelineno-0-931" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > dict</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ,</ span > < span class = "nb" > float</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-932" name = "__codelineno-0-932" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return per-symbol estimated margin for open positions.</ span >
< a id = "__codelineno-0-933" name = "__codelineno-0-933" ></ a >
< a id = "__codelineno-0-934" name = "__codelineno-0-934" ></ a >< span class = "sd" > Computes margin for each unique input symbol independently using the strict</ span >
< a id = "__codelineno-0-935" name = "__codelineno-0-935" ></ a >< span class = "sd" > :func:`calculate_positions_margin` helper. Duplicates are deduplicated in</ span >
< a id = "__codelineno-0-936" name = "__codelineno-0-936" ></ a >< span class = "sd" > first-seen order.</ span >
< a id = "__codelineno-0-937" name = "__codelineno-0-937" ></ a >
< a id = "__codelineno-0-938" name = "__codelineno-0-938" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-939" name = "__codelineno-0-939" ></ a >< span class = "sd" > client: Connected MT5 client instance.</ span >
< a id = "__codelineno-0-940" name = "__codelineno-0-940" ></ a >< span class = "sd" > symbols: Symbols to compute margin for.</ span >
< a id = "__codelineno-0-941" name = "__codelineno-0-941" ></ a >< span class = "sd" > suppress_errors: When ``True``, log and skip symbols that raise</ span >
< a id = "__codelineno-0-942" name = "__codelineno-0-942" ></ a >< span class = "sd" > ``Mt5OperationError``, ``Mt5RuntimeError``, or ``AttributeError``.</ span >
< a id = "__codelineno-0-943" name = "__codelineno-0-943" ></ a >< span class = "sd" > When ``False``, re-raise the first failure.</ span >
< a id = "__codelineno-0-944" name = "__codelineno-0-944" ></ a >
< a id = "__codelineno-0-945" name = "__codelineno-0-945" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-946" name = "__codelineno-0-946" ></ a >< span class = "sd" > Mapping of symbol to margin total in first-seen unique-symbol order.</ span >
< a id = "__codelineno-0-947" name = "__codelineno-0-947" ></ a >< span class = "sd" > Returns an empty dict when ``symbols`` is empty or all symbols fail</ span >
< a id = "__codelineno-0-948" name = "__codelineno-0-948" ></ a >< span class = "sd" > with ``suppress_errors=True``.</ span >
< a id = "__codelineno-0-949" name = "__codelineno-0-949" ></ a >
< a id = "__codelineno-0-950" name = "__codelineno-0-950" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-951" name = "__codelineno-0-951" ></ a >< span class = "sd" > Mt5OperationError: When a symbol raises ``Mt5OperationError`` and</ span >
< a id = "__codelineno-0-952" name = "__codelineno-0-952" ></ a >< span class = "sd" > ``suppress_errors=False``.</ span >
< a id = "__codelineno-0-953" name = "__codelineno-0-953" ></ a >< span class = "sd" > Mt5RuntimeError: When a symbol raises ``Mt5RuntimeError`` and</ span >
< a id = "__codelineno-0-954" name = "__codelineno-0-954" ></ a >< span class = "sd" > ``suppress_errors=False``.</ span >
< a id = "__codelineno-0-955" name = "__codelineno-0-955" ></ a >< span class = "sd" > AttributeError: When a symbol raises ``AttributeError`` and</ span >
< a id = "__codelineno-0-956" name = "__codelineno-0-956" ></ a >< span class = "sd" > ``suppress_errors=False``.</ span >
< a id = "__codelineno-0-957" name = "__codelineno-0-957" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-958" name = "__codelineno-0-958" ></ a > < span class = "n" > result</ span >< span class = "p" > :</ span > < span class = "nb" > dict</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ,</ span > < span class = "nb" > float</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "p" > {}</ span >
< a id = "__codelineno-0-959" name = "__codelineno-0-959" ></ a > < span class = "k" > for</ span > < span class = "n" > symbol</ span > < span class = "ow" > in</ span > < span class = "nb" > dict</ span >< span class = "o" > .</ span >< span class = "n" > fromkeys</ span >< span class = "p" > (</ span >< span class = "n" > symbols</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-960" name = "__codelineno-0-960" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-961" name = "__codelineno-0-961" ></ a > < span class = "n" > result</ span >< span class = "p" > [</ span >< span class = "n" > symbol</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > calculate_positions_margin</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbols</ span >< span class = "o" > =</ span >< span class = "p" > [</ span >< span class = "n" > symbol</ span >< span class = "p" > ])</ span >
< a id = "__codelineno-0-962" name = "__codelineno-0-962" ></ a > < span class = "k" > except</ span > < span class = "p" > (</ span >< span class = "n" > Mt5OperationError</ span >< span class = "p" > ,</ span > < span class = "n" > Mt5RuntimeError</ span >< span class = "p" > ,</ span > < span class = "ne" > AttributeError</ span >< span class = "p" > )</ span > < span class = "k" > as</ span > < span class = "n" > exc</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-963" name = "__codelineno-0-963" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > suppress_errors</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-964" name = "__codelineno-0-964" ></ a > < span class = "k" > raise</ span >
< a id = "__codelineno-0-965" name = "__codelineno-0-965" ></ a > < span class = "n" > _logger</ span >< span class = "o" > .</ span >< span class = "n" > warning</ span >< span class = "p" > (</ span >< span class = "s2" > " Skipping margin for </ span >< span class = "si" > %r</ span >< span class = "s2" > : </ span >< span class = "si" > %s</ span >< span class = "s2" > " </ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > exc</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-966" name = "__codelineno-0-966" ></ a > < span class = "k" > return</ span > < span class = "n" > result</ span >
2026-06-18 16:03:06 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
2026-06-23 07:31:36 +00:00
< h3 id = "mt5cli.trading.calculate_positions_margin_safe" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_positions_margin_safe</ span >
2026-06-18 16:03:06 +00:00
2026-06-23 07:31:36 +00:00
< a href = "#mt5cli.trading.calculate_positions_margin_safe" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_positions_margin_safe</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span > < span class = "o" > *</ span >< span class = "p" > ,</ span > < span class = "n" > symbols</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "collections.abc.Sequence" > Sequence</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ]</ span >
2026-06-23 07:31:36 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span >
2026-06-18 16:03:06 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
2026-06-23 07:31:36 +00:00
< p > Return the total estimated margin for open positions across symbols.</ p >
< p > Internally calls :func:< code > calculate_positions_margin_by_symbol</ code > with
< code > suppress_errors=True</ code > . Failed symbols are silently skipped.</ p >
2026-06-18 16:03:06 +00:00
< p >< span class = "doc-section-title" > Parameters:</ span ></ p >
< table >
< thead >
< tr >
< th > Name</ th >
< th > Type</ th >
< th > Description</ th >
< th > Default</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > client</ code >
</ td >
< td >
2026-06-26 13:28:39 +00:00
< code >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ code >
2026-06-18 16:03:06 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-26 13:28:39 +00:00
< p > Connected MT5 client instance.</ p >
2026-06-18 16:03:06 +00:00
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > symbols</ code >
</ td >
< td >
2026-06-23 07:31:36 +00:00
< code >< span title = "collections.abc.Sequence" > Sequence</ span > [< span title = "str" > str</ span > ]</ code >
2026-06-18 16:03:06 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-23 07:31:36 +00:00
< p > Symbols to include.</ p >
2026-06-18 16:03:06 +00:00
</ div >
</ td >
< td >
2026-06-23 07:31:36 +00:00
< em > required</ em >
2026-06-18 16:03:06 +00:00
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
2026-06-23 07:31:36 +00:00
< p > Sum of per-symbol margins; < code > 0.0</ code > when no symbols or all fail.</ p >
2026-06-18 16:03:06 +00:00
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-969" > 969</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-970" > 970</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-971" > 971</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-972" > 972</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-973" > 973</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-974" > 974</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-975" > 975</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-976" > 976</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-977" > 977</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-978" > 978</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-979" > 979</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-980" > 980</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-981" > 981</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-982" > 982</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-983" > 983</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-984" > 984</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-985" > 985</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-986" > 986</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-987" > 987</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-988" > 988</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-989" > 989</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-969" name = "__codelineno-0-969" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_positions_margin_safe</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-970" name = "__codelineno-0-970" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-971" name = "__codelineno-0-971" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-972" name = "__codelineno-0-972" ></ a > < span class = "n" > symbols</ span >< span class = "p" > :</ span > < span class = "n" > Sequence</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ],</ span >
< a id = "__codelineno-0-973" name = "__codelineno-0-973" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-974" name = "__codelineno-0-974" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return the total estimated margin for open positions across symbols.</ span >
< a id = "__codelineno-0-975" name = "__codelineno-0-975" ></ a >
< a id = "__codelineno-0-976" name = "__codelineno-0-976" ></ a >< span class = "sd" > Internally calls :func:`calculate_positions_margin_by_symbol` with</ span >
< a id = "__codelineno-0-977" name = "__codelineno-0-977" ></ a >< span class = "sd" > ``suppress_errors=True``. Failed symbols are silently skipped.</ span >
< a id = "__codelineno-0-978" name = "__codelineno-0-978" ></ a >
< a id = "__codelineno-0-979" name = "__codelineno-0-979" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-980" name = "__codelineno-0-980" ></ a >< span class = "sd" > client: Connected MT5 client instance.</ span >
< a id = "__codelineno-0-981" name = "__codelineno-0-981" ></ a >< span class = "sd" > symbols: Symbols to include.</ span >
< a id = "__codelineno-0-982" name = "__codelineno-0-982" ></ a >
< a id = "__codelineno-0-983" name = "__codelineno-0-983" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-984" name = "__codelineno-0-984" ></ a >< span class = "sd" > Sum of per-symbol margins; ``0.0`` when no symbols or all fail.</ span >
< a id = "__codelineno-0-985" name = "__codelineno-0-985" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-986" name = "__codelineno-0-986" ></ a > < span class = "k" > return</ span > < span class = "nb" > sum</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-987" name = "__codelineno-0-987" ></ a > < span class = "n" > calculate_positions_margin_by_symbol</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbols</ span >< span class = "o" > =</ span >< span class = "n" > symbols</ span >< span class = "p" > )</ span >< span class = "o" > .</ span >< span class = "n" > values</ span >< span class = "p" > (),</ span >
< a id = "__codelineno-0-988" name = "__codelineno-0-988" ></ a > < span class = "mf" > 0.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-989" name = "__codelineno-0-989" ></ a > < span class = "p" > )</ span >
2026-06-23 16:59:18 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.calculate_projected_margin_ratio" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_projected_margin_ratio</ span >
< a href = "#mt5cli.trading.calculate_projected_margin_ratio" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_projected_margin_ratio</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-23 16:59:18 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderSide
module-attribute
(mt5cli.trading.OrderSide)" href = "#mt5cli.trading.OrderSide" > OrderSide</ a ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > =</ span > < span class = "mf" > 0.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return estimated current plus optional new-position margin over equity.</ p >
< p > Current exposure is estimated from open positions with
:func:< code > calculate_positions_margin</ code > . Optional projected exposure is added via
:func:< code > estimate_order_margin</ code > . Thresholds and guard actions are intentionally
left to downstream applications.</ p >
< p > Account equity, position margin, and optional projected margin errors from
the composed MT5 helpers propagate to the caller.</ p >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1100" > 1100</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1101" > 1101</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1102" > 1102</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1103" > 1103</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1104" > 1104</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1105" > 1105</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1106" > 1106</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1107" > 1107</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1108" > 1108</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1109" > 1109</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1110" > 1110</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1111" > 1111</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1112" > 1112</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1113" > 1113</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1114" > 1114</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1115" > 1115</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1116" > 1116</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1117" > 1117</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1118" > 1118</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1119" > 1119</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1120" > 1120</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1121" > 1121</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1122" > 1122</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1123" > 1123</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1124" > 1124</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1125" > 1125</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1126" > 1126</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1100" name = "__codelineno-0-1100" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_projected_margin_ratio</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1101" name = "__codelineno-0-1101" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1102" name = "__codelineno-0-1102" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1103" name = "__codelineno-0-1103" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1104" name = "__codelineno-0-1104" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > :</ span > < span class = "n" > OrderSide</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1105" name = "__codelineno-0-1105" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > =</ span > < span class = "mf" > 0.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1106" name = "__codelineno-0-1106" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1107" name = "__codelineno-0-1107" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return estimated current plus optional new-position margin over equity.</ span >
< a id = "__codelineno-0-1108" name = "__codelineno-0-1108" ></ a >
< a id = "__codelineno-0-1109" name = "__codelineno-0-1109" ></ a >< span class = "sd" > Current exposure is estimated from open positions with</ span >
< a id = "__codelineno-0-1110" name = "__codelineno-0-1110" ></ a >< span class = "sd" > :func:`calculate_positions_margin`. Optional projected exposure is added via</ span >
< a id = "__codelineno-0-1111" name = "__codelineno-0-1111" ></ a >< span class = "sd" > :func:`estimate_order_margin`. Thresholds and guard actions are intentionally</ span >
< a id = "__codelineno-0-1112" name = "__codelineno-0-1112" ></ a >< span class = "sd" > left to downstream applications.</ span >
< a id = "__codelineno-0-1113" name = "__codelineno-0-1113" ></ a >
< a id = "__codelineno-0-1114" name = "__codelineno-0-1114" ></ a >< span class = "sd" > Account equity, position margin, and optional projected margin errors from</ span >
< a id = "__codelineno-0-1115" name = "__codelineno-0-1115" ></ a >< span class = "sd" > the composed MT5 helpers propagate to the caller.</ span >
< a id = "__codelineno-0-1116" name = "__codelineno-0-1116" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1117" name = "__codelineno-0-1117" ></ a > < span class = "n" > equity</ span > < span class = "o" > =</ span > < span class = "n" > _account_equity</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1118" name = "__codelineno-0-1118" ></ a > < span class = "n" > margin</ span > < span class = "o" > =</ span > < span class = "n" > calculate_positions_margin</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbols</ span >< span class = "o" > =</ span >< span class = "p" > [</ span >< span class = "n" > symbol</ span >< span class = "p" > ])</ span >
< a id = "__codelineno-0-1119" name = "__codelineno-0-1119" ></ a > < span class = "k" > if</ span > < span class = "n" > new_position_side</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span > < span class = "ow" > and</ span > < span class = "n" > new_position_volume</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1120" name = "__codelineno-0-1120" ></ a > < span class = "n" > margin</ span > < span class = "o" > +=</ span > < span class = "n" > estimate_order_margin</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1121" name = "__codelineno-0-1121" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1122" name = "__codelineno-0-1122" ></ a > < span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1123" name = "__codelineno-0-1123" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1124" name = "__codelineno-0-1124" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1125" name = "__codelineno-0-1125" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1126" name = "__codelineno-0-1126" ></ a > < span class = "k" > return</ span > < span class = "n" > margin</ span > < span class = "o" > /</ span > < span class = "n" > equity</ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.calculate_spread_ratio" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_spread_ratio</ span >
< a href = "#mt5cli.trading.calculate_spread_ratio" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_spread_ratio</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >
2026-06-14 17:47:52 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return < code > (ask - bid) / ((ask + bid) / 2)</ code > for the latest tick.</ p >
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
2026-06-11 10:33:27 +00:00
< tr class = "doc-section-item" >
< td >
2026-06-26 13:28:39 +00:00
< code >< a class = "autorefs autorefs-internal" title = "Mt5OperationError (mt5cli.exceptions.Mt5OperationError)" href = "../exceptions/#mt5cli.exceptions.Mt5OperationError" > Mt5OperationError</ a ></ code >
2026-06-11 10:33:27 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-23 09:49:26 +00:00
< p > If bid or ask is unavailable.</ p >
2026-06-11 10:33:27 +00:00
</ div >
</ td >
</ tr >
</ tbody >
</ table >
2026-06-14 17:47:52 +00:00
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-992" > 992</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-993" > 993</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-994" > 994</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-995" > 995</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-996" > 996</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-997" > 997</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-998" > 998</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-999" > 999</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1000" > 1000</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1001" > 1001</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1002" > 1002</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1003" > 1003</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1004" > 1004</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-992" name = "__codelineno-0-992" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_spread_ratio</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-993" name = "__codelineno-0-993" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return ``(ask - bid) / ((ask + bid) / 2)`` for the latest tick.</ span >
< a id = "__codelineno-0-994" name = "__codelineno-0-994" ></ a >
< a id = "__codelineno-0-995" name = "__codelineno-0-995" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-996" name = "__codelineno-0-996" ></ a >< span class = "sd" > Mt5OperationError: If bid or ask is unavailable.</ span >
< a id = "__codelineno-0-997" name = "__codelineno-0-997" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-998" name = "__codelineno-0-998" ></ a > < span class = "n" > tick</ span > < span class = "o" > =</ span > < span class = "n" > get_tick_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-999" name = "__codelineno-0-999" ></ a > < span class = "n" > bid</ span > < span class = "o" > =</ span > < span class = "n" > extract_tick_price</ span >< span class = "p" > (</ span >< span class = "n" > tick</ span >< span class = "p" > ,</ span > < span class = "s2" > " bid" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1000" name = "__codelineno-0-1000" ></ a > < span class = "n" > ask</ span > < span class = "o" > =</ span > < span class = "n" > extract_tick_price</ span >< span class = "p" > (</ span >< span class = "n" > tick</ span >< span class = "p" > ,</ span > < span class = "s2" > " ask" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1001" name = "__codelineno-0-1001" ></ a > < span class = "k" > if</ span > < span class = "n" > bid</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span > < span class = "ow" > or</ span > < span class = "n" > ask</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1002" name = "__codelineno-0-1002" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Tick bid/ask is unavailable for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-1003" name = "__codelineno-0-1003" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1004" name = "__codelineno-0-1004" ></ a > < span class = "k" > return</ span > < span class = "p" > (</ span >< span class = "n" > ask</ span > < span class = "o" > -</ span > < span class = "n" > bid</ span >< span class = "p" > )</ span > < span class = "o" > /</ span > < span class = "p" > ((</ span >< span class = "n" > ask</ span > < span class = "o" > +</ span > < span class = "n" > bid</ span >< span class = "p" > )</ span > < span class = "o" > /</ span > < span class = "mf" > 2.0</ span >< span class = "p" > )</ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
2026-06-23 16:59:18 +00:00
< h3 id = "mt5cli.trading.calculate_symbol_group_margin_ratio" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_symbol_group_margin_ratio</ span >
2026-06-14 17:47:52 +00:00
2026-06-23 16:59:18 +00:00
< a href = "#mt5cli.trading.calculate_symbol_group_margin_ratio" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_symbol_group_margin_ratio</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-23 16:59:18 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbols</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "collections.abc.Sequence" > Sequence</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ],</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > new_symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderSide
2026-06-14 17:47:52 +00:00
module-attribute
2026-06-23 16:59:18 +00:00
(mt5cli.trading.OrderSide)" href = "#mt5cli.trading.OrderSide" > OrderSide</ a ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > =</ span > < span class = "mf" > 0.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "n" > suppress_errors</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "bool" > bool</ span ></ span > < span class = "o" > =</ span > < span class = "kc" > True</ span >< span class = "p" > ,</ span >
2026-06-25 01:40:44 +00:00
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a > < span class = "n" > projection_mode</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "ProjectionMode
module-attribute
(mt5cli.trading.ProjectionMode)" href = "#mt5cli.trading.ProjectionMode" > ProjectionMode</ a ></ span > < span class = "o" > =</ span > < span class = "s2" > " add" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
2026-06-23 16:59:18 +00:00
< p > Return estimated symbol-group margin over account equity.</ p >
< p > Per-symbol current exposure is summed with
:func:< code > calculate_positions_margin_by_symbol</ code > . When < code > new_symbol</ code > is inside
2026-06-25 01:40:44 +00:00
the input symbol group and candidate side/volume are provided, projected order
margin is applied according to < code > projection_mode</ code > :</ p >
< ul >
< li >< code > "add"</ code > (default): adds candidate margin to the group total.</ li >
< li >< code > "replace_symbol"</ code > : subtracts current margin for < code > new_symbol</ code > , then
adds candidate margin. Useful for reversal-style projections where the new
order is intended to replace existing exposure for that symbol.</ li >
</ ul >
< p > If the candidate margin estimation fails, the subtraction is also skipped so
the operation is atomic. Invalid equity always raises to fail closed.</ p >
2026-06-14 17:47:52 +00:00
2026-06-23 16:59:18 +00:00
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
2026-06-11 10:33:27 +00:00
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
2026-06-23 16:59:18 +00:00
< code >< span title = "AttributeError" > AttributeError</ span ></ code >
2026-06-22 19:40:55 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-23 16:59:18 +00:00
< p > When symbol margin lookup or projected margin lookup
fails and < code > suppress_errors</ code > is < code > False</ code > .</ p >
2026-06-22 19:40:55 +00:00
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
2026-06-23 16:59:18 +00:00
< code >< span title = "pdmt5.Mt5RuntimeError" > Mt5RuntimeError</ span ></ code >
2026-06-22 19:40:55 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-23 16:59:18 +00:00
< p > When symbol margin lookup or projected margin lookup
fails and < code > suppress_errors</ code > is < code > False</ code > .</ p >
2026-06-11 10:33:27 +00:00
</ div >
</ td >
</ tr >
2026-06-14 17:47:52 +00:00
< tr class = "doc-section-item" >
< td >
2026-06-26 13:28:39 +00:00
< code >< a class = "autorefs autorefs-internal" title = "Mt5OperationError (mt5cli.exceptions.Mt5OperationError)" href = "../exceptions/#mt5cli.exceptions.Mt5OperationError" > Mt5OperationError</ a ></ code >
2026-06-11 10:33:27 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-23 16:59:18 +00:00
< p > When account equity is invalid, or when symbol margin
lookup or projected margin lookup fails and < code > suppress_errors</ code > is
< code > False</ code > .</ p >
2026-06-11 10:33:27 +00:00
</ div >
</ td >
</ tr >
2026-06-14 17:47:52 +00:00
</ tbody >
</ table >
2026-06-11 10:33:27 +00:00
2026-06-14 17:47:52 +00:00
< details class = "mkdocstrings-source" >
2026-06-23 07:31:36 +00:00
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1139" > 1139</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1140" > 1140</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1141" > 1141</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1142" > 1142</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1143" > 1143</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1144" > 1144</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1145" > 1145</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1146" > 1146</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1147" > 1147</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1148" > 1148</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1149" > 1149</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1150" > 1150</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1151" > 1151</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1152" > 1152</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1153" > 1153</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1154" > 1154</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1155" > 1155</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1156" > 1156</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1157" > 1157</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1158" > 1158</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1159" > 1159</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1160" > 1160</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1161" > 1161</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1162" > 1162</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1163" > 1163</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1164" > 1164</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1165" > 1165</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1166" > 1166</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1167" > 1167</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1168" > 1168</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1169" > 1169</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1170" > 1170</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1171" > 1171</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1172" > 1172</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1173" > 1173</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1174" > 1174</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1175" > 1175</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1176" > 1176</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1177" > 1177</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1178" > 1178</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1179" > 1179</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1180" > 1180</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1181" > 1181</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1182" > 1182</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1183" > 1183</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1184" > 1184</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1185" > 1185</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1186" > 1186</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1187" > 1187</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1188" > 1188</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1189" > 1189</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1190" > 1190</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1191" > 1191</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1192" > 1192</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1193" > 1193</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1194" > 1194</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1195" > 1195</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1196" > 1196</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1197" > 1197</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1198" > 1198</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1199" > 1199</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1200" > 1200</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1201" > 1201</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1202" > 1202</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1139" name = "__codelineno-0-1139" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_symbol_group_margin_ratio</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1140" name = "__codelineno-0-1140" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1141" name = "__codelineno-0-1141" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1142" name = "__codelineno-0-1142" ></ a > < span class = "n" > symbols</ span >< span class = "p" > :</ span > < span class = "n" > Sequence</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ],</ span >
< a id = "__codelineno-0-1143" name = "__codelineno-0-1143" ></ a > < span class = "n" > new_symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1144" name = "__codelineno-0-1144" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > :</ span > < span class = "n" > OrderSide</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1145" name = "__codelineno-0-1145" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > =</ span > < span class = "mf" > 0.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1146" name = "__codelineno-0-1146" ></ a > < span class = "n" > suppress_errors</ span >< span class = "p" > :</ span > < span class = "nb" > bool</ span > < span class = "o" > =</ span > < span class = "kc" > True</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1147" name = "__codelineno-0-1147" ></ a > < span class = "n" > projection_mode</ span >< span class = "p" > :</ span > < span class = "n" > ProjectionMode</ span > < span class = "o" > =</ span > < span class = "s2" > " add" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1148" name = "__codelineno-0-1148" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1149" name = "__codelineno-0-1149" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return estimated symbol-group margin over account equity.</ span >
< a id = "__codelineno-0-1150" name = "__codelineno-0-1150" ></ a >
< a id = "__codelineno-0-1151" name = "__codelineno-0-1151" ></ a >< span class = "sd" > Per-symbol current exposure is summed with</ span >
< a id = "__codelineno-0-1152" name = "__codelineno-0-1152" ></ a >< span class = "sd" > :func:`calculate_positions_margin_by_symbol`. When ``new_symbol`` is inside</ span >
< a id = "__codelineno-0-1153" name = "__codelineno-0-1153" ></ a >< span class = "sd" > the input symbol group and candidate side/volume are provided, projected order</ span >
< a id = "__codelineno-0-1154" name = "__codelineno-0-1154" ></ a >< span class = "sd" > margin is applied according to ``projection_mode``:</ span >
< a id = "__codelineno-0-1155" name = "__codelineno-0-1155" ></ a >
< a id = "__codelineno-0-1156" name = "__codelineno-0-1156" ></ a >< span class = "sd" > - ``" add" `` (default): adds candidate margin to the group total.</ span >
< a id = "__codelineno-0-1157" name = "__codelineno-0-1157" ></ a >< span class = "sd" > - ``" replace_symbol" ``: subtracts current margin for ``new_symbol``, then</ span >
< a id = "__codelineno-0-1158" name = "__codelineno-0-1158" ></ a >< span class = "sd" > adds candidate margin. Useful for reversal-style projections where the new</ span >
< a id = "__codelineno-0-1159" name = "__codelineno-0-1159" ></ a >< span class = "sd" > order is intended to replace existing exposure for that symbol.</ span >
< a id = "__codelineno-0-1160" name = "__codelineno-0-1160" ></ a >
< a id = "__codelineno-0-1161" name = "__codelineno-0-1161" ></ a >< span class = "sd" > If the candidate margin estimation fails, the subtraction is also skipped so</ span >
< a id = "__codelineno-0-1162" name = "__codelineno-0-1162" ></ a >< span class = "sd" > the operation is atomic. Invalid equity always raises to fail closed.</ span >
< a id = "__codelineno-0-1163" name = "__codelineno-0-1163" ></ a >
< a id = "__codelineno-0-1164" name = "__codelineno-0-1164" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-1165" name = "__codelineno-0-1165" ></ a >< span class = "sd" > AttributeError: When symbol margin lookup or projected margin lookup</ span >
< a id = "__codelineno-0-1166" name = "__codelineno-0-1166" ></ a >< span class = "sd" > fails and ``suppress_errors`` is ``False``.</ span >
< a id = "__codelineno-0-1167" name = "__codelineno-0-1167" ></ a >< span class = "sd" > Mt5RuntimeError: When symbol margin lookup or projected margin lookup</ span >
< a id = "__codelineno-0-1168" name = "__codelineno-0-1168" ></ a >< span class = "sd" > fails and ``suppress_errors`` is ``False``.</ span >
< a id = "__codelineno-0-1169" name = "__codelineno-0-1169" ></ a >< span class = "sd" > Mt5OperationError: When account equity is invalid, or when symbol margin</ span >
< a id = "__codelineno-0-1170" name = "__codelineno-0-1170" ></ a >< span class = "sd" > lookup or projected margin lookup fails and ``suppress_errors`` is</ span >
< a id = "__codelineno-0-1171" name = "__codelineno-0-1171" ></ a >< span class = "sd" > ``False``.</ span >
< a id = "__codelineno-0-1172" name = "__codelineno-0-1172" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1173" name = "__codelineno-0-1173" ></ a > < span class = "n" > projection_mode</ span > < span class = "o" > =</ span > < span class = "n" > _validate_projection_mode</ span >< span class = "p" > (</ span >< span class = "n" > projection_mode</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1174" name = "__codelineno-0-1174" ></ a > < span class = "n" > equity</ span > < span class = "o" > =</ span > < span class = "n" > _account_equity</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1175" name = "__codelineno-0-1175" ></ a > < span class = "n" > unique_symbols</ span > < span class = "o" > =</ span > < span class = "nb" > list</ span >< span class = "p" > (</ span >< span class = "nb" > dict</ span >< span class = "o" > .</ span >< span class = "n" > fromkeys</ span >< span class = "p" > (</ span >< span class = "n" > symbols</ span >< span class = "p" > ))</ span >
< a id = "__codelineno-0-1176" name = "__codelineno-0-1176" ></ a > < span class = "n" > per_symbol</ span > < span class = "o" > =</ span > < span class = "n" > calculate_positions_margin_by_symbol</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1177" name = "__codelineno-0-1177" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1178" name = "__codelineno-0-1178" ></ a > < span class = "n" > symbols</ span >< span class = "o" > =</ span >< span class = "n" > unique_symbols</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1179" name = "__codelineno-0-1179" ></ a > < span class = "n" > suppress_errors</ span >< span class = "o" > =</ span >< span class = "n" > suppress_errors</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1180" name = "__codelineno-0-1180" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1181" name = "__codelineno-0-1181" ></ a > < span class = "n" > margin</ span > < span class = "o" > =</ span > < span class = "nb" > sum</ span >< span class = "p" > (</ span >< span class = "n" > per_symbol</ span >< span class = "o" > .</ span >< span class = "n" > values</ span >< span class = "p" > (),</ span > < span class = "mf" > 0.0</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1182" name = "__codelineno-0-1182" ></ a > < span class = "k" > if</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-1183" name = "__codelineno-0-1183" ></ a > < span class = "n" > new_symbol</ span > < span class = "ow" > in</ span > < span class = "n" > unique_symbols</ span >
< a id = "__codelineno-0-1184" name = "__codelineno-0-1184" ></ a > < span class = "ow" > and</ span > < span class = "n" > new_position_side</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-1185" name = "__codelineno-0-1185" ></ a > < span class = "ow" > and</ span > < span class = "n" > new_position_volume</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span >
< a id = "__codelineno-0-1186" name = "__codelineno-0-1186" ></ a > < span class = "p" > ):</ span >
< a id = "__codelineno-0-1187" name = "__codelineno-0-1187" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1188" name = "__codelineno-0-1188" ></ a > < span class = "n" > candidate_margin</ span > < span class = "o" > =</ span > < span class = "n" > estimate_order_margin</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1189" name = "__codelineno-0-1189" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1190" name = "__codelineno-0-1190" ></ a > < span class = "n" > new_symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1191" name = "__codelineno-0-1191" ></ a > < span class = "n" > new_position_side</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1192" name = "__codelineno-0-1192" ></ a > < span class = "n" > new_position_volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1193" name = "__codelineno-0-1193" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1194" name = "__codelineno-0-1194" ></ a > < span class = "k" > except</ span > < span class = "p" > (</ span >< span class = "n" > Mt5OperationError</ span >< span class = "p" > ,</ span > < span class = "n" > Mt5RuntimeError</ span >< span class = "p" > ,</ span > < span class = "ne" > AttributeError</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-1195" name = "__codelineno-0-1195" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > suppress_errors</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1196" name = "__codelineno-0-1196" ></ a > < span class = "k" > raise</ span >
< a id = "__codelineno-0-1197" name = "__codelineno-0-1197" ></ a > < span class = "n" > _logger</ span >< span class = "o" > .</ span >< span class = "n" > warning</ span >< span class = "p" > (</ span >< span class = "s2" > " Skipping projected margin for </ span >< span class = "si" > %r</ span >< span class = "s2" > ." </ span >< span class = "p" > ,</ span > < span class = "n" > new_symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1198" name = "__codelineno-0-1198" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1199" name = "__codelineno-0-1199" ></ a > < span class = "k" > if</ span > < span class = "n" > projection_mode</ span > < span class = "o" > ==</ span > < span class = "s2" > " replace_symbol" </ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1200" name = "__codelineno-0-1200" ></ a > < span class = "n" > margin</ span > < span class = "o" > =</ span > < span class = "nb" > max</ span >< span class = "p" > (</ span >< span class = "mf" > 0.0</ span >< span class = "p" > ,</ span > < span class = "n" > margin</ span > < span class = "o" > -</ span > < span class = "n" > per_symbol</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "n" > new_symbol</ span >< span class = "p" > ,</ span > < span class = "mf" > 0.0</ span >< span class = "p" > ))</ span >
< a id = "__codelineno-0-1201" name = "__codelineno-0-1201" ></ a > < span class = "n" > margin</ span > < span class = "o" > +=</ span > < span class = "n" > candidate_margin</ span >
< a id = "__codelineno-0-1202" name = "__codelineno-0-1202" ></ a > < span class = "k" > return</ span > < span class = "n" > margin</ span > < span class = "o" > /</ span > < span class = "n" > equity</ span >
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
2026-06-14 17:47:52 +00:00
2026-06-23 16:59:18 +00:00
< h3 id = "mt5cli.trading.calculate_trailing_stop_updates" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_trailing_stop_updates</ span >
2026-06-14 17:47:52 +00:00
2026-06-23 16:59:18 +00:00
< a href = "#mt5cli.trading.calculate_trailing_stop_updates" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_trailing_stop_updates</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-14 17:47:52 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
2026-06-23 16:59:18 +00:00
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > trailing_stop_ratio</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
2026-07-04 05:20:25 +00:00
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "dict" > dict</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "int" > int</ span ></ span >< span class = "p" > ,</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ]</ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
2026-06-23 16:59:18 +00:00
< p > Return per-ticket trailing stop-loss updates for open symbol positions.</ p >
< p > Buy positions trail from bid using < code > bid * (1 - trailing_stop_ratio)</ code > .
Sell positions trail from ask using < code > ask * (1 + trailing_stop_ratio)</ code > .
Existing stop losses are preserved when they are already more favorable.
Missing symbol metadata returns an empty update map. Positions with a
missing side-specific tick price are skipped.</ p >
2026-06-14 17:47:52 +00:00
2026-06-23 16:59:18 +00:00
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1629" > 1629</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1630" > 1630</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1631" > 1631</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1632" > 1632</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1633" > 1633</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1634" > 1634</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1635" > 1635</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1636" > 1636</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1637" > 1637</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1638" > 1638</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1639" > 1639</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1640" > 1640</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1641" > 1641</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1642" > 1642</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1643" > 1643</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1644" > 1644</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1645" > 1645</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1646" > 1646</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1647" > 1647</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1648" > 1648</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1649" > 1649</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1650" > 1650</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1651" > 1651</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1652" > 1652</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1653" > 1653</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1654" > 1654</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1655" > 1655</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1656" > 1656</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1657" > 1657</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1658" > 1658</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1659" > 1659</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1660" > 1660</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1661" > 1661</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1662" > 1662</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1663" > 1663</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1664" > 1664</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1665" > 1665</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1666" > 1666</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1667" > 1667</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1668" > 1668</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1669" > 1669</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1670" > 1670</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1671" > 1671</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1672" > 1672</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1673" > 1673</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1674" > 1674</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1629" name = "__codelineno-0-1629" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_trailing_stop_updates</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1630" name = "__codelineno-0-1630" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1631" name = "__codelineno-0-1631" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1632" name = "__codelineno-0-1632" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1633" name = "__codelineno-0-1633" ></ a > < span class = "n" > trailing_stop_ratio</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1634" name = "__codelineno-0-1634" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1635" name = "__codelineno-0-1635" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > dict</ span >< span class = "p" > [</ span >< span class = "nb" > int</ span >< span class = "p" > ,</ span > < span class = "nb" > float</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-1636" name = "__codelineno-0-1636" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return per-ticket trailing stop-loss updates for open symbol positions.</ span >
< a id = "__codelineno-0-1637" name = "__codelineno-0-1637" ></ a >
< a id = "__codelineno-0-1638" name = "__codelineno-0-1638" ></ a >< span class = "sd" > Buy positions trail from bid using ``bid * (1 - trailing_stop_ratio)``.</ span >
< a id = "__codelineno-0-1639" name = "__codelineno-0-1639" ></ a >< span class = "sd" > Sell positions trail from ask using ``ask * (1 + trailing_stop_ratio)``.</ span >
< a id = "__codelineno-0-1640" name = "__codelineno-0-1640" ></ a >< span class = "sd" > Existing stop losses are preserved when they are already more favorable.</ span >
< a id = "__codelineno-0-1641" name = "__codelineno-0-1641" ></ a >< span class = "sd" > Missing symbol metadata returns an empty update map. Positions with a</ span >
< a id = "__codelineno-0-1642" name = "__codelineno-0-1642" ></ a >< span class = "sd" > missing side-specific tick price are skipped.</ span >
< a id = "__codelineno-0-1643" name = "__codelineno-0-1643" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1644" name = "__codelineno-0-1644" ></ a > < span class = "n" > _require_protective_ratio</ span >< span class = "p" > (</ span >< span class = "n" > trailing_stop_ratio</ span >< span class = "p" > ,</ span > < span class = "s2" > " trailing_stop_ratio" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1645" name = "__codelineno-0-1645" ></ a > < span class = "n" > positions</ span > < span class = "o" > =</ span > < span class = "n" > _filter_positions</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1646" name = "__codelineno-0-1646" ></ a > < span class = "n" > get_positions_frame</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > ),</ span > < span class = "n" > magic</ span >< span class = "o" > =</ span >< span class = "n" > magic</ span >
< a id = "__codelineno-0-1647" name = "__codelineno-0-1647" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1648" name = "__codelineno-0-1648" ></ a > < span class = "k" > if</ span > < span class = "n" > positions</ span >< span class = "o" > .</ span >< span class = "n" > empty</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1649" name = "__codelineno-0-1649" ></ a > < span class = "k" > return</ span > < span class = "p" > {}</ span >
< a id = "__codelineno-0-1650" name = "__codelineno-0-1650" ></ a > < span class = "n" > tick</ span > < span class = "o" > =</ span > < span class = "n" > get_tick_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1651" name = "__codelineno-0-1651" ></ a > < span class = "n" > bid</ span > < span class = "o" > =</ span > < span class = "n" > extract_tick_price</ span >< span class = "p" > (</ span >< span class = "n" > tick</ span >< span class = "p" > ,</ span > < span class = "s2" > " bid" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1652" name = "__codelineno-0-1652" ></ a > < span class = "n" > ask</ span > < span class = "o" > =</ span > < span class = "n" > extract_tick_price</ span >< span class = "p" > (</ span >< span class = "n" > tick</ span >< span class = "p" > ,</ span > < span class = "s2" > " ask" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1653" name = "__codelineno-0-1653" ></ a > < span class = "n" > digits</ span > < span class = "o" > =</ span > < span class = "n" > _symbol_digits</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1654" name = "__codelineno-0-1654" ></ a > < span class = "k" > if</ span > < span class = "n" > digits</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1655" name = "__codelineno-0-1655" ></ a > < span class = "k" > return</ span > < span class = "p" > {}</ span >
< a id = "__codelineno-0-1656" name = "__codelineno-0-1656" ></ a >
< a id = "__codelineno-0-1657" name = "__codelineno-0-1657" ></ a > < span class = "n" > updates</ span >< span class = "p" > :</ span > < span class = "nb" > dict</ span >< span class = "p" > [</ span >< span class = "nb" > int</ span >< span class = "p" > ,</ span > < span class = "nb" > float</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "p" > {}</ span >
< a id = "__codelineno-0-1658" name = "__codelineno-0-1658" ></ a > < span class = "k" > for</ span > < span class = "n" > row</ span > < span class = "ow" > in</ span > < span class = "n" > positions</ span >< span class = "o" > .</ span >< span class = "n" > to_dict</ span >< span class = "p" > (</ span >< span class = "s2" > " records" </ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-1659" name = "__codelineno-0-1659" ></ a > < span class = "n" > ticket</ span > < span class = "o" > =</ span > < span class = "n" > _position_ticket</ span >< span class = "p" > (</ span >< span class = "n" > row</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " ticket" </ span >< span class = "p" > ))</ span >
< a id = "__codelineno-0-1660" name = "__codelineno-0-1660" ></ a > < span class = "k" > if</ span > < span class = "n" > ticket</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1661" name = "__codelineno-0-1661" ></ a > < span class = "k" > continue</ span >
< a id = "__codelineno-0-1662" name = "__codelineno-0-1662" ></ a > < span class = "n" > next_sl</ span > < span class = "o" > =</ span > < span class = "n" > _trailing_stop_loss</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1663" name = "__codelineno-0-1663" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1664" name = "__codelineno-0-1664" ></ a > < span class = "n" > position_type</ span >< span class = "o" > =</ span >< span class = "n" > row</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " type" </ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1665" name = "__codelineno-0-1665" ></ a > < span class = "n" > current_sl</ span >< span class = "o" > =</ span >< span class = "n" > _current_stop_loss</ span >< span class = "p" > (</ span >< span class = "n" > row</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " sl" </ span >< span class = "p" > )),</ span >
< a id = "__codelineno-0-1666" name = "__codelineno-0-1666" ></ a > < span class = "n" > bid</ span >< span class = "o" > =</ span >< span class = "n" > bid</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1667" name = "__codelineno-0-1667" ></ a > < span class = "n" > ask</ span >< span class = "o" > =</ span >< span class = "n" > ask</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1668" name = "__codelineno-0-1668" ></ a > < span class = "n" > digits</ span >< span class = "o" > =</ span >< span class = "n" > digits</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1669" name = "__codelineno-0-1669" ></ a > < span class = "n" > trailing_stop_ratio</ span >< span class = "o" > =</ span >< span class = "n" > trailing_stop_ratio</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1670" name = "__codelineno-0-1670" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1671" name = "__codelineno-0-1671" ></ a > < span class = "k" > if</ span > < span class = "n" > next_sl</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1672" name = "__codelineno-0-1672" ></ a > < span class = "k" > continue</ span >
< a id = "__codelineno-0-1673" name = "__codelineno-0-1673" ></ a > < span class = "n" > updates</ span >< span class = "p" > [</ span >< span class = "n" > ticket</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > next_sl</ span >
< a id = "__codelineno-0-1674" name = "__codelineno-0-1674" ></ a > < span class = "k" > return</ span > < span class = "n" > updates</ span >
2026-06-23 18:44:34 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
2026-06-23 16:59:18 +00:00
< h3 id = "mt5cli.trading.calculate_volume_by_margin" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > calculate_volume_by_margin</ span >
< a href = "#mt5cli.trading.calculate_volume_by_margin" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > calculate_volume_by_margin</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-23 16:59:18 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > available_margin</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > order_side</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderSide
module-attribute
(mt5cli.trading.OrderSide)" href = "#mt5cli.trading.OrderSide" > OrderSide</ a ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Calculate max normalized volume affordable for one side.</ p >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Largest stepped volume whose actual margin (from < code > order_calc_margin</ code > )</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > fits within < code > available_margin</ code > , rounded down to symbol volume</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > constraints; < code > 0.0</ code > when no affordable step exists.</ p >
</ div >
</ td >
</ tr >
2026-06-26 13:28:39 +00:00
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< a class = "autorefs autorefs-internal" title = "Mt5OperationError (mt5cli.exceptions.Mt5OperationError)" href = "../exceptions/#mt5cli.exceptions.Mt5OperationError" > Mt5OperationError</ a ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > If symbol volume constraints or tick data are invalid.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1272" > 1272</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1273" > 1273</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1274" > 1274</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1275" > 1275</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1276" > 1276</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1277" > 1277</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1278" > 1278</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1279" > 1279</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1280" > 1280</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1281" > 1281</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1282" > 1282</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1283" > 1283</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1284" > 1284</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1285" > 1285</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1286" > 1286</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1287" > 1287</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1288" > 1288</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1289" > 1289</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1290" > 1290</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1291" > 1291</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1292" > 1292</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1293" > 1293</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1294" > 1294</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1295" > 1295</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1296" > 1296</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1297" > 1297</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1298" > 1298</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1299" > 1299</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1300" > 1300</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1301" > 1301</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1302" > 1302</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1303" > 1303</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1304" > 1304</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1305" > 1305</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1306" > 1306</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1307" > 1307</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1308" > 1308</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1309" > 1309</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1310" > 1310</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1311" > 1311</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1312" > 1312</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1313" > 1313</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1314" > 1314</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1315" > 1315</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1316" > 1316</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1317" > 1317</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1318" > 1318</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1319" > 1319</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1320" > 1320</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1321" > 1321</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1322" > 1322</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1323" > 1323</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1324" > 1324</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1325" > 1325</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1326" > 1326</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1327" > 1327</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1328" > 1328</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1329" > 1329</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1330" > 1330</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1331" > 1331</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1332" > 1332</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1333" > 1333</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1334" > 1334</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1335" > 1335</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1336" > 1336</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1337" > 1337</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1338" > 1338</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1339" > 1339</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1340" > 1340</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1341" > 1341</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1272" name = "__codelineno-0-1272" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > calculate_volume_by_margin</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1273" name = "__codelineno-0-1273" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1274" name = "__codelineno-0-1274" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1275" name = "__codelineno-0-1275" ></ a > < span class = "n" > available_margin</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1276" name = "__codelineno-0-1276" ></ a > < span class = "n" > order_side</ span >< span class = "p" > :</ span > < span class = "n" > OrderSide</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1277" name = "__codelineno-0-1277" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1278" name = "__codelineno-0-1278" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Calculate max normalized volume affordable for one side.</ span >
< a id = "__codelineno-0-1279" name = "__codelineno-0-1279" ></ a >
< a id = "__codelineno-0-1280" name = "__codelineno-0-1280" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-1281" name = "__codelineno-0-1281" ></ a >< span class = "sd" > Largest stepped volume whose actual margin (from ``order_calc_margin``)</ span >
< a id = "__codelineno-0-1282" name = "__codelineno-0-1282" ></ a >< span class = "sd" > fits within ``available_margin``, rounded down to symbol volume</ span >
< a id = "__codelineno-0-1283" name = "__codelineno-0-1283" ></ a >< span class = "sd" > constraints; ``0.0`` when no affordable step exists.</ span >
< a id = "__codelineno-0-1284" name = "__codelineno-0-1284" ></ a >
< a id = "__codelineno-0-1285" name = "__codelineno-0-1285" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-1286" name = "__codelineno-0-1286" ></ a >< span class = "sd" > Mt5OperationError: If symbol volume constraints or tick data are invalid.</ span >
< a id = "__codelineno-0-1287" name = "__codelineno-0-1287" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1288" name = "__codelineno-0-1288" ></ a > < span class = "k" > if</ span > < span class = "n" > available_margin</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1289" name = "__codelineno-0-1289" ></ a > < span class = "k" > return</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-1290" name = "__codelineno-0-1290" ></ a > < span class = "n" > symbol_info</ span > < span class = "o" > =</ span > < span class = "n" > get_symbol_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1291" name = "__codelineno-0-1291" ></ a > < span class = "n" > volume_min</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > symbol_info</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " volume_min" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1292" name = "__codelineno-0-1292" ></ a > < span class = "n" > volume_max</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > symbol_info</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " volume_max" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1293" name = "__codelineno-0-1293" ></ a > < span class = "n" > volume_step</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > symbol_info</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " volume_step" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "n" > volume_min</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1294" name = "__codelineno-0-1294" ></ a > < span class = "k" > if</ span > < span class = "n" > volume_min</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span > < span class = "ow" > or</ span > < span class = "n" > volume_step</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1295" name = "__codelineno-0-1295" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Invalid volume constraints for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-1296" name = "__codelineno-0-1296" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1297" name = "__codelineno-0-1297" ></ a > < span class = "n" > side</ span > < span class = "o" > =</ span > < span class = "n" > _normalize_order_side</ span >< span class = "p" > (</ span >< span class = "n" > order_side</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1298" name = "__codelineno-0-1298" ></ a > < span class = "n" > price</ span > < span class = "o" > =</ span > < span class = "n" > extract_tick_price</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1299" name = "__codelineno-0-1299" ></ a > < span class = "n" > get_tick_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > ),</ span > < span class = "s2" > " ask" </ span > < span class = "k" > if</ span > < span class = "n" > side</ span > < span class = "o" > ==</ span > < span class = "s2" > " BUY" </ span > < span class = "k" > else</ span > < span class = "s2" > " bid" </ span >
< a id = "__codelineno-0-1300" name = "__codelineno-0-1300" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1301" name = "__codelineno-0-1301" ></ a > < span class = "k" > if</ span > < span class = "n" > price</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1302" name = "__codelineno-0-1302" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Tick price is unavailable for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-1303" name = "__codelineno-0-1303" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1304" name = "__codelineno-0-1304" ></ a > < span class = "n" > order_type</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-1305" name = "__codelineno-0-1305" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > ORDER_TYPE_BUY</ span > < span class = "k" > if</ span > < span class = "n" > side</ span > < span class = "o" > ==</ span > < span class = "s2" > " BUY" </ span > < span class = "k" > else</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > ORDER_TYPE_SELL</ span >
< a id = "__codelineno-0-1306" name = "__codelineno-0-1306" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1307" name = "__codelineno-0-1307" ></ a > < span class = "n" > min_margin</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > order_calc_margin</ span >< span class = "p" > (</ span >< span class = "n" > order_type</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > volume_min</ span >< span class = "p" > ,</ span > < span class = "n" > price</ span >< span class = "p" > ))</ span >
< a id = "__codelineno-0-1308" name = "__codelineno-0-1308" ></ a > < span class = "k" > if</ span > < span class = "n" > min_margin</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span > < span class = "ow" > or</ span > < span class = "n" > min_margin</ span > < span class = "o" > > </ span > < span class = "n" > available_margin</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1309" name = "__codelineno-0-1309" ></ a > < span class = "k" > return</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-1310" name = "__codelineno-0-1310" ></ a > < span class = "n" > lo</ span > < span class = "o" > =</ span > < span class = "mi" > 0</ span >
< a id = "__codelineno-0-1311" name = "__codelineno-0-1311" ></ a > < span class = "n" > hi</ span > < span class = "o" > =</ span > < span class = "nb" > int</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1312" name = "__codelineno-0-1312" ></ a > < span class = "nb" > max</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1313" name = "__codelineno-0-1313" ></ a > < span class = "mi" > 0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1314" name = "__codelineno-0-1314" ></ a > < span class = "n" > floor</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1315" name = "__codelineno-0-1315" ></ a > < span class = "p" > (</ span >
< a id = "__codelineno-0-1316" name = "__codelineno-0-1316" ></ a > < span class = "p" > (</ span >
< a id = "__codelineno-0-1317" name = "__codelineno-0-1317" ></ a > < span class = "nb" > min</ span >< span class = "p" > (</ span >< span class = "n" > available_margin</ span > < span class = "o" > /</ span > < span class = "n" > min_margin</ span > < span class = "o" > *</ span > < span class = "n" > volume_min</ span >< span class = "p" > ,</ span > < span class = "n" > volume_max</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1318" name = "__codelineno-0-1318" ></ a > < span class = "k" > if</ span > < span class = "n" > volume_max</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span >
< a id = "__codelineno-0-1319" name = "__codelineno-0-1319" ></ a > < span class = "k" > else</ span > < span class = "n" > available_margin</ span > < span class = "o" > /</ span > < span class = "n" > min_margin</ span > < span class = "o" > *</ span > < span class = "n" > volume_min</ span >
< a id = "__codelineno-0-1320" name = "__codelineno-0-1320" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1321" name = "__codelineno-0-1321" ></ a > < span class = "o" > -</ span > < span class = "n" > volume_min</ span >
< a id = "__codelineno-0-1322" name = "__codelineno-0-1322" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1323" name = "__codelineno-0-1323" ></ a > < span class = "o" > /</ span > < span class = "n" > volume_step</ span >
< a id = "__codelineno-0-1324" name = "__codelineno-0-1324" ></ a > < span class = "o" > +</ span > < span class = "mf" > 1e-12</ span >
< a id = "__codelineno-0-1325" name = "__codelineno-0-1325" ></ a > < span class = "p" > ),</ span >
< a id = "__codelineno-0-1326" name = "__codelineno-0-1326" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1327" name = "__codelineno-0-1327" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1328" name = "__codelineno-0-1328" ></ a > < span class = "n" > best</ span > < span class = "o" > =</ span > < span class = "o" > -</ span >< span class = "mi" > 1</ span >
< a id = "__codelineno-0-1329" name = "__codelineno-0-1329" ></ a >
< a id = "__codelineno-0-1330" name = "__codelineno-0-1330" ></ a > < span class = "k" > while</ span > < span class = "n" > lo</ span > < span class = "o" > < =</ span > < span class = "n" > hi</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1331" name = "__codelineno-0-1331" ></ a > < span class = "n" > mid</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >< span class = "n" > lo</ span > < span class = "o" > +</ span > < span class = "n" > hi</ span >< span class = "p" > )</ span > < span class = "o" > //</ span > < span class = "mi" > 2</ span >
< a id = "__codelineno-0-1332" name = "__codelineno-0-1332" ></ a > < span class = "n" > normalized</ span > < span class = "o" > =</ span > < span class = "nb" > round</ span >< span class = "p" > (</ span >< span class = "n" > volume_min</ span > < span class = "o" > +</ span > < span class = "n" > mid</ span > < span class = "o" > *</ span > < span class = "n" > volume_step</ span >< span class = "p" > ,</ span > < span class = "mi" > 10</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1333" name = "__codelineno-0-1333" ></ a > < span class = "n" > actual</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > order_calc_margin</ span >< span class = "p" > (</ span >< span class = "n" > order_type</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > normalized</ span >< span class = "p" > ,</ span > < span class = "n" > price</ span >< span class = "p" > ))</ span >
< a id = "__codelineno-0-1334" name = "__codelineno-0-1334" ></ a >
< a id = "__codelineno-0-1335" name = "__codelineno-0-1335" ></ a > < span class = "k" > if</ span > < span class = "n" > actual</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span > < span class = "ow" > and</ span > < span class = "n" > actual</ span > < span class = "o" > < =</ span > < span class = "n" > available_margin</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1336" name = "__codelineno-0-1336" ></ a > < span class = "n" > best</ span > < span class = "o" > =</ span > < span class = "n" > mid</ span >
< a id = "__codelineno-0-1337" name = "__codelineno-0-1337" ></ a > < span class = "n" > lo</ span > < span class = "o" > =</ span > < span class = "n" > mid</ span > < span class = "o" > +</ span > < span class = "mi" > 1</ span >
< a id = "__codelineno-0-1338" name = "__codelineno-0-1338" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1339" name = "__codelineno-0-1339" ></ a > < span class = "n" > hi</ span > < span class = "o" > =</ span > < span class = "n" > mid</ span > < span class = "o" > -</ span > < span class = "mi" > 1</ span >
< a id = "__codelineno-0-1340" name = "__codelineno-0-1340" ></ a >
< a id = "__codelineno-0-1341" name = "__codelineno-0-1341" ></ a > < span class = "k" > return</ span > < span class = "nb" > round</ span >< span class = "p" > (</ span >< span class = "n" > volume_min</ span > < span class = "o" > +</ span > < span class = "n" > best</ span > < span class = "o" > *</ span > < span class = "n" > volume_step</ span >< span class = "p" > ,</ span > < span class = "mi" > 10</ span >< span class = "p" > )</ span > < span class = "k" > if</ span > < span class = "n" > best</ span > < span class = "o" > > =</ span > < span class = "mi" > 0</ span > < span class = "k" > else</ span > < span class = "mf" > 0.0</ span >
2026-06-23 16:59:18 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.close_open_positions" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > close_open_positions</ span >
< a href = "#mt5cli.trading.close_open_positions" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > close_open_positions</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-23 16:59:18 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbols</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "list" > list</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ]</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > tickets</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "list" > list</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "int" > int</ span ></ span >< span class = "p" > ]</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
2026-07-04 05:20:25 +00:00
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > deviation</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "n" > comment</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a > < span class = "n" > dry_run</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "bool" > bool</ span ></ span > < span class = "o" > =</ span > < span class = "kc" > False</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "list" > list</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderExecutionResult (mt5cli.trading.OrderExecutionResult)" href = "#mt5cli.trading.OrderExecutionResult" > OrderExecutionResult</ a ></ span >< span class = "p" > ]</ span >
2026-06-23 16:59:18 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Close matching open positions.</ p >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "list" > list</ span > [< a class = "autorefs autorefs-internal" title = "OrderExecutionResult (mt5cli.trading.OrderExecutionResult)" href = "#mt5cli.trading.OrderExecutionResult" > OrderExecutionResult</ a > ]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Normalized execution results for matching positions.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1546" > 1546</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1547" > 1547</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1548" > 1548</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1549" > 1549</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1550" > 1550</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1551" > 1551</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1552" > 1552</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1553" > 1553</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1554" > 1554</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1555" > 1555</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1556" > 1556</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1557" > 1557</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1558" > 1558</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1559" > 1559</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1560" > 1560</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1561" > 1561</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1562" > 1562</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1563" > 1563</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1564" > 1564</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1565" > 1565</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1566" > 1566</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1567" > 1567</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1568" > 1568</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1569" > 1569</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1570" > 1570</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1571" > 1571</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1572" > 1572</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1573" > 1573</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1574" > 1574</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1575" > 1575</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1576" > 1576</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1577" > 1577</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1578" > 1578</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1579" > 1579</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1580" > 1580</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1581" > 1581</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1582" > 1582</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1583" > 1583</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1546" name = "__codelineno-0-1546" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > close_open_positions</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1547" name = "__codelineno-0-1547" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1548" name = "__codelineno-0-1548" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1549" name = "__codelineno-0-1549" ></ a > < span class = "n" > symbols</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "nb" > list</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ]</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1550" name = "__codelineno-0-1550" ></ a > < span class = "n" > tickets</ span >< span class = "p" > :</ span > < span class = "nb" > list</ span >< span class = "p" > [</ span >< span class = "nb" > int</ span >< span class = "p" > ]</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1551" name = "__codelineno-0-1551" ></ a > < span class = "n" > deviation</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1552" name = "__codelineno-0-1552" ></ a > < span class = "n" > comment</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1553" name = "__codelineno-0-1553" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1554" name = "__codelineno-0-1554" ></ a > < span class = "n" > dry_run</ span >< span class = "p" > :</ span > < span class = "nb" > bool</ span > < span class = "o" > =</ span > < span class = "kc" > False</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1555" name = "__codelineno-0-1555" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > list</ span >< span class = "p" > [</ span >< span class = "n" > OrderExecutionResult</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-1556" name = "__codelineno-0-1556" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Close matching open positions.</ span >
< a id = "__codelineno-0-1557" name = "__codelineno-0-1557" ></ a >
< a id = "__codelineno-0-1558" name = "__codelineno-0-1558" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-1559" name = "__codelineno-0-1559" ></ a >< span class = "sd" > Normalized execution results for matching positions.</ span >
< a id = "__codelineno-0-1560" name = "__codelineno-0-1560" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1561" name = "__codelineno-0-1561" ></ a > < span class = "n" > positions</ span > < span class = "o" > =</ span > < span class = "n" > _filter_positions</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1562" name = "__codelineno-0-1562" ></ a > < span class = "n" > get_positions_frame</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1563" name = "__codelineno-0-1563" ></ a > < span class = "n" > symbols</ span >< span class = "o" > =</ span >< span class = "n" > symbols</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1564" name = "__codelineno-0-1564" ></ a > < span class = "n" > tickets</ span >< span class = "o" > =</ span >< span class = "n" > tickets</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1565" name = "__codelineno-0-1565" ></ a > < span class = "n" > magic</ span >< span class = "o" > =</ span >< span class = "n" > magic</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1566" name = "__codelineno-0-1566" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1567" name = "__codelineno-0-1567" ></ a > < span class = "n" > results</ span >< span class = "p" > :</ span > < span class = "nb" > list</ span >< span class = "p" > [</ span >< span class = "n" > OrderExecutionResult</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "p" > []</ span >
< a id = "__codelineno-0-1568" name = "__codelineno-0-1568" ></ a > < span class = "k" > for</ span > < span class = "n" > row</ span > < span class = "ow" > in</ span > < span class = "n" > positions</ span >< span class = "o" > .</ span >< span class = "n" > to_dict</ span >< span class = "p" > (</ span >< span class = "s2" > " records" </ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-1569" name = "__codelineno-0-1569" ></ a > < span class = "n" > pos_type</ span > < span class = "o" > =</ span > < span class = "n" > row</ span >< span class = "p" > [</ span >< span class = "s2" > " type" </ span >< span class = "p" > ]</ span >
< a id = "__codelineno-0-1570" name = "__codelineno-0-1570" ></ a > < span class = "n" > side</ span >< span class = "p" > :</ span > < span class = "n" > OrderSide</ span > < span class = "o" > =</ span > < span class = "s2" > " SELL" </ span > < span class = "k" > if</ span > < span class = "n" > pos_type</ span > < span class = "o" > ==</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > POSITION_TYPE_BUY</ span > < span class = "k" > else</ span > < span class = "s2" > " BUY" </ span >
< a id = "__codelineno-0-1571" name = "__codelineno-0-1571" ></ a > < span class = "n" > result</ span > < span class = "o" > =</ span > < span class = "n" > place_market_order</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1572" name = "__codelineno-0-1572" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1573" name = "__codelineno-0-1573" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "nb" > str</ span >< span class = "p" > (</ span >< span class = "n" > row</ span >< span class = "p" > [</ span >< span class = "s2" > " symbol" </ span >< span class = "p" > ]),</ span >
< a id = "__codelineno-0-1574" name = "__codelineno-0-1574" ></ a > < span class = "n" > volume</ span >< span class = "o" > =</ span >< span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > row</ span >< span class = "p" > [</ span >< span class = "s2" > " volume" </ span >< span class = "p" > ]),</ span >
< a id = "__codelineno-0-1575" name = "__codelineno-0-1575" ></ a > < span class = "n" > order_side</ span >< span class = "o" > =</ span >< span class = "n" > side</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1576" name = "__codelineno-0-1576" ></ a > < span class = "n" > position</ span >< span class = "o" > =</ span >< span class = "nb" > int</ span >< span class = "p" > (</ span >< span class = "n" > row</ span >< span class = "p" > [</ span >< span class = "s2" > " ticket" </ span >< span class = "p" > ]),</ span >
< a id = "__codelineno-0-1577" name = "__codelineno-0-1577" ></ a > < span class = "n" > deviation</ span >< span class = "o" > =</ span >< span class = "n" > deviation</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1578" name = "__codelineno-0-1578" ></ a > < span class = "n" > comment</ span >< span class = "o" > =</ span >< span class = "n" > comment</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1579" name = "__codelineno-0-1579" ></ a > < span class = "n" > magic</ span >< span class = "o" > =</ span >< span class = "n" > magic</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1580" name = "__codelineno-0-1580" ></ a > < span class = "n" > dry_run</ span >< span class = "o" > =</ span >< span class = "n" > dry_run</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1581" name = "__codelineno-0-1581" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1582" name = "__codelineno-0-1582" ></ a > < span class = "n" > results</ span >< span class = "o" > .</ span >< span class = "n" > append</ span >< span class = "p" > (</ span >< span class = "n" > result</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1583" name = "__codelineno-0-1583" ></ a > < span class = "k" > return</ span > < span class = "n" > results</ span >
2026-06-11 10:33:27 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
2026-06-14 17:47:52 +00:00
< h3 id = "mt5cli.trading.create_trading_client" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > create_trading_client</ span >
2026-06-11 10:33:27 +00:00
2026-06-14 17:47:52 +00:00
< a href = "#mt5cli.trading.create_trading_client" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > create_trading_client</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "n" > config</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "pdmt5.Mt5Config" > Mt5Config</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > login</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > password</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > server</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "n" > path</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "n" > timeout</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a > < span class = "n" > retry_count</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > =</ span > < span class = "mi" > 0</ span >< span class = "p" > ,</ span >
2026-06-29 20:29:14 +00:00
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "mt5cli.trading._TradingHistoryDealsClientProtocol" > _TradingHistoryDealsClientProtocol</ span ></ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return an initialized and logged-in trading client.</ p >
2026-06-29 20:29:14 +00:00
< p > The returned object is a raw < code > pdmt5.Mt5DataClient</ code > instance, not the
higher-level < code > mt5cli.MT5Client</ code > wrapper. Use < code > mt5_session()</ code > /
< code > MT5Client</ code > for read-only data collection. For live trading helpers
(margin, volume, order execution, position management) pass the returned
client to the strategy-agnostic helpers in this module.</ p >
< p > For history deal retrieval use
:func:< code > fetch_recent_history_deals_for_trading_client</ code > ; the returned client
satisfies :class:< code > _HistoryDealsClientProtocol</ code > so no additional wrapping is
required.</ p >
2026-06-14 17:47:52 +00:00
2026-06-26 13:28:39 +00:00
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
2026-06-29 20:29:14 +00:00
< code >< span title = "mt5cli.trading._TradingHistoryDealsClientProtocol" > _TradingHistoryDealsClientProtocol</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > A < code > pdmt5.Mt5DataClient</ code > instance satisfying < code > _Mt5ClientProtocol</ code ></ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "mt5cli.trading._TradingHistoryDealsClientProtocol" > _TradingHistoryDealsClientProtocol</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > and < code > _HistoryDealsClientProtocol</ code > . Caller is responsible for calling</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "mt5cli.trading._TradingHistoryDealsClientProtocol" > _TradingHistoryDealsClientProtocol</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p >< code > client.shutdown()</ code > when done; prefer < code > mt5_trading_session()</ code > to</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "mt5cli.trading._TradingHistoryDealsClientProtocol" > _TradingHistoryDealsClientProtocol</ span ></ code >
2026-06-26 13:28:39 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-29 20:29:14 +00:00
< p > manage lifetime automatically.</ p >
2026-06-26 13:28:39 +00:00
</ div >
</ td >
</ tr >
</ tbody >
</ table >
2026-06-14 17:47:52 +00:00
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-615" > 615</ a ></ span >
2026-06-29 20:29:14 +00:00
< span class = "normal" >< a href = "#__codelineno-0-616" > 616</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-617" > 617</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-618" > 618</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-619" > 619</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-620" > 620</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-621" > 621</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-622" > 622</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-623" > 623</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-624" > 624</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-625" > 625</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-626" > 626</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-627" > 627</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-628" > 628</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-629" > 629</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-630" > 630</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-631" > 631</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-632" > 632</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-633" > 633</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-634" > 634</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-635" > 635</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-636" > 636</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-637" > 637</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-638" > 638</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-639" > 639</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-640" > 640</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-641" > 641</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-642" > 642</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-643" > 643</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-644" > 644</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-645" > 645</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-646" > 646</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-647" > 647</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-648" > 648</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-649" > 649</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-650" > 650</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-651" > 651</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-652" > 652</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-653" > 653</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-654" > 654</ a ></ span >
2026-07-04 05:20:25 +00:00
< span class = "normal" >< a href = "#__codelineno-0-655" > 655</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-656" > 656</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-657" > 657</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-658" > 658</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-615" name = "__codelineno-0-615" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > create_trading_client</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-616" name = "__codelineno-0-616" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-617" name = "__codelineno-0-617" ></ a > < span class = "n" > config</ span >< span class = "p" > :</ span > < span class = "n" > Mt5Config</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-618" name = "__codelineno-0-618" ></ a > < span class = "n" > login</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-619" name = "__codelineno-0-619" ></ a > < span class = "n" > password</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-620" name = "__codelineno-0-620" ></ a > < span class = "n" > server</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-621" name = "__codelineno-0-621" ></ a > < span class = "n" > path</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-622" name = "__codelineno-0-622" ></ a > < span class = "n" > timeout</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-623" name = "__codelineno-0-623" ></ a > < span class = "n" > retry_count</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > =</ span > < span class = "mi" > 0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-624" name = "__codelineno-0-624" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > _TradingHistoryDealsClientProtocol</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-625" name = "__codelineno-0-625" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return an initialized and logged-in trading client.</ span >
< a id = "__codelineno-0-626" name = "__codelineno-0-626" ></ a >
< a id = "__codelineno-0-627" name = "__codelineno-0-627" ></ a >< span class = "sd" > The returned object is a raw ``pdmt5.Mt5DataClient`` instance, not the</ span >
< a id = "__codelineno-0-628" name = "__codelineno-0-628" ></ a >< span class = "sd" > higher-level ``mt5cli.MT5Client`` wrapper. Use ``mt5_session()`` /</ span >
< a id = "__codelineno-0-629" name = "__codelineno-0-629" ></ a >< span class = "sd" > ``MT5Client`` for read-only data collection. For live trading helpers</ span >
< a id = "__codelineno-0-630" name = "__codelineno-0-630" ></ a >< span class = "sd" > (margin, volume, order execution, position management) pass the returned</ span >
< a id = "__codelineno-0-631" name = "__codelineno-0-631" ></ a >< span class = "sd" > client to the strategy-agnostic helpers in this module.</ span >
< a id = "__codelineno-0-632" name = "__codelineno-0-632" ></ a >
< a id = "__codelineno-0-633" name = "__codelineno-0-633" ></ a >< span class = "sd" > For history deal retrieval use</ span >
< a id = "__codelineno-0-634" name = "__codelineno-0-634" ></ a >< span class = "sd" > :func:`fetch_recent_history_deals_for_trading_client`; the returned client</ span >
< a id = "__codelineno-0-635" name = "__codelineno-0-635" ></ a >< span class = "sd" > satisfies :class:`_HistoryDealsClientProtocol` so no additional wrapping is</ span >
< a id = "__codelineno-0-636" name = "__codelineno-0-636" ></ a >< span class = "sd" > required.</ span >
< a id = "__codelineno-0-637" name = "__codelineno-0-637" ></ a >
< a id = "__codelineno-0-638" name = "__codelineno-0-638" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-639" name = "__codelineno-0-639" ></ a >< span class = "sd" > A ``pdmt5.Mt5DataClient`` instance satisfying ``_Mt5ClientProtocol``</ span >
< a id = "__codelineno-0-640" name = "__codelineno-0-640" ></ a >< span class = "sd" > and ``_HistoryDealsClientProtocol``. Caller is responsible for calling</ span >
< a id = "__codelineno-0-641" name = "__codelineno-0-641" ></ a >< span class = "sd" > ``client.shutdown()`` when done; prefer ``mt5_trading_session()`` to</ span >
< a id = "__codelineno-0-642" name = "__codelineno-0-642" ></ a >< span class = "sd" > manage lifetime automatically.</ span >
< a id = "__codelineno-0-643" name = "__codelineno-0-643" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-644" name = "__codelineno-0-644" ></ a > < span class = "n" > mt5_config</ span > < span class = "o" > =</ span > < span class = "n" > _resolve_config</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-645" name = "__codelineno-0-645" ></ a > < span class = "n" > config</ span >< span class = "o" > =</ span >< span class = "n" > config</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-646" name = "__codelineno-0-646" ></ a > < span class = "n" > login</ span >< span class = "o" > =</ span >< span class = "n" > login</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-647" name = "__codelineno-0-647" ></ a > < span class = "n" > password</ span >< span class = "o" > =</ span >< span class = "n" > password</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-648" name = "__codelineno-0-648" ></ a > < span class = "n" > server</ span >< span class = "o" > =</ span >< span class = "n" > server</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-649" name = "__codelineno-0-649" ></ a > < span class = "n" > path</ span >< span class = "o" > =</ span >< span class = "n" > path</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-650" name = "__codelineno-0-650" ></ a > < span class = "n" > timeout</ span >< span class = "o" > =</ span >< span class = "n" > timeout</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-651" name = "__codelineno-0-651" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-652" name = "__codelineno-0-652" ></ a > < span class = "n" > client</ span > < span class = "o" > =</ span > < span class = "n" > Mt5DataClient</ span >< span class = "p" > (</ span >< span class = "n" > config</ span >< span class = "o" > =</ span >< span class = "n" > mt5_config</ span >< span class = "p" > ,</ span > < span class = "n" > retry_count</ span >< span class = "o" > =</ span >< span class = "n" > retry_count</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-653" name = "__codelineno-0-653" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-654" name = "__codelineno-0-654" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > initialize_and_login_mt5</ span >< span class = "p" > ()</ span >
< a id = "__codelineno-0-655" name = "__codelineno-0-655" ></ a > < span class = "k" > except</ span > < span class = "ne" > Exception</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-656" name = "__codelineno-0-656" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > shutdown</ span >< span class = "p" > ()</ span >
< a id = "__codelineno-0-657" name = "__codelineno-0-657" ></ a > < span class = "k" > raise</ span >
< a id = "__codelineno-0-658" name = "__codelineno-0-658" ></ a > < span class = "k" > return</ span > < span class = "n" > client</ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.detect_position_side" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > detect_position_side</ span >
< a href = "#mt5cli.trading.detect_position_side" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > detect_position_side</ span >< span class = "p" > (</ span >
2026-07-04 05:20:25 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "PositionSide
2026-06-11 10:33:27 +00:00
module-attribute
2026-06-14 17:47:52 +00:00
(mt5cli.trading.PositionSide)" href = "#mt5cli.trading.PositionSide" > PositionSide</ a ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >
2026-06-11 10:33:27 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
2026-06-14 17:47:52 +00:00
< p > Detect the net open position side for a symbol.</ p >
2026-06-11 10:33:27 +00:00
< p >< span class = "doc-section-title" > Parameters:</ span ></ p >
< table >
< thead >
< tr >
< th > Name</ th >
< th > Type</ th >
< th > Description</ th >
< th > Default</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > client</ code >
</ td >
< td >
2026-06-26 13:28:39 +00:00
< code >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ code >
2026-06-11 10:33:27 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-26 13:28:39 +00:00
< p > Connected MT5 client instance.</ p >
2026-06-11 10:33:27 +00:00
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > symbol</ code >
</ td >
< td >
< code >< span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
2026-06-14 17:47:52 +00:00
< p > Symbol to inspect.</ p >
2026-06-11 10:33:27 +00:00
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
2026-07-04 05:20:25 +00:00
< tr class = "doc-section-item" >
< td >
< code > magic</ code >
</ td >
< td >
< code >< span title = "int" > int</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Optional magic number filter applied fail-closed.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
2026-06-14 17:47:52 +00:00
</ tbody >
</ table >
2026-06-11 10:33:27 +00:00
2026-06-14 17:47:52 +00:00
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< a class = "autorefs autorefs-internal" title = "PositionSide
module-attribute
(mt5cli.trading.PositionSide)" href = "#mt5cli.trading.PositionSide" > PositionSide</ a > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p >< code > "long"</ code > when there are buy positions and no sell positions,</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< a class = "autorefs autorefs-internal" title = "PositionSide
module-attribute
(mt5cli.trading.PositionSide)" href = "#mt5cli.trading.PositionSide" > PositionSide</ a > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p >< code > "short"</ code > when there are sell positions and no buy positions, or</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< a class = "autorefs autorefs-internal" title = "PositionSide
module-attribute
(mt5cli.trading.PositionSide)" href = "#mt5cli.trading.PositionSide" > PositionSide</ a > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p >< code > None</ code > when no positions or mixed exposure exists.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-661" > 661</ a ></ span >
2026-06-29 20:29:14 +00:00
< span class = "normal" >< a href = "#__codelineno-0-662" > 662</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-663" > 663</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-664" > 664</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-665" > 665</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-666" > 666</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-667" > 667</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-668" > 668</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-669" > 669</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-670" > 670</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-671" > 671</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-672" > 672</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-673" > 673</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-674" > 674</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-675" > 675</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-676" > 676</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-677" > 677</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-678" > 678</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-679" > 679</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-680" > 680</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-681" > 681</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-682" > 682</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-683" > 683</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-684" > 684</ a ></ span >
2026-07-04 05:20:25 +00:00
< span class = "normal" >< a href = "#__codelineno-0-685" > 685</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-686" > 686</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-687" > 687</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-688" > 688</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-689" > 689</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-690" > 690</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-691" > 691</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-692" > 692</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-693" > 693</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-661" name = "__codelineno-0-661" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > detect_position_side</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-662" name = "__codelineno-0-662" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-663" name = "__codelineno-0-663" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-664" name = "__codelineno-0-664" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-665" name = "__codelineno-0-665" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-666" name = "__codelineno-0-666" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > PositionSide</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-667" name = "__codelineno-0-667" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Detect the net open position side for a symbol.</ span >
< a id = "__codelineno-0-668" name = "__codelineno-0-668" ></ a >
< a id = "__codelineno-0-669" name = "__codelineno-0-669" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-670" name = "__codelineno-0-670" ></ a >< span class = "sd" > client: Connected MT5 client instance.</ span >
< a id = "__codelineno-0-671" name = "__codelineno-0-671" ></ a >< span class = "sd" > symbol: Symbol to inspect.</ span >
< a id = "__codelineno-0-672" name = "__codelineno-0-672" ></ a >< span class = "sd" > magic: Optional magic number filter applied fail-closed.</ span >
< a id = "__codelineno-0-673" name = "__codelineno-0-673" ></ a >
< a id = "__codelineno-0-674" name = "__codelineno-0-674" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-675" name = "__codelineno-0-675" ></ a >< span class = "sd" > ``" long" `` when there are buy positions and no sell positions,</ span >
< a id = "__codelineno-0-676" name = "__codelineno-0-676" ></ a >< span class = "sd" > ``" short" `` when there are sell positions and no buy positions, or</ span >
< a id = "__codelineno-0-677" name = "__codelineno-0-677" ></ a >< span class = "sd" > ``None`` when no positions or mixed exposure exists.</ span >
< a id = "__codelineno-0-678" name = "__codelineno-0-678" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-679" name = "__codelineno-0-679" ></ a > < span class = "n" > positions</ span > < span class = "o" > =</ span > < span class = "n" > _filter_positions</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-680" name = "__codelineno-0-680" ></ a > < span class = "n" > get_positions_frame</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > ),</ span > < span class = "n" > magic</ span >< span class = "o" > =</ span >< span class = "n" > magic</ span >
< a id = "__codelineno-0-681" name = "__codelineno-0-681" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-682" name = "__codelineno-0-682" ></ a > < span class = "k" > if</ span > < span class = "n" > positions</ span >< span class = "o" > .</ span >< span class = "n" > empty</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-683" name = "__codelineno-0-683" ></ a > < span class = "k" > return</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-684" name = "__codelineno-0-684" ></ a >
< a id = "__codelineno-0-685" name = "__codelineno-0-685" ></ a > < span class = "n" > buy_type</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > POSITION_TYPE_BUY</ span >
< a id = "__codelineno-0-686" name = "__codelineno-0-686" ></ a > < span class = "n" > sell_type</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > POSITION_TYPE_SELL</ span >
< a id = "__codelineno-0-687" name = "__codelineno-0-687" ></ a > < span class = "n" > buy_volume</ span > < span class = "o" > =</ span > < span class = "n" > _sum_position_volume</ span >< span class = "p" > (</ span >< span class = "n" > positions</ span >< span class = "p" > ,</ span > < span class = "n" > buy_type</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-688" name = "__codelineno-0-688" ></ a > < span class = "n" > sell_volume</ span > < span class = "o" > =</ span > < span class = "n" > _sum_position_volume</ span >< span class = "p" > (</ span >< span class = "n" > positions</ span >< span class = "p" > ,</ span > < span class = "n" > sell_type</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-689" name = "__codelineno-0-689" ></ a > < span class = "k" > if</ span > < span class = "n" > buy_volume</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span > < span class = "ow" > and</ span > < span class = "n" > sell_volume</ span > < span class = "o" > ==</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-690" name = "__codelineno-0-690" ></ a > < span class = "k" > return</ span > < span class = "s2" > " long" </ span >
< a id = "__codelineno-0-691" name = "__codelineno-0-691" ></ a > < span class = "k" > if</ span > < span class = "n" > sell_volume</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span > < span class = "ow" > and</ span > < span class = "n" > buy_volume</ span > < span class = "o" > ==</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-692" name = "__codelineno-0-692" ></ a > < span class = "k" > return</ span > < span class = "s2" > " short" </ span >
< a id = "__codelineno-0-693" name = "__codelineno-0-693" ></ a > < span class = "k" > return</ span > < span class = "kc" > None</ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.determine_order_limits" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > determine_order_limits</ span >
< a href = "#mt5cli.trading.determine_order_limits" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > determine_order_limits</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-14 17:47:52 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > side</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "PositionSide
module-attribute
(mt5cli.trading.PositionSide)" href = "#mt5cli.trading.PositionSide" > PositionSide</ a ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > stop_loss_limit_ratio</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > take_profit_limit_ratio</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
2026-06-18 10:12:55 +00:00
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderLimits (mt5cli.trading.OrderLimits)" href = "#mt5cli.trading.OrderLimits" > OrderLimits</ a ></ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Derive entry and protective order prices from current market quotes.</ p >
< p >< span class = "doc-section-title" > Parameters:</ span ></ p >
< table >
< thead >
< tr >
< th > Name</ th >
< th > Type</ th >
< th > Description</ th >
< th > Default</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > client</ code >
</ td >
< td >
2026-06-26 13:28:39 +00:00
< code >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ code >
2026-06-14 17:47:52 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-26 13:28:39 +00:00
< p > Connected MT5 client instance.</ p >
2026-06-14 17:47:52 +00:00
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > symbol</ code >
</ td >
< td >
< code >< span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Symbol used for the quote lookup.</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > side</ code >
</ td >
< td >
< code >< a class = "autorefs autorefs-internal" title = "PositionSide
module-attribute
(mt5cli.trading.PositionSide)" href = "#mt5cli.trading.PositionSide" > PositionSide</ a > | < span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Position side as < code > "long"</ code > /< code > "short"</ code > (< code > "buy"</ code > /< code > "sell"</ code >
aliases are accepted).</ p >
</ div >
</ td >
2026-06-11 10:33:27 +00:00
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > stop_loss_limit_ratio</ code >
</ td >
< td >
2026-06-14 17:47:52 +00:00
< code >< span title = "float" > float</ span > | None</ code >
2026-06-11 10:33:27 +00:00
</ td >
< td >
< div class = "doc-md-description" >
< p > Relative distance from entry for stop loss in
< code > [0, 1)</ code > . A value of < code > 0</ code > omits the stop loss.</ p >
</ div >
</ td >
< td >
2026-06-14 17:47:52 +00:00
< code > None</ code >
2026-06-11 10:33:27 +00:00
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > take_profit_limit_ratio</ code >
</ td >
< td >
2026-06-14 17:47:52 +00:00
< code >< span title = "float" > float</ span > | None</ code >
2026-06-11 10:33:27 +00:00
</ td >
< td >
< div class = "doc-md-description" >
< p > Relative distance from entry for take profit in
< code > [0, 1)</ code > . A value of < code > 0</ code > omits the take profit.</ p >
</ div >
</ td >
< td >
2026-06-14 17:47:52 +00:00
< code > None</ code >
2026-06-11 10:33:27 +00:00
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
2026-06-18 10:12:55 +00:00
< code >< a class = "autorefs autorefs-internal" title = "OrderLimits (mt5cli.trading.OrderLimits)" href = "#mt5cli.trading.OrderLimits" > OrderLimits</ a ></ code >
2026-06-11 10:33:27 +00:00
</ td >
< td >
< div class = "doc-md-description" >
< p > Dictionary with < code > entry</ code > , < code > stop_loss</ code > , and < code > take_profit</ code > keys.</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
2026-06-18 10:12:55 +00:00
< code >< a class = "autorefs autorefs-internal" title = "OrderLimits (mt5cli.trading.OrderLimits)" href = "#mt5cli.trading.OrderLimits" > OrderLimits</ a ></ code >
2026-06-11 10:33:27 +00:00
</ td >
< td >
< div class = "doc-md-description" >
< p > Omitted protective levels are returned as < code > None</ code > .</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
2026-06-14 17:47:52 +00:00
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
2026-06-26 13:28:39 +00:00
< code >< a class = "autorefs autorefs-internal" title = "Mt5OperationError (mt5cli.exceptions.Mt5OperationError)" href = "../exceptions/#mt5cli.exceptions.Mt5OperationError" > Mt5OperationError</ a ></ code >
2026-06-14 17:47:52 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-18 10:12:55 +00:00
< p > If required tick data is invalid or computed SL/TP
prices violate available < code > trade_stops_level</ code > pre-validation.</ p >
2026-06-14 17:47:52 +00:00
</ div >
2026-06-23 07:31:36 +00:00
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1344" > 1344</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1345" > 1345</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1346" > 1346</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1347" > 1347</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1348" > 1348</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1349" > 1349</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1350" > 1350</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1351" > 1351</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1352" > 1352</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1353" > 1353</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1354" > 1354</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1355" > 1355</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1356" > 1356</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1357" > 1357</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1358" > 1358</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1359" > 1359</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1360" > 1360</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1361" > 1361</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1362" > 1362</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1363" > 1363</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1364" > 1364</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1365" > 1365</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1366" > 1366</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1367" > 1367</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1368" > 1368</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1369" > 1369</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1370" > 1370</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1371" > 1371</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1372" > 1372</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1373" > 1373</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1374" > 1374</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1375" > 1375</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1376" > 1376</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1377" > 1377</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1378" > 1378</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1379" > 1379</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1380" > 1380</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1381" > 1381</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1382" > 1382</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1383" > 1383</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1384" > 1384</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1385" > 1385</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1386" > 1386</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1387" > 1387</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1388" > 1388</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1389" > 1389</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1390" > 1390</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1391" > 1391</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1392" > 1392</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1393" > 1393</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1394" > 1394</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1395" > 1395</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1396" > 1396</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1397" > 1397</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1398" > 1398</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1399" > 1399</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1400" > 1400</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1401" > 1401</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1402" > 1402</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1403" > 1403</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1404" > 1404</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1405" > 1405</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1406" > 1406</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1407" > 1407</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1408" > 1408</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1409" > 1409</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1410" > 1410</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1411" > 1411</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1412" > 1412</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1413" > 1413</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1414" > 1414</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1415" > 1415</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1416" > 1416</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1417" > 1417</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1418" > 1418</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1419" > 1419</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1420" > 1420</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1421" > 1421</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1344" name = "__codelineno-0-1344" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > determine_order_limits</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1345" name = "__codelineno-0-1345" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1346" name = "__codelineno-0-1346" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1347" name = "__codelineno-0-1347" ></ a > < span class = "n" > side</ span >< span class = "p" > :</ span > < span class = "n" > PositionSide</ span > < span class = "o" > |</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1348" name = "__codelineno-0-1348" ></ a > < span class = "n" > stop_loss_limit_ratio</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1349" name = "__codelineno-0-1349" ></ a > < span class = "n" > take_profit_limit_ratio</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1350" name = "__codelineno-0-1350" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > OrderLimits</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1351" name = "__codelineno-0-1351" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Derive entry and protective order prices from current market quotes.</ span >
< a id = "__codelineno-0-1352" name = "__codelineno-0-1352" ></ a >
< a id = "__codelineno-0-1353" name = "__codelineno-0-1353" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-1354" name = "__codelineno-0-1354" ></ a >< span class = "sd" > client: Connected MT5 client instance.</ span >
< a id = "__codelineno-0-1355" name = "__codelineno-0-1355" ></ a >< span class = "sd" > symbol: Symbol used for the quote lookup.</ span >
< a id = "__codelineno-0-1356" name = "__codelineno-0-1356" ></ a >< span class = "sd" > side: Position side as ``" long" ``/``" short" `` (``" buy" ``/``" sell" ``</ span >
< a id = "__codelineno-0-1357" name = "__codelineno-0-1357" ></ a >< span class = "sd" > aliases are accepted).</ span >
< a id = "__codelineno-0-1358" name = "__codelineno-0-1358" ></ a >< span class = "sd" > stop_loss_limit_ratio: Relative distance from entry for stop loss in</ span >
< a id = "__codelineno-0-1359" name = "__codelineno-0-1359" ></ a >< span class = "sd" > ``[0, 1)``. A value of ``0`` omits the stop loss.</ span >
< a id = "__codelineno-0-1360" name = "__codelineno-0-1360" ></ a >< span class = "sd" > take_profit_limit_ratio: Relative distance from entry for take profit in</ span >
< a id = "__codelineno-0-1361" name = "__codelineno-0-1361" ></ a >< span class = "sd" > ``[0, 1)``. A value of ``0`` omits the take profit.</ span >
< a id = "__codelineno-0-1362" name = "__codelineno-0-1362" ></ a >
< a id = "__codelineno-0-1363" name = "__codelineno-0-1363" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-1364" name = "__codelineno-0-1364" ></ a >< span class = "sd" > Dictionary with ``entry``, ``stop_loss``, and ``take_profit`` keys.</ span >
< a id = "__codelineno-0-1365" name = "__codelineno-0-1365" ></ a >< span class = "sd" > Omitted protective levels are returned as ``None``.</ span >
< a id = "__codelineno-0-1366" name = "__codelineno-0-1366" ></ a >
< a id = "__codelineno-0-1367" name = "__codelineno-0-1367" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-1368" name = "__codelineno-0-1368" ></ a >< span class = "sd" > Mt5OperationError: If required tick data is invalid or computed SL/TP</ span >
< a id = "__codelineno-0-1369" name = "__codelineno-0-1369" ></ a >< span class = "sd" > prices violate available ``trade_stops_level`` pre-validation.</ span >
< a id = "__codelineno-0-1370" name = "__codelineno-0-1370" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1371" name = "__codelineno-0-1371" ></ a > < span class = "n" > stop_loss_ratio</ span > < span class = "o" > =</ span > < span class = "n" > stop_loss_limit_ratio</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-1372" name = "__codelineno-0-1372" ></ a > < span class = "n" > take_profit_ratio</ span > < span class = "o" > =</ span > < span class = "n" > take_profit_limit_ratio</ span > < span class = "ow" > or</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-1373" name = "__codelineno-0-1373" ></ a > < span class = "n" > _require_protective_ratio</ span >< span class = "p" > (</ span >< span class = "n" > stop_loss_ratio</ span >< span class = "p" > ,</ span > < span class = "s2" > " stop_loss_limit_ratio" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1374" name = "__codelineno-0-1374" ></ a > < span class = "n" > _require_protective_ratio</ span >< span class = "p" > (</ span >< span class = "n" > take_profit_ratio</ span >< span class = "p" > ,</ span > < span class = "s2" > " take_profit_limit_ratio" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1375" name = "__codelineno-0-1375" ></ a > < span class = "n" > normalized_side</ span > < span class = "o" > =</ span > < span class = "n" > _position_side_from_order_side</ span >< span class = "p" > (</ span >< span class = "n" > side</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1376" name = "__codelineno-0-1376" ></ a > < span class = "n" > tick</ span > < span class = "o" > =</ span > < span class = "n" > get_tick_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1377" name = "__codelineno-0-1377" ></ a > < span class = "n" > entry_key</ span > < span class = "o" > =</ span > < span class = "s2" > " ask" </ span > < span class = "k" > if</ span > < span class = "n" > normalized_side</ span > < span class = "o" > ==</ span > < span class = "s2" > " long" </ span > < span class = "k" > else</ span > < span class = "s2" > " bid" </ span >
< a id = "__codelineno-0-1378" name = "__codelineno-0-1378" ></ a > < span class = "n" > entry</ span > < span class = "o" > =</ span > < span class = "n" > extract_tick_price</ span >< span class = "p" > (</ span >< span class = "n" > tick</ span >< span class = "p" > ,</ span > < span class = "n" > entry_key</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1379" name = "__codelineno-0-1379" ></ a > < span class = "k" > if</ span > < span class = "n" > entry</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1380" name = "__codelineno-0-1380" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Tick price is unavailable for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-1381" name = "__codelineno-0-1381" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1382" name = "__codelineno-0-1382" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1383" name = "__codelineno-0-1383" ></ a > < span class = "n" > symbol_info</ span > < span class = "o" > =</ span > < span class = "n" > get_symbol_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1384" name = "__codelineno-0-1384" ></ a > < span class = "k" > except</ span > < span class = "p" > (</ span >< span class = "ne" > AttributeError</ span >< span class = "p" > ,</ span > < span class = "ne" > KeyError</ span >< span class = "p" > ,</ span > < span class = "ne" > TypeError</ span >< span class = "p" > ,</ span > < span class = "ne" > ValueError</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-1385" name = "__codelineno-0-1385" ></ a > < span class = "n" > symbol_info</ span > < span class = "o" > =</ span > < span class = "p" > {}</ span >
< a id = "__codelineno-0-1386" name = "__codelineno-0-1386" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1387" name = "__codelineno-0-1387" ></ a > < span class = "n" > digits</ span > < span class = "o" > =</ span > < span class = "nb" > int</ span >< span class = "p" > (</ span >< span class = "n" > symbol_info</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " digits" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "mi" > 8</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1388" name = "__codelineno-0-1388" ></ a > < span class = "k" > except</ span > < span class = "p" > (</ span >< span class = "ne" > TypeError</ span >< span class = "p" > ,</ span > < span class = "ne" > ValueError</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-1389" name = "__codelineno-0-1389" ></ a > < span class = "n" > digits</ span > < span class = "o" > =</ span > < span class = "mi" > 8</ span >
< a id = "__codelineno-0-1390" name = "__codelineno-0-1390" ></ a > < span class = "n" > min_distance</ span > < span class = "o" > =</ span > < span class = "n" > _minimum_stop_distance</ span >< span class = "p" > (</ span >< span class = "n" > symbol_info</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1391" name = "__codelineno-0-1391" ></ a >
< a id = "__codelineno-0-1392" name = "__codelineno-0-1392" ></ a > < span class = "n" > stop_loss</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-1393" name = "__codelineno-0-1393" ></ a > < span class = "k" > if</ span > < span class = "n" > stop_loss_ratio</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1394" name = "__codelineno-0-1394" ></ a > < span class = "k" > if</ span > < span class = "n" > normalized_side</ span > < span class = "o" > ==</ span > < span class = "s2" > " long" </ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1395" name = "__codelineno-0-1395" ></ a > < span class = "n" > stop_loss</ span > < span class = "o" > =</ span > < span class = "n" > entry</ span > < span class = "o" > *</ span > < span class = "p" > (</ span >< span class = "mf" > 1.0</ span > < span class = "o" > -</ span > < span class = "n" > stop_loss_ratio</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1396" name = "__codelineno-0-1396" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1397" name = "__codelineno-0-1397" ></ a > < span class = "n" > stop_loss</ span > < span class = "o" > =</ span > < span class = "n" > entry</ span > < span class = "o" > *</ span > < span class = "p" > (</ span >< span class = "mf" > 1.0</ span > < span class = "o" > +</ span > < span class = "n" > stop_loss_ratio</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1398" name = "__codelineno-0-1398" ></ a > < span class = "n" > stop_loss</ span > < span class = "o" > =</ span > < span class = "nb" > round</ span >< span class = "p" > (</ span >< span class = "n" > stop_loss</ span >< span class = "p" > ,</ span > < span class = "n" > digits</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1399" name = "__codelineno-0-1399" ></ a >
< a id = "__codelineno-0-1400" name = "__codelineno-0-1400" ></ a > < span class = "n" > take_profit</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-1401" name = "__codelineno-0-1401" ></ a > < span class = "k" > if</ span > < span class = "n" > take_profit_ratio</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1402" name = "__codelineno-0-1402" ></ a > < span class = "k" > if</ span > < span class = "n" > normalized_side</ span > < span class = "o" > ==</ span > < span class = "s2" > " long" </ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1403" name = "__codelineno-0-1403" ></ a > < span class = "n" > take_profit</ span > < span class = "o" > =</ span > < span class = "n" > entry</ span > < span class = "o" > *</ span > < span class = "p" > (</ span >< span class = "mf" > 1.0</ span > < span class = "o" > +</ span > < span class = "n" > take_profit_ratio</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1404" name = "__codelineno-0-1404" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1405" name = "__codelineno-0-1405" ></ a > < span class = "n" > take_profit</ span > < span class = "o" > =</ span > < span class = "n" > entry</ span > < span class = "o" > *</ span > < span class = "p" > (</ span >< span class = "mf" > 1.0</ span > < span class = "o" > -</ span > < span class = "n" > take_profit_ratio</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1406" name = "__codelineno-0-1406" ></ a > < span class = "n" > take_profit</ span > < span class = "o" > =</ span > < span class = "nb" > round</ span >< span class = "p" > (</ span >< span class = "n" > take_profit</ span >< span class = "p" > ,</ span > < span class = "n" > digits</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1407" name = "__codelineno-0-1407" ></ a >
< a id = "__codelineno-0-1408" name = "__codelineno-0-1408" ></ a > < span class = "n" > _validate_protective_prices</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1409" name = "__codelineno-0-1409" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1410" name = "__codelineno-0-1410" ></ a > < span class = "n" > side</ span >< span class = "o" > =</ span >< span class = "n" > normalized_side</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1411" name = "__codelineno-0-1411" ></ a > < span class = "n" > entry</ span >< span class = "o" > =</ span >< span class = "n" > entry</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1412" name = "__codelineno-0-1412" ></ a > < span class = "n" > stop_loss</ span >< span class = "o" > =</ span >< span class = "n" > stop_loss</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1413" name = "__codelineno-0-1413" ></ a > < span class = "n" > take_profit</ span >< span class = "o" > =</ span >< span class = "n" > take_profit</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1414" name = "__codelineno-0-1414" ></ a > < span class = "n" > min_distance</ span >< span class = "o" > =</ span >< span class = "n" > min_distance</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1415" name = "__codelineno-0-1415" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1416" name = "__codelineno-0-1416" ></ a >
< a id = "__codelineno-0-1417" name = "__codelineno-0-1417" ></ a > < span class = "k" > return</ span > < span class = "p" > {</ span >
< a id = "__codelineno-0-1418" name = "__codelineno-0-1418" ></ a > < span class = "s2" > " entry" </ span >< span class = "p" > :</ span > < span class = "n" > entry</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1419" name = "__codelineno-0-1419" ></ a > < span class = "s2" > " stop_loss" </ span >< span class = "p" > :</ span > < span class = "n" > stop_loss</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1420" name = "__codelineno-0-1420" ></ a > < span class = "s2" > " take_profit" </ span >< span class = "p" > :</ span > < span class = "n" > take_profit</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1421" name = "__codelineno-0-1421" ></ a > < span class = "p" > }</ span >
2026-06-18 10:12:55 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.ensure_symbol_selected" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > ensure_symbol_selected</ span >
< a href = "#mt5cli.trading.ensure_symbol_selected" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > ensure_symbol_selected</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >
2026-06-18 10:12:55 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "kc" > None</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Ensure a symbol is visible in Market Watch before sending orders.</ p >
< p >< span class = "doc-section-title" > Parameters:</ span ></ p >
< table >
< thead >
< tr >
< th > Name</ th >
< th > Type</ th >
< th > Description</ th >
< th > Default</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > client</ code >
</ td >
< td >
2026-06-26 13:28:39 +00:00
< code >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ code >
2026-06-18 10:12:55 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-26 13:28:39 +00:00
< p > Connected MT5 client instance.</ p >
2026-06-18 10:12:55 +00:00
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > symbol</ code >
</ td >
< td >
< code >< span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Symbol to select.</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
2026-06-26 13:28:39 +00:00
< code >< a class = "autorefs autorefs-internal" title = "Mt5OperationError (mt5cli.exceptions.Mt5OperationError)" href = "../exceptions/#mt5cli.exceptions.Mt5OperationError" > Mt5OperationError</ a ></ code >
2026-06-18 10:12:55 +00:00
</ td >
< td >
< div class = "doc-md-description" >
< p > If the symbol cannot be selected in Market Watch or
< code > symbol_select</ code > is unavailable on the client.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-325" > 325</ a ></ span >
2026-06-29 20:29:14 +00:00
< span class = "normal" >< a href = "#__codelineno-0-326" > 326</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-327" > 327</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-328" > 328</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-329" > 329</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-330" > 330</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-331" > 331</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-332" > 332</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-333" > 333</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-334" > 334</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-335" > 335</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-336" > 336</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-337" > 337</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-338" > 338</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-339" > 339</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-340" > 340</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-341" > 341</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-342" > 342</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-343" > 343</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-344" > 344</ a ></ span >
2026-07-04 05:20:25 +00:00
< span class = "normal" >< a href = "#__codelineno-0-345" > 345</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-346" > 346</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-347" > 347</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-348" > 348</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-325" name = "__codelineno-0-325" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > ensure_symbol_selected</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-326" name = "__codelineno-0-326" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Ensure a symbol is visible in Market Watch before sending orders.</ span >
< a id = "__codelineno-0-327" name = "__codelineno-0-327" ></ a >
< a id = "__codelineno-0-328" name = "__codelineno-0-328" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-329" name = "__codelineno-0-329" ></ a >< span class = "sd" > client: Connected MT5 client instance.</ span >
< a id = "__codelineno-0-330" name = "__codelineno-0-330" ></ a >< span class = "sd" > symbol: Symbol to select.</ span >
< a id = "__codelineno-0-331" name = "__codelineno-0-331" ></ a >
< a id = "__codelineno-0-332" name = "__codelineno-0-332" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-333" name = "__codelineno-0-333" ></ a >< span class = "sd" > Mt5OperationError: If the symbol cannot be selected in Market Watch or</ span >
< a id = "__codelineno-0-334" name = "__codelineno-0-334" ></ a >< span class = "sd" > ``symbol_select`` is unavailable on the client.</ span >
< a id = "__codelineno-0-335" name = "__codelineno-0-335" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-336" name = "__codelineno-0-336" ></ a > < span class = "n" > snapshot</ span > < span class = "o" > =</ span > < span class = "n" > get_symbol_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-337" name = "__codelineno-0-337" ></ a > < span class = "k" > if</ span > < span class = "n" > snapshot</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " visible" </ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-338" name = "__codelineno-0-338" ></ a > < span class = "k" > return</ span >
< a id = "__codelineno-0-339" name = "__codelineno-0-339" ></ a > < span class = "n" > select</ span > < span class = "o" > =</ span > < span class = "nb" > getattr</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " symbol_select" </ span >< span class = "p" > ,</ span > < span class = "kc" > None</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-340" name = "__codelineno-0-340" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "nb" > callable</ span >< span class = "p" > (</ span >< span class = "n" > select</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-341" name = "__codelineno-0-341" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "s2" > " MT5 client is missing required method: symbol_select" </ span >
< a id = "__codelineno-0-342" name = "__codelineno-0-342" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-343" name = "__codelineno-0-343" ></ a > < span class = "k" > if</ span > < span class = "n" > select</ span >< span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > enable</ span >< span class = "o" > =</ span >< span class = "kc" > True</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-344" name = "__codelineno-0-344" ></ a > < span class = "k" > return</ span >
< a id = "__codelineno-0-345" name = "__codelineno-0-345" ></ a > < span class = "n" > last_error</ span > < span class = "o" > =</ span > < span class = "nb" > getattr</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " last_error" </ span >< span class = "p" > ,</ span > < span class = "kc" > None</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-346" name = "__codelineno-0-346" ></ a > < span class = "n" > detail</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " (</ span >< span class = "si" > {</ span >< span class = "n" > last_error</ span >< span class = "p" > ()</ span >< span class = "si" > }</ span >< span class = "s2" > )" </ span > < span class = "k" > if</ span > < span class = "nb" > callable</ span >< span class = "p" > (</ span >< span class = "n" > last_error</ span >< span class = "p" > )</ span > < span class = "k" > else</ span > < span class = "s2" > "" </ span >
< a id = "__codelineno-0-347" name = "__codelineno-0-347" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Failed to select symbol </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > in Market Watch</ span >< span class = "si" > {</ span >< span class = "n" > detail</ span >< span class = "si" > }</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-348" name = "__codelineno-0-348" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
2026-06-18 16:03:06 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.estimate_order_margin" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > estimate_order_margin</ span >
< a href = "#mt5cli.trading.estimate_order_margin" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > estimate_order_margin</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-18 16:03:06 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > order_side</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderSide
module-attribute
(mt5cli.trading.OrderSide)" href = "#mt5cli.trading.OrderSide" > OrderSide</ a ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > volume</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Estimate required margin for one order at the current market price.</ p >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Positive finite margin required for the order at the current quote.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
2026-06-26 13:28:39 +00:00
< code >< a class = "autorefs autorefs-internal" title = "Mt5OperationError (mt5cli.exceptions.Mt5OperationError)" href = "../exceptions/#mt5cli.exceptions.Mt5OperationError" > Mt5OperationError</ a ></ code >
2026-06-18 16:03:06 +00:00
</ td >
< td >
< div class = "doc-md-description" >
< p > If volume, tick data, or margin estimation is invalid.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-846" > 846</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-847" > 847</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-848" > 848</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-849" > 849</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-850" > 850</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-851" > 851</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-852" > 852</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-853" > 853</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-854" > 854</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-855" > 855</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-856" > 856</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-857" > 857</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-858" > 858</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-859" > 859</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-860" > 860</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-861" > 861</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-862" > 862</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-863" > 863</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-864" > 864</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-865" > 865</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-866" > 866</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-867" > 867</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-868" > 868</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-869" > 869</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-870" > 870</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-871" > 871</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-872" > 872</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-873" > 873</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-874" > 874</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-875" > 875</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-876" > 876</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-877" > 877</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-878" > 878</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-879" > 879</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-880" > 880</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-881" > 881</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-846" name = "__codelineno-0-846" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > estimate_order_margin</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-847" name = "__codelineno-0-847" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-848" name = "__codelineno-0-848" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-849" name = "__codelineno-0-849" ></ a > < span class = "n" > order_side</ span >< span class = "p" > :</ span > < span class = "n" > OrderSide</ span > < span class = "o" > |</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-850" name = "__codelineno-0-850" ></ a > < span class = "n" > volume</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-851" name = "__codelineno-0-851" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-852" name = "__codelineno-0-852" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Estimate required margin for one order at the current market price.</ span >
< a id = "__codelineno-0-853" name = "__codelineno-0-853" ></ a >
< a id = "__codelineno-0-854" name = "__codelineno-0-854" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-855" name = "__codelineno-0-855" ></ a >< span class = "sd" > Positive finite margin required for the order at the current quote.</ span >
< a id = "__codelineno-0-856" name = "__codelineno-0-856" ></ a >
< a id = "__codelineno-0-857" name = "__codelineno-0-857" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-858" name = "__codelineno-0-858" ></ a >< span class = "sd" > Mt5OperationError: If volume, tick data, or margin estimation is invalid.</ span >
< a id = "__codelineno-0-859" name = "__codelineno-0-859" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-860" name = "__codelineno-0-860" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > _is_positive_finite_number</ span >< span class = "p" > (</ span >< span class = "n" > volume</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-861" name = "__codelineno-0-861" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "s2" > " Volume must be a positive finite number to estimate order margin." </ span >
< a id = "__codelineno-0-862" name = "__codelineno-0-862" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-863" name = "__codelineno-0-863" ></ a > < span class = "n" > side</ span > < span class = "o" > =</ span > < span class = "n" > _normalize_order_side</ span >< span class = "p" > (</ span >< span class = "n" > order_side</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-864" name = "__codelineno-0-864" ></ a > < span class = "n" > tick</ span > < span class = "o" > =</ span > < span class = "n" > get_tick_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-865" name = "__codelineno-0-865" ></ a > < span class = "n" > price</ span > < span class = "o" > =</ span > < span class = "n" > extract_tick_price</ span >< span class = "p" > (</ span >< span class = "n" > tick</ span >< span class = "p" > ,</ span > < span class = "s2" > " ask" </ span > < span class = "k" > if</ span > < span class = "n" > side</ span > < span class = "o" > ==</ span > < span class = "s2" > " BUY" </ span > < span class = "k" > else</ span > < span class = "s2" > " bid" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-866" name = "__codelineno-0-866" ></ a > < span class = "k" > if</ span > < span class = "n" > price</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-867" name = "__codelineno-0-867" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Tick price is unavailable for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-868" name = "__codelineno-0-868" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-869" name = "__codelineno-0-869" ></ a > < span class = "n" > order_type</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-870" name = "__codelineno-0-870" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > ORDER_TYPE_BUY</ span > < span class = "k" > if</ span > < span class = "n" > side</ span > < span class = "o" > ==</ span > < span class = "s2" > " BUY" </ span > < span class = "k" > else</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > ORDER_TYPE_SELL</ span >
< a id = "__codelineno-0-871" name = "__codelineno-0-871" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-872" name = "__codelineno-0-872" ></ a > < span class = "n" > raw_margin</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > order_calc_margin</ span >< span class = "p" > (</ span >< span class = "n" > order_type</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > volume</ span >< span class = "p" > ,</ span > < span class = "n" > price</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-873" name = "__codelineno-0-873" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-874" name = "__codelineno-0-874" ></ a > < span class = "n" > margin</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > raw_margin</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-875" name = "__codelineno-0-875" ></ a > < span class = "k" > except</ span > < span class = "p" > (</ span >< span class = "ne" > TypeError</ span >< span class = "p" > ,</ span > < span class = "ne" > ValueError</ span >< span class = "p" > )</ span > < span class = "k" > as</ span > < span class = "n" > exc</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-876" name = "__codelineno-0-876" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Margin estimate is invalid for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-877" name = "__codelineno-0-877" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span > < span class = "kn" > from</ span >< span class = "w" > </ span >< span class = "nn" > exc</ span >
< a id = "__codelineno-0-878" name = "__codelineno-0-878" ></ a > < span class = "k" > if</ span > < span class = "n" > margin</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span > < span class = "ow" > or</ span > < span class = "ow" > not</ span > < span class = "n" > isfinite</ span >< span class = "p" > (</ span >< span class = "n" > margin</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-879" name = "__codelineno-0-879" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Margin estimate is invalid for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-880" name = "__codelineno-0-880" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-881" name = "__codelineno-0-881" ></ a > < span class = "k" > return</ span > < span class = "n" > margin</ span >
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.extract_tick_price" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > extract_tick_price</ span >
< a href = "#mt5cli.trading.extract_tick_price" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > extract_tick_price</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > tick</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "collections.abc.Mapping" > Mapping</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span > < span class = "n" >< span title = "object" > object</ span ></ span >< span class = "p" > ],</ span > < span class = "n" > key</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
2026-06-23 16:59:18 +00:00
< p > Return a positive finite float from tick[key], or None if invalid.</ p >
< p > Accepts int, float, or numeric string values. Returns None when the key is
missing, the value is None, non-numeric, NaN, infinite, zero, or negative.
Booleans are treated as non-numeric and return None.</ p >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-540" > 540</ a ></ span >
2026-06-29 20:29:14 +00:00
< span class = "normal" >< a href = "#__codelineno-0-541" > 541</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-542" > 542</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-543" > 543</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-544" > 544</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-545" > 545</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-546" > 546</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-547" > 547</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-548" > 548</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-549" > 549</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-550" > 550</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-551" > 551</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-552" > 552</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-553" > 553</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-554" > 554</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-555" > 555</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-556" > 556</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-557" > 557</ a ></ span >
2026-07-04 05:20:25 +00:00
< span class = "normal" >< a href = "#__codelineno-0-558" > 558</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-559" > 559</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-560" > 560</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-561" > 561</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-540" name = "__codelineno-0-540" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > extract_tick_price</ span >< span class = "p" > (</ span >< span class = "n" > tick</ span >< span class = "p" > :</ span > < span class = "n" > Mapping</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ,</ span > < span class = "nb" > object</ span >< span class = "p" > ],</ span > < span class = "n" > key</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-541" name = "__codelineno-0-541" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return a positive finite float from tick[key], or None if invalid.</ span >
< a id = "__codelineno-0-542" name = "__codelineno-0-542" ></ a >
< a id = "__codelineno-0-543" name = "__codelineno-0-543" ></ a >< span class = "sd" > Accepts int, float, or numeric string values. Returns None when the key is</ span >
< a id = "__codelineno-0-544" name = "__codelineno-0-544" ></ a >< span class = "sd" > missing, the value is None, non-numeric, NaN, infinite, zero, or negative.</ span >
< a id = "__codelineno-0-545" name = "__codelineno-0-545" ></ a >< span class = "sd" > Booleans are treated as non-numeric and return None.</ span >
< a id = "__codelineno-0-546" name = "__codelineno-0-546" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-547" name = "__codelineno-0-547" ></ a > < span class = "n" > value</ span > < span class = "o" > =</ span > < span class = "n" > tick</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "n" > key</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-548" name = "__codelineno-0-548" ></ a > < span class = "k" > if</ span > < span class = "n" > value</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span > < span class = "ow" > or</ span > < span class = "nb" > isinstance</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > ,</ span > < span class = "nb" > bool</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-549" name = "__codelineno-0-549" ></ a > < span class = "k" > return</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-550" name = "__codelineno-0-550" ></ a > < span class = "k" > if</ span > < span class = "nb" > isinstance</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > ,</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "nb" > float</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-551" name = "__codelineno-0-551" ></ a > < span class = "n" > price</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-552" name = "__codelineno-0-552" ></ a > < span class = "k" > elif</ span > < span class = "nb" > isinstance</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > ,</ span > < span class = "nb" > str</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-553" name = "__codelineno-0-553" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-554" name = "__codelineno-0-554" ></ a > < span class = "n" > price</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-555" name = "__codelineno-0-555" ></ a > < span class = "k" > except</ span > < span class = "ne" > ValueError</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-556" name = "__codelineno-0-556" ></ a > < span class = "k" > return</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-557" name = "__codelineno-0-557" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-558" name = "__codelineno-0-558" ></ a > < span class = "k" > return</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-559" name = "__codelineno-0-559" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > isfinite</ span >< span class = "p" > (</ span >< span class = "n" > price</ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "n" > price</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-560" name = "__codelineno-0-560" ></ a > < span class = "k" > return</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-561" name = "__codelineno-0-561" ></ a > < span class = "k" > return</ span > < span class = "n" > price</ span >
2026-06-18 16:03:06 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.fetch_latest_closed_rates_for_trading_client" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > fetch_latest_closed_rates_for_trading_client</ span >
< a href = "#mt5cli.trading.fetch_latest_closed_rates_for_trading_client" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > fetch_latest_closed_rates_for_trading_client</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-18 16:03:06 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > granularity</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > count</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "pandas.DataFrame" > DataFrame</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Fetch the latest closed bars from a connected trading client.</ p >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "pandas.DataFrame" > DataFrame</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Up to < code > count</ code > closed bars ordered oldest to newest.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "ValueError" > ValueError</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > If < code > count</ code > is not positive, rate data is empty or
malformed, or the < code > time</ code > column is missing.</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
2026-06-26 13:28:39 +00:00
< code >< a class = "autorefs autorefs-internal" title = "Mt5OperationError (mt5cli.exceptions.Mt5OperationError)" href = "../exceptions/#mt5cli.exceptions.Mt5OperationError" > Mt5OperationError</ a ></ code >
2026-06-18 16:03:06 +00:00
</ td >
< td >
< div class = "doc-md-description" >
< p > If the trading client cannot fetch rate data.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1777" > 1777</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1778" > 1778</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1779" > 1779</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1780" > 1780</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1781" > 1781</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1782" > 1782</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1783" > 1783</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1784" > 1784</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1785" > 1785</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1786" > 1786</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1787" > 1787</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1788" > 1788</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1789" > 1789</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1790" > 1790</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1791" > 1791</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1792" > 1792</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1793" > 1793</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1794" > 1794</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1795" > 1795</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1796" > 1796</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1797" > 1797</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1798" > 1798</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1799" > 1799</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1800" > 1800</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1801" > 1801</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1802" > 1802</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1803" > 1803</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1804" > 1804</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1805" > 1805</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1806" > 1806</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1807" > 1807</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1808" > 1808</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1809" > 1809</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1810" > 1810</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1811" > 1811</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1812" > 1812</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1813" > 1813</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1814" > 1814</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1815" > 1815</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1816" > 1816</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1817" > 1817</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1818" > 1818</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1819" > 1819</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1820" > 1820</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1821" > 1821</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1822" > 1822</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1823" > 1823</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1824" > 1824</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1825" > 1825</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1826" > 1826</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1827" > 1827</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1777" name = "__codelineno-0-1777" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > fetch_latest_closed_rates_for_trading_client</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1778" name = "__codelineno-0-1778" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1779" name = "__codelineno-0-1779" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1780" name = "__codelineno-0-1780" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1781" name = "__codelineno-0-1781" ></ a > < span class = "n" > granularity</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1782" name = "__codelineno-0-1782" ></ a > < span class = "n" > count</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1783" name = "__codelineno-0-1783" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > pd</ span >< span class = "o" > .</ span >< span class = "n" > DataFrame</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1784" name = "__codelineno-0-1784" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Fetch the latest closed bars from a connected trading client.</ span >
< a id = "__codelineno-0-1785" name = "__codelineno-0-1785" ></ a >
< a id = "__codelineno-0-1786" name = "__codelineno-0-1786" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-1787" name = "__codelineno-0-1787" ></ a >< span class = "sd" > Up to ``count`` closed bars ordered oldest to newest.</ span >
< a id = "__codelineno-0-1788" name = "__codelineno-0-1788" ></ a >
< a id = "__codelineno-0-1789" name = "__codelineno-0-1789" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-1790" name = "__codelineno-0-1790" ></ a >< span class = "sd" > ValueError: If ``count`` is not positive, rate data is empty or</ span >
< a id = "__codelineno-0-1791" name = "__codelineno-0-1791" ></ a >< span class = "sd" > malformed, or the ``time`` column is missing.</ span >
< a id = "__codelineno-0-1792" name = "__codelineno-0-1792" ></ a >< span class = "sd" > Mt5OperationError: If the trading client cannot fetch rate data.</ span >
< a id = "__codelineno-0-1793" name = "__codelineno-0-1793" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1794" name = "__codelineno-0-1794" ></ a > < span class = "k" > if</ span > < span class = "n" > count</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1795" name = "__codelineno-0-1795" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "s2" > " count must be positive." </ span >
< a id = "__codelineno-0-1796" name = "__codelineno-0-1796" ></ a > < span class = "k" > raise</ span > < span class = "ne" > ValueError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1797" name = "__codelineno-0-1797" ></ a > < span class = "n" > timeframe</ span > < span class = "o" > =</ span > < span class = "n" > parse_timeframe</ span >< span class = "p" > (</ span >< span class = "n" > granularity</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1798" name = "__codelineno-0-1798" ></ a > < span class = "n" > fetch_method</ span > < span class = "o" > =</ span > < span class = "nb" > getattr</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " fetch_latest_rates_as_df" </ span >< span class = "p" > ,</ span > < span class = "kc" > None</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1799" name = "__codelineno-0-1799" ></ a > < span class = "n" > copy_method</ span > < span class = "o" > =</ span > < span class = "nb" > getattr</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " copy_rates_from_pos_as_df" </ span >< span class = "p" > ,</ span > < span class = "kc" > None</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1800" name = "__codelineno-0-1800" ></ a > < span class = "k" > if</ span > < span class = "nb" > callable</ span >< span class = "p" > (</ span >< span class = "n" > fetch_method</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-1801" name = "__codelineno-0-1801" ></ a > < span class = "n" > fetched</ span > < span class = "o" > =</ span > < span class = "n" > fetch_method</ span >< span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > granularity</ span >< span class = "p" > ,</ span > < span class = "n" > count</ span > < span class = "o" > +</ span > < span class = "mi" > 1</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1802" name = "__codelineno-0-1802" ></ a > < span class = "k" > elif</ span > < span class = "nb" > callable</ span >< span class = "p" > (</ span >< span class = "n" > copy_method</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-1803" name = "__codelineno-0-1803" ></ a > < span class = "n" > fetched</ span > < span class = "o" > =</ span > < span class = "n" > copy_method</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1804" name = "__codelineno-0-1804" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span > < span class = "n" > timeframe</ span >< span class = "o" > =</ span >< span class = "n" > timeframe</ span >< span class = "p" > ,</ span > < span class = "n" > start_pos</ span >< span class = "o" > =</ span >< span class = "mi" > 0</ span >< span class = "p" > ,</ span > < span class = "n" > count</ span >< span class = "o" > =</ span >< span class = "n" > count</ span > < span class = "o" > +</ span > < span class = "mi" > 1</ span >
< a id = "__codelineno-0-1805" name = "__codelineno-0-1805" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1806" name = "__codelineno-0-1806" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1807" name = "__codelineno-0-1807" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "s2" > " MT5 trading client cannot fetch rate data." </ span >
< a id = "__codelineno-0-1808" name = "__codelineno-0-1808" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1809" name = "__codelineno-0-1809" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "nb" > isinstance</ span >< span class = "p" > (</ span >< span class = "n" > fetched</ span >< span class = "p" > ,</ span > < span class = "n" > pd</ span >< span class = "o" > .</ span >< span class = "n" > DataFrame</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-1810" name = "__codelineno-0-1810" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-1811" name = "__codelineno-0-1811" ></ a > < span class = "sa" > f</ span >< span class = "s2" > " Malformed rate data for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > at granularity </ span >< span class = "si" > {</ span >< span class = "n" > granularity</ span >< span class = "si" > !r}</ span >< span class = "s2" > : " </ span >
< a id = "__codelineno-0-1812" name = "__codelineno-0-1812" ></ a > < span class = "s2" > " expected a DataFrame." </ span >
< a id = "__codelineno-0-1813" name = "__codelineno-0-1813" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1814" name = "__codelineno-0-1814" ></ a > < span class = "k" > raise</ span > < span class = "ne" > ValueError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span > < span class = "c1" > # noqa: TRY004</ span >
< a id = "__codelineno-0-1815" name = "__codelineno-0-1815" ></ a > < span class = "n" > frame</ span > < span class = "o" > =</ span > < span class = "n" > fetched</ span >
< a id = "__codelineno-0-1816" name = "__codelineno-0-1816" ></ a > < span class = "n" > frame</ span > < span class = "o" > =</ span > < span class = "n" > _ensure_rate_time_column</ span >< span class = "p" > (</ span >< span class = "n" > frame</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1817" name = "__codelineno-0-1817" ></ a > < span class = "k" > if</ span > < span class = "s2" > " time" </ span > < span class = "ow" > not</ span > < span class = "ow" > in</ span > < span class = "n" > frame</ span >< span class = "o" > .</ span >< span class = "n" > columns</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1818" name = "__codelineno-0-1818" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Rate data is missing a time column for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-1819" name = "__codelineno-0-1819" ></ a > < span class = "k" > raise</ span > < span class = "ne" > ValueError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1820" name = "__codelineno-0-1820" ></ a > < span class = "n" > closed</ span > < span class = "o" > =</ span > < span class = "n" > drop_forming_rate_bar</ span >< span class = "p" > (</ span >< span class = "n" > frame</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1821" name = "__codelineno-0-1821" ></ a > < span class = "k" > if</ span > < span class = "n" > closed</ span >< span class = "o" > .</ span >< span class = "n" > empty</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1822" name = "__codelineno-0-1822" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-1823" name = "__codelineno-0-1823" ></ a > < span class = "sa" > f</ span >< span class = "s2" > " Rate data is empty for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > at granularity </ span >< span class = "si" > {</ span >< span class = "n" > granularity</ span >< span class = "si" > !r}</ span >< span class = "s2" > " </ span >
< a id = "__codelineno-0-1824" name = "__codelineno-0-1824" ></ a > < span class = "sa" > f</ span >< span class = "s2" > " with count </ span >< span class = "si" > {</ span >< span class = "n" > count</ span >< span class = "si" > }</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-1825" name = "__codelineno-0-1825" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1826" name = "__codelineno-0-1826" ></ a > < span class = "k" > raise</ span > < span class = "ne" > ValueError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1827" name = "__codelineno-0-1827" ></ a > < span class = "k" > return</ span > < span class = "n" > closed</ span >< span class = "o" > .</ span >< span class = "n" > tail</ span >< span class = "p" > (</ span >< span class = "n" > count</ span >< span class = "p" > )</ span >< span class = "o" > .</ span >< span class = "n" > reset_index</ span >< span class = "p" > (</ span >< span class = "n" > drop</ span >< span class = "o" > =</ span >< span class = "kc" > True</ span >< span class = "p" > )</ span >
2026-06-22 13:53:09 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.fetch_latest_closed_rates_indexed" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > fetch_latest_closed_rates_indexed</ span >
< a href = "#mt5cli.trading.fetch_latest_closed_rates_indexed" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > fetch_latest_closed_rates_indexed</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-22 13:53:09 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > granularity</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > count</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "pandas.DataFrame" > DataFrame</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Fetch the latest closed bars with a UTC DatetimeIndex from a trading client.</ p >
< p > Internally reuses :func:< code > fetch_latest_closed_rates_for_trading_client</ code > for
closed-bar detection and validation, then converts the < code > time</ code > column to a
UTC-aware :class:< code > ~pandas.DatetimeIndex</ code > named < code > "time"</ code > and drops the
original column. Intended for downstream time-series consumers that require
a datetime index rather than a < code > time</ code > column.</ p >
< p >< span class = "doc-section-title" > Parameters:</ span ></ p >
< table >
< thead >
< tr >
< th > Name</ th >
< th > Type</ th >
< th > Description</ th >
< th > Default</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > client</ code >
</ td >
< td >
2026-06-26 13:28:39 +00:00
< code >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ code >
2026-06-22 13:53:09 +00:00
</ td >
< td >
< div class = "doc-md-description" >
< p > Connected trading client with rate-fetch capability.</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > symbol</ code >
</ td >
< td >
< code >< span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Symbol name.</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > granularity</ code >
</ td >
< td >
< code >< span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Timeframe string (for example < code > "M1"</ code > , < code > "H1"</ code > ).</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > count</ code >
</ td >
< td >
< code >< span title = "int" > int</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Maximum number of closed bars to return.</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "pandas.DataFrame" > DataFrame</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Up to < code > count</ code > closed bars ordered oldest to newest, with a</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "pandas.DataFrame" > DataFrame</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > UTC-aware < code > DatetimeIndex</ code > named < code > "time"</ code > . The original < code > time</ code ></ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "pandas.DataFrame" > DataFrame</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > column is dropped.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
2026-06-23 16:59:18 +00:00
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "ValueError" > ValueError</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > If < code > count</ code > is not positive, rate data is empty or
malformed, the < code > time</ code > column is missing, or timestamp data
is invalid or unparseable.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1869" > 1869</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1870" > 1870</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1871" > 1871</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1872" > 1872</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1873" > 1873</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1874" > 1874</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1875" > 1875</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1876" > 1876</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1877" > 1877</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1878" > 1878</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1879" > 1879</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1880" > 1880</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1881" > 1881</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1882" > 1882</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1883" > 1883</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1884" > 1884</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1885" > 1885</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1886" > 1886</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1887" > 1887</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1888" > 1888</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1889" > 1889</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1890" > 1890</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1891" > 1891</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1892" > 1892</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1893" > 1893</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1894" > 1894</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1895" > 1895</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1896" > 1896</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1897" > 1897</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1898" > 1898</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1899" > 1899</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1900" > 1900</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1901" > 1901</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1902" > 1902</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1903" > 1903</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1904" > 1904</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1905" > 1905</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1906" > 1906</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1907" > 1907</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1908" > 1908</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1909" > 1909</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1910" > 1910</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1911" > 1911</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1912" > 1912</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1913" > 1913</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1869" name = "__codelineno-0-1869" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > fetch_latest_closed_rates_indexed</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1870" name = "__codelineno-0-1870" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1871" name = "__codelineno-0-1871" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1872" name = "__codelineno-0-1872" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1873" name = "__codelineno-0-1873" ></ a > < span class = "n" > granularity</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1874" name = "__codelineno-0-1874" ></ a > < span class = "n" > count</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1875" name = "__codelineno-0-1875" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > pd</ span >< span class = "o" > .</ span >< span class = "n" > DataFrame</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1876" name = "__codelineno-0-1876" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Fetch the latest closed bars with a UTC DatetimeIndex from a trading client.</ span >
< a id = "__codelineno-0-1877" name = "__codelineno-0-1877" ></ a >
< a id = "__codelineno-0-1878" name = "__codelineno-0-1878" ></ a >< span class = "sd" > Internally reuses :func:`fetch_latest_closed_rates_for_trading_client` for</ span >
< a id = "__codelineno-0-1879" name = "__codelineno-0-1879" ></ a >< span class = "sd" > closed-bar detection and validation, then converts the ``time`` column to a</ span >
< a id = "__codelineno-0-1880" name = "__codelineno-0-1880" ></ a >< span class = "sd" > UTC-aware :class:`~pandas.DatetimeIndex` named ``" time" `` and drops the</ span >
< a id = "__codelineno-0-1881" name = "__codelineno-0-1881" ></ a >< span class = "sd" > original column. Intended for downstream time-series consumers that require</ span >
< a id = "__codelineno-0-1882" name = "__codelineno-0-1882" ></ a >< span class = "sd" > a datetime index rather than a ``time`` column.</ span >
< a id = "__codelineno-0-1883" name = "__codelineno-0-1883" ></ a >
< a id = "__codelineno-0-1884" name = "__codelineno-0-1884" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-1885" name = "__codelineno-0-1885" ></ a >< span class = "sd" > client: Connected trading client with rate-fetch capability.</ span >
< a id = "__codelineno-0-1886" name = "__codelineno-0-1886" ></ a >< span class = "sd" > symbol: Symbol name.</ span >
< a id = "__codelineno-0-1887" name = "__codelineno-0-1887" ></ a >< span class = "sd" > granularity: Timeframe string (for example ``" M1" ``, ``" H1" ``).</ span >
< a id = "__codelineno-0-1888" name = "__codelineno-0-1888" ></ a >< span class = "sd" > count: Maximum number of closed bars to return.</ span >
< a id = "__codelineno-0-1889" name = "__codelineno-0-1889" ></ a >
< a id = "__codelineno-0-1890" name = "__codelineno-0-1890" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-1891" name = "__codelineno-0-1891" ></ a >< span class = "sd" > Up to ``count`` closed bars ordered oldest to newest, with a</ span >
< a id = "__codelineno-0-1892" name = "__codelineno-0-1892" ></ a >< span class = "sd" > UTC-aware ``DatetimeIndex`` named ``" time" ``. The original ``time``</ span >
< a id = "__codelineno-0-1893" name = "__codelineno-0-1893" ></ a >< span class = "sd" > column is dropped.</ span >
< a id = "__codelineno-0-1894" name = "__codelineno-0-1894" ></ a >
< a id = "__codelineno-0-1895" name = "__codelineno-0-1895" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-1896" name = "__codelineno-0-1896" ></ a >< span class = "sd" > ValueError: If ``count`` is not positive, rate data is empty or</ span >
< a id = "__codelineno-0-1897" name = "__codelineno-0-1897" ></ a >< span class = "sd" > malformed, the ``time`` column is missing, or timestamp data</ span >
< a id = "__codelineno-0-1898" name = "__codelineno-0-1898" ></ a >< span class = "sd" > is invalid or unparseable.</ span >
< a id = "__codelineno-0-1899" name = "__codelineno-0-1899" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1900" name = "__codelineno-0-1900" ></ a > < span class = "n" > frame</ span > < span class = "o" > =</ span > < span class = "n" > fetch_latest_closed_rates_for_trading_client</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1901" name = "__codelineno-0-1901" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1902" name = "__codelineno-0-1902" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1903" name = "__codelineno-0-1903" ></ a > < span class = "n" > granularity</ span >< span class = "o" > =</ span >< span class = "n" > granularity</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1904" name = "__codelineno-0-1904" ></ a > < span class = "n" > count</ span >< span class = "o" > =</ span >< span class = "n" > count</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1905" name = "__codelineno-0-1905" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1906" name = "__codelineno-0-1906" ></ a > < span class = "k" > if</ span > < span class = "s2" > " time" </ span > < span class = "ow" > not</ span > < span class = "ow" > in</ span > < span class = "n" > frame</ span >< span class = "o" > .</ span >< span class = "n" > columns</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1907" name = "__codelineno-0-1907" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Rate data is missing a time column for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-1908" name = "__codelineno-0-1908" ></ a > < span class = "k" > raise</ span > < span class = "ne" > ValueError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1909" name = "__codelineno-0-1909" ></ a > < span class = "n" > idx</ span > < span class = "o" > =</ span > < span class = "n" > _rate_time_to_utc</ span >< span class = "p" > (</ span >< span class = "n" > frame</ span >< span class = "p" > [</ span >< span class = "s2" > " time" </ span >< span class = "p" > ],</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1910" name = "__codelineno-0-1910" ></ a > < span class = "n" > idx</ span >< span class = "o" > .</ span >< span class = "n" > name</ span > < span class = "o" > =</ span > < span class = "s2" > " time" </ span >
< a id = "__codelineno-0-1911" name = "__codelineno-0-1911" ></ a > < span class = "n" > result</ span > < span class = "o" > =</ span > < span class = "n" > frame</ span >< span class = "o" > .</ span >< span class = "n" > drop</ span >< span class = "p" > (</ span >< span class = "n" > columns</ span >< span class = "o" > =</ span >< span class = "p" > [</ span >< span class = "s2" > " time" </ span >< span class = "p" > ])</ span >
< a id = "__codelineno-0-1912" name = "__codelineno-0-1912" ></ a > < span class = "n" > result</ span >< span class = "o" > .</ span >< span class = "n" > index</ span > < span class = "o" > =</ span > < span class = "n" > idx</ span >
< a id = "__codelineno-0-1913" name = "__codelineno-0-1913" ></ a > < span class = "k" > return</ span > < span class = "n" > result</ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
2026-06-29 20:29:14 +00:00
< h3 id = "mt5cli.trading.fetch_recent_history_deals_for_trading_client" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > fetch_recent_history_deals_for_trading_client</ span >
2026-06-14 17:47:52 +00:00
2026-06-29 20:29:14 +00:00
< a href = "#mt5cli.trading.fetch_recent_history_deals_for_trading_client" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > fetch_recent_history_deals_for_trading_client</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._HistoryDealsClientProtocol" > _HistoryDealsClientProtocol</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > group</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > hours</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > =</ span > < span class = "mf" > 24.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "n" > date_to</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "datetime.datetime" > datetime</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "pandas.DataFrame" > DataFrame</ span ></ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
2026-06-29 20:29:14 +00:00
< p > Fetch recent history deals from an already-connected trading client.</ p >
< p > Computes a trailing window ending at < code > date_to</ code > (or < code > datetime.now(UTC)</ code >
when omitted) and delegates to the client's < code > history_deals_get_as_df</ code >
method. The object returned by :func:< code > create_trading_client</ code > (a raw
< code > pdmt5.Mt5DataClient</ code > ) satisfies this protocol directly. Note that
< code > mt5cli.sdk.Mt5CliClient</ code > (used via < code > mt5_session()</ code > ) exposes
< code > history_deals()</ code > , not < code > history_deals_get_as_df()</ code > , and therefore does
not satisfy this protocol; use this helper with trading-client sessions only.</ p >
< p > The returned DataFrame preserves every column from the underlying client
(< code > time</ code > , < code > symbol</ code > , < code > type</ code > , < code > entry</ code > , < code > volume</ code > , < code > profit</ code > ,
< code > position_id</ code > , etc.). No strategy-specific transformations are applied;
downstream packages own entry/exit classification, Kelly fractions, and
any other betting or signal semantics.</ p >
2026-06-14 17:47:52 +00:00
2026-06-29 20:29:14 +00:00
< p >< span class = "doc-section-title" > Parameters:</ span ></ p >
< table >
< thead >
< tr >
< th > Name</ th >
< th > Type</ th >
< th > Description</ th >
< th > Default</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > client</ code >
</ td >
< td >
< code >< span title = "mt5cli.trading._HistoryDealsClientProtocol" > _HistoryDealsClientProtocol</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Connected < code > pdmt5.Mt5DataClient</ code > (or compatible) with
< code > history_deals_get_as_df</ code > capability, as returned by
:func:< code > create_trading_client</ code > .</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > symbol</ code >
</ td >
< td >
< code >< span title = "str" > str</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Optional symbol filter passed to the underlying client.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > group</ code >
</ td >
< td >
< code >< span title = "str" > str</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Optional symbol group filter passed to the underlying client.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > hours</ code >
</ td >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Trailing window length in hours. Must be positive.</ p >
</ div >
</ td >
< td >
< code > 24.0</ code >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > date_to</ code >
</ td >
< td >
< code >< span title = "datetime.datetime" > datetime</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Window end timestamp. Defaults to < code > datetime.now(UTC)</ code > .</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "pandas.DataFrame" > DataFrame</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > DataFrame ordered chronologically by < code > time</ code > (when the column</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "pandas.DataFrame" > DataFrame</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > exists) with a < code > RangeIndex</ code > . Schema-preserving empty DataFrames</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "pandas.DataFrame" > DataFrame</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > (zero rows but columns present) are passed through with a reset</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "pandas.DataFrame" > DataFrame</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > index. Returns a bare empty DataFrame only when the underlying</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "pandas.DataFrame" > DataFrame</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > client returns < code > None</ code > .</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "ValueError" > ValueError</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > If < code > hours</ code > is not positive.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< p > Example::</ p >
< div class = "highlight" >< pre >< span ></ span >< code > from mt5cli import (
create_trading_client,
fetch_recent_history_deals_for_trading_client,
)
client = create_trading_client(login=12345, server=" Broker-Demo" )
try:
deals_df = fetch_recent_history_deals_for_trading_client(
client,
symbol=" JP225" ,
hours=24,
)
finally:
client.shutdown()
</ code ></ pre ></ div >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1916" > 1916</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1917" > 1917</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1918" > 1918</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1919" > 1919</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1920" > 1920</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1921" > 1921</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1922" > 1922</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1923" > 1923</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1924" > 1924</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1925" > 1925</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1926" > 1926</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1927" > 1927</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1928" > 1928</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1929" > 1929</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1930" > 1930</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1931" > 1931</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1932" > 1932</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1933" > 1933</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1934" > 1934</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1935" > 1935</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1936" > 1936</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1937" > 1937</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1938" > 1938</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1939" > 1939</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1940" > 1940</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1941" > 1941</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1942" > 1942</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1943" > 1943</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1944" > 1944</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1945" > 1945</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1946" > 1946</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1947" > 1947</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1948" > 1948</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1949" > 1949</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1950" > 1950</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1951" > 1951</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1952" > 1952</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1953" > 1953</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1954" > 1954</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1955" > 1955</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1956" > 1956</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1957" > 1957</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1958" > 1958</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1959" > 1959</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1960" > 1960</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1961" > 1961</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1962" > 1962</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1963" > 1963</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1964" > 1964</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1965" > 1965</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1966" > 1966</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1967" > 1967</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1968" > 1968</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1969" > 1969</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1970" > 1970</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1971" > 1971</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1972" > 1972</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1973" > 1973</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1974" > 1974</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1975" > 1975</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1976" > 1976</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1977" > 1977</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1978" > 1978</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1979" > 1979</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1980" > 1980</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1981" > 1981</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1982" > 1982</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1983" > 1983</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1984" > 1984</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1985" > 1985</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1986" > 1986</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1987" > 1987</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1988" > 1988</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1989" > 1989</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1990" > 1990</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1991" > 1991</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1992" > 1992</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1993" > 1993</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1916" name = "__codelineno-0-1916" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > fetch_recent_history_deals_for_trading_client</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1917" name = "__codelineno-0-1917" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _HistoryDealsClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1918" name = "__codelineno-0-1918" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1919" name = "__codelineno-0-1919" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1920" name = "__codelineno-0-1920" ></ a > < span class = "n" > group</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1921" name = "__codelineno-0-1921" ></ a > < span class = "n" > hours</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > =</ span > < span class = "mf" > 24.0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1922" name = "__codelineno-0-1922" ></ a > < span class = "n" > date_to</ span >< span class = "p" > :</ span > < span class = "n" > datetime</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1923" name = "__codelineno-0-1923" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > pd</ span >< span class = "o" > .</ span >< span class = "n" > DataFrame</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1924" name = "__codelineno-0-1924" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Fetch recent history deals from an already-connected trading client.</ span >
< a id = "__codelineno-0-1925" name = "__codelineno-0-1925" ></ a >
< a id = "__codelineno-0-1926" name = "__codelineno-0-1926" ></ a >< span class = "sd" > Computes a trailing window ending at ``date_to`` (or ``datetime.now(UTC)``</ span >
< a id = "__codelineno-0-1927" name = "__codelineno-0-1927" ></ a >< span class = "sd" > when omitted) and delegates to the client' s ``history_deals_get_as_df``</ span >
< a id = "__codelineno-0-1928" name = "__codelineno-0-1928" ></ a >< span class = "sd" > method. The object returned by :func:`create_trading_client` (a raw</ span >
< a id = "__codelineno-0-1929" name = "__codelineno-0-1929" ></ a >< span class = "sd" > ``pdmt5.Mt5DataClient``) satisfies this protocol directly. Note that</ span >
< a id = "__codelineno-0-1930" name = "__codelineno-0-1930" ></ a >< span class = "sd" > ``mt5cli.sdk.Mt5CliClient`` (used via ``mt5_session()``) exposes</ span >
< a id = "__codelineno-0-1931" name = "__codelineno-0-1931" ></ a >< span class = "sd" > ``history_deals()``, not ``history_deals_get_as_df()``, and therefore does</ span >
< a id = "__codelineno-0-1932" name = "__codelineno-0-1932" ></ a >< span class = "sd" > not satisfy this protocol; use this helper with trading-client sessions only.</ span >
< a id = "__codelineno-0-1933" name = "__codelineno-0-1933" ></ a >
< a id = "__codelineno-0-1934" name = "__codelineno-0-1934" ></ a >< span class = "sd" > The returned DataFrame preserves every column from the underlying client</ span >
< a id = "__codelineno-0-1935" name = "__codelineno-0-1935" ></ a >< span class = "sd" > (``time``, ``symbol``, ``type``, ``entry``, ``volume``, ``profit``,</ span >
< a id = "__codelineno-0-1936" name = "__codelineno-0-1936" ></ a >< span class = "sd" > ``position_id``, etc.). No strategy-specific transformations are applied;</ span >
< a id = "__codelineno-0-1937" name = "__codelineno-0-1937" ></ a >< span class = "sd" > downstream packages own entry/exit classification, Kelly fractions, and</ span >
< a id = "__codelineno-0-1938" name = "__codelineno-0-1938" ></ a >< span class = "sd" > any other betting or signal semantics.</ span >
< a id = "__codelineno-0-1939" name = "__codelineno-0-1939" ></ a >
< a id = "__codelineno-0-1940" name = "__codelineno-0-1940" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-1941" name = "__codelineno-0-1941" ></ a >< span class = "sd" > client: Connected ``pdmt5.Mt5DataClient`` (or compatible) with</ span >
< a id = "__codelineno-0-1942" name = "__codelineno-0-1942" ></ a >< span class = "sd" > ``history_deals_get_as_df`` capability, as returned by</ span >
< a id = "__codelineno-0-1943" name = "__codelineno-0-1943" ></ a >< span class = "sd" > :func:`create_trading_client`.</ span >
< a id = "__codelineno-0-1944" name = "__codelineno-0-1944" ></ a >< span class = "sd" > symbol: Optional symbol filter passed to the underlying client.</ span >
< a id = "__codelineno-0-1945" name = "__codelineno-0-1945" ></ a >< span class = "sd" > group: Optional symbol group filter passed to the underlying client.</ span >
< a id = "__codelineno-0-1946" name = "__codelineno-0-1946" ></ a >< span class = "sd" > hours: Trailing window length in hours. Must be positive.</ span >
< a id = "__codelineno-0-1947" name = "__codelineno-0-1947" ></ a >< span class = "sd" > date_to: Window end timestamp. Defaults to ``datetime.now(UTC)``.</ span >
< a id = "__codelineno-0-1948" name = "__codelineno-0-1948" ></ a >
< a id = "__codelineno-0-1949" name = "__codelineno-0-1949" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-1950" name = "__codelineno-0-1950" ></ a >< span class = "sd" > DataFrame ordered chronologically by ``time`` (when the column</ span >
< a id = "__codelineno-0-1951" name = "__codelineno-0-1951" ></ a >< span class = "sd" > exists) with a ``RangeIndex``. Schema-preserving empty DataFrames</ span >
< a id = "__codelineno-0-1952" name = "__codelineno-0-1952" ></ a >< span class = "sd" > (zero rows but columns present) are passed through with a reset</ span >
< a id = "__codelineno-0-1953" name = "__codelineno-0-1953" ></ a >< span class = "sd" > index. Returns a bare empty DataFrame only when the underlying</ span >
< a id = "__codelineno-0-1954" name = "__codelineno-0-1954" ></ a >< span class = "sd" > client returns ``None``.</ span >
< a id = "__codelineno-0-1955" name = "__codelineno-0-1955" ></ a >
< a id = "__codelineno-0-1956" name = "__codelineno-0-1956" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-1957" name = "__codelineno-0-1957" ></ a >< span class = "sd" > ValueError: If ``hours`` is not positive.</ span >
< a id = "__codelineno-0-1958" name = "__codelineno-0-1958" ></ a >
< a id = "__codelineno-0-1959" name = "__codelineno-0-1959" ></ a >< span class = "sd" > Example::</ span >
< a id = "__codelineno-0-1960" name = "__codelineno-0-1960" ></ a >
< a id = "__codelineno-0-1961" name = "__codelineno-0-1961" ></ a >< span class = "sd" > from mt5cli import (</ span >
< a id = "__codelineno-0-1962" name = "__codelineno-0-1962" ></ a >< span class = "sd" > create_trading_client,</ span >
< a id = "__codelineno-0-1963" name = "__codelineno-0-1963" ></ a >< span class = "sd" > fetch_recent_history_deals_for_trading_client,</ span >
< a id = "__codelineno-0-1964" name = "__codelineno-0-1964" ></ a >< span class = "sd" > )</ span >
< a id = "__codelineno-0-1965" name = "__codelineno-0-1965" ></ a >
< a id = "__codelineno-0-1966" name = "__codelineno-0-1966" ></ a >< span class = "sd" > client = create_trading_client(login=12345, server=" Broker-Demo" )</ span >
< a id = "__codelineno-0-1967" name = "__codelineno-0-1967" ></ a >< span class = "sd" > try:</ span >
< a id = "__codelineno-0-1968" name = "__codelineno-0-1968" ></ a >< span class = "sd" > deals_df = fetch_recent_history_deals_for_trading_client(</ span >
< a id = "__codelineno-0-1969" name = "__codelineno-0-1969" ></ a >< span class = "sd" > client,</ span >
< a id = "__codelineno-0-1970" name = "__codelineno-0-1970" ></ a >< span class = "sd" > symbol=" JP225" ,</ span >
< a id = "__codelineno-0-1971" name = "__codelineno-0-1971" ></ a >< span class = "sd" > hours=24,</ span >
< a id = "__codelineno-0-1972" name = "__codelineno-0-1972" ></ a >< span class = "sd" > )</ span >
< a id = "__codelineno-0-1973" name = "__codelineno-0-1973" ></ a >< span class = "sd" > finally:</ span >
< a id = "__codelineno-0-1974" name = "__codelineno-0-1974" ></ a >< span class = "sd" > client.shutdown()</ span >
< a id = "__codelineno-0-1975" name = "__codelineno-0-1975" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1976" name = "__codelineno-0-1976" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > isfinite</ span >< span class = "p" > (</ span >< span class = "n" > hours</ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "n" > hours</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1977" name = "__codelineno-0-1977" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "s2" > " hours must be finite and positive." </ span >
< a id = "__codelineno-0-1978" name = "__codelineno-0-1978" ></ a > < span class = "k" > raise</ span > < span class = "ne" > ValueError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1979" name = "__codelineno-0-1979" ></ a > < span class = "n" > end</ span > < span class = "o" > =</ span > < span class = "n" > date_to</ span > < span class = "k" > if</ span > < span class = "n" > date_to</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span > < span class = "k" > else</ span > < span class = "n" > datetime</ span >< span class = "o" > .</ span >< span class = "n" > now</ span >< span class = "p" > (</ span >< span class = "n" > UTC</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1980" name = "__codelineno-0-1980" ></ a > < span class = "n" > start</ span > < span class = "o" > =</ span > < span class = "n" > end</ span > < span class = "o" > -</ span > < span class = "n" > timedelta</ span >< span class = "p" > (</ span >< span class = "n" > hours</ span >< span class = "o" > =</ span >< span class = "n" > hours</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1981" name = "__codelineno-0-1981" ></ a > < span class = "n" > raw</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > history_deals_get_as_df</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1982" name = "__codelineno-0-1982" ></ a > < span class = "n" > date_from</ span >< span class = "o" > =</ span >< span class = "n" > start</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1983" name = "__codelineno-0-1983" ></ a > < span class = "n" > date_to</ span >< span class = "o" > =</ span >< span class = "n" > end</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1984" name = "__codelineno-0-1984" ></ a > < span class = "n" > group</ span >< span class = "o" > =</ span >< span class = "n" > group</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1985" name = "__codelineno-0-1985" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1986" name = "__codelineno-0-1986" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1987" name = "__codelineno-0-1987" ></ a > < span class = "k" > if</ span > < span class = "n" > raw</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1988" name = "__codelineno-0-1988" ></ a > < span class = "k" > return</ span > < span class = "n" > pd</ span >< span class = "o" > .</ span >< span class = "n" > DataFrame</ span >< span class = "p" > ()</ span >
< a id = "__codelineno-0-1989" name = "__codelineno-0-1989" ></ a > < span class = "k" > if</ span > < span class = "n" > raw</ span >< span class = "o" > .</ span >< span class = "n" > empty</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1990" name = "__codelineno-0-1990" ></ a > < span class = "k" > return</ span > < span class = "n" > raw</ span >< span class = "o" > .</ span >< span class = "n" > reset_index</ span >< span class = "p" > (</ span >< span class = "n" > drop</ span >< span class = "o" > =</ span >< span class = "kc" > True</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1991" name = "__codelineno-0-1991" ></ a > < span class = "k" > if</ span > < span class = "s2" > " time" </ span > < span class = "ow" > in</ span > < span class = "n" > raw</ span >< span class = "o" > .</ span >< span class = "n" > columns</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1992" name = "__codelineno-0-1992" ></ a > < span class = "n" > raw</ span > < span class = "o" > =</ span > < span class = "n" > raw</ span >< span class = "o" > .</ span >< span class = "n" > sort_values</ span >< span class = "p" > (</ span >< span class = "s2" > " time" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1993" name = "__codelineno-0-1993" ></ a > < span class = "k" > return</ span > < span class = "n" > raw</ span >< span class = "o" > .</ span >< span class = "n" > reset_index</ span >< span class = "p" > (</ span >< span class = "n" > drop</ span >< span class = "o" > =</ span >< span class = "kc" > True</ span >< span class = "p" > )</ span >
2026-06-29 20:29:14 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.get_account_snapshot" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > get_account_snapshot</ span >
< a href = "#mt5cli.trading.get_account_snapshot" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > get_account_snapshot</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "dict" > dict</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return normalized account state with stable keys.</ p >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-696" > 696</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-697" > 697</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-698" > 698</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-699" > 699</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-700" > 700</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-701" > 701</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-702" > 702</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-703" > 703</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-704" > 704</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-696" name = "__codelineno-0-696" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > get_account_snapshot</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-697" name = "__codelineno-0-697" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-698" name = "__codelineno-0-698" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > dict</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ,</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-699" name = "__codelineno-0-699" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return normalized account state with stable keys.""" </ span >
< a id = "__codelineno-0-700" name = "__codelineno-0-700" ></ a > < span class = "n" > value</ span > < span class = "o" > =</ span > < span class = "n" > _call_snapshot_method</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " account_info_as_dict" </ span >< span class = "p" > ,</ span > < span class = "s2" > " account_info" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-701" name = "__codelineno-0-701" ></ a > < span class = "k" > return</ span > < span class = "n" > cast</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-702" name = "__codelineno-0-702" ></ a > < span class = "s2" > " dict[str, float | int | str | None]" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-703" name = "__codelineno-0-703" ></ a > < span class = "n" > _snapshot_from_value</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > ,</ span > < span class = "n" > _ACCOUNT_SNAPSHOT_FIELDS</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-704" name = "__codelineno-0-704" ></ a > < span class = "p" > )</ span >
2026-06-29 20:29:14 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.get_positions_frame" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > get_positions_frame</ span >
< a href = "#mt5cli.trading.get_positions_frame" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > get_positions_frame</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "pandas.DataFrame" > DataFrame</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return open positions as a DataFrame with stable baseline columns.</ p >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-733" > 733</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-734" > 734</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-735" > 735</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-736" > 736</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-737" > 737</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-738" > 738</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-739" > 739</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-740" > 740</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-741" > 741</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-742" > 742</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-733" name = "__codelineno-0-733" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > get_positions_frame</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-734" name = "__codelineno-0-734" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-735" name = "__codelineno-0-735" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-736" name = "__codelineno-0-736" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > pd</ span >< span class = "o" > .</ span >< span class = "n" > DataFrame</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-737" name = "__codelineno-0-737" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return open positions as a DataFrame with stable baseline columns.""" </ span >
< a id = "__codelineno-0-738" name = "__codelineno-0-738" ></ a > < span class = "n" > frame</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > positions_get_as_df</ span >< span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-739" name = "__codelineno-0-739" ></ a > < span class = "k" > for</ span > < span class = "n" > column</ span > < span class = "ow" > in</ span > < span class = "n" > POSITION_COLUMNS</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-740" name = "__codelineno-0-740" ></ a > < span class = "k" > if</ span > < span class = "n" > column</ span > < span class = "ow" > not</ span > < span class = "ow" > in</ span > < span class = "n" > frame</ span >< span class = "o" > .</ span >< span class = "n" > columns</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-741" name = "__codelineno-0-741" ></ a > < span class = "n" > frame</ span >< span class = "p" > [</ span >< span class = "n" > column</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > pd</ span >< span class = "o" > .</ span >< span class = "n" > Series</ span >< span class = "p" > (</ span >< span class = "n" > dtype</ span >< span class = "o" > =</ span >< span class = "s2" > " object" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-742" name = "__codelineno-0-742" ></ a > < span class = "k" > return</ span > < span class = "n" > frame</ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.get_symbol_snapshot" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > get_symbol_snapshot</ span >
< a href = "#mt5cli.trading.get_symbol_snapshot" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > get_symbol_snapshot</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >
2026-06-14 17:47:52 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "dict" > dict</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "bool" > bool</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return normalized symbol metadata required for trading decisions.</ p >
2026-06-18 16:03:06 +00:00
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-707" > 707</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-708" > 708</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-709" > 709</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-710" > 710</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-711" > 711</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-712" > 712</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-713" > 713</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-714" > 714</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-715" > 715</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-716" > 716</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-707" name = "__codelineno-0-707" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > get_symbol_snapshot</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-708" name = "__codelineno-0-708" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-709" name = "__codelineno-0-709" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-710" name = "__codelineno-0-710" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > dict</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ,</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "nb" > bool</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-711" name = "__codelineno-0-711" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return normalized symbol metadata required for trading decisions.""" </ span >
< a id = "__codelineno-0-712" name = "__codelineno-0-712" ></ a > < span class = "n" > method</ span > < span class = "o" > =</ span > < span class = "nb" > getattr</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " symbol_info_as_dict" </ span >< span class = "p" > ,</ span > < span class = "kc" > None</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-713" name = "__codelineno-0-713" ></ a > < span class = "n" > value</ span > < span class = "o" > =</ span > < span class = "n" > method</ span >< span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > )</ span > < span class = "k" > if</ span > < span class = "nb" > callable</ span >< span class = "p" > (</ span >< span class = "n" > method</ span >< span class = "p" > )</ span > < span class = "k" > else</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > symbol_info</ span >< span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-714" name = "__codelineno-0-714" ></ a > < span class = "n" > snapshot</ span > < span class = "o" > =</ span > < span class = "n" > _snapshot_from_value</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > ,</ span > < span class = "n" > _SYMBOL_SNAPSHOT_FIELDS</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-715" name = "__codelineno-0-715" ></ a > < span class = "n" > snapshot</ span >< span class = "p" > [</ span >< span class = "s2" > " symbol" </ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > snapshot</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " symbol" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "n" > symbol</ span >
< a id = "__codelineno-0-716" name = "__codelineno-0-716" ></ a > < span class = "k" > return</ span > < span class = "n" > cast</ span >< span class = "p" > (</ span >< span class = "s2" > " dict[str, float | int | str | bool | None]" </ span >< span class = "p" > ,</ span > < span class = "n" > snapshot</ span >< span class = "p" > )</ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.get_tick_snapshot" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > get_tick_snapshot</ span >
< a href = "#mt5cli.trading.get_tick_snapshot" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > get_tick_snapshot</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >
2026-06-14 17:47:52 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "dict" > dict</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return normalized latest tick data, including bid, ask, and timestamp.</ p >
2026-06-11 10:33:27 +00:00
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-719" > 719</ a ></ span >
2026-06-29 20:29:14 +00:00
< span class = "normal" >< a href = "#__codelineno-0-720" > 720</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-721" > 721</ a ></ span >
2026-07-04 05:20:25 +00:00
< span class = "normal" >< a href = "#__codelineno-0-722" > 722</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-723" > 723</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-724" > 724</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-725" > 725</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-726" > 726</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-727" > 727</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-728" > 728</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-729" > 729</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-730" > 730</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-719" name = "__codelineno-0-719" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > get_tick_snapshot</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-720" name = "__codelineno-0-720" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-721" name = "__codelineno-0-721" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-722" name = "__codelineno-0-722" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > dict</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ,</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-723" name = "__codelineno-0-723" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return normalized latest tick data, including bid, ask, and timestamp.""" </ span >
< a id = "__codelineno-0-724" name = "__codelineno-0-724" ></ a > < span class = "n" > method</ span > < span class = "o" > =</ span > < span class = "nb" > getattr</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " symbol_info_tick_as_dict" </ span >< span class = "p" > ,</ span > < span class = "kc" > None</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-725" name = "__codelineno-0-725" ></ a > < span class = "n" > value</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-726" name = "__codelineno-0-726" ></ a > < span class = "n" > method</ span >< span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > )</ span > < span class = "k" > if</ span > < span class = "nb" > callable</ span >< span class = "p" > (</ span >< span class = "n" > method</ span >< span class = "p" > )</ span > < span class = "k" > else</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > symbol_info_tick</ span >< span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-727" name = "__codelineno-0-727" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-728" name = "__codelineno-0-728" ></ a > < span class = "n" > snapshot</ span > < span class = "o" > =</ span > < span class = "n" > _snapshot_from_value</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > ,</ span > < span class = "n" > _TICK_SNAPSHOT_FIELDS</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-729" name = "__codelineno-0-729" ></ a > < span class = "n" > snapshot</ span >< span class = "p" > [</ span >< span class = "s2" > " symbol" </ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > snapshot</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " symbol" </ span >< span class = "p" > )</ span > < span class = "ow" > or</ span > < span class = "n" > symbol</ span >
< a id = "__codelineno-0-730" name = "__codelineno-0-730" ></ a > < span class = "k" > return</ span > < span class = "n" > cast</ span >< span class = "p" > (</ span >< span class = "s2" > " dict[str, float | int | None]" </ span >< span class = "p" > ,</ span > < span class = "n" > snapshot</ span >< span class = "p" > )</ span >
2026-06-11 10:33:27 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.mt5_trading_session" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > mt5_trading_session</ span >
< a href = "#mt5cli.trading.mt5_trading_session" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > mt5_trading_session</ span >< span class = "p" > (</ span >
2026-06-14 17:47:52 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > config</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "pdmt5.Mt5Config" > Mt5Config</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > login</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > password</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > server</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "n" > path</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "n" > timeout</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a > < span class = "n" > retry_count</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > =</ span > < span class = "mi" > 0</ span >< span class = "p" > ,</ span >
2026-06-29 20:29:14 +00:00
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "collections.abc.Iterator" > Iterator</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "mt5cli.trading._TradingHistoryDealsClientProtocol" > _TradingHistoryDealsClientProtocol</ span ></ span >< span class = "p" > ]</ span >
2026-06-11 10:33:27 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Open a trading-capable MT5 session and always shut down safely.</ p >
< p > Launches the MetaTrader 5 terminal using < code > Mt5Config.path</ code > when set,
initializes and logs in via < code > initialize_and_login_mt5()</ code > , yields a
2026-06-26 13:28:39 +00:00
connected client supporting required MT5 methods, and calls < code > shutdown()</ code >
on exit even when an error is raised inside the context.</ p >
2026-06-11 10:33:27 +00:00
< p >< span class = "doc-section-title" > Parameters:</ span ></ p >
< table >
< thead >
< tr >
< th > Name</ th >
< th > Type</ th >
< th > Description</ th >
< th > Default</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > config</ code >
</ td >
< td >
< code >< span title = "pdmt5.Mt5Config" > Mt5Config</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > MT5 connection configuration. Defaults to an empty config that
attaches to a running terminal.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
2026-06-14 17:47:52 +00:00
< tr class = "doc-section-item" >
< td >
< code > login</ code >
</ td >
< td >
< code >< span title = "int" > int</ span > | < span title = "str" > str</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Optional trading account login.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > password</ code >
</ td >
< td >
< code >< span title = "str" > str</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Optional trading account password.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > server</ code >
</ td >
< td >
< code >< span title = "str" > str</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Optional trading server name.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > path</ code >
</ td >
< td >
< code >< span title = "str" > str</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Optional terminal executable path.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > timeout</ code >
</ td >
< td >
< code >< span title = "int" > int</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Optional connection timeout in milliseconds.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
2026-06-11 10:33:27 +00:00
< tr class = "doc-section-item" >
< td >
< code > retry_count</ code >
</ td >
< td >
< code >< span title = "int" > int</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
2026-06-26 13:28:39 +00:00
< p > Number of initialization retries.</ p >
2026-06-29 20:29:14 +00:00
</ div >
</ td >
< td >
< code > 0</ code >
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Yields:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "mt5cli.trading._TradingHistoryDealsClientProtocol" > _TradingHistoryDealsClientProtocol</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Connected client supporting required MT5 trading methods.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1996" > 1996</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1997" > 1997</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1998" > 1998</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1999" > 1999</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2000" > 2000</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2001" > 2001</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2002" > 2002</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2003" > 2003</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2004" > 2004</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2005" > 2005</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2006" > 2006</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2007" > 2007</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2008" > 2008</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2009" > 2009</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2010" > 2010</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2011" > 2011</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2012" > 2012</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2013" > 2013</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2014" > 2014</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2015" > 2015</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2016" > 2016</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2017" > 2017</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2018" > 2018</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2019" > 2019</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2020" > 2020</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2021" > 2021</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2022" > 2022</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2023" > 2023</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2024" > 2024</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2025" > 2025</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2026" > 2026</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2027" > 2027</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2028" > 2028</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2029" > 2029</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2030" > 2030</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2031" > 2031</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2032" > 2032</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2033" > 2033</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2034" > 2034</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2035" > 2035</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2036" > 2036</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2037" > 2037</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2038" > 2038</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-2039" > 2039</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1996" name = "__codelineno-0-1996" ></ a >< span class = "nd" > @contextmanager</ span >
< a id = "__codelineno-0-1997" name = "__codelineno-0-1997" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > mt5_trading_session</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1998" name = "__codelineno-0-1998" ></ a > < span class = "n" > config</ span >< span class = "p" > :</ span > < span class = "n" > Mt5Config</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1999" name = "__codelineno-0-1999" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2000" name = "__codelineno-0-2000" ></ a > < span class = "n" > login</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2001" name = "__codelineno-0-2001" ></ a > < span class = "n" > password</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2002" name = "__codelineno-0-2002" ></ a > < span class = "n" > server</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2003" name = "__codelineno-0-2003" ></ a > < span class = "n" > path</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2004" name = "__codelineno-0-2004" ></ a > < span class = "n" > timeout</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2005" name = "__codelineno-0-2005" ></ a > < span class = "n" > retry_count</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > =</ span > < span class = "mi" > 0</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2006" name = "__codelineno-0-2006" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > Iterator</ span >< span class = "p" > [</ span >< span class = "n" > _TradingHistoryDealsClientProtocol</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-2007" name = "__codelineno-0-2007" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Open a trading-capable MT5 session and always shut down safely.</ span >
< a id = "__codelineno-0-2008" name = "__codelineno-0-2008" ></ a >
< a id = "__codelineno-0-2009" name = "__codelineno-0-2009" ></ a >< span class = "sd" > Launches the MetaTrader 5 terminal using ``Mt5Config.path`` when set,</ span >
< a id = "__codelineno-0-2010" name = "__codelineno-0-2010" ></ a >< span class = "sd" > initializes and logs in via ``initialize_and_login_mt5()``, yields a</ span >
< a id = "__codelineno-0-2011" name = "__codelineno-0-2011" ></ a >< span class = "sd" > connected client supporting required MT5 methods, and calls ``shutdown()``</ span >
< a id = "__codelineno-0-2012" name = "__codelineno-0-2012" ></ a >< span class = "sd" > on exit even when an error is raised inside the context.</ span >
< a id = "__codelineno-0-2013" name = "__codelineno-0-2013" ></ a >
< a id = "__codelineno-0-2014" name = "__codelineno-0-2014" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-2015" name = "__codelineno-0-2015" ></ a >< span class = "sd" > config: MT5 connection configuration. Defaults to an empty config that</ span >
< a id = "__codelineno-0-2016" name = "__codelineno-0-2016" ></ a >< span class = "sd" > attaches to a running terminal.</ span >
< a id = "__codelineno-0-2017" name = "__codelineno-0-2017" ></ a >< span class = "sd" > login: Optional trading account login.</ span >
< a id = "__codelineno-0-2018" name = "__codelineno-0-2018" ></ a >< span class = "sd" > password: Optional trading account password.</ span >
< a id = "__codelineno-0-2019" name = "__codelineno-0-2019" ></ a >< span class = "sd" > server: Optional trading server name.</ span >
< a id = "__codelineno-0-2020" name = "__codelineno-0-2020" ></ a >< span class = "sd" > path: Optional terminal executable path.</ span >
< a id = "__codelineno-0-2021" name = "__codelineno-0-2021" ></ a >< span class = "sd" > timeout: Optional connection timeout in milliseconds.</ span >
< a id = "__codelineno-0-2022" name = "__codelineno-0-2022" ></ a >< span class = "sd" > retry_count: Number of initialization retries.</ span >
< a id = "__codelineno-0-2023" name = "__codelineno-0-2023" ></ a >
< a id = "__codelineno-0-2024" name = "__codelineno-0-2024" ></ a >< span class = "sd" > Yields:</ span >
< a id = "__codelineno-0-2025" name = "__codelineno-0-2025" ></ a >< span class = "sd" > Connected client supporting required MT5 trading methods.</ span >
< a id = "__codelineno-0-2026" name = "__codelineno-0-2026" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-2027" name = "__codelineno-0-2027" ></ a > < span class = "n" > client</ span > < span class = "o" > =</ span > < span class = "n" > create_trading_client</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-2028" name = "__codelineno-0-2028" ></ a > < span class = "n" > config</ span >< span class = "o" > =</ span >< span class = "n" > config</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2029" name = "__codelineno-0-2029" ></ a > < span class = "n" > login</ span >< span class = "o" > =</ span >< span class = "n" > login</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2030" name = "__codelineno-0-2030" ></ a > < span class = "n" > password</ span >< span class = "o" > =</ span >< span class = "n" > password</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2031" name = "__codelineno-0-2031" ></ a > < span class = "n" > server</ span >< span class = "o" > =</ span >< span class = "n" > server</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2032" name = "__codelineno-0-2032" ></ a > < span class = "n" > path</ span >< span class = "o" > =</ span >< span class = "n" > path</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2033" name = "__codelineno-0-2033" ></ a > < span class = "n" > timeout</ span >< span class = "o" > =</ span >< span class = "n" > timeout</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2034" name = "__codelineno-0-2034" ></ a > < span class = "n" > retry_count</ span >< span class = "o" > =</ span >< span class = "n" > retry_count</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-2035" name = "__codelineno-0-2035" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-2036" name = "__codelineno-0-2036" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-2037" name = "__codelineno-0-2037" ></ a > < span class = "k" > yield</ span > < span class = "n" > client</ span >
< a id = "__codelineno-0-2038" name = "__codelineno-0-2038" ></ a > < span class = "k" > finally</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-2039" name = "__codelineno-0-2039" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > shutdown</ span >< span class = "p" > ()</ span >
2026-06-18 16:03:06 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.normalize_order_volume" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > normalize_order_volume</ span >
< a href = "#mt5cli.trading.normalize_order_volume" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > normalize_order_volume</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > volume</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > volume_min</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > volume_max</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > volume_step</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "float" > float</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Normalize a requested order volume to broker volume constraints.</ p >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Volume floored to the nearest valid broker step from < code > volume_min</ code > ,</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > capped at < code > volume_max</ code > when finite and positive, and rounded</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > deterministically. Returns < code > 0.0</ code > when inputs or constraints are</ p >
</ div >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code >< span title = "float" > float</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > invalid, non-finite, or the capped request is below < code > volume_min</ code > .</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-410" > 410</ a ></ span >
2026-06-29 20:29:14 +00:00
< span class = "normal" >< a href = "#__codelineno-0-411" > 411</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-412" > 412</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-413" > 413</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-414" > 414</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-415" > 415</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-416" > 416</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-417" > 417</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-418" > 418</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-419" > 419</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-420" > 420</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-421" > 421</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-422" > 422</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-423" > 423</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-424" > 424</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-425" > 425</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-426" > 426</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-427" > 427</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-428" > 428</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-429" > 429</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-430" > 430</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-431" > 431</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-432" > 432</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-433" > 433</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-434" > 434</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-435" > 435</ a ></ span >
2026-07-04 05:20:25 +00:00
< span class = "normal" >< a href = "#__codelineno-0-436" > 436</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-437" > 437</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-438" > 438</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-439" > 439</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-410" name = "__codelineno-0-410" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > normalize_order_volume</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-411" name = "__codelineno-0-411" ></ a > < span class = "n" > volume</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-412" name = "__codelineno-0-412" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-413" name = "__codelineno-0-413" ></ a > < span class = "n" > volume_min</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-414" name = "__codelineno-0-414" ></ a > < span class = "n" > volume_max</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-415" name = "__codelineno-0-415" ></ a > < span class = "n" > volume_step</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-416" name = "__codelineno-0-416" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > float</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-417" name = "__codelineno-0-417" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Normalize a requested order volume to broker volume constraints.</ span >
< a id = "__codelineno-0-418" name = "__codelineno-0-418" ></ a >
< a id = "__codelineno-0-419" name = "__codelineno-0-419" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-420" name = "__codelineno-0-420" ></ a >< span class = "sd" > Volume floored to the nearest valid broker step from ``volume_min``,</ span >
< a id = "__codelineno-0-421" name = "__codelineno-0-421" ></ a >< span class = "sd" > capped at ``volume_max`` when finite and positive, and rounded</ span >
< a id = "__codelineno-0-422" name = "__codelineno-0-422" ></ a >< span class = "sd" > deterministically. Returns ``0.0`` when inputs or constraints are</ span >
< a id = "__codelineno-0-423" name = "__codelineno-0-423" ></ a >< span class = "sd" > invalid, non-finite, or the capped request is below ``volume_min``.</ span >
< a id = "__codelineno-0-424" name = "__codelineno-0-424" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-425" name = "__codelineno-0-425" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > _is_finite_number</ span >< span class = "p" > (</ span >< span class = "n" > volume</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-426" name = "__codelineno-0-426" ></ a > < span class = "k" > return</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-427" name = "__codelineno-0-427" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > _is_positive_finite_number</ span >< span class = "p" > (</ span >< span class = "n" > volume_min</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-428" name = "__codelineno-0-428" ></ a > < span class = "k" > return</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-429" name = "__codelineno-0-429" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > _is_positive_finite_number</ span >< span class = "p" > (</ span >< span class = "n" > volume_step</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-430" name = "__codelineno-0-430" ></ a > < span class = "k" > return</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-431" name = "__codelineno-0-431" ></ a > < span class = "n" > has_volume_cap</ span > < span class = "o" > =</ span > < span class = "n" > _is_positive_finite_number</ span >< span class = "p" > (</ span >< span class = "n" > volume_max</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-432" name = "__codelineno-0-432" ></ a > < span class = "n" > capped</ span > < span class = "o" > =</ span > < span class = "nb" > min</ span >< span class = "p" > (</ span >< span class = "n" > volume</ span >< span class = "p" > ,</ span > < span class = "n" > volume_max</ span >< span class = "p" > )</ span > < span class = "k" > if</ span > < span class = "n" > has_volume_cap</ span > < span class = "k" > else</ span > < span class = "n" > volume</ span >
< a id = "__codelineno-0-433" name = "__codelineno-0-433" ></ a > < span class = "k" > if</ span > < span class = "n" > capped</ span > < span class = "o" > < </ span > < span class = "n" > volume_min</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-434" name = "__codelineno-0-434" ></ a > < span class = "k" > return</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-0-435" name = "__codelineno-0-435" ></ a > < span class = "n" > steps</ span > < span class = "o" > =</ span > < span class = "n" > floor</ span >< span class = "p" > (((</ span >< span class = "n" > capped</ span > < span class = "o" > -</ span > < span class = "n" > volume_min</ span >< span class = "p" > )</ span > < span class = "o" > /</ span > < span class = "n" > volume_step</ span >< span class = "p" > )</ span > < span class = "o" > +</ span > < span class = "mf" > 1e-12</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-436" name = "__codelineno-0-436" ></ a > < span class = "n" > normalized</ span > < span class = "o" > =</ span > < span class = "n" > volume_min</ span > < span class = "o" > +</ span > < span class = "nb" > max</ span >< span class = "p" > (</ span >< span class = "mi" > 0</ span >< span class = "p" > ,</ span > < span class = "n" > steps</ span >< span class = "p" > )</ span > < span class = "o" > *</ span > < span class = "n" > volume_step</ span >
< a id = "__codelineno-0-437" name = "__codelineno-0-437" ></ a > < span class = "k" > if</ span > < span class = "n" > has_volume_cap</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-438" name = "__codelineno-0-438" ></ a > < span class = "n" > normalized</ span > < span class = "o" > =</ span > < span class = "nb" > min</ span >< span class = "p" > (</ span >< span class = "n" > normalized</ span >< span class = "p" > ,</ span > < span class = "n" > volume_max</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-439" name = "__codelineno-0-439" ></ a > < span class = "k" > return</ span > < span class = "nb" > round</ span >< span class = "p" > (</ span >< span class = "n" > normalized</ span >< span class = "p" > ,</ span > < span class = "mi" > 10</ span >< span class = "p" > )</ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
2026-06-23 16:59:18 +00:00
< h3 id = "mt5cli.trading.place_market_order" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > place_market_order</ span >
2026-06-14 17:47:52 +00:00
2026-06-23 16:59:18 +00:00
< a href = "#mt5cli.trading.place_market_order" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > place_market_order</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-14 17:47:52 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
2026-06-23 16:59:18 +00:00
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > volume</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > order_side</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderSide
module-attribute
(mt5cli.trading.OrderSide)" href = "#mt5cli.trading.OrderSide" > OrderSide</ a ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "n" > order_filling_mode</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderFillingMode
module-attribute
(mt5cli.trading.OrderFillingMode)" href = "#mt5cli.trading.OrderFillingMode" > OrderFillingMode</ a ></ span > < span class = "o" > =</ span > < span class = "s2" > " IOC" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "n" > order_time_mode</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderTimeMode
module-attribute
(mt5cli.trading.OrderTimeMode)" href = "#mt5cli.trading.OrderTimeMode" > OrderTimeMode</ a ></ span > < span class = "o" > =</ span > < span class = "s2" > " GTC" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a > < span class = "n" > sl</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a > < span class = "n" > tp</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-11" name = "__codelineno-0-11" href = "#__codelineno-0-11" ></ a > < span class = "n" > position</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
2026-07-04 05:20:25 +00:00
< a id = "__codelineno-0-12" name = "__codelineno-0-12" href = "#__codelineno-0-12" ></ a > < span class = "n" > deviation</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-13" name = "__codelineno-0-13" href = "#__codelineno-0-13" ></ a > < span class = "n" > comment</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-14" name = "__codelineno-0-14" href = "#__codelineno-0-14" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-15" name = "__codelineno-0-15" href = "#__codelineno-0-15" ></ a > < span class = "n" > dry_run</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "bool" > bool</ span ></ span > < span class = "o" > =</ span > < span class = "kc" > False</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-16" name = "__codelineno-0-16" href = "#__codelineno-0-16" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderExecutionResult (mt5cli.trading.OrderExecutionResult)" href = "#mt5cli.trading.OrderExecutionResult" > OrderExecutionResult</ a ></ span >
2026-06-14 17:47:52 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
2026-06-23 16:59:18 +00:00
< p > Place one normalized market order or return a dry-run result.</ p >
2026-06-26 13:28:39 +00:00
< p >< code > order_send()</ code > raises only when MT5 returns no response. When MT5 returns
a response with a known non-success retcode, this helper returns
< code > status="failed"</ code > and keeps the normalized response details for callers
to inspect.</ p >
2026-06-14 17:47:52 +00:00
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
2026-06-23 16:59:18 +00:00
< code >< a class = "autorefs autorefs-internal" title = "OrderExecutionResult (mt5cli.trading.OrderExecutionResult)" href = "#mt5cli.trading.OrderExecutionResult" > OrderExecutionResult</ a ></ code >
2026-06-14 17:47:52 +00:00
</ td >
< td >
< div class = "doc-md-description" >
2026-06-23 16:59:18 +00:00
< p > Normalized execution result containing request and response details.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
2026-06-26 13:28:39 +00:00
< code >< a class = "autorefs autorefs-internal" title = "Mt5OperationError (mt5cli.exceptions.Mt5OperationError)" href = "../exceptions/#mt5cli.exceptions.Mt5OperationError" > Mt5OperationError</ a ></ code >
2026-06-23 16:59:18 +00:00
</ td >
< td >
< div class = "doc-md-description" >
< p > If volume or required tick data is invalid.</ p >
2026-06-14 17:47:52 +00:00
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1424" > 1424</ a ></ span >
2026-06-29 20:29:14 +00:00
< span class = "normal" >< a href = "#__codelineno-0-1425" > 1425</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1426" > 1426</ a ></ span >
2026-07-04 05:20:25 +00:00
< span class = "normal" >< a href = "#__codelineno-0-1427" > 1427</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1428" > 1428</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1429" > 1429</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1430" > 1430</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1431" > 1431</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1432" > 1432</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1433" > 1433</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1434" > 1434</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1435" > 1435</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1436" > 1436</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1437" > 1437</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1438" > 1438</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1439" > 1439</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1440" > 1440</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1441" > 1441</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1442" > 1442</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1443" > 1443</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1444" > 1444</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1445" > 1445</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1446" > 1446</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1447" > 1447</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1448" > 1448</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1449" > 1449</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1450" > 1450</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1451" > 1451</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1452" > 1452</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1453" > 1453</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1454" > 1454</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1455" > 1455</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1456" > 1456</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1457" > 1457</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1458" > 1458</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1459" > 1459</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1460" > 1460</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1461" > 1461</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1462" > 1462</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1463" > 1463</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1464" > 1464</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1465" > 1465</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1466" > 1466</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1467" > 1467</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1468" > 1468</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1469" > 1469</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1470" > 1470</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1471" > 1471</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1472" > 1472</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1473" > 1473</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1474" > 1474</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1475" > 1475</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1476" > 1476</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1477" > 1477</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1478" > 1478</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1479" > 1479</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1480" > 1480</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1481" > 1481</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1482" > 1482</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1483" > 1483</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1484" > 1484</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1485" > 1485</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1486" > 1486</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1487" > 1487</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1488" > 1488</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1489" > 1489</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1490" > 1490</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1491" > 1491</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1492" > 1492</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1493" > 1493</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1494" > 1494</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1495" > 1495</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1496" > 1496</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1497" > 1497</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1498" > 1498</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1499" > 1499</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1500" > 1500</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1501" > 1501</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1502" > 1502</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1503" > 1503</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1504" > 1504</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1505" > 1505</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1506" > 1506</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1507" > 1507</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1508" > 1508</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1509" > 1509</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1510" > 1510</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1511" > 1511</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1512" > 1512</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1513" > 1513</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1514" > 1514</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1515" > 1515</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1516" > 1516</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1517" > 1517</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1518" > 1518</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1519" > 1519</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1520" > 1520</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1521" > 1521</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1522" > 1522</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1523" > 1523</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1424" name = "__codelineno-0-1424" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > place_market_order</ span >< span class = "p" > (</ span > < span class = "c1" > # noqa: C901, PLR0913</ span >
< a id = "__codelineno-0-1425" name = "__codelineno-0-1425" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1426" name = "__codelineno-0-1426" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1427" name = "__codelineno-0-1427" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1428" name = "__codelineno-0-1428" ></ a > < span class = "n" > volume</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1429" name = "__codelineno-0-1429" ></ a > < span class = "n" > order_side</ span >< span class = "p" > :</ span > < span class = "n" > OrderSide</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1430" name = "__codelineno-0-1430" ></ a > < span class = "n" > order_filling_mode</ span >< span class = "p" > :</ span > < span class = "n" > OrderFillingMode</ span > < span class = "o" > =</ span > < span class = "s2" > " IOC" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1431" name = "__codelineno-0-1431" ></ a > < span class = "n" > order_time_mode</ span >< span class = "p" > :</ span > < span class = "n" > OrderTimeMode</ span > < span class = "o" > =</ span > < span class = "s2" > " GTC" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1432" name = "__codelineno-0-1432" ></ a > < span class = "n" > sl</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1433" name = "__codelineno-0-1433" ></ a > < span class = "n" > tp</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1434" name = "__codelineno-0-1434" ></ a > < span class = "n" > position</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1435" name = "__codelineno-0-1435" ></ a > < span class = "n" > deviation</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1436" name = "__codelineno-0-1436" ></ a > < span class = "n" > comment</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1437" name = "__codelineno-0-1437" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1438" name = "__codelineno-0-1438" ></ a > < span class = "n" > dry_run</ span >< span class = "p" > :</ span > < span class = "nb" > bool</ span > < span class = "o" > =</ span > < span class = "kc" > False</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1439" name = "__codelineno-0-1439" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > OrderExecutionResult</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1440" name = "__codelineno-0-1440" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Place one normalized market order or return a dry-run result.</ span >
< a id = "__codelineno-0-1441" name = "__codelineno-0-1441" ></ a >
< a id = "__codelineno-0-1442" name = "__codelineno-0-1442" ></ a >< span class = "sd" > ``order_send()`` raises only when MT5 returns no response. When MT5 returns</ span >
< a id = "__codelineno-0-1443" name = "__codelineno-0-1443" ></ a >< span class = "sd" > a response with a known non-success retcode, this helper returns</ span >
< a id = "__codelineno-0-1444" name = "__codelineno-0-1444" ></ a >< span class = "sd" > ``status=" failed" `` and keeps the normalized response details for callers</ span >
< a id = "__codelineno-0-1445" name = "__codelineno-0-1445" ></ a >< span class = "sd" > to inspect.</ span >
< a id = "__codelineno-0-1446" name = "__codelineno-0-1446" ></ a >
< a id = "__codelineno-0-1447" name = "__codelineno-0-1447" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-1448" name = "__codelineno-0-1448" ></ a >< span class = "sd" > Normalized execution result containing request and response details.</ span >
< a id = "__codelineno-0-1449" name = "__codelineno-0-1449" ></ a >
< a id = "__codelineno-0-1450" name = "__codelineno-0-1450" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-1451" name = "__codelineno-0-1451" ></ a >< span class = "sd" > Mt5OperationError: If volume or required tick data is invalid.</ span >
< a id = "__codelineno-0-1452" name = "__codelineno-0-1452" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1453" name = "__codelineno-0-1453" ></ a > < span class = "k" > if</ span > < span class = "n" > volume</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1454" name = "__codelineno-0-1454" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "s2" > " volume must be positive." </ span >
< a id = "__codelineno-0-1455" name = "__codelineno-0-1455" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1456" name = "__codelineno-0-1456" ></ a > < span class = "n" > side</ span > < span class = "o" > =</ span > < span class = "n" > _normalize_order_side</ span >< span class = "p" > (</ span >< span class = "n" > order_side</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1457" name = "__codelineno-0-1457" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > dry_run</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1458" name = "__codelineno-0-1458" ></ a > < span class = "n" > ensure_symbol_selected</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1459" name = "__codelineno-0-1459" ></ a > < span class = "n" > tick</ span > < span class = "o" > =</ span > < span class = "n" > get_tick_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1460" name = "__codelineno-0-1460" ></ a > < span class = "n" > price</ span > < span class = "o" > =</ span > < span class = "n" > extract_tick_price</ span >< span class = "p" > (</ span >< span class = "n" > tick</ span >< span class = "p" > ,</ span > < span class = "s2" > " ask" </ span > < span class = "k" > if</ span > < span class = "n" > side</ span > < span class = "o" > ==</ span > < span class = "s2" > " BUY" </ span > < span class = "k" > else</ span > < span class = "s2" > " bid" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1461" name = "__codelineno-0-1461" ></ a > < span class = "k" > if</ span > < span class = "n" > price</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1462" name = "__codelineno-0-1462" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Tick price is unavailable for </ span >< span class = "si" > {</ span >< span class = "n" > symbol</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-1463" name = "__codelineno-0-1463" ></ a > < span class = "k" > raise</ span > < span class = "n" > Mt5OperationError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1464" name = "__codelineno-0-1464" ></ a > < span class = "n" > request</ span > < span class = "o" > =</ span > < span class = "p" > {</ span >
< a id = "__codelineno-0-1465" name = "__codelineno-0-1465" ></ a > < span class = "s2" > " action" </ span >< span class = "p" > :</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > TRADE_ACTION_DEAL</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1466" name = "__codelineno-0-1466" ></ a > < span class = "s2" > " symbol" </ span >< span class = "p" > :</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1467" name = "__codelineno-0-1467" ></ a > < span class = "s2" > " volume" </ span >< span class = "p" > :</ span > < span class = "n" > volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1468" name = "__codelineno-0-1468" ></ a > < span class = "s2" > " type" </ span >< span class = "p" > :</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-1469" name = "__codelineno-0-1469" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > ORDER_TYPE_BUY</ span > < span class = "k" > if</ span > < span class = "n" > side</ span > < span class = "o" > ==</ span > < span class = "s2" > " BUY" </ span > < span class = "k" > else</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > ORDER_TYPE_SELL</ span >
< a id = "__codelineno-0-1470" name = "__codelineno-0-1470" ></ a > < span class = "p" > ),</ span >
< a id = "__codelineno-0-1471" name = "__codelineno-0-1471" ></ a > < span class = "s2" > " price" </ span >< span class = "p" > :</ span > < span class = "n" > price</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1472" name = "__codelineno-0-1472" ></ a > < span class = "s2" > " type_filling" </ span >< span class = "p" > :</ span > < span class = "n" > _resolve_mt5_constant</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1473" name = "__codelineno-0-1473" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1474" name = "__codelineno-0-1474" ></ a > < span class = "s2" > " ORDER_FILLING" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1475" name = "__codelineno-0-1475" ></ a > < span class = "n" > order_filling_mode</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1476" name = "__codelineno-0-1476" ></ a > < span class = "n" > _ORDER_FILLING_MODES</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1477" name = "__codelineno-0-1477" ></ a > < span class = "p" > ),</ span >
< a id = "__codelineno-0-1478" name = "__codelineno-0-1478" ></ a > < span class = "s2" > " type_time" </ span >< span class = "p" > :</ span > < span class = "n" > _resolve_mt5_constant</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1479" name = "__codelineno-0-1479" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1480" name = "__codelineno-0-1480" ></ a > < span class = "s2" > " ORDER_TIME" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1481" name = "__codelineno-0-1481" ></ a > < span class = "n" > order_time_mode</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1482" name = "__codelineno-0-1482" ></ a > < span class = "n" > _ORDER_TIME_MODES</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1483" name = "__codelineno-0-1483" ></ a > < span class = "p" > ),</ span >
< a id = "__codelineno-0-1484" name = "__codelineno-0-1484" ></ a > < span class = "p" > }</ span >
< a id = "__codelineno-0-1485" name = "__codelineno-0-1485" ></ a > < span class = "k" > if</ span > < span class = "n" > sl</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1486" name = "__codelineno-0-1486" ></ a > < span class = "n" > request</ span >< span class = "p" > [</ span >< span class = "s2" > " sl" </ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > sl</ span >
< a id = "__codelineno-0-1487" name = "__codelineno-0-1487" ></ a > < span class = "k" > if</ span > < span class = "n" > tp</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1488" name = "__codelineno-0-1488" ></ a > < span class = "n" > request</ span >< span class = "p" > [</ span >< span class = "s2" > " tp" </ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > tp</ span >
< a id = "__codelineno-0-1489" name = "__codelineno-0-1489" ></ a > < span class = "k" > if</ span > < span class = "n" > position</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1490" name = "__codelineno-0-1490" ></ a > < span class = "n" > request</ span >< span class = "p" > [</ span >< span class = "s2" > " position" </ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > position</ span >
< a id = "__codelineno-0-1491" name = "__codelineno-0-1491" ></ a > < span class = "k" > if</ span > < span class = "n" > deviation</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1492" name = "__codelineno-0-1492" ></ a > < span class = "n" > request</ span >< span class = "p" > [</ span >< span class = "s2" > " deviation" </ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > deviation</ span >
< a id = "__codelineno-0-1493" name = "__codelineno-0-1493" ></ a > < span class = "k" > if</ span > < span class = "n" > comment</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1494" name = "__codelineno-0-1494" ></ a > < span class = "n" > request</ span >< span class = "p" > [</ span >< span class = "s2" > " comment" </ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > comment</ span >
< a id = "__codelineno-0-1495" name = "__codelineno-0-1495" ></ a > < span class = "k" > if</ span > < span class = "n" > magic</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1496" name = "__codelineno-0-1496" ></ a > < span class = "n" > request</ span >< span class = "p" > [</ span >< span class = "s2" > " magic" </ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > magic</ span >
< a id = "__codelineno-0-1497" name = "__codelineno-0-1497" ></ a > < span class = "k" > if</ span > < span class = "n" > dry_run</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1498" name = "__codelineno-0-1498" ></ a > < span class = "k" > return</ span > < span class = "p" > {</ span >
< a id = "__codelineno-0-1499" name = "__codelineno-0-1499" ></ a > < span class = "s2" > " status" </ span >< span class = "p" > :</ span > < span class = "s2" > " dry_run" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1500" name = "__codelineno-0-1500" ></ a > < span class = "s2" > " symbol" </ span >< span class = "p" > :</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1501" name = "__codelineno-0-1501" ></ a > < span class = "s2" > " order_side" </ span >< span class = "p" > :</ span > < span class = "n" > side</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1502" name = "__codelineno-0-1502" ></ a > < span class = "s2" > " volume" </ span >< span class = "p" > :</ span > < span class = "n" > volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1503" name = "__codelineno-0-1503" ></ a > < span class = "s2" > " retcode" </ span >< span class = "p" > :</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1504" name = "__codelineno-0-1504" ></ a > < span class = "s2" > " comment" </ span >< span class = "p" > :</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1505" name = "__codelineno-0-1505" ></ a > < span class = "s2" > " request" </ span >< span class = "p" > :</ span > < span class = "n" > cast</ span >< span class = "p" > (</ span >< span class = "s2" > " dict[str, object]" </ span >< span class = "p" > ,</ span > < span class = "n" > request</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1506" name = "__codelineno-0-1506" ></ a > < span class = "s2" > " response" </ span >< span class = "p" > :</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1507" name = "__codelineno-0-1507" ></ a > < span class = "s2" > " dry_run" </ span >< span class = "p" > :</ span > < span class = "kc" > True</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1508" name = "__codelineno-0-1508" ></ a > < span class = "p" > }</ span >
< a id = "__codelineno-0-1509" name = "__codelineno-0-1509" ></ a > < span class = "n" > response</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > order_send</ span >< span class = "p" > (</ span >< span class = "n" > request</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1510" name = "__codelineno-0-1510" ></ a > < span class = "n" > response_dict</ span > < span class = "o" > =</ span > < span class = "n" > _snapshot_from_value</ span >< span class = "p" > (</ span >< span class = "n" > response</ span >< span class = "p" > ,</ span > < span class = "p" > ())</ span >
< a id = "__codelineno-0-1511" name = "__codelineno-0-1511" ></ a > < span class = "n" > raw_retcode</ span > < span class = "o" > =</ span > < span class = "n" > response_dict</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " retcode" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1512" name = "__codelineno-0-1512" ></ a > < span class = "n" > retcode</ span > < span class = "o" > =</ span > < span class = "n" > _optional_int</ span >< span class = "p" > (</ span >< span class = "n" > raw_retcode</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1513" name = "__codelineno-0-1513" ></ a > < span class = "k" > return</ span > < span class = "p" > {</ span >
< a id = "__codelineno-0-1514" name = "__codelineno-0-1514" ></ a > < span class = "s2" > " status" </ span >< span class = "p" > :</ span > < span class = "n" > _order_status_from_retcode</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "p" > ,</ span > < span class = "n" > raw_retcode</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1515" name = "__codelineno-0-1515" ></ a > < span class = "s2" > " symbol" </ span >< span class = "p" > :</ span > < span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1516" name = "__codelineno-0-1516" ></ a > < span class = "s2" > " order_side" </ span >< span class = "p" > :</ span > < span class = "n" > side</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1517" name = "__codelineno-0-1517" ></ a > < span class = "s2" > " volume" </ span >< span class = "p" > :</ span > < span class = "n" > volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1518" name = "__codelineno-0-1518" ></ a > < span class = "s2" > " retcode" </ span >< span class = "p" > :</ span > < span class = "n" > retcode</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1519" name = "__codelineno-0-1519" ></ a > < span class = "s2" > " comment" </ span >< span class = "p" > :</ span > < span class = "n" > _optional_str</ span >< span class = "p" > (</ span >< span class = "n" > response_dict</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " comment" </ span >< span class = "p" > )),</ span >
< a id = "__codelineno-0-1520" name = "__codelineno-0-1520" ></ a > < span class = "s2" > " request" </ span >< span class = "p" > :</ span > < span class = "n" > cast</ span >< span class = "p" > (</ span >< span class = "s2" > " dict[str, object]" </ span >< span class = "p" > ,</ span > < span class = "n" > request</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1521" name = "__codelineno-0-1521" ></ a > < span class = "s2" > " response" </ span >< span class = "p" > :</ span > < span class = "n" > response_dict</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1522" name = "__codelineno-0-1522" ></ a > < span class = "s2" > " dry_run" </ span >< span class = "p" > :</ span > < span class = "kc" > False</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1523" name = "__codelineno-0-1523" ></ a > < span class = "p" > }</ span >
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.resolve_broker_filling_mode" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > resolve_broker_filling_mode</ span >
< a href = "#mt5cli.trading.resolve_broker_filling_mode" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > resolve_broker_filling_mode</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > preferred_modes</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "collections.abc.Sequence" > Sequence</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderFillingMode
module-attribute
(mt5cli.trading.OrderFillingMode)" href = "#mt5cli.trading.OrderFillingMode" > OrderFillingMode</ a ></ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "s2" > " IOC" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "s2" > " FOK" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "s2" > " RETURN" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a > < span class = "p" > ),</ span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a > < span class = "n" > default_mode</ span >< span class = "p" > :</ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderFillingMode
module-attribute
(mt5cli.trading.OrderFillingMode)" href = "#mt5cli.trading.OrderFillingMode" > OrderFillingMode</ a ></ span > < span class = "o" > =</ span > < span class = "s2" > " IOC" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-11" name = "__codelineno-0-11" href = "#__codelineno-0-11" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderFillingMode
module-attribute
(mt5cli.trading.OrderFillingMode)" href = "#mt5cli.trading.OrderFillingMode" > OrderFillingMode</ a ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return the first broker-supported filling mode from a preferred order.</ p >
< p >< span class = "doc-section-title" > Raises:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "ValueError" > ValueError</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > If any preferred or default mode name is unsupported.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-786" > 786</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-787" > 787</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-788" > 788</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-789" > 789</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-790" > 790</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-791" > 791</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-792" > 792</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-793" > 793</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-794" > 794</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-795" > 795</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-796" > 796</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-797" > 797</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-798" > 798</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-799" > 799</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-800" > 800</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-801" > 801</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-802" > 802</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-803" > 803</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-804" > 804</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-805" > 805</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-806" > 806</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-807" > 807</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-808" > 808</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-809" > 809</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-810" > 810</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-811" > 811</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-812" > 812</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-813" > 813</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-814" > 814</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-815" > 815</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-816" > 816</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-817" > 817</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-818" > 818</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-819" > 819</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-820" > 820</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-821" > 821</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-786" name = "__codelineno-0-786" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > resolve_broker_filling_mode</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-787" name = "__codelineno-0-787" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-788" name = "__codelineno-0-788" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-789" name = "__codelineno-0-789" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-790" name = "__codelineno-0-790" ></ a > < span class = "n" > preferred_modes</ span >< span class = "p" > :</ span > < span class = "n" > Sequence</ span >< span class = "p" > [</ span >< span class = "n" > OrderFillingMode</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >< span class = "s2" > " IOC" </ span >< span class = "p" > ,</ span > < span class = "s2" > " FOK" </ span >< span class = "p" > ,</ span > < span class = "s2" > " RETURN" </ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-791" name = "__codelineno-0-791" ></ a > < span class = "n" > default_mode</ span >< span class = "p" > :</ span > < span class = "n" > OrderFillingMode</ span > < span class = "o" > =</ span > < span class = "s2" > " IOC" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-792" name = "__codelineno-0-792" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > OrderFillingMode</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-793" name = "__codelineno-0-793" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return the first broker-supported filling mode from a preferred order.</ span >
< a id = "__codelineno-0-794" name = "__codelineno-0-794" ></ a >
< a id = "__codelineno-0-795" name = "__codelineno-0-795" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-796" name = "__codelineno-0-796" ></ a >< span class = "sd" > ValueError: If any preferred or default mode name is unsupported.</ span >
< a id = "__codelineno-0-797" name = "__codelineno-0-797" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-798" name = "__codelineno-0-798" ></ a > < span class = "n" > preferred</ span > < span class = "o" > =</ span > < span class = "p" > [</ span >< span class = "n" > mode</ span >< span class = "o" > .</ span >< span class = "n" > upper</ span >< span class = "p" > ()</ span > < span class = "k" > for</ span > < span class = "n" > mode</ span > < span class = "ow" > in</ span > < span class = "n" > preferred_modes</ span >< span class = "p" > ]</ span >
< a id = "__codelineno-0-799" name = "__codelineno-0-799" ></ a > < span class = "k" > for</ span > < span class = "n" > mode</ span > < span class = "ow" > in</ span > < span class = "p" > [</ span >< span class = "o" > *</ span >< span class = "n" > preferred</ span >< span class = "p" > ,</ span > < span class = "n" > default_mode</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-800" name = "__codelineno-0-800" ></ a > < span class = "k" > if</ span > < span class = "n" > mode</ span > < span class = "ow" > not</ span > < span class = "ow" > in</ span > < span class = "n" > _ORDER_FILLING_MODES</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-801" name = "__codelineno-0-801" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Unsupported order_filling mode: </ span >< span class = "si" > {</ span >< span class = "n" > mode</ span >< span class = "si" > !r}</ span >< span class = "s2" > ." </ span >
< a id = "__codelineno-0-802" name = "__codelineno-0-802" ></ a > < span class = "k" > raise</ span > < span class = "ne" > ValueError</ span >< span class = "p" > (</ span >< span class = "n" > msg</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-803" name = "__codelineno-0-803" ></ a >
< a id = "__codelineno-0-804" name = "__codelineno-0-804" ></ a > < span class = "n" > preferred_default</ span > < span class = "o" > =</ span > < span class = "n" > cast</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-805" name = "__codelineno-0-805" ></ a > < span class = "s2" > " OrderFillingMode" </ span >< span class = "p" > ,</ span > < span class = "n" > preferred</ span >< span class = "p" > [</ span >< span class = "mi" > 0</ span >< span class = "p" > ]</ span > < span class = "k" > if</ span > < span class = "n" > preferred</ span > < span class = "k" > else</ span > < span class = "n" > default_mode</ span >
< a id = "__codelineno-0-806" name = "__codelineno-0-806" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-807" name = "__codelineno-0-807" ></ a > < span class = "n" > supported</ span > < span class = "o" > =</ span > < span class = "n" > _supported_filling_modes</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-808" name = "__codelineno-0-808" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-809" name = "__codelineno-0-809" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-810" name = "__codelineno-0-810" ></ a > < span class = "n" > preferred_default</ span >< span class = "o" > =</ span >< span class = "n" > preferred_default</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-811" name = "__codelineno-0-811" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-812" name = "__codelineno-0-812" ></ a > < span class = "k" > if</ span > < span class = "n" > supported</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-813" name = "__codelineno-0-813" ></ a > < span class = "k" > return</ span > < span class = "n" > preferred_default</ span >
< a id = "__codelineno-0-814" name = "__codelineno-0-814" ></ a >
< a id = "__codelineno-0-815" name = "__codelineno-0-815" ></ a > < span class = "k" > for</ span > < span class = "n" > mode</ span > < span class = "ow" > in</ span > < span class = "n" > preferred</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-816" name = "__codelineno-0-816" ></ a > < span class = "k" > if</ span > < span class = "n" > mode</ span > < span class = "ow" > in</ span > < span class = "n" > supported</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-817" name = "__codelineno-0-817" ></ a > < span class = "k" > return</ span > < span class = "n" > cast</ span >< span class = "p" > (</ span >< span class = "s2" > " OrderFillingMode" </ span >< span class = "p" > ,</ span > < span class = "n" > mode</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-818" name = "__codelineno-0-818" ></ a > < span class = "n" > fallback_mode</ span > < span class = "o" > =</ span > < span class = "nb" > next</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-819" name = "__codelineno-0-819" ></ a > < span class = "n" > mode</ span > < span class = "k" > for</ span > < span class = "n" > mode</ span > < span class = "ow" > in</ span > < span class = "p" > (</ span >< span class = "n" > default_mode</ span >< span class = "p" > ,</ span > < span class = "s2" > " IOC" </ span >< span class = "p" > ,</ span > < span class = "s2" > " FOK" </ span >< span class = "p" > ,</ span > < span class = "s2" > " RETURN" </ span >< span class = "p" > )</ span > < span class = "k" > if</ span > < span class = "n" > mode</ span > < span class = "ow" > in</ span > < span class = "n" > supported</ span >
< a id = "__codelineno-0-820" name = "__codelineno-0-820" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-821" name = "__codelineno-0-821" ></ a > < span class = "k" > return</ span > < span class = "n" > cast</ span >< span class = "p" > (</ span >< span class = "s2" > " OrderFillingMode" </ span >< span class = "p" > ,</ span > < span class = "n" > fallback_mode</ span >< span class = "p" > )</ span >
2026-06-23 16:59:18 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.update_sltp_for_open_positions" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > update_sltp_for_open_positions</ span >
< a href = "#mt5cli.trading.update_sltp_for_open_positions" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > update_sltp_for_open_positions</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-23 16:59:18 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > tickets</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "list" > list</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "int" > int</ span ></ span >< span class = "p" > ]</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
2026-07-04 05:20:25 +00:00
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "n" > stop_loss</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "n" > take_profit</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a > < span class = "n" > dry_run</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "bool" > bool</ span ></ span > < span class = "o" > =</ span > < span class = "kc" > False</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "list" > list</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderExecutionResult (mt5cli.trading.OrderExecutionResult)" href = "#mt5cli.trading.OrderExecutionResult" > OrderExecutionResult</ a ></ span >< span class = "p" > ]</ span >
2026-06-23 16:59:18 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Update SL/TP for matching open positions.</ p >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "list" > list</ span > [< a class = "autorefs autorefs-internal" title = "OrderExecutionResult (mt5cli.trading.OrderExecutionResult)" href = "#mt5cli.trading.OrderExecutionResult" > OrderExecutionResult</ a > ]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Normalized execution results for matching positions.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1711" > 1711</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1712" > 1712</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1713" > 1713</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1714" > 1714</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1715" > 1715</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1716" > 1716</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1717" > 1717</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1718" > 1718</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1719" > 1719</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1720" > 1720</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1721" > 1721</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1722" > 1722</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1723" > 1723</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1724" > 1724</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1725" > 1725</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1726" > 1726</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1727" > 1727</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1728" > 1728</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1729" > 1729</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1730" > 1730</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1731" > 1731</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1732" > 1732</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1733" > 1733</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1734" > 1734</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1735" > 1735</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1736" > 1736</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1737" > 1737</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1738" > 1738</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1739" > 1739</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1740" > 1740</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1741" > 1741</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1742" > 1742</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1743" > 1743</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1744" > 1744</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1745" > 1745</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1746" > 1746</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1747" > 1747</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1748" > 1748</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1749" > 1749</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1750" > 1750</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1751" > 1751</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1752" > 1752</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1753" > 1753</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1754" > 1754</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1755" > 1755</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1756" > 1756</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1757" > 1757</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1758" > 1758</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1759" > 1759</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1760" > 1760</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1761" > 1761</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1762" > 1762</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1763" > 1763</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1764" > 1764</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1765" > 1765</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1766" > 1766</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1767" > 1767</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1768" > 1768</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1769" > 1769</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1770" > 1770</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1771" > 1771</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1772" > 1772</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1773" > 1773</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1774" > 1774</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1711" name = "__codelineno-0-1711" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > update_sltp_for_open_positions</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1712" name = "__codelineno-0-1712" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1713" name = "__codelineno-0-1713" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1714" name = "__codelineno-0-1714" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1715" name = "__codelineno-0-1715" ></ a > < span class = "n" > tickets</ span >< span class = "p" > :</ span > < span class = "nb" > list</ span >< span class = "p" > [</ span >< span class = "nb" > int</ span >< span class = "p" > ]</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1716" name = "__codelineno-0-1716" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1717" name = "__codelineno-0-1717" ></ a > < span class = "n" > stop_loss</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1718" name = "__codelineno-0-1718" ></ a > < span class = "n" > take_profit</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1719" name = "__codelineno-0-1719" ></ a > < span class = "n" > dry_run</ span >< span class = "p" > :</ span > < span class = "nb" > bool</ span > < span class = "o" > =</ span > < span class = "kc" > False</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1720" name = "__codelineno-0-1720" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > list</ span >< span class = "p" > [</ span >< span class = "n" > OrderExecutionResult</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-1721" name = "__codelineno-0-1721" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Update SL/TP for matching open positions.</ span >
< a id = "__codelineno-0-1722" name = "__codelineno-0-1722" ></ a >
< a id = "__codelineno-0-1723" name = "__codelineno-0-1723" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-1724" name = "__codelineno-0-1724" ></ a >< span class = "sd" > Normalized execution results for matching positions.</ span >
< a id = "__codelineno-0-1725" name = "__codelineno-0-1725" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1726" name = "__codelineno-0-1726" ></ a > < span class = "n" > positions</ span > < span class = "o" > =</ span > < span class = "n" > _filter_positions</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1727" name = "__codelineno-0-1727" ></ a > < span class = "n" > get_positions_frame</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1728" name = "__codelineno-0-1728" ></ a > < span class = "n" > symbols</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1729" name = "__codelineno-0-1729" ></ a > < span class = "n" > tickets</ span >< span class = "o" > =</ span >< span class = "n" > tickets</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1730" name = "__codelineno-0-1730" ></ a > < span class = "n" > magic</ span >< span class = "o" > =</ span >< span class = "n" > magic</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1731" name = "__codelineno-0-1731" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1732" name = "__codelineno-0-1732" ></ a > < span class = "n" > results</ span >< span class = "p" > :</ span > < span class = "nb" > list</ span >< span class = "p" > [</ span >< span class = "n" > OrderExecutionResult</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "p" > []</ span >
< a id = "__codelineno-0-1733" name = "__codelineno-0-1733" ></ a > < span class = "k" > for</ span > < span class = "n" > row</ span > < span class = "ow" > in</ span > < span class = "n" > positions</ span >< span class = "o" > .</ span >< span class = "n" > to_dict</ span >< span class = "p" > (</ span >< span class = "s2" > " records" </ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-1734" name = "__codelineno-0-1734" ></ a > < span class = "n" > request</ span > < span class = "o" > =</ span > < span class = "p" > {</ span >
< a id = "__codelineno-0-1735" name = "__codelineno-0-1735" ></ a > < span class = "s2" > " action" </ span >< span class = "p" > :</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > TRADE_ACTION_SLTP</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1736" name = "__codelineno-0-1736" ></ a > < span class = "s2" > " symbol" </ span >< span class = "p" > :</ span > < span class = "n" > row</ span >< span class = "p" > [</ span >< span class = "s2" > " symbol" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-0-1737" name = "__codelineno-0-1737" ></ a > < span class = "s2" > " position" </ span >< span class = "p" > :</ span > < span class = "n" > row</ span >< span class = "p" > [</ span >< span class = "s2" > " ticket" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-0-1738" name = "__codelineno-0-1738" ></ a > < span class = "p" > }</ span >
< a id = "__codelineno-0-1739" name = "__codelineno-0-1739" ></ a > < span class = "n" > sl</ span > < span class = "o" > =</ span > < span class = "n" > _optional_price</ span >< span class = "p" > (</ span >< span class = "n" > row</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " sl" </ span >< span class = "p" > )</ span > < span class = "k" > if</ span > < span class = "n" > stop_loss</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span > < span class = "k" > else</ span > < span class = "n" > stop_loss</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1740" name = "__codelineno-0-1740" ></ a > < span class = "n" > tp</ span > < span class = "o" > =</ span > < span class = "n" > _optional_price</ span >< span class = "p" > (</ span >< span class = "n" > row</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " tp" </ span >< span class = "p" > )</ span > < span class = "k" > if</ span > < span class = "n" > take_profit</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span > < span class = "k" > else</ span > < span class = "n" > take_profit</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-1741" name = "__codelineno-0-1741" ></ a > < span class = "k" > if</ span > < span class = "n" > sl</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1742" name = "__codelineno-0-1742" ></ a > < span class = "n" > request</ span >< span class = "p" > [</ span >< span class = "s2" > " sl" </ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > sl</ span >
< a id = "__codelineno-0-1743" name = "__codelineno-0-1743" ></ a > < span class = "k" > if</ span > < span class = "n" > tp</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1744" name = "__codelineno-0-1744" ></ a > < span class = "n" > request</ span >< span class = "p" > [</ span >< span class = "s2" > " tp" </ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > tp</ span >
< a id = "__codelineno-0-1745" name = "__codelineno-0-1745" ></ a > < span class = "k" > if</ span > < span class = "n" > dry_run</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1746" name = "__codelineno-0-1746" ></ a > < span class = "n" > response</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-1747" name = "__codelineno-0-1747" ></ a > < span class = "n" > status</ span >< span class = "p" > :</ span > < span class = "n" > ExecutionStatus</ span > < span class = "o" > =</ span > < span class = "s2" > " dry_run" </ span >
< a id = "__codelineno-0-1748" name = "__codelineno-0-1748" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-1749" name = "__codelineno-0-1749" ></ a > < span class = "n" > ensure_symbol_selected</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "nb" > str</ span >< span class = "p" > (</ span >< span class = "n" > row</ span >< span class = "p" > [</ span >< span class = "s2" > " symbol" </ span >< span class = "p" > ]))</ span >
< a id = "__codelineno-0-1750" name = "__codelineno-0-1750" ></ a > < span class = "n" > response</ span > < span class = "o" > =</ span > < span class = "n" > _snapshot_from_value</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > order_send</ span >< span class = "p" > (</ span >< span class = "n" > request</ span >< span class = "p" > ),</ span > < span class = "p" > ())</ span >
< a id = "__codelineno-0-1751" name = "__codelineno-0-1751" ></ a > < span class = "n" > status</ span > < span class = "o" > =</ span > < span class = "n" > _order_status_from_retcode</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1752" name = "__codelineno-0-1752" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1753" name = "__codelineno-0-1753" ></ a > < span class = "n" > response</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " retcode" </ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1754" name = "__codelineno-0-1754" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1755" name = "__codelineno-0-1755" ></ a > < span class = "n" > results</ span >< span class = "o" > .</ span >< span class = "n" > append</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1756" name = "__codelineno-0-1756" ></ a > < span class = "p" > {</ span >
< a id = "__codelineno-0-1757" name = "__codelineno-0-1757" ></ a > < span class = "s2" > " status" </ span >< span class = "p" > :</ span > < span class = "n" > status</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1758" name = "__codelineno-0-1758" ></ a > < span class = "s2" > " symbol" </ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > (</ span >< span class = "n" > row</ span >< span class = "p" > [</ span >< span class = "s2" > " symbol" </ span >< span class = "p" > ]),</ span >
< a id = "__codelineno-0-1759" name = "__codelineno-0-1759" ></ a > < span class = "s2" > " order_side" </ span >< span class = "p" > :</ span > < span class = "s2" > " BUY" </ span >
< a id = "__codelineno-0-1760" name = "__codelineno-0-1760" ></ a > < span class = "k" > if</ span > < span class = "n" > row</ span >< span class = "p" > [</ span >< span class = "s2" > " type" </ span >< span class = "p" > ]</ span > < span class = "o" > ==</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > mt5</ span >< span class = "o" > .</ span >< span class = "n" > POSITION_TYPE_BUY</ span >
< a id = "__codelineno-0-1761" name = "__codelineno-0-1761" ></ a > < span class = "k" > else</ span > < span class = "s2" > " SELL" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1762" name = "__codelineno-0-1762" ></ a > < span class = "s2" > " volume" </ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > row</ span >< span class = "p" > [</ span >< span class = "s2" > " volume" </ span >< span class = "p" > ]),</ span >
< a id = "__codelineno-0-1763" name = "__codelineno-0-1763" ></ a > < span class = "s2" > " retcode" </ span >< span class = "p" > :</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-1764" name = "__codelineno-0-1764" ></ a > < span class = "k" > if</ span > < span class = "n" > response</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-1765" name = "__codelineno-0-1765" ></ a > < span class = "k" > else</ span > < span class = "n" > _optional_int</ span >< span class = "p" > (</ span >< span class = "n" > response</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " retcode" </ span >< span class = "p" > )),</ span >
< a id = "__codelineno-0-1766" name = "__codelineno-0-1766" ></ a > < span class = "s2" > " comment" </ span >< span class = "p" > :</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-1767" name = "__codelineno-0-1767" ></ a > < span class = "k" > if</ span > < span class = "n" > response</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-1768" name = "__codelineno-0-1768" ></ a > < span class = "k" > else</ span > < span class = "n" > _optional_str</ span >< span class = "p" > (</ span >< span class = "n" > response</ span >< span class = "o" > .</ span >< span class = "n" > get</ span >< span class = "p" > (</ span >< span class = "s2" > " comment" </ span >< span class = "p" > )),</ span >
< a id = "__codelineno-0-1769" name = "__codelineno-0-1769" ></ a > < span class = "s2" > " request" </ span >< span class = "p" > :</ span > < span class = "n" > cast</ span >< span class = "p" > (</ span >< span class = "s2" > " dict[str, object]" </ span >< span class = "p" > ,</ span > < span class = "n" > request</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-1770" name = "__codelineno-0-1770" ></ a > < span class = "s2" > " response" </ span >< span class = "p" > :</ span > < span class = "n" > response</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1771" name = "__codelineno-0-1771" ></ a > < span class = "s2" > " dry_run" </ span >< span class = "p" > :</ span > < span class = "n" > dry_run</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1772" name = "__codelineno-0-1772" ></ a > < span class = "p" > },</ span >
< a id = "__codelineno-0-1773" name = "__codelineno-0-1773" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1774" name = "__codelineno-0-1774" ></ a > < span class = "k" > return</ span > < span class = "n" > results</ span >
2026-06-23 16:59:18 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.trading.update_trailing_stop_loss_for_open_positions" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > update_trailing_stop_loss_for_open_positions</ span >
< a href = "#mt5cli.trading.update_trailing_stop_loss_for_open_positions" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h3 >
< div class = "doc-signature highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "nf" > update_trailing_stop_loss_for_open_positions</ span >< span class = "p" > (</ span >
2026-06-26 13:28:39 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "mt5cli.trading._Mt5ClientProtocol" > _Mt5ClientProtocol</ span ></ span >< span class = "p" > ,</ span >
2026-06-23 16:59:18 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > trailing_stop_ratio</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "float" > float</ span ></ span >< span class = "p" > ,</ span >
2026-07-04 05:20:25 +00:00
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "int" > int</ span ></ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "n" > dry_run</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "bool" > bool</ span ></ span > < span class = "o" > =</ span > < span class = "kc" > False</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "list" > list</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< a class = "autorefs autorefs-internal" title = "OrderExecutionResult (mt5cli.trading.OrderExecutionResult)" href = "#mt5cli.trading.OrderExecutionResult" > OrderExecutionResult</ a ></ span >< span class = "p" > ]</ span >
2026-06-23 16:59:18 +00:00
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Update open positions whose trailing stop loss should move favorably.</ p >
< p >< span class = "doc-section-title" > Returns:</ span ></ p >
< table >
< thead >
< tr >
< th > Type</ th >
< th > Description</ th >
</ tr >
</ thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code >< span title = "list" > list</ span > [< a class = "autorefs autorefs-internal" title = "OrderExecutionResult (mt5cli.trading.OrderExecutionResult)" href = "#mt5cli.trading.OrderExecutionResult" > OrderExecutionResult</ a > ]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Normalized execution results for positions that need an SL update.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/trading.py</ code ></ summary >
2026-07-04 05:20:25 +00:00
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-1677" > 1677</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1678" > 1678</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1679" > 1679</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1680" > 1680</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1681" > 1681</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1682" > 1682</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1683" > 1683</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1684" > 1684</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1685" > 1685</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1686" > 1686</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1687" > 1687</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1688" > 1688</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1689" > 1689</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1690" > 1690</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1691" > 1691</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1692" > 1692</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1693" > 1693</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1694" > 1694</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1695" > 1695</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1696" > 1696</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1697" > 1697</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1698" > 1698</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1699" > 1699</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1700" > 1700</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1701" > 1701</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1702" > 1702</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1703" > 1703</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1704" > 1704</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1705" > 1705</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1706" > 1706</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1707" > 1707</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-1708" > 1708</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-1677" name = "__codelineno-0-1677" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > update_trailing_stop_loss_for_open_positions</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1678" name = "__codelineno-0-1678" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > _Mt5ClientProtocol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1679" name = "__codelineno-0-1679" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1680" name = "__codelineno-0-1680" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1681" name = "__codelineno-0-1681" ></ a > < span class = "n" > trailing_stop_ratio</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1682" name = "__codelineno-0-1682" ></ a > < span class = "n" > magic</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "kc" > None</ span > < span class = "o" > =</ span > < span class = "kc" > None</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1683" name = "__codelineno-0-1683" ></ a > < span class = "n" > dry_run</ span >< span class = "p" > :</ span > < span class = "nb" > bool</ span > < span class = "o" > =</ span > < span class = "kc" > False</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1684" name = "__codelineno-0-1684" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > list</ span >< span class = "p" > [</ span >< span class = "n" > OrderExecutionResult</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-1685" name = "__codelineno-0-1685" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Update open positions whose trailing stop loss should move favorably.</ span >
< a id = "__codelineno-0-1686" name = "__codelineno-0-1686" ></ a >
< a id = "__codelineno-0-1687" name = "__codelineno-0-1687" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-1688" name = "__codelineno-0-1688" ></ a >< span class = "sd" > Normalized execution results for positions that need an SL update.</ span >
< a id = "__codelineno-0-1689" name = "__codelineno-0-1689" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-1690" name = "__codelineno-0-1690" ></ a > < span class = "n" > updates</ span > < span class = "o" > =</ span > < span class = "n" > calculate_trailing_stop_updates</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1691" name = "__codelineno-0-1691" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1692" name = "__codelineno-0-1692" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1693" name = "__codelineno-0-1693" ></ a > < span class = "n" > trailing_stop_ratio</ span >< span class = "o" > =</ span >< span class = "n" > trailing_stop_ratio</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1694" name = "__codelineno-0-1694" ></ a > < span class = "n" > magic</ span >< span class = "o" > =</ span >< span class = "n" > magic</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1695" name = "__codelineno-0-1695" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1696" name = "__codelineno-0-1696" ></ a > < span class = "n" > results</ span >< span class = "p" > :</ span > < span class = "nb" > list</ span >< span class = "p" > [</ span >< span class = "n" > OrderExecutionResult</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "p" > []</ span >
< a id = "__codelineno-0-1697" name = "__codelineno-0-1697" ></ a > < span class = "k" > for</ span > < span class = "n" > ticket</ span >< span class = "p" > ,</ span > < span class = "n" > stop_loss</ span > < span class = "ow" > in</ span > < span class = "n" > updates</ span >< span class = "o" > .</ span >< span class = "n" > items</ span >< span class = "p" > ():</ span >
< a id = "__codelineno-0-1698" name = "__codelineno-0-1698" ></ a > < span class = "n" > results</ span >< span class = "o" > .</ span >< span class = "n" > extend</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1699" name = "__codelineno-0-1699" ></ a > < span class = "n" > update_sltp_for_open_positions</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-1700" name = "__codelineno-0-1700" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1701" name = "__codelineno-0-1701" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1702" name = "__codelineno-0-1702" ></ a > < span class = "n" > tickets</ span >< span class = "o" > =</ span >< span class = "p" > [</ span >< span class = "n" > ticket</ span >< span class = "p" > ],</ span >
< a id = "__codelineno-0-1703" name = "__codelineno-0-1703" ></ a > < span class = "n" > stop_loss</ span >< span class = "o" > =</ span >< span class = "n" > stop_loss</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1704" name = "__codelineno-0-1704" ></ a > < span class = "n" > magic</ span >< span class = "o" > =</ span >< span class = "n" > magic</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1705" name = "__codelineno-0-1705" ></ a > < span class = "n" > dry_run</ span >< span class = "o" > =</ span >< span class = "n" > dry_run</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-1706" name = "__codelineno-0-1706" ></ a > < span class = "p" > ),</ span >
< a id = "__codelineno-0-1707" name = "__codelineno-0-1707" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-1708" name = "__codelineno-0-1708" ></ a > < span class = "k" > return</ span > < span class = "n" > results</ span >
2026-06-11 10:33:27 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
</ div >
</ div >
</ div >< h2 id = "trading-capable-mt5-sessions" > Trading-capable MT5 sessions< a class = "headerlink" href = "#trading-capable-mt5-sessions" title = "Permanent link" > ¶ </ a ></ h2 >
2026-06-14 17:47:52 +00:00
< p >< code > create_trading_client()</ code > and < code > mt5_trading_session()</ code > complement the read-only
< code > mt5_session()</ code > helper in < code > sdk.py</ code > . They return or yield an initialized
2026-06-26 13:28:39 +00:00
client supporting order execution and account management, use < code > Mt5Config.path</ code >
to launch the terminal when configured, and < code > mt5_trading_session()</ code > always
calls < code > shutdown()</ code > on exit.</ p >
2026-06-29 20:29:14 +00:00
< p >< code > create_trading_client()</ code > returns a raw < code > pdmt5.Mt5DataClient</ code > instance, not the
higher-level < code > MT5Client</ code > wrapper. Use < code > mt5_session()</ code > / < code > MT5Client</ code > for
read-only data collection; use < code > mt5_trading_session()</ code > only where order
placement or trading calculations are required.</ p >
2026-06-14 17:47:52 +00:00
< div class = "highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" ></ a >< span class = "kn" > from</ span >< span class = "w" > </ span >< span class = "nn" > mt5cli</ span >< span class = "w" > </ span >< span class = "kn" > import</ span > < span class = "n" > create_trading_client</ span >< span class = "p" > ,</ span > < span class = "n" > mt5_trading_session</ span >
2026-06-11 10:33:27 +00:00
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a >
2026-06-14 17:47:52 +00:00
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a >< span class = "k" > with</ span > < span class = "n" > mt5_trading_session</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > path</ span >< span class = "o" > =</ span >< span class = "sa" > r</ span >< span class = "s2" > " C:\Program Files\MetaTrader 5\terminal64.exe" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "n" > login</ span >< span class = "o" > =</ span >< span class = "s2" > " 12345" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > password</ span >< span class = "o" > =</ span >< span class = "s2" > " secret" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "n" > server</ span >< span class = "o" > =</ span >< span class = "s2" > " Broker-Demo" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "n" > retry_count</ span >< span class = "o" > =</ span >< span class = "mi" > 2</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a >< span class = "p" > )</ span > < span class = "k" > as</ span > < span class = "n" > client</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a > < span class = "n" > positions</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > positions_get_as_df</ span >< span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "s2" > " EURUSD" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-11" name = "__codelineno-0-11" href = "#__codelineno-0-11" ></ a >
< a id = "__codelineno-0-12" name = "__codelineno-0-12" href = "#__codelineno-0-12" ></ a >< span class = "n" > client</ span > < span class = "o" > =</ span > < span class = "n" > create_trading_client</ span >< span class = "p" > (</ span >< span class = "n" > login</ span >< span class = "o" > =</ span >< span class = "mi" > 12345</ span >< span class = "p" > ,</ span > < span class = "n" > server</ span >< span class = "o" > =</ span >< span class = "s2" > " Broker-Demo" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-13" name = "__codelineno-0-13" href = "#__codelineno-0-13" ></ a >< span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-14" name = "__codelineno-0-14" href = "#__codelineno-0-14" ></ a > < span class = "n" > account</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > account_info_as_dict</ span >< span class = "p" > ()</ span >
< a id = "__codelineno-0-15" name = "__codelineno-0-15" href = "#__codelineno-0-15" ></ a >< span class = "k" > finally</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-16" name = "__codelineno-0-16" href = "#__codelineno-0-16" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > shutdown</ span >< span class = "p" > ()</ span >
2026-06-11 10:33:27 +00:00
</ code ></ pre ></ div >
2026-06-14 17:47:52 +00:00
< p >< code > login</ code > accepts < code > int</ code > , numeric < code > str</ code > , or an empty string; empty strings are
treated as unset. < code > path</ code > , < code > password</ code > , < code > server</ code > , and < code > timeout</ code > are forwarded to
< code > pdmt5.Mt5Config</ code > , and omitted < code > timeout</ code > values keep the lower-level default.
2026-06-23 16:59:18 +00:00
Use < code > mt5_session()</ code > / < code > MT5Client</ code > for read-only data collection.</ p >
2026-06-14 17:47:52 +00:00
< h2 id = "state-and-order-helpers" > State and order helpers< a class = "headerlink" href = "#state-and-order-helpers" title = "Permanent link" > ¶ </ a ></ h2 >
2026-06-11 10:33:27 +00:00
< p > These helpers are strategy-agnostic and do not depend on signal detection,
betting logic, or scheduling code in downstream applications.</ p >
< div class = "highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-1-1" name = "__codelineno-1-1" href = "#__codelineno-1-1" ></ a >< span class = "kn" > from</ span >< span class = "w" > </ span >< span class = "nn" > mt5cli</ span >< span class = "w" > </ span >< span class = "kn" > import</ span > < span class = "p" > (</ span >
2026-06-18 16:03:06 +00:00
< a id = "__codelineno-1-2" name = "__codelineno-1-2" href = "#__codelineno-1-2" ></ a > < span class = "n" > calculate_positions_margin</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-3" name = "__codelineno-1-3" href = "#__codelineno-1-3" ></ a > < span class = "n" > calculate_spread_ratio</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-4" name = "__codelineno-1-4" href = "#__codelineno-1-4" ></ a > < span class = "n" > calculate_margin_and_volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-5" name = "__codelineno-1-5" href = "#__codelineno-1-5" ></ a > < span class = "n" > close_open_positions</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-6" name = "__codelineno-1-6" href = "#__codelineno-1-6" ></ a > < span class = "n" > detect_position_side</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-7" name = "__codelineno-1-7" href = "#__codelineno-1-7" ></ a > < span class = "n" > determine_order_limits</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-8" name = "__codelineno-1-8" href = "#__codelineno-1-8" ></ a > < span class = "n" > estimate_order_margin</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-9" name = "__codelineno-1-9" href = "#__codelineno-1-9" ></ a > < span class = "n" > fetch_latest_closed_rates_for_trading_client</ span >< span class = "p" > ,</ span >
2026-06-22 13:53:09 +00:00
< a id = "__codelineno-1-10" name = "__codelineno-1-10" href = "#__codelineno-1-10" ></ a > < span class = "n" > fetch_latest_closed_rates_indexed</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-11" name = "__codelineno-1-11" href = "#__codelineno-1-11" ></ a > < span class = "n" > get_account_snapshot</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-12" name = "__codelineno-1-12" href = "#__codelineno-1-12" ></ a > < span class = "n" > get_positions_frame</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-13" name = "__codelineno-1-13" href = "#__codelineno-1-13" ></ a > < span class = "n" > get_symbol_snapshot</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-14" name = "__codelineno-1-14" href = "#__codelineno-1-14" ></ a > < span class = "n" > get_tick_snapshot</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-15" name = "__codelineno-1-15" href = "#__codelineno-1-15" ></ a > < span class = "n" > normalize_order_volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-16" name = "__codelineno-1-16" href = "#__codelineno-1-16" ></ a > < span class = "n" > place_market_order</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-17" name = "__codelineno-1-17" href = "#__codelineno-1-17" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-1-18" name = "__codelineno-1-18" href = "#__codelineno-1-18" ></ a >
< a id = "__codelineno-1-19" name = "__codelineno-1-19" href = "#__codelineno-1-19" ></ a >< span class = "n" > account</ span > < span class = "o" > =</ span > < span class = "n" > get_account_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > )</ span >
< a id = "__codelineno-1-20" name = "__codelineno-1-20" href = "#__codelineno-1-20" ></ a >< span class = "n" > symbol</ span > < span class = "o" > =</ span > < span class = "n" > get_symbol_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " EURUSD" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-1-21" name = "__codelineno-1-21" href = "#__codelineno-1-21" ></ a >< span class = "n" > tick</ span > < span class = "o" > =</ span > < span class = "n" > get_tick_snapshot</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " EURUSD" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-1-22" name = "__codelineno-1-22" href = "#__codelineno-1-22" ></ a >< span class = "n" > positions</ span > < span class = "o" > =</ span > < span class = "n" > get_positions_frame</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " EURUSD" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-1-23" name = "__codelineno-1-23" href = "#__codelineno-1-23" ></ a >< span class = "n" > side</ span > < span class = "o" > =</ span > < span class = "n" > detect_position_side</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " EURUSD" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-1-24" name = "__codelineno-1-24" href = "#__codelineno-1-24" ></ a >< span class = "n" > spread_ratio</ span > < span class = "o" > =</ span > < span class = "n" > calculate_spread_ratio</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " EURUSD" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-1-25" name = "__codelineno-1-25" href = "#__codelineno-1-25" ></ a >< span class = "n" > volume</ span > < span class = "o" > =</ span > < span class = "n" > normalize_order_volume</ span >< span class = "p" > (</ span >
< a id = "__codelineno-1-26" name = "__codelineno-1-26" href = "#__codelineno-1-26" ></ a > < span class = "mf" > 0.15</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-27" name = "__codelineno-1-27" href = "#__codelineno-1-27" ></ a > < span class = "n" > volume_min</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > [</ span >< span class = "s2" > " volume_min" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-1-28" name = "__codelineno-1-28" href = "#__codelineno-1-28" ></ a > < span class = "n" > volume_max</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > [</ span >< span class = "s2" > " volume_max" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-1-29" name = "__codelineno-1-29" href = "#__codelineno-1-29" ></ a > < span class = "n" > volume_step</ span >< span class = "o" > =</ span >< span class = "n" > symbol</ span >< span class = "p" > [</ span >< span class = "s2" > " volume_step" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-1-30" name = "__codelineno-1-30" href = "#__codelineno-1-30" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-1-31" name = "__codelineno-1-31" href = "#__codelineno-1-31" ></ a >< span class = "n" > buy_margin</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-1-32" name = "__codelineno-1-32" href = "#__codelineno-1-32" ></ a > < span class = "n" > estimate_order_margin</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span > < span class = "s2" > " BUY" </ span >< span class = "p" > ,</ span > < span class = "n" > volume</ span >< span class = "p" > )</ span > < span class = "k" > if</ span > < span class = "n" > volume</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span > < span class = "k" > else</ span > < span class = "mf" > 0.0</ span >
< a id = "__codelineno-1-33" name = "__codelineno-1-33" href = "#__codelineno-1-33" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-1-34" name = "__codelineno-1-34" href = "#__codelineno-1-34" ></ a >< span class = "n" > open_margin</ span > < span class = "o" > =</ span > < span class = "n" > calculate_positions_margin</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbols</ span >< span class = "o" > =</ span >< span class = "p" > [</ span >< span class = "s2" > " EURUSD" </ span >< span class = "p" > ])</ span >
< a id = "__codelineno-1-35" name = "__codelineno-1-35" href = "#__codelineno-1-35" ></ a >< span class = "n" > closed_bars</ span > < span class = "o" > =</ span > < span class = "n" > fetch_latest_closed_rates_for_trading_client</ span >< span class = "p" > (</ span >
< a id = "__codelineno-1-36" name = "__codelineno-1-36" href = "#__codelineno-1-36" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-37" name = "__codelineno-1-37" href = "#__codelineno-1-37" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-38" name = "__codelineno-1-38" href = "#__codelineno-1-38" ></ a > < span class = "n" > granularity</ span >< span class = "o" > =</ span >< span class = "s2" > " M1" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-39" name = "__codelineno-1-39" href = "#__codelineno-1-39" ></ a > < span class = "n" > count</ span >< span class = "o" > =</ span >< span class = "mi" > 100</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-40" name = "__codelineno-1-40" href = "#__codelineno-1-40" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-1-41" name = "__codelineno-1-41" href = "#__codelineno-1-41" ></ a >< span class = "c1" > # Or fetch with a UTC DatetimeIndex instead of a " time" column:</ span >
< a id = "__codelineno-1-42" name = "__codelineno-1-42" href = "#__codelineno-1-42" ></ a >< span class = "n" > indexed_bars</ span > < span class = "o" > =</ span > < span class = "n" > fetch_latest_closed_rates_indexed</ span >< span class = "p" > (</ span >
< a id = "__codelineno-1-43" name = "__codelineno-1-43" href = "#__codelineno-1-43" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-44" name = "__codelineno-1-44" href = "#__codelineno-1-44" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-45" name = "__codelineno-1-45" href = "#__codelineno-1-45" ></ a > < span class = "n" > granularity</ span >< span class = "o" > =</ span >< span class = "s2" > " M1" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-46" name = "__codelineno-1-46" href = "#__codelineno-1-46" ></ a > < span class = "n" > count</ span >< span class = "o" > =</ span >< span class = "mi" > 100</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-47" name = "__codelineno-1-47" href = "#__codelineno-1-47" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-1-48" name = "__codelineno-1-48" href = "#__codelineno-1-48" ></ a >< span class = "c1" > # indexed_bars.index is a UTC-aware DatetimeIndex named " time" </ span >
< a id = "__codelineno-1-49" name = "__codelineno-1-49" href = "#__codelineno-1-49" ></ a >< span class = "n" > sizing</ span > < span class = "o" > =</ span > < span class = "n" > calculate_margin_and_volume</ span >< span class = "p" > (</ span >
< a id = "__codelineno-1-50" name = "__codelineno-1-50" href = "#__codelineno-1-50" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-51" name = "__codelineno-1-51" href = "#__codelineno-1-51" ></ a > < span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-52" name = "__codelineno-1-52" href = "#__codelineno-1-52" ></ a > < span class = "n" > unit_margin_ratio</ span >< span class = "o" > =</ span >< span class = "mf" > 0.5</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-53" name = "__codelineno-1-53" href = "#__codelineno-1-53" ></ a > < span class = "n" > preserved_margin_ratio</ span >< span class = "o" > =</ span >< span class = "mf" > 0.2</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-54" name = "__codelineno-1-54" href = "#__codelineno-1-54" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-1-55" name = "__codelineno-1-55" href = "#__codelineno-1-55" ></ a >< span class = "n" > limits</ span > < span class = "o" > =</ span > < span class = "n" > determine_order_limits</ span >< span class = "p" > (</ span >
< a id = "__codelineno-1-56" name = "__codelineno-1-56" href = "#__codelineno-1-56" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-57" name = "__codelineno-1-57" href = "#__codelineno-1-57" ></ a > < span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-58" name = "__codelineno-1-58" href = "#__codelineno-1-58" ></ a > < span class = "n" > side</ span >< span class = "o" > =</ span >< span class = "s2" > " long" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-59" name = "__codelineno-1-59" href = "#__codelineno-1-59" ></ a > < span class = "n" > stop_loss_limit_ratio</ span >< span class = "o" > =</ span >< span class = "mf" > 0.01</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-60" name = "__codelineno-1-60" href = "#__codelineno-1-60" ></ a > < span class = "n" > take_profit_limit_ratio</ span >< span class = "o" > =</ span >< span class = "mf" > 0.02</ span >< span class = "p" > ,</ span >
2026-06-18 16:03:06 +00:00
< a id = "__codelineno-1-61" name = "__codelineno-1-61" href = "#__codelineno-1-61" ></ a >< span class = "p" > )</ span >
2026-06-22 13:53:09 +00:00
< a id = "__codelineno-1-62" name = "__codelineno-1-62" href = "#__codelineno-1-62" ></ a >< span class = "n" > preview</ span > < span class = "o" > =</ span > < span class = "n" > place_market_order</ span >< span class = "p" > (</ span >
< a id = "__codelineno-1-63" name = "__codelineno-1-63" href = "#__codelineno-1-63" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-64" name = "__codelineno-1-64" href = "#__codelineno-1-64" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-65" name = "__codelineno-1-65" href = "#__codelineno-1-65" ></ a > < span class = "n" > volume</ span >< span class = "o" > =</ span >< span class = "n" > sizing</ span >< span class = "p" > [</ span >< span class = "s2" > " buy_volume" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-1-66" name = "__codelineno-1-66" href = "#__codelineno-1-66" ></ a > < span class = "n" > order_side</ span >< span class = "o" > =</ span >< span class = "s2" > " BUY" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-67" name = "__codelineno-1-67" href = "#__codelineno-1-67" ></ a > < span class = "n" > sl</ span >< span class = "o" > =</ span >< span class = "n" > limits</ span >< span class = "p" > [</ span >< span class = "s2" > " stop_loss" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-1-68" name = "__codelineno-1-68" href = "#__codelineno-1-68" ></ a > < span class = "n" > tp</ span >< span class = "o" > =</ span >< span class = "n" > limits</ span >< span class = "p" > [</ span >< span class = "s2" > " take_profit" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-1-69" name = "__codelineno-1-69" href = "#__codelineno-1-69" ></ a > < span class = "n" > dry_run</ span >< span class = "o" > =</ span >< span class = "kc" > True</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-70" name = "__codelineno-1-70" href = "#__codelineno-1-70" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-1-71" name = "__codelineno-1-71" href = "#__codelineno-1-71" ></ a >< span class = "n" > closed</ span > < span class = "o" > =</ span > < span class = "n" > close_open_positions</ span >< span class = "p" > (</ span >< span class = "n" > client</ span >< span class = "p" > ,</ span > < span class = "n" > symbols</ span >< span class = "o" > =</ span >< span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span > < span class = "n" > dry_run</ span >< span class = "o" > =</ span >< span class = "kc" > True</ span >< span class = "p" > )</ span >
2026-06-11 10:33:27 +00:00
</ code ></ pre ></ div >
2026-06-14 17:47:52 +00:00
< p >< code > detect_position_side()</ code > returns < code > long</ code > for buy-only exposure, < code > short</ code > for
sell-only exposure, and < code > None</ code > for no positions or mixed long/short exposure.
< code > calculate_spread_ratio()</ code > uses < code > (ask - bid) / ((ask + bid) / 2)</ code > and raises
2026-06-26 13:28:39 +00:00
< code > Mt5OperationError</ code > when bid or ask is missing or non-positive.
2026-06-18 16:03:06 +00:00
< code > normalize_order_volume()</ code > returns < code > 0.0</ code > for invalid constraints or
sub-minimum requests; check the result before calling < code > estimate_order_margin()</ code > ,
which requires a positive finite volume. < code > calculate_positions_margin()</ code > silently
skips rows with missing symbols, non-positive volumes, non-finite volumes, or
2026-06-26 13:28:39 +00:00
unsupported position types, but propagates < code > Mt5OperationError</ code > from < code > estimate_order_margin()</ code > when a valid row
2026-06-18 16:03:06 +00:00
encounters invalid tick data or margin results from the broker.</ p >
2026-06-14 17:47:52 +00:00
< p > SL/TP ratios for < code > determine_order_limits()</ code > must satisfy < code > 0 < = ratio < 1</ code > ; < code > 0</ code >
omits that level. SL/TP prices are rounded with symbol < code > digits</ code > metadata when
2026-06-18 10:12:55 +00:00
available. < code > determine_order_limits()</ code > pre-validates computed SL/TP prices against
available < code > trade_stops_level * point</ code > metadata when present; violations raise
2026-06-26 13:28:39 +00:00
< code > Mt5OperationError</ code > . This is a planning helper only: it does not guarantee broker
2026-06-18 10:12:55 +00:00
acceptance because live validation can still depend on price movement, bid/ask
side, freeze levels, and server-side rules, and it does not validate
< code > trade_freeze_level</ code > . When symbol metadata cannot be loaded, protective prices
still round with < code > digits=8</ code > and stop-level validation is skipped.
< code > unit_margin_ratio</ code > and < code > preserved_margin_ratio</ code > for < code > calculate_margin_and_volume()</ code >
accept < code > 0 < = ratio < = 1</ code > ; < code > unit_margin_ratio=0</ code > requests one minimum valid unit
when the post-reserve margin can afford it. Negative < code > margin_free</ code > is clamped to
< code > 0.0</ code > before sizing. Execution helpers return normalized < code > OrderExecutionResult</ code >
dictionaries containing the request, response, status, retcode, and < code > dry_run</ code >
flag; < code > dry_run=True</ code > never sends an order or mutates Market Watch visibility.
< code > ensure_symbol_selected()</ code > adds hidden symbols to Market Watch before live order
placement and SL/TP updates. Failed, malformed, or unknown broker retcodes are
fail-closed and returned as < code > status="failed"</ code > while keeping the normalized
response for inspection.</ p >
< h2 id = "order-planning-return-contracts" > Order planning return contracts< a class = "headerlink" href = "#order-planning-return-contracts" title = "Permanent link" > ¶ </ a ></ h2 >
< div class = "highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-2-1" name = "__codelineno-2-1" href = "#__codelineno-2-1" ></ a >< span class = "kn" > from</ span >< span class = "w" > </ span >< span class = "nn" > mt5cli</ span >< span class = "w" > </ span >< span class = "kn" > import</ span > < span class = "n" > MarginVolume</ span >< span class = "p" > ,</ span > < span class = "n" > OrderLimits</ span >< span class = "p" > ,</ span > < span class = "n" > OrderExecutionResult</ span >
< a id = "__codelineno-2-2" name = "__codelineno-2-2" href = "#__codelineno-2-2" ></ a >
< a id = "__codelineno-2-3" name = "__codelineno-2-3" href = "#__codelineno-2-3" ></ a >< span class = "n" > sizing</ span >< span class = "p" > :</ span > < span class = "n" > MarginVolume</ span > < span class = "o" > =</ span > < span class = "n" > calculate_margin_and_volume</ span >< span class = "p" > (</ span >
< a id = "__codelineno-2-4" name = "__codelineno-2-4" href = "#__codelineno-2-4" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-5" name = "__codelineno-2-5" href = "#__codelineno-2-5" ></ a > < span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-6" name = "__codelineno-2-6" href = "#__codelineno-2-6" ></ a > < span class = "n" > unit_margin_ratio</ span >< span class = "o" > =</ span >< span class = "mf" > 0.5</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-7" name = "__codelineno-2-7" href = "#__codelineno-2-7" ></ a > < span class = "n" > preserved_margin_ratio</ span >< span class = "o" > =</ span >< span class = "mf" > 0.2</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-8" name = "__codelineno-2-8" href = "#__codelineno-2-8" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-2-9" name = "__codelineno-2-9" href = "#__codelineno-2-9" ></ a >< span class = "n" > limits</ span >< span class = "p" > :</ span > < span class = "n" > OrderLimits</ span > < span class = "o" > =</ span > < span class = "n" > determine_order_limits</ span >< span class = "p" > (</ span >
< a id = "__codelineno-2-10" name = "__codelineno-2-10" href = "#__codelineno-2-10" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-11" name = "__codelineno-2-11" href = "#__codelineno-2-11" ></ a > < span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-12" name = "__codelineno-2-12" href = "#__codelineno-2-12" ></ a > < span class = "n" > side</ span >< span class = "o" > =</ span >< span class = "s2" > " long" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-13" name = "__codelineno-2-13" href = "#__codelineno-2-13" ></ a > < span class = "n" > stop_loss_limit_ratio</ span >< span class = "o" > =</ span >< span class = "mf" > 0.01</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-14" name = "__codelineno-2-14" href = "#__codelineno-2-14" ></ a > < span class = "n" > take_profit_limit_ratio</ span >< span class = "o" > =</ span >< span class = "mf" > 0.02</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-15" name = "__codelineno-2-15" href = "#__codelineno-2-15" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-2-16" name = "__codelineno-2-16" href = "#__codelineno-2-16" ></ a >< span class = "n" > preview</ span >< span class = "p" > :</ span > < span class = "n" > OrderExecutionResult</ span > < span class = "o" > =</ span > < span class = "n" > place_market_order</ span >< span class = "p" > (</ span >
< a id = "__codelineno-2-17" name = "__codelineno-2-17" href = "#__codelineno-2-17" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-18" name = "__codelineno-2-18" href = "#__codelineno-2-18" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-19" name = "__codelineno-2-19" href = "#__codelineno-2-19" ></ a > < span class = "n" > volume</ span >< span class = "o" > =</ span >< span class = "n" > sizing</ span >< span class = "p" > [</ span >< span class = "s2" > " buy_volume" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-2-20" name = "__codelineno-2-20" href = "#__codelineno-2-20" ></ a > < span class = "n" > order_side</ span >< span class = "o" > =</ span >< span class = "s2" > " BUY" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-21" name = "__codelineno-2-21" href = "#__codelineno-2-21" ></ a > < span class = "n" > sl</ span >< span class = "o" > =</ span >< span class = "n" > limits</ span >< span class = "p" > [</ span >< span class = "s2" > " stop_loss" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-2-22" name = "__codelineno-2-22" href = "#__codelineno-2-22" ></ a > < span class = "n" > tp</ span >< span class = "o" > =</ span >< span class = "n" > limits</ span >< span class = "p" > [</ span >< span class = "s2" > " take_profit" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-2-23" name = "__codelineno-2-23" href = "#__codelineno-2-23" ></ a > < span class = "n" > dry_run</ span >< span class = "o" > =</ span >< span class = "kc" > True</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-24" name = "__codelineno-2-24" href = "#__codelineno-2-24" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-2-25" name = "__codelineno-2-25" href = "#__codelineno-2-25" ></ a >< span class = "n" > updates</ span >< span class = "p" > :</ span > < span class = "nb" > list</ span >< span class = "p" > [</ span >< span class = "n" > OrderExecutionResult</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "n" > update_sltp_for_open_positions</ span >< span class = "p" > (</ span >
< a id = "__codelineno-2-26" name = "__codelineno-2-26" href = "#__codelineno-2-26" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-27" name = "__codelineno-2-27" href = "#__codelineno-2-27" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-28" name = "__codelineno-2-28" href = "#__codelineno-2-28" ></ a > < span class = "n" > stop_loss</ span >< span class = "o" > =</ span >< span class = "n" > limits</ span >< span class = "p" > [</ span >< span class = "s2" > " stop_loss" </ span >< span class = "p" > ],</ span >
< a id = "__codelineno-2-29" name = "__codelineno-2-29" href = "#__codelineno-2-29" ></ a > < span class = "n" > dry_run</ span >< span class = "o" > =</ span >< span class = "kc" > True</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-2-30" name = "__codelineno-2-30" href = "#__codelineno-2-30" ></ a >< span class = "p" > )</ span >
</ code ></ pre ></ div >
< p > Closes issue #33: strategy-neutral order planning and execution helpers exposed
through the stable package root without embedding entry/exit policy.</ p >
2026-06-29 20:29:14 +00:00
< h2 id = "retrieving-recent-history-deals" > Retrieving recent history deals< a class = "headerlink" href = "#retrieving-recent-history-deals" title = "Permanent link" > ¶ </ a ></ h2 >
< p >< code > fetch_recent_history_deals_for_trading_client()</ code > fetches history deals from an
already-connected trading client over a trailing time window. It works directly
with the object returned by < code > create_trading_client()</ code > (a raw
< code > pdmt5.Mt5DataClient</ code > ) without requiring any additional wrapping.</ p >
< p > The helper returns a chronologically sorted DataFrame with a < code > RangeIndex</ code > and
all columns from the underlying client (< code > time</ code > , < code > symbol</ code > , < code > type</ code > , < code > entry</ code > ,
< code > volume</ code > , < code > profit</ code > , < code > position_id</ code > , etc.). It does < strong > not</ strong > apply any
strategy-specific transformations — entry/exit classification, Kelly fractions,
and betting semantics belong in downstream applications.</ p >
< div class = "highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-3-1" name = "__codelineno-3-1" href = "#__codelineno-3-1" ></ a >< span class = "kn" > from</ span >< span class = "w" > </ span >< span class = "nn" > mt5cli</ span >< span class = "w" > </ span >< span class = "kn" > import</ span > < span class = "p" > (</ span >
< a id = "__codelineno-3-2" name = "__codelineno-3-2" href = "#__codelineno-3-2" ></ a > < span class = "n" > create_trading_client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-3-3" name = "__codelineno-3-3" href = "#__codelineno-3-3" ></ a > < span class = "n" > fetch_recent_history_deals_for_trading_client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-3-4" name = "__codelineno-3-4" href = "#__codelineno-3-4" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-3-5" name = "__codelineno-3-5" href = "#__codelineno-3-5" ></ a >
< a id = "__codelineno-3-6" name = "__codelineno-3-6" href = "#__codelineno-3-6" ></ a >< span class = "n" > client</ span > < span class = "o" > =</ span > < span class = "n" > create_trading_client</ span >< span class = "p" > (</ span >< span class = "n" > login</ span >< span class = "o" > =</ span >< span class = "mi" > 12345</ span >< span class = "p" > ,</ span > < span class = "n" > server</ span >< span class = "o" > =</ span >< span class = "s2" > " Broker-Demo" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-3-7" name = "__codelineno-3-7" href = "#__codelineno-3-7" ></ a >< span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-3-8" name = "__codelineno-3-8" href = "#__codelineno-3-8" ></ a > < span class = "n" > deals_df</ span > < span class = "o" > =</ span > < span class = "n" > fetch_recent_history_deals_for_trading_client</ span >< span class = "p" > (</ span >
< a id = "__codelineno-3-9" name = "__codelineno-3-9" href = "#__codelineno-3-9" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-3-10" name = "__codelineno-3-10" href = "#__codelineno-3-10" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "s2" > " JP225" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-3-11" name = "__codelineno-3-11" href = "#__codelineno-3-11" ></ a > < span class = "n" > hours</ span >< span class = "o" > =</ span >< span class = "mi" > 24</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-3-12" name = "__codelineno-3-12" href = "#__codelineno-3-12" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-3-13" name = "__codelineno-3-13" href = "#__codelineno-3-13" ></ a >< span class = "k" > finally</ span >< span class = "p" > :</ span >
< a id = "__codelineno-3-14" name = "__codelineno-3-14" href = "#__codelineno-3-14" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > shutdown</ span >< span class = "p" > ()</ span >
</ code ></ pre ></ div >
< p > Or inside a managed session:</ p >
< div class = "highlight" >< pre >< span ></ span >< code >< a id = "__codelineno-4-1" name = "__codelineno-4-1" href = "#__codelineno-4-1" ></ a >< span class = "kn" > from</ span >< span class = "w" > </ span >< span class = "nn" > mt5cli</ span >< span class = "w" > </ span >< span class = "kn" > import</ span > < span class = "n" > fetch_recent_history_deals_for_trading_client</ span >< span class = "p" > ,</ span > < span class = "n" > mt5_trading_session</ span >
< a id = "__codelineno-4-2" name = "__codelineno-4-2" href = "#__codelineno-4-2" ></ a >
< a id = "__codelineno-4-3" name = "__codelineno-4-3" href = "#__codelineno-4-3" ></ a >< span class = "k" > with</ span > < span class = "n" > mt5_trading_session</ span >< span class = "p" > (</ span >< span class = "n" > login</ span >< span class = "o" > =</ span >< span class = "mi" > 12345</ span >< span class = "p" > ,</ span > < span class = "n" > server</ span >< span class = "o" > =</ span >< span class = "s2" > " Broker-Demo" </ span >< span class = "p" > )</ span > < span class = "k" > as</ span > < span class = "n" > client</ span >< span class = "p" > :</ span >
< a id = "__codelineno-4-4" name = "__codelineno-4-4" href = "#__codelineno-4-4" ></ a > < span class = "n" > deals_df</ span > < span class = "o" > =</ span > < span class = "n" > fetch_recent_history_deals_for_trading_client</ span >< span class = "p" > (</ span >
< a id = "__codelineno-4-5" name = "__codelineno-4-5" href = "#__codelineno-4-5" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-4-6" name = "__codelineno-4-6" href = "#__codelineno-4-6" ></ a > < span class = "n" > symbol</ span >< span class = "o" > =</ span >< span class = "s2" > " JP225" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-4-7" name = "__codelineno-4-7" href = "#__codelineno-4-7" ></ a > < span class = "n" > hours</ span >< span class = "o" > =</ span >< span class = "mi" > 48</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-4-8" name = "__codelineno-4-8" href = "#__codelineno-4-8" ></ a > < span class = "p" > )</ span >
</ code ></ pre ></ div >
< p >< code > hours</ code > must be positive; < code > date_to</ code > defaults to < code > datetime.now(UTC)</ code > . An empty
or < code > None</ code > result from the underlying client is normalized to an empty DataFrame.</ p >
< p > Downstream packages own all strategy-specific transformations. mt5cli does not
provide entry-deal classification, Kelly sizing, or any betting-specific helpers.</ p >
2026-06-18 10:12:55 +00:00
< h2 id = "migration-from-application-local-helpers" > Migration from application-local helpers< a class = "headerlink" href = "#migration-from-application-local-helpers" title = "Permanent link" > ¶ </ a ></ h2 >
2026-06-11 10:33:27 +00:00
< table >
< thead >
< tr >
2026-06-18 10:12:55 +00:00
< th > Application-local concern</ th >
2026-06-11 10:33:27 +00:00
< th > mt5cli replacement</ th >
</ tr >
</ thead >
< tbody >
< tr >
< td > Manual terminal spawn/kill around trading code</ td >
< td >< code > mt5_trading_session()</ code ></ td >
</ tr >
< tr >
< td > Local position-side detection</ td >
< td >< code > detect_position_side()</ code ></ td >
</ tr >
< tr >
< td > Local margin/volume sizing</ td >
< td >< code > calculate_margin_and_volume()</ code ></ td >
</ tr >
< tr >
2026-06-18 16:03:06 +00:00
< td > Local broker volume step normalization</ td >
< td >< code > normalize_order_volume()</ code ></ td >
</ tr >
< tr >
< td > Local order or position margin estimation</ td >
< td >< code > estimate_order_margin()</ code > , < code > calculate_positions_margin()</ code ></ td >
</ tr >
< tr >
< td > Local closed-bar fetch from a trading session</ td >
2026-06-22 13:53:09 +00:00
< td >< code > fetch_latest_closed_rates_for_trading_client()</ code > , < code > fetch_latest_closed_rates_indexed()</ code ></ td >
2026-06-18 16:03:06 +00:00
</ tr >
< tr >
2026-06-29 20:29:14 +00:00
< td > Local recent deal history fetch from a trading session</ td >
< td >< code > fetch_recent_history_deals_for_trading_client()</ code ></ td >
</ tr >
< tr >
2026-06-11 10:33:27 +00:00
< td > Local SL/TP price derivation</ td >
< td >< code > determine_order_limits()</ code ></ td >
</ tr >
< tr >
< td > Throttled SQLite history loop with ad-hoc error handling</ td >
< td >< code > ThrottledHistoryUpdater(suppress_errors=True)</ code ></ td >
</ tr >
</ tbody >
</ table >
2026-06-23 16:59:18 +00:00
< p > Keep read-only data collection on < code > mt5_session()</ code > / < code > MT5Client</ code > ; use
2026-06-11 10:33:27 +00:00
< code > mt5_trading_session()</ code > only where order placement or trading calculations are
required.</ p ></ div >
</ div >
</ div >
< footer class = "col-md-12" >
< hr >
< p > Documentation built with < a href = "https://www.mkdocs.org/" > MkDocs</ a > .</ p >
</ footer >
< script src = "../../js/bootstrap.bundle.min.js" ></ script >
< script >
var base_url = "../.." ,
shortcuts = { "help" : 191 , "next" : 78 , "previous" : 80 , "search" : 83 };
</ script >
< script src = "../../js/base.js" ></ script >
< script src = "../../search/main.js" ></ script >
< div class = "modal" id = "mkdocs_search_modal" tabindex = "-1" role = "dialog" aria-labelledby = "searchModalLabel" aria-hidden = "true" >
< div class = "modal-dialog modal-lg" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" id = "searchModalLabel" > Search</ h4 >
< button type = "button" class = "btn-close" data-bs-dismiss = "modal" aria-label = "Close" ></ button >
</ div >
< div class = "modal-body" >
< p > From here you can search these documents. Enter your search terms below.</ p >
< form >
< div class = "form-group" >
< input type = "search" class = "form-control" placeholder = "Search..." id = "mkdocs-search-query" title = "Type search term here" >
</ div >
</ form >
< div id = "mkdocs-search-results" data-no-results-text = "No results found" ></ div >
</ div >
< div class = "modal-footer" >
</ div >
</ div >
</ div >
</ div >< div class = "modal" id = "mkdocs_keyboard_modal" tabindex = "-1" role = "dialog" aria-labelledby = "keyboardModalLabel" aria-hidden = "true" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" id = "keyboardModalLabel" > Keyboard Shortcuts</ h4 >
< button type = "button" class = "btn-close" data-bs-dismiss = "modal" aria-label = "Close" ></ button >
</ div >
< div class = "modal-body" >
< table class = "table" >
< thead >
< tr >
< th style = "width: 20%;" > Keys</ th >
< th > Action</ th >
</ tr >
</ thead >
< tbody >
< tr >
< td class = "help shortcut" >< kbd > ?</ kbd ></ td >
< td > Open this help</ td >
</ tr >
< tr >
< td class = "next shortcut" >< kbd > n</ kbd ></ td >
< td > Next page</ td >
</ tr >
< tr >
< td class = "prev shortcut" >< kbd > p</ kbd ></ td >
< td > Previous page</ td >
</ tr >
< tr >
< td class = "search shortcut" >< kbd > s</ kbd ></ td >
< td > Search</ td >
</ tr >
</ tbody >
</ table >
</ div >
< div class = "modal-footer" >
</ div >
</ div >
</ div >
</ div >
</ body >
</ html >