Quantitative AI

Autotrader

Autonomous market-research system that uses Kronos-base to forecast assets, build a simulated portfolio, rebalance automatically and record every decision.

Architecture, execution and strategy history

Autotrader

Autotrader is an autonomous paper-trading experiment. The system collects market data, runs Kronos-base, compares forecasts, applies fixed risk limits, simulates buys and sells, and persists the result through GitHub Actions without requiring manual decisions on each run.

OHLCV dataKronos-basePortfolio + riskGitHub Actions
20assets monitored
5maximum positions
18%max position weight
10%minimum cash
System map

From market data to portfolio history

The model does not place orders directly. It produces forecasts; a separate layer converts those signals into allocations under explicit limits and records the simulation.

End-to-end architecture
Market
20 liquid assetsUS stocks and ETFs
Daily OHLCVRecent history per asset
ValidationMissing data never becomes an order
Kronos-baseProbabilistic 5-session forecast
RankingExpected return per asset
Portfolio builderSelects eligible signals
Risk managementPosition and cash limits
Paper executorSimulated buys, sells and slippage
state.jsonCash, positions, trades and NAV
latest.jsonForecasts and run metrics
Public dashboardCharts, signals and history
Data → Kronos-base → ranking → constrained portfolio → simulated execution → public history.
Execution

What happens in each autonomous run

The workflow only persists a new state after dependencies, tests, market-data collection and inference complete successfully.

Execution agendada
PrepareCheckout, Python and model cache.
PinLoads the validated Kronos revision.
TestPortfolio and persistence tests must pass.
CollectDownloads daily history for 20 assets.
ForecastKronos-base forecasts the next five sessions.
RankExpected returns are ranked.
RebalanceApplies limits and simulates orders.
PersistState and report are written to main.
Engine and strategy

Forecasting and decision logic remain separate

Kronos is responsible for price forecasting. Autotrader converts that forecast into a portfolio without allowing the model to bypass limits defined in code.

System responsibilities
Engine and strategy do Autotrader AutotraderPortfolio orchestration DataValidated OHLCV Kronos-base5-session forecast RankingExpected-return score Paper executorSimulation + slippage Risk rulesLimits not delegated to the model
A larger model does not receive broader authority: risk rules remain outside Kronos and deterministic.
Selection

How signals become a portfolio

The initial strategy favors simplicity and auditability: only signals above the threshold qualify, the strongest are selected, and no asset can dominate the portfolio.

Allocation pipeline

Entrada

20 assets→Kronos-base→Expected return→Filter ≥ 1%→Top 5

Proteções

Max. 18% / ativo→Cash ≥ 10%→No margin→Thresholded rebalance
The result is a verifiable simulated portfolio. Model choice does not remove forecast, market-regime or data risk.
Governed updates

Upstream changes never enter the strategy blindly

The project tracks upstream Kronos, but never blindly pulls it into the active strategy. A candidate revision must pass tests before being pinned.

Safe Kronos update
01DetectNew upstream revision
02DownloadCandidate code and weights
03RegressionOfficial Kronos tests
04AutotraderPortfolio and risk tests
05CompatibilityEnd-to-end inference
06Failed?Keep previous version
07PassedUpdate pinned refs
08Next runNew revision becomes active
Upstream code is tested in a job without write permission; persistence remains a separate step.
Observability

The history becomes more than a JSON file

The files remain the data source, while the public interface turns the history into a continuous visual record.

Autotrader Dashboard
Paper PortfolioKronos-base
$9,991NAV
5positions
20assets analisados
AtivoSinalPeso
NFLX+25.25%18%
HD+12.31%18%
WMT+4.37%18%
Execution log● paper
Latest decisions
↗ BUY NFLX · 18%
↗ BUY HD · 18%
↗ BUY WMT · 18%
Future runs update the history automatically.
Data públicos e reproduzíveis
Persistence

Small persistent state, disposable execution

The GitHub runner can disappear after every job. The state required to continue the simulation remains in the repository, while the model and dependencies can be restored again.

Persistent vs ephemeral

GitHub Actions

Temporary runnerCPU, Python e PyTorch
Kronos-baseDownloaded/cached
Market dataCollected each run
InferênciaDiscarded after the job

Repository

state.jsonPortfolio and history
latest.jsonLatest analysis
Refs fixadosValidated revisions
DashboardPublic visualization
Real money is not part of this phase. Every execution shown in the dashboard is paper trading.
Trust and safety

Controls around every run

Automation does not mean absence of limits. The system is designed to fail without inventing prices, without persisting partial state, and without granting upstream code write permission.

Data incompletosAssets without enough history are skipped instead of generating an artificial position.
Previous markA temporarily missing quote uses the last known mark so a position is not zeroed by error.
SlippageSimulated buys and sells include execution cost instead of assuming perfect fills.
Permission separationInference runs read-only; only the persistence job receives contents: write.
ConcurrencyConcurrent runs are blocked so they cannot race over the same portfolio state.
Paper tradingNo broker credentials or real-money orders are active in this version.

A continuous experiment, not a hand-picked result

The goal is to let the system accumulate decisions and performance over time. Wins, errors, drawdowns and position changes remain visible in the same history.

Open Autotrader dashboard View code on GitHub