트레이딩

[개발] Python으로 국내 주식 호가 단위 불러오는 함수 구현하기

성민석 2024. 3. 25. 02:27

이번 포스팅에서는 간단하게 현재가 기준으로 국내 주식의 매수/매도1호가를 구하는 함수를 구현해볼겁니다.
 
예전에 ETF 매매시스템을 개발할 때, 호가 단위에 대해서는 그렇게 중요하게 생각하지 않았습니다. 어차피 전부 5원이니까 그걸 굳이 어렵게 찾아야할 필요가 없었죠. 
 
2021.10.31 - [트레이딩] - [기타] ETF 주문을 위한 최소 호가 단위 변환

[기타] ETF 주문을 위한 최소 호가 단위 변환

안녕하세요 성민석입니다. ETF에서의 호가와 관련해서 알아보겠습니다. 결론적으로 말씀드리면 ETF/ELW의 경우, 가격과 무관하게 단일호가단위 5원을 적용합니다. 하지만 제 경우 진입가와 청산가

minsuk-sung.tistory.com

 
여기서 문제는 23년부터 이제 호가 단위 개편이 되면서 이전과 또 달라지게 됐습니다. 예전보다 호가가 더 촘촘해졌습니다. 이로 인해서 주가의 변동성이 이전보다는 죽게된 것 같습니다. 아무래도 주가를 부양시키기에는 돈이 예전보단 조금 더 많이 필요하게 되었습니다.

출처: 매일경제

 
사실 이렇게 표로 보는 것보다 실제 예시로 보는게 더 편하죠. 최근 장에서 단타꾼들이 가장 좋아하는 가격대인 2만원대 종목을 하나 살펴보시죠. 예시로는 (336260)두산퓨어셀입니다. 현재가 기준으로 20,050원입니다. 이렇게 호가가 뛰는 구간을 말합니다. 이전에는 호가 단위가 50원이었던 예전 장과 비교하면 최근에는 10원 단위 호가에서는 단타하기 어려운건 사실입니다. 세력 입장에선 호가가 촘촘해져서 주가를 끌어올리기 어려울테니깐요.
 

2024.03.22 (336260)두산퓨어셀 호가창

 
암튼 그건 저하고는 크게 중요한 부분은 아닙니다만, 어쨌든 저는 이제 현재가 기준으로 위아래 매수/매도호가가 얼마인지를 구하는 함수를 Python으로 구현해보고자 하는게 이번 포스팅의 목표입니다. 요즘 ChatGPT나 Claude3와 같은 인공지능 서비스가 많아서 대신 좀 편하게 개발해보려고 했는데 너무 아쉽게도 결과물들이 마음에 들지 않네요. 확실히 호가가 변하는 가격대에서 제대로 동작하지 않습니다. 저 그림을 줬는데 제대로 반영 못하고 결과가 안 나오는게 신기하긴 하네요. 
 

(좌) ChatGPT 4.0 (우) Claude3 결과물 - 아니 도대체 인공지능이 대신 개발해줘도 이렇게 못하는데 너무 복잡한게 아닌가

 
 
솔직히 저는 어렵게 짜는걸 좋아하는 편이 아니라, 간단하게 IF-ELSE로 처리해봤습니다. 어차피 제 시스템은 저 혼자 만들기 때문에 복잡하면 나중에 큰일납니다.

def get_fisrt_bid_ask_price(price):
    if price < 2_000:
        return price - 1, price + 1

    elif price == 2_000:
        return price - 1, price + 5

    elif 2_000 < price < 5_000:
        return price - 5, price + 5

    elif price == 5_000:
        return price - 5, price + 10

    elif 5_000 < price < 20_000:
        return price - 10, price + 10

    elif price == 20_000:
        return price - 10, price + 50

    elif 20_000 < price < 50_000:
        return price - 50, price + 50

    elif price == 50_000:
        return price - 50, price + 100

    elif 50_000 < price < 200_000:
        return price - 100, price + 100

    elif price == 200_000:
        return price - 100, price + 500

    elif 200_000 < price:
        return price - 500, price + 500
        
if __name__ == '__main__':
    for price in [2_000,20_000,30_000, 50_000,200_000,500_000]:
        bid_price, ask_price = get_fisrt_bid_ask_price(price)
        print(f"매수1호가: {bid_price:8,} / 현재가: {price:8,} / 매도1호가: {ask_price:8,}")

 
 
위 코드를 돌려보면 각각의 엣지 케이스마다 확인해보면 무리없이 잘 나옵니다. 저는 무식해서 IF-ELSE 문으로 경계가 되는 가격대를 처리해서 깔끔하게 가격이 나옵니다.
 

문제의 20,000원 매수/매도호가도 잘 나옵니다

 
여전히 간단한 코드를 줘도 ChatGPT 4.0는 정말 현학적으로 리팩토링을 하는군요. 저는 코딩을 그렇게 잘하진 못하는데 저놈의 brackets을 정말 좋아하네요. 한시간 내내 물어봐도 저 로직으로 뭔가를 해결하려고 하는데 학습 데이터를 정말 고른 것 같네요. 도대체 누구의 코드였을까... (이번 달 구독료를 환불해줘라 OpenAI야...)
 

 
 
참고자료
https://www.mk.co.kr/news/stock/10545467

단타꾼들은 호가단위 변경을 왜 반대할까 [주경야독] - 매일경제

내년 1월부터 국내 증시에서 작다면 작은, 크다면 큰 변화가 생깁니다. 다만 그동안 호가 체계의 불합리성을 이용해 단타 투자를 하셨던 분들은 강력하게 반발하는 상황인데요. 그러니까 매수를

www.mk.co.kr

 
 
 
 
 
 
 

728x90
반응형