코드를 살펴보면 budget = self.deposit / (10 - (self.get_balance_count() + self.get_buy_order_count()))로 한 종목에 최대 얼마의 금액을 투입할 수 있는지 계산합니다. 이후 최우선 매수 호가를 기준으로 주문 가능한 수량을 계산한 후 self.kiwoom.send_order로 매수 주문을 접수합니다. 여기서 다시 한 번 짚고 넘어갈 부분은 다음 코드입니다.
amount = quantity * bid
self.deposit = math.floor(self.deposit - amount * 1.00015)
현재 예수금에서 투입할 금액을 빼는 것은 실제 보유하고 있는 예수금에 영향은 미치지 않습니다. 영향이 없는데도 이처럼 감액하는 이유는 순전히 API 이용을 줄이기 위해서입니다. 예수금을 의미하는 self.deposit은 전략이 초기화될 때 한 번 조회한 후에는 다시 조회하지 않아 실시간으로 갱신되지 않습니다. 그래도 괜찮은 이유는 예수금에 변경이 생기는 순간은 이체, 송금을 제외하고오로지 매매 시점이기에 굳이 매번 API를 이용하여 현재 예수금이 얼마 남았는지 조회하지 않고도 직접 계산해서 사용할 수 있기 때문입니다.
반대로 매도 주문을 접수한 후 예수금을 늘이는 코드는 넣지 않았습니다. 매수 주문은 주문을 접수하는 즉시 전체 예수금에서 투입한 금액이 차감되며, 남은 예수금이 얼마인지 아는 것이 다음 주문을 접수하는 데 영향을 미치므로 바로바로 계산이 필요하기 때문입니다.
또 amount에 1.00015를 곱하는 이유는 매수 수수료인 0.015%를 제외한 금액을 계산하기 위해서입니다. 하지만 모의투자에서 적용되는 수수료율이 0.035%라서 amount에 1.0035를 곱하는 것이 모의투자 환경에서는 정확한 계산이지만, 나중에 실제 투자 환경으로 전환될 것을 염두에 두고 수수료율 0.015%를 적용했습니다.