1편에서 32비트의 저주를 게이트웨이/엔진 분리로 극복한 이야기를 했습니다. 이번 편은 이 시스템의 본업, 전략 실행입니다.

자동매매의 무서운 점은 이겁니다. 사람은 실수를 하루에 몇 번 하지만, 프로그램은 잘못 만들면 1초에 몇 번씩 합니다. 그래서 순서가 중요합니다.

전략 작성 → 과거 데이터로 백테스트 → 모의매매로 검증 → 그다음에야 실전

JBrainTrader는 이 단계를 전부 시스템 안에서 처리합니다.

사실 전략이 제일 중요한 것 같습니다.

뭐랄까요? 성공한 기업의 성공 노하우가 제일 중요하듯이 전략이 잘 짜서 수익을 내준다면 그 전략의 가치는 단순 text 가 아닌 금화와 같은 가치를 지니게 되는 것이니까요.

제 목표가 꾸준한 수익을 내주는 전략을 만드는 겁니다.

전략들이 특정 시장 상황에 따라 수익을 내줄때도 있고 손실이 날 때도 있습니다.

그런데 정말 꾸준한 수익을 내주는 전략은 만들기 정말 힘듭니다.


📋 전략은 그냥 텍스트 파일입니다

전략은 strategy/ 폴더의 텍스트 파일로 관리됩니다. 코드를 고치는 게 아니라 파일을 갈아 끼우는 방식이죠. 지금 쌓여 있는 라인업 일부를 공개하면:

전략 파일 컨셉
GOLDEN_CROSS 국민 전략. 단기 이평선이 장기 이평선을 뚫으면 매수
MEAN_REVERSION_BB 볼린저밴드 평균회귀 — "너무 떨어졌으면 다시 올라오겠지"
VOL_BREAKOUT_PRO 변동성 돌파 — 조용하다가 움직이기 시작하면 올라탄다
TREND_FOLLOW_PRO 추세 추종 — 달리는 말에 올라타기
SCALPING_3TICK, SCALP_03/08/09 스캘핑 — 몇 틱 먹고 빠지기
SPLIT_SCALPING 분할 스캘핑 — 나눠서 사고 나눠서 판다
MARTINGALE_SCALE 마틴게일 — 물리면 더 산다 (⚠️ 백테스트 전용 관상용, 따라 하지 마세요)

전략마다 진입 조건, 목표 수익률, 손절선, 분할 비율, 하루 최대 거래 횟수, 운영 시간대까지 정의합니다. 특히 운영 시간(예: 09:20~15:20)을 두는 이유는, 장 시작 직후와 마감 직전의 광기를 피하기 위해서입니다.

위 전략이 수익을 내준다는 말은 아닙니다.

다음 전략들은 아~~ 이런 전략도 있구나! 

하는 참고용입니다.

전략 관리 화면 (데모)


데모 사이트 캡처 · Mock 데이터

참고로 특정 종목은 "전략 없음(No Strategy)" 으로 등록할 수도 있습니다. 자동매매는 안 하고 시세만 지켜보는 모드인데, "얘는 아직 못 믿겠어" 하는 종목을 관찰 명단에 올려두는 용도입니다.


📊 데이터가 있어야 백테스트를 하죠

백테스트의 연료는 과거 데이터입니다. jbrain_trader에는 데이터 수집기(Collector) 가 있어서 틱 데이터를 차곡차곡 DB에 쌓습니다.

  • 수집 현황은 달력 형태로 보여줍니다 — 어느 날짜 데이터가 비었는지 한눈에 보입니다
  • 빠진 데이터를 찾아내는 점검 스크립트도 여럿 있습니다 (check_missing_data, diagnose_tick_chart...) — 데이터에 구멍이 나면 백테스트가 거짓말을 하니까요
  • 수집한 데이터는 캔들 차트/틱 차트로 바로 확인할 수 있습니다

시세 수집기 화면 (데모)


데모 사이트 캡처 · Mock 데이터


🧪 백테스트 — 과거로 떠나는 모의고사

전략과 데이터가 준비되면 백테스트를 돌립니다. 종목, 기간, 전략을 고르면 과거 데이터 위에서 전략이 실제로 어떻게 사고팔았을지 재연해줍니다.

재밌는 기능은 듀얼 백테스트입니다. 두 개의 설정을 나란히 돌려서 비교하는 건데요, "목표 수익 0.2%와 0.3% 중 뭐가 나았을까?" 같은 궁금증을 데이터로 끝장내는 도구입니다. 감으로 싸우지 말고 숫자로 싸웁시다.

백테스트 실행 결과 화면 (데모)


데모 사이트 캡처 · Mock 데이터


📝 모의매매 — 그리고 매일 아침의 성적표

백테스트를 통과한 전략은 모의매매(가상 시뮬레이션) 로 넘어갑니다. 실시간 시세를 받되 진짜 주문은 내지 않는, 이른바 페이퍼 트레이딩입니다.

그리고 이 시스템에서 제가 제일 좋아하는 기능: 모의매매 리포트가 매일 자동으로 생성됩니다. 실제 리포트 형식을 잠깐 보여드리면:

# 모의매매 리포트: DUAL_200_1X_INVERSE

[09:40:04] 신규 진입 (ENTRY)
- 종목: KODEX 200 / 9주 @ 83,930원
- Z-Score: -1.13

[09:43:04] 회귀 청산 (MEAN_REVERSION)
- 손익: -839원 (-0.11%)

| 완료 거래 | 1회 |
| 누적 손익 | -839원 |

네, 보시다시피 손실도 가감 없이 기록됩니다. -839원. 시스템은 정직합니다. 이 리포트가 매일 쌓이면 전략의 실제 체질이 드러납니다. 백테스트에서 화려했던 전략이 모의매매에서 비실대는 경우, 생각보다 많거든요.

이런 리포트가 벌써 수십 장 쌓여 있습니다. 전략 입장에서는 매일 성적표 받는 학원에 다니는 셈이죠.

📄 실제 리포트 예시: example_20260430_mo_DUAL_200_1X_INVERSE_report.md (모의매매 · 하루 16건 이벤트)


🔭 다음 편 예고

전략도 있고 백테스트도 있습니다. 그런데 여전히 남는 질문이 있죠.

"그래서... 어떤 종목을 사야 하는데?"

종목 고르기, 아침 시황 정리, 매매 복기 — 이 귀찮고 어려운 일들을 AI 팀원에게 맡겼습니다. 다음 편은 jbrain_trader의 AI 운용 기능 총출동 편입니다.

⚠️ 이 시리즈는 개인 프로젝트의 개발 기록이며, 투자 판단과 책임은 각자의 몫입니다.

👈 이전 글: 1편 — 퇴근 후 주식창 그만 보고 싶어서 만들었습니다
👉 다음 글: 3편 — AI 팀원 채용기

Posted by 제이브레인
,

주식을 하다 보면 누구나 한 번쯤 이런 생각을 합니다.

"아니, 내가 정한 규칙대로 사고팔기만 하면 되는데... 이걸 왜 내가 하루 종일 붙어서 하고 있지?"

문제는 사람이라는 게 규칙을 안 지킨다는 겁니다. 떨어지면 무서워서 못 사고, 오르면 아까워서 못 팔고. 규칙은 완벽한데 실행하는 인간이 버그투성이인 거죠.

솔직히 회사에 다니면서 사고 파는 것이 너무 어렵습니다.
그리고 회사 업무도 많다 보니 출/퇴근시와 점심 식사 시간에 보는 것이 대부분인데 변동폭이 큰 시간대는 정규장이 열리고
9시 ~ 10시 반 정도인 것 같아요.
그런데 해당 시간에 회의도 있고 출근 후에 바쁜 업무를 하다 보면 이미 매수/매도 시간이 넘어 선 경우가 다반사입니다.
월급으로만 사는 것은 아닌 것 같고 뭔가 재테크를 해야하는데 부동산을 하려면 시간도 시간이지만 기본 돈 액수가 다르죠.
그래서 선택지가 비트코인 아니면 주식인데 이 것도 여기저기 시간적 제약이 많이 따르더군요.
그래서 만들었습니다. 규칙을 어기지 않는 실행 담당, jbrain_trader 입니다.
주말에 황금 같은 시간을 쪼개서 만들었죠.
다행인 것도 인공지능이 나와서 정말 많은 도움이 되었습니다.
인공지능이 없었다면 정말~ 많은 시간이 들었을 것입니다.
저는 주로 클로드를 사용해서 만들었습니다.
Antigravity 도 프론트 작업에 사용했습니다.
즉, 클로드 + Antigravity 로 만들었다고 할 수 있습니다. 메인은 클로드를 사용했습니다.

구루마 1호를 시작으로 현재 JbrainTrader 까지 만들었네요.
뭐든 시작이 반입니다.
구루마 1호는 정말 굴러만 가자는 의미로 구루마 1호 였는데 이제는 뭔가 그럴 듯한 버전까지 만들었네요.
틈나는 데로 기능 업그레이드를 할 예정입니다.
생각보다 시간이 많이 나지는 않는 것 같아요.
야근을 밥먹듯이 하는 직장인이라 그런 것 같네요.

JbrainTrader 는 웹 서비스와 모바일 버전도 만들었습니다.
구글 쉬트 연동, 클로드 CLI 연동, Discord 등의 메신저 연동 등의 다양한 기능을 넣었습니다.
집 PC 에 JbrainTrader 를 실행하고 모바일 버전으로 접속해서 쓰고 있습니다.
AI 기능을 넣어서 직접 프롬프트를 입력하여 종목 추천 및 전략을 알려줍니다.
자동 매매도 가능하죠.
뭐랄까요~~ 자동 + 반자동이 가능하다고 할 수 있죠.
자동은 자동 매매로 거래가 가능한 것이고 반자동으로 AI 프롬프트로 종목 추천을 받고 전략을 추천 받은 후에
수동으로 매매를 하는 것입니다.
AI 가 복기도 해줍니다. 반자동 매매를 위해 매수/매도 Notice 도 알려줍니다.
시간이 되는데로 계속 업그레이드 할 예정입니다.

데모 사이트는 실제 데이터는 아니며 가상의 데모 데이터로 만든 사이트입니다.

git url : https://github.com/jbpark/JbrainTrader
데모 사이트 : https://jbraintrader-demo.pages.dev/


🤖 jbrain_trader가 뭐냐면요

한 문장으로 요약하면 이렇습니다.

"키움증권 API로 데이터를 받고, 전략대로 자동 매매하고, AI가 옆에서 훈수까지 두는 개인용 트레이딩 시스템"

기능을 크게 나누면 네 덩어리입니다.

덩어리 하는 일
시세·계좌 연동 키움 OpenAPI로 실시간 시세, 계좌, 보유종목, 체결내역 (국내+해외)
전략 & 백테스트 골든크로스부터 스캘핑까지, 전략 등록 → 백테스트 → 모의매매 → 리포트
AI 운용 AI 종목 선별, AI 매매 전략, 아침 브리핑, 매매 복기, 전략 이탈 감시
일상 편의 매매일지 자동 작성 + 구글시트 업로드, Flutter 모바일 앱, 마스코트 도우미

이번 시리즈에서 이 네 덩어리를 하나씩 뜯어봅니다. 오늘은 전체 구조, 특히 이 시스템에서 제일 고생한 부분부터 이야기하겠습니다.


🏗️ 전체 구조 — 그리고 32비트의 저주

jbrain_trader의 구조는 이렇게 생겼습니다.

키움 게이트웨이 (32bit Python)     ← 키움 OpenAPI 담당
        ↕ ZeroMQ (5555/5556)
엔진 서버 (64bit Python, Flask)    ← 전략 실행 + REST API + WebSocket
        ↕
Vue 웹 대시보드  /  Flutter 모바일 앱

"아니 왜 파이썬이 두 개예요?"라고 물으신다면, 여기에 국내 주식 자동매매 개발자라면 다 아는 눈물의 사연이 있습니다.

키움 OpenAPI는 32비트 전용입니다. 그런데 pandas 굴리고 데이터 분석하려면 64비트가 편하죠. 한 프로세스에 둘 다 담을 수 없으니, 결국 두 프로세스로 갈라서 서로 메시지를 주고받게 했습니다.

  • 게이트웨이(32bit): 키움 API만 전담하는 창구 직원. 시세 받고 주문 넣는 일만 합니다.
  • 엔진(64bit): 뒤에서 머리 쓰는 본사. 전략 계산, DB 저장, 웹 서비스를 담당합니다.
  • 둘 사이는 ZeroMQ라는 초고속 사내 메신저로 연결됩니다.

덕분에 창구(키움 API)가 말썽을 부려도 본사(엔진)는 멀쩡하고, 그 반대도 마찬가지입니다. 갈라서길 잘했습니다.


🖥️ 대시보드 구경하기

브라우저로 접속하면 Vue로 만든 대시보드가 나옵니다. 탭이 꽤 많습니다.

  • 대시보드: 계좌 잔고, 보유종목, 실시간 현재가
  • 차트: 캔들 차트 + 틱 차트 (ApexCharts)
  • 전략 / 백테스트 / 시뮬레이션: 2편에서 자세히
  • 매매일지: 달력에서 날짜 클릭하면 그날의 거래 내역
  • AI 종목 / AI 매매 / AI 캘린더 / AI Notice: 3편의 주인공들
  • CLI 작업: Claude CLI로 시킨 개발 작업 기록 (개발자의 셀프 감시 탭)

웹 대시보드 메인 화면 (데모)


데모 사이트 캡처 · Mock 데이터

그리고 화면 구석에는 돌아다니는 마스코트가 있는데... 이 친구 이야기는 4편을 위해 아껴두겠습니다. 🐙


🔌 계좌 연동 — 국내도 해외도

키움 계좌를 연결하면 복수 계좌를 MTS처럼 1234-****[위탁] 형식으로 골라 쓸 수 있고, 국내 계좌와 해외 계좌를 전환하면 보유종목·매매일지가 해당 시장 기준으로 자동으로 바뀝니다.

소소하지만 아끼는 기능 하나: 서비스를 다시 켜면 마지막 연결 정보로 자동 재연결됩니다. 아침마다 로그인 버튼 누르는 것도 노동이니까요.

계좌 선택 드롭다운과 국내/해외 토글은 위 메인 화면 캡처의 가운데 카드에 있습니다.


🗺️ 시리즈 지도

  1. 전체 구조와 32비트의 저주 (이 글)
  2. 전략을 파일로 굴린다 — 백테스트, 모의매매, 그리고 매일 아침의 성적표
  3. AI 팀원 채용기 — 종목 선별부터 아침 브리핑, 매매 복기까지
  4. 매매일지는 구글시트로, 확인은 침대에서 — 일상 편의 기능 모음

다음 편에서는 이 시스템의 본업, 전략과 백테스트를 뜯어봅니다. "볼린저밴드 평균회귀"부터 "마틴게일"(위험하니 따라 하지 마세요)까지 전략 파일들이 등장합니다.

⚠️ 이 시리즈는 개인 프로젝트의 개발 기록입니다. 특정 종목·전략의 수익을 보장하지 않으며, 투자 판단과 책임은 각자의 몫입니다.

👉 다음 글: 2편 — 전략을 파일로 굴린다

'시스템 트레이딩 > JbrainTrader' 카테고리의 다른 글

JBrainTrader 이야기 (전략 실행)  (0) 2026.09.06
Posted by 제이브레인
,

웹 개발 공부를 하거나 개인 프로젝트로 간단한 웹페이지를 만들고 나면 항상 마주치는 고민이 있습니다.

"이거 내 컴퓨터에서만 보지 말고 링크로 친구들한테 보여주고 싶은데... 어디다 올리지?"

AWS EC2를 띄우자니 프리티어 끝나면 돈 나갈까 봐 무섭고, 설정을 건드리다 보면 서버 보안이니 포트 포워딩이니 머리가 지끈거립니다.

Jbtrader 1호, 2호 등등을 만들었는데 데모를 보여주면 좋겠다는 생각이 들었는데 막상 올릴 방법이 떠오르지 않더군요.

이미지 몇장이나 텍스트 설명으로는 실제 git 코드를 설치하지 않으면 무슨 기능이 있는지 한눈에 보여주기 쉽지 않습니다.

그런데 이 것을 가능하게 해주는 것이 있는데 

바로 Cloudflare Pages(클라우드플레어 페이지스)입니다.

Github Pages 라는 것도 있는데 여기 저기 찾아보니 Cloudflare Pages 가 좀더 기능면에서 좋더군요.

오늘은 클릭 몇 번과 코드 업로드만으로 전 세계 초고속 글로벌 CDN망에 내 웹사이트를 무료로 배포하는 방법을 알아보겠습니다. 준비물은 오직 이메일 주소와 여러분이 만든 index.html 파일 딱 하나면 충분합니다!

Gemini 로 만화를 만들어봤는데 이제는 한글도 잘 안깨는 것 같아요.

무슨 도깨비 방망이도 아니고 6컷 만화로 만들어줘라고 하면 뚝~딱~~ 하고 만들어주네요.

하하~~ 너무 너무 신기하고 재미있네요. 참고로 Gemini 는 나노 바나나로 만드는데 생각보다 잘 만들어줍니다.

앗싸~~ 나도 이제 만화가 된 기분이 드네용~~


1. Cloudflare Pages가 도대체 뭐길래?

Cloudflare(클라우드플레어)는 원래 전 세계 인터넷 트래픽의 상당 부분을 방어하고 캐싱해 주는 글로벌 CDN & 사이버 보안 공룡 기업입니다.

그 회사에서 만든 Cloudflare Pages는 한마디로 "HTML, CSS, JS 같은 정적(Static) 웹사이트를 전 세계 엣지(Edge) 서버에 알아서 깔아주는 서비스"입니다.

왜 써야 할까? (무료 플랜 혜택이 깡패인 이유)

  • 대역폭(트래픽) 무제한: 방문자가 갑자기 10만 명이 몰려와도 트래픽 비용 폭탄이 터지지 않습니다.
  • 지구 최강의 로딩 속도: 전 세계 수백 개 도시의 엣지 서버에서 가장 가까운 곳으로 캐싱되어 뜹니다.
  • 무료 SSL 자동 발급: 주소창에 뜨는 보안 자물쇠(https://)를 클릭 한 번 안 해도 그냥 쥐여줍니다.
  • 깃허브(GitHub) 자동 배포 지원: 나중에 코드만 git push 하면 알아서 사이트가 갱신됩니다. (직접 드래그 앤 드롭 업로드도 지원!)

2. 1분 만에 회원가입하기

겁먹을 필요 전혀 없습니다. 신용카드 번호도 요구하지 않습니다.

  1. Cloudflare 공식 홈페이지에 접속합니다.
  2. 우측 상단의 [로그인] 버튼을 누릅니다.
  3. 중간 의 [회원가입(Sign Up)] 버튼을 누릅니다.
  4. 이메일 주소와 비밀번호를 입력하고 계정을 만듭니다.
  5. 입력한 이메일 함으로 날아온 인증 메일 링크를 클릭해 계정을 활성화하면 끝!

로그인을 누릅니다
Sign up 을 누릅니다.


3. 실습용 웹페이지 준비하기

컴퓨터 바탕화면에 my-web이라는 폴더를 하나 만들고, 그 안에 메모장이나 에디터를 켜서 index.html 파일을 만들어보세요.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>내 첫 Cloudflare 웹사이트</title>
  <style>
    body {
      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      height: 100vh;
      margin: 0;
      background: linear-gradient(135deg, #f38020, #faad3f);
      color: white;
    }
    .card {
      background: rgba(255, 255, 255, 0.15);
      backdrop-filter: blur(10px);
      padding: 2.5rem;
      border-radius: 16px;
      box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
      text-align: center;
    }
    h1 { margin-bottom: 0.5rem; }
    p { font-size: 1.1rem; opacity: 0.9; }
  </style>
</head>
<body>
  <div class="card">
    <h1>🚀 배포 성공!</h1>
    <p>Cloudflare Pages로 띄운 내 첫 번째 글로벌 웹사이트입니다.</p>
  </div>
</body>
</html>

4. 사이트 올리기 (드래그 앤 드롭 30초 컷)

Git 명령어가 낯선 분들도 바로 할 수 있는 '다이렉트 업로드' 방식입니다.

  1. Workers 및 Pages 메뉴 이동
    Cloudflare 대시보드 로그인 후, 왼쪽 사이드바에서 Compute (Workers 및 Pages) 메뉴를 클릭합니다.
  2. 애플리케이션 생성
    화면 상단의 파란색 [애플리케이션 생성(Create application)] 버튼을 누른 뒤, 상단 탭에서 [Pages]를 선택합니다.
  3. 자산 직접 업로드 선택
    화면에 뜨는 옵션 중 [자산 직접 업로드(Upload your static files)]를 선택합니다.
  4. 프로젝트 이름 설정 및 폴더 드롭
    프로젝트 이름을 입력합니다 (예: my-awesome-site). 이 이름이 기본 주소의 앞부분(*.<username>.workers.dev)이 됩니다.
    그 다음, 아까 만든 index.html이 들어있는 폴더 전체를 업로드 영역으로 드래그 앤 드롭합니다.
  5. 배포 완료!
    하단의 [사이트 배포(Deploy site)]를 누르고 약 3~5초만 기다리면 배포가 끝납니다.

애플리케이션 생성을 누릅니다
Upload your static files 를 누릅니다
전체 내용 또는 폴더를 업로드 합니
배포를 누릅니다
방문을 누릅니다


설정에서 이름을 변경합니다

5. 확인해보기

배포가 끝나면 화면에 축하 메시지와 함께 고유 주소가 생성됩니다.

https://my-awesome-site.username.workers.dev

링크를 클릭해 들어가 보세요. 스마트폰 브라우저로도 열리고, 카톡으로 링크를 공유해도 번개 같은 속도로 열릴 겁니다. HTTPS 보안 자물쇠까지 완벽하게 걸려 있는 것을 확인할 수 있습니다.

수정하고 싶을 땐 어떻게 하나요?

내 컴퓨터에서 index.html 내용을 수정한 뒤, Cloudflare 대시보드의 해당 프로젝트 페이지에서 [새 배포 만들기(Create a new deployment)]를 눌러 폴더를 다시 던져주기만 하면 끝납니다. 이전 버전으로 롤백하는 것도 클릭 한 번이면 가능합니다.

다음 단계로는 GitHub 저장소와 연동해 코드 수정 후 git push만 하면 자동으로 빌드/배포되는 파이프라인을 구축하거나, 내가 산 개인 도메인을 연결해 보는 것을 추천합니다!

Posted by 제이브레인
,