Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Private BreakoutScan monorepo for realtime market screener API, web app, mobile app, and shared contracts.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
BreakoutScan is an informational tool. It is not investment advice, a recommendation to buy or sell any security, or a trading system. Read what it does not do before relying on anything it shows.
Following the Indian market on your own usually means keeping several things open at once: a screener for scans, a charting site, a news feed, and a spreadsheet for fundamentals. Each covers one slice, and none of them tell you whether a move has actually held.README 전문 보기 ↗
The problem · The product · Day to day · Under the hood · Where it stands · Limits · Run it
BreakoutScan is an informational tool. It is not investment advice, a recommendation to buy or sell any security, or a trading system. Read what it does not do before relying on anything it shows.
Following the Indian market on your own usually means keeping several things open at once: a screener for scans, a charting site, a news feed, and a spreadsheet for fundamentals. Each covers one slice, and none of them tell you whether a move has actually held.
That costs the most between 09:15 and 09:45, when there are hundreds of stocks moving and only a few minutes to decide which ones deserve a look.
BreakoutScan puts the routine parts of that workflow in one place: scan the NIFTY 500, watch breakouts confirm rather than just tick, check a chart, and read a news-driven shortlist, then keep a watchlist of the names you follow.
A tour of the live product (real data captured with the market closed, so it shows the last session). Watchlist and Alerts are signed-in screens, shown here with a demo list.
| Dashboard | Headline numbers, a breakout feed grouped by stock, market breadth, and a sector strip that expands into a gain-to-loss heatmap |
| Screener | 13 prebuilt scans over the NIFTY 500, a custom condition builder, results that open right under the scan you ran |
| Breakout engine | 12 trigger types that must confirm before they count, see below |
| AI Picks | News-driven intraday, weekly and monthly ideas with a confidence level, target, stop-loss and the headlines behind each |
| Charts | Quote bar plus an interactive chart with EMA, RSI, MACD and Bollinger overlays, and a BUY / HOLD / SELL read for the stock |
| Fundamentals | Screens for value, quality, low debt and income (P/E, P/B, ROE, D/E, dividend yield, market cap) |
| Watchlist & Alerts | Personal watchlist with live prices; per-stock breakout alerts, recorded to your history |
| Phone & dark mode | Full layout down to 320px, light by default, dark on request |
These are realistic routines, not promises of results. Each says what the tool gives you and where your own judgement still has to do the work.
What it gives you: a shortlist to look at. What it doesn't: a reason to enter. That's still your call.
Limit: the live feed depends on the data source being up. The app tells you when it has fallen back or is stale.
Limit: alerts are stored and visible in-app. Email / Telegram / push delivery is not built yet.
Limit: the figures come from Yahoo Finance, an unofficial source. Some companies have missing values (shown as "–"). Verify anything that matters against filings.
Thirteen prebuilt scans run over the NIFTY 500. Anything else can be built in the custom builder from RSI, EMA, MACD, Bollinger, ATR, ADX, volume and price conditions.
| Scan | What it looks for |
|---|---|
| RSI Oversold / Overbought | RSI(14) below 30 / above 70 |
| Bullish / Bearish EMA Crossover | EMA(9) above / below EMA(21) |
| Price Above / Below SMA(200) | Close above / below the 200-day average |
| Volume Spike (2×) | Volume more than twice the 20-period average |
| Bollinger Squeeze | Band width under 4%: volatility contracting |
| MACD Bullish / Bearish Cross | MACD line above / below its signal line |
| Near 52-Week High | Close within 5% of the 52-week high |
| ORB Breakout Long | Price above the opening-range high (first 15 minutes) |
| Bullish Engulfing | The candlestick reversal pattern |
A price poking through a level isn't a breakout yet. The engine watches twelve kinds of level and walks each one through a small state machine, and only confirmed breakouts are stored.
| Trigger | The level it watches | Confirms after | Watch expires |
|---|---|---|---|
| Previous day high / low | Yesterday's extremes | 1 × 5-min bar | End of day |
| Opening range (ORB) | High / low of the first 15 minutes | 1 × 5-min bar | End of day |
| 52-week high / low | 252-day extremes | 2 × 15-min bars | 20 bars |
| Donchian channel | Highest high / lowest low of recent bars | 2 × 15-min bars | 20 bars |
| NR4 / NR7 | Narrowest-range bar of the last 4 / 7 | 1 × 15-min bar | End of day |
| Inside bar | Range of the bar before | 1 × 15-min bar | End of day |
| Volume breakout | Volume above a multiple of its average | 1 × 5-min bar | End of day |
| VWAP | Session VWAP reclaimed / lost | 1 × 5-min bar | End of day |
| EMA cross | EMA(9) vs EMA(21) | 1 × 15-min bar | 10 bars |
| MACD cross | MACD vs signal line | 1 × 15-min bar | 10 bars |
| Bollinger squeeze release | Squeeze ending | 1 × 15-min bar | 10 bars |
A confirmed breakout that reverses through its level afterwards is recorded as FAILED, so false breakouts are counted, not silently dropped.
Every confirmed breakout is scored from 0 to 100 in six visible parts, not one opaque number.
Honest status: the score is computed and stored with each confirmed breakout and returned by the API (which can filter by minimum score). The dashboard doesn't display it yet.
Sector performance is computed from live prices across 56 sectors. The API also exposes a simple market-regime read (trending, choppy, high volatility). The engine includes detectors for candlestick and chart-structure patterns (triangles, flags, double tops and bottoms, head and shoulders, cup and handle, Darvas boxes), though only Bullish Engulfing is exposed as a prebuilt scan today.
Resilience by design. The live feed is Upstox's V3 WebSocket. If it stalls, a failover controller switches to polling NSE, and the breakout engine reads from the shared price and candle store rather than from either feed directly, so signals keep working through a switch. Redis is a cache that rebuilds itself. When the market is closed the engine idles instead of polling, and the app shows the last confirmed session, labelled as such.
| Layer | What's used |
|---|---|
| Web | Next.js 15 (App Router), React 19, Tailwind CSS 3, TanStack Query and Table, Framer Motion, Recharts, TradingView's chart widget |
| API | FastAPI on Python 3.12, SQLAlchemy 2 (async) with Alembic migrations, pandas / pandas-ta, WebSockets |
| Data | Postgres (Supabase), Redis, Upstox V3 (live), NSE polling (fallback), Yahoo Finance (history, fundamentals) |
| Auth | Firebase Auth (Google sign-in); the API verifies OIDC tokens by configuration, and Supabase tokens are still accepted |
| AI | Gemini (AI Picks), Groq (per-stock call) |
| Hosting | Vercel (web), Railway (API and Redis), Supabase (database) |
Design system. The interface follows a small "Ledger" system: hairline panels, one type scale, tabular monospaced numbers, green and red only for price direction, and one accent colour for interactive state. It was audited for contrast, labels and touch targets across light and dark at 320–1440px.
| Status | Live in production. Built and maintained by one developer. |
| Coverage | NIFTY 500 · 13 prebuilt scans · 12 breakout triggers · 56 sectors |
| Automated tests | 343 backend tests (indicators, scan DSL, breakout state machine, auth, data retention, API routes). The frontend has type-checking and a production build, but no automated unit tests yet. |
| Last release check | Type-check and production build, plus an automated browser sweep of every route at 3 widths in light and dark (contrast, overflow, labels, console errors) and a click-through of every control. |
| Running cost | The API and Redis run on a paid Railway plan; the web app, database, auth and AI keys use free tiers. The database needed egress and retention work to stay inside the free plan. |
| Users | No usage numbers are published, because none are tracked. |
Being clear about limits matters more than the feature list.
Honest gaps, roughly in the order they'd help a daily user:
You'll need Python 3.12, Node 20+, and a Postgres and a Redis. The quickest way to get the two datastores is the compose file:
git clone https://github.com/iamadarsha/breakoutscan.git
cd breakoutscan
cp .env.example .env # then fill in what you have (notes below)
docker compose up -d postgres redis # Postgres on :5432, Redis on :6379
# API (http://localhost:8001 · docs at /docs)
cd apps/api
python -m venv .venv && source .venv/bin/activate
pip install -r requirements-dev.txt
export DATABASE_URL="postgresql+asyncpg://breakoutscan:breakoutscan@localhost:5432/breakoutscan"
export REDIS_URL="redis://localhost:6379/0"
alembic upgrade head # create the tables
uvicorn app.main:app --reload --port 8001
# Web (http://localhost:3000)
cd apps/web
npm install
INTERNAL_API_URL=http://localhost:8001 npm run dev # the web app proxies /api to the API (no CORS setup needed)
The UI loads with nothing configured, but data depends on what you provide. (For live WebSocket prices in the browser, also set NEXT_PUBLIC_WS_URL=ws://localhost:8001; without it the app falls back to polling.)
docs/UPSTOX_ONBOARDING.md. Without it the NSE fallback is used.GEMINI_API_KEY and GROQ_API_KEY (both have free tiers).docs/FREE_STACK_MIGRATION.md..env.example still lists Supabase variables from an earlier setup; the migration guide above describes the current one.docker-compose.yml also defines API and web containers, but that full-stack path isn't maintained: the API container's port settings look out of sync with its healthcheck, so it may not start. Use the manual route above.Checks
cd apps/api && pytest # 343 tests
cd apps/web && npx tsc --noEmit && npm run build
breakoutscan/
├── apps/
│ ├── api/ FastAPI service
│ │ └── app/
│ │ ├── api/routes/ REST endpoints (screener, breakouts, market, alerts, …)
│ │ ├── market/ feed pipeline, candles, indicators, failover, regime
│ │ ├── breakouts/ 12 triggers, state machine, DNA scoring
│ │ ├── screener/dsl/ scan language: parser, validator, evaluator
│ │ ├── patterns/ candlestick + structural patterns
│ │ ├── services/ AI, fundamentals, retention, Yahoo/NSE clients
│ │ └── tests/ 343 tests
│ ├── web/ Next.js app (dashboard, screener, charts, …)
│ ├── mobile/ Expo app (early scaffold)
│ └── ios/ native iOS wrapper (early)
├── docs/ architecture notes, migration guide, provider matrix
└── docker-compose.yml local Postgres + Redis + API + web
More reading: Free-stack & migration guide · Data provider matrix · Architecture audit · Security remediation · Upstox onboarding