Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
하나의 마스터 MetaTrader 계정에 최대 열 명의 팔로워를 연결
Connect one master MetaTrader account and up to ten followers. Monitor them from one dashboard and mirror every trade, without ever handing over a trading password.
금융TypeScript · MQL5GitHub @Conradfrmdao온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A web platform for connecting one master MT4/MT5 account and up to ten follower
accounts, watching them from a single dashboard, and copying trades between them.
Connect → Monitor → Copy → Analyze.
Requirements: Node 20+, Docker, and a MetaTrader 4 or 5 terminal for the agent.
Open, create an account, and collect the verification
email from Mailpit at.
Two hosts, because the API needs a process that stays alive — it holds the
dashboard's live connection open and notices within 30 seconds when a terminal
goes quiet. Serverless cannot do either. Full detail in
docs/DEPLOYMENT.md.README 전문 보기 ↗A web platform for connecting one master MT4/MT5 account and up to ten follower accounts, watching them from a single dashboard, and copying trades between them.
Connect → Monitor → Copy → Analyze.
Requirements: Node 20+, Docker, and a MetaTrader 4 or 5 terminal for the agent.
git clone <this repo> tradeos && cd tradeos
npm install
# Postgres, Redis and Mailpit (a local mail catcher)
npm run infra:up
# Generate secrets and a local .env
cp .env.example .env
node -e "const c=require('crypto');console.log('SESSION_SECRET='+c.randomBytes(32).toString('base64url'));console.log('ENCRYPTION_KEY='+c.randomBytes(32).toString('base64'))"
# paste those two values into .env
npm run db:migrate # create the schema
npm run build -w @tradeos/shared
npm run dev # API on :4000, web on :3000
Open http://localhost:3000, create an account, and collect the verification email from Mailpit at http://localhost:8025.
| Service | URL |
|---|---|
| Web app | http://localhost:3000 |
| API | http://localhost:4000 |
| Mailpit (dev inbox) | http://localhost:8025 |
Two hosts, because the API needs a process that stays alive — it holds the dashboard's live connection open and notices within 30 seconds when a terminal goes quiet. Serverless cannot do either. Full detail in docs/DEPLOYMENT.md.
Uses the committed render.yaml. Fill in DATABASE_URL, DIRECT_DATABASE_URL
and ENCRYPTION_KEY when prompted. Note the URL it gives you.
On Railway, deploy from the GitHub repo and confirm the builder is Dockerfile (Settings → Build). Its Node auto-detection cannot build a monorepo and will fail looking for a start command.
Set NEXT_PUBLIC_API_URL to the API URL from step 1.
3. Connect them — set WEB_ORIGIN on the API to your Vercel URL and
redeploy the API. Skipping this is the usual cause of "everything fails in the
browser but works in curl": it is what CORS is checked against.
On free tiers the API sleeps when idle, and a sleeping API copies no trades. Use a paid instance before connecting a funded account.
TradeOS does not ask for your trading password, and does not store one.
Instead, a small Expert Advisor — the agent — runs inside your own MetaTrader terminal, which is already logged in. It reports what it sees and executes the instructions you configure in the dashboard, over HTTPS.
Browser
│ REST + WebSocket
▼
TradeOS API ──── Postgres
│ Redis (realtime fan-out)
│ HTTPS, bearer token per account
▼
TradeOS agent (Expert Advisor)
│
▼
Broker server
The trade-off is that your terminal has to be running for that account to be online — which is also true of any EA-based copier, and is surfaced explicitly: every account shows its last heartbeat, and going quiet raises an alert.
connector/shared/JsonLite.mqh into MQL5/Include/TradeOS/
(or MQL4/Include/TradeOS/).connector/mt5/TradeOsAgent.mq5 into MQL5/Experts/
(or connector/mt4/TradeOsAgent.mq4 into MQL4/Experts/) and compile it.PairingCode input.The pairing code is single-use and expires in 30 minutes. After pairing, the agent stores a token and reconnects on its own.
apps/
api/ Fastify API, trade copy engine, agent protocol
web/ Next.js dashboard
packages/
shared/ Types, zod schemas, and the pure copy/risk rules
db/ Prisma schema and migrations
connector/
shared/ JsonLite.mqh — JSON for MQL
mt4/ TradeOsAgent.mq4
mt5/ TradeOsAgent.mq5
docs/ Architecture, protocol, security, test plan
The copy and statistics rules live in packages/shared as pure functions with
no I/O, so they can be tested exhaustively and reused by both apps.
| Command | What it does |
|---|---|
npm run dev | API and web, both in watch mode |
npm run build | Build all three packages |
npm test | Unit tests plus the end-to-end copy flow |
npm run db:migrate | Create/apply a migration |
npm run db:studio | Browse the database |
npm run infra:up / infra:down | Start/stop Postgres, Redis, Mailpit |
npm test runs against the development database. It creates a throwaway user
per run and deletes it afterwards.
Authentication via Clerk (sign-in, sign-up, email verification, password reset) · one master and up to ten followers · live balance, equity, margin and open positions · the trade copier with same-lot, multiplier and fixed-lot sizing · stop-loss and take-profit copying · reverse copying · symbol mapping · per-follower and global copy switches · emergency stop and close-all · a copy event log with per-operation failure reasons · open trades, trade history, per-account and portfolio statistics, equity curves, account comparison · in-dashboard and email notifications · an admin console.
Deliberately not in V1: signal marketplace, public profiles, payments,
mobile apps, non-MetaTrader platforms, and the advanced risk engine. See
docs/ARCHITECTURE.md for where those would slot in.
Positions already open when a master connects are not copied. The first snapshot from a master terminal is recorded as a baseline; only changes after that are copied. Otherwise attaching the agent to an account holding ten positions would fire ten trades at prices that no longer relate to the entries. Those positions appear in the event log marked as skipped, with the reason.
A copy that cannot be executed within 60 seconds is abandoned, not retried.
A fill a minute late is not a copy — it is a new trade at a price the user never
chose. Explicit broker failures that are worth retrying (requotes, busy server)
are retried up to three times; everything else fails fast with a reason. Both
timings are configurable in .env.
Run the full checklist in docs/TESTING.md on demo accounts first — internet
loss, terminal restart, server restart, market closed, insufficient margin, and
the duplicate-prevention cases. The copier is built so that a repeated or
replayed master event can never produce a second trade
(docs/ARCHITECTURE.md#idempotency), and there is an automated test for exactly
that, but your broker's behaviour is the part no test here can cover.