바이낸스 선물 자동매매

백테스트 수익률 1,200만% 정체, AI가 타임머신 진입했다

creator88837 2026. 5. 26. 09:00

바이낸스 BTCUSDT 선물 자동매매 백테스트 설정 2025
BTC백테스트 결과표

 

바이낸스 선물 자동매매 봇의 백테스트를 처음 돌렸을 때 수익률이 +12,484,706%로 나왔다.
BTC 1시간봉 전략 하나가 $300을 $37,454,419로 만들었다는 계산이었다.
이 글에서는 그 숫자가 어디서 나왔는지, 오류를 어떻게 발견했는지, 올바른 백테스트 설정이 뭔지를 직접 검증한 과정으로 정리한다.

 

백테스트가 뭔지부터 


백테스트란 과거 데이터를 기반으로 전략을 테스트하는 것이다.
"이 전략으로 과거에 매매했다면 얼마나 벌었을까"를 계산하는 방식이다.

예를 들어 2023년부터 2025년까지 BTC 1시간봉 데이터를 가져와서
내가 만든 전략대로 사고팔았다고 가정하고 수익률을 계산한다.
실제로 매매하지 않고 시뮬레이션만 돌리는 것이다.

결과 수치만 보면 어떤 전략이 더 좋은지 비교할 수 있다.
다만 그 수치가 제대로 계산된 수치여야 한다.

 

왜 말도 안 되는 숫자가 나오나 


여기에 함정이 있다. 나도 처음엔 몰랐다.
직접 거래 기록을 차트랑 하나하나 대조하면서 알았다.

내가 설계한 로직은 이랬다. 종가 후 진입, 종가 후 청산.
신호가 나오면 그 봉이 닫힌 다음 봉에서 진입하는 방식이다.

근데 AI는 이렇게 계산했다. 시가 진입.
신호가 나온 바로 그 봉의 시작 가격에 진입한 걸로 계산됐다.

무슨 뜻이냐면.
4시간봉 신호가 오전 8시에 완성됐다고 하자.
실제로는 오전 8시 이후에 다음 봉이 열릴 때 진입해야 한다.
근데 AI는 그 봉이 시작된 오전 4시 가격에 산 것처럼 계산했다.
4시간 전 과거 가격에 진입한 것처럼 계산된 것이다.
타임머신으로 과거 가격에 산 셈이다. 실전에서는 절대 불가능한 가격이다.

그 차이가 수익률 1,200만%를 만들어낸다.

 

시가 진입이 얼마나 차이를 만드나 


BTC 4시간봉 기준으로 캔들 하나의 평균 변동폭은 2~4% 수준이다.
BTC가 $60,000일 때 4시간봉 하나의 변동폭은 $1,200~$2,400 정도다.

시가 진입과 다음 봉 진입의 가격 차이가 이만큼 벌어질 수 있다.
한 번 거래에서 $1,000 이상 유리하게 진입한 것처럼 계산된다는 뜻이다.

BTC 백테스트 기간 2년치면 거래 건수가 수백 건이다.
거래마다 수백~수천 달러씩 유리하게 잡히면 수익률이 기하급수적으로 불어난다.
1,200만%의 대부분은 이렇게 만들어졌다.

실전 봇은 신호가 나온 봉이 닫힌 뒤에야 포지션을 연다.
백테스트가 시가 진입으로 계산하면 실전과 완전히 다른 환경에서 테스트하는 셈이다.

 

AI에게 백테스트 코드를 시킬 때 


AI에게 코드를 짜달라고 할 때 진입 방식을 명시하지 않으면 오류가 생긴다.

이렇게 시키면 시가 진입으로 계산된다.
"BTC 1시간봉 MACD 전략 백테스트 코드를 파이썬으로 작성해줘"

이렇게 시키면 올바르게 계산된다.
"BTC 1시간봉 MACD 전략 백테스트 코드를 작성해줘. 신호 캔들이 완전히 닫힌 뒤, 다음 캔들 시가에 진입하는 방식으로 계산해줘."

이 한 줄 차이가 수익률 1,200만%를 만든다.
AI는 명시하지 않으면 계산이 편한 방향으로 코드를 짠다.
시가 진입이 데이터 처리 측면에서 더 단순하기 때문이다.
반드시 진입 시점을 직접 명시해야 한다.

실제로 쓴 명령어가 이거다.
"종가 기준으로 신호를 판단하고, 그 캔들이 닫힌 다음 캔들의 시가에 진입, 다음 청산 조건에서 시가로 청산하는 방식으로 계산해줘."

코드로는 이렇게 나왔다.

if signal[i-1] == 1:
    entry_price = open[i]

신호는 i-1번째 캔들에서 발생하고, 진입은 i번째 캔들의 시가(open[i])에서 이뤄진다.
이 구조가 맞는 방식이다.

신호 발생한 캔들의 종가(close[i-1])나 시가(open[i-1])에 진입하는 코드가 나오면 오류다.

 

수정하고 나서 현실이 보였다 


오류를 잡고 백테스트를 다시 돌렸다.
승률 81.7%가 아니었다.
수정 후 실제 승률은 30~40%였다.
수익률은 파산 또는 마이너스였다.

숫자가 확 줄었다. 허탈했다.
근데 이게 진짜 결과였다.
백테스트 1,200만%의 정체는 잘못된 계산이었다.
그게 내가 직접 검증해서 얻은 숫자였다.

 

직접 검증하는 방법 


거래 기록을 로그로 출력하고 차트와 하나하나 대조하면 된다.

1. 봇 로그에서 진입 시간과 진입 가격을 확인한다.
2. 바이낸스 차트에서 그 시간대를 찾는다.
3. 실제로 그 가격에 진입이 가능했는지 확인한다.

진입 가격이 해당 봉의 시가와 같으면 시가 진입 오류다.
진입 가격이 신호 다음 봉의 가격과 같으면 정상이다.

한 달치만 확인해도 충분히 명확하게 보인다.

 

그럼 백테스트는 쓸모없나 


아니다.
수익률 숫자 자체를 그대로 믿으면 안 된다는 뜻이다.
전략의 방향성을 보는 데는 참고할 수 있다.
어떤 지표가 이 종목에 맞는지, 타임프레임은 얼마가 적당한지.
그 방향을 잡는 용도로는 백테스트가 유용하다.

단, 반드시 직접 검증한 후에.

 

결론 


AI한테 백테스트 코드 짜달라고 할 때 반드시 이 문장을 추가하자.

"종가 확정 후 다음 봉 시가에 진입하는 방식으로 계산해줘"

이 한 줄이 없으면 AI가 시가 진입으로 계산하는 경우가 생긴다.
검증은 직접 해야 한다. 거래 기록과 차트를 대조하는 것, 그게 전부다.

📈 백테스트