주식 탈출을 위한 기울기 분석기 제작기-1
[1편] 구글 앱스 스크립트(GAS)와 야후 파이낸스 API로 신뢰도 높은 주가 데이터 수집하기
서론: 감정을 배제한 객관적 지표의 필요성 주식 시장에서 ‘추세’를 읽는 것은 투자 생존과 직결됩니다. 하지만 HTS에 직접 긋는 추세선은 주관적일 수밖에 없죠. QQQ, TQQQ, SOXL 같은 변동성 높은 ETF나 빅테크 개별 주식을 다룰 때, 시장 참여자들의 심리가 만드는 추세의 이탈 시점을 계량적으로 포착하고 싶었습니다. 그래서 최소제곱법(OLS) 선형 회귀 공식을 이용해, 노이즈가 제거된 객관적 기울기를 계산해 주는 나만의 웹 분석기를 구글 앱스 스크립트(GAS) 기반으로 개발하기로 했습니다.
핵심 과제: 결측치 처리와 데이터 무결성 원칙 야후 파이낸스(Yahoo Finance) API를 통해 데이터를 가져올 때 가장 큰 문제는 ‘휴장일’이나 ‘지수(Index)’ 데이터의 거래량(Volume)이 누락되는 현상이었습니다. 이때 임의의 추정치를 억지로 끼워 넣으면 회귀분석의 기울기가 왜곡되는 치명적인 문제가 발생합니다.
따라서 데이터 신뢰성을 지키기 위해 “정확한 데이터가 없으면 대체 데이터를 찾지 않고 시스템 기본값을 대입한다”는 엄격한 정책을 코드에 적용했습니다.
💡 핵심 구현 코드 (데이터 수집 및 결측치 처리)
function fetchYahooData(ticker, startTime, endTime, days) {
const url = `https://query1.finance.yahoo.com/v8/finance/chart/${ticker}?period1=${startTime}&period2=${endTime}&interval=1d`;
// 데이터 신뢰성 정책: 임의 추정치 배제, 결측 시 기본값 0 대입
const DEFAULT_FALLBACK_PRICE = 0;
try {
const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
const json = JSON.parse(response.getContentText());
const result = json.chart.result[0];
const timestamps = result.timestamp;
const quotes = result.indicators.quote[0];
const processed = [];
for (let i = 0; i < timestamps.length; i++) {
const dateStr = new Date(timestamps[i] * 1000).toISOString().split(‘T’)[0];
let close = quotes.close[i];
// 휴장일 또는 지수 데이터 누락 감지 및 기본값 처리
const isHoliday = (close === null || close === undefined);
if (isHoliday) close = DEFAULT_FALLBACK_PRICE;
processed.push({ date: dateStr, close: close, isHoliday: isHoliday });
}
return { success: true, data: processed.slice(-days) };
} catch (e) {
return { success: false, error: e.toString() };
}
}
결과적으로 이 로직 덕분에 코스피(^KS11)나 S&P 500(^GSPC) 같은 바탕 지수 데이터를 불러올 때 차트가 증발해 버리는 버그를 완벽하게 막아낼 수 있었습니다.