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>demo/optimization/readme | 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="demo_optimization_readme.html">demo/optimization/readme</a></li></ul></div><div class="tsd-panel tsd-typography"><a id="ai-strategy-optimizer" class="tsd-anchor"></a><h1 class="tsd-anchor-link">AI Strategy Optimizer<a href="#ai-strategy-optimizer" 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></h1><blockquote> | |
| <p>Link to <a href="https://github.com/tripolskypetr/backtest-kit/tree/master/demo/optimization">the source code</a></p> | |
| </blockquote> | |
| <p>Automated trading strategy generation system using LLM-powered analysis and backtest-kit framework.</p> | |
| <a id="purpose" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Purpose<a href="#purpose" 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></h2><p>Demonstrates AI-driven strategy optimization capabilities for:</p> | |
| <ul> | |
| <li>Multi-timeframe market data analysis (1h, 30m, 15m, 1m candles)</li> | |
| <li>LLM-based pattern recognition and strategy generation</li> | |
| <li>Automated strategy comparison and validation</li> | |
| <li>Data-driven trading decision recommendations</li> | |
| </ul> | |
| <a id="key-features" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Key Features<a href="#key-features" 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></h2><ul> | |
| <li> | |
| <p><strong>Multi-Timeframe Analysis</strong>: 4 data sources with different granularity levels</p> | |
| <ul> | |
| <li>Long-term (1h candles): 48h lookback with Fibonacci levels</li> | |
| <li>Swing-term (30m candles): 96 candles with volume/volatility analysis</li> | |
| <li>Short-term (15m candles): Fast indicators and ROC metrics</li> | |
| <li>Micro-term (1m candles): 60 candles with squeeze momentum and pressure index</li> | |
| </ul> | |
| </li> | |
| <li> | |
| <p><strong>LLM Integration</strong>: Ollama-powered strategy generation (deepseek-v3.1:671b)</p> | |
| </li> | |
| <li> | |
| <p><strong>Training/Testing Split</strong>: 7-day training period → 1-day validation</p> | |
| </li> | |
| <li> | |
| <p><strong>Walker Framework</strong>: Automatic strategy comparison and ranking</p> | |
| </li> | |
| <li> | |
| <p><strong>Progress Monitoring</strong>: Real-time optimization tracking</p> | |
| </li> | |
| <li> | |
| <p><strong>Rich Indicators</strong>: 50+ technical indicators across all timeframes</p> | |
| <ul> | |
| <li>RSI, Stochastic RSI, MACD, ADX, ATR, CCI</li> | |
| <li>Bollinger Bands, Moving Averages (SMA, EMA, DEMA, WMA)</li> | |
| <li>Support/Resistance levels, Momentum, ROC</li> | |
| <li>Volume analysis, Volatility metrics</li> | |
| </ul> | |
| </li> | |
| </ul> | |
| <a id="technology-stack" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Technology Stack<a href="#technology-stack" 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></h2><ul> | |
| <li><strong>Runtime</strong>: Node.js (ES Modules)</li> | |
| <li><strong>Framework</strong>: backtest-kit 1.4.3</li> | |
| <li><strong>AI Provider</strong>: Ollama (deepseek-v3.1:671b model)</li> | |
| <li><strong>Utilities</strong>: functools-kit 1.0.93</li> | |
| <li><strong>Data Source</strong>: node-ccxt-dumper API</li> | |
| </ul> | |
| <a id="project-structure" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Project Structure<a href="#project-structure" 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></h2><pre><code><span class="hl-4">demo</span><span class="hl-1">/</span><span class="hl-4">optimization</span><span class="hl-1">/</span><br/><span class="hl-1">├── </span><span class="hl-4">src</span><span class="hl-1">/</span><br/><span class="hl-1">│ └── </span><span class="hl-4">index</span><span class="hl-1">.</span><span class="hl-4">mjs</span><span class="hl-1"> # </span><span class="hl-4">Main</span><span class="hl-1"> </span><span class="hl-4">optimizer</span><span class="hl-1"> </span><span class="hl-4">configuration</span><br/><span class="hl-1">├── </span><span class="hl-4">generated</span><span class="hl-1">/ # </span><span class="hl-8">AI</span><span class="hl-1">-</span><span class="hl-4">generated</span><span class="hl-1"> </span><span class="hl-4">strategy</span><span class="hl-1"> </span><span class="hl-0">code</span><span class="hl-1"> (</span><span class="hl-4">output</span><span class="hl-1">)</span><br/><span class="hl-1">├── </span><span class="hl-4">package</span><span class="hl-1">.</span><span class="hl-4">json</span><span class="hl-1"> # </span><span class="hl-4">Dependencies</span><span class="hl-1"> </span><span class="hl-4">and</span><span class="hl-1"> </span><span class="hl-4">scripts</span><br/><span class="hl-1">└── </span><span class="hl-8">README</span><span class="hl-1">.</span><span class="hl-4">md</span><span class="hl-1"> # </span><span class="hl-4">This</span><span class="hl-1"> </span><span class="hl-4">file</span> | |
| </code><button>Copy</button></pre> | |
| <a id="installation-and-setup" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Installation and Setup<a href="#installation-and-setup" 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></h2><pre><code class="bash"><span class="hl-6"># Navigate to project directory</span><br/><span class="hl-0">cd</span><span class="hl-1"> </span><span class="hl-2">demo/optimization</span><br/><br/><span class="hl-6"># Install dependencies</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">install</span><br/><br/><span class="hl-6"># Set environment variables</span><br/><span class="hl-3">export</span><span class="hl-1"> </span><span class="hl-4">OLLAMA_API_KEY</span><span class="hl-1">=</span><span class="hl-4">your_ollama_api_key</span><br/><br/><span class="hl-6"># Run optimizer</span><br/><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">start</span> | |
| </code><button type="button">Copy</button></pre> | |
| <a id="configuration" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Configuration<a href="#configuration" 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></h2><a id="environment-variables" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Environment Variables<a href="#environment-variables" 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><p>Create a <code>.env</code> file or set environment variables:</p> | |
| <pre><code class="env">OLLAMA_API_KEY=your_ollama_api_key | |
| CCXT_DUMPER_URL=node-ccxt-dumper-instance | |
| </code><button type="button">Copy</button></pre> | |
| <a id="training-configuration" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Training Configuration<a href="#training-configuration" 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><p>The optimizer is pre-configured for BTCUSDT with:</p> | |
| <ul> | |
| <li><strong>Training Period</strong>: November 24-30, 2025 (7 days)</li> | |
| <li><strong>Testing Period</strong>: December 1, 2025 (1 day)</li> | |
| <li><strong>Symbol</strong>: BTCUSDT</li> | |
| <li><strong>Data Source</strong>: <a href="https://github.com/tripolskypetr/node-ccxt-dumper">node-ccxt-dumper</a></li> | |
| </ul> | |
| <a id="data-sources" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Data Sources<a href="#data-sources" 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><ol> | |
| <li><strong>long-term-range</strong> - 1h candles with Fibonacci analysis</li> | |
| <li><strong>swing-term-range</strong> - 30m candles with volume/volatility</li> | |
| <li><strong>short-term-range</strong> - 15m candles with ROC metrics</li> | |
| <li><strong>micro-term-range</strong> - 1m candles with pressure index</li> | |
| </ol> | |
| <a id="usage-examples" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Usage Examples<a href="#usage-examples" 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></h2><a id="basic-usage" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Basic Usage<a href="#basic-usage" 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><p>Run the optimizer to generate strategies:</p> | |
| <pre><code class="bash"><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">start</span> | |
| </code><button type="button">Copy</button></pre> | |
| <p>Output:</p> | |
| <pre><code><span class="hl-10">Progress</span><span class="hl-1">: </span><span class="hl-7">14.285714285714286</span><span class="hl-1">%</span><br/><span class="hl-10">Progress</span><span class="hl-1">: </span><span class="hl-7">28.571428571428573</span><span class="hl-1">%</span><br/><span class="hl-10">Progress</span><span class="hl-1">: </span><span class="hl-7">42.857142857142854</span><span class="hl-1">%</span><br/><span class="hl-10">Progress</span><span class="hl-1">: </span><span class="hl-7">57.14285714285714</span><span class="hl-1">%</span><br/><span class="hl-10">Progress</span><span class="hl-1">: </span><span class="hl-7">71.42857142857143</span><span class="hl-1">%</span><br/><span class="hl-10">Progress</span><span class="hl-1">: </span><span class="hl-7">85.71428571428571</span><span class="hl-1">%</span><br/><span class="hl-10">Progress</span><span class="hl-1">: </span><span class="hl-7">100</span><span class="hl-1">%</span> | |
| </code><button>Copy</button></pre> | |
| <p>Generated file: <code>./generated/btc-optimizer_BTCUSDT.mjs</code></p> | |
| <a id="running-generated-strategies" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Running Generated Strategies<a href="#running-generated-strategies" 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><p>After generation, execute the strategy comparison:</p> | |
| <pre><code class="bash"><span class="hl-0">node</span><span class="hl-1"> </span><span class="hl-2">./generated/btc-optimizer_BTCUSDT.mjs</span> | |
| </code><button type="button">Copy</button></pre> | |
| <p>This will:</p> | |
| <ol> | |
| <li>Initialize 7 strategies (one per training day)</li> | |
| <li>Run Walker comparison on test data</li> | |
| <li>Rank strategies by performance (Sharpe Ratio)</li> | |
| <li>Output best strategy statistics</li> | |
| </ol> | |
| <a id="customizing-symbols" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Customizing Symbols<a href="#customizing-symbols" 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><p>Modify <code>src/index.mjs</code> to analyze different cryptocurrencies:</p> | |
| <pre><code class="javascript"><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-4">Optimizer</span><span class="hl-1">.</span><span class="hl-0">dump</span><span class="hl-1">(</span><br/><span class="hl-1"> </span><span class="hl-2">"ETHUSDT"</span><span class="hl-1">, </span><span class="hl-6">// Change symbol</span><br/><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">optimizerName:</span><span class="hl-1"> </span><span class="hl-2">"btc-optimizer"</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-2">"./generated"</span><br/><span class="hl-1">);</span> | |
| </code><button type="button">Copy</button></pre> | |
| <a id="adjusting-time-ranges" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Adjusting Time Ranges<a href="#adjusting-time-ranges" 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><p>Edit training/testing periods in <code>src/index.mjs</code>:</p> | |
| <pre><code class="javascript"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-8">TRAIN_RANGE</span><span class="hl-1"> = [</span><br/><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">note:</span><span class="hl-1"> </span><span class="hl-2">"Custom period 1"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">startDate:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">Date</span><span class="hl-1">(</span><span class="hl-2">"2025-01-01T00:00:00Z"</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-4">endDate:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">Date</span><span class="hl-1">(</span><span class="hl-2">"2025-01-01T23:59:59Z"</span><span class="hl-1">),</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-6">// Add more training periods...</span><br/><span class="hl-1">];</span><br/><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-8">TEST_RANGE</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-4">note:</span><span class="hl-1"> </span><span class="hl-2">"Validation period"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-4">startDate:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">Date</span><span class="hl-1">(</span><span class="hl-2">"2025-01-08T00:00:00Z"</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-4">endDate:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-0">Date</span><span class="hl-1">(</span><span class="hl-2">"2025-01-08T23:59:59Z"</span><span class="hl-1">),</span><br/><span class="hl-1">};</span> | |
| </code><button type="button">Copy</button></pre> | |
| <a id="how-it-works" class="tsd-anchor"></a><h2 class="tsd-anchor-link">How It Works<a href="#how-it-works" 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></h2><a id="phase-1-data-collection" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Phase 1: Data Collection<a href="#phase-1-data-collection" 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><p>For each training period (7 days):</p> | |
| <ol> | |
| <li>Fetches data from 4 sources (long/swing/short/micro-term)</li> | |
| <li>Formats data with technical indicator descriptions</li> | |
| <li>Builds conversation context for LLM</li> | |
| </ol> | |
| <a id="phase-2-strategy-generation" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Phase 2: Strategy Generation<a href="#phase-2-strategy-generation" 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><p>For each training period:</p> | |
| <ol> | |
| <li>LLM analyzes historical patterns</li> | |
| <li>Generates trading strategy with entry/exit rules</li> | |
| <li>Creates fundamental analysis with market recommendations</li> | |
| <li>Stores strategy prompt and configuration</li> | |
| </ol> | |
| <a id="phase-3-code-generation" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Phase 3: Code Generation<a href="#phase-3-code-generation" 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><ol> | |
| <li>Generates complete executable <code>.mjs</code> file</li> | |
| <li>Includes: | |
| <ul> | |
| <li>Exchange configuration (Binance via CCXT)</li> | |
| <li>Frame definitions (training + testing periods)</li> | |
| <li>7 strategy implementations</li> | |
| <li>Walker setup for comparison</li> | |
| <li>Event listeners for progress tracking</li> | |
| </ul> | |
| </li> | |
| </ol> | |
| <a id="phase-4-validation" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Phase 4: Validation<a href="#phase-4-validation" 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><p>Generated code runs Walker to:</p> | |
| <ol> | |
| <li>Execute all strategies on test data</li> | |
| <li>Calculate performance metrics (Sharpe Ratio, Win Rate, PNL)</li> | |
| <li>Rank strategies by selected metric</li> | |
| <li>Output best-performing strategy</li> | |
| </ol> | |
| <a id="llm-prompt-engineering" class="tsd-anchor"></a><h2 class="tsd-anchor-link">LLM Prompt Engineering<a href="#llm-prompt-engineering" 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></h2><p>The system uses strategic prompting for better strategy generation:</p> | |
| <pre><code class="javascript"><span class="hl-6">// System prompt</span><br/><span class="hl-2">"В ответ напиши торговую стратегию где нет ничего лишнего</span><span class="hl-12">,</span><br/><span class="hl-4">только</span><span class="hl-1"> </span><span class="hl-4">отчёт</span><span class="hl-1"> </span><span class="hl-4">готовый</span><span class="hl-1"> </span><span class="hl-4">для</span><span class="hl-1"> </span><span class="hl-4">копипасты</span><span class="hl-1"> </span><span class="hl-4">целиком</span><br/><br/><span class="hl-1">**</span><span class="hl-8">ВАЖНО</span><span class="hl-1">**: </span><span class="hl-4">Не</span><span class="hl-1"> </span><span class="hl-4">здоровайся</span><span class="hl-1">, </span><span class="hl-4">не</span><span class="hl-1"> </span><span class="hl-4">говори</span><span class="hl-1"> </span><span class="hl-4">что</span><span class="hl-1"> </span><span class="hl-4">делаешь</span><span class="hl-1"> - </span><span class="hl-4">только</span><span class="hl-1"> </span><span class="hl-4">отчёт</span><span class="hl-1">!</span><span class="hl-2">"</span><br/><br/><span class="hl-2">// User promp</span><span class="hl-12">t</span><br/><span class="hl-2">`На каких условиях мне купить </span><span class="hl-3">${</span><span class="hl-4">symbol</span><span class="hl-3">}</span><span class="hl-2">?</span><br/><span class="hl-2">Дай анализ рынка на основе поддержки/сопротивления, точек входа в LONG/SHORT позиции.</span><br/><span class="hl-2">Какой RR ставить для позиций?</span><br/><span class="hl-2">Предпочтительны LONG или SHORT позиции?</span><br/><br/><span class="hl-2">Сделай не сухой технический, а фундаментальный анализ,</span><br/><span class="hl-2">содержащий стратигическую рекомендацию, например, покупать на низу боковика`</span> | |
| </code><button type="button">Copy</button></pre> | |
| <p>This encourages:</p> | |
| <ul> | |
| <li>Concise, actionable strategies</li> | |
| <li>Support/resistance analysis</li> | |
| <li>Risk/reward ratios</li> | |
| <li>Long/short position preferences</li> | |
| <li>Fundamental (not just technical) analysis</li> | |
| </ul> | |
| <a id="performance-metrics" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Performance Metrics<a href="#performance-metrics" 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></h2><p>Generated strategies are evaluated by:</p> | |
| <ul> | |
| <li><strong>Sharpe Ratio</strong>: Risk-adjusted returns</li> | |
| <li><strong>Win Rate</strong>: Percentage of profitable trades</li> | |
| <li><strong>Average PNL</strong>: Mean profit/loss per trade</li> | |
| <li><strong>Total PNL</strong>: Cumulative profit/loss</li> | |
| <li><strong>Certainty Ratio</strong>: avgWin / |avgLoss|</li> | |
| <li><strong>Max Drawdown</strong>: Largest peak-to-trough decline</li> | |
| <li><strong>Expected Yearly Returns</strong>: Annualized profit estimate</li> | |
| </ul> | |
| <a id="economic-benefits" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Economic Benefits<a href="#economic-benefits" 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></h2><ul> | |
| <li><strong>Automated Strategy Development</strong>: LLM generates strategies from raw data</li> | |
| <li><strong>Data-Driven Decisions</strong>: 50+ indicators across 4 timeframes</li> | |
| <li><strong>Backtesting Validation</strong>: Historical performance verification</li> | |
| <li><strong>Strategy Diversity</strong>: 7 different approaches per optimization run</li> | |
| <li><strong>Time Savings</strong>: Minutes vs. days of manual strategy development</li> | |
| <li><strong>Reproducibility</strong>: Deterministic code generation from data</li> | |
| </ul> | |
| <a id="advanced-customization" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Advanced Customization<a href="#advanced-customization" 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></h2><a id="adding-new-data-sources" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Adding New Data Sources<a href="#adding-new-data-sources" 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><pre><code class="javascript"><span class="hl-8">SOURCE_LIST</span><span class="hl-1">.</span><span class="hl-0">push</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-4">name:</span><span class="hl-1"> </span><span class="hl-2">"custom-indicators"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">fetch</span><span class="hl-4">:</span><span class="hl-1"> </span><span class="hl-3">async</span><span class="hl-1"> ({ </span><span class="hl-4">symbol</span><span class="hl-1">, </span><span class="hl-4">startDate</span><span class="hl-1">, </span><span class="hl-4">endDate</span><span class="hl-1">, </span><span class="hl-4">limit</span><span class="hl-1">, </span><span class="hl-4">offset</span><span class="hl-1"> }) </span><span class="hl-3">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">// Fetch custom data</span><br/><span class="hl-1"> </span><span class="hl-5">return</span><span class="hl-1"> </span><span class="hl-4">data</span><span class="hl-1">.</span><span class="hl-4">rows</span><span class="hl-1">;</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-0">user</span><span class="hl-4">:</span><span class="hl-1"> (</span><span class="hl-4">symbol</span><span class="hl-1">, </span><span class="hl-4">data</span><span class="hl-1">) </span><span class="hl-3">=></span><span class="hl-1"> </span><span class="hl-4">str</span><span class="hl-1">.</span><span class="hl-0">newline</span><span class="hl-1">(</span><br/><span class="hl-1"> </span><span class="hl-2">"=== CUSTOM INDICATORS ==="</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-8">JSON</span><span class="hl-1">.</span><span class="hl-0">stringify</span><span class="hl-1">(</span><span class="hl-4">data</span><span class="hl-1">)</span><br/><span class="hl-1"> ),</span><br/><span class="hl-1"> </span><span class="hl-0">assistant</span><span class="hl-4">:</span><span class="hl-1"> () </span><span class="hl-3">=></span><span class="hl-1"> </span><span class="hl-2">"Custom data received"</span><br/><span class="hl-1">});</span> | |
| </code><button type="button">Copy</button></pre> | |
| <a id="changing-llm-model" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Changing LLM Model<a href="#changing-llm-model" 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><pre><code class="javascript"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-8">response</span><span class="hl-1"> = </span><span class="hl-5">await</span><span class="hl-1"> </span><span class="hl-4">ollama</span><span class="hl-1">.</span><span class="hl-0">chat</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-4">model:</span><span class="hl-1"> </span><span class="hl-2">"llama3:70b"</span><span class="hl-1">, </span><span class="hl-6">// Use different model</span><br/><span class="hl-1"> </span><span class="hl-4">messages:</span><span class="hl-1"> [...]</span><br/><span class="hl-1">});</span> | |
| </code><button type="button">Copy</button></pre> | |
| <a id="custom-optimizer-callbacks" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Custom Optimizer Callbacks<a href="#custom-optimizer-callbacks" 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><pre><code class="javascript"><span class="hl-0">addOptimizer</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-4">optimizerName:</span><span class="hl-1"> </span><span class="hl-2">"btc-optimizer"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">// ... existing config</span><br/><span class="hl-1"> </span><span class="hl-4">callbacks:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-0">onSourceData</span><span class="hl-4">:</span><span class="hl-1"> (</span><span class="hl-4">symbol</span><span class="hl-1">, </span><span class="hl-4">sourceName</span><span class="hl-1">, </span><span class="hl-4">data</span><span class="hl-1">) </span><span class="hl-3">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">`✓ Fetched </span><span class="hl-3">${</span><span class="hl-4">data</span><span class="hl-9">.</span><span class="hl-4">length</span><span class="hl-3">}</span><span class="hl-2"> rows from </span><span class="hl-3">${</span><span class="hl-4">sourceName</span><span class="hl-3">}</span><span class="hl-2">`</span><span class="hl-1">);</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-0">onData</span><span class="hl-4">:</span><span class="hl-1"> (</span><span class="hl-4">symbol</span><span class="hl-1">, </span><span class="hl-4">strategies</span><span class="hl-1">) </span><span class="hl-3">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">`✓ Generated </span><span class="hl-3">${</span><span class="hl-4">strategies</span><span class="hl-9">.</span><span class="hl-4">length</span><span class="hl-3">}</span><span class="hl-2"> strategies`</span><span class="hl-1">);</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-0">onCode</span><span class="hl-4">:</span><span class="hl-1"> (</span><span class="hl-4">symbol</span><span class="hl-1">, </span><span class="hl-4">code</span><span class="hl-1">) </span><span class="hl-3">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-4">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">`✓ Code generated: </span><span class="hl-3">${</span><span class="hl-4">code</span><span class="hl-9">.</span><span class="hl-4">length</span><span class="hl-3">}</span><span class="hl-2"> bytes`</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span> | |
| </code><button type="button">Copy</button></pre> | |
| <a id="related-projects" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Related Projects<a href="#related-projects" 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></h2><ul> | |
| <li><a href="https://github.com/tripolskypetr/backtest-kit">backtest-kit</a> - Trading framework</li> | |
| <li><a href="https://github.com/tripolskypetr/node-ccxt-dumper">node-ccxt-dumper</a> - Historical data API</li> | |
| <li><a href="https://www.npmjs.com/package/functools-kit">functools-kit</a> - Utility functions</li> | |
| </ul> | |
| <a id="license" class="tsd-anchor"></a><h2 class="tsd-anchor-link">License<a href="#license" 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></h2><p>MIT © <a href="https://github.com/tripolskypetr">tripolskypetr</a></p> | |
| </div></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"><a href="#ai-strategy-optimizer"><span>AI <wbr/>Strategy <wbr/>Optimizer</span></a><ul><li><a href="#purpose"><span>Purpose</span></a></li><li><a href="#key-features"><span>Key <wbr/>Features</span></a></li><li><a href="#technology-stack"><span>Technology <wbr/>Stack</span></a></li><li><a href="#project-structure"><span>Project <wbr/>Structure</span></a></li><li><a href="#installation-and-setup"><span>Installation and <wbr/>Setup</span></a></li><li><a href="#configuration"><span>Configuration</span></a></li><li><ul><li><a href="#environment-variables"><span>Environment <wbr/>Variables</span></a></li><li><a href="#training-configuration"><span>Training <wbr/>Configuration</span></a></li><li><a href="#data-sources"><span>Data <wbr/>Sources</span></a></li></ul></li><li><a href="#usage-examples"><span>Usage <wbr/>Examples</span></a></li><li><ul><li><a href="#basic-usage"><span>Basic <wbr/>Usage</span></a></li><li><a href="#running-generated-strategies"><span>Running <wbr/>Generated <wbr/>Strategies</span></a></li><li><a href="#customizing-symbols"><span>Customizing <wbr/>Symbols</span></a></li><li><a href="#adjusting-time-ranges"><span>Adjusting <wbr/>Time <wbr/>Ranges</span></a></li></ul></li><li><a href="#how-it-works"><span>How <wbr/>It <wbr/>Works</span></a></li><li><ul><li><a href="#phase-1-data-collection"><span>Phase 1: <wbr/>Data <wbr/>Collection</span></a></li><li><a href="#phase-2-strategy-generation"><span>Phase 2: <wbr/>Strategy <wbr/>Generation</span></a></li><li><a href="#phase-3-code-generation"><span>Phase 3: <wbr/>Code <wbr/>Generation</span></a></li><li><a href="#phase-4-validation"><span>Phase 4: <wbr/>Validation</span></a></li></ul></li><li><a href="#llm-prompt-engineering"><span>LLM <wbr/>Prompt <wbr/>Engineering</span></a></li><li><a href="#performance-metrics"><span>Performance <wbr/>Metrics</span></a></li><li><a href="#economic-benefits"><span>Economic <wbr/>Benefits</span></a></li><li><a href="#advanced-customization"><span>Advanced <wbr/>Customization</span></a></li><li><ul><li><a href="#adding-new-data-sources"><span>Adding <wbr/>New <wbr/>Data <wbr/>Sources</span></a></li><li><a href="#changing-llm-model"><span>Changing LLM <wbr/>Model</span></a></li><li><a href="#custom-optimizer-callbacks"><span>Custom <wbr/>Optimizer <wbr/>Callbacks</span></a></li></ul></li><li><a href="#related-projects"><span>Related <wbr/>Projects</span></a></li><li><a href="#license"><span>License</span></a></li></ul></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> | |