본문 바로가기
기술지표

투자심리도(Psychological Line) 지표 퀀트 매매: 바닥과 상투 잡기 [지표 백과 021]

by 흔한트리이더 2026. 2. 27.
반응형

1. 지표 한 줄 요약 및 탄생 배경

투자심리선(Psychological Line)은 주식 시장을 지배하는 인간의 비이성적인 '탐욕'과 '공포'를 0부터 100 사이의 직관적인 온도로 측정해 내는 심리 지표입니다.

주식 시장은 결국 사람이 만들어가는 곳입니다. 연일 주가가 오르면 대중은 흥분하여 주가가 영원히 오를 것이라 믿고 뒤늦게 뛰어들며, 반대로 계속 떨어지면 공포에 질려 바닥에서 주식을 던져버립니다. 투자심리선은 이러한 군중 심리의 과열과 침체를 역이용하기 위해 탄생했습니다. 최근 12일 동안 주가가 상승한 날이 며칠이나 되는지를 백분율(%)로 계산하여, 현재 시장 참여자들의 마음이 얼마나 탐욕스러운지 혹은 꽁꽁 얼어붙어 있는지를 수치로 보여줍니다.

2. 수리적 원리와 계산 구조

계산 공식은 매우 단순하고 명쾌합니다. 가격이 '얼마나' 올랐는지가 아니라, '몇 번' 올랐는지 빈도에만 집중합니다.

Step 1. 상승일 카운팅 (Up Days)

통상적으로 영업일 기준 약 2주에 해당하는 12일을 기본 기간으로 설정합니다. 지난 12일 동안 전일 대비 종가가 상승한 날의 횟수를 셉니다. (보합이나 하락한 날은 제외합니다.)

Step 2. 백분율(%) 환산

상승한 날의 수를 전체 기간(12일)으로 나누고 100을 곱하여, 0%부터 100% 사이의 심리 온도를 도출합니다.

투자심리선 공식

만약 최근 12일 중 9일 동안 주가가 올랐다면, 투자심리선은 75%가 됩니다.

3. 차트에서 나타나는 수리적 특성: 과열과 침체

투자심리선은 0%에서 100% 사이를 오가며, 특정 임계점을 넘었을 때 강력한 역발상 매매 시그널을 제공합니다.

 

  • 75% 이상 (과열 및 탐욕 구간): 12일 중 9일 이상 주가가 상승했다는 뜻입니다. 시장 참여자들이 흥분 상태에 빠져 묻지마 매수를 하고 있음을 의미하며, 수리적으로 단기 상투(고점)에 도달했을 확률이 매우 높습니다. 매수를 멈추고 분할 매도를 준비해야 할 시점입니다.
  • 25% 이하 (침체 및 공포 구간): 12일 중 3일 이하로 주가가 상승했다는 뜻입니다. 대중이 극도의 공포에 질려 주식을 투매하고 있음을 의미하며, 단기 바닥이 임박했다는 수리적 증거입니다. 남들이 던지는 주식을 조용히 주워 담을 매수 타이밍을 노려야 합니다.

4. 장점 및 한계

  • 장점: 수식이 직관적이어서 초보자도 시장의 심리 상태를 0부터 100 사이의 점수로 한눈에 쉽게 파악할 수 있습니다. 특히 대중의 광기와 공포를 수치화하여 역발상 투자를 돕는 데 탁월합니다.
  • 한계 (치명적 맹점): 가격의 등락 '크기'를 완전히 무시하고 오직 '빈도(일수)'만 계산합니다. 예를 들어 주가가 1%씩 10일 연속 오르다가 단 하루 만에 -15%가 폭락해도 지표는 여전히 83%의 '과열' 상태를 가리키게 됩니다. 따라서 가격 변동폭을 반영하는 RSI나 MACD 지표와 반드시 병행하여 사용해야 오류를 막을 수 있습니다.

5. 파이썬 구현

데이터베이스에서 종가 데이터를 불러온 후, 전일 대비 상승 여부를 판별하여 12일간의 합계를 백분율로 환산하는 초보자 친화적인 벡터 연산 코드입니다.

import sqlite3
import pandas as pd
import numpy as np

# 1. 표준 데이터 로딩 함수
def load_data(code):
    conn = sqlite3.connect("stock.db")
    query = f"SELECT * FROM stock_{code} ORDER BY date"
    df = pd.read_sql(query, conn)
    df['date'] = pd.to_datetime(df['date'])
    df.set_index('date', inplace=True)
    return df

# 2. 투자심리선 계산 로직
def calculate_psychological_line(df, window=12):
    # 전일 종가 대비 당일 종가 변화량 계산
    diff = df['close'].diff()
    
    # 변화량이 0보다 크면(상승) 1, 아니면 0으로 매핑
    df['up_day'] = np.where(diff > 0, 1, 0)
    
    # 과거 12일 동안의 '1(상승)' 개수를 합산하고 백분율로 환산
    df['psy_line'] = (df['up_day'].rolling(window=window).sum() / window) * 100
    
    # 계산에 사용된 임시 컬럼 삭제
    df.drop('up_day', axis=1, inplace=True)
    
    return df

6. 실전 Tip 및 요약

투자심리선이 25% 밑으로 떨어졌다고 해서 당장 매수 버튼을 누르시면 안 됩니다. 공포는 생각보다 오래갈 수 있습니다. 진짜 매수 타점은 지표가 25% 이하의 침체 구간에 머물다가 다시 25% 선을 뚫고 위로 올라오는 그 순간입니다. 사람들의 이성이 돌아오기 시작하는 그 찰나의 순간을 놓치지 마세요.


*본 포스팅은 기술적 지표의 수리적 이해를 돕기 위한 참고 자료이며, 투자 결과에 대한 책임은 투자자 본인에게 있습니다.*
반응형