Equity: $94,897
Fullständig systembeskrivning Senast uppdaterad: 11/16/2025 5:15:07 AM:yyyy-MM-dd Version 1.0

MoneyGen Trading Platform – Systemöversikt

Denna sida beskriver samtliga delar av MoneyGen-plattformen: arkitektur, strategier, API:er, Azure Functions, integrerade tjänster och dataflöden. Använd den som referens när du behöver förstå hur systemet är uppbyggt eller planerar vidareutveckling.

Systemarkitektur

MoneyGen består av ett Blazor Server-gränssnitt som kommunicerar med en uppsättning Azure Functions. Funktionerna integrerar i sin tur med Alpaca Markets (trading och marknadsdata), Azure Table Storage, Azure Event Hubs och interna tjänster såsom tekniska indikatorer, backtesting och rate limiting.

Blazor Server (MoneyGen.Web) • Dashboard, Completed Trades, Discovery • Strategy Stats & Backtest • Trading ON/OFF, Paper/Live toggle • Chart.js med historiska bar-data Azure Functions – HTTP API • PositionsApi, CompletedTradesApi, StrategyStatsApi • BacktestApi, StrategyConfigApi, HealthApi • SignalsApi, OrdersApi, WatchlistApi • SwaggerApi (dokumentation) Respons: JSON DTOs till frontend Delade tjänster • AlpacaRateLimiter (global throttling + retry) • AlpacaClientFactory (Paper/Live-switch) • TechnicalIndicators (RSI/SMA) • BacktestService, StrategyConfigService • RiskManagementService, ITableStore Azure Functions – Realtidsjobb • MarketStreamHandler (signalprocess) • PositionWatcherFunction (exit-logik) • MarketClosePositionCloser • TradeExecutorFunction • StockDiscoveryAgent Integrationer & Lagring • Alpaca Markets (Data & Orders) • Azure Table Storage (positions, trades, config) • Azure Event Hubs (watchlist, orders) • Application Insights (telemetri) • MemoryCache (indikatorer, config)

Inkommande trafik

  • • Blazor Server renderar UI och gör HTTP-anrop mot Azure Functions via `IMoneyGenApi`.
  • • Swagger UI (`/api/swagger`) visar dokumentationen över alla endpoints.
  • • Externa klienter kan nyttja samma Azure Functions-endpoints (skyddade via Functions-key eller auth).

Utgående trafik

  • • Azure Functions kallar Alpaca API (order, data) via rate limiter.
  • • Azure Table Storage används för positions- och konfigurationsdata.
  • • Event Hubs används för att publicera watchlist och buy-signal meddelanden.

Frontend – MoneyGen.Web (Blazor Server)

Blazor Server står för användarupplevelsen och ordnar realtidsuppdateringar via SignalR. Huvudkomponenter:

Komponent Beskrivning Nyckelfunktioner
Index.razor Huvuddashboard med KPI:er, öppna positioner, market trends, trading switch och Alpaca-status. • Handelskontroller (Trading ON/OFF, Paper/Live)
• Positionslistor med volym/kurvor
• Timer-styrd refresh, stoppas när detaljvy är öppen
CompletedTrades.razor Historik över avslutade trades med filter, volymstatistik och diagram som laddas vid expandering. • Strategi- & PnL-filter
• On-demand historik med retry
• Volym vs normal volym, max/min pris
StrategyStats.razor Detaljerad analys per strategi. • PnL-over-time grafer
• Win rate, Sharpe, Profit factor
• Hämtar data via StrategyStatsApi
StrategyTuning.razor UI för att visa AI-agentens tuning-beslut och parameterjusteringar. • Listar tuning-beslut med status (Applied/Skipped)
• Visar parameterändringar och rational
• Filter på antal dagar (7/14/30)
• Hämtar data via StrategyTuningApi
Backtest.razor UI för att konfigurera och köra backtests. • Formulär för strategi/period
• Multival av tickers (Ctrl/Cmd) med aggregerat resultat
• Resultattabell, equity curve och profilswitch
• Anropar BacktestApi.RunBacktest
HelpSystemOverview.razor (denna sida) Dokumentation över systemets arkitektur och komponenter. • Arkitekturdiagram
• Strategi- och API-översikt
• Handelsflöden och drift

Frontend kommunikation

  • HTTP-klient (typed) med 60s timeout och optional Function-key för att nå Azure Functions.
  • ToastService ger feedback vid trading toggles, manual stängning, API-fel.
  • JS interop för Chart.js-rendering och dokumenterade event (accordion expand/collapse).
  • Caching på klientsidan för positions- och tradehistorik för att minska API-belastning.

Backend – Azure Functions (isolated .NET 9)

Backend styrs av Program.cs som registrerar DI-tjänster (TechnicalIndicators, BacktestService, AlpacaClientFactory, RateLimiter, StrategyConfigService, etc.). Funktionerna kan grupperas enligt nedan.

HTTP API-funktioner

Funktion Endpoint Beskrivning
PositionsApi GET /positions
GET /positions/{symbol}/history
POST /positions/close-all
Listar öppna positioner med volym/entry time, hämtar historiska bars med retry/chunking, stänger samtliga positioner (calling TradeExecutor).
CompletedTradesApi GET /completed-trades
GET /completed-trades/{rowKey}/history
Returnerar avslutade trades, räknar ut volym-metrik i batchede parallella anrop med global timeout och retry. Historik använder GetHistoricalBarsWithRetryAsync.
StrategyStatsApi GET /strategy-stats Sammanställer DetailedStrategyStatsDto (win rate, profit factor, sharpe, drawdown, PnL-over-time).
BacktestApi POST /backtest/run Kör backtest via BacktestService; stödjer både enskild och multi-symbol körning, aggregerar resultat och genererar trades/equity curve med Alpaca historical data (inkl. rate limiting och retry).
StrategyConfigApi GET /strategy-config
PUT /strategy-config/current
POST /strategy-config/invalidate-cache
Läser och sparar strategikonfiguration till Table Storage samt invalidater cache (inkl. TradingMode).
StrategyApi GET/PUT /strategies Alternativ konfigurering för strategier via IStrategySettingsStore.
SignalsApi GET /signals
GET /signals/{rowKey}/history
Hämtar signaler från Table Storage, historik med retry + 20s timeout, fail-closed vid datafördröjning.
OrdersApi GET /orders Returnerar Alpaca-orders (öppna och historiska).
HealthApi GET /health/alpaca Gör klock- och data-check mot Alpaca inom 10 sekunder, returnerar ServiceHealthDto i UI.
DiscoverySuggestionsApi GET /discovery-suggestions Returnerar AI-generatorns watchlist-förslag.
LogsApi GET /logs Proxy mot Application Insights (för att visa loggar i UI).
AccountApi GET /account Returnerar kontoinformation (portfolio value, cash, equity) med 15s timeout.
WatchlistApi GET /watchlist
POST /watchlist
DELETE /watchlist/{ticker}
Hantera AI- och användargenererad watchlist, skyddar mot duplicering.
StrategyTuningApi GET /strategy-tuning/decisions?days=7 Returnerar tuning-beslut från AI-agenten. Visar både applicerade och hoppade över ändringar med parameterjusteringar och status.
AlpacaMonitoringApi POST /alpaca-monitoring/analyze
POST /alpaca-monitoring/rate-limiting
POST /alpaca-monitoring/issues
Analyserar Azure loggar för att övervaka Alpaca API-anrop, verifiera rate limiting och identifiera problem.
MarketEventsApi GET /api/market-events
GET /api/market-events/earnings
GET /api/market-events/political
Hämtar market events (earnings, politiska händelser) med impact assessment på strategier.
SwaggerApi GET /swagger.json
GET /swagger
Genererar OpenAPI 3.0 JSON och hostar Swagger UI med dokumentation över alla endpoints.

Delade tjänster i DI

  • AlpacaRateLimiter – global Semaphore (max 3 samtidiga), min 200 ms delay mellan anrop, exponentiell backoff med jitter för 429/5xx.
  • AlpacaClientFactory – skapar trading/data-klienter baserat på TradingMode, fallback till Paper om live-nycklar saknas.
  • TechnicalIndicators – beräknar RSI (14 perioder) och SMA/SMACross, med caching av historik.
  • BacktestService – simulerar strategier mot historiska bars, stöder entry/exit-parametrar och genererar trade-lista.
  • StrategyConfigService – läser/skriv config till Table Storage, cache:ar 15 min, exponerar GetTradingModeAsync.
  • RiskManagementService – kontrollerar max daglig förlust, drawdown, max positioner, min win rate.
  • TableStore – wrapper runt Table Storage för positions, trades, signals, discovery suggestions m.m.
  • StrategyTuningAiAdvisor – analyserar strategiperformance med Azure AI eller OpenAI och föreslår parameterjusteringar.
  • StrategyTuningHeuristicEngine – regelbaserad fallback för tuning-beslut när AI inte är tillgänglig.
  • StrategyTuningOrchestrator – koordinerar AI Advisor och Heuristic Engine (prioriterar AI).
  • StrategyTuningApplicationService – applicerar tuning-beslut med guardrails och cooldowns.
  • StrategyTuningDecisionStore – lagrar tuning-beslut och deras utfall i Table Storage.
  • StrategyConfigWriter – persisterar strategikonfigurationsändringar till Table Storage.
  • AlpacaMonitoringService – analyserar Azure loggar för att övervaka Alpaca API-anrop, identifiera problem och verifiera rate limiting.
  • SocialMediaDiscoveryService – scannar Reddit, Flashback, Avanza och andra kanaler för aktieuppkomlingar med AI-analys för sentiment och potential.
  • MarketRegimeService – analyserar SPY/QQQ och klassificerar bull/bear/sideways med 15 min cache för adaptiv strategiaktivering.
  • MarketEventsService – övervakar earnings announcements och politiska händelser, bedömer impact på strategier och ger rekommendationer.

Schemalagda & event-drivna funktioner

Dessa funktioner hanterar realtidshandel, övervakning och dataförädling:

Funktion Trigger Ansvar Nyckeldetaljer
MarketStreamHandler Event Hub (ticker-feed) + Timer Genererar signaler för Spike, Dip & Bounce, Trend Following och Swing. • Hämtar quotes/bars via Alpaca RateLimiter
• Volymkontroll, RSI/SMA-filter (fail-closed)
• MaxConcurrentQuotes = 3, 300 ms paus mellan tickers
PositionWatcherFunction Timer Övervakar öppna positioner för exit-regler. • Loggar detaljer vid stop-loss
• Kontrollerar trailing, max hold, take profit
• Använder ITradeExecutor för exit
MarketClosePositionCloser Timer (inför close) Stänger day-trade-positioner innan marknaden stänger. • Fortsätter även om marknaden redan stängt
• Loggar varningar vid misslyckad stängning
TradeExecutorFunction Event (order request) Lägger order, hanterar idempotens, sparar completed trades. • Använder AlpacaClientFactory
• Räknar ut max/min pris via historiska minute bars
• Uppdaterar Table Storage med completed trades
StockDiscoveryAgent Timer (daglig) Analyserar kandidataktier och genererar AI-förklaringar. • Skippar watchlistade tickers
• 3 samtidiga analyser + 300 ms delay
• Detaljerad reason text per rekommendation
• Integrerar social media-discoveries
SocialMediaDiscoveryAgent Timer (var 6:e timme) Scannar Reddit, Flashback, Avanza och andra kanaler för aktieuppkomlingar med AI-analys. • Scannar Reddit-subreddits (US + svenska)
• Scannar Flashback Aktieforum för svenska aktier
• Scannar Avanza Forum för svenska aktier
• Använder AI för sentiment-analys och scoring
• Fokuserar på tech, miljö, energi-sektorer
• Scannar både US market och svenska börsmarknaden
MarketEventsScheduler Timer (08:00 UTC dagligen) Övervakar market events (earnings, politiska händelser) och bedömer impact på strategier. • Hämtar kommande earnings (Finnhub API eller Yahoo Finance)
• Hämtar politiska händelser (placeholder för nyhets-API)
• Bedömer impact på strategier med confidence scoring
• Tillämpar high-confidence recommendations automatiskt
• Skickar email-sammanfattning av signifikanta events
• Lägger till earnings-aktier i watchlist automatiskt
StrategyTuningScheduler Timer (02:00 UTC dagligen) Kör AI-agenten för automatisk strategituning baserat på performance. • Analyserar strategiperformance (60 dagars lookback)
• Använder Azure AI eller OpenAI för tuning-förslag
• Fallback till heuristik om AI inte är tillgänglig
• Applicerar ändringar med guardrails och cooldowns
• Skickar email-notifikationer med sammanfattning
StrategyConfigSeederFunction
AdvancedStrategySeederFunction
Manuell/Timer Initierar default strategikonfigurationer i Table Storage. • Säkerställer baseline-konfigurationer för nya miljöer

Strategier & riskmoduler

MoneyGen tillhandahåller flera samverkande strategier. Nedan beskrivs deras logik och hur de implementeras.

  • Triggeras i MarketStreamHandler när priset stiger ≥ konfigurerat tröskelvärde inom ett fönster.
  • Kräver projicerad dagsvolym ≥ volymmultiplikator × 20-dagars genomsnitt.
  • Fail-closed: Om volymdata inte kan hämtas blockeras signalen.
  • Signal skickas via Event Hub till TradeExecutor för orderläggning.
Exit: kontrolleras av PositionWatcherFunction, med 1–3% take profit/stop loss + trailing och 24h max hold.

  • Identifierar prisfall följt av återhämtning med definierade procenttal och tidsfönster.
  • Valbart RSI-filter kräver RSI under ett tröskelvärde (standard 35).
  • Använder samma volymkontroll som Spike för att säkerställa giltiga signaler.
  • Fail-closed vid misslyckad indikatorberäkning eller API-timeout.
  • Exit sker via samma modul som Spike (take profit/stop loss/trailing).

  • Kopplat till watchlistposter med strategitaggen "SwingTrading".
  • Discovery Score från StockDiscoveryAgent måste ligga över konfigurerat threshold.
  • Momentum: priset måste ha stigit ≥ X% över Y dagar (dagliga bars via Alpaca).
  • Volym: senaste momentumperiodens volym ≥ multiplikator × tidigare period.
  • Valfria filter: SMA-short > SMA-long, RSI ≥ threshold för bekräftad trend.
  • Exit-parametrar: större take profit/stop loss, trailing, max hold i dagar.
  • Cooldown i dagar för att undvika att köpa samma ticker för tätt.
Observera: Swing trading använder dagliga bars och kräver därför minst momentumPeriod + 1 dagar historik. Vid otillräcklig data blockeras signalen (fail-closed).

RiskManagementService

  • Stoppar handel efter max daglig förlust eller drawdown.
  • Övervakar win rate (lookback N trades) och kan blockera handelsstrategier.
  • Begränsar max antal samtidiga positioner och max risk per trade.
  • Integreras i TradeExecutor innan order skickas.

PositionSizing

  • Basrisk per trade (t.ex. 0.5% av kapital) med justeringar för volatilitet (ATR).
  • Reducerar storlek vid hög volatilitet och ökar försiktigt vid låg volatilitet.
  • Kan vikta storlek efter win rate (ökar när strategin går bra).
  • Returnerar antal kontrakt/aktier som skickas till TradeExecutor.

Förinställda profilpaket

StrategyConfig innehåller fyra förkonfigurerade paket som kan appliceras från Strategy Settings och Backtest:

Profil TP / SL Max hold Position size Beskrivning
UltraConservative 1.5% / 0.5% 8 h 5% Mjukare dip/spike-trösklar (−1.5% / +1.5%) och längre fönster för minimal risk.
Conservative 2.5% / 1.0% 12 h 10% Standardprofil med försiktiga dip/spikevärden (−2.0%, +2.0%).
Balanced 3.0% / 1.5% 8 h 10% Default baseline – rekommenderad tuning för de flesta marknadslägen.
Aggressive 3.5% / 1.5% 6 h 15% Snabbare fönster (2–5 min) och större dipkrav (−3.0%) för högre risk.

AI Strategy Tuning Agent

AI-agenten analyserar strategiperformance automatiskt och föreslår parameterjusteringar för att optimera resultatet. Systemet stödjer både Azure AI (rekommenderat) och OpenAI, med automatisk fallback till regelbaserad heuristik.

Arkitektur

StrategyTuningAiAdvisor

  • Analyserar strategiperformance med Azure AI eller OpenAI
  • Genererar tuning-förslag baserat på win rate, trade count och P&L
  • Stödjer både Azure AI (prioriterat) och OpenAI
  • Returnerar tom lista om AI inte är konfigurerad

StrategyTuningHeuristicEngine

  • Regelbaserad fallback när AI inte är tillgänglig
  • Utvärderar Spike, DipBounce och Risk-strategier
  • Föreslår justeringar baserat på win rate och trade count
  • Används automatiskt om AI Advisor returnerar inga beslut

StrategyTuningOrchestrator

  • Koordinerar AI Advisor och Heuristic Engine
  • Prioriterar AI-förslag, fallback till heuristik
  • Returnerar lista med tuning-beslut

StrategyTuningApplicationService

  • Applicerar tuning-beslut med guardrails
  • Kontrollerar cooldowns per strategi
  • Validerar max delta per run
  • Sparar beslut och utfall i Table Storage

Konfiguration

Azure AI (Rekommenderat)

Konfigurera i local.settings.json eller App Settings:

  • AzureAI__Endpoint - Azure OpenAI endpoint URL
  • AzureAI__ApiKey - API-nyckel
  • AzureAI__Deployment - Deployment-namn (default: "gpt-4o-mini")
OpenAI (Alternativ)

Om Azure AI inte är konfigurerad, används OpenAI:

  • OpenAI__ApiKey - API-nyckel
  • OpenAI__Model - Modellnamn (default: "gpt-4o-mini")
Gemensamma inställningar
  • AI__MaxTokens - Max tokens per request (default: 1000)
  • AI__Temperature - Temperature för AI-respons (default: 0.7)

Tuning-inställningar

Tuning-inställningar konfigureras i StrategyConfig.Tuning:

Inställning Beskrivning
AutoTuningEnabled Aktiverar/deaktiverar automatisk tuning (default: false)
Mode Auto (automatisk applicering) eller Suggest (kräver manuellt godkännande)
MinimumTradesForAdjustment Minsta antal trades som krävs för tuning (default: 20)
MaxThresholdDeltaPerRun Max total delta för threshold-parametrar per körning (default: 1.0%)
MaxExitDeltaPerRun Max total delta för exit-parametrar per körning (default: 0.5%)
Spike.CooldownHours Timmar mellan tuning-ändringar för Spike-strategin (default: 24)
DipBounce.CooldownHours Timmar mellan tuning-ändringar för DipBounce-strategin (default: 24)

Guardrails & Säkerhet

  • Guardrails: Begränsar totala parameterändringar per körning för att förhindra aggressiva justeringar
  • Cooldowns: Förhindrar för ofta tuning-ändringar per strategi
  • Minimum trades: Kräver tillräckligt med data innan tuning
  • AutoExecutable flag: AI kan markera beslut som kräver manuellt godkännande
  • Logging: Alla tuning-beslut loggas med status, parameterändringar och rational

UI & Monitoring

Tuning-beslut kan visas i /strategy-tuning:

  • Listar alla tuning-beslut med status (Applied/SkippedManual/SkippedGuardrail/SkippedCooldown)
  • Visar parameterändringar med gamla och nya värden
  • Filter på antal dagar (7/14/30)
  • Email-notifikationer skickas automatiskt när tuning körs

Alpaca API Monitoring

Övervakningssystemet analyserar Azure loggar för att verifiera att Alpaca API-anrop beter sig som förväntat och identifierar problem som behöver åtgärdas.

Funktionalitet

Analyze Alpaca Calls

  • Analyserar Alpaca API-anrop från Azure loggar
  • Beräknar success rate och identifierar fel
  • Detekterar rate limit-fel (429)
  • Identifierar timeout-fel och serverfel

Verify Rate Limiting

  • Verifierar att rate limiting fungerar korrekt
  • Analyserar genomsnittliga och maximala fördröjningar
  • Identifierar när rate limiter är för aggressiv
  • Rekommenderar justeringar vid behov

Identify Issues

  • Identifierar alla problem i loggarna
  • Kategoriserar efter severity (Critical/High/Moderate/Low)
  • Grupperar liknande fel för enklare analys
  • Genererar rekommendationer för åtgärder

Identifierade Problem

Problemtyp Severity Beskrivning
RateLimitExceeded High Alpaca API rate limits överskrids. Överväg att öka fördröjningar i AlpacaRateLimiter.
Unauthorized Critical 401-fel indikerar problem med API-nycklar. Kontrollera konfiguration.
Forbidden Critical 403-fel indikerar behörighetsproblem. Kontrollera API-nycklar och kontobehörigheter.
ServerError High 500/502/503-fel från Alpaca API. Kontrollera Alpaca service status.
Timeout Moderate API-anrop timeout. Kontrollera nätverksanslutning och överväg att öka timeout-värden.
HighAverageDelay Moderate Genomsnittlig rate limiter-fördröjning > 1 sekund. Rate limiter kan vara för aggressiv.

Konfiguration

Application Insights

För att använda monitoring behöver Application Insights vara konfigurerat:

  • AppInsights__AppId - Application Insights Application ID
  • AppInsights__ApiKey - API-nyckel för Application Insights REST API

UI & Monitoring

Monitoring kan köras via /alpaca-monitoring-sidan:

  • Tre analysknappar för olika typer av verifiering
  • Visar metrics (total calls, success rate, failed calls, rate limit hits)
  • Listar alla identifierade problem med severity och detaljer
  • Genererar rekommendationer baserat på identifierade problem
  • Kan analysera loggar från valfritt tidsintervall (default: senaste 24 timmarna)

AI Social Media Discovery Agent

AI-agenten scannar olika sociala medier (Reddit, Twitter) för att identifiera aktieuppkomlingar med potential, särskilt inom tech, miljö och energi-sektorer. Systemet använder AI för sentiment-analys och scoring.

Funktionalitet

Reddit Scanning

  • Scannar flera subreddits (r/wallstreetbets, r/stocks, r/investing, etc.)
  • Inkluderar svenska subreddits (r/Aktiemarknaden, r/ISKbets)
  • Extraherar ticker-nämningar från posts och kommentarer
  • Identifierar fokus-sektorer (tech, miljö, energi)

Flashback Aktieforum

  • Scannar Flashback Aktieforum (f2) för svenska aktie-mentioner
  • Extraherar tickers i format: VOLV:, [VOLV], eller VOLV
  • Validerar mot kända svenska tickers (VOLV, ERIC, ATCO, etc.)
  • Extraherar metadata: svar, visningar, uppskattat datum
  • Identifierar sektorer: Tech, Miljö, Energi, Finance, Industri

Avanza Forum

  • Scannar Avanza Forum för svenska aktie-diskussioner
  • Fokuserar på aktier-sektionen och trending discussions
  • Extraherar likes, svar och engagement metrics
  • Använder samma ticker-validering som Flashback
  • Rate limiting och deduplicering för respektfull scraping

Twitter Scanning

  • Pågående utveckling - kommer snart
  • Planerat: Scanna Twitter för fokus-nyckelord och ticker-nämningar

AI Analysis

  • Använder Azure AI eller OpenAI för sentiment-analys
  • Beräknar potential score (0-100)
  • Identifierar pump-and-dump vs legitim momentum
  • Genererar detaljerade förklaringar

Market Coverage

  • Scannar både US market och svenska börsmarknaden
  • Stödjer både US tickers ($AAPL) och svenska (.ST)
  • Filtrerar false positives
  • Integrerar med befintlig Discovery-tjänst

Fokus-sektorer

Tech

AI, software, cloud, cybersecurity, technology

Miljö

Climate, green, renewable, solar, wind, battery

Energi

Clean energy, electric, EV, hydrogen, energy

Scoring & Ranking

Discoveries rankas baserat på:

  • Mention Count: Antal gånger aktien nämns i sociala medier
  • Engagement: Likes, retweets, upvotes på inlägg
  • Sentiment: AI-analys av positiv/negativ sentiment
  • Sector Match: Bonus för tech, miljö, energi-sektorer
  • Potential Score: AI-bedömning av aktiens potential (0-100)

Integration

Social media-discoveries integreras med den befintliga Discovery-tjänsten:

  • SocialMediaDiscoveryAgent körs var 6:e timme och sparar discoveries med score >= 70
  • StockDiscoveryAgent inkluderar social media-discoveries i sin analys
  • Discoveries med hög score (>= 90) kan triggera akuta notifikationer
  • Alla discoveries sparas i DiscoverySuggestions-tabellen

Konfiguration

AI Provider

Använder samma AI-konfiguration som Strategy Tuning:

  • AzureAI__Endpoint - Azure OpenAI endpoint (rekommenderat)
  • AzureAI__ApiKey - API-nyckel
  • OpenAI__ApiKey - Alternativ: OpenAI API-nyckel
Twitter API

Twitter-scanning kräver Twitter API v2 med OAuth 2.0. Implementering är placeholder tills API-nycklar är konfigurerade.

Market Events Detection

Market Events Service övervakar marknadshändelser som kan påverka trading-strategier, inklusive earnings announcements och politiska händelser.

Funktionalitet

Earnings Detection

  • Hämtar kommande earnings från Finnhub API (gratis tier: 60 calls/min)
  • Fallback till Yahoo Finance scraping om API inte är konfigurerat
  • Identifierar earnings inom 7 dagar framåt
  • Bedömer impact baserat på närhet till earnings-datum
  • Rekommendationer: ReduceRisk (24h), AddToWatchlist (3 dagar), Monitor (7 dagar)

Political Events Detection

  • Pågående utveckling - placeholder för nyhets-API-integration
  • Planerat: Scanna nyheter för politiska händelser (tullar, handelskrig, Fed-beslut)
  • Identifierar påverkade sektorer (Tech, Finance, Industri, etc.)
  • Bedömer impact-nivå (Low, Medium, High, Critical)
  • Rekommendationer: AdjustStrategy (High/Critical), Monitor (Medium)

Impact Assessment

Systemet bedömer impact på strategier med confidence scoring (0.0 - 1.0):

  • ReduceRisk: Minska position sizes, tätare stop losses (earnings inom 24h)
  • AddToWatchlist: Lägg till i watchlist för övervakning (earnings inom 3 dagar)
  • AdjustStrategy: Justera strategiparametrar (politiska händelser med High/Critical impact)
  • Monitor: Övervaka marknadsreaktion (earnings inom 7 dagar, Medium impact events)

Automatisk Strategi-justering

MarketEventsScheduler körs dagligen kl 08:00 UTC (före marknadsöppning):

  • Analyserar alla events och bedömer impact på strategier
  • Tillämpar high-confidence recommendations (confidence >= 0.7) automatiskt
  • Skickar email-sammanfattning av signifikanta events
  • Lägger till earnings-aktier i watchlist automatiskt
  • Integrerar med MarketStreamHandler för real-time varningar

Konfiguration

Earnings API (Valfritt men rekommenderat)

För bästa resultat, konfigurera Finnhub API key:

FINNHUB_API_KEY=your_api_key_here

Gratis tier: 60 calls/minut. Registrera på finnhub.io. Om API key inte är konfigurerad används Yahoo Finance scraping som fallback.

Automatiserade Tester

Systemet innehåller automatiserade enhetstester för att verifiera att AI Strategy Tuning Agent fungerar korrekt. Testerna använder xUnit.net och Moq för att simulera olika scenarion.

Teststruktur

StrategyTuningHeuristicEngineTests

Testar heuristic engine-regler:

  • Spike Win Rate Too Low: Verifierar att threshold ökas när win rate är för låg (<40%)
  • DipBounce Low Win Rate: Verifierar att dip-parametrar justeras för djupare dips
  • Drawdown Above Limit: Verifierar att risk-hantering aktiveras vid hög drawdown

StrategyTuningApplicationServiceTests

Testar application layer:

  • Auto Decision Applied: Verifierar att auto-executable beslut appliceras och sparas
  • Guardrail Protection: Verifierar att för stora ändringar blockeras
  • Cooldown Protection: Verifierar att cooldown-perioder respekteras

Köra Tester

Kommando Beskrivning
dotnet test MoneyGen.Tests/MoneyGen.Tests.csproj Kör alla tester i testprojektet
dotnet test MoneyGen.Tests/MoneyGen.Tests.csproj --verbosity normal Kör tester med detaljerad output
dotnet test MoneyGen.Tests/MoneyGen.Tests.csproj --filter "FullyQualifiedName~StrategyTuningApplicationServiceTests" Kör endast StrategyTuningApplicationServiceTests
dotnet test MoneyGen.Tests/MoneyGen.Tests.csproj --filter "FullyQualifiedName~RunAsync_AppliesAutoDecisionAndPersistsChanges" Kör ett specifikt test
dotnet test MoneyGen.sln Kör alla tester i solution
dotnet watch test MoneyGen.Tests/MoneyGen.Tests.csproj Kör tester i watch mode (automatiskt vid filändringar)

Test Coverage

Testerna täcker följande funktionalitet:

  • Heuristic Engine: Regelbaserad logik för när tuning ska föreslås baserat på performance-metrics
  • Application Layer: Guardrails, cooldowns, persistering av ändringar
  • Parameter Changes: Verifiering att parameterändringar appliceras korrekt
  • Decision Outcomes: Verifiering att beslut sparas med korrekt status (Applied/SkippedGuardrail/SkippedCooldown)

Test Data & Mocking

Testerna använder fake implementations (mocks) för att isolera testlogiken:

  • FakeConfigService: Simulerar strategikonfiguration
  • FakeConfigWriter: Verifierar att ändringar sparas
  • FakeDecisionStore: Verifierar att beslut sparas korrekt
  • FakeOrchestrator: Simulerar AI/heuristic-beslut
Test Framework

Testerna använder xUnit.net som test framework och Moq för mocking. Alla tester är asynkrona och använder async/await för att simulera verkliga användningsfall.

API-översikt

Swagger-dokumentation nås via /api/swagger. Sammanfattning av viktiga endpoints:

Path Metod Beskrivning
/positions GET Lista aktuella positioner med volym, entry time, P/L och aggregatorer.
/positions/{symbol}/history GET Historiska minute bars (gårdag + idag) med retry och chunk fetching.
/positions/close-all POST Stänger alla öppna positioner; returnerar antal stängda och felmeddelanden.
/completed-trades GET Lista completed trades med volymstatistik, filtrering, caching fallback.
/completed-trades/{rowKey}/history GET Minute bars under tradeperioden för att rita kurvor.
/strategy-stats GET Hämtar `DetailedStrategyStatsDto` med PnL över tid per strategi.
/backtest POST Kör backtest baserat på BacktestRequestDto.
/strategy-config GET/PUT Läser/sparar master-konfiguration. PUT kräver full payload, använder Table Storage.
/strategy-config/invalidate-cache POST Rensar servercache för strategiinställningar (inkl. trading mode).
/signals GET Returnerar senaste handelssignaler med paging/filter.
/signals/{rowKey}/history GET Hämtar bars runt signal-tidpunkt med 20s timeout och retry.
/orders GET Hämtar orderstatus (open eller completed) från Alpaca.
/health/alpaca GET Returnerar status med länk till Alpacas status-sida och detaljerad feltext.
/discovery-suggestions GET Returnerar AI-genererade watchlistförslag med detaljerad reason-text.
/watchlist GET/POST/DELETE Hantera watchlisten (inkl. strategi-taggar, noteringar).
/account GET Returnerar kontovärden (equity, cash, buying power).
Alla endpoints finns dokumenterade i OpenAPI-specen (/api/swagger.json) vilket kan användas för klientgenerering.

Datahantering & integrationer

Azure Table Storage

  • Positions – Öppna positioner med metadata (EntryTime, Volume).
  • CompletedTrades – Avslutade trades (PnL, Max/Min pris, volymratio).
  • StrategyConfig – Master-config och trading mode.
  • Signals – Historiska handelssignaler.
  • DiscoverySuggestions – AI-förslag med reason-text.
  • DailyCounters / DaySummaries – Aggregationer (för framtida dashboards).

Alpaca Markets

  • Trading klient – Orderläggning, kontovärden, positionslista.
  • Data klient – Historiska minute/daily bars, realtidsquotes.
  • Rate limiter säkerställer max 3 parallella anrop + exponential backoff.
  • Retry används för historiska bars (Positions, Signals, Completed Trades) för att motverka "6 bars"-problemet.
  • Timeouts per anrop (3–30 sek) för att undvika hängande requests.

Event Hubs

  • WatchlistHub – distribuerar watchlist till MarketStreamHandler.
  • BuyHub – signaler till TradeExecutor (köp/sälj-kommando).
  • Wrapper HubProducers i Program.cs delar på producerklienter.

Caching & Telemetri

  • MemoryCache används för RSI/SMA-resultat och StrategyConfig (standard 5–15 min).
  • Application Insights (WorkerService) samlar loggar, spårningar, undantag.
  • LogsApi ger UI-åtkomst till Application Insights via REST API.

Handels- och dataflöde

  1. Signalinsamling: MarketStreamHandler prenumererar på tickers (watchlist/Event Hub) och hämtar quotes/bars via Alpaca.
  2. Strategiutvärdering: Spike, Dip & Bounce, Trend Following och Swing kontrollerar pris, volym, RSI/SMA och riskfilter.
  3. Riskkontroll: RiskManagementService bedömer globala begränsningar (max daglig förlust, drawdown, positioner).
  4. Orderläggning: TradeExecutor skapar Alpaca-order, säkerställer idempotens (FindRecentOpenSellAsync), håller koll på daglig statistik.
  5. Positionövervakning: PositionWatcherFunction följer aktiva positioner, triggar exit vid P/L-nivåer eller tidsgräns.
  6. Completed Trades: När en position stängs sparas den med extra data (max/min pris via historiska minute bars, volymratio).
  7. Frontend uppdateras: Blazor hämtar uppdaterade positioner, trades, signals. Diagram genereras vid expandering.
Trading switch: En global setting i StrategyConfig stänger av alla strategier. UI informerar användaren och stänger positioner automatiskt vid OFF.

Drift, övervakning & framtida förbättringar

Övervakning

  • HealthApi används av UI för att visa Alpaca-status med tooltip och länk.
  • Application Insights loggar: signalträffar, orderläggning, rate-limit-retry, exceptions.
  • Azure Functions runtime kräver ibland redeploy (t.ex. "Did not find any initialized language workers").

Fel- & rate limit-hantering

  • Rate limiter fail-closed för volym/indikatorer: signaler blockeras vid fel istället för att köra vidare.
  • Timeout-respons: 408 (request timeout) returneras med användarvänligt meddelande till UI.
  • Historik-funktioner använder chunking (2h block) för att få ut kompletta dagskurvor.

Paper → Live växling

  • TradingMode i StrategyConfig (enum) styr AlpacaClientFactory.
  • UI visar tydlig bekräftelse-dialog och toast-notis vid live-läge.
  • Fallback till Paper om live-nycklar saknas (loggas).

Framtida förbättringar

  • Automatisera PDF/Docx-export av denna dokumentation.
  • Implementera realtidsstreaming (SignalR) för minimalt pollingbehov.
  • AI-agent för automatisk strategioptimering och parametertrimming.
  • Utökad observability (dashboards, alerts) för rate limits och API-fel.

Behöver du mer information eller vill lägga till sektioner? Kontakta teamet eller uppdatera sidan i HelpSystemOverview.razor.

Penguin Labs AB – MoneyGen Trading Platform.