알고리즘 트레이딩에서 뉴스 감정을 거래 신호로 활용하기
이동평균과 RSI는 안정적인 시장 레짐을 가정하고 과거 데이터를 기반으로 보정됩니다. 하지만 현실은 약세와 강세 날이 번갈아 나타나며, 종종 하루 안에 뒤바뀝니다. 기술적 분석은 평균화에 기반해 이러한 전환에 적응하지 못합니다. 아침에 긍정적인 뉴스가 나오고 저녁에 부정적인 뉴스가 나오면 지표는 추세 대신 "잡음"을 보여줍니다.
문제는 도구 자체가 아니라 사용 맥락입니다. 지표는 레짐 내에서 작동하지만 레짐 자체를 식별하지 못합니다. 뉴스 배경이 레짐을 설정합니다—권위 있는 출처가 시장 참여자들의 인식을 어떻게 형성하는지.
뉴스를 제대로 수집하고 필터링하는 방법
신호를 구축하는 것은 단순히 헤드라인을 파싱하는 것이 아닙니다. 세 가지 매개변수가 핵심입니다: 도메인, 발행 시간, 벡터 유사도. 이렇게 하는 방법:
- 키워드 대신 벡터 검색 사용
- 단어 매칭이 아닌 의미 검색을 위해 PgVector나 MongoDB Atlas Vector Search를 활용하세요.
- 코사인 유사도에서 거의 0에 가까운 점수를 찾으세요—이것이 숨겨진 영향(예: 비트코인 직접 언급 없이 트럼프 언급)을 포착합니다.
- 초기 검색에는 LLM을 건너뛰세요—그것들은 원시 감정을 포착하기보다 해석합니다.
- 권위 있는 도메인에 집중
- SEC 규제 문서는 영향력 있는 블로거나 분석가가 재게시할 때만 시장을 움직입니다.
- 소매 투자자들을 실제로 움직이는 도메인들의 화이트리스트를 구축하세요.
- 타이밍 고려
- 일일 평균화는 방향성을 죽입니다. 엄격한 24시간 창을 사용하세요—잡음을 걸러내고 맥락을 보존하기에 충분합니다.
- 알려지지 않은 시간(예: 00:00:00 GMT)의 발행물을 필터링하세요. 이는 룩어헤드 바이어스를 유발합니다.
실제 구현: 코드와 필터링
Tavily 같은 API를 사용할 때 타임스탬프를 올바르게 처리하세요. 다음은 JavaScript 필터링 예시입니다:
const hour = dayjs(publishedDate).utc().get("hour");
const minute = dayjs(publishedDate).utc().get("minute");
if (hour === 0 && minute === 0) {
console.warn(`fetchNews search invalid publishedDate query=${query} url=${url} from=${from} to=${to}`)
return false;
}
또한 데이터를 -2일 전부터 쿼리한 후 로컬에서 지난 24시간만 필터링하세요. 이는 CDN과 데이터베이스 특성으로 인한 날짜 경계에서의 손실 발행물을 수정합니다.
사례 연구: 감정이 가격 움직임을 앞서는 방식
두 실제 사례에서 벡터 검색 기반 시스템이 방향을 정확히 식별했습니다:
- 중립-약세 감정 → 이후 BTC 가격 하락.
- 강세 감정 → 다음 몇 시간 동안 꾸준한 상승.
핵심: 시스템은 가격을 예측하지 않습니다. 수많은 발행물이 집단 시장 기대를 형성하는 시너지 효과를 포착합니다. 그 기대가 차트 움직임으로 실현됩니다.
포지션 관리: 감정이 아닌 PnL 기준으로 청산
감정 변화에 따라 거래를 청산하는 것은 너무 늦습니다. 파서가 지연되고 이익을 놓칩니다. 최적 접근: 개방 포지션의 최대 PnL에서 3% 후퇴 시 이익 실현.
예: 포지션이 +10%에 도달하면 +7%에서 청산. 이는 뉴스가 아직 변하지 않았더라도 이익의 97%를 고정합니다. 10거래에서 총 수익을 최대 +30%까지 높일 수 있습니다.
위험 관리에는 하드 스탑로스와 트레일링 테이크프로핏을 사용하세요. 가장 빠른 뉴스 시스템도 놓치는 급격한 반전을 보호합니다.
주요 요점
- 벡터 검색과 LLM 분리: 전자는 감정을 찾고, 후자는 해석합니다.
- 24시간 창이 최적: 더 짧으면 잡음 증가, 더 길면 방향성 상실.
- 규제 기관보다 권위 도메인: 시장은 사실이 아닌 해석에 반응합니다.
- 신호가 아닌 PnL 기준 청산: 승리 거래당 3% 절약.
- 시간 미지정 발행물 필터링: 백테스트를 왜곡합니다.
— Editorial Team
아직 댓글이 없습니다.