2026-06-12 16:32:35 +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/converters/" >
< link rel = "shortcut icon" href = "../../img/favicon.ico" >
< title > Converters - 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 = "../storage/" class = "dropdown-item" > Storage</ a >
</ li >
< li >
< a href = "./" class = "dropdown-item active" aria-current = "page" > Converters</ a >
</ li >
< li >
< a href = "../exceptions/" class = "dropdown-item" > Exceptions</ a >
</ li >
< li >
< a href = "../cli/" class = "dropdown-item" > CLI</ a >
</ li >
< li >
< a href = "../sdk/" class = "dropdown-item" > SDK</ a >
</ li >
< li >
< a href = "../trading/" class = "dropdown-item" > 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 = "../storage/" class = "nav-link" >
< i class = "fa fa-arrow-left" ></ i > Previous
</ a >
</ li >
< li class = "nav-item" >
< a rel = "next" href = "../exceptions/" 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/converters.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 = "#converters" class = "nav-link" > Converters</ a >
< ul class = "nav flex-column" >
< li class = "nav-item" data-bs-level = "2" >< a href = "#mt5cli.converters" class = "nav-link" > converters</ a >
< ul class = "nav flex-column" >
</ ul >
</ li >
</ ul >
</ li >
</ ul >
</ div >
</ div ></ div >
< div class = "col-md-9" role = "main" >
< h1 id = "converters" > Converters< a class = "headerlink" href = "#converters" title = "Permanent link" > ¶ </ a ></ h1 >
< div class = "doc doc-object doc-module" >
< h2 id = "mt5cli.converters" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-module-name" > mt5cli.converters</ span >
< a href = "#mt5cli.converters" class = "headerlink" title = "Permanent link" > ¶ </ a ></ h2 >
< div class = "doc doc-contents first" >
< p > Shared conversion helpers for MT5 symbols, timeframes, and date ranges.</ p >
< div class = "doc doc-children" >
< div class = "doc doc-object doc-attribute" >
< h3 id = "mt5cli.converters.__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.converters.__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" > " ensure_utc" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" ></ a > < span class = "s2" > " granularity_name" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "s2" > " normalize_symbol" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ a > < span class = "s2" > " normalize_symbols" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" ></ a > < span class = "s2" > " parse_date_range" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" ></ a > < span class = "s2" > " parse_datetime" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" ></ a > < span class = "s2" > " parse_tick_flags" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" ></ a > < span class = "s2" > " parse_timeframe" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" ></ a > < span class = "s2" > " recent_window" </ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-11" name = "__codelineno-0-11" href = "#__codelineno-0-11" ></ 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.converters.ensure_utc" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > ensure_utc</ span >
< a href = "#mt5cli.converters.ensure_utc" 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_utc</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "datetime.datetime" > datetime</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "datetime.datetime" > datetime</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return a timezone-aware UTC datetime.</ 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 > value</ code >
</ td >
< td >
< code >< span title = "datetime.datetime" > datetime</ span > | < span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Datetime instance or ISO 8601 string.</ 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 = "datetime.datetime" > datetime</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > UTC-aware datetime.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/converters.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-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 ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-69" name = "__codelineno-0-69" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > ensure_utc</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > :</ span > < span class = "n" > datetime</ span > < span class = "o" > |</ span > < span class = "nb" > str</ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > datetime</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-70" name = "__codelineno-0-70" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return a timezone-aware UTC datetime.</ span >
< a id = "__codelineno-0-71" name = "__codelineno-0-71" ></ a >
< a id = "__codelineno-0-72" name = "__codelineno-0-72" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-73" name = "__codelineno-0-73" ></ a >< span class = "sd" > value: Datetime instance or ISO 8601 string.</ span >
< a id = "__codelineno-0-74" name = "__codelineno-0-74" ></ a >
< a id = "__codelineno-0-75" name = "__codelineno-0-75" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-76" name = "__codelineno-0-76" ></ a >< span class = "sd" > UTC-aware datetime.</ span >
< a id = "__codelineno-0-77" name = "__codelineno-0-77" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-78" name = "__codelineno-0-78" ></ 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" > str</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-79" name = "__codelineno-0-79" ></ a > < span class = "k" > return</ span > < span class = "n" > parse_datetime</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-80" name = "__codelineno-0-80" ></ a > < span class = "k" > if</ span > < span class = "n" > value</ span >< span class = "o" > .</ span >< span class = "n" > tzinfo</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-81" name = "__codelineno-0-81" ></ a > < span class = "k" > return</ span > < span class = "n" > value</ span >< span class = "o" > .</ span >< span class = "n" > replace</ span >< span class = "p" > (</ span >< span class = "n" > tzinfo</ span >< span class = "o" > =</ span >< span class = "n" > UTC</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-82" name = "__codelineno-0-82" ></ a > < span class = "k" > return</ span > < span class = "n" > value</ span >< span class = "o" > .</ span >< span class = "n" > astimezone</ span >< span class = "p" > (</ span >< span class = "n" > UTC</ span >< span class = "p" > )</ span >
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.converters.granularity_name" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > granularity_name</ span >
< a href = "#mt5cli.converters.granularity_name" 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" > granularity_name</ span >< span class = "p" > (</ span >< span class = "n" > timeframe</ 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 = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "str" > str</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Return a short granularity label for a timeframe integer or name.</ 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 > timeframe</ code >
</ td >
< td >
< code >< span title = "int" > int</ span > | < span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > MT5 timeframe as integer or name (for example < code > M1</ code > ).</ 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 = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Short name such as < code > M1</ code > or the stringified integer when unknown.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/converters.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-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 ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-148" name = "__codelineno-0-148" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > granularity_name</ span >< span class = "p" > (</ span >< span class = "n" > timeframe</ span >< span class = "p" > :</ span > < span class = "nb" > int</ span > < span class = "o" > |</ span > < span class = "nb" > str</ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > str</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-149" name = "__codelineno-0-149" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Return a short granularity label for a timeframe integer or name.</ span >
< a id = "__codelineno-0-150" name = "__codelineno-0-150" ></ a >
< a id = "__codelineno-0-151" name = "__codelineno-0-151" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-152" name = "__codelineno-0-152" ></ a >< span class = "sd" > timeframe: MT5 timeframe as integer or name (for example ``M1``).</ span >
< a id = "__codelineno-0-153" name = "__codelineno-0-153" ></ a >
< a id = "__codelineno-0-154" name = "__codelineno-0-154" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-155" name = "__codelineno-0-155" ></ a >< span class = "sd" > Short name such as ``M1`` or the stringified integer when unknown.</ span >
< a id = "__codelineno-0-156" name = "__codelineno-0-156" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-157" name = "__codelineno-0-157" ></ a > < span class = "n" > tf</ span > < span class = "o" > =</ span > < span class = "n" > parse_timeframe</ span >< span class = "p" > (</ span >< span class = "n" > timeframe</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-158" name = "__codelineno-0-158" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-159" name = "__codelineno-0-159" ></ a > < span class = "n" > name</ span > < span class = "o" > =</ span > < span class = "n" > _get_timeframe_name</ span >< span class = "p" > (</ span >< span class = "n" > tf</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-160" name = "__codelineno-0-160" ></ a > < span class = "k" > except</ span > < span class = "ne" > ValueError</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-161" name = "__codelineno-0-161" ></ a > < span class = "k" > return</ span > < span class = "nb" > str</ span >< span class = "p" > (</ span >< span class = "n" > tf</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-162" name = "__codelineno-0-162" ></ a > < span class = "k" > return</ span > < span class = "n" > name</ span >< span class = "o" > .</ span >< span class = "n" > removeprefix</ span >< span class = "p" > (</ span >< span class = "s2" > " TIMEFRAME_" </ span >< span class = "p" > )</ span >
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.converters.normalize_symbol" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > normalize_symbol</ span >
< a href = "#mt5cli.converters.normalize_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" > normalize_symbol</ 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 = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "str" > str</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Normalize a broker symbol name for MT5 API calls.</ p >
< p > Strips surrounding whitespace while preserving broker-specific casing and
suffixes (for example < code > XAUUSDm</ code > , < code > US500.cash</ code > , or < code > EURUSD.r</ code > ).</ 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 > symbol</ code >
</ td >
< td >
< code >< span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Raw symbol name.</ 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 = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Normalized symbol string.</ 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 the symbol is empty after normalization.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/converters.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-28" > 28</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-29" > 29</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-30" > 30</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-31" > 31</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-32" > 32</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-33" > 33</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-34" > 34</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-35" > 35</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-36" > 36</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-37" > 37</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-38" > 38</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-39" > 39</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-40" > 40</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-41" > 41</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-42" > 42</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-43" > 43</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-44" > 44</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-45" > 45</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-46" > 46</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-47" > 47</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-28" name = "__codelineno-0-28" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > normalize_symbol</ 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" > str</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-29" name = "__codelineno-0-29" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Normalize a broker symbol name for MT5 API calls.</ span >
< a id = "__codelineno-0-30" name = "__codelineno-0-30" ></ a >
< a id = "__codelineno-0-31" name = "__codelineno-0-31" ></ a >< span class = "sd" > Strips surrounding whitespace while preserving broker-specific casing and</ span >
< a id = "__codelineno-0-32" name = "__codelineno-0-32" ></ a >< span class = "sd" > suffixes (for example ``XAUUSDm``, ``US500.cash``, or ``EURUSD.r``).</ span >
< a id = "__codelineno-0-33" name = "__codelineno-0-33" ></ a >
< a id = "__codelineno-0-34" name = "__codelineno-0-34" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-35" name = "__codelineno-0-35" ></ a >< span class = "sd" > symbol: Raw symbol name.</ span >
< a id = "__codelineno-0-36" name = "__codelineno-0-36" ></ a >
< a id = "__codelineno-0-37" name = "__codelineno-0-37" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-38" name = "__codelineno-0-38" ></ a >< span class = "sd" > Normalized symbol string.</ span >
< a id = "__codelineno-0-39" name = "__codelineno-0-39" ></ a >
< a id = "__codelineno-0-40" name = "__codelineno-0-40" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-41" name = "__codelineno-0-41" ></ a >< span class = "sd" > ValueError: If the symbol is empty after normalization.</ span >
< a id = "__codelineno-0-42" name = "__codelineno-0-42" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-43" name = "__codelineno-0-43" ></ a > < span class = "n" > normalized</ span > < span class = "o" > =</ span > < span class = "n" > symbol</ span >< span class = "o" > .</ span >< span class = "n" > strip</ span >< span class = "p" > ()</ span >
< a id = "__codelineno-0-44" name = "__codelineno-0-44" ></ a > < span class = "k" > if</ span > < span class = "ow" > not</ span > < span class = "n" > normalized</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-45" name = "__codelineno-0-45" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "s2" > " Symbol must not be empty." </ span >
< a id = "__codelineno-0-46" name = "__codelineno-0-46" ></ 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-47" name = "__codelineno-0-47" ></ a > < span class = "k" > return</ span > < span class = "n" > normalized</ span >
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.converters.normalize_symbols" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > normalize_symbols</ span >
< a href = "#mt5cli.converters.normalize_symbols" 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_symbols</ 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 > < 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 >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Normalize a sequence of broker symbol names.</ 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 > 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 > Raw symbol names.</ 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 = "list" > list</ span > [< span title = "str" > str</ span > ]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > List of normalized, de-duplicated symbols preserving first-seen order.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/converters.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-50" > 50</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-51" > 51</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-52" > 52</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-53" > 53</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-54" > 54</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-55" > 55</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-56" > 56</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-57" > 57</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-58" > 58</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-59" > 59</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-60" > 60</ a ></ 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 ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-50" name = "__codelineno-0-50" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > normalize_symbols</ span >< span class = "p" > (</ span >< 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 = "nb" > list</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-51" name = "__codelineno-0-51" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Normalize a sequence of broker symbol names.</ span >
< a id = "__codelineno-0-52" name = "__codelineno-0-52" ></ a >
< a id = "__codelineno-0-53" name = "__codelineno-0-53" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-54" name = "__codelineno-0-54" ></ a >< span class = "sd" > symbols: Raw symbol names.</ span >
< a id = "__codelineno-0-55" name = "__codelineno-0-55" ></ a >
< a id = "__codelineno-0-56" name = "__codelineno-0-56" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-57" name = "__codelineno-0-57" ></ a >< span class = "sd" > List of normalized, de-duplicated symbols preserving first-seen order.</ span >
< a id = "__codelineno-0-58" name = "__codelineno-0-58" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-59" name = "__codelineno-0-59" ></ a > < span class = "n" > seen</ span >< span class = "p" > :</ span > < span class = "nb" > set</ span >< span class = "p" > [</ span >< span class = "nb" > str</ span >< span class = "p" > ]</ span > < span class = "o" > =</ span > < span class = "nb" > set</ span >< span class = "p" > ()</ span >
< a id = "__codelineno-0-60" name = "__codelineno-0-60" ></ a > < span class = "n" > resolved</ span >< span class = "p" > :</ 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 = "p" > []</ span >
< a id = "__codelineno-0-61" name = "__codelineno-0-61" ></ a > < span class = "k" > for</ span > < span class = "n" > symbol</ span > < span class = "ow" > in</ span > < span class = "n" > symbols</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-62" name = "__codelineno-0-62" ></ a > < span class = "n" > normalized</ span > < span class = "o" > =</ span > < span class = "n" > normalize_symbol</ span >< span class = "p" > (</ span >< span class = "n" > symbol</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-63" name = "__codelineno-0-63" ></ a > < span class = "k" > if</ span > < span class = "n" > normalized</ span > < span class = "ow" > not</ span > < span class = "ow" > in</ span > < span class = "n" > seen</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-64" name = "__codelineno-0-64" ></ a > < span class = "n" > seen</ span >< span class = "o" > .</ span >< span class = "n" > add</ span >< span class = "p" > (</ span >< span class = "n" > normalized</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-65" name = "__codelineno-0-65" ></ a > < span class = "n" > resolved</ span >< span class = "o" > .</ span >< span class = "n" > append</ span >< span class = "p" > (</ span >< span class = "n" > normalized</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-66" name = "__codelineno-0-66" ></ a > < span class = "k" > return</ span > < span class = "n" > resolved</ span >
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.converters.parse_date_range" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > parse_date_range</ span >
< a href = "#mt5cli.converters.parse_date_range" 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" > parse_date_range</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" ></ a > < span class = "n" > date_from</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "datetime.datetime" > datetime</ span ></ span > < span class = "o" > |</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > ,</ span > < 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 = "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 = "tuple" > tuple</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "datetime.datetime" > datetime</ span ></ span >< span class = "p" > ,</ span > < span class = "n" >< span title = "datetime.datetime" > datetime</ span ></ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Parse and validate an inclusive UTC date range.</ 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 > date_from</ code >
</ td >
< td >
< code >< span title = "datetime.datetime" > datetime</ span > | < span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Range start as datetime or ISO 8601 string.</ p >
</ div >
</ td >
< td >
< em > required</ em >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > date_to</ code >
</ td >
< td >
< code >< span title = "datetime.datetime" > datetime</ span > | < span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Range end as datetime or ISO 8601 string.</ 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 = "tuple" > tuple</ span > [< span title = "datetime.datetime" > datetime</ span > , < span title = "datetime.datetime" > datetime</ span > ]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Tuple of UTC-aware < code > (start, end)</ code > datetimes.</ 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 > date_from</ code > is after < code > date_to</ code > .</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/converters.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-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 >
< span class = "normal" >< a href = "#__codelineno-0-90" > 90</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-91" > 91</ a ></ 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 ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-85" name = "__codelineno-0-85" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > parse_date_range</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-86" name = "__codelineno-0-86" ></ a > < span class = "n" > date_from</ span >< span class = "p" > :</ span > < span class = "n" > datetime</ span > < span class = "o" > |</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-87" name = "__codelineno-0-87" ></ a > < span class = "n" > date_to</ span >< span class = "p" > :</ span > < span class = "n" > datetime</ span > < span class = "o" > |</ span > < span class = "nb" > str</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-88" name = "__codelineno-0-88" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > tuple</ span >< span class = "p" > [</ span >< span class = "n" > datetime</ span >< span class = "p" > ,</ span > < span class = "n" > datetime</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-89" name = "__codelineno-0-89" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Parse and validate an inclusive UTC date range.</ span >
< a id = "__codelineno-0-90" name = "__codelineno-0-90" ></ a >
< a id = "__codelineno-0-91" name = "__codelineno-0-91" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-92" name = "__codelineno-0-92" ></ a >< span class = "sd" > date_from: Range start as datetime or ISO 8601 string.</ span >
< a id = "__codelineno-0-93" name = "__codelineno-0-93" ></ a >< span class = "sd" > date_to: Range end as datetime or ISO 8601 string.</ span >
< a id = "__codelineno-0-94" name = "__codelineno-0-94" ></ a >
< a id = "__codelineno-0-95" name = "__codelineno-0-95" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-96" name = "__codelineno-0-96" ></ a >< span class = "sd" > Tuple of UTC-aware ``(start, end)`` datetimes.</ span >
< a id = "__codelineno-0-97" name = "__codelineno-0-97" ></ a >
< a id = "__codelineno-0-98" name = "__codelineno-0-98" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-99" name = "__codelineno-0-99" ></ a >< span class = "sd" > ValueError: If ``date_from`` is after ``date_to``.</ span >
< a id = "__codelineno-0-100" name = "__codelineno-0-100" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-101" name = "__codelineno-0-101" ></ a > < span class = "n" > start</ span > < span class = "o" > =</ span > < span class = "n" > ensure_utc</ span >< span class = "p" > (</ span >< span class = "n" > date_from</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-102" name = "__codelineno-0-102" ></ a > < span class = "n" > end</ span > < span class = "o" > =</ span > < span class = "n" > ensure_utc</ span >< span class = "p" > (</ span >< span class = "n" > date_to</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-103" name = "__codelineno-0-103" ></ a > < span class = "k" > if</ span > < span class = "n" > start</ span > < span class = "o" > > </ span > < span class = "n" > end</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-104" name = "__codelineno-0-104" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-105" name = "__codelineno-0-105" ></ a > < span class = "sa" > f</ span >< span class = "s2" > " date_from (</ span >< span class = "si" > {</ span >< span class = "n" > start</ span >< span class = "o" > .</ span >< span class = "n" > isoformat</ span >< span class = "p" > ()</ span >< span class = "si" > }</ span >< span class = "s2" > ) must not be after " </ span >
< a id = "__codelineno-0-106" name = "__codelineno-0-106" ></ a > < span class = "sa" > f</ span >< span class = "s2" > " date_to (</ span >< span class = "si" > {</ span >< span class = "n" > end</ span >< span class = "o" > .</ span >< span class = "n" > isoformat</ span >< span class = "p" > ()</ span >< span class = "si" > }</ span >< span class = "s2" > )." </ span >
< a id = "__codelineno-0-107" name = "__codelineno-0-107" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-108" name = "__codelineno-0-108" ></ 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-109" name = "__codelineno-0-109" ></ a > < span class = "k" > return</ span > < span class = "n" > start</ span >< span class = "p" > ,</ span > < span class = "n" > end</ span >
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.converters.parse_datetime" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > parse_datetime</ span >
< a href = "#mt5cli.converters.parse_datetime" 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" > parse_datetime</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "str" > str</ span ></ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "datetime.datetime" > datetime</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Parse an ISO 8601 datetime string to a timezone-aware datetime.</ 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 > value</ code >
</ td >
< td >
< code >< span title = "str" > str</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > ISO 8601 datetime string (e.g., '2024-01-01' or
'2024-01-01T12:00:00+00:00').</ 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 = "datetime.datetime" > datetime</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Parsed datetime with UTC timezone if no timezone is specified.</ 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 the string cannot be parsed.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/utils.py</ code ></ summary >
2026-06-26 03:08:57 +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-350" > 350</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-351" > 351</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-352" > 352</ a ></ span >
2026-06-14 17:47:52 +00:00
< span class = "normal" >< a href = "#__codelineno-0-353" > 353</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-354" > 354</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-355" > 355</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-356" > 356</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-357" > 357</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-358" > 358</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-359" > 359</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-360" > 360</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-361" > 361</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-362" > 362</ a ></ span >
2026-06-25 05:04:06 +00:00
< span class = "normal" >< a href = "#__codelineno-0-363" > 363</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-364" > 364</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-365" > 365</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-366" > 366</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-367" > 367</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-368" > 368</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-369" > 369</ a ></ span >
2026-06-26 03:08:57 +00:00
< span class = "normal" >< a href = "#__codelineno-0-370" > 370</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-350" name = "__codelineno-0-350" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > parse_datetime</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > :</ span > < span class = "nb" > str</ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" > datetime</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-351" name = "__codelineno-0-351" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Parse an ISO 8601 datetime string to a timezone-aware datetime.</ span >
< a id = "__codelineno-0-352" name = "__codelineno-0-352" ></ a >
< a id = "__codelineno-0-353" name = "__codelineno-0-353" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-354" name = "__codelineno-0-354" ></ a >< span class = "sd" > value: ISO 8601 datetime string (e.g., ' 2024-01-01' or</ span >
< a id = "__codelineno-0-355" name = "__codelineno-0-355" ></ a >< span class = "sd" > ' 2024-01-01T12:00:00+00:00' ).</ span >
< a id = "__codelineno-0-356" name = "__codelineno-0-356" ></ a >
< a id = "__codelineno-0-357" name = "__codelineno-0-357" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-358" name = "__codelineno-0-358" ></ a >< span class = "sd" > Parsed datetime with UTC timezone if no timezone is specified.</ span >
< a id = "__codelineno-0-359" name = "__codelineno-0-359" ></ a >
< a id = "__codelineno-0-360" name = "__codelineno-0-360" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-361" name = "__codelineno-0-361" ></ a >< span class = "sd" > ValueError: If the string cannot be parsed.</ span >
< a id = "__codelineno-0-362" name = "__codelineno-0-362" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-363" name = "__codelineno-0-363" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-364" name = "__codelineno-0-364" ></ a > < span class = "n" > dt</ span > < span class = "o" > =</ span > < span class = "n" > datetime</ span >< span class = "o" > .</ span >< span class = "n" > fromisoformat</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-365" name = "__codelineno-0-365" ></ a > < span class = "k" > except</ span > < span class = "ne" > ValueError</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-366" name = "__codelineno-0-366" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "sa" > f</ span >< span class = "s2" > " Invalid datetime format: ' </ span >< span class = "si" > {</ span >< span class = "n" > value</ span >< span class = "si" > }</ span >< span class = "s2" > ' . Use ISO 8601 format." </ span >
< a id = "__codelineno-0-367" name = "__codelineno-0-367" ></ 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 = "kn" > from</ span >< span class = "w" > </ span >< span class = "kc" > None</ span >
< a id = "__codelineno-0-368" name = "__codelineno-0-368" ></ a > < span class = "k" > if</ span > < span class = "n" > dt</ span >< span class = "o" > .</ span >< span class = "n" > tzinfo</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-369" name = "__codelineno-0-369" ></ a > < span class = "n" > dt</ span > < span class = "o" > =</ span > < span class = "n" > dt</ span >< span class = "o" > .</ span >< span class = "n" > replace</ span >< span class = "p" > (</ span >< span class = "n" > tzinfo</ span >< span class = "o" > =</ span >< span class = "n" > UTC</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-370" name = "__codelineno-0-370" ></ a > < span class = "k" > return</ span > < span class = "n" > dt</ span >
2026-06-12 16:32:35 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.converters.parse_tick_flags" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > parse_tick_flags</ span >
< a href = "#mt5cli.converters.parse_tick_flags" 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" > parse_tick_flags</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "object" > object</ span ></ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "int" > int</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Parse tick flags string or integer value.</ 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 > value</ code >
</ td >
< td >
< code >< span title = "object" > object</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Tick flag name (ALL, INFO, TRADE, COPY_TICKS_*) or integer value.</ 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 = "int" > int</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Integer tick flag value compatible with MetaTrader 5 < code > COPY_TICKS_*</ 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 the flag is invalid.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/utils.py</ code ></ summary >
2026-06-26 03:08:57 +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-397" > 397</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-398" > 398</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-399" > 399</ a ></ span >
2026-06-14 17:47:52 +00:00
< span class = "normal" >< a href = "#__codelineno-0-400" > 400</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-401" > 401</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-402" > 402</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-403" > 403</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-404" > 404</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-405" > 405</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-406" > 406</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-407" > 407</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-408" > 408</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-409" > 409</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-410" > 410</ a ></ span >
2026-06-25 05:04:06 +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 >
2026-06-26 03:08:57 +00:00
< span class = "normal" >< a href = "#__codelineno-0-418" > 418</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-397" name = "__codelineno-0-397" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > parse_tick_flags</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > :</ span > < span class = "nb" > object</ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > int</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-398" name = "__codelineno-0-398" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Parse tick flags string or integer value.</ span >
< a id = "__codelineno-0-399" name = "__codelineno-0-399" ></ a >
< a id = "__codelineno-0-400" name = "__codelineno-0-400" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-401" name = "__codelineno-0-401" ></ a >< span class = "sd" > value: Tick flag name (ALL, INFO, TRADE, COPY_TICKS_*) or integer value.</ span >
< a id = "__codelineno-0-402" name = "__codelineno-0-402" ></ a >
< a id = "__codelineno-0-403" name = "__codelineno-0-403" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-404" name = "__codelineno-0-404" ></ a >< span class = "sd" > Integer tick flag value compatible with MetaTrader 5 ``COPY_TICKS_*``.</ span >
< a id = "__codelineno-0-405" name = "__codelineno-0-405" ></ a >
< a id = "__codelineno-0-406" name = "__codelineno-0-406" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-407" name = "__codelineno-0-407" ></ a >< span class = "sd" > ValueError: If the flag is invalid.</ span >
< a id = "__codelineno-0-408" name = "__codelineno-0-408" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-409" name = "__codelineno-0-409" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-410" name = "__codelineno-0-410" ></ a > < span class = "k" > return</ span > < span class = "n" > _parse_copy_ticks</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-411" name = "__codelineno-0-411" ></ a > < span class = "k" > except</ span > < span class = "ne" > ValueError</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-412" name = "__codelineno-0-412" ></ a > < span class = "n" > display</ span > < span class = "o" > =</ span > < span class = "n" > value</ span > < 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" > str</ span >< span class = "p" > )</ span > < span class = "k" > else</ span > < span class = "nb" > repr</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-413" name = "__codelineno-0-413" ></ a > < span class = "n" > valid</ span > < span class = "o" > =</ span > < span class = "s2" > " , " </ span >< span class = "o" > .</ span >< span class = "n" > join</ span >< span class = "p" > (</ span >< span class = "n" > _TICK_FLAG_NAMES</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-414" name = "__codelineno-0-414" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-415" name = "__codelineno-0-415" ></ a > < span class = "sa" > f</ span >< span class = "s2" > " Invalid tick flags: ' </ span >< span class = "si" > {</ span >< span class = "n" > display</ span >< span class = "si" > }</ span >< span class = "s2" > ' . " </ span >
< a id = "__codelineno-0-416" name = "__codelineno-0-416" ></ a > < span class = "sa" > f</ span >< span class = "s2" > " Use one of: </ span >< span class = "si" > {</ span >< span class = "n" > valid</ span >< span class = "si" > }</ span >< span class = "s2" > , or a supported integer." </ span >
< a id = "__codelineno-0-417" name = "__codelineno-0-417" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-418" name = "__codelineno-0-418" ></ 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 = "kn" > from</ span >< span class = "w" > </ span >< span class = "kc" > None</ span >
2026-06-12 16:32:35 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.converters.parse_timeframe" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > parse_timeframe</ span >
< a href = "#mt5cli.converters.parse_timeframe" 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" > parse_timeframe</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > :</ span > < span class = "n" >< span title = "object" > object</ span ></ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "int" > int</ span ></ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Parse a timeframe string or integer value.</ 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 > value</ code >
</ td >
< td >
< code >< span title = "object" > object</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Timeframe name (e.g., 'M1', 'H1', 'D1') or integer value.</ 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 = "int" > int</ span ></ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Integer timeframe value.</ 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 the timeframe is invalid.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/utils.py</ code ></ summary >
2026-06-26 03:08:57 +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-373" > 373</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-374" > 374</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-375" > 375</ a ></ span >
2026-06-14 17:47:52 +00:00
< span class = "normal" >< a href = "#__codelineno-0-376" > 376</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-377" > 377</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-378" > 378</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-379" > 379</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-380" > 380</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-381" > 381</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-382" > 382</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-383" > 383</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-384" > 384</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-385" > 385</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-386" > 386</ a ></ span >
2026-06-25 05:04:06 +00:00
< span class = "normal" >< a href = "#__codelineno-0-387" > 387</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-388" > 388</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-389" > 389</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-390" > 390</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-391" > 391</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-392" > 392</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-393" > 393</ a ></ span >
2026-06-26 03:08:57 +00:00
< span class = "normal" >< a href = "#__codelineno-0-394" > 394</ a ></ span ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-373" name = "__codelineno-0-373" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > parse_timeframe</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > :</ span > < span class = "nb" > object</ span >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > int</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-374" name = "__codelineno-0-374" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Parse a timeframe string or integer value.</ span >
< a id = "__codelineno-0-375" name = "__codelineno-0-375" ></ a >
< a id = "__codelineno-0-376" name = "__codelineno-0-376" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-377" name = "__codelineno-0-377" ></ a >< span class = "sd" > value: Timeframe name (e.g., ' M1' , ' H1' , ' D1' ) or integer value.</ span >
< a id = "__codelineno-0-378" name = "__codelineno-0-378" ></ a >
< a id = "__codelineno-0-379" name = "__codelineno-0-379" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-380" name = "__codelineno-0-380" ></ a >< span class = "sd" > Integer timeframe value.</ span >
< a id = "__codelineno-0-381" name = "__codelineno-0-381" ></ a >
< a id = "__codelineno-0-382" name = "__codelineno-0-382" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-383" name = "__codelineno-0-383" ></ a >< span class = "sd" > ValueError: If the timeframe is invalid.</ span >
< a id = "__codelineno-0-384" name = "__codelineno-0-384" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-385" name = "__codelineno-0-385" ></ a > < span class = "k" > try</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-386" name = "__codelineno-0-386" ></ a > < span class = "k" > return</ span > < span class = "n" > _parse_timeframe</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-387" name = "__codelineno-0-387" ></ a > < span class = "k" > except</ span > < span class = "ne" > ValueError</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-388" name = "__codelineno-0-388" ></ a > < span class = "n" > display</ span > < span class = "o" > =</ span > < span class = "n" > value</ span > < 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" > str</ span >< span class = "p" > )</ span > < span class = "k" > else</ span > < span class = "nb" > repr</ span >< span class = "p" > (</ span >< span class = "n" > value</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-389" name = "__codelineno-0-389" ></ a > < span class = "n" > valid</ span > < span class = "o" > =</ span > < span class = "s2" > " , " </ span >< span class = "o" > .</ span >< span class = "n" > join</ span >< span class = "p" > (</ span >< span class = "n" > TIMEFRAME_NAMES</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-390" name = "__codelineno-0-390" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "p" > (</ span >
< a id = "__codelineno-0-391" name = "__codelineno-0-391" ></ a > < span class = "sa" > f</ span >< span class = "s2" > " Invalid timeframe: ' </ span >< span class = "si" > {</ span >< span class = "n" > display</ span >< span class = "si" > }</ span >< span class = "s2" > ' . " </ span >
< a id = "__codelineno-0-392" name = "__codelineno-0-392" ></ a > < span class = "sa" > f</ span >< span class = "s2" > " Use one of: </ span >< span class = "si" > {</ span >< span class = "n" > valid</ span >< span class = "si" > }</ span >< span class = "s2" > , or a supported integer." </ span >
< a id = "__codelineno-0-393" name = "__codelineno-0-393" ></ a > < span class = "p" > )</ span >
< a id = "__codelineno-0-394" name = "__codelineno-0-394" ></ 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 = "kn" > from</ span >< span class = "w" > </ span >< span class = "kc" > None</ span >
2026-06-12 16:32:35 +00:00
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
< div class = "doc doc-object doc-function" >
< h3 id = "mt5cli.converters.recent_window" class = "doc doc-heading" >
< span class = "doc doc-object-name doc-function-name" > recent_window</ span >
< a href = "#mt5cli.converters.recent_window" 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" > recent_window</ 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" > hours</ 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-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" ></ a > < span class = "n" > seconds</ 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-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" ></ 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 = "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 = "p" > )</ span > < span class = "o" > -> </ span > < span class = "n" >< span title = "tuple" > tuple</ span ></ span >< span class = "p" > [</ span >< span class = "n" >< span title = "datetime.datetime" > datetime</ span ></ span >< span class = "p" > ,</ span > < span class = "n" >< span title = "datetime.datetime" > datetime</ span ></ span >< span class = "p" > ]</ span >
</ code ></ pre ></ div >
< div class = "doc doc-contents " >
< p > Build a trailing UTC window ending at < code > date_to</ code > or now.</ p >
< p > Exactly one of < code > hours</ code > or < code > seconds</ code > must be provided.</ 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 > hours</ code >
</ td >
< td >
< code >< span title = "float" > float</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Trailing window length in hours.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > seconds</ code >
</ td >
< td >
< code >< span title = "float" > float</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Trailing window length in seconds.</ p >
</ div >
</ td >
< td >
< code > None</ code >
</ td >
</ tr >
< tr class = "doc-section-item" >
< td >
< code > date_to</ code >
</ td >
< td >
< code >< span title = "datetime.datetime" > datetime</ span > | < span title = "str" > str</ span > | None</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Window end. Defaults to current UTC time.</ 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 = "tuple" > tuple</ span > [< span title = "datetime.datetime" > datetime</ span > , < span title = "datetime.datetime" > datetime</ span > ]</ code >
</ td >
< td >
< div class = "doc-md-description" >
< p > Tuple of UTC-aware < code > (start, end)</ code > datetimes.</ 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 neither or both window lengths are provided, or if a
length is not positive.</ p >
</ div >
</ td >
</ tr >
</ tbody >
</ table >
< details class = "mkdocstrings-source" >
< summary > Source code in < code > mt5cli/converters.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-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 >
< span class = "normal" >< a href = "#__codelineno-0-131" > 131</ a ></ span >
< span class = "normal" >< a href = "#__codelineno-0-132" > 132</ a ></ 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 ></ pre ></ div ></ td >< td class = "code" >< div >< pre >< span ></ span >< code >< a id = "__codelineno-0-112" name = "__codelineno-0-112" ></ a >< span class = "k" > def</ span >< span class = "w" > </ span >< span class = "nf" > recent_window</ span >< span class = "p" > (</ span >
< a id = "__codelineno-0-113" name = "__codelineno-0-113" ></ a > < span class = "o" > *</ span >< span class = "p" > ,</ span >
< a id = "__codelineno-0-114" name = "__codelineno-0-114" ></ a > < span class = "n" > hours</ 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-115" name = "__codelineno-0-115" ></ a > < span class = "n" > seconds</ 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-116" name = "__codelineno-0-116" ></ a > < span class = "n" > date_to</ span >< span class = "p" > :</ span > < span class = "n" > datetime</ 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-117" name = "__codelineno-0-117" ></ a >< span class = "p" > )</ span > < span class = "o" > -> </ span > < span class = "nb" > tuple</ span >< span class = "p" > [</ span >< span class = "n" > datetime</ span >< span class = "p" > ,</ span > < span class = "n" > datetime</ span >< span class = "p" > ]:</ span >
< a id = "__codelineno-0-118" name = "__codelineno-0-118" ></ a >< span class = "w" > </ span >< span class = "sd" > """ Build a trailing UTC window ending at ``date_to`` or now.</ span >
< a id = "__codelineno-0-119" name = "__codelineno-0-119" ></ a >
< a id = "__codelineno-0-120" name = "__codelineno-0-120" ></ a >< span class = "sd" > Exactly one of ``hours`` or ``seconds`` must be provided.</ span >
< a id = "__codelineno-0-121" name = "__codelineno-0-121" ></ a >
< a id = "__codelineno-0-122" name = "__codelineno-0-122" ></ a >< span class = "sd" > Args:</ span >
< a id = "__codelineno-0-123" name = "__codelineno-0-123" ></ a >< span class = "sd" > hours: Trailing window length in hours.</ span >
< a id = "__codelineno-0-124" name = "__codelineno-0-124" ></ a >< span class = "sd" > seconds: Trailing window length in seconds.</ span >
< a id = "__codelineno-0-125" name = "__codelineno-0-125" ></ a >< span class = "sd" > date_to: Window end. Defaults to current UTC time.</ span >
< a id = "__codelineno-0-126" name = "__codelineno-0-126" ></ a >
< a id = "__codelineno-0-127" name = "__codelineno-0-127" ></ a >< span class = "sd" > Returns:</ span >
< a id = "__codelineno-0-128" name = "__codelineno-0-128" ></ a >< span class = "sd" > Tuple of UTC-aware ``(start, end)`` datetimes.</ span >
< a id = "__codelineno-0-129" name = "__codelineno-0-129" ></ a >
< a id = "__codelineno-0-130" name = "__codelineno-0-130" ></ a >< span class = "sd" > Raises:</ span >
< a id = "__codelineno-0-131" name = "__codelineno-0-131" ></ a >< span class = "sd" > ValueError: If neither or both window lengths are provided, or if a</ span >
< a id = "__codelineno-0-132" name = "__codelineno-0-132" ></ a >< span class = "sd" > length is not positive.</ span >
< a id = "__codelineno-0-133" name = "__codelineno-0-133" ></ a >< span class = "sd" > """ </ span >
< a id = "__codelineno-0-134" name = "__codelineno-0-134" ></ a > < span class = "k" > if</ span > < span class = "p" > (</ span >< span class = "n" > hours</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > )</ span > < span class = "o" > ==</ span > < span class = "p" > (</ span >< span class = "n" > seconds</ span > < span class = "ow" > is</ span > < span class = "kc" > None</ span >< span class = "p" > ):</ span >
< a id = "__codelineno-0-135" name = "__codelineno-0-135" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "s2" > " Provide exactly one of hours or seconds." </ span >
< a id = "__codelineno-0-136" name = "__codelineno-0-136" ></ 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-137" name = "__codelineno-0-137" ></ a > < span class = "k" > if</ span > < span class = "n" > hours</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-138" name = "__codelineno-0-138" ></ a > < span class = "n" > length</ 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-139" name = "__codelineno-0-139" ></ a > < span class = "k" > else</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-140" name = "__codelineno-0-140" ></ a > < span class = "n" > length</ span > < span class = "o" > =</ span > < span class = "n" > timedelta</ span >< span class = "p" > (</ span >< span class = "n" > seconds</ span >< span class = "o" > =</ span >< span class = "n" > seconds</ span > < span class = "k" > if</ span > < span class = "n" > seconds</ span > < span class = "ow" > is</ span > < span class = "ow" > not</ span > < span class = "kc" > None</ span > < span class = "k" > else</ span > < span class = "mi" > 0</ span >< span class = "p" > )</ span >
< a id = "__codelineno-0-141" name = "__codelineno-0-141" ></ a > < span class = "k" > if</ span > < span class = "n" > length</ span >< span class = "o" > .</ span >< span class = "n" > total_seconds</ span >< span class = "p" > ()</ span > < span class = "o" > < =</ span > < span class = "mi" > 0</ span >< span class = "p" > :</ span >
< a id = "__codelineno-0-142" name = "__codelineno-0-142" ></ a > < span class = "n" > msg</ span > < span class = "o" > =</ span > < span class = "s2" > " Window length must be positive." </ span >
< a id = "__codelineno-0-143" name = "__codelineno-0-143" ></ 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-144" name = "__codelineno-0-144" ></ a > < span class = "n" > end</ span > < span class = "o" > =</ span > < span class = "n" > ensure_utc</ span >< span class = "p" > (</ span >< span class = "n" > date_to</ span >< span class = "p" > )</ 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-145" name = "__codelineno-0-145" ></ a > < span class = "k" > return</ span > < span class = "n" > end</ span > < span class = "o" > -</ span > < span class = "n" > length</ span >< span class = "p" > ,</ span > < span class = "n" > end</ span >
</ code ></ pre ></ div ></ td ></ tr ></ table ></ div >
</ details >
</ div >
</ div >
</ div >
</ div >
</ div ></ 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 >