2026-05-05 16:44:10 +02:00
<svg width= "100%" viewBox= "0 0 680 920" xmlns= "http://www.w3.org/2000/svg" role= "img" >
2026-05-09 18:06:51 +02:00
<title> NexQuant data flow architecture</title>
2026-05-05 16:44:10 +02:00
<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" > 2020– 2026 · 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>