더북(TheBook)

다음은 이 함수를 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
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.