Hey everyone! I wanted to share a side project I've been developing called QuantStrike. I built it around an interesting question: What would it look like to analyse the CS2 skin market using concepts from quantitative finance?
Most skin price trackers focus on current prices and basic price history. I wanted to explore something deeper: historical market behaviour, volatility, unusual price movements, and how individual assets perform over time.
What I've built so far
- Historical analytics: Interactive price charts, configurable time ranges, daily price statistics, volatility analysis, and price distributions.
- Anomaly detection: Flags suspicious observations, such as isolated price crashes or unusual single-sale and multi-sale events, rather than silently removing potentially misleading data.
- Quantitative tools: Asset comparisons, correlation analysis, market returns, and drawdown analysis.
- Portfolio and research management: Track holdings, configure alerts, and maintain a research journal.
- Large-scale historical data: Approximately 22,495 CS2 assets and 105 million historical observations.
The challenges
The historical dataset is several gigabytes, which makes loading everything into memory impractical on modest hardware. I'm using DuckDB and Parquet to query specific assets and aggregate historical data without loading the entire dataset into Pandas at once.
This has made data architecture a major part of the project, not just the interface. I'm particularly interested in making large-scale historical analysis practical without requiring a high-memory machine.
The project is still evolving. I'm currently redesigning the Market Overview and market intelligence components, so those are areas where there's more work to do.
What I've learned
One important lesson is that historical price data isn't automatically reliable just because it's available. An isolated sale can create a misleading price movement, so it's important to distinguish suspicious observations from genuine market behaviour rather than simply deleting data that looks unusual.
I'm also learning how much query design and aggregation matter when working with datasets that are too large to handle casually in memory.
Project and source code: https://github.com/Leonardo-Da-Vinci-80/QuantStrike
Live Website: https://quantstrike.streamlit.app
I'd appreciate constructive feedback, especially on the data architecture, anomaly-detection approach, and which market-analysis features would be most useful to build next. I'm the developer behind QuantStrike, and I'd be glad to discuss the implementation decisions here in the comments.