尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
기업·산업 리포트, 가상운용 전략, 마켓노트를 정적 사이트로 만드는 도구. 파이썬으로 dist/ 폴더에 HTML을 만들고, 그 폴더를 그대로 호스팅에 올린다. 상시 서버는 없다. http://localhost:4321 에서 본다. 파일을 고치고 브라우저를 새로 고치면 다시 만들어진다. dist/만 만든다. 수익률 계산과, 엑셀에 넘기는 그림 자료의 꼴을 검증한다. 필요한 패키지는 requirements.txt에 있다(Jinja2, PyYAML, Markdown). content/reports/에 마크다운 파일을 만든다. 파일 이름은 발행일-종목id.md 형식을 권한다. • 한 종목의 첫 리포트 발행일이 커버리지 개시일이 된다. • 가장 최근 리포트의 의견과 목표주가가 현재 값으로 표시된다. • 발행한 리포트는 고치지 않는다. 판단이 바뀌면 새 리포트를 추가한다. • 머리말에 featured: true를 넣으면 홈과 About檢視完整 README ↗
기업·산업 리포트, 가상운용 전략, 마켓노트를 정적 사이트로 만드는 도구. 파이썬으로 dist/ 폴더에 HTML을 만들고, 그 폴더를 그대로 호스팅에 올린다. 상시 서버는 없다.
python serve.py
http://localhost:4321 에서 본다. 파일을 고치고 브라우저를 새로 고치면 다시 만들어진다.
python build.py
dist/만 만든다.
python -m unittest discover tests
수익률 계산과, 엑셀에 넘기는 그림 자료의 꼴을 검증한다.
필요한 패키지는 requirements.txt에 있다(Jinja2, PyYAML, Markdown).
| 위치 | 내용 |
|---|---|
data/site.yaml | 사이트 이름, 작성자, 홈의 큰 문장과 소개, 외부 링크 |
data/companies.yaml | 커버 종목, 투자포인트, 실적 추정, 밸류에이션 상세, 리스크·회고 |
data/industries.yaml | 커버 산업, 산업 의견, 핵심 논점, 시장 점유율(market: 전체 시장에서 업체별 %), 품목별 점유율(shares: 품목마다 업체와 %, 기준), 밸류체인 |
data/indicators/산업id.csv | 산업 핵심 지표. 첫 열은 date, 나머지 열이 지표(없어도 된다) |
data/prices/*.csv | 일별 종가. 파일 이름은 종목 id 또는 벤치마크 이름 |
data/strategies.yaml | 가상운용 전략. 규칙, 근거, 백테스트 설명, 회고 |
data/trades/전략id.csv | 전략의 거래 기록 |
data/backtests/전략id.csv | 운용 개시 전 백테스트 곡선(없어도 된다) |
content/reports/*.md | 리포트 원고. 투자의견과 목표주가는 여기서 읽는다. 종류(kind): 최초, 업데이트, 브리프(정식 보고서를 서너 쪽으로 줄인 기업 브리프), 산업 |
content/notes/날짜.md | 마켓노트. 하루에 한 파일 |
content/pages/*.md | 방법론, About |
content/studies/*.md | 연구: 자료로 확인해 본 주제를 논문 꼴로. 머리말에 id, title, date, summary, tags, 본문은 마크다운(표 가능). draft: true면 공개하지 않는다 |
content/books/*.md | 책 검증: 책마다 한 파일. 머리말에 책 이름(title), 지은이(author), 핵심(key), 검사 결과와 잇는 정리본 이름(sources — 바꾸지 않는다), 본문에 독후감 |
data/books/*.json | 책 검증: 주장별 검사 결과. C:\quant\bottomup\code\book_site_export.py <이 폴더>가 만든다(손으로 고치지 않는다). 책을 더하거나 빼면 다시 돌린다 |
lib/metrics.py | 커버리지 수익률 계산 |
lib/portfolio.py | 가상운용 평가금액·MDD·샤프 계산 |
tools/excel_charts.ps1 | 화면의 그림을 엑셀로 그려 static/charts/에 내보낸다(아래 "그림" 참고) |
static/charts/ | 엑셀이 내보낸 그림(SVG)과 목록(manifest.json) |
templates/ | 화면 틀 |
static/ | 스타일, 표 정렬·검색 스크립트. 리포트 PDF는 static/reports/에 둔다 |
DESIGN.md | 디자인 규칙. 화면을 고치기 전에 읽는다 |
content/reports/에 마크다운 파일을 만든다. 파일 이름은 발행일-종목id.md 형식을 권한다.
---
id: ex001-20261105 # 주소에 쓰인다. 겹치면 안 된다
company: ex001 # 산업 리포트면 company 대신 industry: 산업id
date: 2026-11-05
kind: 업데이트 # 최초 / 업데이트 / 산업
title: "제목"
rating: 매수 # 기업 리포트에만 필요
target: 90000 # 기업 리포트에만 필요
summary: 한 줄 요약
pdf: "" # static/reports/ 안의 파일 이름. 없으면 비워 둔다
---
본문
featured: true를 넣으면 홈과 About의 대표 리포트에 나온다(최근 3건).content/notes/2026-10-01.md처럼 날짜를 파일 이름으로 한다.
---
date: 2026-10-01
headline: "오늘의 한 줄"
indicators: # 시장 지표 4칸. 값은 직접 적는다
- {name: KOSPI, value: "3,814.80", change: "+0.4%"}
comment: >- # 내 코멘트
커버 종목 관점의 한두 문장
summary: ["알아야 할 것: ...", "가장 큰 리스크: ...", "확인할 것: ..."]
companies: [ex001] # 이 종목의 기업 화면에 자동으로 걸린다
industries: [semi-equipment]
tags: [반도체]
week: ["10.02(금) 미국 고용보고서"] # 이번 주 주요 일정
review: "어제 확인하겠다고 한 것 → 결과" # 어제 확인한 것 (없어도 된다)
draft: true # 공개 전. 이 줄이 있으면 사이트에 나가지 않는다
---
## 통합 브리핑
## 기업·산업 Watch
## 오늘·내일 새벽 이벤트
본문의 ## 제목 하나가 접는 구획 하나가 된다. 브리핑 양식의 [1]~[4]를 여기에 넣는다.
아침 브리핑 글(양식의 [0]~[6]이 다 들어 있는 것)을 파일로 저장한 뒤 실행한다.
python tools/import_briefing.py 브리핑.txt
--draft를 붙이면 공개 전(draft: true)으로 만들고, 이때는 python serve.py 미리보기에서만 보인다.comment는 비워 둔다. 쓰고 싶은 날 직접 적으면 그날만 "내 코멘트" 칸이 나타난다.--force.data/companies.yaml에 종목을 추가한다.data/prices/종목id.csv에 일별 종가를 넣는다(date,close, 커버리지 개시일 이전부터).content/reports/에 넣는다.빠진 것이 있으면 빌드가 어느 파일의 무엇이 없는지 알려 주고 멈춘다.
data/strategies.yaml에 전략을 추가한다. 규칙과 근거를 먼저 쓰고 published에 공개일을 적는다.data/trades/전략id.csv에 거래를 적는다. 열은 date,asset,side,qty,price,note이고 side는 매수 또는 매도다.data/prices/에 있어야 한다. 기업 페이지가 있는 종목은 asset에 종목 id를 쓰면 서로 연결된다.data/backtests/전략id.csv에 date,value로 넣는다. 차트에 점선으로 나온다.현금보다 많이 사거나 보유 수량보다 많이 팔면 빌드가 멈춘다. 전략을 중단하면 status: 중단과 stopped를 적고 회고를 log에 남긴다.
pip install -r requirements-data.txt
python tools/update_prices.py
data/sources.yaml에 적은 대상의 일별 종가를 받아 data/prices/에 저장한다. 국내 종목은 pykrx(수정주가), 지수와 해외 종목은 yfinance로 받는다. 두 도구 모두 공식 제공 경로가 아니어서 값이 비거나 형식이 바뀔 수 있다. 한 대상이 실패하면 그 대상의 기존 파일은 그대로 두고 오류로 끝난다.
.github/workflows/daily.yml이 평일 18:30에 종가를 받고, 검증하고, 사이트를 만들어 GitHub Pages에 올린다. site/ 폴더를 저장소의 맨 위로 삼는다.
아이디.github.io/저장소이름 형태면 data/site.yaml의 base_url에 /저장소이름을 적는다.이 설정은 실제 저장소에서 아직 돌려 보지 않았다. GitHub의 서버에서 pykrx가 종가를 받을 수 있는지도 첫 실행에서 확인해야 한다.
처음에는 화면 확인용 예시(회사 세 곳, 산업 두 곳, 리포트 일곱 건, 전략 두 개, 시세·거래·지표 파일)로 채워 두었다. 2026-10-06에 첫 실제 리포트(오리온)를 올리면서 다음을 했다.
tools/make_example_*.py 삭제data/sources.yaml에 실제 종목(orion)과 벤치마크(KOSPI)를 적음. 시세는 tools/update_prices.py가 받는다data/site.yaml의 demo: false (예시 안내 띠를 끔)리포트 본문에 넣는 그림은 static/reports/리포트id/에, PDF는 static/reports/리포트id.pdf에 둔다.
첫 리포트를 그날 장이 끝나기 전에 올려도 빌드는 된다. 이때 "발행일 종가"는 직전 거래일 종가로 보이다가, 그날 종가가 들어오면 발행일 종가로 바뀐다.
화면의 그림(주가와 목표주가, 누적수익률, 지표 추이, 시장 점유율, 표 안의 작은 그림)은 모두 엑셀 차트다. 사이트 프로그램은 그림을 그리지 않는다. 엑셀 통합 문서를 열어 색·글꼴·크기를 고칠 수 있고, 고친 모양은 다음 갱신에도 남는다(갱신은 자료 칸만 바꾼다).
python build.py --charts <자료.json> # 그림마다 쓸 자료를 적어 낸다
powershell -ExecutionPolicy Bypass -File tools\excel_charts.ps1 -Spec <자료.json> -Workbook <그림.xlsx> -Out static\charts
python build.py # 내보낸 그림을 화면에 넣는다
작은그림 시트에 모여 있고, 목록 시트에 그림과 시트의 짝이 있다.