지인들끼리 수익률을 겨루는 모의 선물 트레이딩 플랫폼.
실시간 시세(바이낸스) 기반으로 롱/숏 포지션을 연습하고, 친구들과 랭킹으로 경쟁합니다. 잔고·포지션·손익은 전부 서버(Cloudflare D1)가 계산·보관하므로, 클라이언트에서 가격이나 잔고를 조작해도 랭킹에는 반영되지 않습니다 — 공정한 경쟁을 위한 서버 권위 구조입니다.
- 📈 실시간 차트 — TradingView Lightweight Charts, 38개 실제 심볼 + 가상 심볼(OX/USDT · EW/USDT) 40종, 다양한 타임프레임(초/분/시간/일+)
- 🎨 차트 색상 테마 — 바이낸스 / OKX / 트레이딩뷰 배색 프리셋(캔들 색·배경), 사이트 다크/라이트/고대비 테마와 별개로 선택
- 📊 보조지표 15종 — 오버레이(EMA/SMA/BB/VWAP/Ichimoku/Parabolic SAR/SuperTrend) + 오실레이터(RSI/MACD/Stochastic/ATR/ADX/CCI/OBV/Williams %R, 하단 별도 패널 자동 스택). 기간·개수 자유 설정, 지표별 👁 표시/숨김(삭제 없이 끄기), 거래량 히스토그램
- 🏷️ 거래 수수료 · VIP 등급(무한 레벨) — 누적 거래대금(레버리지 포함)이 쌓일수록 등급이 계속 오른다. 한 등급당 필요 거래대금 ×4 · 수수료 ×0.79 (VIP0 0.03% → VIP10 0.0028% → VIP20 0.00027% → … 하한 0.0000001%), 상한 없음. 등급 뱃지(클릭 시 다음 등급까지 진행 막대·남은 거래대금·등급표)와 주문 예상 수수료 표시
- 💰 모의 거래 — 시장가/지정가/조건부(스탑) 롱·숏, 레버리지 1~250배, SL/TP, 부분청산(슬라이더로 비중 선택), 강제청산(계좌 파산) + 리필 안전망
- 🔢 큰 숫자는 항상 축약 — 평가자산·수량·청산가처럼 자릿수가 폭주하는 값은 한국식 단위(만/억/조/경/해/자/양)로 줄여 보여주고, 정확한 값은 마우스를 올리면 툴팁으로 나옵니다(칸이 밀려 다른 정보가 화면 밖으로 나가는 걸 막습니다)
- 🔢 수량 제한 없음(사실상) — 싼 코인을 고배율로 담으면 수량이 조 단위를 훌쩍 넘습니다. 한도는 가용 증거금뿐이라 자릿수를 얼마나 길게 넣어도 "수량 오류"가 뜨지 않고, 감당 못 하는 수량이면 실제 코인은 "증거금이 부족합니다 (최대 약 N 개)" 로 얼마면 되는지 알려주고 OX/EW 는 감당 가능한 만큼 부분 체결됩니다. 그렇게 커진 포지션도 전량 청산 시 먼지 없이 깨끗하게 닫힙니다
- 🎯 조건부(스탑) 주문 — 현재가가 지정한 트리거 가격 이상/이하가 되면 시장가로 진입. 물량이 부족해 일부만 체결되면 나머지는 조건이 계속 살아있습니다
- ♾️ 무한(반복) 조건부 — "1.5 이하로 떨어지면 계속 123개씩 매수"처럼 체결돼도 주문이 사라지지 않고 계속 일합니다. 두 가지 방식:
- 조건 만족 중 계속(기본) — 트리거 조건이 참인 동안 계속 진입합니다(물타기/DCA). 재실행 간격은 최소 5초입니다. ⚠ 스스로 멈추지 않으니 재실행 간격(초) 과 최대 실행 횟수로 제어하세요
- 되돌아올 때마다 1회 — 한 번 실행하면 쉬고, 가격이 트리거 반대편(재무장 가격)으로 돌아왔다 다시 트리거될 때 1회씩 실행합니다
- 앱을 완전히 닫아둬도 계속 실행됩니다(서버 cron 이 1분마다 전 유저의 조건을 평가 — 지정가·SL/TP 도 동일). 평가 주기만 달라집니다: 앱을 켜두면 약 1초, 닫아두면 1분마다 몰아서. 조건부 탭에서 언제든 수정·취소할 수 있습니다
- ✏️ 조건부 주문 수정 — 취소하지 않고 트리거 가격·수량·조건(이상/이하)·반복 설정을 바로 고칩니다
- 🪙 가상 코인(OX/USDT · EW/USDT) — 실제 코인과 완전히 동일한 레버리지 거래, 체결가만 마켓메이커 봇이 생성. 코인마다 봇 심리·호가창·캔들·체결이 완전히 독립이라 서로 다르게 움직입니다. 호가 단위는 실제 거래소처럼 유효숫자 4자리로 고정돼 가격대에 따라 자동으로 바뀝니다(0.9234 → 0.0001 / 0.002434 → 0.000001 / 123.4 → 0.1)
- 🧠 봇 심리 모델 — 추세 지속·변동성 클러스터링·과열 후 되돌림·탐욕/공포 국면 전환(급락이 급등보다 빠름)·라운드넘버 지지저항까지 재현해, 밋밋한 랜덤워크가 아니라 읽을 구조가 있는 차트를 만듭니다. 한 국면이 수십~수백 틱 이어지므로 급등·급락이 봉 여러 개짜리 구간으로 남고, 신고점을 뚫으면 추격 매수가, 지지가 깨지면 손절 연쇄가 따라붙습니다. 상승장엔 거래량도 같이 붙고, 공포장엔 매수 호가가 걷혀 같은 크기 시장가라도 훨씬 깊게 파고듭니다
- 🕐 시장에 하루 리듬이 있습니다 — 실제 거래소처럼 시간대에 따라 성격이 바뀝니다. 아시아·유럽·미국 세션이 겹치는 밤 10시~새벽 1시(KST)가 하루의 정점이고, 오전 8시 무렵이 가장 한산하며 주말은 통째로 조용합니다(활발한 시간의 변동성은 1.25배, 거래량은 2배 이상). 관망이 길어지면 변동성이 스스로 조여들다가(수축) 국면이 깨질 때 한 방향으로 터지고(확장), 전 고점 아래에서는 본전 매도에 눌려 머뭇거리다 뚫리면 추격 매수가 붙습니다
- 🎬 체결 하나하나가 "누가 덮쳤는지"에서 나옵니다 — 체결가를 흔들어 만들고 색을 나중에 붙이는 게 아니라, 테이커 방향을 먼저 정하고 그쪽 호가에 찍습니다. 그래서 잔잔할 때는 매수·매도가 두 가격 사이를 딸깍딸깍 왕복하고(호가 바운스), 큰 주문이 들어오면 사다리를 파고들어 최우선호가 자체가 밀린 채로 몇 건 더 찍히다 제자리로 돌아옵니다(그 자리엔 꼬리가 남습니다). 체결은 균일하게 도착하지 않고 몰렸다 한산해지며, 낮은 확률로 군중 반대편을 훅 찔렀다 되돌아오는 스톱 헌팅 꼬리가 나옵니다. 그리고 큰 주문은 한 번에 다 나오지 않고 같은 방향·비슷한 수량으로 여러 건 쪼개져 흐르므로(2,384 / 2,391 / 2,384 …) "지금 누가 계속 사고 있다"가 테이프에서 읽힙니다
- 📖 호가창 · 체결내역 — 매수/매도 좌우 2열 호가, 실시간 체결 탭(실제 심볼은 바이낸스 체결 스트림). 한 화면에 보이는 줄 수를 설정에서 5~50개로 조절할 수 있고(줄 수를 정하면 목록 높이도 그만큼 고정돼 체결이 들어올 때마다 패널이 오르내리지 않습니다), PC에서는 호가와 체결을 탭 전환 없이 같이 보는 옵션도 있습니다(실제 코인은 거래소 호가 스트림이 최대 20단계까지만 줍니다). 체결 행은 가격·수량 모두 매수/매도 색으로 표시되며, 색 기준은 실제 거래소와 같은 테이커(먼저 덮친 쪽) 입니다 — 직전 체결보다 비싸게 체결되면 매수, 싸게 체결되면 매도. 실제 코인 호가는 0.2초, 체결은 발생 즉시 갱신되고, 가상 코인은 서버 폴링(1초)이지만 한 번에 도착한 체결을 0.1
0.25초 간격으로 한 건씩 흘려보내 실제 거래소 테이프처럼 흐릅니다(초당 약 5회 — 봇이 초당 찍는 체결 건수만큼). OX 호가는 사람처럼 1.4000 같은 라운드 가격에 몰리고 그 자리에 두꺼운 벽이 생기며, 그 벽은 같은 자리에 계속 남습니다 — 호가창이 1초마다 통째로 갈리지 않고, 최우선호가는 매 틱 바뀌지만 깊은 자리의 주문은 몇 분씩 그대로 앉아 있습니다(실제 호가창처럼 가격 간격도 불규칙합니다). 내가 대량 체결로 파먹은 자리는 파먹힌 채로 남아 조금씩 다시 채워집니다. 수량도 개미·세력·고래가 섞입니다 — 체결 건수의 절반 이상은 수십수백 개짜리 개미 주문이고 거래량의 절반은 상위 1%의 고래가 만들며, 호가 한 자리에 개미 하나만 있으면 얇고 세력이 끼면 두껍습니다(그래서 시장가가 얇은 구간은 훅 지나가고 벽 앞에서 멈춥니다). 내가 걸어둔 미체결 주문은 호가창에서 강조 표시 - 🔎 체결 목록 필터 · 강세/약세 표시 — 설정에서 거래대금(USDT) 또는 수량 기준으로 "이 값 이상 / 이하만" 보도록 거를 수 있습니다(개미 체결을 걷어내고 고래만 보기 등). 설정은 모든 심볼에 똑같이 적용되고 표시만 거르므로 호가·차트·거래엔 영향이 없으며, 필터가 걸려 있으면 체결 탭에 뱃지가 떠 누르면 바로 꺼집니다. 체결 가격 뒤에는 강세·약세 레벨 바가 은은하게 깔립니다 — 그 시점의 최근 평균보다 싸게 체결되면 약세, 비싸게 체결되면 강세이고 많이 벗어날수록 바가 길어집니다(1~50레벨). "지금 이 가격이 싼 가격인가"를 목록을 훑기만 해도 알 수 있게 한 것으로, 마우스를 올리면 평균 대비 %가 나옵니다
- 🧾 내 시장가도 한 줄로 뭉치지 않습니다 — 큰 주문이 호가를 여러 단계 훑으면 실제 거래소처럼 가격대별로 여러 줄이 체결창에 찍힙니다(최대 20줄 — 46개 가격대를 훑어도 가격이 걸어간 모습이 그대로 남습니다). 한 번의 매매는 절대 가격이 되돌아가지 않고 한 방향으로만 훑습니다. 내 체결은 봇 체결에 밀려 목록에서 잘려나가지 않지만, 한 화면에 몇 줄이 보이는지는 설정의 "호가·체결 표시 개수"(기본 10) 를 따르므로 20줄을 다 보려면 그 값을 올리면 됩니다
- 🏆 친구 랭킹 — 평가자산(잔고 + 미실현 손익) 기준 실시간 순위 + 거래소가 수수료로 번 총액
- 🔐 간편 로그인 — 이름 + 패스코드만으로 가입/로그인
- 📱 반응형 UI — 모바일 1줄 헤더 + 아이콘 위주 컴팩트 레이아웃, PC 확장 레이아웃
- 🧩 ox64.app/b 보석찾기 — 코인 트레이딩과 완전히 분리된 미니 퍼즐게임. 격자에 숨은 보석을 칸 단위로 찾아내는 방식(레벨 1~10, 칸 오픈마다 코스트 소모·클리어 시 재화 보상). 같은 계정(이름+패스코드)을 그대로 쓰지만 재화·기록은 트레이딩과 무관한 별도 D1 테이블
- 🛰️ ox64.app/s1 미니 RTS — 스타크래프트1 스타일 실시간 전략 게임. 일꾼으로 자원을 캐고 기지를 올려 컴퓨터와 1:1로 붙습니다(테란 1종족, 유닛 4종·건물 5종, 전장의 안개). 사이트에서 유일하게 서버도 로그인도 없이 전부 브라우저에서 돌아갑니다 — RTS는 초당 수십 번 시뮬레이션이 필요해 D1 폴링으로는 불가능하기 때문입니다. 그래픽은 전부 코드로 그린 도형이고 원본 리소스는 쓰지 않았습니다
- 📦 ox64.app/c 상자깡 — 상자를 까서 재료와 돈을 얻고, 같은 재료 2개를 끌어다 합쳐 레벨을 올려 값을 불리는 미니게임. 한 상자에서 여러 보상이 동시에 나오고(항목마다 따로 추첨), 상자 안에서 또 다른 상자가 나오기도 합니다. 재료는 약초·목재·광석·섬유·보석·정수 6종(각 Lv1~12) + 상자조각 + 골드복권이고, 합칠 때 종류는 그대로, 레벨만 오릅니다(가치는 2.25배). 상자는 Lv1~5까지 있습니다. 🎫 골드복권은 레벨도 없고 팔 수도 합칠 수도 없이 긁는 것만 가능한데, 한 장에 최소 30 G에서 최대 240,000 G까지 나옵니다(평균 2.6배). 상자조각은 Lv4까지 모아 2개를 합치면 상자가 되며 운이 좋으면 더 비싼 상자가 나옵니다. ⚠ 상자만 까서 다 팔면 본전이 안 나오게 설계돼 있어(회수율 약 70%) 끝까지 합쳐서 파는 게 유일한 흑자 경로입니다 — 그래서 아무리 까도 돈이 무한정 불어나지 않습니다. 여기에 1/2,000 ~ 1/250,000 짜리 극한 확률 잭팟(상자 가격의 25배~1,500배)이 숨어 있습니다. 요일마다 이벤트가 돕니다 — 🎁선물의 날(보너스가 자주)·⛏️광부의 날(재료 증가)·💰황금의 날(골드 증가)·🧩조각의 날(상자조각 2배)·📦창고 대방출(상점 10% 할인)·🍀행운의 날(잭팟 3배)·🎉축제의 날(대량 개봉 공짜 확정). 개봉마다 ✨보너스(보상 항목 추가)·🔥더블·⚡트리플·💥메가(보상 5배)가 터질 수 있고, 10개 이상 한 번에 까면 확률적으로 공짜 상자가 하나 더 나옵니다. 누적 개봉 수가 쌓이면 마일스톤 상자를, 조건을 채우면 업적 보상(21종)을 자동으로 받습니다. 돈을 다 잃어도 매일 상자를 지원받고(하루 한 번, 누구나) 그마저 잃으면 구제 물자를 받아 다시 시작할 수 있습니다 — 골드가 아니라 상자로 주는 이유는, 상자를 여러 개 한꺼번에 까야 같은 재료가 모여 합칠 수 있기 때문입니다. 🏆 랭킹은 소지 골드와 총자산(재료·안 깐 상자까지 판 값) 두 기준으로 볼 수 있습니다 — 재료를 쌓아두면 골드 순위는 내려가도 총자산은 그대로라, 어느 쪽으로 노는지가 순위에 드러납니다. 같은 계정을 쓰지만 골드는 트레이딩과 완전히 별도
- ⏱️ ox64.app/5m 5분 던전 — 보드게임 "5-Minute Dungeon"을 재현한 실시간 협동 카드게임. 방 코드로 친구들과 모여(최대 4인) 손패의 아이콘 카드를 맞춰 몬스터·함정·보스를 돌파, 5분 벽시계 안에 던전을 클리어합니다. 영웅 6종(각자 1회용 특수 능력)·던전 4개(난이도별)·몬스터 24종, 인원수에 따라 난이도가 자동 조정됩니다. Durable Objects 없이 D1+짧은 폴링(진행 중 0.5초)으로 동기화
| 구분 | 기술 |
|---|---|
| 프론트엔드 | Vite + React (TypeScript), Zustand, Tailwind CSS |
| 차트 | TradingView Lightweight Charts v4 |
| 실시간 시세 | RxJS + Native WebSocket (바이낸스 스팟) |
| 백엔드 | Cloudflare Pages Functions (functions/) |
| DB | Cloudflare D1 (SQLite) |
| 인증 | HMAC 서명 세션 쿠키 + PBKDF2 패스코드 해싱 |
| 백그라운드 작업 | 별도 Cron Worker (cron/) — 강제청산·지정가·SL/TP·조건부 체결 + OX 마켓메이커 봇을 접속자 없이도 1분마다 실행 |
미니 RTS (/s1) |
Canvas 2D + 자체 시뮬레이션 루프(고정 틱 30Hz) + 그리드 A* — 서버 없음 |
프론트(정적 SPA)와 백엔드(Pages Functions)를 한 레포·한 배포로 운영합니다(단, Pages 는 정기 실행을
지원하지 않아 cron/ 만 별도 Workers 프로젝트로 배포). 커스텀 도메인(ox64.app)만 접속되도록 *.pages.dev
는 자동 리다이렉트됩니다.
클라이언트(브라우저 저장소)에 잔고나 시세를 두면 콘솔로 얼마든지 변조할 수 있어 랭킹 경쟁이
무의미해집니다. 그래서 체결가 조회, 증거금 계산, 손익 정산을 모두 서버가 수행하고 D1에
원자적으로 기록합니다. 클라이언트가 보내는 값은 symbol / side / size / leverage 뿐이며,
가격은 서버가 직접 거래소에서 받아옵니다.
npm install
npm run dev # 프론트 개발 서버 (Vite) — /api 는 동작하지 않음
npm run build # tsc -b && vite build → dist/
npx wrangler pages dev dist # 백엔드(D1 + Functions) 포함 로컬 구동D1 스키마 적용:
npx wrangler d1 execute ox64 --remote --file=./schema.sql자세한 폴더 구조, 데이터 흐름, 배포 설정은 CLAUDE.md를,
지금까지의 변경 이력은 docs/HISTORY.md를 참고하세요.
- 서버 권위 백엔드(D1) + 친구 랭킹
- 이름+패스코드 로그인
- 반응형 UI, 커스텀 폰트/파비콘
- 지정가/스탑 주문 + SL/TP + 부분청산
- 강제청산가 계산 + 강제청산 시스템 + 리필 안전망(접속 여부 무관, cron 워커로 자동 실행)
- 거래 내역 패널, 호가창(호가/체결 탭)
- 가상 코인 OX/USDT · EW/USDT — 레버리지 롱/숏으로 실제 코인과 완전히 동일하게 거래(체결가만 봇이 생성). 코인마다 봇 심리·호가창·캔들·체결이 완전히 독립
- OX 실제 호가창 매칭 엔진 — 주문이 봇 호가를 walking 체결(있는 물량만·실제 호가 가격·잔량 대기), 호가 역전/유령체결 없음
- 차트 색상 테마(바이낸스/OKX/트레이딩뷰)
- 봇 매매 심리 모델 — 추세/변동성 클러스터링/탐욕·공포 국면 전환(랜덤워크 대체)
- 봇 심리 탐욕/공포 심화 — 무드 군집(herding), 최근 고점/저점 기억 기반 탐욕·공포 게이지, 신고점 돌파 추격(FOMO)과 지지 붕괴 손절 연쇄, 투매(capitulation) 국면(V 바닥), 공포장엔 매수 호가가 걷히는 유동성 비대칭 (
npm run sim:bot으로 장기 안정성 검증) - 사람처럼 떨어지는 호가 — 1.4000 같은 라운드 가격에 물량이 몰리는 가격 군집/심리적 벽
- 호가창 지속성 + 주문 쪼개기 — 사다리가 매 틱 통째로 새로 태어나던 것을 "살아있는 주문 위에 새 호가를 얹는" 방식으로 바꿔 벽이 자리를 지키고 시장충격이 호가창에 남는다. 테이프도 부모 주문이 2~5건으로 쪼개져 흐른다(비용 증가 0, CPU 감소)
- 거래 수수료 + VIP 등급(누적 거래대금 기준 5단계) + 수수료 수익 원장
- 봇 재고/현금 정산 — 봇이 유저 상대로 체결하면 보유 OX·USDT 가 실제로 움직임(봇 재고 = 유저 전체 순포지션의 거울)
- 조건부(스탑) 주문 — 트리거 가격 이상/이하 도달 시 시장가 진입, 부분 체결 시 잔량 조건 유지
- 무한(반복) 조건부 — 조건이 참인 동안 계속 실행(≈1초 간격) 또는 되돌아올 때마다 1회씩, 재실행 간격·최대 실행 횟수로 제어 + 조건부 주문 수정(editConditional)
- 접속 없이도 조건부·지정가·SL/TP 체결 — cron 워커가 매 1분 전 유저를 훑는
sweepTriggers(예전엔 강제청산만 훑어서 앱을 닫으면 무한 조건부가 멈췄음). 접속 폴링과 같은 평가 본체를 공유 - OX 시장가 매칭 스냅샷 재설계 — 대량 주문이 조금씩·느리게·멈추던 문제 해결(단일 요청 전량 체결), 매수 시 상승·유지, 가격 하한 완화(0.02→0.0001)
- 실제 코인 mark(현재가/PnL) 소스를 서버 체결 소스(OKX)와 일치 — 고배율에서 진입 즉시 손익/평단이 튀던 문제 해결(차트 캔들은 바이낸스 유지)
- ox64.app/b 보석찾기 퍼즐게임 — 트레이딩과 별도 재화, 서버 권위(보드 정답은 서버만 앎), 레벨 1~10
- ox64.app/5m 5분 던전 — 실시간 협동 카드게임, Durable Objects 없이 D1+짧은 폴링으로 동기화
- 5분 던전 확장 — 영웅 6종·던전 4개·몬스터 24종, 인원수 난이도 스케일, 폴링 0.5초로 단축(서버 GET 왕복 6→2회·쓰기 0회), 이벤트 로그·규칙 설명·"전부 내기" UI
- ox64.app/s1 미니 RTS — 실시간 전략(테란 1종족, AI 대전). 서버 없이 전부 클라이언트, A* 길찾기·전장의 안개·Canvas 도형 렌더
- 수량 상한 완화(1e15 → 1e30) — 1,000조 개를 넘기면 "수량 오류"로 막히던 버그 수정. 잔여 수량 판정도 크기 비례 오차로 바꿔 대량 포지션이 먼지 없이 전량 청산됨
- 큰 수량 입력이 "수량 오류"로 막히던 버그 근본 수정 — 상한 초과를 거부하는 대신 잘라서 처리(자릿수가 아무리 길어도,
1e999여도 통과). 실제 코인은 "증거금이 부족합니다 (최대 약 N 개)" 로 살 수 있는 최대 수량을 안내하고, OX/EW 는 감당 가능한 만큼 부분 체결 - DB 무한 증식 차단 — 봇이 매 틱 새로 까는 호가를 취소 "마킹"만 하고 안 지워서 1,358만 행(하루 +86만 행, +200MB)이 쌓여 있었음. 재호가 때 실제로 DELETE 하고 체결 테이프도 6시간만 보존(차트 히스토리는 영속 캔들이 보관) → 저장 증가 사실상 정지
- 봇 비용 구조 재설계 — 봇 호가 사다리 44행을 상태 한 칸(JSON)으로, 캔들 저장은 1m/1h/1d만 하고 나머지는 조회 시 롤업, 봇 수수료 원장 행 제거, cron 틱 예산을 코인 수로 나누고 유저가 보고 있으면 cron이 물러남. 봇 틱당 DB 문장 ~70 → ~11
- 가상 코인 2종 — EW/USDT 추가(시작가 1 USDT). 페어를 전 경로에 파라미터화하고 봇 재고를 페어별 테이블로 분리, cron 틱 예산은 코인 수로 나눠 쓴다
- 운영 비용 안전장치 — 무한 반복 조건부의 재실행 간격에 최소 5초 하한(1초 간격이면 주문 하나가 DB 월 쓰기 한도를 혼자 다 먹습니다) + 일일 상한 2단 서킷 브레이커(반복 주문 → 봇 순서로 멈춤, 하루 80만 행 = 월 한도의 절반에서 정지). 수동 거래·강제청산·지정가·SL/TP는 어떤 경우에도 계속 동작합니다. 사용량 점검은
npm run d1:budget - 운영 비용 최적화 — 봇이 만드는 체결 테이프를 행 단위 저장에서 링 버퍼 한 칸으로 바꿔 DB 쓰기를 1/5로(봇 틱당 4행). 마켓메이커는 1분에 24틱 이상 영구히 도는 컴포넌트라, 틱마다 남기는 행 하나가 곧 월 수천만 행이 된다 — 매 틱 통째로 교체되는 데이터(호가 사다리·체결 테이프)는 이력이 아니므로 행으로 쪼개지 않는다. 화면(호가창 체결 탭·1s 캔들)은 그대로 동작
- 가상 코인 호가 단위를 유효숫자 4자리로 고정 — 소수 4자리 고정(틱 0.0001)이라 가격이 0.002 대로 내려가면 유효숫자가 2자리뿐이라 호가가 뭉텅이로 튀고, 100 USDT 를 넘으면 의미 없는 자릿수가 붙던 문제 해결. 봇 기준가·호가 사다리·체결 테이프·유저 지정가/트리거가와 화면 표시 자릿수가 전부 가격대에 맞춰 따라간다
- VIP 등급 무한 레벨 — 13개(VIP0~12)에서 끝나 그 위로는 아무리 거래해도 변화가 없던 표를 없애고, RPG 레벨처럼 계속 이어지는 공식으로 바꿨다. 한 등급 오를 때마다 필요 거래대금 ×4 · 수수료 ×0.79(하한 0.0000001%). 첫 등급은 누적 1만 USDT라 몇 번만 거래해도 오르고, 요율 곡선은 예전 표를 그대로 근사해서 실제 수수료 부담은 바뀌지 않고 등급만 3배 촘촘해진다
- 아주 큰 금액/수량 축약 표시 — 250배 레버리지에 무한 조건부까지 겹치면 평가자산이 1e31 까지 가는데, 콤마 표기 그대로 두면 랭킹 행·헤더·호가창처럼 폭이 정해진 칸이 통째로 밀려 다른 정보(VIP 뱃지·순위)가 화면 밖으로 나갔다. 정수부가 일정 자릿수를 넘으면 한국식 단위(만/억/조/경/해/자/양)로 줄이고(그마저 넘으면 지수 표기) 마우스를 올리면 전체값을 보여준다
- Cloudflare 무료 플랜 전환 — 하루 읽기 1억 1,000만 행 / 쓰기 30만 행을 쓰던 것을 무료 한도(읽기 500만 · 쓰기 10만 · 요청 10만 · 요청 1회당 DB 쿼리 50개) 안으로 재구조화했습니다. 가장 컸던 건 인덱스 하나 — 주문 내역 조회가 정렬 때문에 그 유저의 주문을 전부 읽고 있어서 그것만으로 전체 읽기의 96%였습니다(복합 인덱스로 교체, 쿼리 11.2ms→0.095ms). 차트는 1초마다 500봉을 통째로 다시 받던 걸 "쉰 시간만큼만" 받도록 바꾸고 탭이 백그라운드면 멈춥니다. 봇은 틱마다 DB를 왕복하던 구조를 메모리에서 N틱을 돌리고 한 번만 저장하도록 바꿔(진행 중인 봉은 상태에 누적하고 봉이 닫힐 때만 기록) 틱 20회에 쓰기 3행이 됐고, 그 덕에 틱을 더 촘촘히 돌려도 비용이 늘지 않습니다. 조건부·SL/TP는 "현재가 한 점"이 아니라 그 사이 지나온 가격의 최저·최고로 판정해 오히려 딥/스파이크를 덜 놓칩니다
- 호가·체결 표시 개수 설정(5~50) — 10줄 고정 높이라 더 깊은 호가를 보려면 매번 스크롤해야 했던 것을, 설정 슬라이더로 원하는 줄 수만큼 한 화면에 펼치도록 변경
- 봇이 다이내믹해졌습니다 — "빠르게 사팔사팔하면서 추세는 느리다"는 제보를 수치로 잡았습니다. 원인은 심리 항목이 모자란 게 아니라 국면 하나가 8틱(≈8초)밖에 못 살았고, 되돌림이 국면 방향의 82%를 그 자리에서 취소해 화면엔 매 틱 새로 뽑는 노이즈만 남았던 것. 국면 수명을 8배로, 되돌림을 1/3로 줄이고 노이즈는 오히려 줄여서(추세는 노이즈가 아니라 방향에서 나옵니다) 추세 효율이 0.28 → 0.58, 20% 이상 급등락이 하루 3회 → 75회가 됐습니다. 신고점 돌파·지지 붕괴 사건도 한 틱만 튀고 끝나던 걸 여러 틱 이어지게 바꿔 "돌파 후 추격"이 보입니다. 서버 비용은 그대로입니다(계산식만 바뀌었고 저장 항목은 그대로)
- DB 사용량 3차 다이어트 — 폴링 요청 하나가 같은 데이터를 반복해서 읽고 있었습니다(대기 주문 3번, 봇 상태 2번). 봇 틱이 읽은 걸 호가창이 그대로 물려받도록 바꿔 요청당 쿼리 3개와 테이블 스캔 2번이 사라졌습니다
- 체결내역 매수/매도 색이 뒤집혀 보이던 문제 수정 — 봇이 체결 색을 가격 흐름과 무관하게 무작위로 정하고 있어서(상승 체결의 39%가 빨강) 색이 반대이거나 메이커 기준처럼 보였습니다. 실제 거래소와 같은 테이커 기준(직전 체결보다 비싸면 매수)으로 바꿨고, 걸어둔 지정가가 채워질 때는 덮친 쪽이 테이커로 찍힙니다
- 체결 목록이 실제 테이프처럼 흐르도록(도착한 체결 묶음을 0.1~0.25초 간격으로 한 건씩 표시 — 서버 요청·DB 사용량 증가 0) + 체결 수량에도 매수/매도 색
- PC 호가·체결 동시 표시 옵션 + 실제 코인 호가 갱신 5배(1초 → 0.2초, 브라우저가 거래소와 직결이라 서버 비용 0). 가상 코인은 서버 폴링이라 1초를 유지합니다 — 0.2초로 당기면 무료 플랜의 하루 요청·DB 쓰기 한도를 한 사람이 3
5시간 만에 소진해 거래 자체가 멈추고, 봇 재호가 주기(0.450.95초) 때문에 화면이 실제로 빨라지지도 않습니다(대신 재호가 상한을 낮춰 1초마다 빠짐없이 갱신되게 했습니다) - DB 사용량 2차 다이어트 — 실측으로 "아무 기능도 하지 않는 몫"만 걷어내 쓰기 19% · 읽기 55% 를 줄였습니다(화면 동작은 그대로). 가장 컸던 건 봇이 매 틱 같은 행을 두 번 쓰던 것 — 재호가를 시작할 때 "내가 먼저 잡았다"고 표시하는 쓰기를 따로 했는데, 틱 계산이 순수 계산이라 저장하는 순간에 판정해도 똑같이 중복이 막힙니다(하루 4,688행 = 전체 쓰기의 19%). 읽기 쪽은 체결내역 조회 창(1시간 → 3분: 화면에 뜨는 최근 50건은 어차피 최근 11초 안에서 끝납니다), 사용량 계량기(달 전체 합계 → 오늘 한 행), 주문 액션 응답의 주문내역(폴링엔 이미 적용돼 있던 증분 조회를 액션에도)
- 봇 수량에 개미·세력·고래 — "수량이 네 자리 아니면 다섯 자리로만 나온다, 개미와 세력이 구분이 안 된다"는 제보. 봇이 체결·호가 수량을 좁은 균등 범위(1,000
8,000 / 2,00010,000)에서만 뽑고 있어서 화면의 모든 숫자가 비슷한 자릿수였습니다(체결의 95%가 네다섯 자리). 실제 거래소처럼 계층을 먼저 뽑고 그 안에서 크기를 뽑는 분포로 바꿔, 건수의 절반 이상은 개미(수십수백 개)가 만들고 거래량의 절반은 고래가 만듭니다. 호가 한 자리는 13명의 주문 합이라 얇은 자리와 두꺼운 벽이 섞이고, 큰 체결은 그 자리에서 가격을 밀어 봉에 꼬리를 남깁니다. 캔들 거래량과 호가 총 유동성은 그대로 두었습니다(건수를 2배로 늘린 만큼 평균 크기를 절반으로) - 시장가 매매가 그 봉의 시가(open)를 덮던 버그 수정 — "봉이 새로 만들어지는 타이밍에 첫 시장가 매매를 하면 시가가 바뀐다"는 제보. 캔들 한 칸을 쓰는 주체가 둘(마켓메이커 봇 / 유저 체결)인데, 봇이 진행 중인 봉을 자기 상태에 모았다가 봉이 닫힐 때만 저장하도록 바꾼 뒤로(DB 사용량 절감) 진행 중인 봉에는 봇의 기록이 아예 없어서, 유저의 시장가 체결가가 항상 그 봉의 시가로 박혔습니다(호가창을 훑고 체결되니 슬리피지까지 얹힌 값). 1분봉뿐 아니라 1시간·1일봉까지 오염됐고 5분·4시간·1주봉이 그걸 그대로 물려받아, 한 번 틀어진 시가가 영구히 남았습니다. 이제 캔들이 시가·종가의 체결 시각을 함께 들고 있어 "먼저 체결된 값이 시가, 나중에 체결된 값이 종가"로 정확히 결정됩니다(DB 쓰기 비용 증가 없음)
- 자산이 0 이 되면 안내 팝업 — 강제청산으로 잔고가 바닥나면 화면 가운데에 팝업이 떠서 매일 3회 무료 리필(1회 +10,000 USDT, 한국시간 자정 초기화)을 알려주고, 그 자리에서 바로 받을 수 있습니다. 예전엔 헤더 구석의 작은 버튼뿐이라 자산이 0 이 된 사람에겐 게임이 끝난 것처럼 보였습니다
- DB 사용량 4차 다이어트 — 요청 하나가 같은 데이터를 반복해서 읽던 마지막 구간을 정리했습니다. 가상 코인 폴링은 봇 상태를 세 번(봇 틱·차트 마지막 봉·체결가) 읽었고, 계정 폴링은 포지션·미체결·조건부를 각각 두 번(체결 평가 한 번, 응답 한 번) 읽고 있었습니다. 먼저 읽은 쪽이 그대로 넘겨주도록 바꿔 각각 한 번으로 줄였습니다(화면 동작·응답 내용은 그대로)
- 내 시장가 체결이 6줄에서 20줄로 — 대량 주문이 호가를 46단계까지 훑는데 체결창엔 6칸으로 뭉개져 "가격이 어떻게 걸어갔는지"가 안 보였습니다. DB 쓰기 비용은 줄 수에 그대로 비례하므로, 사용량 계량을 "체결당 정액"에서 실제로 찍은 줄 수만큼으로 바꿔 흔한 소액 체결(1~3줄)이 과대 계상되지 않게 했습니다(계량 자체의 비용 증가는 0)
- 봇 심리 4차 확장 — 모델이 여전히 "몇 시든 똑같은 시장" 이었습니다. ①하루 리듬(세션·주말 — 밤 10시~새벽 1시가 정점, 오전 8시가 최저) ②수축 후 확장(관망이 길어지면 조여들다 터짐) ③전 고점/전 저점의 저항·지지(본전 매도에 눌리다 뚫리면 추격) ④사건 발생률이 시간·심리의 함수(새벽 신고점은 조용히 지나감) ⑤다중 스케일 라운드 가격(1.00 이 1.003 보다 중요) ⑥체결 미세구조 재설계 — 방향을 먼저 정하고 그쪽 호가에 찍어 호가 바운스·시장충격·체결 군집·스톱헌팅 꼬리가 생깁니다. 저장 항목은 하나도 안 늘렸습니다(전부 시계와 기존 상태에서 파생 → DB 읽기·쓰기 증가 0, 캔들 거래량도 개편 전과 동일하게 보정). 장기 안정성 지표(추세효율 0.58 · 국면수명 69틱 · 1분봉 2.7% · 편향 ~0)는 개편 전과 사실상 동일합니다
- 가상 코인 가격이 0.0001 USDT 밑으로 절대 안 떨어지던 버그 수정 — 아무리 팔아도 그 값에서 딱 멈추고 차트가 수평으로 굳었습니다. 가격 하한에 옛날 호가 단위(소수 4자리 고정 시절의 최소 틱)가 그대로 박혀 있었던 것으로, 지금은 호가 단위가 가격에 비례해 자동으로 바뀌기 때문에(유효숫자 4자리) 저가에서도 호가가 뭉개지지 않아 그 하한이 있을 이유가 없었습니다. 이제 기준가 1 을 중심으로 위아래로 똑같이 1조 배까지 열려 있고, 저가대에서도 호가창 22단계·체결·차트 자릿수가 그대로 성립합니다
- 되돌아옴(mean reversion)이 너무 심하던 문제 완화 — "EMA 를 뚫고 나가도 금방 되감긴다"는 제보. 적정가 대비 되돌림이 평범한 과열 구간에서 이미 너무 셌습니다(과열 10% 에서 매 틱 0.3% — 틱 변동폭만 한 힘이 한 방향으로 계속 걸렸습니다). 발산을 막는 먼 구간의 브레이크는 그대로 두고 가까운 구간만 푸는 형태로 바꿔서, 쌓은 움직임 중 되돌려주는 몫이 59% → 41% 로 줄었습니다. EMA 한쪽에 머무는 시간 5.9 → 7.0봉, 2봉 만에 되돌아오는 휩쏘 26 → 23%, 크로스 후 뻗는 거리 6.6 → 8.9%. 되돌림을 푼 만큼 파도가 커지므로 공포·탐욕 게이지의 기준도 같이 넓혀서 변동성·거래량·국면 분포는 개편 전 그대로입니다(1분봉 2.9% · 틱 변동 0.27%). 대신 낙폭은 커집니다(MDD -88% → -94%) — 되돌려주지 않는다는 건 큰 움직임이 그대로 남는다는 뜻이니 의도된 것입니다
- 펀딩비 반영
개인/친목용 프로젝트입니다. 별도 명시 없는 한 상업적 이용을 염두에 두지 않았습니다.