먼저 앞 코드에서 while 문의 수행 조건은 항상 True로 무한 루프였습니다. 초기화 함수에서 수행하는 작업들이 성공적으로 진행된 후에야 매매 프로세스를 진행할 수 있으므로 초기화 함수 성공 여부를 확인했던 self.is_init_success 변수를 while 문의 수행 조건으로 사용하겠습니다. 따라서 초기화 단계가 성공하여 self.is_init_success가 True이면 while 문이 동작하고, False라면 while 문이 동작하지 않아 매매되지 않습니다.
또 while 문 안은 try-except를 사용하여 예외 처리가 가능하도록 만들었습니다. 이렇게 예외 처리를 넣으면 혹시 예외가 발생하더라도 프로그램이 종료되지 않고 계속 동작할 수 있습니다. 준비를 마치고 처음 확인해야 할 것은 장 시간입니다. check_transaction_open 함수를 사용하여 현재가 장 중인지 확인하며, 개장 시간이 아니라면 5분 동안 대기했다가 다시 개장 여부를 체크할 수 있도록 time.sleep(5 * 60) 코드를 추가했습니다(time.sleep에 전달하는 숫자는 초 단위입니다).
Note ≡
time.sleep(5 * 60) 코드를 사용할 경우, 8시 59분에 장 시간을 확인하면 check_transaction_open() 결과는 거짓이 되고, 장 시간인 9시 4분까지는 대기 상태가 되므로 장 시작 후 4분 동안 비는 시간이 발생할 수 있습니다. 이 책에서는 이 정도의 공백이 전체 매매에 미치는 영향이 미미하다고 판단했으나 프로그램을 응용해서 사용할 때는 개장 직후 바로 매도하는 등 개장 직후 시간을 중요하게 다룰 수도 있습니다. 개장이 얼마 남지 않았을 때는 time.sleep 코드를 사용하지 않거나 대기 간격을 줄이는 방법 혹은 개장 때까지 남은 시간을 계산해서 time.sleep에 전달하는 방법을 사용할 수도 있습니다.