개요
수동 거래 진입(Manual Trade Entry) 시스템은 봇이 일반적인 신호 생성을 기다리지 않고, 사용자가 직접 거래 기회를 입력하면 봇이 이를 자동으로 모니터링하고 실행할 수 있게 해줍니다. 수동으로 시장을 분석하다가 좋은 기회를 발견했을 때 봇이 놓치지 않도록 하는 데 이상적입니다.
작동 방식
🔄 자동 핫 리로드
- 봇이 실행 중인 상태에서
settings/manual_trade_symbols.yaml파일에 진입 항목 추가 - 변경 사항은 자동으로 30초 이내(다음 처리 사이클)에 반영됨
- 재시작 불필요!
🎯 거래 실행 흐름
- 사용자가 YAML 파일에 거래 진입 추가
- 봇이 다음 사이클(≤ 30초)에서 새 항목 감지
- 봇이 검증:
- 심볼이 봇의 거래 목록에 존재하는지
- 해당 심볼에 진행 중인 주문이 없는지
- 가격 조건 충족 여부(임계값 설정 시)
- 봇이 거래를 자동 실행
- 성공 시 항목 제거 (중복 방지)
설정 파일 위치
settings/manual_trade_symbols.yaml
필드 설명
Symbol (필수)
- 거래소별 형식의 거래 쌍
- 예시:
BTCUSDT,ETHUSDT,1000PEPEUSDT - 봇의 심볼 목록에 정확히 일치해야 함
Price (필수)
0= 현재 시장 가격을 봇이 가져와 사용 (권장)> 0= 지정한 특정 가격을 진입 기준으로 사용0설정 시 봇은:- 현재 시장 가격 조회
- YAML 파일의 해당 필드 업데이트
- 이후 사이클에서 임계값 계산에 사용
Direction (필수)
Long= 매수 / 롱 포지션Short= 매도 / 숏 포지션
Amount (필수)
0= 봇의 기본 포지션 사이징 사용> 0= 지정한 금액(quote 통화 기준)으로 강제 지정- 예시:
1000.0= $1000 포지션2500.5= $2500.50 포지션
ExecuteThresholdPerfect (필수)
0= 즉시 실행 (가격 변동 불필요)> 0= 가격이 이 비율만큼 움직일 때까지 대기 후 실행- 롱 포지션: 가격이 이 %만큼 하락할 때까지 대기
- 숏 포지션: 가격이 이 %만큼 상승할 때까지 대기
Timestamp (선택)
null사용 또는 필드 자체 생략- 봇이 처리 시 자동으로 현재 시간 설정
- 향후 만료 검증 등에 활용 가능
사용 예시
예시 1: 즉시 진입 (지금 기회 포착)
Trades:
- Symbol: 'BTCUSDT'
Price: 0 # 현재 가격 사용
Direction: Long # 롱 진입
Amount: 0 # 기본 사이징 사용
ExecuteThresholdPerfect: 0 # 즉시 실행
Timestamp: null
사용 사례: BTC가 돌파하는 모습을 보고 지금 바로 진입하고 싶을 때.
예시 2: 딥 매수 (5% 풀백 전략)
Trades:
- Symbol: 'ETHUSDT'
Price: 0 # 봇이 현재 가격 가져옴 (예: $3000)
Direction: Long
Amount: 1000 # $1000 포지션
ExecuteThresholdPerfect: 5 # 5% 하락 대기 (약 $2850에서 실행)
Timestamp: null
사용 사례: ETH가 강해보이지만 약간 과매수 상태. 5% 조정 시 매수하고 싶을 때.
예시 3: 공격적인 딥 매수 (10% 되돌림)
Trades:
- Symbol: '1000PEPEUSDT'
Price: 0
Direction: Long
Amount: 2000 # $2000 포지션
ExecuteThresholdPerfect: 10 # 10% 하락 대기
Timestamp: null
사용 사례: PEPE가 강하게 펌핑 중. 큰 조정 시 추가 매수(누적)하고 싶을 때.
예시 4: 펌핑 숏 (3% 상승 대기)
Trades:
- Symbol: 'SOLUSDT'
Price: 0 # 봇이 현재 가격 가져옴 (예: $100)
Direction: Short # 숏 포지션
Amount: 1500
ExecuteThresholdPerfect: 3 # 3% 상승 시 실행 (약 $103)
Timestamp: null
사용 사례: SOL이 과매수 상태. 추가 3% 펌핑 후 숏 진입하고 싶을 때.
예시 5: 여러 레벨 분할 진입
Trades:
# 즉시 진입
- Symbol: 'BTCUSDT'
Price: 0
Direction: Long
Amount: 500
ExecuteThresholdPerfect: 0 # 지금 진입
Timestamp: null
# 5% 하락 시 추가
- Symbol: 'BTCUSDT'
Price: 0
Direction: Long
Amount: 1000
ExecuteThresholdPerfect: 5 # 5% 조정 시 포지션 추가
Timestamp: null
# 10% 하락 시 더 추가
- Symbol: 'BTCUSDT'
Price: 0
Direction: Long
Amount: 1500
ExecuteThresholdPerfect: 10 # 10% 조정 시 대량 매수
Timestamp: null
사용 사례: BTC를 여러 가격대에서 분할 매수(DCA) 전략.
중요 참고 사항
✅ 해야 할 일
- ✅ YAML 파일 형식 유지 (올바른 들여쓰기, 문법 오류 없음)
- ✅ Timestamp는
null사용 (None금지) - ✅ Direction은
Long또는Short사용 (0/1 금지) - ✅ 심볼 이름이 거래소 형식과 정확히 일치하는지 확인
- ✅ 추가 후 최소 30초 기다려 봇이 인식하도록 함
❌ 하지 말아야 할 일
- ❌ Timestamp에
None사용 금지 (null또는 생략) - ❌ Direction에
0또는1사용 금지 - ❌ 봇이 모니터링하지 않는 심볼 추가 금지
- ❌ 봇이 파일 저장 중에 편집 금지 (드문 race condition 위험)
🔒 안전 기능
- 중복 실행 방지: 실행 후 항목 자동 삭제
- 충돌 방지: 진행 중인 주문 있으면 실행 안 함
- 가격 검증: 0 설정 시 자동으로 현재 가격 가져와 업데이트
- 타임스탬프 추적: 각 진입 생성 시각 기록
📊 모니터링
로그에서 처리 내역 확인 가능:
logs/orders.YYYY-MM-DD.log— 모든 거래 실행 기록 (JSON)logs/trade_summary.YYYY-MM-DD.log— 요약 정보logs/debug.YYYY-MM-DD.log— 상세 로그 (디버그 모드 시)
작업 흐름 예시
단계 1: 차트 분석 중 ETHUSDT가 저항 돌파하는 모습 발견
# manual_trade_symbols.yaml에 추가
Trades:
- Symbol: 'ETHUSDT'
Price: 0
Direction: Long
Amount: 1000
ExecuteThresholdPerfect: 0
Timestamp: null
단계 2: 파일 저장 (봇은 계속 실행 중)
단계 3: 30초 이내 봇이 수행:
- 파일 로드
- 현재 ETH 가격 조회 (예: $3000)
- YAML의 Price 필드 3000으로 업데이트
- Timestamp 현재 시간으로 설정
- ETHUSDT에 진행 중 주문 없는지 확인
- 거래 실행
- YAML에서 해당 항목 삭제
단계 4: 로그 확인하여 실행 완료 확인
✅ ETHUSDT 거래 성공적으로 실행됨
💾 수동 거래 설정 업데이트 및 저장 완료 (실행된 항목 제거)
프로 팁
💡 변동성 큰 시장: 더 높은 임계값(10~20%) 사용하여 좋은 진입점 노려보기
💡 즉시 기회: ExecuteThresholdPerfect: 0 + Amount: 0으로 빠른 진입 + 표준 사이징
💡 스케일 인(추가 매수): 동일 심볼에 임계값 점차 높여 여러 진입 추가
💡 리스크 관리: 0 대신 구체적 금액 지정하여 포지션 크기 정밀 제어
💡 다중 심볼 관리: 비슷한 전략끼리 YAML에서 그룹화하여 관리 편리하게
기억하세요: 이 시스템은 수동 분석을 보조하는 도구이지 대체하는 것이 아닙니다. 봇의 일반 신호 사이클에서 놓칠 수 있는 기회를 포착하는 데 현명하게 활용하세요! 🚀