Files
NexQuant/docs/architecture.svg

159 lines
10 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<svg width="100%" viewBox="0 0 680 920" xmlns="http://www.w3.org/2000/svg" role="img">
<title>NexQuant data flow architecture</title>
<desc>Full pipeline from Qlib data source through R&D loop, factor and model tracks, strategy generation, portfolio optimization, to live trading.</desc>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto-start-reverse">
<path d="M2 1L8 5L2 9" fill="none" stroke="context-stroke" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
</marker>
<style>
text { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
.th { font-size: 14px; font-weight: 600; fill: #1a1a1a; }
.ts { font-size: 12px; font-weight: 400; fill: #555; }
.arr { stroke: #888; stroke-width: 1.2; fill: none; }
.box-blue { fill: #E6F1FB; stroke: #185FA5; }
.box-purple { fill: #EEEDFE; stroke: #534AB7; }
.th-purple { fill: #3C3489; }
.ts-purple { fill: #534AB7; }
.box-teal { fill: #E1F5EE; stroke: #0F6E56; }
.th-teal { fill: #085041; }
.ts-teal { fill: #0F6E56; }
.box-coral { fill: #FAECE7; stroke: #993C1D; }
.th-coral { fill: #712B13; }
.ts-coral { fill: #993C1D; }
.box-amber { fill: #FAEEDA; stroke: #854F0B; }
.th-amber { fill: #633806; }
.ts-amber { fill: #854F0B; }
.box-green { fill: #EAF3DE; stroke: #3B6D11; }
.th-green { fill: #27500A; }
.ts-green { fill: #3B6D11; }
.box-gray { fill: #F1EFE8; stroke: #5F5E5A; }
.th-gray { fill: #2C2C2A; }
.ts-gray { fill: #5F5E5A; }
.th-blue { fill: #0C447C; }
.ts-blue { fill: #185FA5; }
.container { fill: none; stroke: #B4B2A9; stroke-width: 0.5; }
.label-muted { font-size: 12px; fill: #888780; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
</style>
</defs>
<!-- DATA SOURCE -->
<rect x="200" y="20" width="280" height="56" rx="8" stroke-width="0.5" class="box-blue"/>
<text class="th th-blue" x="340" y="43" text-anchor="middle" dominant-baseline="central">Qlib data (1-min EUR/USD)</text>
<text class="ts ts-blue" x="340" y="63" text-anchor="middle" dominant-baseline="central">20202026 · 96 bars/day</text>
<line x1="340" y1="76" x2="340" y2="104" class="arr" marker-end="url(#arrow)"/>
<!-- R&D LOOP container -->
<rect x="40" y="104" width="600" height="190" rx="10" class="container"/>
<text class="label-muted" x="56" y="121" dominant-baseline="central">R&D loop (rdagent fin_quant)</text>
<rect x="56" y="132" width="100" height="56" rx="6" stroke-width="0.5" class="box-purple"/>
<text class="th th-purple" x="106" y="154" text-anchor="middle" dominant-baseline="central">Propose</text>
<text class="ts ts-purple" x="106" y="172" text-anchor="middle" dominant-baseline="central">LLM</text>
<line x1="156" y1="160" x2="170" y2="160" class="arr" marker-end="url(#arrow)"/>
<rect x="170" y="132" width="100" height="56" rx="6" stroke-width="0.5" class="box-purple"/>
<text class="th th-purple" x="220" y="154" text-anchor="middle" dominant-baseline="central">Coding</text>
<text class="ts ts-purple" x="220" y="172" text-anchor="middle" dominant-baseline="central">CoSTEER</text>
<line x1="270" y1="160" x2="284" y2="160" class="arr" marker-end="url(#arrow)"/>
<rect x="284" y="132" width="100" height="56" rx="6" stroke-width="0.5" class="box-purple"/>
<text class="th th-purple" x="334" y="154" text-anchor="middle" dominant-baseline="central">Running</text>
<text class="ts ts-purple" x="334" y="172" text-anchor="middle" dominant-baseline="central">Docker</text>
<line x1="384" y1="160" x2="398" y2="160" class="arr" marker-end="url(#arrow)"/>
<rect x="398" y="132" width="100" height="56" rx="6" stroke-width="0.5" class="box-purple"/>
<text class="th th-purple" x="448" y="154" text-anchor="middle" dominant-baseline="central">Feedback</text>
<text class="ts ts-purple" x="448" y="172" text-anchor="middle" dominant-baseline="central">LLM</text>
<line x1="498" y1="160" x2="512" y2="160" class="arr" marker-end="url(#arrow)"/>
<rect x="512" y="132" width="100" height="56" rx="6" stroke-width="0.5" class="box-purple"/>
<text class="th th-purple" x="562" y="154" text-anchor="middle" dominant-baseline="central">Record</text>
<text class="ts ts-purple" x="562" y="172" text-anchor="middle" dominant-baseline="central">Pickle</text>
<text class="label-muted" x="340" y="216" text-anchor="middle" dominant-baseline="central">Bandit selection → factor track or model track</text>
<!-- Split to two tracks -->
<path d="M210 294 L210 308 L470 308 L470 294" fill="none" stroke="#B4B2A9" stroke-width="0.5"/>
<line x1="210" y1="308" x2="210" y2="322" class="arr" marker-end="url(#arrow)"/>
<line x1="470" y1="308" x2="470" y2="322" class="arr" marker-end="url(#arrow)"/>
<text class="label-muted" x="340" y="478" text-anchor="middle">every N factors · auto or CLI</text>
<!-- FACTOR TRACK -->
<rect x="40" y="322" width="260" height="130" rx="8" stroke-width="0.5" class="box-teal"/>
<text class="th th-teal" x="170" y="344" text-anchor="middle" dominant-baseline="central">Factor track</text>
<text class="ts ts-teal" x="170" y="364" text-anchor="middle" dominant-baseline="central">Hypothesis → FactorCoSTEER</text>
<text class="ts ts-teal" x="170" y="382" text-anchor="middle" dominant-baseline="central">FactorRunner → FactorFeedback</text>
<text class="ts ts-teal" x="170" y="402" text-anchor="middle" dominant-baseline="central">Output: result.h5</text>
<text class="ts ts-teal" x="170" y="420" text-anchor="middle" dominant-baseline="central">MultiIndex DataFrame</text>
<text class="ts ts-teal" x="170" y="438" text-anchor="middle" dominant-baseline="central">IC / Sharpe metrics</text>
<!-- MODEL TRACK -->
<rect x="380" y="322" width="260" height="130" rx="8" stroke-width="0.5" class="box-coral"/>
<text class="th th-coral" x="510" y="344" text-anchor="middle" dominant-baseline="central">Model track</text>
<text class="ts ts-coral" x="510" y="364" text-anchor="middle" dominant-baseline="central">Hypothesis → ModelCoSTEER</text>
<text class="ts ts-coral" x="510" y="382" text-anchor="middle" dominant-baseline="central">ModelRunner → ModelFeedback</text>
<text class="ts ts-coral" x="510" y="402" text-anchor="middle" dominant-baseline="central">Output: PyTorch preds</text>
<text class="ts ts-coral" x="510" y="420" text-anchor="middle" dominant-baseline="central">+ mlflow logs</text>
<text class="ts ts-coral" x="510" y="438" text-anchor="middle" dominant-baseline="central">LSTM / Transformer / CNN</text>
<!-- Merge to strategy -->
<path d="M170 452 L170 486 L340 486 L340 502" fill="none" stroke="#B4B2A9" stroke-width="0.5" marker-end="url(#arrow)"/>
<path d="M510 452 L510 486 L340 486" fill="none" stroke="#B4B2A9" stroke-width="0.5"/>
<!-- STRATEGY GENERATION -->
<rect x="100" y="502" width="480" height="120" rx="8" stroke-width="0.5" class="box-amber"/>
<text class="th th-amber" x="340" y="524" text-anchor="middle" dominant-baseline="central">Strategy generation pipeline</text>
<rect x="116" y="536" width="120" height="44" rx="6" stroke-width="0.5" class="box-gray"/>
<text class="ts th-gray" x="176" y="554" text-anchor="middle" dominant-baseline="central">Load top factors</text>
<text class="ts ts-gray" x="176" y="570" text-anchor="middle" dominant-baseline="central">by |IC|</text>
<line x1="236" y1="558" x2="252" y2="558" class="arr" marker-end="url(#arrow)"/>
<rect x="252" y="536" width="120" height="44" rx="6" stroke-width="0.5" class="box-gray"/>
<text class="ts th-gray" x="312" y="554" text-anchor="middle" dominant-baseline="central">LLM strategy</text>
<text class="ts ts-gray" x="312" y="570" text-anchor="middle" dominant-baseline="central">code gen</text>
<line x1="372" y1="558" x2="388" y2="558" class="arr" marker-end="url(#arrow)"/>
<rect x="388" y="536" width="120" height="44" rx="6" stroke-width="0.5" class="box-gray"/>
<text class="ts th-gray" x="448" y="554" text-anchor="middle" dominant-baseline="central">OHLCV backtest</text>
<text class="ts ts-gray" x="448" y="570" text-anchor="middle" dominant-baseline="central">signals eval</text>
<text class="label-muted" x="340" y="600" text-anchor="middle" dominant-baseline="central">Optuna: 10 → 15 → 5 trials · Sharpe ≥ 1.5 · DD ≥ 0.30 · WR ≥ 0.40</text>
<line x1="340" y1="622" x2="340" y2="648" class="arr" marker-end="url(#arrow)"/>
<!-- PORTFOLIO -->
<rect x="160" y="648" width="360" height="56" rx="8" stroke-width="0.5" class="box-green"/>
<text class="th th-green" x="340" y="670" text-anchor="middle" dominant-baseline="central">Portfolio optimization</text>
<text class="ts ts-green" x="340" y="688" text-anchor="middle" dominant-baseline="central">Mean-variance · Risk parity · Black-Litterman</text>
<line x1="340" y1="704" x2="340" y2="730" class="arr" marker-end="url(#arrow)"/>
<!-- LIVE TRADING -->
<rect x="160" y="730" width="360" height="56" rx="8" stroke-width="0.5" class="box-gray"/>
<text class="th th-gray" x="340" y="752" text-anchor="middle" dominant-baseline="central">Live trading (closed-source)</text>
<text class="ts ts-gray" x="340" y="770" text-anchor="middle" dominant-baseline="central">ftmo_live_trader.py · FTMO signals</text>
<!-- EXTERNAL SERVICES -->
<text class="label-muted" x="340" y="812" text-anchor="middle">External services</text>
<rect x="40" y="824" width="130" height="44" rx="6" stroke-width="0.5" class="box-gray"/>
<text class="ts th-gray" x="105" y="842" text-anchor="middle" dominant-baseline="central">llama.cpp</text>
<text class="ts ts-gray" x="105" y="858" text-anchor="middle" dominant-baseline="central">LLM inference</text>
<rect x="185" y="824" width="130" height="44" rx="6" stroke-width="0.5" class="box-gray"/>
<text class="ts th-gray" x="250" y="842" text-anchor="middle" dominant-baseline="central">Docker</text>
<text class="ts ts-gray" x="250" y="858" text-anchor="middle" dominant-baseline="central">sandbox</text>
<rect x="330" y="824" width="130" height="44" rx="6" stroke-width="0.5" class="box-gray"/>
<text class="ts th-gray" x="395" y="842" text-anchor="middle" dominant-baseline="central">Optuna</text>
<text class="ts ts-gray" x="395" y="858" text-anchor="middle" dominant-baseline="central">Bayesian opt</text>
<rect x="475" y="824" width="130" height="44" rx="6" stroke-width="0.5" class="box-gray"/>
<text class="ts th-gray" x="540" y="842" text-anchor="middle" dominant-baseline="central">Qlib</text>
<text class="ts ts-gray" x="540" y="858" text-anchor="middle" dominant-baseline="central">backtest engine</text>
</svg>