feat(kis): KIS API 클라이언트 .NET 포팅 완료
**구현:** - IKisApiClient.cs: 완전한 read-only 메서드 인터페이스 - GetCurrentPriceAsync, GetAskingPrice10LevelAsync - GetDailyShortSaleAsync, GetDailyItemChartPriceAsync - GetInvestorTrendAsync - KisApiClient.cs: 완전한 .NET 구현 (kis_api_client_v1.py 포팅) - KisCredentials: 환경변수 + Windows 레지스트리 폴백 - ITokenCache 통합: PostgreSQL 기반 토큰 캐싱 - AssertReadOnly: 주문 API 차단 (governance/rules/06_no_direct_api_trading.yaml) - HttpClient: 비동기 API 호출 + 헤더 관리 - 모든 quotation 조회 메서드 구현 **보안:** - FORBIDDEN_PATH_SUBSTRINGS: "/trading/" 경로 차단 - FORBIDDEN_TR_ID_PREFIXES: TTTC/VTTC 주문 TR_ID 차단 - 매수/매도 API 절대 호출 불가 (2차 방어) **DI 통합:** - Program.cs: builder.Services.AddScoped<IKisApiClient, KisApiClient>(); - HttpClientFactory 패턴 활용 **다음 단계:** - PostgresTokenCache 구현 - CollectionRepository PostgreSQL 구현 - Collection 엔드포인트 완성 - Web API 통합 테스트 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,12 +3,40 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace QuantEngine.Core.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// KIS Open API 클라이언트 (read-only 전용).
|
||||
/// 매수/매도 주문은 절대 금지 (governance/rules/06_no_direct_api_trading.yaml).
|
||||
/// </summary>
|
||||
public interface IKisApiClient
|
||||
{
|
||||
Task<string> GetCurrentPriceAsync(string code);
|
||||
Task<string> GetAskingPrice10LevelAsync(string code);
|
||||
Task<string> GetDailyShortSaleAsync(string code, string startDate, string endDate);
|
||||
Task<string> GetDailyItemChartPriceAsync(string code, string startDate, string endDate, string period = "D");
|
||||
Task<string> GetInvestorTrendAsync(string code);
|
||||
/// <summary>
|
||||
/// 주식현재가 시세 조회.
|
||||
/// TR_ID: FHKST01010100
|
||||
/// </summary>
|
||||
Task<Dictionary<string, object>> GetCurrentPriceAsync(string code, string account = "mock");
|
||||
|
||||
/// <summary>
|
||||
/// 주식현재가 호가/예상체결 (10단계).
|
||||
/// TR_ID: FHKST01010200
|
||||
/// </summary>
|
||||
Task<Dictionary<string, object>> GetAskingPrice10LevelAsync(string code, string account = "mock");
|
||||
|
||||
/// <summary>
|
||||
/// 국내주식 공매도 일별추이.
|
||||
/// TR_ID: FHPST04830000
|
||||
/// </summary>
|
||||
Task<Dictionary<string, object>> GetDailyShortSaleAsync(string code, string startDate, string endDate, string account = "mock");
|
||||
|
||||
/// <summary>
|
||||
/// 주식현재가 일자별 차트.
|
||||
/// TR_ID: FHKST03010100
|
||||
/// </summary>
|
||||
Task<Dictionary<string, object>> GetDailyItemChartPriceAsync(string code, string startDate, string endDate, string period = "D", string account = "mock");
|
||||
|
||||
/// <summary>
|
||||
/// 주식현재가 투자자 매매동향 (개인/외국인/기관).
|
||||
/// TR_ID: FHKST01010900
|
||||
/// </summary>
|
||||
Task<Dictionary<string, object>> GetInvestorTrendAsync(string code, string account = "mock");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user