자동매매 봇의 일곱 점검: 신호 시점·비용·결과 불명 주문

English version

TECH INSIGHT / EXPLAINED

봇 손실에는 전략·구현·비용·시장 환경이 함께 영향을 줍니다. 아래 일곱 점검은 구현과 평가 오류를 줄이기 위한 것이며 통과했다고 수익성까지 입증되는 것은 아닙니다.

세 사람이 시험 환경에서 일곱 가지 실패 상황을 점검합니다.
AI로 제작한 설명용 일러스트. 세 사람이 시험 환경에서 일곱 가지 실패 상황을 점검합니다.

실제 프로젝트의 로컬 실행 화면

기존 프로젝트의 화면 또는 함수를 로컬에서 실행해 촬영했습니다. 개인정보 없는 샘플 입력을 사용했으며, 실행한 범위는 각 이미지 아래에 설명했습니다.

원본 compute_rr()를 샘플 진입·목표·손절 가격으로 실행한 리포트입니다. 원본에 저장된 비용 상수와 손익비 기준을 그대로 사용했으며 현재 세율·수수료나 권장 기준을 뜻하지 않습니다. 실제 체결·갭 손실·부분 체결을 시뮬레이션한 화면은 아닙니다.
원본 compute_rr()를 샘플 진입·목표·손절 가격으로 실행한 리포트입니다. 원본에 저장된 비용 상수와 손익비 기준을 그대로 사용했으며 현재 세율·수수료나 권장 기준을 뜻하지 않습니다. 실제 체결·갭 손실·부분 체결을 시뮬레이션한 화면은 아닙니다.

1. 정보를 알 수 있는 시점 정하기

완료된 종가는 마감 전에 알 수 없습니다. 그 최종값이 필요한 판단이라면 모델에 이후 실행 가능한 체결을 배정해야 합니다. 한 행 shift는 신호 정렬에 도움이 되지만 봉 라벨 오류·빠진 거래일·비현실적인 체결까지 고치지는 않습니다. 신호·제출 시각과 체결 가정을 따로 적습니다.

2. 노출이 바뀔 때마다 비용 반영

단순 매수/현금 모델도 첫 진입과 가정한 마지막 청산 비용을 포함해야 합니다. diff()의 첫 행 결측을 그대로 두면 첫 비용이 빠질 수 있습니다. 부분 체결·비중 변화·매수에서 공매도로의 전환은 더 구체적인 회계가 필요합니다. 종목에 맞는 수수료와 근거 있는 체결 모델을 사용하세요. 고정 슬리피지 숫자는 관측 사실이 아닌 시나리오입니다.

3. 선택과 평가 구간 분리

시험한 파라미터 조합을 기록하고 시간순 평가 구간을 남긴 뒤 주변 설정 민감도를 봅니다. 한 값만 튀는 것은 조사할 신호이지 반드시 틀렸다는 증거나, 주변 값이 좋으면 참이라는 증거는 아닙니다. 평가 구간을 보며 반복 조정하면 그 구간도 학습 자료가 됩니다.

4. 재시도 소진은 명시적으로 실패 처리

429마다 continue하는 반복문은 마지막 시도 뒤 None을 반환할 수 있습니다. 정해진 소진 예외를 발생시키고 민감정보 없는 추적 ID로 알리세요. 조회 재시도 횟수를 제한하고 해당 Retry-After 규칙을 따르며 인증·입력 오류와 구분합니다. 주문 타임아웃은 다시 제출하기 전에 상태 대조가 필요합니다.

5. 대기 주문과 결과 불명 주문도 계산

잔고 0이 접수된 미체결 매수가 없다는 뜻은 아닙니다. 두 작업자가 동시에 0을 읽고 각각 주문할 수도 있습니다. 전략·계좌·신호별 의도를 영속화하고 원자적으로 예약하며 재시작 시 열린 주문과 체결을 대조하세요. 클라이언트 주문 ID도 거래소가 정한 유일성·조회 규칙 안에서만 도움이 됩니다. 아래 순수 함수는 판단 경계를 보여주며 데이터베이스 트랜잭션까지 구현하지는 않습니다.

def entry_gate(intent_state, position_qty, open_buy_qty, reconciled):
    if not reconciled:
        return "reconcile_first"
    if intent_state != "new":
        return "inspect_existing_intent"
    if position_qty != 0 or open_buy_qty != 0:
        return "exposure_already_exists"
    return "eligible_for_atomic_reservation"

assert entry_gate("unknown", 0, 0, True) != "eligible_for_atomic_reservation"
assert entry_gate("new", 0, 1, True) == "exposure_already_exists"

6. 손절을 보장 한도가 아닌 계획으로

수량 계산에는 계획 위험 예산·현금/증거금 한도·주문 단위·비용 여유가 필요합니다. 갭이 생기면 스톱 주문도 발동 가격을 넘어 체결될 수 있습니다. 계획 손실과 스트레스 손실을 구분하고 총노출을 제한하세요. 전액 현금 매수와 레버리지 공매도는 손실 범위도 다릅니다.

7. 경과 주수보다 확인한 사건으로 전환

과거 테스트·시뮬레이션·거래소가 지원하는 시험 환경을 사용합니다. 토큰 만료·재접속·오래된 시세·부분 체결·주문 결과 불명·재시작 대조를 의도적으로 시험하세요. 조용한 2주에는 이런 사건이 하나도 없을 수 있습니다. 별도로 승인된 실거래 배포 전 통과 조건과 되돌리기 절차를 기록합니다.

공식 자료와 함께 읽기

Binance timeout and unknown execution · Investor.gov order types · 포지션 크기 계산 · 조회 요청 재시도 처리

내용·예제 검토: 2026-09-29

댓글