바이낸스 선물 자동매매

백테스트 실전 손실, AI한테 이 한 줄 추가하면 된다

creator88837 2026. 6. 14. 22:18

바이낸스 선물 자동매매 백테스트에서 수익이 나는데 실전에서 손실이 반복되는 경우가 있다.
전략을 바꿔도, 파라미터를 수백 번 조정해도 결과가 달라지지 않는다면 코드 자체를 의심해야 한다.
이 글에서는 AI가 코드를 짤 때 타임프레임을 혼용해서 생기는 문제와 해결 방법을 정리한다.

나도 이 문제로 몇 달을 날렸다.
백테스트를 돌리면 수익률이 좋고, 실전에 올리면 손실이었다.
전략이 나쁜 건지, 파라미터가 잘못된 건지 계속 의심하다 결국 코드 문제였다는 걸 뒤늦게 알았다.

 

백테스트와 실전 결과가 달라지는 진짜 원인 


자동매매 봇은 보통 두 가지 타임프레임을 함께 쓴다.
신호는 4시간봉 기준으로 잡고, 손절·익절 체크는 5분봉으로 하는 구조다.
이렇게 하는 이유는 4시간봉은 신호 판단에, 5분봉은 실시간 가격 추적에 적합하기 때문이다.

문제는 AI한테 코드를 짜달라고 했을 때 발생한다.
AI가 신호 판단 부분에서 5분봉 종가를 그냥 가져다 쓰는 경우가 있다.
4시간봉 신호를 계산해야 하는데 5분봉 값으로 계산하는 것이다.

백테스트에서는 이게 왜 수익이 날까.
4시간봉 하나가 완성되는 동안 5분봉은 48개가 생긴다.
48개 중 잠깐이라도 신호 조건을 충족하는 순간이 생기면 백테스트에서는 진입으로 처리된다.
실전 봇은 종가 기준이라 그 신호를 잡지 못한다.
같은 코드인데 결과가 완전히 달라지는 이유다.

 

코딩을 모르면 원인을 찾기 어려운 이유 


코드를 읽을 줄 알면 신호 계산 부분에서 어떤 타임프레임 데이터를 쓰는지 바로 확인할 수 있다.
코딩을 모르면 뭐가 잘못됐는지조차 알 수가 없다.

그래서 파라미터만 바꾸면서 백테스트를 반복하게 된다.
파라미터 문제가 아닌데 파라미터를 계속 건드리는 것이다.
몇 달이 그냥 지나간다.

AI한테 "왜 백테스트랑 실전이 다르냐"고 물어봐도 AI가 정확하게 원인을 짚어주지 않는 경우가 많다.
AI도 코드를 다시 보기 전에는 어디서 혼용이 일어났는지 모른다.
코드를 통째로 붙여넣고 "타임프레임이 혼용된 곳 있으면 찾아줘"라고 해야 AI가 확인해준다.

 

AI 코드 요청 시 타임프레임 분리 명령어 추가하는 방법 


코드를 짜달라고 할 때 이 문장을 함께 넣으면 된다.

"신호 판단은 4시간봉 종가(tf_close) 기준으로 계산하고, 손절·익절·체결 확인은 5분봉 close, high, low 기준으로 짜줘"

이 한 줄만 추가해도 AI가 타임프레임을 분리해서 코드를 짠다.
코딩을 몰라도 된다. 이 문장을 복사해서 붙여넣으면 된다.

실제로 AI가 만들어주는 코드 구조는 대략 이렇다.

# 4시간봉 데이터로 신호 계산
df_4h = exchange.fetch_ohlcv(symbol, '4h', limit=100)
signal = calculate_macd(df_4h)  # 신호는 4시간봉 종가 기준

# 5분봉 데이터로 손절·익절 체크
df_5m = exchange.fetch_ohlcv(symbol, '5m', limit=10)
current_high = df_5m[-1][2]
current_low = df_5m[-1][3]

신호를 계산하는 부분과 가격을 체크하는 부분이 완전히 분리된 구조다.
이게 제대로 분리되어 있어야 백테스트와 실전이 같은 조건에서 돌아간다.

다만 한 줄 추가한다고 한 번에 해결되지 않을 수도 있다.
AI가 다른 부분에서 또 혼용하는 경우가 있다.
신호 판단은 고쳤는데 진입 가격 계산하는 다른 부분에서 5분봉 값을 쓰는 식이다.
코드 전체를 AI한테 다시 보여주고 "타임프레임 혼용된 곳 전부 찾아줘"라고 한 번 더 확인하는 게 좋다.

 

타임프레임 혼용 여부를 로그로 확인하는 방법 


코드를 못 읽어도 로그만으로 혼용 여부를 확인할 수 있다.

봇 로그에는 진입 시간이 기록된다.
4시간봉 기준 봇이라면 신호는 봉 마감 직후에만 나와야 한다.
4시간봉은 0시, 4시, 8시, 12시, 16시, 20시에 마감된다.

진입 기록이 09:30, 11:15, 14:50처럼 봉 중간 시간에 찍혀 있다면 타임프레임 혼용 문제다.
4시간봉이 완성되기 전에 5분봉 값으로 신호를 잡은 것이다.

반대로 진입 기록이 00:01, 04:01, 08:01처럼 정각 직후라면 정상이다.
이 방법으로 코딩 몰라도 혼용 여부를 바로 확인할 수 있다.

 

백테스트 정확도를 높이는 근본 해결법 


임시 해결법으로도 많이 개선된다.
하지만 완벽한 해결책은 백테스트 코드 자체를 타임프레임에 맞게 분리해서 작성하는 것이다.

4시간봉 신호는 4시간봉 기준으로, 5분봉 체크는 5분봉 기준으로 정확하게 분리해서 테스트하면
백테스트 결과와 실전 결과가 훨씬 가까워진다.

AI한테 이렇게 요청하면 된다.

"4시간봉 신호 + 5분봉 손절·익절 체크 구조로 백테스트 코드 짜줘. 타임프레임 혼용 없이 완전히 분리해서 작성해줘."

이 요청 하나로 AI가 두 타임프레임을 분리한 백테스트 코드를 만들어준다.

 

결론 


백테스트 수익인데 실전 손실이 반복된다면 전략보다 코드를 먼저 의심하자.

파라미터를 아무리 바꿔도 같은 패턴이 반복된다면 AI가 타임프레임을 혼용해서 코드를 짠 것일 수 있다.

AI한테 코드 요청할 때 이 문장을 꼭 추가한다.

"신호 판단은 4시간봉 종가 기준, 손절·익절·체결은 5분봉 기준으로 타임프레임을 분리해서 짜줘"

코딩 몰라도 된다. 이 문장 복붙 하나로 혼용 문제를 상당 부분 막을 수 있다.
실전에서 로그를 확인해서 진입 시간이 봉 마감 직후인지도 함께 체크하면 된다.

📈 백테스트