Перейти к содержанию

Скринер акций — архитектура модуля

Фронтенд (hadl-front)

Файлы

  • View: src/views/AnalyticsShares.vue — страница скринера
  • Store: src/stores/analyticsShares.js — состояние, фильтры, сортировка, загрузка данных
  • Роут: /shares-analytics (name: sharesAnalytics), доступен без авторизации (guestRoutes)
  • Навигация: App.vue (десктоп-меню), MobileMenu.vue (мобильное меню) → раздел "Скринеры"

Колонки таблицы

КолонкаfieldСортировкаФильтр
Тикерasset--
ISINisin--
Ценаcurrent_rate--
За деньprice_change_percentage_24hда-
За неделюprice_change_percentage_7dда-
Див. доходностьdividend_yieldда-
Капитализацияmarket_capда (по умолч.)-
Объём торговtrading_volumeда-
Категорияcategory-да
Странаcountry-да (country_code)

API endpoints

  • Авторизованный: GET /api/shares?page=...
  • Анонимный: GET /api/public/shares?page=...
  • Категории: GET /api/public/shares/categories
  • Страны: GET /api/public/shares/countries

Бэкенд (cryptodiary)

Файлы

  • Controller: app/Http/Controllers/ShareController.phpindex(), getCategories()
  • Model: app/Models/Share.php → scope withDividendYield()
  • Model: app/Models/ShareCategory.php → связь shares()
  • Migration: 2026_03_22_220000_add_market_cap_and_trading_volume_to_shares_table.php
  • Command: app/Console/Commands/UpdateSharesMarketStats.php (update:shares-market-stats)
  • MOEX API: app/Services/MoexApiService.phpgetSharesMarketStats()

Колонки shares (новые)

  • market_cap — капитализация (ISSUECAPITALIZATION из MOEX ISS)
  • trading_volume — объём торгов (VALTODAY из MOEX ISS)

Дивидендная доходность

Рассчитывается SQL-подзапросом в scopeWithDividendYield():

  • Сумма дивидендов на ближайшие 12 месяцев / текущая цена * 100
  • Логика аналогична DividendsOverview.vue на фронте

MOEX ISS endpoint

https://iss.moex.com/iss/engines/stock/markets/shares/securities.json

  • Блок marketdata: SECID, ISSUECAPITALIZATION, VALTODAY
  • Обновление: update:shares-market-stats → ежедневно в 01:45

Расписание (Kernel.php)

$schedule->command('update:shares-market-stats')->dailyAt('01:45')->runInBackground();

Паттерн (аналогия с облигациями)

Скринер акций построен по той же архитектуре, что и скринер облигаций:

  • AnalyticsBonds.vueAnalyticsShares.vue
  • analyticsBonds.jsanalyticsShares.js
  • BondController::index()ShareController::index()