diff --git a/AssetManager.Infrastructure/Services/YahooMarketService.cs b/AssetManager.Infrastructure/Services/YahooMarketService.cs index b688299..c07d991 100644 --- a/AssetManager.Infrastructure/Services/YahooMarketService.cs +++ b/AssetManager.Infrastructure/Services/YahooMarketService.cs @@ -40,11 +40,27 @@ public class YahooMarketService : IYahooMarketService .Build(); } + /// + /// 转换股票代码为 Yahoo Finance 格式 + /// BRK.B → BRK-B(伯克希尔B类股) + /// BRK.A → BRK-A(伯克希尔A类股) + /// + private string ConvertToYahooSymbol(string symbol) + { + if (string.IsNullOrEmpty(symbol)) + return symbol; + + // Yahoo Finance 用连字符表示类别股,而非点号 + // BRK.B → BRK-B, BRK.A → BRK-A + return symbol.ToUpper().Replace(".", "-"); + } + public async Task GetStockPriceAsync(string symbol) { - _logger.LogInformation("Yahoo获取股票价格: {Symbol}", symbol); + var yahooSymbol = ConvertToYahooSymbol(symbol); + _logger.LogInformation("Yahoo获取股票价格: {Symbol} -> {YahooSymbol}", symbol, yahooSymbol); - Snapshot? snapshot = await _yahooQuotes.GetSnapshotAsync(symbol); + Snapshot? snapshot = await _yahooQuotes.GetSnapshotAsync(yahooSymbol); if (snapshot is null) throw new InvalidOperationException($"Yahoo未知标的: {symbol}"); @@ -61,7 +77,7 @@ public class YahooMarketService : IYahooMarketService return new MarketPriceResponse { - Symbol = symbol, + Symbol = symbol, // 返回原始代码 Price = price, PreviousClose = previousClose, Timestamp = DateTime.UtcNow, @@ -71,9 +87,10 @@ public class YahooMarketService : IYahooMarketService public async Task> GetStockHistoricalDataAsync(string symbol, string timeframe, int limit) { - _logger.LogInformation("Yahoo获取历史数据: {Symbol}, {Timeframe}, {Limit}", symbol, timeframe, limit); + var yahooSymbol = ConvertToYahooSymbol(symbol); + _logger.LogInformation("Yahoo获取历史数据: {Symbol} -> {YahooSymbol}, {Timeframe}, {Limit}", symbol, yahooSymbol, timeframe, limit); - Result result = await _yahooQuotes.GetHistoryAsync(symbol); + Result result = await _yahooQuotes.GetHistoryAsync(yahooSymbol); if (result.Value == null) throw new InvalidOperationException($"Yahoo获取历史数据失败,标的: {symbol}"); @@ -86,7 +103,7 @@ public class YahooMarketService : IYahooMarketService { marketDataList.Add(new MarketDataResponse { - Symbol = symbol, + Symbol = symbol, // 返回原始代码 Timestamp = tick.Date.ToDateTimeUtc(), Open = (decimal)tick.Open, High = (decimal)tick.High,