Stock Investment Journal

unlisted

by CHOBOLIFE

Create structured stock investment journal notes with Bases metadata and interactive charts.

Updated 18d agoMIT
View on GitHub

Stock Investment Journal

Obsidian에서 종목별 투자일기를 만들고, Bases 메타데이터와 인터랙티브 차트를 함께 관리하는 플러그인입니다.

0.7.0 기록 완성도와 선택형 작성 흐름

빈칸 하나 때문에 다음 단계로 넘어가지 못하던 흐름을 바꿨습니다. 서술형 질문은 비워 둔 채 저장할 수 있고, 상단의 기록 완성도 0~10에서 작성한 항목과 다음에 채우면 좋은 항목을 확인합니다. 완성도 항목을 누르면 해당 화면과 입력칸으로 바로 이동합니다. 이 점수는 종목의 좋고 나쁨이 아니라 현재 남겨 둔 기록의 양과 구체성을 뜻합니다.

  • 새 종목의 첫 화면은 회사가 무엇으로 돈을 버나요?, 왜 눈여겨보고 있나요? 두 질문만 보여 줍니다.
  • 반증 조건은 어려운 사전 질문에서 빼고, 매수계획·추가매수 선택 뒤 매수 계획을 취소할 조건으로 묻습니다.
  • 수동 확인한 출처근거 확인일 입력은 제거하고, 선택한 OpenDART 자료와 저장 시각을 자동 기록합니다. 과거 노트의 기존 값은 그대로 보존합니다.
  • 새 종목·관심 재검토·보유 점검의 서술형과 다음 확인일은 저장을 막지 않습니다. 매수가·수량·손절처럼 실제 계산에 필요한 값과 빚·생활비·비상금 위험만 계속 검증합니다.
  • 계획·공시 판단·거래 복기 이력에서도 비어 있는 선택 항목을 미작성으로 남겨, 화면에서는 진행됐지만 이력 저장 단계에서 다시 막히는 문제를 없앴습니다.
  • 완성도 상세는 떠 있는 팝업 대신 툴바 아래 인라인 패널로 열리며, 키보드·좁은 창·모바일 화면과 밝은·어두운 테마를 지원합니다.

0.6.0 상황별 가격 지표 해석

PER·PBR·ROE·배당수익률을 숫자만 나열하지 않고, 계산식 → 기준 시점의 의미 → 일반적인 해석 → 다음에 비교할 항목 순서로 보여 줍니다. 각 지표의 값에 따라 설명이 바뀌며, 초보자가 현재 숫자를 어떻게 읽어야 하는지 바로 알 수 있게 했습니다.

  • PER은 순이익 대비 가격 부담을 10배 미만·10~20배·20배 초과로 나누어 해석합니다.
  • PBR은 시가총액 ÷ 장부상 순자산임을 먼저 알려 주고, 1배 미만이면 일반적인 저평가 가능성을 살펴보는 구간임을 명확히 설명합니다.
  • ROE는 자기자본 100원으로 만든 이익으로 바꿔 설명하고, 음수·0%·10% 미만·10~15%·15% 초과를 구분합니다.
  • 배당수익률은 100만 원을 보유했을 때의 최근 연간 세전 배당금으로 환산하고 배당의 지속 가능성을 다음 확인 항목으로 안내합니다.
  • 순이익·순자산·현재가·배당 자료가 없거나 계산이 성립하지 않을 때도 그 이유와 다음 확인 방법을 표시합니다.
  • 화면에서 본 해석은 동일한 문장으로 Markdown 이력에 저장되어, 나중에 계획을 복기할 때도 당시 기준을 그대로 읽을 수 있습니다.

0.5.3 재무 숫자 비교와 새 노트 화면 안정화

상세 숫자·출처 펼치기의 매출·영업이익·순이익·영업현금흐름을 항목 × 연도 표로 바꿨습니다. 첫 연도는 비교 기준으로 표시하고 이후 연도에는 전년 대비 증감률과 화살표를 함께 보여 줍니다. 상승한 숫자는 옅은 빨강 배경과 진한 빨강 글자, 하락한 숫자는 옅은 파랑 배경과 진한 파랑 글자로 구분하며, 색은 투자 판단의 좋고 나쁨이 아니라 숫자의 증감 방향이라는 설명을 표시합니다.

좁은 화면에서는 표를 좌우로 움직일 수 있다는 안내를 제공하고, 표의 연도·항목 헤더와 각 셀의 읽기 정보를 보강했습니다. 새 투자일기를 열 때 YAML 속성을 접은 상태로 시작하고, 초기 자료 준비 과정에서 안내 화면을 반복해서 다시 만들지 않도록 해 사용자의 스크롤 위치가 위로 튀는 현상도 줄였습니다.

0.5.2 읽기 쉬운 공시 확인 목록

확인 대기 공시를 접수문서 한 줄씩 나열하지 않고 같은 날의 원문과 정정공시를 하나의 사건으로 묶어 보여 줍니다. 상단에는 사건 수 · 공시문서 수, 조회 범위와 한국시간 기준 확인 시각을 표시하고, 각 사건에는 먼저 볼 공시와 초보자가 확인할 내용을 짧게 안내합니다. 원문과 모든 정정 링크·접수번호는 Obsidian 접힘 callout에 그대로 보존됩니다.

소스 모드와 Live Preview에서 길게 보이던 STOCK_JOURNAL_PENDING_DISCLOSURES, 개별 접수번호 추적 주석은 더 이상 사용하지 않습니다. 미검토 상태의 원본은 투자일기와 연결된 별도 JSON에서 다시 계산하고 Markdown은 사람이 읽는 요약으로 만듭니다. 기존 평면 목록은 유효한 JSON을 확인한 뒤 투자일기를 열 때 새 형식으로 바꾸며, 사용자가 남긴 메모는 내가 남긴 메모로 옮겨 보존합니다. JSON이 없거나 손상된 경우에는 기존 문서를 자동으로 덮어쓰지 않습니다.

같은 제목이라도 날짜가 다르면 다른 사건으로 유지하고, 같은 날 원문이 여러 개라 연결을 확정할 수 없으면 자동으로 합치지 않습니다. Base용 pending_disclosure_count는 기존처럼 개별 공시문서 수를 유지하며, 새 pending_disclosure_event_count에 묶인 사건 수를 별도로 기록합니다.

0.5.1 기록 흐름과 데이터 저장

투자일기를 열면 먼저 오늘 무엇을 하려는지 고릅니다. 선택한 목적에 필요한 질문만 보여 주므로, 이미 끝난 분석을 다시 입력하지 않아도 됩니다.

  • 새 종목 알아보기: 회사가 돈을 버는 방식, 관심을 가진 이유와 생각이 틀렸다고 인정할 조건을 정리합니다.
  • 관심 종목 다시 보기: 이전 근거를 바탕으로 달라진 사실과 기존 생각이 아직 유효한지 확인합니다.
  • 보유 종목 점검하기: 현재 보유 상태와 계획, 새로 확인한 사실을 비교해 유지·추가매수·축소·매도 중 다음 행동을 정합니다.
  • 거래 기록·복기하기: 실제 매수·매도 내역을 먼저 적고, 원래 계획과 결과를 비교해 다음 거래에 남길 교훈을 기록합니다.

기본 기록은 목적 선택 뒤 확인 화면과 결정 화면의 두 단계로 끝납니다. 매수·추가매수·축소·매도처럼 돈과 수량을 정해야 하는 행동을 선택했을 때만 계산 화면이 한 단계 더 열립니다. 어느 화면에서든 이전 단계로 돌아가거나 오늘 할 일을 바꿀 수 있으며, 저장한 기록은 Markdown 본문과 frontmatter에 남습니다.

새 종목·관심 종목·보유 종목 화면에는 OpenDART 자료를 본업, 현금, 재무 구조, 공시 확인 네 문장으로 나눠 보여 줍니다. 숫자를 한꺼번에 쏟아 놓지 않고 현재 질문에 필요한 근거만 먼저 보여 주며, 상세 숫자와 원문 출처는 사용자가 펼칠 때 표시합니다. 거래 복기에는 현재 DART 자료나 차트를 끼워 넣지 않고 거래 당시 저장한 근거만 사용합니다.

새 공시 확인은 자동 백그라운드 작업이 아닙니다. 사용자가 버튼을 누른 때만 최신 공시를 확인하며, 조회 결과를 보는 것만으로 노트가 바뀌지 않습니다. 이 자료 선택공시 자료만 저장 또는 판단까지 저장하고 결정으로를 눌러야 Markdown과 frontmatter가 한 번에 갱신됩니다. 공시 조회가 일부만 끝났거나 필수 자료가 실패한 경우에는 기존의 정상 기록을 덮지 않습니다.

투자일기 Markdown에는 사람이 읽을 요약·판단·출처만 남깁니다. OpenDART 원본 비교에 필요한 큰 기계용 데이터는 설정의 기업 데이터 폴더 아래 <journal_id>.json으로 분리합니다. journal_id는 노트 파일명이나 경로와 무관하므로 사용자가 투자일기의 이름을 바꾸거나 다른 폴더로 옮겨도 연결이 유지됩니다. 각 노트는 자신이 사용하던 evidence_data_folder도 기억하므로 나중에 기본 저장 폴더 설정을 바꿔도 기존 기록이 새 빈 폴더로 갈아타지 않습니다. 같은 종목의 노트를 복사하면 복사본에는 새 ID와 독립된 JSON 파일을 만들며, 복사 후 종목코드만 바꾼 문서는 이전 회사 자료가 섞이지 않도록 저장을 차단합니다.

0.5.0 이하에서 Markdown 안에 저장한 STOCK_JOURNAL_EVIDENCE 데이터는 투자일기를 처음 열 때 JSON 저장과 재검증이 끝난 뒤에만 제거됩니다. JSON이 손상됐거나 모든 기록의 저장을 확인하지 못하면 원문을 그대로 보존합니다. JSON 파일이 아직 동기화되지 않았거나 사라졌다면 빈 JSON을 자동 생성하지 않고 계속 경고하며, 사람이 읽는 이력을 유지한 채 새 공시 확인으로 자동 자료를 다시 만들 수 있습니다. 손상된 JSON은 정확한 Vault 경로와 비파괴 백업 이름을 안내하고 자동으로 덮어쓰지 않습니다.

주요 기능

  • 새 투자일기는 stockjournal 안내 화면 하나로 시작하며 빈 분석 챕터를 미리 만들지 않음
  • 목적별로 필요한 질문과 결정을 분리해 불필요한 핵심 근거·감정·보유 여부 질문을 반복하지 않음
  • 기록 완성도 0~10과 누락 항목 바로가기로 강제 입력 없이 필요한 기록을 보완
  • 신용·빚 또는 생활비·비상금 사용이 확인되면 매수계획과 추가매수를 차단
  • 가격 변화·장기 사업 성장·특정 이벤트 중 어느 투자 기준을 선택해도 같은 손익절 계산기로 연결
  • 손절률·주당 및 총손실, 1~3차 분할별 목표가·수량·이익, 합산 수익률·손익비를 계산하고 계획을 본문 이력에 표로 고정
  • v1 확정 후 계획 수정하기로 계산값을 다시 열고, 변경 이유와 전체 손익 결과를 v2·v3 이력으로 순서대로 보존
  • 예정 매수가와 투자예산을 입력하면 총 매수 수량을 자동 입력하고, 손실한도가 더 작으면 안전 수량으로 자동 축소
  • 2분할은 1차 수량 입력 후 2차 수량을, 3분할은 1·2차 수량 입력 후 3차 수량을 자동 계산하며 선택한 분할 단계만 표시
  • 보유 종목은 평균매수가·수량·현재가·청산가에 따른 주당 및 총 손익을 계산
  • 핵심 기록을 마친 뒤 회사·재무, 가격·차트, 사건·치명적 위험 모듈을 필요한 만큼 추가
  • 종목코드를 입력해 종목명, 현재가, 시가총액을 조회하고 투자일기 생성
  • OpenDART를 연결하면 최근 3개 연도 매출액·영업이익·순이익·영업현금흐름·부채비율과 최대주주·배당정보를 자동 기록
  • 같은 연결/별도 기준으로 비교 가능한 최근 2개년은 변화, 3개년은 흐름으로 표시하고 계정이 모호하면 방향을 계산하지 않음
  • 감사의견, 주식 종류·수량, 증자·감자, 중요 공시와 정정·철회 여부를 확인하고 조회 실패·일부 조회·자료 없음 상태를 구분
  • 현재 시가총액과 공시 숫자로 PER·PBR·ROE·배당수익률을 계산하되, 보통주와 우선주처럼 범위가 맞지 않으면 PER/PBR을 계산하지 않음
  • 새 공시 확인으로 마지막 확인일 이후 공시를 수동 조회하고, 변화가 있을 때만 선택·저장 가능
  • 기업 자료 요약, 가격 지표, 판단과 공시 원문 접수번호는 플러그인 없이 읽을 수 있는 Markdown 이력으로 누적하고 비교용 원본 데이터는 별도 JSON으로 보존
  • 투자일기마다 파일명과 독립된 journal_id를 사용해 이름 변경·폴더 이동에도 기업 데이터 연결 유지
  • 기존 Markdown의 대형 기계용 주석은 JSON 저장을 검증한 뒤 안전하게 이전하고, 노트 복사본은 새 ID로 분리
  • 확인이 필요한 공시는 별도 대기 목록과 Base 상태로 남기고, 사용자 판단·매매계획 이력과 분리
  • Base에서 상태, 가격 계획, 기업·재무정보를 필터할 수 있는 안정적인 frontmatter 생성
  • 오늘 확인, 조사 중, 매수계획, 보유점검, 위험경고, 거래복기, 제외·종료 보기의 투자일기 Base 생성
  • 한국투자증권 또는 토스증권 Open API를 선택해 종목정보·인터랙티브 차트 표시
  • 일봉 데이터를 플러그인 내부에서 주봉·월봉·연봉으로 집계하고 화면에서 즉시 전환
  • 이동평균선, 거래량과 OHLCV 기반 추정 매물대 표시
  • API 비밀값은 Obsidian SecretStorage로 관리

API 준비

  • 설정의 시세 데이터 제공자에서 한국투자증권 또는 토스증권을 선택합니다.
  • 선택한 제공자의 Client ID·Client Secret 또는 App Key·App Secret을 두 입력칸에 직접 붙여넣고 저장을 누릅니다. 내부 보관용 ID는 플러그인이 숨겨서 관리합니다.
  • 입력칸은 저장 뒤 비워지며 저장됨 상태만 표시합니다. 실제 값은 Obsidian SecretStorage에만 보관됩니다.
  • 토스증권은 WTS의 Open API 설정에서 현재 공인 IP를 허용해야 합니다.
  • 토스증권 시세·종목정보·차트 조회는 계좌 헤더 없이 액세스 토큰만 사용합니다. 주문·계좌 기능은 이 플러그인에 포함하지 않습니다.

OpenDART 기업·재무정보가 필요하면 설정의 별도 OpenDART API 키 입력칸에 인증키 한 개를 저장합니다. OpenDART가 제공하는 회사 개황의 업종 값은 업종명이 아닌 업종코드이므로, 일기에는 코드와 업종명 확인 필요 안내가 표시됩니다. 재무정보는 연간 사업보고서 기준이며 실시간 또는 TTM 수치가 아닙니다. 4월 이후에는 직전 사업연도, 1~3월에는 전전 사업연도를 최신 기대 연도로 보고, 그 자료가 없으면 더 오래된 연도를 최신처럼 대신 표시하지 않습니다. 가격과 DART 자료의 확인일이 다르면 PER·PBR·배당수익률도 새 현재값처럼 계산하지 않습니다.

참고: 토스증권 Open API 가이드

참고: OpenDART 개발가이드

차트 읽기

  • 가격축은 원화 종목을 281,500처럼 정수와 천 단위 구분자로 표시합니다.
  • 날짜축은 YY-MM-DD, 십자선 상세 날짜는 YYYY-MM-DD로 표시합니다.
  • 매물대는 각 일봉의 거래량을 저가~고가 구간에 나누어 계산한 학습용 추정치입니다. 증권사 체결 데이터로 계산한 실제 가격대별 거래량이 아닙니다.
  • 특정 노트에서 추정 매물대를 숨기려면 stockchart 블록에 volumeProfile: false를 적습니다.

설치 파일

빌드 후 아래 세 파일을 Vault의 .obsidian/plugins/stock-investment-journal/ 폴더에 복사합니다.

  • main.js
  • manifest.json
  • styles.css

Obsidian을 다시 불러온 뒤 커뮤니티 플러그인 목록에서 Stock Investment Journal을 활성화합니다.

개발

npm install
npm run dev

전체 검증:

npm run check

개인정보와 외부 통신

  • 플러그인은 사용자가 투자일기를 만들거나 차트·종목정보·새 공시 확인을 직접 실행할 때만 외부 API에 연결합니다. 백그라운드 공시 감시는 하지 않습니다.
  • API 키는 노트나 플러그인 일반 설정 파일에 저장하지 않습니다.
  • 투자일기 본문은 외부로 전송하지 않습니다.
  • 기업 데이터 JSON도 사용자가 지정한 Vault 내부 폴더에만 저장합니다.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.