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-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 = "../storage/" class = "dropdown-item" > Storage</ 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 >
< 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 >
< li class = "nav-item" data-bs-level = "2" >< a href = "#operational-trading-helpers" class = "nav-link" > Operational trading helpers</ a >
< ul class = "nav flex-column" >
</ ul >
</ li >
< li class = "nav-item" data-bs-level = "2" >< a href = "#migration-from-mteor-local-helpers" class = "nav-link" > Migration from mteor-local helpers</ a >
< 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" >
< 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 >
< 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" > ' 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" >
< 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" >
< 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 >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "s2" > " OrderSide" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "s2" > " PositionSide" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "s2" > " calculate_margin_and_volume" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "s2" > " detect_position_side" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "s2" > " determine_order_limits" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "s2" > " mt5_trading_session" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< 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 >
< 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 = "pdmt5.Mt5TradingClient" > Mt5TradingClient</ 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 = "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" >< 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 > 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 volume sizing on both buy and sell sides.</ 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 >
< code >< span title = "pdmt5.Mt5TradingClient" > Mt5TradingClient</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Connected < code > Mt5TradingClient</ code > instance.</ 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 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 >< span title = "dict" > dict</ span > [< span title = "str" > str</ span > , < span title = "float" > float</ span > ]</ 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 >< span title = "dict" > dict</ span > [< span title = "str" > str</ span > , < span title = "float" > float</ span > ]</ 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 >< span title = "dict" > dict</ span > [< span title = "str" > str</ span > , < span title = "float" > float</ span > ]</ 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 >
< div class = "highlight" >< table class = "highlighttable" >< tr >< td class = "linenos" >< div class = "linenodiv" >< pre >< span ></ span >< span class = "normal" >< a href = "#__codelineno-0-92" > 92</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-93" > 93</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-94" > 94</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-95" > 95</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-96" > 96</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-97" > 97</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-98" > 98</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-99" > 99</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-100" > 100</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-101" > 101</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-102" > 102</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-103" > 103</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-104" > 104</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-105" > 105</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-106" > 106</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-107" > 107</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-108" > 108</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-109" > 109</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-110" > 110</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-111" > 111</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-112" > 112</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-113" > 113</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-114" > 114</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-115" > 115</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-116" > 116</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-117" > 117</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-118" > 118</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-119" > 119</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-120" > 120</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-121" > 121</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-122" > 122</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-123" > 123</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-124" > 124</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-125" > 125</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-126" > 126</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-127" > 127</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-128" > 128</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-129" > 129</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-130" > 130</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-92" name = "__codelineno-0-92" ></ 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-93" name = "__codelineno-0-93" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > Mt5TradingClient</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-94" name = "__codelineno-0-94" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-95" name = "__codelineno-0-95" ></ 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-96" name = "__codelineno-0-96" ></ 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-97" name = "__codelineno-0-97" ></ 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-98" name = "__codelineno-0-98" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Calculate tradable margin and volumes from account free margin.</ span >
< a id = "__codelineno-0-99" name = "__codelineno-0-99" ></ a >
< a id = "__codelineno-0-100" name = "__codelineno-0-100" ></ a >< span class = "sd" > Applies ``preserved_margin_ratio`` to keep a reserve off ``margin_free``,</ span >
< a id = "__codelineno-0-101" name = "__codelineno-0-101" ></ a >< span class = "sd" > then allocates ``unit_margin_ratio`` of the remainder as the margin budget</ span >
< a id = "__codelineno-0-102" name = "__codelineno-0-102" ></ a >< span class = "sd" > for volume sizing on both buy and sell sides.</ span >
< a id = "__codelineno-0-103" name = "__codelineno-0-103" ></ a >
< a id = "__codelineno-0-104" name = "__codelineno-0-104" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-105" name = "__codelineno-0-105" ></ a >< span class = "sd" > client: Connected ``Mt5TradingClient`` instance.</ span >
< a id = "__codelineno-0-106" name = "__codelineno-0-106" ></ a >< span class = "sd" > symbol: Symbol used for minimum-lot margin and volume calculations.</ span >
< a id = "__codelineno-0-107" name = "__codelineno-0-107" ></ a >< span class = "sd" > unit_margin_ratio: Fraction of post-reserve margin to allocate per unit.</ span >
< a id = "__codelineno-0-108" name = "__codelineno-0-108" ></ a >< span class = "sd" > preserved_margin_ratio: Fraction of ``margin_free`` to preserve.</ span >
< a id = "__codelineno-0-109" name = "__codelineno-0-109" ></ a >
< a id = "__codelineno-0-110" name = "__codelineno-0-110" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-111" name = "__codelineno-0-111" ></ a >< span class = "sd" > Dictionary with ``margin_free``, ``available_margin``, ``trade_margin``,</ span >
< a id = "__codelineno-0-112" name = "__codelineno-0-112" ></ a >< span class = "sd" > ``buy_volume``, and ``sell_volume``. Negative ``margin_free`` values are</ span >
< a id = "__codelineno-0-113" name = "__codelineno-0-113" ></ a >< span class = "sd" > clamped to ``0.0`` before sizing.</ span >
< a id = "__codelineno-0-114" name = "__codelineno-0-114" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-115" name = "__codelineno-0-115" ></ 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-116" name = "__codelineno-0-116" ></ 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-117" name = "__codelineno-0-117" ></ a >
< a id = "__codelineno-0-118" name = "__codelineno-0-118" ></ 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-119" name = "__codelineno-0-119" ></ 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-120" name = "__codelineno-0-120" ></ 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-121" name = "__codelineno-0-121" ></ 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-122" name = "__codelineno-0-122" ></ a > < span class = "n" > buy_volume</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > calculate_volume_by_margin</ 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-123" name = "__codelineno-0-123" ></ a > < span class = "n" > sell_volume</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > calculate_volume_by_margin</ 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-124" name = "__codelineno-0-124" ></ a > < span class = "k" > return</ span > < span class = "p" > {</ span >
< a id = "__codelineno-0-125" name = "__codelineno-0-125" ></ 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-126" name = "__codelineno-0-126" ></ 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-127" name = "__codelineno-0-127" ></ 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-128" name = "__codelineno-0-128" ></ a > < span class = "s2" > " buy_volume" </ span >< span class = "p" > :</ span > < span class = "n" > buy_volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-129" name = "__codelineno-0-129" ></ a > < span class = "s2" > " sell_volume" </ span >< span class = "p" > :</ span > < span class = "n" > sell_volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-130" name = "__codelineno-0-130" ></ 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.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 >
< 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 = "pdmt5.Mt5TradingClient" > Mt5TradingClient</ span ></ span >< span class = "p" > ,</ span > < span class = "n" > symbol</ 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" >< 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 = "kc" > None</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Detect the net open position side for a symbol.</ 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 >
< code >< span title = "pdmt5.Mt5TradingClient" > Mt5TradingClient</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Connected < code > Mt5TradingClient</ code > instance.</ 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 to inspect.</ 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 = "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 net buy volume exceeds sell volume, < code > "short"</ code > when</ 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 > net sell volume exceeds buy volume, or < code > None</ code > when no positions exist</ 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 > or buy/sell volumes are exactly balanced.</ 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-61" > 61</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-62" > 62</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-63" > 63</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-64" > 64</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-65" > 65</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-66" > 66</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-67" > 67</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-68" > 68</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-69" > 69</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-70" > 70</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-71" > 71</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-72" > 72</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-73" > 73</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-74" > 74</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-75" > 75</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-76" > 76</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-77" > 77</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-78" > 78</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-79" > 79</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-80" > 80</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-81" > 81</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-82" > 82</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-83" > 83</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-84" > 84</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-85" > 85</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-86" > 86</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-87" > 87</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-88" > 88</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-89" > 89</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-61" name = "__codelineno-0-61" ></ 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-62" name = "__codelineno-0-62" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > Mt5TradingClient</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-63" name = "__codelineno-0-63" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-64" name = "__codelineno-0-64" ></ 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-65" name = "__codelineno-0-65" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Detect the net open position side for a symbol.</ span >
< a id = "__codelineno-0-66" name = "__codelineno-0-66" ></ a >
< a id = "__codelineno-0-67" name = "__codelineno-0-67" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-68" name = "__codelineno-0-68" ></ a >< span class = "sd" > client: Connected ``Mt5TradingClient`` instance.</ span >
< a id = "__codelineno-0-69" name = "__codelineno-0-69" ></ a >< span class = "sd" > symbol: Symbol to inspect.</ span >
< a id = "__codelineno-0-70" name = "__codelineno-0-70" ></ a >
< a id = "__codelineno-0-71" name = "__codelineno-0-71" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-72" name = "__codelineno-0-72" ></ a >< span class = "sd" > ``" long" `` when net buy volume exceeds sell volume, ``" short" `` when</ span >
< a id = "__codelineno-0-73" name = "__codelineno-0-73" ></ a >< span class = "sd" > net sell volume exceeds buy volume, or ``None`` when no positions exist</ span >
< a id = "__codelineno-0-74" name = "__codelineno-0-74" ></ a >< span class = "sd" > or buy/sell volumes are exactly balanced.</ span >
< a id = "__codelineno-0-75" name = "__codelineno-0-75" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-76" name = "__codelineno-0-76" ></ 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 = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-77" name = "__codelineno-0-77" ></ 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-78" name = "__codelineno-0-78" ></ a > < span class = "k" > return</ span > < span class = "kc" > None</ span >
< a id = "__codelineno-0-79" name = "__codelineno-0-79" ></ a >
< a id = "__codelineno-0-80" name = "__codelineno-0-80" ></ 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-81" name = "__codelineno-0-81" ></ 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-82" name = "__codelineno-0-82" ></ 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-83" name = "__codelineno-0-83" ></ 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-84" name = "__codelineno-0-84" ></ a > < span class = "n" > net_volume</ span > < span class = "o" > =</ span > < span class = "n" > buy_volume</ span > < span class = "o" > -</ span > < span class = "n" > sell_volume</ span >
< a id = "__codelineno-0-85" name = "__codelineno-0-85" ></ a > < span class = "k" > if</ span > < span class = "n" > net_volume</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-86" name = "__codelineno-0-86" ></ a > < span class = "k" > return</ span > < span class = "s2" > " long" </ span >
< a id = "__codelineno-0-87" name = "__codelineno-0-87" ></ a > < span class = "k" > if</ span > < span class = "n" > net_volume</ span > < span class = "o" > < </ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-88" name = "__codelineno-0-88" ></ a > < span class = "k" > return</ span > < span class = "s2" > " short" </ span >
< a id = "__codelineno-0-89" name = "__codelineno-0-89" ></ a > < span class = "k" > return</ span > < span class = "kc" > None</ span >
</ 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 >
< 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 = "pdmt5.Mt5TradingClient" > Mt5TradingClient</ 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 = "n" > 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" > stop_loss_limit_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 = "n" > take_profit_limit_ratio</ 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 = "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 = "kc" > None</ span >< span class = "p" > ]</ span >
</ 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 >
< code >< span title = "pdmt5.Mt5TradingClient" > Mt5TradingClient</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Connected < code > Mt5TradingClient</ code > instance.</ 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 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 = "OrderSide
module-attribute
(mt5cli.trading.OrderSide)" href = "#mt5cli.trading.OrderSide" > OrderSide</ 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 >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > stop_loss_limit_ratio</ code >
</ td >
< td >
< code >< span title = "float" > float</ span ></ code >
</ 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 >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > take_profit_limit_ratio</ code >
</ td >
< td >
< code >< span title = "float" > float</ span ></ code >
</ 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 >
< 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 = "dict" > dict</ span > [< span title = "str" > str</ span > , < span title = "float" > float</ span > | None]</ code >
</ 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 >
< code >< span title = "dict" > dict</ span > [< span title = "str" > str</ span > , < span title = "float" > float</ span > | None]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Omitted protective levels are returned as < code > None</ code > .</ 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-133" > 133</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-134" > 134</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-135" > 135</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-136" > 136</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-137" > 137</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-138" > 138</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-139" > 139</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-140" > 140</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-141" > 141</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-142" > 142</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-143" > 143</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-144" > 144</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-145" > 145</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-146" > 146</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-147" > 147</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-148" > 148</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-149" > 149</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-150" > 150</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-151" > 151</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-152" > 152</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-153" > 153</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-154" > 154</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-155" > 155</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-156" > 156</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-157" > 157</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-158" > 158</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-159" > 159</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-160" > 160</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-161" > 161</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-162" > 162</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-163" > 163</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-164" > 164</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-165" > 165</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-166" > 166</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-167" > 167</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-168" > 168</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-169" > 169</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-170" > 170</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-171" > 171</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-172" > 172</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-173" > 173</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-174" > 174</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-175" > 175</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-176" > 176</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-177" > 177</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-178" > 178</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-179" > 179</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-180" > 180</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-133" name = "__codelineno-0-133" ></ 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-134" name = "__codelineno-0-134" ></ a > < span class = "n" > client</ span >< span class = "p" > :</ span > < span class = "n" > Mt5TradingClient</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-135" name = "__codelineno-0-135" ></ a > < span class = "n" > symbol</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-136" name = "__codelineno-0-136" ></ a > < span class = "n" > 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-137" name = "__codelineno-0-137" ></ a > < span class = "n" > stop_loss_limit_ratio</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-138" name = "__codelineno-0-138" ></ a > < span class = "n" > take_profit_limit_ratio</ span >< span class = "p" > :</ span > < span class = "nb" > float</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-139" name = "__codelineno-0-139" ></ 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 = "kc" > None</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-140" name = "__codelineno-0-140" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Derive entry and protective order prices from current market quotes.</ span >
< a id = "__codelineno-0-141" name = "__codelineno-0-141" ></ a >
< a id = "__codelineno-0-142" name = "__codelineno-0-142" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-143" name = "__codelineno-0-143" ></ a >< span class = "sd" > client: Connected ``Mt5TradingClient`` instance.</ span >
< a id = "__codelineno-0-144" name = "__codelineno-0-144" ></ a >< span class = "sd" > symbol: Symbol used for the quote lookup.</ span >
< a id = "__codelineno-0-145" name = "__codelineno-0-145" ></ a >< span class = "sd" > side: Position side as ``" long" ``/``" short" `` (``" buy" ``/``" sell" ``</ span >
< a id = "__codelineno-0-146" name = "__codelineno-0-146" ></ a >< span class = "sd" > aliases are accepted).</ span >
< a id = "__codelineno-0-147" name = "__codelineno-0-147" ></ a >< span class = "sd" > stop_loss_limit_ratio: Relative distance from entry for stop loss in</ span >
< a id = "__codelineno-0-148" name = "__codelineno-0-148" ></ a >< span class = "sd" > ``[0, 1)``. A value of ``0`` omits the stop loss.</ span >
< a id = "__codelineno-0-149" name = "__codelineno-0-149" ></ a >< span class = "sd" > take_profit_limit_ratio: Relative distance from entry for take profit in</ span >
< a id = "__codelineno-0-150" name = "__codelineno-0-150" ></ a >< span class = "sd" > ``[0, 1)``. A value of ``0`` omits the take profit.</ span >
< a id = "__codelineno-0-151" name = "__codelineno-0-151" ></ a >
< a id = "__codelineno-0-152" name = "__codelineno-0-152" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-153" name = "__codelineno-0-153" ></ a >< span class = "sd" > Dictionary with ``entry``, ``stop_loss``, and ``take_profit`` keys.</ span >
< a id = "__codelineno-0-154" name = "__codelineno-0-154" ></ a >< span class = "sd" > Omitted protective levels are returned as ``None``.</ span >
< a id = "__codelineno-0-155" name = "__codelineno-0-155" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-156" name = "__codelineno-0-156" ></ a > < span class = "n" > _require_protective_ratio</ span >< span class = "p" > (</ span >< span class = "n" > stop_loss_limit_ratio</ span >< span class = "p" > ,</ span > < span class = "s2" > " stop_loss_limit_ratio" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-157" name = "__codelineno-0-157" ></ a > < span class = "n" > _require_protective_ratio</ span >< span class = "p" > (</ span >< span class = "n" > take_profit_limit_ratio</ span >< span class = "p" > ,</ span > < span class = "s2" > " take_profit_limit_ratio" </ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-158" name = "__codelineno-0-158" ></ a > < span class = "n" > normalized_side</ span > < span class = "o" > =</ span > < span class = "n" > _normalize_order_side</ span >< span class = "p" > (</ span >< span class = "n" > side</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-159" name = "__codelineno-0-159" ></ a > < span class = "n" > tick</ span > < span class = "o" > =</ span > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > symbol_info_tick_as_dict</ 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-160" name = "__codelineno-0-160" ></ a > < span class = "n" > entry</ span > < span class = "o" > =</ span > < span class = "nb" > float</ span >< span class = "p" > (</ span >< span class = "n" > tick</ span >< span class = "p" > [</ span >< span class = "s2" > " ask" </ span >< span class = "p" > ]</ 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 = "n" > tick</ span >< span class = "p" > [</ span >< span class = "s2" > " bid" </ span >< span class = "p" > ])</ span >
< a id = "__codelineno-0-161" name = "__codelineno-0-161" ></ a >
< a id = "__codelineno-0-162" name = "__codelineno-0-162" ></ 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-163" name = "__codelineno-0-163" ></ a > < span class = "k" > if</ span > < span class = "n" > stop_loss_limit_ratio</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-164" name = "__codelineno-0-164" ></ 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-165" name = "__codelineno-0-165" ></ 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_limit_ratio</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-166" name = "__codelineno-0-166" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-167" name = "__codelineno-0-167" ></ 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_limit_ratio</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-168" name = "__codelineno-0-168" ></ a >
< a id = "__codelineno-0-169" name = "__codelineno-0-169" ></ 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-170" name = "__codelineno-0-170" ></ a > < span class = "k" > if</ span > < span class = "n" > take_profit_limit_ratio</ span > < span class = "o" > > </ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-171" name = "__codelineno-0-171" ></ 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-172" name = "__codelineno-0-172" ></ 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_limit_ratio</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-173" name = "__codelineno-0-173" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-174" name = "__codelineno-0-174" ></ 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_limit_ratio</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-175" name = "__codelineno-0-175" ></ a >
< a id = "__codelineno-0-176" name = "__codelineno-0-176" ></ a > < span class = "k" > return</ span > < span class = "p" > {</ span >
< a id = "__codelineno-0-177" name = "__codelineno-0-177" ></ a > < span class = "s2" > " entry" </ span >< span class = "p" > :</ span > < span class = "n" > entry</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-178" name = "__codelineno-0-178" ></ 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-179" name = "__codelineno-0-179" ></ 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-180" name = "__codelineno-0-180" ></ 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.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 >
< 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 > < 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 >
< 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 = "collections.abc.Iterator" > Iterator</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "pdmt5.Mt5TradingClient" > Mt5TradingClient</ span ></ span >< span class = "p" > ]</ span >
</ 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
connected :class:< code > ~pdmt5.Mt5TradingClient</ code > , and calls < code > shutdown()</ code > on
exit even when an error is raised inside the context.</ 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 > 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 >
< 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" >
< p > Number of initialization retries passed to
< code > Mt5TradingClient</ code > .</ p >
</ 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 = "pdmt5.Mt5TradingClient" > Mt5TradingClient</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Connected < code > Mt5TradingClient</ code > bound to the session.</ 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-183" > 183</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-184" > 184</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-185" > 185</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-186" > 186</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-187" > 187</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-188" > 188</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-189" > 189</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-190" > 190</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-191" > 191</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-192" > 192</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-193" > 193</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-194" > 194</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-195" > 195</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-196" > 196</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-197" > 197</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-198" > 198</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-199" > 199</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-200" > 200</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-201" > 201</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-202" > 202</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-203" > 203</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-204" > 204</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-205" > 205</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-206" > 206</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-207" > 207</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-208" > 208</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-209" > 209</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-210" > 210</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-183" name = "__codelineno-0-183" ></ a >< span class = "nd" > @contextmanager</ span >
< a id = "__codelineno-0-184" name = "__codelineno-0-184" ></ 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-185" name = "__codelineno-0-185" ></ 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-186" name = "__codelineno-0-186" ></ 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-187" name = "__codelineno-0-187" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > Iterator</ span >< span class = "p" > [</ span >< span class = "n" > Mt5TradingClient</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-188" name = "__codelineno-0-188" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Open a trading-capable MT5 session and always shut down safely.</ span >
< a id = "__codelineno-0-189" name = "__codelineno-0-189" ></ a >
< a id = "__codelineno-0-190" name = "__codelineno-0-190" ></ a >< span class = "sd" > Launches the MetaTrader 5 terminal using ``Mt5Config.path`` when set,</ span >
< a id = "__codelineno-0-191" name = "__codelineno-0-191" ></ a >< span class = "sd" > initializes and logs in via ``initialize_and_login_mt5()``, yields a</ span >
< a id = "__codelineno-0-192" name = "__codelineno-0-192" ></ a >< span class = "sd" > connected :class:`~pdmt5.Mt5TradingClient`, and calls ``shutdown()`` on</ span >
< a id = "__codelineno-0-193" name = "__codelineno-0-193" ></ a >< span class = "sd" > exit even when an error is raised inside the context.</ span >
< a id = "__codelineno-0-194" name = "__codelineno-0-194" ></ a >
< a id = "__codelineno-0-195" name = "__codelineno-0-195" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-196" name = "__codelineno-0-196" ></ a >< span class = "sd" > config: MT5 connection configuration. Defaults to an empty config that</ span >
< a id = "__codelineno-0-197" name = "__codelineno-0-197" ></ a >< span class = "sd" > attaches to a running terminal.</ span >
< a id = "__codelineno-0-198" name = "__codelineno-0-198" ></ a >< span class = "sd" > retry_count: Number of initialization retries passed to</ span >
< a id = "__codelineno-0-199" name = "__codelineno-0-199" ></ a >< span class = "sd" > ``Mt5TradingClient``.</ span >
< a id = "__codelineno-0-200" name = "__codelineno-0-200" ></ a >
< a id = "__codelineno-0-201" name = "__codelineno-0-201" ></ a >< span class = "sd" > Yields:</ span >
< a id = "__codelineno-0-202" name = "__codelineno-0-202" ></ a >< span class = "sd" > Connected ``Mt5TradingClient`` bound to the session.</ span >
< a id = "__codelineno-0-203" name = "__codelineno-0-203" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-204" name = "__codelineno-0-204" ></ a > < span class = "n" > mt5_config</ span > < span class = "o" > =</ span > < span class = "n" > config</ span > < span class = "ow" > or</ span > < span class = "n" > build_config</ span >< span class = "p" > ()</ span >
< a id = "__codelineno-0-205" name = "__codelineno-0-205" ></ a > < span class = "n" > client</ span > < span class = "o" > =</ span > < span class = "n" > Mt5TradingClient</ 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-206" name = "__codelineno-0-206" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-207" name = "__codelineno-0-207" ></ 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-208" name = "__codelineno-0-208" ></ a > < span class = "k" > yield</ span > < span class = "n" > client</ span >
< a id = "__codelineno-0-209" name = "__codelineno-0-209" ></ a > < span class = "k" > finally</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-210" name = "__codelineno-0-210" ></ a > < span class = "n" > client</ span >< span class = "o" > .</ span >< span class = "n" > shutdown</ span >< span class = "p" > ()</ span >
</ 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 >
< p >< code > mt5_trading_session()</ code > complements the read-only < code > mt5_session()</ code > helper in
< code > sdk.py</ code > . It yields a connected < code > pdmt5.Mt5TradingClient</ code > , uses
< code > Mt5Config.path</ code > to launch the terminal when configured, and always calls
< code > shutdown()</ code > on exit.</ p >
< 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" > pdmt5</ span >< span class = "w" > </ span >< span class = "kn" > import</ span > < span class = "n" > Mt5Config</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ 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" > mt5_trading_session</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a >< span class = "k" > with</ span > < span class = "n" > mt5_trading_session</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "n" > Mt5Config</ span >< span class = "p" > (</ span >< 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 > < span class = "n" > login</ span >< span class = "o" > =</ span >< span class = "mi" > 12345</ span >< span class = "p" > ),</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "n" > retry_count</ span >< span class = "o" > =</ span >< span class = "mi" > 2</ 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 = "k" > as</ span > < span class = "n" > client</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ 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 >
</ code ></ pre ></ div >
< p > The read-only < code > Mt5CliClient</ code > / < code > mt5_session()</ code > API is unchanged.</ p >
< h2 id = "operational-trading-helpers" > Operational trading helpers< a class = "headerlink" href = "#operational-trading-helpers" title = "Permanent link" > ¶ </ a ></ h2 >
< 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 >
< a id = "__codelineno-1-2" name = "__codelineno-1-2" href = "#__codelineno-1-2" ></ a > < span class = "n" > calculate_margin_and_volume</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-3" name = "__codelineno-1-3" href = "#__codelineno-1-3" ></ a > < span class = "n" > detect_position_side</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-4" name = "__codelineno-1-4" href = "#__codelineno-1-4" ></ a > < span class = "n" > determine_order_limits</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-5" name = "__codelineno-1-5" href = "#__codelineno-1-5" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-1-6" name = "__codelineno-1-6" href = "#__codelineno-1-6" ></ a >
< a id = "__codelineno-1-7" name = "__codelineno-1-7" href = "#__codelineno-1-7" ></ 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-8" name = "__codelineno-1-8" href = "#__codelineno-1-8" ></ 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-9" name = "__codelineno-1-9" href = "#__codelineno-1-9" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-10" name = "__codelineno-1-10" href = "#__codelineno-1-10" ></ a > < span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-11" name = "__codelineno-1-11" href = "#__codelineno-1-11" ></ 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-12" name = "__codelineno-1-12" href = "#__codelineno-1-12" ></ 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-13" name = "__codelineno-1-13" href = "#__codelineno-1-13" ></ a >< span class = "p" > )</ span >
< a id = "__codelineno-1-14" name = "__codelineno-1-14" href = "#__codelineno-1-14" ></ 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-15" name = "__codelineno-1-15" href = "#__codelineno-1-15" ></ a > < span class = "n" > client</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-16" name = "__codelineno-1-16" href = "#__codelineno-1-16" ></ a > < span class = "s2" > " EURUSD" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-17" name = "__codelineno-1-17" href = "#__codelineno-1-17" ></ a > < span class = "n" > side</ span >< span class = "o" > =</ span >< span class = "s2" > " long" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-1-18" name = "__codelineno-1-18" href = "#__codelineno-1-18" ></ 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-19" name = "__codelineno-1-19" href = "#__codelineno-1-19" ></ 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-1-20" name = "__codelineno-1-20" href = "#__codelineno-1-20" ></ a >< span class = "p" > )</ span >
</ code ></ pre ></ div >
< p > Protective ratios must satisfy < code > 0 < = ratio < 1</ code > ; < code > 0</ code > omits that level.
< code > calculate_margin_and_volume()</ code > clamps negative < code > margin_free</ code > to < code > 0.0</ code >
before sizing.</ p >
< h2 id = "migration-from-mteor-local-helpers" > Migration from mteor-local helpers< a class = "headerlink" href = "#migration-from-mteor-local-helpers" title = "Permanent link" > ¶ </ a ></ h2 >
< table >
< thead >
< tr >
< th > mteor-local concern</ th >
< 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 >
< 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 >
< p > Keep read-only data collection on < code > mt5_session()</ code > / < code > Mt5CliClient</ code > ; use
< 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 >