머신러닝과 기술적 분석

Backtrader 에서 cheat-on-close 의 의미 본문

백테스트

Backtrader 에서 cheat-on-close 의 의미

BetterToday 2021. 8. 1. 13:05
728x90

Backtrader는 최대한 현실적인 백테스트를 위해 수수료 설정등의 기능을 지원한다. 그러나 이렇게 다양한 기능때문에 진입장벽이 있는 것도 사실이다. (그리고 무지 헷갈리기도함 ㅜ)

 

 

Backtrader에서 디폴트 설정으로 "오늘" 거래를 실행하면 "내일"의 시가(open price)로 거래가 완료된다. "오늘"의 종가로 거래 여부를 판단했다면 이미 "오늘"은 지나간 시간이라는.. 뭔가 현실을 반영하려는 의도인 듯하다. 그러다 보니 close price로 거래가 된 줄 알았는데 실제로는 "내일"의 시가로 거래가 되어있어 많이 헷갈린다

 

이런 복잡함을 해소하기위해 cheat-on-close라는 옵션이 있다. 표로 정리해보면 이렇다.

  거래되는 날짜 거래되는 가격
cheat-on-close : False (디폴트 설정) 다음 거래일 내일의 시가 (open price)
cheat-on-close : True 다음 거래일 오늘의 종가 (close price)

옵션 설정을해도 거래가 그 다음날 되는건 마찬가지지만 거래되는 가격을 오늘의 종가로 맞출수가 있다. 

 

cheat-on-close 설정 방법

cerebro.broker = bt.brokers.BackBroker(coc=True, cash=10000.0)

# coc가 cheat-on-close를 의미함.

위 코드와 같이 브로커객체를 생성할 때 옵션으로 주면 된다.

 

결과 비교

# 2.1. COC를 OFF 
#     05-19에 주문, 05-20에 05-20의 시가로 실행, 
2003-05-19, BUY CREATE, 92.65
2003-05-20, BUY EXECUTED, Price: 92.82, Cost: 9016.51, Comm 0.00
..
2003-05-23, SELL CREATE, 93.76
2003-05-27, SELL EXECUTED, Price: 93.30, Cost: 9016.51, Comm 0.00
# 2.2. COC를 ON
#     05-19에 주문, 05-20에 05-19의 종가로 실행, 
2003-05-19, BUY CREATE, 92.65
2003-05-20, BUY EXECUTED, Price: 92.65, Cost: 9000.00, Comm 0.00
..
2003-05-23, SELL CREATE, 93.76
2003-05-27, SELL EXECUTED, Price: 93.76, Cost: 9000.00, Comm 0.00

 

728x90
반응형
Comments