다음은 이 함수를 check_buy_signal_and_order에서 사용하는 코드입니다.
RSIStrategy.py
(...)
def check_buy_signal_and_order(self, code):
if not check_adjacent_transaction_closed_for_buying():
return False
universe_item = self.universe[code]
if code not in self.kiwoom.universe_realtime_transaction_info.keys():
print("매수대상 확인 과정에서 아직 체결정보가 없습니다.")
return
(...)
if ma20 > ma60 and rsi < 5 and diff_days_ago < -2:
if (self.get_position_count() + self.get_buy_order_count()) >= 10: ------ 이미 보유한 종목, 매수 주문 접수한 종목의 합이 보유 가능 최대치(열 개)라면 더 이상 매수 불가능하므로 종료
return
budget = self.deposit / (10 - (self.get_position_count() + self.get_buy_order_count())) ------ 주문에 사용할 금액 계산(10은 최대 보유 종목 수로 const.py 파일에 상수로 만들어 관리하는 것도 좋음)
bid = self.kiwoom.universe_realtime_transaction_info[code]['(최우선)매수호가'] ------ 최우선 매수 호가 확인
quantity = math.floor(budget / bid) ------ 주문 수량 계산(소수점은 제거하기 위해 버림)
if quantity < 1: ------ 주문 주식 수량이 1 미만이라면 매수 불가능하므로 체크
return
amount = quantity * bid ------ 현재 예수금에서 수수료를 곱한 실제 투입 금액(주문 수량 * 주문 가격)을 제외해서 계산
self.deposit = math.floor(self.deposit - amount * 1.00015)
if self.deposit < 0: ------ 예수금이 0보다 작아질 정도로 주문할 수는 없으므로 체크
return
order_result = self.kiwoom.send_order('send_buy_order', '1001', 1, code, quantity, bid, '00') ------ 계산을 바탕으로 지정가 매수 주문 접수
self.kiwoom.order[code] = {'주문구분': '매수', '미체결수량': quantity} ------ _on_chejan_slot이 늦게 동작할 수도 있기 때문에 미리 약간의 정보를 넣어 둠
else:
return