Loading...
Loading...
Mean-variance portfolio optimization via Conjugate Gradient — 40-60× faster than the legacy Neumann path (ADR-126 Phase 3, ADR-123 Wedge 8)
npx skill4agent add ruvnet/ruflo trader-portfolio-cgΣ · x = μnpx neural-trader --portfolio optimizeRUFLO_NEURAL_TRADER_DISABLE_CG=1RUFLO_SUBLINEAR_NATIVE=1mcp__ruflo-sublinear__solveglobalThismethod: 'cg-local'npm ls neural-trader 2>/dev/null || npm install --ignore-scripts neural-trader# Primary path (preferred — clean JSON):
npx neural-trader --portfolio current --json
# Fallback paths if the --json flag is unavailable on the installed version:
npx neural-trader --portfolio current # parse the text output
# OR pull from AgentDB if a prior run stored the matrix there:mcp__claude-flow__memory_search({ query: "covariance matrix current", namespace: "trading-risk", limit: 1 })covariance: number[][]expectedReturns: number[]RUFLO_NEURAL_TRADER_DISABLE_CGimport { sublinearAdapter } from '../../src/sublinear-adapter.mjs';
const result = await sublinearAdapter.solveCG(COVARIANCE, EXPECTED_RETURNS, {
tolerance: 1e-6,
maxIterations: 200,
});
// result.solution — optimal weights (number[])
// result.iterations — CG iterations executed
// result.residual — final ||A·x − b||₂
// result.latencyMs — wall-clock latency
// result.method — 'cg-sublinear-native' | 'cg-local' <-- READ THIS
// result.solver — 'sublinear-time-solver@1.7.0' | 'local-js-cg'
// result.degraded — true if input failed SPD checks (fall back to step 4)mcp__ruflo-sublinear__solveglobalThisRUFLO_SUBLINEAR_NATIVE=1result.methodmcp__ruflo-sublinear__solve({
matrix: COVARIANCE,
rhs: EXPECTED_RETURNS,
algorithm: "cg",
tolerance: 1e-6,
maxIterations: 200
}){ solution: number[], iterations: number, residual: number }degraded: trueRUFLO_NEURAL_TRADER_DISABLE_CG=1npx neural-trader --portfolio optimizemethod: 'neumann-fallback'reasontrading-riskmethodsolvermcp__claude-flow__memory_store({
key: "portfolio-weights-PORTFOLIO_ID-TIMESTAMP",
namespace: "trading-risk",
value: JSON.stringify({
weights: result.solution, // number[] from step 3 (or weights from step 4 fallback)
method: result.method, // 'cg-sublinear-native' | 'cg-local' | 'neumann-fallback'
solver: result.solver, // 'sublinear-time-solver@1.7.0' | 'local-js-cg' | 'neural-trader-cli'
iterations: result.iterations,
residual: result.residual,
latencyMs: result.latencyMs,
capturedAt: NEW_DATE_ISO,
reason: FALLBACK_REASON || null
})
})trading-riskmcp__claude-flow__agentdb_pattern-search({
query: "portfolio weights Sharpe regime:CURRENT_REGIME",
namespace: "trading-risk"
})||cg − neumann||_∞ < 1e-4cg-sublinear-nativecg-localneumann-fallbackplugins/ruflo-neural-trader/src/sublinear-adapter.tsplugins/ruflo-neural-trader/benchmarks/portfolio-cg.bench.ts