fix: Yahoo股票代码转换,BRK.B → BRK-B(类别股用连字符)
This commit is contained in:
parent
1830b93207
commit
a91041e168
@ -40,11 +40,27 @@ public class YahooMarketService : IYahooMarketService
|
|||||||
.Build();
|
.Build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 转换股票代码为 Yahoo Finance 格式
|
||||||
|
/// <para>BRK.B → BRK-B(伯克希尔B类股)</para>
|
||||||
|
/// <para>BRK.A → BRK-A(伯克希尔A类股)</para>
|
||||||
|
/// </summary>
|
||||||
|
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<MarketPriceResponse> GetStockPriceAsync(string symbol)
|
public async Task<MarketPriceResponse> 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)
|
if (snapshot is null)
|
||||||
throw new InvalidOperationException($"Yahoo未知标的: {symbol}");
|
throw new InvalidOperationException($"Yahoo未知标的: {symbol}");
|
||||||
|
|
||||||
@ -61,7 +77,7 @@ public class YahooMarketService : IYahooMarketService
|
|||||||
|
|
||||||
return new MarketPriceResponse
|
return new MarketPriceResponse
|
||||||
{
|
{
|
||||||
Symbol = symbol,
|
Symbol = symbol, // 返回原始代码
|
||||||
Price = price,
|
Price = price,
|
||||||
PreviousClose = previousClose,
|
PreviousClose = previousClose,
|
||||||
Timestamp = DateTime.UtcNow,
|
Timestamp = DateTime.UtcNow,
|
||||||
@ -71,9 +87,10 @@ public class YahooMarketService : IYahooMarketService
|
|||||||
|
|
||||||
public async Task<List<MarketDataResponse>> GetStockHistoricalDataAsync(string symbol, string timeframe, int limit)
|
public async Task<List<MarketDataResponse>> 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<History> result = await _yahooQuotes.GetHistoryAsync(symbol);
|
Result<History> result = await _yahooQuotes.GetHistoryAsync(yahooSymbol);
|
||||||
if (result.Value == null)
|
if (result.Value == null)
|
||||||
throw new InvalidOperationException($"Yahoo获取历史数据失败,标的: {symbol}");
|
throw new InvalidOperationException($"Yahoo获取历史数据失败,标的: {symbol}");
|
||||||
|
|
||||||
@ -86,7 +103,7 @@ public class YahooMarketService : IYahooMarketService
|
|||||||
{
|
{
|
||||||
marketDataList.Add(new MarketDataResponse
|
marketDataList.Add(new MarketDataResponse
|
||||||
{
|
{
|
||||||
Symbol = symbol,
|
Symbol = symbol, // 返回原始代码
|
||||||
Timestamp = tick.Date.ToDateTimeUtc(),
|
Timestamp = tick.Date.ToDateTimeUtc(),
|
||||||
Open = (decimal)tick.Open,
|
Open = (decimal)tick.Open,
|
||||||
High = (decimal)tick.High,
|
High = (decimal)tick.High,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user