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.
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 /positionsGET /positions/{symbol}/historyPOST /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-tradesGET /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-configPUT /strategy-config/currentPOST /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 /signalsGET /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 /watchlistPOST /watchlistDELETE /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/analyzePOST /alpaca-monitoring/rate-limitingPOST /alpaca-monitoring/issues |
Analyserar Azure loggar för att övervaka Alpaca API-anrop, verifiera rate limiting och identifiera problem. |
MarketEventsApi |
GET /api/market-eventsGET /api/market-events/earningsGET /api/market-events/political |
Hämtar market events (earnings, politiska händelser) med impact assessment på strategier. |
SwaggerApi |
GET /swagger.jsonGET /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 |
StrategyConfigSeederFunctionAdvancedStrategySeederFunction |
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
MarketStreamHandlernä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
TradeExecutorför orderläggning.
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.
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 URLAzureAI__ApiKey- API-nyckelAzureAI__Deployment- Deployment-namn (default: "gpt-4o-mini")
OpenAI (Alternativ)
Om Azure AI inte är konfigurerad, används OpenAI:
OpenAI__ApiKey- API-nyckelOpenAI__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 IDAppInsights__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)
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
MarketStreamHandlerfö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). |
/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
HubProducersiProgram.csdelar 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
- Signalinsamling: MarketStreamHandler prenumererar på tickers (watchlist/Event Hub) och hämtar quotes/bars via Alpaca.
- Strategiutvärdering: Spike, Dip & Bounce, Trend Following och Swing kontrollerar pris, volym, RSI/SMA och riskfilter.
- Riskkontroll: RiskManagementService bedömer globala begränsningar (max daglig förlust, drawdown, positioner).
- Orderläggning: TradeExecutor skapar Alpaca-order, säkerställer idempotens (
FindRecentOpenSellAsync), håller koll på daglig statistik. - Positionövervakning: PositionWatcherFunction följer aktiva positioner, triggar exit vid P/L-nivåer eller tidsgräns.
- Completed Trades: När en position stängs sparas den med extra data (max/min pris via historiska minute bars, volymratio).
- Frontend uppdateras: Blazor hämtar uppdaterade positioner, trades, signals. Diagram genereras vid expandering.
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.
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
Flashback Aktieforum
Avanza Forum
Twitter Scanning
AI Analysis
Market Coverage
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å:
Integration
Social media-discoveries integreras med den befintliga Discovery-tjänsten:
Konfiguration
AI Provider
Använder samma AI-konfiguration som Strategy Tuning:
AzureAI__Endpoint- Azure OpenAI endpoint (rekommenderat)AzureAI__ApiKey- API-nyckelOpenAI__ApiKey- Alternativ: OpenAI API-nyckelTwitter API
Twitter-scanning kräver Twitter API v2 med OAuth 2.0. Implementering är placeholder tills API-nycklar är konfigurerade.