This commit is contained in:
dceoy
2026-07-04 05:20:25 +00:00
parent c3b527fe5e
commit f11eded3c1
11 changed files with 8734 additions and 7812 deletions
+1559 -1302
View File
File diff suppressed because it is too large Load Diff
+90 -90
View File
@@ -250,9 +250,7 @@ responsibility of downstream applications.</p>
<details class="mkdocstrings-source">
<summary>Source code in <code>mt5cli/sdk.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-427">427</a></span>
<span class="normal"><a href="#__codelineno-0-428">428</a></span>
<span class="normal"><a href="#__codelineno-0-429">429</a></span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-429">429</a></span>
<span class="normal"><a href="#__codelineno-0-430">430</a></span>
<span class="normal"><a href="#__codelineno-0-431">431</a></span>
<span class="normal"><a href="#__codelineno-0-432">432</a></span>
@@ -285,42 +283,44 @@ responsibility of downstream applications.</p>
<span class="normal"><a href="#__codelineno-0-459">459</a></span>
<span class="normal"><a href="#__codelineno-0-460">460</a></span>
<span class="normal"><a href="#__codelineno-0-461">461</a></span>
<span class="normal"><a href="#__codelineno-0-462">462</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-427" name="__codelineno-0-427"></a><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span>
<a id="__codelineno-0-428" name="__codelineno-0-428"></a> <span class="bp">self</span><span class="p">,</span>
<a id="__codelineno-0-429" name="__codelineno-0-429"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-430" name="__codelineno-0-430"></a> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-431" name="__codelineno-0-431"></a> <span class="n">login</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-432" name="__codelineno-0-432"></a> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-433" name="__codelineno-0-433"></a> <span class="n">server</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-434" name="__codelineno-0-434"></a> <span class="n">timeout</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-435" name="__codelineno-0-435"></a> <span class="n">retry_count</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
<a id="__codelineno-0-436" name="__codelineno-0-436"></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-437" name="__codelineno-0-437"></a> <span class="n">client</span><span class="p">:</span> <span class="n">Mt5DataClient</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-438" name="__codelineno-0-438"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-439" name="__codelineno-0-439"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Initialize the SDK client.</span>
<a id="__codelineno-0-440" name="__codelineno-0-440"></a>
<a id="__codelineno-0-441" name="__codelineno-0-441"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-442" name="__codelineno-0-442"></a><span class="sd"> path: Path to MetaTrader5 terminal EXE file.</span>
<a id="__codelineno-0-443" name="__codelineno-0-443"></a><span class="sd"> login: Trading account login.</span>
<a id="__codelineno-0-444" name="__codelineno-0-444"></a><span class="sd"> password: Trading account password.</span>
<a id="__codelineno-0-445" name="__codelineno-0-445"></a><span class="sd"> server: Trading server name.</span>
<a id="__codelineno-0-446" name="__codelineno-0-446"></a><span class="sd"> timeout: Connection timeout in milliseconds.</span>
<a id="__codelineno-0-447" name="__codelineno-0-447"></a><span class="sd"> retry_count: Number of MT5 initialization retries for sessions</span>
<a id="__codelineno-0-448" name="__codelineno-0-448"></a><span class="sd"> opened by this client.</span>
<a id="__codelineno-0-449" name="__codelineno-0-449"></a><span class="sd"> config: Optional pre-built ``Mt5Config`` (overrides other args).</span>
<a id="__codelineno-0-450" name="__codelineno-0-450"></a><span class="sd"> client: Optional already-connected ``Mt5DataClient``. Injected</span>
<a id="__codelineno-0-451" name="__codelineno-0-451"></a><span class="sd"> clients are reused as-is and are not initialized or shut down.</span>
<a id="__codelineno-0-452" name="__codelineno-0-452"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-453" name="__codelineno-0-453"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-454" name="__codelineno-0-454"></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
<a id="__codelineno-0-455" name="__codelineno-0-455"></a> <span class="n">login</span><span class="o">=</span><span class="n">login</span><span class="p">,</span>
<a id="__codelineno-0-456" name="__codelineno-0-456"></a> <span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">,</span>
<a id="__codelineno-0-457" name="__codelineno-0-457"></a> <span class="n">server</span><span class="o">=</span><span class="n">server</span><span class="p">,</span>
<a id="__codelineno-0-458" name="__codelineno-0-458"></a> <span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
<a id="__codelineno-0-459" name="__codelineno-0-459"></a> <span class="p">)</span>
<a id="__codelineno-0-460" name="__codelineno-0-460"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retry_count</span> <span class="o">=</span> <span class="n">retry_count</span>
<a id="__codelineno-0-461" name="__codelineno-0-461"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="n">client</span>
<a id="__codelineno-0-462" name="__codelineno-0-462"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_owns_client</span> <span class="o">=</span> <span class="n">client</span> <span class="ow">is</span> <span class="kc">None</span>
<span class="normal"><a href="#__codelineno-0-462">462</a></span>
<span class="normal"><a href="#__codelineno-0-463">463</a></span>
<span class="normal"><a href="#__codelineno-0-464">464</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-429" name="__codelineno-0-429"></a><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span>
<a id="__codelineno-0-430" name="__codelineno-0-430"></a> <span class="bp">self</span><span class="p">,</span>
<a id="__codelineno-0-431" name="__codelineno-0-431"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-432" name="__codelineno-0-432"></a> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-433" name="__codelineno-0-433"></a> <span class="n">login</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-434" name="__codelineno-0-434"></a> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-435" name="__codelineno-0-435"></a> <span class="n">server</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-436" name="__codelineno-0-436"></a> <span class="n">timeout</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-437" name="__codelineno-0-437"></a> <span class="n">retry_count</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">3</span><span class="p">,</span>
<a id="__codelineno-0-438" name="__codelineno-0-438"></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-439" name="__codelineno-0-439"></a> <span class="n">client</span><span class="p">:</span> <span class="n">Mt5DataClient</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-440" name="__codelineno-0-440"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-441" name="__codelineno-0-441"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Initialize the SDK client.</span>
<a id="__codelineno-0-442" name="__codelineno-0-442"></a>
<a id="__codelineno-0-443" name="__codelineno-0-443"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-444" name="__codelineno-0-444"></a><span class="sd"> path: Path to MetaTrader5 terminal EXE file.</span>
<a id="__codelineno-0-445" name="__codelineno-0-445"></a><span class="sd"> login: Trading account login.</span>
<a id="__codelineno-0-446" name="__codelineno-0-446"></a><span class="sd"> password: Trading account password.</span>
<a id="__codelineno-0-447" name="__codelineno-0-447"></a><span class="sd"> server: Trading server name.</span>
<a id="__codelineno-0-448" name="__codelineno-0-448"></a><span class="sd"> timeout: Connection timeout in milliseconds.</span>
<a id="__codelineno-0-449" name="__codelineno-0-449"></a><span class="sd"> retry_count: Number of MT5 initialization retries for sessions</span>
<a id="__codelineno-0-450" name="__codelineno-0-450"></a><span class="sd"> opened by this client.</span>
<a id="__codelineno-0-451" name="__codelineno-0-451"></a><span class="sd"> config: Optional pre-built ``Mt5Config`` (overrides other args).</span>
<a id="__codelineno-0-452" name="__codelineno-0-452"></a><span class="sd"> client: Optional already-connected ``Mt5DataClient``. Injected</span>
<a id="__codelineno-0-453" name="__codelineno-0-453"></a><span class="sd"> clients are reused as-is and are not initialized or shut down.</span>
<a id="__codelineno-0-454" name="__codelineno-0-454"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-455" name="__codelineno-0-455"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_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-456" name="__codelineno-0-456"></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
<a id="__codelineno-0-457" name="__codelineno-0-457"></a> <span class="n">login</span><span class="o">=</span><span class="n">login</span><span class="p">,</span>
<a id="__codelineno-0-458" name="__codelineno-0-458"></a> <span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">,</span>
<a id="__codelineno-0-459" name="__codelineno-0-459"></a> <span class="n">server</span><span class="o">=</span><span class="n">server</span><span class="p">,</span>
<a id="__codelineno-0-460" name="__codelineno-0-460"></a> <span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
<a id="__codelineno-0-461" name="__codelineno-0-461"></a> <span class="p">)</span>
<a id="__codelineno-0-462" name="__codelineno-0-462"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retry_count</span> <span class="o">=</span> <span class="n">retry_count</span>
<a id="__codelineno-0-463" name="__codelineno-0-463"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="n">client</span>
<a id="__codelineno-0-464" name="__codelineno-0-464"></a> <span class="bp">self</span><span class="o">.</span><span class="n">_owns_client</span> <span class="o">=</span> <span class="n">client</span> <span class="ow">is</span> <span class="kc">None</span>
</code></pre></div></td></tr></table></div>
</details>
@@ -797,9 +797,7 @@ to <code>path</code>, <code>login</code>, <code>password</code>, and <code>serve
<details class="mkdocstrings-source">
<summary>Source code in <code>mt5cli/sdk.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-319">319</a></span>
<span class="normal"><a href="#__codelineno-0-320">320</a></span>
<span class="normal"><a href="#__codelineno-0-321">321</a></span>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-321">321</a></span>
<span class="normal"><a href="#__codelineno-0-322">322</a></span>
<span class="normal"><a href="#__codelineno-0-323">323</a></span>
<span class="normal"><a href="#__codelineno-0-324">324</a></span>
@@ -844,54 +842,56 @@ to <code>path</code>, <code>login</code>, <code>password</code>, and <code>serve
<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></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-319" name="__codelineno-0-319"></a><span class="k">def</span><span class="w"> </span><span class="nf">build_config</span><span class="p">(</span>
<a id="__codelineno-0-320" name="__codelineno-0-320"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-321" name="__codelineno-0-321"></a> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-322" name="__codelineno-0-322"></a> <span class="n">login</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-324" name="__codelineno-0-324"></a> <span class="n">server</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-325" name="__codelineno-0-325"></a> <span class="n">timeout</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-326" name="__codelineno-0-326"></a> <span class="n">allow_whole_dollar_env</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-327" name="__codelineno-0-327"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mt5Config</span><span class="p">:</span>
<a id="__codelineno-0-328" name="__codelineno-0-328"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build an ``Mt5Config`` from optional connection parameters.</span>
<a id="__codelineno-0-329" name="__codelineno-0-329"></a>
<a id="__codelineno-0-330" name="__codelineno-0-330"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-331" name="__codelineno-0-331"></a><span class="sd"> path: Optional terminal executable path.</span>
<a id="__codelineno-0-332" name="__codelineno-0-332"></a><span class="sd"> login: Optional trading account login. Integers are preserved. String</span>
<a id="__codelineno-0-333" name="__codelineno-0-333"></a><span class="sd"> values are coerced: empty or whitespace-only strings become</span>
<a id="__codelineno-0-334" name="__codelineno-0-334"></a><span class="sd"> ``None``; numeric strings such as ``&quot;12345&quot;`` are converted to</span>
<a id="__codelineno-0-335" name="__codelineno-0-335"></a><span class="sd"> ``int``; non-numeric strings raise ``ValueError``. When</span>
<a id="__codelineno-0-336" name="__codelineno-0-336"></a><span class="sd"> ``allow_whole_dollar_env=True``, ``$ENV_NAME`` and</span>
<a id="__codelineno-0-337" name="__codelineno-0-337"></a><span class="sd"> ``${ENV_NAME}`` placeholders are expanded before coercion.</span>
<a id="__codelineno-0-338" name="__codelineno-0-338"></a><span class="sd"> password: Optional trading account password.</span>
<a id="__codelineno-0-339" name="__codelineno-0-339"></a><span class="sd"> server: Optional trading server name.</span>
<a id="__codelineno-0-340" name="__codelineno-0-340"></a><span class="sd"> timeout: Optional connection timeout in milliseconds.</span>
<a id="__codelineno-0-341" name="__codelineno-0-341"></a><span class="sd"> allow_whole_dollar_env: When ``True``, string parameters that are</span>
<a id="__codelineno-0-342" name="__codelineno-0-342"></a><span class="sd"> exactly ``$ENV_NAME`` are expanded from the environment. Applies</span>
<a id="__codelineno-0-343" name="__codelineno-0-343"></a><span class="sd"> to ``path``, ``login``, ``password``, and ``server``. Default</span>
<a id="__codelineno-0-344" name="__codelineno-0-344"></a><span class="sd"> ``False`` preserves existing behavior.</span>
<a id="__codelineno-0-345" name="__codelineno-0-345"></a>
<a id="__codelineno-0-346" name="__codelineno-0-346"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-347" name="__codelineno-0-347"></a><span class="sd"> Configured ``Mt5Config`` instance.</span>
<a id="__codelineno-0-348" name="__codelineno-0-348"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-349" name="__codelineno-0-349"></a> <span class="k">if</span> <span class="n">allow_whole_dollar_env</span><span class="p">:</span>
<a id="__codelineno-0-350" name="__codelineno-0-350"></a> <span class="k">if</span> <span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-351" name="__codelineno-0-351"></a> <span class="n">path</span> <span class="o">=</span> <span class="n">substitute_env_placeholders</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">allow_whole_dollar_env</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<a id="__codelineno-0-352" name="__codelineno-0-352"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">login</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<a id="__codelineno-0-353" name="__codelineno-0-353"></a> <span class="n">login</span> <span class="o">=</span> <span class="n">substitute_env_placeholders</span><span class="p">(</span><span class="n">login</span><span class="p">,</span> <span class="n">allow_whole_dollar_env</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<a id="__codelineno-0-354" name="__codelineno-0-354"></a> <span class="k">if</span> <span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-355" name="__codelineno-0-355"></a> <span class="n">password</span> <span class="o">=</span> <span class="n">substitute_env_placeholders</span><span class="p">(</span>
<a id="__codelineno-0-356" name="__codelineno-0-356"></a> <span class="n">password</span><span class="p">,</span> <span class="n">allow_whole_dollar_env</span><span class="o">=</span><span class="kc">True</span>
<a id="__codelineno-0-357" name="__codelineno-0-357"></a> <span class="p">)</span>
<a id="__codelineno-0-358" name="__codelineno-0-358"></a> <span class="k">if</span> <span class="n">server</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-359" name="__codelineno-0-359"></a> <span class="n">server</span> <span class="o">=</span> <span class="n">substitute_env_placeholders</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">allow_whole_dollar_env</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<a id="__codelineno-0-360" name="__codelineno-0-360"></a> <span class="k">return</span> <span class="n">Mt5Config</span><span class="p">(</span>
<a id="__codelineno-0-361" name="__codelineno-0-361"></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
<a id="__codelineno-0-362" name="__codelineno-0-362"></a> <span class="n">login</span><span class="o">=</span><span class="n">_coerce_login</span><span class="p">(</span><span class="n">login</span><span class="p">),</span>
<a id="__codelineno-0-363" name="__codelineno-0-363"></a> <span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">,</span>
<a id="__codelineno-0-364" name="__codelineno-0-364"></a> <span class="n">server</span><span class="o">=</span><span class="n">server</span><span class="p">,</span>
<a id="__codelineno-0-365" name="__codelineno-0-365"></a> <span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
<a id="__codelineno-0-366" name="__codelineno-0-366"></a> <span class="p">)</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></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-321" name="__codelineno-0-321"></a><span class="k">def</span><span class="w"> </span><span class="nf">build_config</span><span class="p">(</span>
<a id="__codelineno-0-322" name="__codelineno-0-322"></a> <span class="o">*</span><span class="p">,</span>
<a id="__codelineno-0-323" name="__codelineno-0-323"></a> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-324" name="__codelineno-0-324"></a> <span class="n">login</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-325" name="__codelineno-0-325"></a> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-326" name="__codelineno-0-326"></a> <span class="n">server</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-327" name="__codelineno-0-327"></a> <span class="n">timeout</span><span class="p">:</span> <span class="nb">int</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<a id="__codelineno-0-328" name="__codelineno-0-328"></a> <span class="n">allow_whole_dollar_env</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<a id="__codelineno-0-329" name="__codelineno-0-329"></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Mt5Config</span><span class="p">:</span>
<a id="__codelineno-0-330" name="__codelineno-0-330"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Build an ``Mt5Config`` from optional connection parameters.</span>
<a id="__codelineno-0-331" name="__codelineno-0-331"></a>
<a id="__codelineno-0-332" name="__codelineno-0-332"></a><span class="sd"> Args:</span>
<a id="__codelineno-0-333" name="__codelineno-0-333"></a><span class="sd"> path: Optional terminal executable path.</span>
<a id="__codelineno-0-334" name="__codelineno-0-334"></a><span class="sd"> login: Optional trading account login. Integers are preserved. String</span>
<a id="__codelineno-0-335" name="__codelineno-0-335"></a><span class="sd"> values are coerced: empty or whitespace-only strings become</span>
<a id="__codelineno-0-336" name="__codelineno-0-336"></a><span class="sd"> ``None``; numeric strings such as ``&quot;12345&quot;`` are converted to</span>
<a id="__codelineno-0-337" name="__codelineno-0-337"></a><span class="sd"> ``int``; non-numeric strings raise ``ValueError``. When</span>
<a id="__codelineno-0-338" name="__codelineno-0-338"></a><span class="sd"> ``allow_whole_dollar_env=True``, ``$ENV_NAME`` and</span>
<a id="__codelineno-0-339" name="__codelineno-0-339"></a><span class="sd"> ``${ENV_NAME}`` placeholders are expanded before coercion.</span>
<a id="__codelineno-0-340" name="__codelineno-0-340"></a><span class="sd"> password: Optional trading account password.</span>
<a id="__codelineno-0-341" name="__codelineno-0-341"></a><span class="sd"> server: Optional trading server name.</span>
<a id="__codelineno-0-342" name="__codelineno-0-342"></a><span class="sd"> timeout: Optional connection timeout in milliseconds.</span>
<a id="__codelineno-0-343" name="__codelineno-0-343"></a><span class="sd"> allow_whole_dollar_env: When ``True``, string parameters that are</span>
<a id="__codelineno-0-344" name="__codelineno-0-344"></a><span class="sd"> exactly ``$ENV_NAME`` are expanded from the environment. Applies</span>
<a id="__codelineno-0-345" name="__codelineno-0-345"></a><span class="sd"> to ``path``, ``login``, ``password``, and ``server``. Default</span>
<a id="__codelineno-0-346" name="__codelineno-0-346"></a><span class="sd"> ``False`` preserves existing behavior.</span>
<a id="__codelineno-0-347" name="__codelineno-0-347"></a>
<a id="__codelineno-0-348" name="__codelineno-0-348"></a><span class="sd"> Returns:</span>
<a id="__codelineno-0-349" name="__codelineno-0-349"></a><span class="sd"> Configured ``Mt5Config`` instance.</span>
<a id="__codelineno-0-350" name="__codelineno-0-350"></a><span class="sd"> &quot;&quot;&quot;</span>
<a id="__codelineno-0-351" name="__codelineno-0-351"></a> <span class="k">if</span> <span class="n">allow_whole_dollar_env</span><span class="p">:</span>
<a id="__codelineno-0-352" name="__codelineno-0-352"></a> <span class="k">if</span> <span class="n">path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-353" name="__codelineno-0-353"></a> <span class="n">path</span> <span class="o">=</span> <span class="n">substitute_env_placeholders</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">allow_whole_dollar_env</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<a id="__codelineno-0-354" name="__codelineno-0-354"></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">login</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<a id="__codelineno-0-355" name="__codelineno-0-355"></a> <span class="n">login</span> <span class="o">=</span> <span class="n">substitute_env_placeholders</span><span class="p">(</span><span class="n">login</span><span class="p">,</span> <span class="n">allow_whole_dollar_env</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<a id="__codelineno-0-356" name="__codelineno-0-356"></a> <span class="k">if</span> <span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-357" name="__codelineno-0-357"></a> <span class="n">password</span> <span class="o">=</span> <span class="n">substitute_env_placeholders</span><span class="p">(</span>
<a id="__codelineno-0-358" name="__codelineno-0-358"></a> <span class="n">password</span><span class="p">,</span> <span class="n">allow_whole_dollar_env</span><span class="o">=</span><span class="kc">True</span>
<a id="__codelineno-0-359" name="__codelineno-0-359"></a> <span class="p">)</span>
<a id="__codelineno-0-360" name="__codelineno-0-360"></a> <span class="k">if</span> <span class="n">server</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-0-361" name="__codelineno-0-361"></a> <span class="n">server</span> <span class="o">=</span> <span class="n">substitute_env_placeholders</span><span class="p">(</span><span class="n">server</span><span class="p">,</span> <span class="n">allow_whole_dollar_env</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<a id="__codelineno-0-362" name="__codelineno-0-362"></a> <span class="k">return</span> <span class="n">Mt5Config</span><span class="p">(</span>
<a id="__codelineno-0-363" name="__codelineno-0-363"></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
<a id="__codelineno-0-364" name="__codelineno-0-364"></a> <span class="n">login</span><span class="o">=</span><span class="n">_coerce_login</span><span class="p">(</span><span class="n">login</span><span class="p">),</span>
<a id="__codelineno-0-365" name="__codelineno-0-365"></a> <span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">,</span>
<a id="__codelineno-0-366" name="__codelineno-0-366"></a> <span class="n">server</span><span class="o">=</span><span class="n">server</span><span class="p">,</span>
<a id="__codelineno-0-367" name="__codelineno-0-367"></a> <span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span>
<a id="__codelineno-0-368" name="__codelineno-0-368"></a> <span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
+2586 -2381
View File
File diff suppressed because it is too large Load Diff
+18 -1
View File
@@ -309,6 +309,10 @@ timestamp normalization in downstream apps.</p>
<td>One-shot date-range export into SQLite</td>
</tr>
<tr>
<td><code>report_rate_gaps</code></td>
<td>SQLite-only one-row-per-gap report for a rate table or compatibility view</td>
</tr>
<tr>
<td><code>update_history</code>, <code>update_history_with_config</code></td>
<td>Incremental append from <code>MAX(time)</code> cursors</td>
</tr>
@@ -392,6 +396,10 @@ strategy entries, exits, Kelly sizing, or signal logic.</p>
<td>Per-ticket generic trailing stop-loss update plan</td>
</tr>
<tr>
<td><code>resolve_broker_filling_mode</code></td>
<td>Broker-supported filling-mode selection helper</td>
</tr>
<tr>
<td><code>ensure_symbol_selected</code></td>
<td>Select/verify Market Watch visibility</td>
</tr>
@@ -635,6 +643,9 @@ of the package-root stable surface. Import them directly when needed:</p>
<li>Require <code>-o/--output</code> and write CSV, JSON, Parquet, or SQLite.</li>
<li>Accept global MT5 connection options (<code>--login</code>, <code>--password</code>, <code>--server</code>,
<code>--path</code>, <code>--timeout</code>).</li>
<li>Resolve unset CLI connection options from <code>MT5_LOGIN</code>, <code>MT5_PASSWORD</code>,
<code>MT5_SERVER</code>, and <code>MT5_PATH</code>, and expand <code>${ENV_VAR}</code> placeholders in CLI
string fields before building the MT5 config.</li>
<li>Delegate to the same Python APIs described here; they are not duplicated
business logic.</li>
</ul>
@@ -650,7 +661,13 @@ constructed request payload. <code>close-positions</code> is the safer high-leve
that closes open positions by <code>--symbol</code> or <code>--ticket</code> using
<code>close_open_positions()</code>. Both <code>order-send --yes</code> and <code>close-positions --yes</code>
are live execution paths. <code>close-positions --dry-run</code> previews close orders
without placing them and does not require <code>--yes</code>.</p>
without placing them and does not require <code>--yes</code>. <code>close-positions</code> also
accepts optional <code>--deviation</code>, <code>--comment</code>, and <code>--magic</code>; <code>--magic</code> scopes
the selected open positions fail-closed when position magic metadata is absent.</p>
<p><code>history-gaps</code> reads an existing SQLite history database and exports one row
per detected gap from managed rate compatibility views. It never initializes
MT5. Pass <code>--granularity-seconds</code> for custom tables or views whose bar spacing
cannot be inferred from the name.</p>
<h2 id="internal-helpers-not-stable">Internal helpers (not stable)<a class="headerlink" href="#internal-helpers-not-stable" title="Permanent link">&para;</a></h2>
<p>Do not import these for downstream contracts; they may change without a semver
notice:</p>
+2009 -1803
View File
File diff suppressed because it is too large Load Diff
+2445 -2214
View File
File diff suppressed because it is too large Load Diff
+12 -6
View File
@@ -284,9 +284,11 @@
<a id="__codelineno-3-12" name="__codelineno-3-12" href="#__codelineno-3-12"></a><span class="c1"># Export symbols to SQLite3 with custom table name</span>
<a id="__codelineno-3-13" name="__codelineno-3-13" href="#__codelineno-3-13"></a>mt5cli<span class="w"> </span>-o<span class="w"> </span>data.db<span class="w"> </span>--table<span class="w"> </span>symbols<span class="w"> </span>symbols<span class="w"> </span>--group<span class="w"> </span><span class="s2">&quot;*USD*&quot;</span>
<a id="__codelineno-3-14" name="__codelineno-3-14" href="#__codelineno-3-14"></a>
<a id="__codelineno-3-15" name="__codelineno-3-15" href="#__codelineno-3-15"></a><span class="c1"># Export with connection credentials</span>
<a id="__codelineno-3-16" name="__codelineno-3-16" href="#__codelineno-3-16"></a>mt5cli<span class="w"> </span>--login<span class="w"> </span><span class="m">12345</span><span class="w"> </span>--password<span class="w"> </span>mypass<span class="w"> </span>--server<span class="w"> </span>MyBroker-Demo<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-3-17" name="__codelineno-3-17" href="#__codelineno-3-17"></a><span class="w"> </span>-o<span class="w"> </span>positions.csv<span class="w"> </span>positions
<a id="__codelineno-3-15" name="__codelineno-3-15" href="#__codelineno-3-15"></a><span class="c1"># Export with connection credentials from env or placeholders</span>
<a id="__codelineno-3-16" name="__codelineno-3-16" href="#__codelineno-3-16"></a><span class="nv">MT5_LOGIN</span><span class="o">=</span><span class="m">12345</span><span class="w"> </span><span class="nv">MT5_PASSWORD</span><span class="o">=</span>secret<span class="w"> </span><span class="nv">MT5_SERVER</span><span class="o">=</span>MyBroker-Demo<span class="w"> </span><span class="se">\</span>
<a id="__codelineno-3-17" name="__codelineno-3-17" href="#__codelineno-3-17"></a><span class="w"> </span>mt5cli<span class="w"> </span>-o<span class="w"> </span>positions.csv<span class="w"> </span>positions
<a id="__codelineno-3-18" name="__codelineno-3-18" href="#__codelineno-3-18"></a>mt5cli<span class="w"> </span>--login<span class="w"> </span><span class="s1">&#39;${MT5_LOGIN}&#39;</span><span class="w"> </span>--password<span class="w"> </span><span class="s1">&#39;${MT5_PASSWORD}&#39;</span><span class="w"> </span>--server<span class="w"> </span><span class="s1">&#39;${MT5_SERVER}&#39;</span><span class="w"> </span><span class="se">\</span>
<a id="__codelineno-3-19" name="__codelineno-3-19" href="#__codelineno-3-19"></a><span class="w"> </span>-o<span class="w"> </span>positions.csv<span class="w"> </span>positions
</code></pre></div>
<h2 id="commands">Commands<a class="headerlink" href="#commands" title="Permanent link">&para;</a></h2>
<h3 id="rates">Rates<a class="headerlink" href="#rates" title="Permanent link">&para;</a></h3>
@@ -442,7 +444,7 @@ real trades. Both require <code>--yes</code> for live execution.</p>
</tr>
<tr>
<td><code>close-positions</code></td>
<td>Close open positions by <code>--symbol</code> or <code>--ticket</code> (<code>--yes</code> required for live; <code>--dry-run</code> to preview)</td>
<td>Close open positions by <code>--symbol</code> or <code>--ticket</code> (<code>--yes</code> required for live; <code>--dry-run</code> to preview; optional <code>--deviation</code> / <code>--comment</code> / <code>--magic</code>)</td>
</tr>
</tbody>
</table>
@@ -463,6 +465,10 @@ applications should prefer dedicated closing helpers or their own risk controls.
<td><code>collect-history</code></td>
<td>Collect rates, history-orders, and history-deals (ticks opt-in via <code>--dataset ticks</code>) for one or more symbols into a single SQLite database (optional cash-event/position views)</td>
</tr>
<tr>
<td><code>history-gaps</code></td>
<td>Export a SQLite-only one-row-per-gap report from managed rate compatibility views without connecting to MT5</td>
</tr>
</tbody>
</table>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>mt5cli<span class="w"> </span>-o<span class="w"> </span>history.db<span class="w"> </span>collect-history<span class="w"> </span><span class="se">\</span>
@@ -552,7 +558,7 @@ applications should prefer dedicated closing helpers or their own risk controls.
</tr>
<tr>
<td><code>--password</code></td>
<td>Trading account password</td>
<td>Trading account password (<code>MT5_PASSWORD</code>)</td>
</tr>
<tr>
<td><code>--server</code></td>
@@ -676,5 +682,5 @@ applications should prefer dedicated closing helpers or their own risk controls.
<!--
MkDocs version : 1.6.1
Build Date UTC : 2026-07-03 16:30:57.452391+00:00
Build Date UTC : 2026-07-04 05:20:19.907295+00:00
-->
BIN
View File
Binary file not shown.
File diff suppressed because one or more lines are too long
+14 -14
View File
@@ -2,58 +2,58 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://github.com/dceoy/mt5cli/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/cli/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/client/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/converters/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/exceptions/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/grafana/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/history/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/public-contract/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/schemas/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/sdk/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/telemetry/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/trading/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
<url>
<loc>https://github.com/dceoy/mt5cli/api/utils/</loc>
<lastmod>2026-07-03</lastmod>
<lastmod>2026-07-04</lastmod>
</url>
</urlset>
BIN
View File
Binary file not shown.