이처럼 종목당 최대 투입 금액을 일정하게 맞추려고 해도 매수할 주식 주가에 따라 투입 비중이 달라질 수도 있지만(예수금이 클수록 그 차이는 미미) 그래도 종목끼리 투입 비중을 큰 차이가 발생하지 않는 선에서 조절할 수는 있습니다.
이 방법을 코드로 만들고자 현재 보유 종목 수와 매수 주문을 접수한 종목 수가 필요합니다. 보유 종목 수는 단순히 Kiwoom 클래스의 balance 딕셔너리에 저장된 키 개수를 세면 된다고 생각할 수 있지만, 잔고 정보를 얻어 오는 과정이 프로그램이 처음 실행되는 초기화 단계에서 진행되고 이후 수정되지 않기 때문에 다음 문제가 생길 수 있습니다.
➊ 프로그램 초기화 단계에서 self.kiwoom.balance 정보 수신
➋ 매도 조건에 부합한 종목 매도
➌ 하지만 self.kiwoom.balance에는 매도한 종목이 보유 수량 0인 상태로 남아 있음(보유 수량은 없지만 self.kiwoom.balance에 종목 코드가 키로 남아 있음)
➍ 이 상태에서 self.kiwoom.balance의 키 개수(종목 수)를 세면 이미 매도한 종목까지 계산되어 실제 보유 종목 수보다 많이 카운팅됨
이런 문제를 해결하는 데 두 가지 방법이 있습니다.
• 매도가 되면 self.kiwoom.balance에 매도한 종목 정보를 바로 삭제하거나 Kiwoom 클래스의 get_balance를 다시 호출하여 self.kiwoom.balance를 최신으로 유지합니다.
• 보유 종목 수를 세는 것이 목적이므로 self.kiwoom.balance의 전체 종목 수를 계산한 후 self.kiwoom.order에서 매도 주문이 체결된 종목이 있는지 확인하고 있다면 전체 보유 종목 수에서 제외합니다.