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.
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
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.
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.