가상자산

나만의 비트코인 자동매매 프로그램 만들기 – 4편(이평선/거래량 폭팔매매)

deepdukhoo 2025. 10. 10. 21:19

https://www.youtube.com/watch?v=x7u6tqLtTYM

매매옵션: 엔진을 똑똑하게 움직이는 규칙

이번 편은 매매옵션을 중심으로, 엔진이 언제 달리고 언제 멈출지를 결정하는 규칙 설계에 대해 정리합니다. 직감과 감정을 배제하고, 내가 원하는 전략을 문장→숫자→코드로 바꾸는 과정이 핵심입니다. 이전 편의 시황검사(전일대비, MA 위치, 상승비율)를 게이트로 삼고, 차트 신호(이평 돌파·거래량 폭발)를 트리거로 두어, “좋은 시장에서만 기회에 반응하는” 구조를 만듭니다.


왜 매매옵션인가?

자동매매의 힘은 일관성에 있습니다. 사람이면 흔들릴 장면에서도, 프로그램은 같은 규칙을 같은 방식으로 적용합니다. 특히 코인 시장은 24시간 열려 있고 변동성이 큽니다. 장이 나쁜데도 충동적으로 진입하거나, 반대로 장이 좋은데도 두려워서 멈추는 순간이 반복되면 수익성은 나빠지기 마련입니다. 매매옵션은 이런 비효율을 줄입니다.

  • 먼저 시황이 좋을 때만 매수 스위치를 켜고, 나쁘면 끄는 것으로 과도한 진입을 막습니다.
  • 그다음 차트 트리거로 개별 종목의 타이밍을 잡습니다.
  • 모든 의사결정은 로그로 남아, 나중에 “어떤 환경+옵션 조합에서 성과가 났는지”를 냉정하게 복기하게 해줍니다.

즉, 매매옵션은 리스크 관리와 기회 포착을 동시에 자동화하는 장치입니다. 뼈대만 잘 세워도 심리·체력 부담이 크게 줄고, 전략의 반복 가능성이 올라갑니다.


매매옵션 전체 구조를 한눈에

  • 옵션1(시황 연동 = 게이트)
    • BTC 전일대비 등락률 임계치(예: ≥ +0.5%)
    • BTC 현재가 vs MA(n) (예: 현재가 > 60MA)
    • 상승 종목 비율(예: ≥ 55%)
    • 모두 충족 시 매수 스위치 ON, 하나라도 깨지면 OFF(선택: 자동 급매도)
  • 옵션2(차트 트리거 = 실행)
    • 이평선(MA) 돌파: 연속 하방 캔들 뒤 상방 돌파 시 진입
    • 거래량 폭발: 평균 대비 x배 이상 급증 시 진입(이례치 허용치로 왜곡 방지)
    • 합성: (이평 OR 폭발) 또는 (이평 AND 폭발) 등 조합 선택
  • 엔진 사이클
    1. UI에서 옵션 읽기 → 2) 시황 검사 → 3) 게이트 판정 →
    2. 트리거 탐지 → 5) 주문 → 6) 로그 → 7) 반복(Stop/F12 대기)

매매옵션1(시황 연동): 문지기를 세워라

BTC가 어제보다 분명히 강하고(전일대비 +), 구조적으로 위쪽에 있고(MA 상방), 시장 전체가 동조하고 있다(상승 비율 ↑)—이 세 가지가 동시에 성립될 때만 매수 스위치를 켠다면, 나쁜 날의 불필요한 진입은 자연스럽게 줄어듭니다. 반대로 조건이 깨지는 순간 스위치를 끄고, 필요하면 자동 All Sell로 리스크를 잘라낼 수 있습니다.
임계값은 시장 상황에 따라 달라집니다. 그래서 가상매매로 충분히 돌려보고, 로그를 근거로 조정해야 합니다. 오늘의 “보수적”이 내일의 “과도한 방어”가 될 수도, 오늘의 “공격적”이 내일의 “무모함”이 될 수도 있으니까요.

추천 시작값(참고용)

  • 전일대비: +0.3% ~ +1.0%
  • MA 조건: 현재가 > 20/50/60/120MA 중 1~2개
  • 상승 비율: ≥ 50~60%
  • 조합 예시
    • 보수형: (BTC +0.8%↑) AND (현재가 > 60MA) AND (상승≥55%)
    • 공격형: (BTC +0.3%↑) AND (현재가 > 20MA) OR (상승≥50%)

매매옵션2(차트 트리거): 신호를 정교하게

이평선 돌파(핵심 포인트)

  • 분봉: 1분(노이즈 크면 3/5/15분)
  • MA: 단기(20/30/40), 중기(60/120)
  • 연속 하방 캔들 수 필터(예: 60~120): 중간에 한 번이라도 터치하면 무효
  • 진입: “연속 하방 유지 + 현재가가 MA 위로 종가 기준 돌파”
  • 청산: 고정 손익절(예: ±0.5%) 또는 반대 시그널(재하락) 시 부분/전량

거래량 폭발(핵심 포인트)

  • 평균 구간: 30~60개 캔들
  • 배수 임계: 5~30배(종목·시간대별 튜닝)
  • 이례치 허용치: 5~15%로 평균 왜곡 방지
  • 진입: “최근 캔들 거래량 ≥ 평균×배수” AND (양봉/이평 위치 조건)
  • 페이크 컷: “폭발+음봉” 제외, 연속 폭발 1~2캔들 요구 등 확증 필터

둘 중 무엇을 쓰든, 또는 어떻게 합성하든 정답은 없습니다. 다만 “연속 하방 캔들 수”나 “이례치 허용치” 같은 노이즈 필터는 신호의 품질을 끌어올리는 장치로 매우 유효합니다.


매매옵션 운영

UI는 시황 패널과 옵션 패널을 나란히 두고, 활성/비활성 상태를 색과 아이콘으로 분명하게 표현합니다. Virtual 잔고로 안전하게 테스트하며, “It is bad timing to trade”가 반복되는 동안은 게이트가 닫혀 있음을 직관적으로 확인할 수 있습니다. 임계값을 약간 완화하면 어느 순간 스위치가 켜지고, Full scan… 로그가 뜬 뒤, 조건을 만족한 종목에서 매수 로그가 발생합니다. 손익절에 닿거나 반대 시그널이 뜨면 매도 로그가 이어지고, 거래소와 프로그램의 잔고·체결 내역이 일치하는지 바로 확인합니다.
무엇보다 중요한 건 로그입니다. 매수 시점의 시황 값, 당시 MA/거래량 상태, 매도 사유와 손익까지 전부 남습니다. 이 기록이 다음 임계값 조정의 근거가 됩니다. 전략은 데이터로 말하게 하세요.


[구현하기] 이평선(5 MA) 구하기 샘플 코드

import pyupbit
import pandas as pd

df = pyupbit.get_ohlcv("KRW-BTC", count=10, interval="minute1")

df['ma_5'] = 0.0
for i in range(4, len(df)):  # i의 루프 범위는 4 ~ 9 즉, 5번째 데이터부터 MA 계산 가능
    ma_5_sum = df.iloc[i-4:i+1]['close'].sum()  # 5개 종가('close') 합계
    df.iloc[i, df.columns.get_loc('ma_5')] = ma_5_sum / 5 # # MA(이동평균) 값을 직접 계산
print(df)

[구현하기] 거래량 폭팔 감지 샘플 코드

import pyupbit
import pandas as pd

df = pyupbit.get_ohlcv("KRW-BTC", count=10, interval="minute1")
print(df)

latest_volume = df.iloc[9]['volume']   # 가장 최근 캔들 거래량 (마지막 캔들)
prev_9_volume_sum = df.iloc[0:8]['volume'].sum()  # 이전 9개 캔들 거래량 합계
avg_prev_9_volume = prev_9_volume_sum / 9 # 이전 9개 거래량의 평균 계산
is_volume_surge = latest_volume >= (avg_prev_9_volume * 10) # 10배 이상 높은지 확인

print(f"-최근 거래량: {latest_volume}")
print(f"-이전 9개 평균 거래량: {avg_prev_9_volume}")
print(f"-배수: {latest_volume/avg_prev_9_volume}배")
print(f"-10배 이상 폭증 여부: {'🚀 YES (폭증!)' if is_volume_surge else '❌ NO'}")

구현과 안정성 체크

  • 데이터 최적화
    • 현재가: 티커 100개 청크 요청
    • 전일가: 09:00 이후 1회 갱신/캐시
  • 루프 제어
    • Start(F3): g_is_trade_running=True
    • Stop(F4): 즉시 False 반영, 빠른 종료
    • F12: 모두 매도(긴급 브레이크) 항상 대기
  • 주문 안전장치
    • buy/sell_market_order 결과 None/에러 문자열 감지 → 재시도+백오프
    • 부분체결 잔량 재처리, 수수료 반영
  • 리스크 레일
    • 최대 동시 포지션 수, 종목당 최대 할당, 동일 티커 쿨다운
    • 거래소 잔고 ↔ 내부 상태 정합성 재동기화

튜닝과 실전 전환

가상매매에서 2~4주 이상 무중단으로 돌려 보세요. 장이 급변한 날, 횡보한 날, 잠잠한 날을 모두 통과해 봐야 임계값이 살아 있는지 알 수 있습니다. 그 과정에서 “너무 안 산다/너무 자주 산다” 같은 체감을 로그와 함께 분석해 조절합니다. 실전 전환은 소액부터 단계적으로, 리스크 레일이 실제로 작동하는지(급매도·정합성 복구·중복진입 방지 등) 확인하면서 사이즈를 키우는 것이 안전합니다.


출발선 프리셋(참고용, 바로 써보고 로그로 조정)

  • 옵션1(시황 게이트)
    • 전일대비 ≥ +0.5%
    • 현재가 > 60MA
    • 상승비율 ≥ 55%
  • 옵션2(트리거)
    • (이평) 1분봉·60MA, 연속 하방 90개 후 상방 돌파
    • (거래량) 1분봉·평균 60, 배수 ≥ 20, 이례치 10%
  • 청산: 손익절 ±0.5%, 또는 반대 시그널 시 부분/전량
  • 리스크: 종목당 100만 KRW, 동시 포지션 3~5개, 쿨다운 n분

주의: 위 값은 “시작점”일 뿐입니다. 계정·시간대·종목 성격에 따라 반드시 로그로 조정하세요.

 


Next

매매옵션은 전략의 언어입니다. “좋을 때만 공격하고, 나쁠 때는 쉰다”는 우리의 직감을 숫자로 번역해 엔진에 새기는 일, 그것이 자동매매의 본질입니다. 시황(게이트)과 차트 트리거(실행자)의 균형을 잡고, 로그→회고→튜닝을 반복하면 전략은 점점 나만의 습관이 됩니다. 다음 편에서는 여기에 AI 보조 판단을 얹는 방법을 소개하겠습니다. 룰 기반에 AI를 더하면 무엇이 좋아지고 무엇을 조심해야 하는지, 실제 파이프라인과 함께 풀어 보겠습니다. 읽어주셔서 감사합니다.

 


 

DeepDukHook 자동매매 프로그램 교육

안녕하세요? 반갑습니다. 먼저, 제 채널과 컨텐츠에 관심을 가져 주셔서 진심으로 감사드립니다! 저의 경험을 빗대어 말씀드리자면 개인이 자동 매매 프로그램을 직접 개발하기 위해서는 파이

docs.google.com

 

자동매매 프로그램 교육 및 구매 문의

- 교육은 자동 매매 프로그램을 직접 개발 하시는 것을 최종 목표로 원격으로 1:1 원포인트 레슨 형태의 유료 교육을 제공해 드리는 것을 의미합니다. - 구매는 (업비트 및 빗섬과 같은 거래소 API

docs.google.com