본문 바로가기
IT

Claude AI가 만든 주식매매일지

by Oh.mogilalia 2026. 4. 6.

이런저런 요구를...

주식매매일지.html
0.07MB

202604071803 수정본

Claude_주식매매일지.html
0.07MB
202604070812_Claude_주식매매일지_투자총액추가전.html
0.06MB
202604070819_stock-trading-journal날짜UTC.html
0.07MB
202604062222_Claude_주식매매일지.html
0.06MB


이 파일을 보여주고 제미나이Pro에게 의뢰했더니 전문가의 코드 분석 및 개선 포인트
1. 치명적 오류: 평균 단가 및 실현손익 계산 로직 (회계 오류)
문제점: 현재 코드는 종목의 평균 단가를 구할 때 (전체 매수 금액의 합) / (전체 매수 수량)으로 계산하고 있습니다. 만약 주식을 분할 매도한 뒤 다시 매수하게 되면, 과거의 매도 기록이 평단가에 반영되지 않아 실제 증권사 앱에서 보는 평단가와 완전히 달라지게 됩니다.
해결책: 실제 증권사와 동일하게 거래 날짜순으로 정렬한 뒤, '이동평균법(Moving Average)'을 적용하여 매수할 때마다 평단가를 갱신하고, 매도할 때는 갱신된 평단가를 기준으로 실현손익을 명확히 계산하도록 수정했습니다.
2. 잠겨있는 핵심 기능: 거래 내역 '수정' 버튼
문제점: 코드 안에는 데이터를 수정할 수 있는 모달(팝업) 창과 로직이 모두 정교하게 짜여 있습니다. 하지만 정작 거래 내역 테이블에서 수정 버튼 코드가 주석 처리(``) 되어 있어 사용자가 실수로 입력한 값을 수정할 수 없고 삭제만 가능합니다.
해결책: 주석을 해제하여 사용자가 언제든 거래 내역을 수정할 수 있도록 기능을 활성화했습니다.
3. 통화(Currency) 및 수익률(ROI) 혼동 문제
문제점: 미국 주식을 야후 파이낸스에서 불러오면 '달러($)' 기준으로 가격이 들어옵니다. 하지만 한국 주식은 '원(₩)' 기준이므로, 이 둘이 섞이면 총투자액이 완전히 망가집니다. 또한, 개별 거래 내역의 '매도' 항목에서도 현재가를 기준으로 수익률을 계산하는 오류가 있었습니다(매도는 이미 확정된 거래이므로 현재가에 따라 수익률이 변하면 안 됩니다).
해결책: 매도 항목은 확정된 거래액만 보여주도록 렌더링 로직을 바로잡았습니다. (단, 환율 자동 계산은 외부 API 연동이 추가로 필요하므로, 미국 주식을 입력하실 때는 원화 환산 금액으로 직접 입력하시길 권장합니다.)

종목명을 입력 중에 종목 검색 중이라 나오지만 krx에 등록된 종목명을 정확하게 기록해도 현재가에 반영되지 않는군요. 그리고 만약 주식을 분할 매도한 뒤 다시 매수하게 되면, 과거의 매도 기록이 평단가에 반영되지 않아 실제 증권사 앱에서 보는 평단가와 완전히 달라지게 된다네요. 실제 증권사와 동일하게 거래 날짜순으로 정렬한 뒤, '이동평균법(Moving Average)'을 적용하여 매수할 때마다 평단가를 갱신하고, 매도할 때는 갱신된 평단가를 기준으로 실현손익을 명확히 계산하도록 해주시고, 매도 항목은 확정된 거래액만 보여주도록 렌더링 로직을 바로잡아주세요. 감사합니다.

두 가지 핵심 문제를 정확히 짚어주셨습니다. 전면 수정하겠습니다.
전체 구조를 파악했습니다. 이제 이동평균법 엔진을 새로 설계하고 렌더링 전체를 수정하겠습니다.
이제 `renderAll`에서 maMap을 먼저 빌드하도록 수정합니다.
이제 renderDaily를 이동평균 기반으로 교체합니다.
이제 renderDaily와 renderStocks, showStockDetail을 모두 이동평균 기반으로 교체합니다.
이제 renderStocks와 showStockDetail도 maMap 기반으로 교체합니다.
마지막으로 renderMonthly도 maMap 기반으로 수정합니다.
완료됐습니다! 이번 업데이트는 핵심 계산 엔진을 전면 교체한 큰 작업이었습니다. 😊

## 🔧 이번 변경 핵심
### ① 이동평균법 엔진 (Moving Average) 신규 구현
모든 계산의 기준이 바뀌었습니다.

거래를 날짜순 정렬 →
  매수: (기존원가 + 이번매수금액) ÷ (기존수량 + 이번수량) = 새 평단가
  매도: (매도단가 - 평단가) × 수량 = 실현손익 / 평단가는 변경없음
이제 **분할 매도 후 재매수**해도 증권사 앱과 동일한 평단가가 나옵니다.

### ② 매도 행 렌더링 수정
| 컬럼 | 매수 | 매도 |
|------|------|------|
| 단가 | 매수단가 + 평단가 표시 | 매도단가 + 평단가 표시 |
| 현재가 | 실시간 현재가 | `확정매도` 표시 |
| 평가금액 | 현재가 기준 | 실제 매도금액 (확정) |
| 손익 | 미실현손익 | 실현손익 |

### ③ 종목 상세 테이블 컬럼 추가
거래단가 / **평균단가** / 거래금액 / 손익 (실현/미실현 구분) 표시

### ④ 실현·미실현 손익 완전 분리
종목 카드와 상세 모두 실현손익 + 미실현손익을 각각 표시하고 합산합니다.


간단하게 `fmt` 함수에서 처리하겠습니다.

코드 전체에서 `₩`가 직접 붙어 쓰인 곳을 모두 찾아 한 번에 처리하는 게 가장 깔끔합니다. `fmtKRW` 헬퍼 함수를 추가하고 전체 적용하겠습니다.

이제 코드 전체에서 `₩${fmt(` 패턴을 `fmtKRW(`로, `₩'+Math.round` 등을 일괄 교체합니다.

남은 3곳을 각각 수정합니다.

마지막으로 sed로 교체되면서 닫는 괄호가 하나 빠진 부분을 확인합니다.

템플릿 리터럴 내부의 `${` 부분이 잘렸습니다. `fmtKRW(` → `${fmtKRW(` 로 복구합니다.

모두 정상입니다.

완료됐습니다! 이제 모든 금액 표시에서 `₩ 75,000` 형태로 기호와 숫자 사이에 공백이 생깁니다.

적용된 위치를 정리하면:
- 헤더 누적 손익
- 현재가 조회 토스트 메시지
- 투자 총액, 이동평균 단가, 평단가/현재가 등 모든 카드
- 종목 상세 테이블의 거래단가·평균단가 컬럼
- 매매일지 테이블의 평단가 표시

-------------''
이런 조언을 들었습니다.
종목명 검색과 관련된 해결책은 DB에 없는 종목도 이름으로 검색해서 코드/시장 정보를 확보한 뒤 가격을 조회하는 fallback을 넣는 것입니다. 지금도 searchStocks(keyword)가 네이버 자동완성과 STOCKDB를 함께 사용하므로, 이 검색 결과를 lookupPrice와 refreshAllPrices의 보조 경로로 재활용하면 됩니다.
핵심 수정 방향
lookupPrice()에서 currentStockCode나 STOCKDB 매칭이 없으면 searchStocks(name)로 한 번 더 찾기.
refreshAllPrices()에서도 STOCKDB.find(...) 실패 시 searchStocks(name)로 코드/시장 보완.
addRecord()와 saveEdit()는 저장용 코드가 없더라도 일단 종목명 기준으로 현재가 조회가 되도록 분리.
저장된 기록에 code가 없더라도 화면 표시와 현재가 갱신이 되게 유지.
이렇게 하는 게 좋을 거라면서
아래와 같은 공동함수를 넣고
async function resolveStockInfo(name, code, market) {
  if (code) return { code, market };
  const db = STOCKDB.find(s => s.name === name || s.code === name);
  if (db) return { code: db.code, market: db.market };

  const results = await searchStocks(name);
  if (results?.length) return { code: results[0].code, market: results[0].market };
  return { code: null, market: null };
}

lookupPrice()는 이런 식으로 바꾸면 된다면서

async function lookupPrice() {
  const nameVal = document.getElementById('f-name').value.trim();
  if (!nameVal) return showToast('종목명을 입력하세요.', 'warn');

  let code = currentStockCode;
  let market = currentStockMarket;

  const resolved = await resolveStockInfo(nameVal, code, market);
  code = resolved.code;
  market = resolved.market;

  if (!code) {
    showToast(`${nameVal}의 종목코드를 찾지 못했습니다.`, 'warn');
    setStatus('검색 실패', 'err');
    document.getElementById('f-current').focus();
    return;
  }

  setStatus('조회 중...', 'loading');
  const btn = document.getElementById('btn-lookup');
  const cpbtn = document.getElementById('cpd-btn');
  btn.classList.add('loading');
  btn.innerHTML = '<span class="spinning"></span>';
  cpbtn.innerHTML = '<span class="spinning"></span>';
  setCurrentPrice(null);

  const result = await fetchPrice(code, nameVal, market);

  btn.classList.remove('loading');
  btn.innerHTML = '🔍';
  cpbtn.innerHTML = '↻';

  if (result?.price) {
    setCurrentPrice(result.price);
    const sign = result.changepct > 0 ? '+' : '';
    const pct = result.changepct ? `${sign}${Number(result.changepct).toFixed(2)}%` : '-';
    setStatus(`${result.source} ${pct}`, 'ok');
    showToast(`${nameVal} ${result.price.toLocaleString('ko-KR')}원`, 'ok');
  } else {
    setStatus('현재가 조회 실패', 'err');
    showToast(`${nameVal} 현재가 조회 실패`, 'err');
    document.getElementById('f-current').focus();
  }
}

어떤가요? 오류면 주저멊이 버리면 되고, 적용 가능하다면 수정보완 부탁드립니다.
------------
했더니

아주 좋은 조언입니다! 핵심을 정확히 짚었고, 바로 적용하겠습니다. `resolveStockInfo`를 공통 함수로 만들고, `lookupPrice`, `refreshAllPrices`, `addRecord`, `saveEdit` 네 곳에 모두 연결하겠습니다.

구조를 완전히 파악했습니다. 이제 `resolveStockInfo`를 추가하고 네 곳을 모두 수정합니다.

이제 이전의 `refreshAllPrices`(구버전)를 제거하고 `addRecord`, `saveEdit`도 수정합니다.

구버전 `refreshAllPrices`가 아직 남아있습니다. 범위를 찾아 제거합니다.

이제 `addRecord`와 `saveEdit`도 `resolveStockInfo` 기반으로 수정합니다.

완료됐습니다! 조언해 주신 분의 방향이 정확했고, 그대로 적용했습니다. 😊

---

## 🔧 변경 내용 요약

### `resolveStockInfo()` 공통 함수 신규 추가
```
1순위: 이미 확보된 코드 (자동완성 선택값)
2순위: 로컬 STOCK_DB 매칭
3순위: 네이버 실시간 검색 ← 핵심 추가
```
DB에 없는 종목도 이름만 입력하면 네이버에서 코드를 자동으로 찾아옵니다.

### 적용된 4곳

| 함수 | 변경 내용 |
|------|----------|
| `lookupPrice()` | 코드 확보 → 조회 2단계로 분리, 상태메시지 개선 |
| `refreshAllPrices()` | DB 없는 종목도 `resolveStockInfo`로 코드 확보 후 갱신, 새로 확보된 코드는 레코드에 자동 저장 |
| `addRecord()` | `async`로 전환, 저장 시 코드 자동 확보 |
| `saveEdit()` | `async`로 전환, 수정 시 코드 자동 보완 |

이제 `두산로보틱스`, `HD현대일렉트릭` 등 DB에 없는 종목도 이름만 입력하면 자동으로 종목코드를 찾아 현재가 조회까지 됩니다.
======////========



구글시트로  '매매일지' 시트 항목에 (날짜, 매도매수, 종목명, 수량, 매도매수단가, 총매도매수금액, 현재가, 평가금액, 평가손익, 수익률)을 넣고, 이 시트를 참조해 '종목별' 시트와 '월별 수익' 시트를 포함한 주식매매일지를  만들어 주세요.

구글 시트는 직접 생성이 불가하니, 대신 Google Apps Script 코드와 함께 완전히 작동하는 웹 기반 매매일지 앱을 만들어 드릴게요.

현재가는 종목명을 참고해 수시로 자동 입력은 안되나요?

Yahoo Finance API + 자동 현재가 조회 기능을 포함한 완전판을 만들겠습니다.

4월 5일 추가 요구 ----------
이 Stock trading Journal 매매일지 사용 중 불편한 점이 있어 도움 요청드립니다. 종목명 입력할 때 종목 DB 중에서 선택해도 '조회 실패 - 직접 입력해주세요'라고 메시지가 나와도 현재가 입력란에 직접 입력이 안됩니다. 또, 거래 내역 항목에 입력 에러가 난 경우 수정할 수 있으면 아주 완벽할 것 같은데요~. 하니

거래 내역 수정도 가능하게 된 완벽 버전을...

4월 6일 현재가 교체가 안되길래 새로운 버전 요구

네이버 금융 HTML 파싱이 불안정한 게 근본 원인입니다. 더 안정적인 API로 교체하겠습니다.

문제가 보입니다. `allorigins.win` 프록시가 불안정하고, 네이버 API 응답 구조도 실제와 맞지 않습니다. KRX 공식 데이터를 직접 쓰는 방식으로 완전히 교체하겠습니다.

개선 내용을 정리해 드립니다.

# 🔧 개선 사항

# 문제 원인
단일 프록시(`allorigins.win`)에만 의존하다 보니 해당 서버가 느리거나 응답이 없으면 바로 실패했습니다.

# 해결 방법 — 3단계 안전망
① 3개 프록시 자동 전환
allorigins.win → corsproxy.io → codetabs.com
하나가 실패하면 자동으로 다음 프록시로 넘어갑니다.

② 한국 주식 4단계 폴백
네이버 모바일 API → 네이버 PC 시세 → Yahoo .KS → Yahoo .KQ

③ 실패 종목 자동 재시도
1차 전체 조회 후 실패한 종목만 골라 1.5초 대기 후 자동으로 한 번 더 시도합니다. 재시도 후에도 안 되면 종목명을 알려줍니다.

> 이 방식으로도 가끔 실패하는 종목이 있다면, 그 종목명을 알려주시면 직접 수동 입력란에 넣으실 수 있습니다.

또 하나  에러가 난 것 같습니다. JSON내보내기 해서 생성된 JSON 파일 내용에 "ticker": "102110.KS"라고 야후 종목 코드로 표시되네요. 어찌된 걸까요?

원인이 명확합니다! 이전에 저장된 localStorage 데이터에 예전 `ticker` 필드가 그대로 남아 있는 겁니다.

코드에서 `ticker`를 제거했지만, 브라우저 localStorage에 이미 저장된 기존 데이터는 건드리지 않았기 때문에 예전 형식 그대로 남아서 내보내기 시 같이 딸려 나온 것입니다.

두 가지를 동시에 고치겠습니다.
1. JSON 내보내기 시 `ticker` 필드 자동 제거
2. 불러오기/저장 시 기존 데이터의 `ticker` 필드 자동 정리

원인과 해결책이 명확합니다. `ticker` 제거 함수를 추가하고, 로드·저장·내보내기 세 곳에 모두 적용하겠습니다.

완료됐습니다! 이제 *파일을 열기만 해도 자동으로 정리됩니다.

## 🔧 수정 내용

**`cleanRecord()` 함수** 추가 — `ticker` 필드를 자동으로 제거하며, 4곳에 모두 적용했습니다.

| 적용 위치 | 효과 |
|-----------|------|
| **앱 시작 시** | localStorage의 기존 데이터에서 `ticker` 즉시 제거 후 재저장 |
| **저장 시** | 매 저장마다 `ticker` 없이 저장 |
| **내보내기 시** | JSON 파일에 `ticker` 미포함 |
| **불러오기 시** | 예전 형식의 JSON을 불러와도 `ticker` 자동 제거 |

지금 파일을 열면 localStorage가 자동 정리되니, 이후 내보내기 하시면 `ticker` 없이 깔끔하게 저장됩니다.

또 요구 추가
Stock trading Journal 파일 초기화면에서 거래내역이 많다보니 스크롤이 길어집니다. 그래서 5 항목 정도만 보이게하고 원할 경우 '전체보기' 와 같은 버튼을 달아주시면...

좋은 아이디어입니다. 바로 적용하겠습니다.
구조를 파악했습니다. CSS 스타일, 테이블 하단 버튼, renderDaily 함수를 한 번에 수정하겠습니다.
이제 버튼 CSS와 renderDaily 함수를 수정합니다.
이제 renderDaily와 토글 함수를 수정합니다.

완료됐습니다! 😊

# 📋 동작 방식

기본 화면 — 최신 5건만 표시, 하단에 버튼 노출
▼ 전체보기  (+10건 더 있음)
전체보기 클릭 — 전체 목록 펼침, 버튼이 접기로 전환
▲ 접기
접기 클릭 — 다시 5건으로 돌아가고 테이블 상단으로 자동 스크롤

# 추가로 배려한 점
- 종목명 검색하거나 매수/매도 필터 사용 중에는 결과가 적으니 전체 표시
- 새 거래 저장 시 목록 상단에 추가되므로 항상 최신 5건이 보임
- 5건 이하면 버튼 자체가 나타나지 않음

거래내역 5항목만
Claude_주식매매일지.html
0.06MB

JSON 버튼 간단하게 수정

Claude_주식매매일지.html
0.06MB

최종본

stock-trading-journal-4.html
0.06MB

종목코드 수정본

Claude_주식매매일지.html
0.06MB

JSON 야후본

아래는 현재가 업데이트 안되는 야후 종목DB 버전

Claude_주식매매일지.html
0.05MB

html 파일 내용 중
// 종목 DB (이름 → Yahoo Finance ticker 매핑)
아래에 KOSPI 종목코드 필요한 종목들을 넣으니 멋진 매매일지를 만들어 낸다. ㅎㅎ~
AI가 온세상을 지배할 듯.

종목 DB도 교체
// 종목 DB (이름 → KRX 종목코드 매핑)
// 한국주식: 6자리 숫자 KRX 코드 (네이버 금융 사용)
// 미국주식: Yahoo Finance 심볼 (Yahoo Finance 사용)
//
const STOCK_DB = [
  // ── KOSPI ──────────────────────────────────
{name:'삼성전자',      code:'005930', market:'KOSPI'},
{name:'SK하이닉스',    code:'000660', market:'KOSPI'},
{name:'LG에너지솔루션',code:'373220', market:'KOSPI'},
{name:'삼성바이오로직스',code:'207940',market:'KOSPI'},
{name:'현대차',        code:'005380', market:'KOSPI'},
{name:'기아',          code:'000270', market:'KOSPI'},
{name:'POSCO홀딩스',   code:'005490', market:'KOSPI'},
{name:'LG화학',        code:'051910', market:'KOSPI'},
{name:'Kodex 200',      code:'069500', market:'KOSPI'},
{name:'KB금융',        code:'105560', market:'KOSPI'},
{name:'신한지주',      code:'055550', market:'KOSPI'},
{name:'하나금융지주',  code:'086790', market:'KOSPI'},
{name:'우리금융지주',  code:'316140', market:'KOSPI'},
{name:'삼성SDI',       code:'006400', market:'KOSPI'},
{name:'SK이노베이션',  code:'096770', market:'KOSPI'},
{name:'LG전자',        code:'066570', market:'KOSPI'},
{name:'SK텔레콤',      code:'017670', market:'KOSPI'},
{name:'KT',            code:'030200', market:'KOSPI'},
{name:'한국전력',      code:'015760', market:'KOSPI'},
{name:'Tiger 200',      code:'102110', market:'KOSPI'},
{name:'현대모비스',    code:'012330', market:'KOSPI'},
{name:'Tiger 반도체TOP10',      code:'396500', market:'KOSPI'},
{name:'Tiger 미국S&P500',code:'360750',market:'KOSPI'},
{name:'두산에너빌리티',code:'034020', market:'KOSPI'},
{name:'HD현대중공업',  code:'329180', market:'KOSPI'},
{name:'삼성전기',      code:'009150', market:'KOSPI'},
{name:'Kodex 미국나스닥100',      code:'379810', market:'KOSPI'},
{name:'한국조선해양',  code:'009540', market:'KOSPI'},
{name:'두산로보틱스',  code:'454910', market:'KOSPI'},
{name:'포스코퓨처엠',  code:'003670', market:'KOSPI'},
{name:'NAVER',         code:'035420', market:'KOSPI'},
{name:'카카오',        code:'035720', market:'KOSPI'},
{name:'Tiger 코스닥150',    code:'232080', market:'KOSPI'},
{name:'카카오페이',    code:'377300', market:'KOSPI'},
// ── KOSDAQ ─
{name:'HLB',           code:'028300', market:'KOSDAQ'},
{name:'에코프로',      code:'086520', market:'KOSDAQ'},
{name:'에코프로비엠',  code:'247540', market:'KOSDAQ'},
{name:'알테오젠',      code:'196170', market:'KOSDAQ'},
{name:'리가켐바이오',  code:'141080', market:'KOSDAQ'},
{name:'클래시스',      code:'214150', market:'KOSDAQ'},
{name:'레인보우로보틱스',code:'277810',market:'KOSDAQ'},
// ── 미국 (Yahoo Finance 심볼)
{name:'애플',          code:'AAPL',   market:'NASDAQ'},
{name:'엔비디아',      code:'NVDA',   market:'NASDAQ'},
{name:'마이크로소프트',code:'MSFT',   market:'NASDAQ'},
{name:'구글',          code:'GOOGL',  market:'NASDAQ'},
{name:'아마존',        code:'AMZN',   market:'NASDAQ'},
{name:'메타',          code:'META',   market:'NASDAQ'},
{name:'테슬라',        code:'TSLA',   market:'NASDAQ'},
{name:'TSMC',          code:'TSM',    market:'NYSE'},
];


// 종목 DB (이름 → Yahoo Finance ticker 매핑)
//
const STOCK_DB = [
{name:'삼성전자',code:'005930',ticker:'005930.KS',market:'KOSPI'}, {name:'SK하이닉스',code:'000660',ticker:'000660.KS',market:'KOSPI'},
{name:'Tiger 200',code:'102110',ticker:'102110.KS',market:'KOSPI'},
{name:'Tiger S&P500',code:'360750',ticker:'360750.KS',market:'KOSPI'},
{name:'현대차',code:'005380',ticker:'005380.KS',market:'KOSPI'},
{name:'Tiger KOSDAQ 150',code:'232080',ticker:'232080.KS',market:'KOSPI'},
{name:'Tiger 반도체TOP10',code:'396500',ticker:'396500.KS',market:'KOSPI'},
{name:'Kodex 200',code:'069500',ticker:'069500.KS',market:'KOSPI'},
{name:'Kodex US NASDAQ100',code:'379810',ticker:'379810.KS',market:'KOSPI'}, {name:'KB금융',code:'105560',ticker:'105560.KS',market:'KOSPI'}, {name:'신한지주',code:'055550',ticker:'055550.KS',market:'KOSPI'}, {name:'하나금융지주',code:'086790',ticker:'086790.KS',market:'KOSPI'}, {name:'우리금융지주',code:'316140',ticker:'316140.KS',market:'KOSPI'}, {name:'삼성SDI',code:'006400',ticker:'006400.KS',market:'KOSPI'}, {name:'SK이노베이션',code:'096770',ticker:'096770.KS',market:'KOSPI'}, {name:'LG전자',code:'066570',ticker:'066570.KS',market:'KOSPI'}, {name:'SK텔레콤',code:'017670',ticker:'017670.KS',market:'KOSPI'}, {name:'KT',code:'030200',ticker:'030200.KS',market:'KOSPI'}, {name:'한국전력',code:'015760',ticker:'015760.KS',market:'KOSPI'}, {name:'삼성물산',code:'028260',ticker:'028260.KS',market:'KOSPI'}, {name:'현대모비스',code:'012330',ticker:'012330.KS',market:'KOSPI'}, {name:'대우건설',code:'047040',ticker:'047040.KS',market:'KOSPI'}, {name:'한화에어로스페이스',code:'012450',ticker:'012450.KS',market:'KOSPI'}, {name:'두산에너빌리티',code:'034020',ticker:'034020.KS',market:'KOSPI'}, {name:'HD현대중공업',code:'329180',ticker:'329180.KS',market:'KOSPI'}, {name:'삼성전기',code:'009150',ticker:'009150.KS',market:'KOSPI'}, {name:'현대건설',code:'000720',ticker:'000720.KS',market:'KOSPI'}, {name:'한국조선해양',code:'009540',ticker:'009540.KS',market:'KOSPI'}, {name:'두산로보틱스',code:'454910',ticker:'454910.KS',market:'KOSPI'}, {name:'포스코퓨처엠',code:'003670',ticker:'003670.KS',market:'KOSPI'}, {name:'NAVER',code:'035420',ticker:'035420.KS',market:'KOSPI'}, {name:'카카오',code:'035720',ticker:'035720.KS',market:'KOSPI'}, {name:'카카오뱅크',code:'323410',ticker:'323410.KS',market:'KOSPI'}, {name:'카카오페이',code:'377300',ticker:'377300.KS',market:'KOSPI'}, {name:'HLB',code:'028300',ticker:'028300.KQ',market:'KOSDAQ'}, {name:'에코프로',code:'086520',ticker:'086520.KQ',market:'KOSDAQ'}, {name:'에코프로비엠',code:'247540',ticker:'247540.KQ',market:'KOSDAQ'}, {name:'알테오젠',code:'196170',ticker:'196170.KQ',market:'KOSDAQ'}, {name:'리가켐바이오',code:'141080',ticker:'141080.KQ',market:'KOSDAQ'}, {name:'클래시스',code:'214150',ticker:'214150.KQ',market:'KOSDAQ'}, {name:'레인보우로보틱스',code:'277810',ticker:'277810.KQ',market:'KOSDAQ'}, {name:'애플',code:'AAPL',ticker:'AAPL',market:'NASDAQ'}, {name:'엔비디아',code:'NVDA',ticker:'NVDA',market:'NASDAQ'}, {name:'마이크로소프트',code:'MSFT',ticker:'MSFT',market:'NASDAQ'}, {name:'구글',code:'GOOGL',ticker:'GOOGL',market:'NASDAQ'}, {name:'아마존',code:'AMZN',ticker:'AMZN',market:'NASDAQ'}, {name:'메타',code:'META',ticker:'META',market:'NASDAQ'}, {name:'테슬라',code:'TSLA',ticker:'TSLA',market:'NASDAQ'}, {name:'TSMC',code:'TSM',ticker:'TSM',market:'NYSE'},
];

색상도 변경할 수 있네. 현재 색상 코드들
--bg:#0a0e17;
--surface:#111827;
--surface2:#1a2235;
--border:#1e2d42;
--accent:#00d4aa;
--accent2:#4f8ef7;
--danger:#ff4d6d;
--warn:#ffb800;
--text:#e2e8f0;
--muted:#64748b;
--buy:#00d4aa;
--sell:#ff4d6d;

물리적 경로: /data/data/com.android.chrome/app_tabs/0/Local Storage/leveldb (또는 유사한 구조)

'IT' 카테고리의 다른 글

Claude 주식매매일지 새로 수정  (0) 2026.04.08
구글 시트 주식매매 일지 만들기  (0) 2026.04.04
오피스 정품인증  (0) 2026.03.31
구글  (0) 2026.03.28
구글 Api key  (0) 2026.03.17