Go로 자동매매 신호봇 프레임워크 설계하기

English version

TECH INSIGHT / EXPLAINED

재사용 가능한 Go 봇은 데이터 수집, 결정론적인 판단, 위험 검사, 주문 실행, 알림을 분리합니다. 계약을 충족하는 작은 의존성을 선택하되 단일 바이너리라는 배포 방식이 상태 복구를 대신하지는 않습니다.

동료 세 명이 Go 봇의 책임 분리 주제를 그림으로 설명하는 모습
이해를 돕기 위한 AI 생성 설명 일러스트. 실제 운영 화면이나 실적 자료가 아닙니다.

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

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

BinanceTrading_Futures의 기존 웹 대시보드를 로컬 실행했습니다. 시세·지표·신호는 가상 입력이며 상태 조회 화면과 모니터링 전용 로그를 확인한 예시입니다. 거래 엔진은 실행하지 않았습니다.
BinanceTrading_Futures의 기존 웹 대시보드를 로컬 실행했습니다. 시세·지표·신호는 가상 입력이며 상태 조회 화면과 모니터링 전용 로그를 확인한 예시입니다. 거래 엔진은 실행하지 않았습니다.

설정 전체를 검증한다

후보 설정으로 파싱·검증한 뒤 하나의 불변 버전으로 반영합니다. 위험 한도의 누락·오타를 레버리지5나 기본 주문 크기로 조용히 바꾸면 안 됩니다. 실전/테스트 주소와 자격증명이 맞는지 확인하고 실전 모드는 명시적으로 선택하게 합니다. INI 파서는 보통 외부 라이브러리이며 Go 표준 라이브러리에 기본 INI 파서가 있는 것은 아닙니다.

type Config struct {
    Interval time.Duration
    MaxNotional int64 // example quote-currency minor units
    Live bool
}
func (c Config) Validate() error {
    if c.Interval <= 0 { return errors.New("interval must be positive") }
    if c.MaxNotional <= 0 { return errors.New("max notional must be positive") }
    return nil
}

단일 소유자는 유용하지만 채널이 마법은 아니다

엔진 고루틴이 포지션 상태를 소유하고 I/O 작업자가 세대 ID가 있는 불변 결과를 돌려줄 수 있습니다. 채널에는 취소와 큐 한도가 필요합니다. Go select는 첫 case를 우선하지 않으며 여러 case가 준비되면 의사난수로 선택합니다. 소유자 안에서 네트워크 호출하면 응답까지 명령 전체가 멈추고 틱 주기보다 오래 걸릴 수 있습니다. I/O 데드라인을 두고 긴급 정지 경로의 응답성을 유지하세요.

작은 의존 관계

MarketData는 시각이 있는 관측값, Strategy는 주문 전송 없는 의도, Risk는 대기·체결 노출을 포함한 검사, Executor는 중복 방지와 대사, Store는 의도·이벤트 보존, Notifier는 엔진을 막지 않는 알림을 맡습니다. 전략은 기록 데이터로, 실행기는 타임아웃·부분체결 표본으로 시험합니다. 지표를 바꾸어도 복구 코드를 함께 바꾸지 않는 경계입니다.

종료에도 선택한 정책이 필요하다

새 의도를 중지하고 취소 가능한 작업을 멈춘 뒤 진행 중 작업을 저장하고 접수 주문을 대사합니다. 이후 보유 유지 또는 청산 정책에 따라 필요한 보호 주문도 확인합니다. context 취소는 거래소 주문 취소나 이를 무시하는 고루틴 종료가 아닙니다. 작업 종료를 제한 시간 안에 기다리고 남은 노출을 보고하세요. 필수 알림 설정이 없으면 표시하고 무인 실전 모드를 막을 수도 있습니다.

공식 문서와 이어 읽기

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

댓글