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,