Spaces:
Running
Running
| <html class="default" lang="en" data-base=".."><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>BrokerBase | backtest-kit</title><meta name="description" content="Documentation for backtest-kit"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js" id="tsd-hierarchy-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search"><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">backtest-kit</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../modules.html">backtest-kit</a></li><li><a href="../modules/types.html">types</a></li><li><a href="types.BrokerBase.html">BrokerBase</a></li></ul><h1>Class BrokerBase</h1></div><section class="tsd-panel tsd-comment"><div class="tsd-comment tsd-typography"><p>Base class for custom broker adapter implementations.</p> | |
| <p>Provides default no-op implementations for all IBroker methods that log events. | |
| Extend this class to implement a real exchange adapter for:</p> | |
| <ul> | |
| <li>Placing and canceling limit/market orders</li> | |
| <li>Updating stop-loss and take-profit levels on exchange</li> | |
| <li>Tracking position state in an external system</li> | |
| <li>Sending trade notifications (Telegram, Discord, Email)</li> | |
| <li>Recording trades to a database or analytics service</li> | |
| </ul> | |
| <p>Key features:</p> | |
| <ul> | |
| <li>All methods have default implementations (no need to override unused methods)</li> | |
| <li>Automatic logging of all events via bt.loggerService</li> | |
| <li>Implements the full IBroker interface</li> | |
| <li><code>makeExtendable</code> applied for correct subclass instantiation</li> | |
| </ul> | |
| <p>Lifecycle:</p> | |
| <ol> | |
| <li>Constructor called (no arguments)</li> | |
| <li><code>waitForInit()</code> called once for async initialization (e.g. exchange login)</li> | |
| <li>Event methods called as strategy executes</li> | |
| <li>No explicit dispose — clean up in <code>waitForInit</code> teardown or externally</li> | |
| </ol> | |
| <p>Event flow (called only in live mode, skipped in backtest):</p> | |
| <ul> | |
| <li><code>onOrderOpenCommit</code> — new position opened</li> | |
| <li><code>onOrderCloseCommit</code> — position closed (SL/TP hit or manual close)</li> | |
| <li><code>onPartialProfitCommit</code> — partial close at profit executed</li> | |
| <li><code>onPartialLossCommit</code> — partial close at loss executed</li> | |
| <li><code>onTrailingStopCommit</code> — trailing stop-loss updated</li> | |
| <li><code>onTrailingTakeCommit</code> — trailing take-profit updated</li> | |
| <li><code>onBreakevenCommit</code> — stop-loss moved to entry price</li> | |
| <li><code>onAverageBuyCommit</code> — new DCA entry added to position</li> | |
| </ul> | |
| </div><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example" class="tsd-anchor"></a>Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-2"> { </span><span class="hl-5">BrokerBase</span><span class="hl-2">, </span><span class="hl-5">Broker</span><span class="hl-2"> } </span><span class="hl-6">from</span><span class="hl-2"> </span><span class="hl-3">"backtest-kit"</span><span class="hl-2">;</span><br/><br/><span class="hl-0">// Extend BrokerBase and override only needed methods</span><br/><span class="hl-4">class</span><span class="hl-2"> </span><span class="hl-10">BinanceBroker</span><span class="hl-2"> </span><span class="hl-4">extends</span><span class="hl-2"> </span><span class="hl-10">BrokerBase</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-4">private</span><span class="hl-2"> </span><span class="hl-5">client</span><span class="hl-2">: </span><span class="hl-10">BinanceClient</span><span class="hl-2"> | </span><span class="hl-10">null</span><span class="hl-2"> = </span><span class="hl-4">null</span><span class="hl-2">;</span><br/><br/><span class="hl-2"> </span><span class="hl-4">async</span><span class="hl-2"> </span><span class="hl-1">waitForInit</span><span class="hl-2">() {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">waitForInit</span><span class="hl-2">(); </span><span class="hl-0">// Call parent for logging</span><br/><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">client</span><span class="hl-2"> = </span><span class="hl-4">new</span><span class="hl-2"> </span><span class="hl-1">BinanceClient</span><span class="hl-2">(</span><span class="hl-5">process</span><span class="hl-2">.</span><span class="hl-5">env</span><span class="hl-2">.</span><span class="hl-7">API_KEY</span><span class="hl-2">, </span><span class="hl-5">process</span><span class="hl-2">.</span><span class="hl-5">env</span><span class="hl-2">.</span><span class="hl-7">SECRET</span><span class="hl-2">);</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">client</span><span class="hl-2">.</span><span class="hl-1">connect</span><span class="hl-2">();</span><br/><span class="hl-2"> }</span><br/><br/><span class="hl-2"> </span><span class="hl-4">async</span><span class="hl-2"> </span><span class="hl-1">onOrderOpenCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-10">BrokerOrderOpenPayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">onOrderOpenCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">); </span><span class="hl-0">// Call parent for logging</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">client</span><span class="hl-2">!.</span><span class="hl-1">placeOrder</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-5">symbol:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">side:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">position</span><span class="hl-2"> === </span><span class="hl-3">"long"</span><span class="hl-2"> ? </span><span class="hl-3">"BUY"</span><span class="hl-2"> : </span><span class="hl-3">"SELL"</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">quantity:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">cost</span><span class="hl-2"> / </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">priceOpen</span><span class="hl-2">,</span><br/><span class="hl-2"> });</span><br/><span class="hl-2"> }</span><br/><br/><span class="hl-2"> </span><span class="hl-4">async</span><span class="hl-2"> </span><span class="hl-1">onOrderCloseCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-10">BrokerOrderClosePayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">onOrderCloseCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">); </span><span class="hl-0">// Call parent for logging</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">client</span><span class="hl-2">!.</span><span class="hl-1">closePosition</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">);</span><br/><span class="hl-2"> }</span><br/><span class="hl-2">}</span><br/><br/><span class="hl-0">// Register the adapter</span><br/><span class="hl-5">Broker</span><span class="hl-2">.</span><span class="hl-1">useBrokerAdapter</span><span class="hl-2">(</span><span class="hl-5">BinanceBroker</span><span class="hl-2">);</span><br/><span class="hl-5">Broker</span><span class="hl-2">.</span><span class="hl-1">enable</span><span class="hl-2">();</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example-1" class="tsd-anchor"></a>Example<a href="#example-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-0">// Minimal implementation — only handle opens and closes</span><br/><span class="hl-4">class</span><span class="hl-2"> </span><span class="hl-10">NotifyBroker</span><span class="hl-2"> </span><span class="hl-4">extends</span><span class="hl-2"> </span><span class="hl-10">BrokerBase</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-4">async</span><span class="hl-2"> </span><span class="hl-1">onOrderOpenCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-10">BrokerOrderOpenPayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-1">sendTelegram</span><span class="hl-2">(</span><span class="hl-3">`Opened </span><span class="hl-4">${</span><span class="hl-5">payload</span><span class="hl-11">.</span><span class="hl-5">position</span><span class="hl-4">}</span><span class="hl-3"> on </span><span class="hl-4">${</span><span class="hl-5">payload</span><span class="hl-11">.</span><span class="hl-5">symbol</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-2">);</span><br/><span class="hl-2"> }</span><br/><br/><span class="hl-2"> </span><span class="hl-4">async</span><span class="hl-2"> </span><span class="hl-1">onOrderCloseCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-10">BrokerOrderClosePayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">const</span><span class="hl-2"> </span><span class="hl-7">pnl</span><span class="hl-2"> = </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">pnl</span><span class="hl-2">.</span><span class="hl-5">profit</span><span class="hl-2"> - </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">pnl</span><span class="hl-2">.</span><span class="hl-5">loss</span><span class="hl-2">;</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-1">sendTelegram</span><span class="hl-2">(</span><span class="hl-3">`Closed </span><span class="hl-4">${</span><span class="hl-5">payload</span><span class="hl-11">.</span><span class="hl-5">symbol</span><span class="hl-4">}</span><span class="hl-3">: PnL $</span><span class="hl-4">${</span><span class="hl-5">pnl</span><span class="hl-11">.</span><span class="hl-1">toFixed</span><span class="hl-11">(</span><span class="hl-8">2</span><span class="hl-11">)</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-2">);</span><br/><span class="hl-2"> }</span><br/><span class="hl-2">}</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div></div></section><section class="tsd-panel"><h4>Implements</h4><ul class="tsd-hierarchy"><li><a href="../interfaces/types.IBroker.html" class="tsd-signature-type tsd-kind-interface">IBroker</a></li></ul></section><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L30974">types.d.ts:30974</a></li></ul></aside><section class="tsd-panel-group tsd-index-group"><section class="tsd-panel tsd-index-panel"><details class="tsd-index-content tsd-accordion" open><summary class="tsd-accordion-summary tsd-index-summary"><h5 class="tsd-index-heading uppercase" role="button" aria-expanded="false" tabIndex="0"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronSmall"></use></svg> Index</h5></summary><div class="tsd-accordion-details"><section class="tsd-index-section"><h3 class="tsd-index-heading">Constructors</h3><div class="tsd-index-list"><a href="types.BrokerBase.html#constructor" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a> | |
| </div></section><section class="tsd-index-section"><h3 class="tsd-index-heading">Methods</h3><div class="tsd-index-list"><a href="types.BrokerBase.html#onaveragebuycommit" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Average<wbr/>Buy<wbr/>Commit</span></a> | |
| <a href="types.BrokerBase.html#onbreakevencommit" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Breakeven<wbr/>Commit</span></a> | |
| <a href="types.BrokerBase.html#onorderactivecheck" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Order<wbr/>Active<wbr/>Check</span></a> | |
| <a href="types.BrokerBase.html#onorderclosecommit" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Order<wbr/>Close<wbr/>Commit</span></a> | |
| <a href="types.BrokerBase.html#onorderopencommit" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Order<wbr/>Open<wbr/>Commit</span></a> | |
| <a href="types.BrokerBase.html#onorderschedulecheck" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Order<wbr/>Schedule<wbr/>Check</span></a> | |
| <a href="types.BrokerBase.html#onpartiallosscommit" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Partial<wbr/>Loss<wbr/>Commit</span></a> | |
| <a href="types.BrokerBase.html#onpartialprofitcommit" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Partial<wbr/>Profit<wbr/>Commit</span></a> | |
| <a href="types.BrokerBase.html#onsignalactiveping" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Active<wbr/>Ping</span></a> | |
| <a href="types.BrokerBase.html#onsignalidleping" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Idle<wbr/>Ping</span></a> | |
| <a href="types.BrokerBase.html#onsignalpendingclose" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Pending<wbr/>Close</span></a> | |
| <a href="types.BrokerBase.html#onsignalpendingopen" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Pending<wbr/>Open</span></a> | |
| <a href="types.BrokerBase.html#onsignalschedulecancelled" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Schedule<wbr/>Cancelled</span></a> | |
| <a href="types.BrokerBase.html#onsignalscheduleopen" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Schedule<wbr/>Open</span></a> | |
| <a href="types.BrokerBase.html#onsignalscheduleping" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Schedule<wbr/>Ping</span></a> | |
| <a href="types.BrokerBase.html#ontrailingstopcommit" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Trailing<wbr/>Stop<wbr/>Commit</span></a> | |
| <a href="types.BrokerBase.html#ontrailingtakecommit" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Trailing<wbr/>Take<wbr/>Commit</span></a> | |
| <a href="types.BrokerBase.html#waitforinit" class="tsd-index-link"><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>wait<wbr/>For<wbr/>Init</span></a> | |
| </div></section></div></details></section></section><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Constructors"><h2><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg> Constructors</h2></summary><section><section class="tsd-panel tsd-member"><a id="constructor" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>constructor</span><a href="#constructor" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="constructorbrokerbase" class="tsd-anchor"></a><span class="tsd-signature-keyword">new</span> <span class="tsd-kind-constructor-signature">BrokerBase</span><span class="tsd-signature-symbol">()</span><span class="tsd-signature-symbol">:</span> <a href="types.BrokerBase.html" class="tsd-signature-type tsd-kind-class">BrokerBase</a><a href="#constructorbrokerbase" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><h4 class="tsd-returns-title">Returns <a href="types.BrokerBase.html" class="tsd-signature-type tsd-kind-class">BrokerBase</a></h4></div></li></ul></section></section></details><details class="tsd-panel-group tsd-member-group tsd-accordion" open><summary class="tsd-accordion-summary" data-key="section-Methods"><h2><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg> Methods</h2></summary><section><section class="tsd-panel tsd-member"><a id="onaveragebuycommit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Average<wbr/>Buy<wbr/>Commit</span><a href="#onaveragebuycommit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onaveragebuycommit-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onAverageBuyCommit</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerAverageBuyPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerAverageBuyPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onaveragebuycommit-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when a new DCA entry is added to the active position.</p> | |
| <p>Triggered explicitly after all validations pass, before <code>strategyCoreService.averageBuy()</code>. | |
| <code>currentPrice</code> is the market price at which the new averaging entry is placed. | |
| <code>cost</code> is the dollar amount of the new DCA entry.</p> | |
| <p>Default implementation: Logs average buy event.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerAverageBuyPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerAverageBuyPayload</a></span><div class="tsd-comment tsd-typography"><p>Average buy details: symbol, currentPrice, cost, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example-2" class="tsd-anchor"></a>Example<a href="#example-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">async</span><span class="hl-2"> </span><span class="hl-1">onAverageBuyCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-5">BrokerAverageBuyPayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">onAverageBuyCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">); </span><span class="hl-0">// Keep parent logging</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">exchange</span><span class="hl-2">.</span><span class="hl-1">placeMarketOrder</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-5">symbol:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">side:</span><span class="hl-2"> </span><span class="hl-3">"BUY"</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">quantity:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">cost</span><span class="hl-2"> / </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">currentPrice</span><span class="hl-2">,</span><br/><span class="hl-2"> });</span><br/><span class="hl-2">}</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onaveragebuycommit">onAverageBuyCommit</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31312">types.d.ts:31312</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onbreakevencommit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Breakeven<wbr/>Commit</span><a href="#onbreakevencommit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onbreakevencommit-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onBreakevenCommit</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerBreakevenPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerBreakevenPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onbreakevencommit-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when the stop-loss is moved to breakeven (entry price).</p> | |
| <p>Triggered explicitly after all validations pass, before <code>strategyCoreService.breakeven()</code>. | |
| <code>newStopLossPrice</code> equals <code>effectivePriceOpen</code> — the position's effective entry price. | |
| <code>newTakeProfitPrice</code> is unchanged by breakeven.</p> | |
| <p>Default implementation: Logs breakeven event.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerBreakevenPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerBreakevenPayload</a></span><div class="tsd-comment tsd-typography"><p>Breakeven details: symbol, currentPrice, newStopLossPrice, newTakeProfitPrice, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example-3" class="tsd-anchor"></a>Example<a href="#example-3" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">async</span><span class="hl-2"> </span><span class="hl-1">onBreakevenCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-5">BrokerBreakevenPayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">onBreakevenCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">); </span><span class="hl-0">// Keep parent logging</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">exchange</span><span class="hl-2">.</span><span class="hl-1">updateStopLoss</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-5">symbol:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">price:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">newStopLossPrice</span><span class="hl-2">, </span><span class="hl-0">// = entry price</span><br/><span class="hl-2"> });</span><br/><span class="hl-2">}</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onbreakevencommit">onBreakevenCommit</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31288">types.d.ts:31288</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onorderactivecheck" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Order<wbr/>Active<wbr/>Check</span><a href="#onorderactivecheck" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onorderactivecheck-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onOrderActiveCheck</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerOrderCheckPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerOrderCheckPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onorderactivecheck-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called on every live tick while a pending signal (open position) is monitored, BEFORE | |
| TP/SL/time evaluation.</p> | |
| <p>Override to query the exchange for the order by <code>payload.signalId</code> and THROW ONLY when it is | |
| definitively NOT FOUND by that id (filled, cancelled, or liquidated externally) — the framework | |
| then closes the position with closeReason "closed". The default implementation logs and returns | |
| normally, which keeps the position under normal TP/SL monitoring.</p> | |
| <p>CRITICAL: swallow transient/network errors (timeout, 5xx, rate limit, disconnect) — return | |
| normally instead of throwing. A thrown network error would wrongly close an open position; only | |
| a confirmed "order not found by id" response is a valid reason to throw.</p> | |
| <p>Manual wiring — EXCEPTION-BASED VARIANT: the throw-driven alternative to the imperative | |
| commit-function wiring in <code>onSignalActivePing</code>. See <a href="../interfaces/types.IBroker.html#onorderactivecheck" class="tsd-kind-method">IBroker.onOrderActiveCheck</a> for the | |
| full comparison and example.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerOrderCheckPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerOrderCheckPayload</a></span><div class="tsd-comment tsd-typography"><p>Pending ping details: symbol, signalId, position, prices, pnl, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onorderactivecheck">onOrderActiveCheck</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31043">types.d.ts:31043</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onorderclosecommit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Order<wbr/>Close<wbr/>Commit</span><a href="#onorderclosecommit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onorderclosecommit-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onOrderCloseCommit</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerOrderClosePayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerOrderClosePayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onorderclosecommit-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when a position is being closed (SL/TP hit or manual close).</p> | |
| <p>Triggered automatically via syncSubject when a pending signal is closed. | |
| Use to place the exit order and record final PnL.</p> | |
| <p>Default implementation: Logs signal-close event.</p> | |
| <p>Manual wiring — EXCEPTION-BASED GATE: emitted BEFORE the framework mutates state, so a THROW here | |
| (e.g. exit order failed) SKIPS the close — the position stays open and the close retries next | |
| tick; return normally to let it close. Live-only (backtest short-circuits). See | |
| <a href="../interfaces/types.IBroker.html#onorderclosecommit" class="tsd-kind-method">IBroker.onOrderCloseCommit</a> for the full semantics.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerOrderClosePayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerOrderClosePayload</a></span><div class="tsd-comment tsd-typography"><p>Signal close details: symbol, cost, position, currentPrice, pnl, totalEntries, totalPartials, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example-4" class="tsd-anchor"></a>Example<a href="#example-4" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">async</span><span class="hl-2"> </span><span class="hl-1">onOrderCloseCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-5">BrokerOrderClosePayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">onOrderCloseCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">); </span><span class="hl-0">// Keep parent logging</span><br/><span class="hl-2"> </span><span class="hl-4">const</span><span class="hl-2"> </span><span class="hl-7">ok</span><span class="hl-2"> = </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">exchange</span><span class="hl-2">.</span><span class="hl-1">closePosition</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">);</span><br/><span class="hl-2"> </span><span class="hl-6">if</span><span class="hl-2"> (!</span><span class="hl-5">ok</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-6">throw</span><span class="hl-2"> </span><span class="hl-4">new</span><span class="hl-2"> </span><span class="hl-1">Error</span><span class="hl-2">(</span><span class="hl-3">`Exit not filled for </span><span class="hl-4">${</span><span class="hl-5">payload</span><span class="hl-11">.</span><span class="hl-5">symbol</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-2">); </span><span class="hl-0">// -> keep position open, retry next tick</span><br/><span class="hl-2"> }</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">db</span><span class="hl-2">.</span><span class="hl-1">recordTrade</span><span class="hl-2">({ </span><span class="hl-5">symbol:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">, </span><span class="hl-5">pnl:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">pnl</span><span class="hl-2"> });</span><br/><span class="hl-2">}</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onorderclosecommit">onOrderCloseCommit</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31173">types.d.ts:31173</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onorderopencommit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Order<wbr/>Open<wbr/>Commit</span><a href="#onorderopencommit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onorderopencommit-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onOrderOpenCommit</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerOrderOpenPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerOrderOpenPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onorderopencommit-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when a position is being opened (signal activated).</p> | |
| <p>Triggered automatically via syncSubject when a scheduled signal's priceOpen is hit. | |
| Use to place the actual entry order on the exchange.</p> | |
| <p>Default implementation: Logs signal-open event.</p> | |
| <p>Manual wiring — EXCEPTION-BASED GATE: emitted BEFORE the framework mutates state, so a THROW here | |
| (e.g. limit order rejected) rolls back the open — the pending signal returns to idle and retries | |
| next tick; return normally to let it open. Live-only (backtest short-circuits). See | |
| <a href="../interfaces/types.IBroker.html#onorderopencommit" class="tsd-kind-method">IBroker.onOrderOpenCommit</a> for the full semantics.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerOrderOpenPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerOrderOpenPayload</a></span><div class="tsd-comment tsd-typography"><p>Signal open details: symbol, cost, position, priceOpen, priceTakeProfit, priceStopLoss, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example-5" class="tsd-anchor"></a>Example<a href="#example-5" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">async</span><span class="hl-2"> </span><span class="hl-1">onOrderOpenCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-5">BrokerOrderOpenPayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">onOrderOpenCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">); </span><span class="hl-0">// Keep parent logging</span><br/><span class="hl-2"> </span><span class="hl-4">const</span><span class="hl-2"> </span><span class="hl-7">order</span><span class="hl-2"> = </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">exchange</span><span class="hl-2">.</span><span class="hl-1">placeMarketOrder</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-5">symbol:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">side:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">position</span><span class="hl-2"> === </span><span class="hl-3">"long"</span><span class="hl-2"> ? </span><span class="hl-3">"BUY"</span><span class="hl-2"> : </span><span class="hl-3">"SELL"</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">quantity:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">cost</span><span class="hl-2"> / </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">priceOpen</span><span class="hl-2">,</span><br/><span class="hl-2"> });</span><br/><span class="hl-2"> </span><span class="hl-6">if</span><span class="hl-2"> (!</span><span class="hl-5">order</span><span class="hl-2">.</span><span class="hl-5">filled</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-6">throw</span><span class="hl-2"> </span><span class="hl-4">new</span><span class="hl-2"> </span><span class="hl-1">Error</span><span class="hl-2">(</span><span class="hl-3">`Entry not filled for </span><span class="hl-4">${</span><span class="hl-5">payload</span><span class="hl-11">.</span><span class="hl-5">symbol</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-2">); </span><span class="hl-0">// -> roll back the open, retry next tick</span><br/><span class="hl-2"> }</span><br/><span class="hl-2">}</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onorderopencommit">onOrderOpenCommit</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31023">types.d.ts:31023</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onorderschedulecheck" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Order<wbr/>Schedule<wbr/>Check</span><a href="#onorderschedulecheck" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onorderschedulecheck-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onOrderScheduleCheck</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerOrderCheckPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerOrderCheckPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onorderschedulecheck-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called on every live tick while a scheduled signal (resting entry order) is monitored, BEFORE | |
| timeout/price-activation evaluation.</p> | |
| <p>Override to query the exchange for the resting order by <code>payload.signalId</code> and THROW ONLY when | |
| it is definitively NOT FOUND by that id — the framework then cancels the scheduled signal with | |
| reason "user". The default implementation logs and returns normally. A FILLED resting order | |
| must be confirmed via <code>commitActivateScheduled</code>, not by throwing here.</p> | |
| <p>CRITICAL: swallow transient/network errors (timeout, 5xx, rate limit, disconnect) — return | |
| normally instead of throwing; only a confirmed "order not found by id" response is a valid | |
| reason to throw.</p> | |
| <p>Manual wiring — EXCEPTION-BASED VARIANT: the throw-driven alternative to the imperative | |
| commit-function wiring in <code>onSignalSchedulePing</code>. See <a href="../interfaces/types.IBroker.html#onorderschedulecheck" class="tsd-kind-method">IBroker.onOrderScheduleCheck</a> for | |
| the full comparison and example.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerOrderCheckPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerOrderCheckPayload</a></span><div class="tsd-comment tsd-typography"><p>Pending ping details: symbol, signalId, position, prices, pnl, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onorderschedulecheck">onOrderScheduleCheck</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31063">types.d.ts:31063</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onpartiallosscommit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Partial<wbr/>Loss<wbr/>Commit</span><a href="#onpartiallosscommit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onpartiallosscommit-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onPartialLossCommit</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerPartialLossPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerPartialLossPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onpartiallosscommit-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when a partial close at loss is executed.</p> | |
| <p>Triggered explicitly from strategy.ts / Live.ts / Backtest.ts after all validations pass, | |
| before <code>strategyCoreService.partialLoss()</code>. If this method throws, the DI mutation is skipped. | |
| Use to partially close the position on the exchange at the loss level.</p> | |
| <p>Default implementation: Logs partial loss event.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerPartialLossPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerPartialLossPayload</a></span><div class="tsd-comment tsd-typography"><p>Partial loss details: symbol, percentToClose, cost (dollar value), currentPrice, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example-6" class="tsd-anchor"></a>Example<a href="#example-6" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">async</span><span class="hl-2"> </span><span class="hl-1">onPartialLossCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-5">BrokerPartialLossPayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">onPartialLossCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">); </span><span class="hl-0">// Keep parent logging</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">exchange</span><span class="hl-2">.</span><span class="hl-1">reducePosition</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-5">symbol:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">dollarAmount:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">cost</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">price:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">currentPrice</span><span class="hl-2">,</span><br/><span class="hl-2"> });</span><br/><span class="hl-2">}</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onpartiallosscommit">onPartialLossCommit</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31221">types.d.ts:31221</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onpartialprofitcommit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Partial<wbr/>Profit<wbr/>Commit</span><a href="#onpartialprofitcommit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onpartialprofitcommit-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onPartialProfitCommit</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerPartialProfitPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerPartialProfitPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onpartialprofitcommit-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when a partial close at profit is executed.</p> | |
| <p>Triggered explicitly from strategy.ts / Live.ts / Backtest.ts after all validations pass, | |
| before <code>strategyCoreService.partialProfit()</code>. If this method throws, the DI mutation is skipped. | |
| Use to partially close the position on the exchange at the profit level.</p> | |
| <p>Default implementation: Logs partial profit event.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerPartialProfitPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerPartialProfitPayload</a></span><div class="tsd-comment tsd-typography"><p>Partial profit details: symbol, percentToClose, cost (dollar value), currentPrice, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example-7" class="tsd-anchor"></a>Example<a href="#example-7" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">async</span><span class="hl-2"> </span><span class="hl-1">onPartialProfitCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-5">BrokerPartialProfitPayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">onPartialProfitCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">); </span><span class="hl-0">// Keep parent logging</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">exchange</span><span class="hl-2">.</span><span class="hl-1">reducePosition</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-5">symbol:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">dollarAmount:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">cost</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">price:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">currentPrice</span><span class="hl-2">,</span><br/><span class="hl-2"> });</span><br/><span class="hl-2">}</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onpartialprofitcommit">onPartialProfitCommit</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31197">types.d.ts:31197</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onsignalactiveping" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Signal<wbr/>Active<wbr/>Ping</span><a href="#onsignalactiveping" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onsignalactiveping-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onSignalActivePing</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerActivePingPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerActivePingPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onsignalactiveping-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called on every live tick while a pending (open) signal is monitored.</p> | |
| <p>Purely informational mirror of the active-ping lifecycle — unlike <code>onOrderActiveCheck</code>, a throw here | |
| does NOT close the position. Override to mirror live monitoring state into your own systems. | |
| The default implementation logs.</p> | |
| <p>Manual wiring — EVENT-BASED: this is the primary per-tick hook to drive an open position from real exchange | |
| state (<code>commitCreateTakeProfit</code> / <code>commitCreateStopLoss</code> / <code>commitClosePending</code>). See the | |
| <a href="../interfaces/types.IBroker.html#onsignalactiveping" class="tsd-kind-method">IBroker.onSignalActivePing</a> contract docs for the full guidance and example.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerActivePingPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerActivePingPayload</a></span><div class="tsd-comment tsd-typography"><p>Active ping details: symbol, signalId, position, prices, pnl, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onsignalactiveping">onSignalActivePing</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31077">types.d.ts:31077</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onsignalidleping" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Signal<wbr/>Idle<wbr/>Ping</span><a href="#onsignalidleping" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onsignalidleping-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onSignalIdlePing</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerIdlePingPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerIdlePingPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onsignalidleping-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called on every live tick while the strategy is idle (no pending or scheduled signal).</p> | |
| <p>Purely informational. Override to track idle heartbeats. The default logs.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerIdlePingPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerIdlePingPayload</a></span><div class="tsd-comment tsd-typography"><p>Idle ping details: symbol, currentPrice, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onsignalidleping">onSignalIdlePing</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31097">types.d.ts:31097</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onsignalpendingclose" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Signal<wbr/>Pending<wbr/>Close</span><a href="#onsignalpendingclose" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onsignalpendingclose-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onSignalPendingClose</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerPendingClosePayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerPendingClosePayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onsignalpendingclose-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when a pending position is closed (take_profit / stop_loss / time_expired / closed).</p> | |
| <p>Informational lifecycle hook. Override to mirror the close into your own systems. The default logs.</p> | |
| <p>Manual wiring — EVENT-BASED (outbound): the strategy already removed the pending signal — flatten the real | |
| position and cancel leftover TP/SL orders by <code>payload.signalId</code>. See | |
| <a href="../interfaces/types.IBroker.html#onsignalpendingclose" class="tsd-kind-method">IBroker.onSignalPendingClose</a>.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerPendingClosePayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerPendingClosePayload</a></span><div class="tsd-comment tsd-typography"><p>Pending close details: symbol, signalId, position, prices, closeReason, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onsignalpendingclose">onSignalPendingClose</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31145">types.d.ts:31145</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onsignalpendingopen" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Signal<wbr/>Pending<wbr/>Open</span><a href="#onsignalpendingopen" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onsignalpendingopen-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onSignalPendingOpen</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerPendingOpenPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerPendingOpenPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onsignalpendingopen-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when a pending position is opened (new signal / immediate / scheduled or user activation).</p> | |
| <p>Informational lifecycle hook. Override to mirror the open into your own systems. The default logs.</p> | |
| <p>Manual wiring — EVENT-BASED: fires ONCE at open — place entry + protective TP/SL orders (tag with | |
| <code>payload.signalId</code>), then drive per-tick from <code>onSignalActivePing</code>. See | |
| <a href="../interfaces/types.IBroker.html#onsignalpendingopen" class="tsd-kind-method">IBroker.onSignalPendingOpen</a>.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerPendingOpenPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerPendingOpenPayload</a></span><div class="tsd-comment tsd-typography"><p>Pending open details: symbol, signalId, position, prices, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onsignalpendingopen">onSignalPendingOpen</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31133">types.d.ts:31133</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onsignalschedulecancelled" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Signal<wbr/>Schedule<wbr/>Cancelled</span><a href="#onsignalschedulecancelled" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onsignalschedulecancelled-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onSignalScheduleCancelled</span><span class="tsd-signature-symbol">(</span><br/> <span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerScheduleCancelledPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerScheduleCancelledPayload</a><span class="tsd-signature-symbol">,</span><br/><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onsignalschedulecancelled-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when a scheduled signal is cancelled before activation (timeout / price_reject / user).</p> | |
| <p>Override to cancel the resting/limit order on the exchange. The default logs.</p> | |
| <p>Manual wiring — EVENT-BASED (outbound): the strategy already dropped the scheduled signal — cancel the matching | |
| exchange order by <code>payload.signalId</code>. See <a href="../interfaces/types.IBroker.html#onsignalschedulecancelled" class="tsd-kind-method">IBroker.onSignalScheduleCancelled</a>.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerScheduleCancelledPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerScheduleCancelledPayload</a></span><div class="tsd-comment tsd-typography"><p>Scheduled cancel details: symbol, signalId, position, prices, reason, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onsignalschedulecancelled">onSignalScheduleCancelled</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31121">types.d.ts:31121</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onsignalscheduleopen" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Signal<wbr/>Schedule<wbr/>Open</span><a href="#onsignalscheduleopen" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onsignalscheduleopen-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onSignalScheduleOpen</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerScheduleOpenPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerScheduleOpenPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onsignalscheduleopen-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when a new scheduled signal is created and starts waiting for priceOpen activation.</p> | |
| <p>The scheduled -> active transition is reported via <code>onOrderOpenCommit</code>, not here. Override to | |
| place a resting/limit order on the exchange. The default logs.</p> | |
| <p>Manual wiring — EVENT-BASED: fires ONCE at creation — place the real resting order (tag it with | |
| <code>payload.signalId</code>) and optionally <code>commitActivateScheduled</code> / <code>commitCancelScheduled</code>. See | |
| <a href="../interfaces/types.IBroker.html#onsignalscheduleopen" class="tsd-kind-method">IBroker.onSignalScheduleOpen</a> for full guidance and example.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerScheduleOpenPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerScheduleOpenPayload</a></span><div class="tsd-comment tsd-typography"><p>Scheduled open details: symbol, signalId, position, prices, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onsignalscheduleopen">onSignalScheduleOpen</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31110">types.d.ts:31110</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="onsignalscheduleping" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Signal<wbr/>Schedule<wbr/>Ping</span><a href="#onsignalscheduleping" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="onsignalscheduleping-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onSignalSchedulePing</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerSchedulePingPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerSchedulePingPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#onsignalscheduleping-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called on every live tick while a scheduled signal is monitored (waiting for priceOpen).</p> | |
| <p>Purely informational. Override to mirror scheduled-monitoring state. The default logs.</p> | |
| <p>Manual wiring — EVENT-BASED: per-tick hook to drive a scheduled (resting) order from real exchange state | |
| (<code>commitActivateScheduled</code> / <code>commitCancelScheduled</code>). See <a href="../interfaces/types.IBroker.html#onsignalscheduleping" class="tsd-kind-method">IBroker.onSignalSchedulePing</a> | |
| for full guidance and example.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerSchedulePingPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerSchedulePingPayload</a></span><div class="tsd-comment tsd-typography"><p>Schedule ping details: symbol, signalId, position, prices, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#onsignalscheduleping">onSignalSchedulePing</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31089">types.d.ts:31089</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="ontrailingstopcommit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Trailing<wbr/>Stop<wbr/>Commit</span><a href="#ontrailingstopcommit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="ontrailingstopcommit-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onTrailingStopCommit</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerTrailingStopPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerTrailingStopPayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#ontrailingstopcommit-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when the trailing stop-loss level is updated.</p> | |
| <p>Triggered explicitly after all validations pass, before <code>strategyCoreService.trailingStop()</code>. | |
| <code>newStopLossPrice</code> is the absolute SL price — use it to update the exchange order directly.</p> | |
| <p>Default implementation: Logs trailing stop event.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerTrailingStopPayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerTrailingStopPayload</a></span><div class="tsd-comment tsd-typography"><p>Trailing stop details: symbol, percentShift, currentPrice, newStopLossPrice, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example-8" class="tsd-anchor"></a>Example<a href="#example-8" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">async</span><span class="hl-2"> </span><span class="hl-1">onTrailingStopCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-5">BrokerTrailingStopPayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">onTrailingStopCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">); </span><span class="hl-0">// Keep parent logging</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">exchange</span><span class="hl-2">.</span><span class="hl-1">updateStopLoss</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-5">symbol:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">price:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">newStopLossPrice</span><span class="hl-2">,</span><br/><span class="hl-2"> });</span><br/><span class="hl-2">}</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#ontrailingstopcommit">onTrailingStopCommit</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31243">types.d.ts:31243</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="ontrailingtakecommit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>on<wbr/>Trailing<wbr/>Take<wbr/>Commit</span><a href="#ontrailingtakecommit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="ontrailingtakecommit-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">onTrailingTakeCommit</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">payload</span><span class="tsd-signature-symbol">:</span> <a href="../types/types.BrokerTrailingTakePayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerTrailingTakePayload</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#ontrailingtakecommit-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Called when the trailing take-profit level is updated.</p> | |
| <p>Triggered explicitly after all validations pass, before <code>strategyCoreService.trailingTake()</code>. | |
| <code>newTakeProfitPrice</code> is the absolute TP price — use it to update the exchange order directly.</p> | |
| <p>Default implementation: Logs trailing take event.</p> | |
| </div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">payload</span>: <a href="../types/types.BrokerTrailingTakePayload.html" class="tsd-signature-type tsd-kind-type-alias">BrokerTrailingTakePayload</a></span><div class="tsd-comment tsd-typography"><p>Trailing take details: symbol, percentShift, currentPrice, newTakeProfitPrice, context, backtest</p> | |
| </div><div class="tsd-comment tsd-typography"></div></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example-9" class="tsd-anchor"></a>Example<a href="#example-9" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">async</span><span class="hl-2"> </span><span class="hl-1">onTrailingTakeCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">: </span><span class="hl-5">BrokerTrailingTakePayload</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">onTrailingTakeCommit</span><span class="hl-2">(</span><span class="hl-5">payload</span><span class="hl-2">); </span><span class="hl-0">// Keep parent logging</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">exchange</span><span class="hl-2">.</span><span class="hl-1">updateTakeProfit</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-5">symbol:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">symbol</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-5">price:</span><span class="hl-2"> </span><span class="hl-5">payload</span><span class="hl-2">.</span><span class="hl-5">newTakeProfitPrice</span><span class="hl-2">,</span><br/><span class="hl-2"> });</span><br/><span class="hl-2">}</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#ontrailingtakecommit">onTrailingTakeCommit</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L31265">types.d.ts:31265</a></li></ul></aside></div></li></ul></section><section class="tsd-panel tsd-member"><a id="waitforinit" class="tsd-anchor"></a><h3 class="tsd-anchor-link"><span>wait<wbr/>For<wbr/>Init</span><a href="#waitforinit" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3><ul class="tsd-signatures"><li class=""><div class="tsd-signature tsd-anchor-link"><a id="waitforinit-1" class="tsd-anchor"></a><span class="tsd-kind-call-signature">waitForInit</span><span class="tsd-signature-symbol">()</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span><a href="#waitforinit-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></div><div class="tsd-description"><div class="tsd-comment tsd-typography"><p>Performs async initialization before the broker starts receiving events.</p> | |
| <p>Called once by BrokerProxy via <code>waitForInit()</code> (singleshot) before the first event. | |
| Override to establish exchange connections, authenticate API clients, load configuration.</p> | |
| <p>Default implementation: Logs initialization event.</p> | |
| </div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">Promise</span><span class="tsd-signature-symbol"><</span><span class="tsd-signature-type">void</span><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link"><a id="example-10" class="tsd-anchor"></a>Example<a href="#example-10" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">async</span><span class="hl-2"> </span><span class="hl-1">waitForInit</span><span class="hl-2">() {</span><br/><span class="hl-2"> </span><span class="hl-4">super</span><span class="hl-2">.</span><span class="hl-1">waitForInit</span><span class="hl-2">(); </span><span class="hl-0">// Keep parent logging</span><br/><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">exchange</span><span class="hl-2"> = </span><span class="hl-4">new</span><span class="hl-2"> </span><span class="hl-1">ExchangeClient</span><span class="hl-2">(</span><span class="hl-5">process</span><span class="hl-2">.</span><span class="hl-5">env</span><span class="hl-2">.</span><span class="hl-7">API_KEY</span><span class="hl-2">);</span><br/><span class="hl-2"> </span><span class="hl-6">await</span><span class="hl-2"> </span><span class="hl-4">this</span><span class="hl-2">.</span><span class="hl-5">exchange</span><span class="hl-2">.</span><span class="hl-1">authenticate</span><span class="hl-2">();</span><br/><span class="hl-2">}</span> | |
| </code><button type="button">Copy</button></pre> | |
| </div></div><aside class="tsd-sources"><p>Implementation of <a href="../interfaces/types.IBroker.html">IBroker</a>.<a href="../interfaces/types.IBroker.html#waitforinit">waitForInit</a></p><ul><li>Defined in <a href="https://github.com/tripolskypetr/backtest-kit/blob/b46ad698ac0e7123aa3667408fbdc063c547335d/types.d.ts#L30992">types.d.ts:30992</a></li></ul></aside></div></li></ul></section></section></details></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Constructors"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Constructors</summary><div><a href="#constructor" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Constructor"><use href="../assets/icons.svg#icon-512"></use></svg><span>constructor</span></a></div></details><details open class="tsd-accordion tsd-page-navigation-section"><summary class="tsd-accordion-summary" data-key="section-Methods"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Methods</summary><div><a href="#onaveragebuycommit" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Average<wbr/>Buy<wbr/>Commit</span></a><a href="#onbreakevencommit" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Breakeven<wbr/>Commit</span></a><a href="#onorderactivecheck" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Order<wbr/>Active<wbr/>Check</span></a><a href="#onorderclosecommit" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Order<wbr/>Close<wbr/>Commit</span></a><a href="#onorderopencommit" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Order<wbr/>Open<wbr/>Commit</span></a><a href="#onorderschedulecheck" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Order<wbr/>Schedule<wbr/>Check</span></a><a href="#onpartiallosscommit" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Partial<wbr/>Loss<wbr/>Commit</span></a><a href="#onpartialprofitcommit" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Partial<wbr/>Profit<wbr/>Commit</span></a><a href="#onsignalactiveping" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Active<wbr/>Ping</span></a><a href="#onsignalidleping" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Idle<wbr/>Ping</span></a><a href="#onsignalpendingclose" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Pending<wbr/>Close</span></a><a href="#onsignalpendingopen" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Pending<wbr/>Open</span></a><a href="#onsignalschedulecancelled" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Schedule<wbr/>Cancelled</span></a><a href="#onsignalscheduleopen" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Schedule<wbr/>Open</span></a><a href="#onsignalscheduleping" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Signal<wbr/>Schedule<wbr/>Ping</span></a><a href="#ontrailingstopcommit" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Trailing<wbr/>Stop<wbr/>Commit</span></a><a href="#ontrailingtakecommit" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>on<wbr/>Trailing<wbr/>Take<wbr/>Commit</span></a><a href="#waitforinit" class=""><svg class="tsd-kind-icon" viewBox="0 0 24 24" aria-label="Method"><use href="../assets/icons.svg#icon-2048"></use></svg><span>wait<wbr/>For<wbr/>Init</span></a></div></details></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">backtest-kit</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html> | |
| <!-- Yandex.Metrika counter --> | |
| <script type="text/javascript"> | |
| (function(m,e,t,r,i,k,a){ | |
| m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; | |
| m[i].l=1*new Date(); | |
| for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} | |
| k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a) | |
| })(window, document,'script','https://mc.yandex.ru/metrika/tag.js?id=105455585', 'ym'); | |
| ym(105455585, 'init', {ssr:true, webvisor:true, clickmap:true, ecommerce:"dataLayer", accurateTrackBounce:true, trackLinks:true}); | |
| </script> | |
| <noscript><div><img src="https://mc.yandex.ru/watch/105455585" style="position:absolute; left:-9999px;" alt="" /></div></noscript> | |
| <!-- /Yandex.Metrika counter --> | |
| <!-- Google tag (gtag.js) --> | |
| <script async src="https://www.googletagmanager.com/gtag/js?id=G-3MQZEBBDDR"></script> | |
| <script> | |
| window.dataLayer = window.dataLayer || []; | |
| function gtag(){dataLayer.push(arguments);} | |
| gtag('js', new Date()); | |
| gtag('config', 'G-3MQZEBBDDR'); | |
| </script> | |