Week 4 ยท ๐ŸŸข ๊ณผ์ œ 5

์ฐจํŠธ Vision + 3D Verdict

Chart-IMG๋กœ ์ฐจํŠธ ์บก์ฒ˜ โ†’ Claude Vision ํŒจํ„ด ๋ถ„์„ โ†’ 3D ํ†ตํ•ฉ ํŒ๋‹จ

๐Ÿ  ๊ฐ•์˜๋…ธํŠธ ํ™ˆ ๐Ÿ“ฆ ์ด ํŽ˜์ด์ง€ GitHub โ†— ๐Ÿ“‚ W4 ํด๋” โ†—
๋ชฉํ‘œ

์ด๋ฒˆ ์ฃผ ๋ชฉํ‘œ โ€” 3์ฐจ์› ์˜๊ฒฌ ํ†ตํ•ฉ

์ง€๊ธˆ๊นŒ์ง€ ๋งŒ๋“  3๊ฐœ ์‹ ํ˜ธ๋ฅผ ํ•˜๋‚˜์˜ ์˜๊ฒฌ์œผ๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค.

๐Ÿ“Š
PRICE
(W2 ์ง€ํ‘œ)
๐Ÿ“ฐ
NEWS
(W3 ์„ผํ‹ฐ๋จผํŠธ)
๐Ÿ“‰
CHART
(W4 Vision)
3D Verdict โ€” 3๊ฐœ ์‹ ํ˜ธ ๋ชจ๋‘ ๊ฐ™์€ ๋ฐฉํ–ฅ์ด๋ฉด ๊ฐ•ํ•œ ์‹ ํ˜ธ. 2๊ฐœ ์ผ์น˜๋Š” ์ค‘๊ฐ„ ์‹ ํ˜ธ. ์–ด๊ธ‹๋‚˜๋ฉด ๋ณด๋ฅ˜. W7์—์„œ ์ด ํ†ตํ•ฉ์„ ๋ณ„๋„ ์—์ด์ „ํŠธ๋“ค์—๊ฒŒ ์œ„์ž„ํ•  ์ค€๋น„.
Workflow

์›Œํฌํ”Œ๋กœ์šฐ ํ๋ฆ„

๐Ÿ”ด Triggerโ†’ ๊ด€์‹ฌ์ข…๋ชฉ ์‹œํŠธ row + Cron ๋˜๋Š” Webhook
๐Ÿ”ต HTTPโ†’ Chart-IMG โ€” RSI/MACD๊ฐ€ ํ‘œ์‹œ๋œ ์ฐจํŠธ PNG ๋ฐ›๊ธฐ
๐ŸŸฃ Visionโ†’ Claude Sonnet Vision โ€” ์ฐจํŠธ ์ด๋ฏธ์ง€ ๋ถ„์„ (์ง€์ง€ยท์ €ํ•ญยทํŒจํ„ด)
๐Ÿ”ต Lookupโ†’ W2 ์ง€ํ‘œ์ด๋ ฅ + W3 ๋‰ด์Šค์ด๋ ฅ์—์„œ ๊ฐ™์€ ์ข…๋ชฉ ์ตœ์‹  ์‹ ํ˜ธ fetch
๐ŸŸฃ Verdictโ†’ Claude โ€” Price + News + Chart 3์ฐจ์› ํ†ตํ•ฉ ํŒ๋‹จ
๐ŸŸข Outputโ†’ Sheets verdict ์‹œํŠธ + Slack ์•Œ๋ฆผ (๊ฐ•ํ•œ ์‹ ํ˜ธ๋งŒ)
Chart-IMG

์ฐจํŠธ ์ด๋ฏธ์ง€ ํ˜ธ์ถœ

GET https://api.chart-img.com/v2/tradingview/advanced-chart
  ?symbol=KRX:005930
  &interval=1D
  &theme=dark
  &width=1200&height=700
  &studies=RSI,MACD,BB
  &api_key={key}

์‘๋‹ต: image/png ๋ฐ”์ด๋„ˆ๋ฆฌ โ†’ n8n binary๋กœ ๋ฐ›์•„ Claude attachment๋กœ ์ „๋‹ฌ
Vision Prompt

Claude Vision ํ”„๋กฌํ”„ํŠธ

(์ฒจ๋ถ€๋œ ์ฐจํŠธ ์ด๋ฏธ์ง€ 1์žฅ + ํ…์ŠคํŠธ)

๋„ˆ๋Š” ์ฐจํŠธ ๋ถ„์„๊ฐ€๋‹ค. ์ฒจ๋ถ€๋œ ์ผ๋ด‰ ์ฐจํŠธ(RSIยทMACDยท๋ณผ๋ฆฐ์ € ํฌํ•จ)๋ฅผ ๋ณด๊ณ  ๋ถ„์„ํ•˜๋ผ.

ํŒ์ •ํ•  ํ•ญ๋ชฉ:
1. ์ถ”์„ธ: uptrend / downtrend / sideways
2. ํŒจํ„ด: head_shoulders / double_top / double_bottom / breakout / consolidation / none
3. ์ง€์ง€์„ ยท์ €ํ•ญ์„  ๊ฐ€๊ฒฉ๋Œ€
4. RSI/MACD๊ฐ€ ๋ณด๋‚ด๋Š” ์‹ ํ˜ธ
5. ์ฐจํŠธ ๊ด€์  ์ข…ํ•ฉ ์˜๊ฒฌ: bullish / neutral / bearish (-1 ~ +1)

JSON์œผ๋กœ๋งŒ ์‘๋‹ต.
Verdict Logic

3D ํ†ตํ•ฉ ๊ทœ์น™ (๊ฐ„๋‹จ ๋ฒ„์ „)

// ์ž…๋ ฅ: priceScore, newsScore, chartScore (๊ฐ -1 ~ +1)
// ์ถœ๋ ฅ: verdict, confidence

const scores = [priceScore, newsScore, chartScore];
const sum = scores.reduce((a,b)=>a+b, 0);
const avg = sum / 3;

let verdict, confidence;
if (Math.abs(avg) < 0.2) {
  verdict = "HOLD";
  confidence = "low";
} else if (scores.every(s => s > 0.3)) {
  verdict = "BUY_STRONG";
  confidence = "high";
} else if (scores.every(s => s < -0.3)) {
  verdict = "SELL_STRONG";
  confidence = "high";
} else if (avg > 0) {
  verdict = "BUY_WEAK";
  confidence = "medium";
} else {
  verdict = "SELL_WEAK";
  confidence = "medium";
}
return { verdict, confidence, avg, scores };
Missions

๐ŸŸข ๊ณผ์ œ 5๊ฐœ

1
Chart-IMG ๋‹จ๋…
๊ด€์‹ฌ์ข…๋ชฉ 1๊ฐœ๋กœ ์ฐจํŠธ PNG ๋ฐ›์•„ ๋ณธ์ธ Drive์— ์ €์žฅ โ†’ ํ™”๋ฉด ํ™•์ธ
2
Claude Vision ๋‹จ๋…
์ฐจํŠธ ์ด๋ฏธ์ง€ 1์žฅ์„ Claude Sonnet์— ์ฒจ๋ถ€ ํ˜ธ์ถœ, JSON ์‘๋‹ต ๋ฐ›๊ธฐ
3
3๊ฐœ ์‹ ํ˜ธ fetch
๋™์ผ ticker์˜ W2/W3/W4 ์ตœ์‹  ์ ์ˆ˜๋ฅผ Code ๋…ธ๋“œ 1๊ฐœ์—์„œ ๋ชจ๋‘ ์กฐํšŒ
4
Verdict ํ†ตํ•ฉ
์œ„ ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•ด verdict ์‹œํŠธ์— ticker๋ณ„ 1ํ–‰ ์ถœ๋ ฅ
5
๊ฐ•ํ•œ ์‹ ํ˜ธ 5๊ฐœ ๋ฐœ๊ตด
๊ด€์‹ฌ์ข…๋ชฉ 20๊ฐœ ๋Œ๋ ค BUY_STRONG/SELL_STRONG 5๊ฐœ ๋ฉ”์ผ๋กœ ๋ฐ›๊ธฐ
๋น„์šฉ ์ฃผ์˜ โ€” Vision 1ํšŒ โ‰ˆ $0.01 (Sonnet 1k token + image). 20์ข…๋ชฉ ร— ๋งค์ผ = $6/์›”. Cron ๋นˆ๋„ ์กฐ์ ˆ ๋˜๋Š” ๊ฐ•ํ•œ ์‹ ํ˜ธ ํ›„๋ณด๋งŒ Vision ํ˜ธ์ถœ.