Разработчик создал приложение на .NET 10 для фильтрации 13 420 активных тикеров из базы данных, содержащей 16 066 записей. Система обрабатывает 14,5 миллиона дневных баров, хранящихся в локальном файле SQLite объемом около 2 ГБ.

Приложение использует конвейер фильтров, включая анализ тренда по EMA50 и EMA200, расчет ранга относительной силы и проверку объемов. Делистнутые и неактивные бумаги исключаются из расчетов, чтобы не искажать показатели по всей вселенной акций.

Для оптимизации производительности используются один последовательный запрос к базе за последние 500 торговых дней, ручной парсинг дат и переиспользование строк тикеров для экономии памяти. Параллельная обработка данных реализована через PLINQ.

Ранг относительной силы рассчитывается как процентиль доходности за 63 торговых дня среди живых бумаг. Для стабильности результатов применяется устойчивая сортировка, а для выборок из одного элемента присваивается нейтральный 50-й ранг.

Архитектура исключает использование внешних серверов. Проект включает 867 тестов на xUnit и визуализацию через ScottPlot. Обработка ошибок в параллельном цикле настроена так, чтобы сбой при анализе одного тикера не прерывал работу всего сканера.