initial commit

This commit is contained in:
2026-01-31 22:34:57 +09:00
commit f1301de543
875 changed files with 196598 additions and 0 deletions

131
types.ts Normal file
View File

@@ -0,0 +1,131 @@
export enum MarketType {
DOMESTIC = 'Domestic',
OVERSEAS = 'Overseas'
}
export enum OrderType {
BUY = 'BUY',
SELL = 'SELL'
}
export type AiProviderType = 'gemini' | 'openai-compatible';
export interface AiConfig {
id: string;
name: string;
providerType: AiProviderType;
modelName: string;
baseUrl?: string;
}
export interface ApiSettings {
appKey: string;
appSecret: string;
accountNumber: string;
useTelegram: boolean;
telegramToken: string;
telegramChatId: string;
useNaverNews: boolean;
naverClientId: string;
naverClientSecret: string;
aiConfigs: AiConfig[];
preferredNewsAiId?: string;
preferredStockAiId?: string;
preferredNewsJudgementAiId?: string;
preferredAutoBuyAiId?: string;
preferredAutoSellAiId?: string;
}
export interface StockTick {
code: string;
price: number;
timestamp: number;
}
export interface StockItem {
code: string;
name: string;
price: number;
change: number;
changePercent: number;
market: MarketType;
volume: number;
tradingValue?: number; // 거래대금
buyRatio?: number; // 매수 비율 (0-100)
sellRatio?: number; // 매도 비율 (0-100)
per?: number;
pbr?: number;
roe?: number;
marketCap?: number;
dividendYield?: number;
aiScoreBuy: number;
aiScoreSell: number;
themes?: string[];
// --- New Fields ---
memo?: string; // 사용자 메모
aiAnalysis?: string; // AI 분석 리포트 텍스트
isHidden?: boolean; // 종목 숨김 여부
}
export interface TradeOrder {
id: string;
stockCode: string;
stockName: string;
type: OrderType;
price: number;
quantity: number;
status: 'PENDING' | 'COMPLETED' | 'CANCELLED';
timestamp: Date;
}
export interface ReservedOrder {
id: string;
stockCode: string;
stockName: string;
type: OrderType;
quantity: number;
monitoringType: 'PRICE_TRIGGER' | 'TRAILING_STOP';
triggerPrice: number;
trailingType: 'PERCENT' | 'AMOUNT';
trailingValue: number;
useStopLoss?: boolean;
stopLossType?: 'PERCENT' | 'AMOUNT';
stopLossValue?: number;
sellAll?: boolean;
highestPrice?: number;
lowestPrice?: number;
market: MarketType;
status: 'WAITING' | 'MONITORING' | 'TRIGGERED' | 'CANCELLED';
createdAt: Date;
expiryDate: Date;
}
export interface AutoTradeConfig {
id: string;
stockCode?: string;
stockName: string;
groupId?: string;
type: 'ACCUMULATION' | 'TRAILING_STOP';
quantity: number;
frequency: 'DAILY' | 'WEEKLY' | 'MONTHLY';
specificDay?: number;
executionTime: string;
trailingPercent?: number;
active: boolean;
market: MarketType;
}
export interface WatchlistGroup {
id: string;
name: string;
codes: string[];
market: MarketType;
}
export interface NewsItem {
title: string;
description: string;
link: string;
pubDate: string;
}