KRX 선물옵션 코드 체계에 대하여
주식투자를 하는 사람은 드물지 않아도 국내 선물옵션 시장에서 거래를 하는 사람은 극히 드물다. 특히, 증권사 API를 통해 거래를 하는 플레이어는 더욱 희소하다. 정말 극소수겠구나. 이번 글은 그 극소수에게 영향이 있는 이벤트에 대한 내용이 담겨 있다. 그 극소수 중 대부분은 이미 알고 있을 가능성이 높으니, 그런 측면에서 보면 정말 쓸모 없는 글일 수도 있을 것같다. 물론, 루돌넷에 작성하는 대부분의 글과 같이 이 글의 목적성은 나중에 개인적으로 참고하기 위함이다.
2025년 12월 둘 째주 목요일 선물옵션 만기일 이후부터 KRX의 파생상품 코드 체계에 약간의 변경사항이 있다. 1996년에 KRX 선물옵션 시장이 열린 이후 30년이 지났고, 이번 변경은 30년이 지났기 때문에 발생하는 이벤트다.
국내 주식시장에 상장되어 있는 기업들은 종목코드라고 하는 여섯 자리의 코드를 부여 받는다. 예를 들면 삼성전자의 종목번호는 005930, 마지막 자리는 거의 0인데, 보통주/우선주를 나누는 코드기 때문이다. 우선주는 5를 사용하고 우선주가 여러 종류 발행되어 있다면 다른 코드가 부여 될 때도 있다. 그러니, 사실상 다섯 자리로 구분한다고 볼 수도 있다. 대부분은 숫자로만 되어 있지만 이제 주식시장이 열린 지도 오래 되다 보니 자리가 부족하여 알파벳도 섞기 시작했다.
반면에 파생상품시장의 코드는 좀 복잡하다. 복잡하지만 나름의 규칙이 있다. 예를 들어 삼성전자라는 종목은 하나지만 여기에서 파생된 파생상품은 여러 가지다. 따라서, 파생상품마다 다른 코드를 부여해야 한다. 이번 글에서 선물이나 옵션에 대한 설명을 모두 할 수는 없고, 독자가 "삼성전자 선물 25년 12월물", 이것이 어떤 의미를 갖고 있는 지 이해한다고 가정하고 글을 이어갈 예정이다. 위에서 언급했듯이 선물옵션을 API로 거래하지 않는다면 딱히 알 필요도 없는 내용이기 때문이다.
첨부된 이미지의 위 여덟 자리 코드가 기존에 사용하던 방식이다. 그 코드가 아래 여덟 자리와 같이 변경된다. 특히, 첫 번째 자리가 핵심이고, 그 첫 번째 자리가 저렇게 변경되는 것은 네 번째 자리 때문이다.
첫 번째 자리는 파생상품의 종류를 뜻한다
첫 번째 자리는 파생상품의 종류를 의미한다. 1은 선물, 2는 콜옵션, 3은 풋옵션, 4는 선물 스프레드로 사용해 왔다. 그런데, 26년 1월물 부터는 순서대로 A, B, C, D로 변경된다. 즉, 풋옵션 코드가 이제 3으로 시작하는 것이 아닌, C로 시작하게 된다.
두 번째, 세 번째 자리는 종목 코드
두 번째, 세 번째 자리는 종목 코드에 해당한다. 위에서 언급했듯이 국내 주식은 여섯 자리로 되어 있고, 실질적으로는 다섯 자리가 종목 구분인데 반해, 선물옵션 시장에서는 두 자리로 커버한다. 좀 모자라는 감이 없지 않다. 다만, 엄선한 종목만 선물옵션 시장에서 거래할 수 있기에 당분간은 괜찮을 듯하다. 현재 270여 기업 정도가 거래 대상이다.
삼성전자의 주식선물 코드는 11이다. 그리고 실질적으로 주식옵션은 잘 거래되지 않고 선물 위주의 시장이 형성되어 있다. SK하이닉스는 50, LG에너지솔루션은 F5.
주식과 비교하기 위해서 삼성전자나 SK하이닉스, 또는 LG에너지솔루션 등의 주식선물을 예로 들었지만, KRX 선물옵션 시장에서 실질적으로 가장 활발히 거래되고 있는 상품은 KOSPI200 선물/옵션이다. 오히려 주식선물은 좀 이후에 생겼다. 그래서, 선물옵션 트레이더들은 KOSPI 지수보다 KOSPI200 지수에 좀 더 관심이 많다. 남들은 4,000선이 무너졌느니 하지만 오히려 이런 숫자에 무딘 반면, KOSPI200 지수의 550 같은 숫자에 더 익숙하다.
KOSPI200의 메인 종목 코드는 01이다. 그런데, 이것만 있는 것이 아니다. 미니 KOSPI200 종목도 있다. 이것은 05, 여기서 그치지 않는다. 일반적으로 KOSPI200 선물의 만기는 3개월마다 돌아오고 KOSPI200 옵션은 한달만에 만기가 돌아오지만, 위클리 옵션이라는 것을 만들어 거래하기 시작했다. 일반적인 옵션만기일은 둘 째주 목요일이지만, 위클리 옵션은 매주 목요일 만기가 도래한다. 이 위클리옵션을 위해 09를 부여했다. 위클리 옵션이 흥행하자 이번에는 매주 월요일에 만기가 돌아오는 또 다른 위클리 옵션을 만들어 거래하기 시작했다. 이 월요일 만기 위클리 옵션을 위해 AF를 부여했다.
이외에 상품선물도 존재하는데, 대표적으로 달러 선물이 있다. KRWUSD 외화 쌍을 베이스로 한 상품이다. 원화 환율로 인식하는 1,450 같은 숫자를 볼 수 있다. 실질적으로는 외화선물 카테고리를 따로 만들어야 할 것 같은데 그냥 상품선물로 분류해 놓았다. 달러 선물을 위한 코드는 75.
네 번째 자리는 연도 코드
실질적으로 30년만에 변경되는, 이 글을 쓰게 만든 원인이 되는 코드다. 처음 KRX 선물옵션 시장이 시작되었을 때가 1996년이어서인지 6이라는 코드가 부여 되었다. 아마도 처음이다 보니 플레이어들에게 좀 더 친숙한 코드를 부여하고자 하는 의도가 있지 않았을까 추측할 뿐이다.
96년부터 99년까지는 6에서 9가 부여 되었고, 2000년이 되어 연도 코드는 0이 되었으며 2005년까지 무난하게 연도 끝자리를 그대로 코드로 사용했다. 그리고 2006년부터 알파벳 순서대로 코드가 부여된다. 단 I나 O같은 경우는 숫자 1이나 0과 혼란을 줄 우려가 있어서인지 빠지고, U와 X/Y/Z도 모두 빠졌다. 아마도 딱 30년을 사용하기 위해 W에서 멈춘 듯하다. 25년에 W가 부여되었고, X/Y/Z가 사용되지 않는다면 2026년은?
2026년부터 다시 6이 부여된다. 그렇다. 이 연도코드는 탄생할 때부터 30년마다 순환하게 만들어 놓았다. 2055년까지 사용하고 다시 2056년부터 6부터 시작한다. 30년이면 충분히 중복되지 않게 사용할 수 있다고 판단한 것일까? 즉, 2026년 1월물의 연도코드 6을 사용한다고 해서 96년에 사용한 6과 혼동되지 않을 것이기 때문에? 그냥 연도에 두 자리를 부여하는 것이 좀 더 자연스럽지 않았을까?
실제로 CME의 선물같은 경우는 연도에 두 자리를 부여해 놓았다. 예를 들어 나스닥100 25년 12월물의 코드는 NQZ25, NQ가 나스닥 코드, Z는 12월, 25는 2025년을 뜻한다. 이 쪽이 좀 더 직관적이라고 생각한다. 왜 선진 시장이고 선구자인 CME의 코드체계를 그대로 사용하지 않았을까? 좀 멀리 나간 상상이긴 한데, 어쩌면 KRX 코드 체계 창시자는 육십갑자 같은 동양적인 세계관에 영향을 받지 않았을까? 어차피 CME 선물도 100년 지나면 다시 순환하긴 한다.
다섯 번째 자리, 월
다섯 번째 자리는 월을 표기하기 위해 부여 되어 있다. 연도 코드에 비하면 직관적이다. 1월부터 9월까지는 그대로 표기되고 10월, 11월, 12월은 순서대로 A, B, C로 표기된다. 이것도 한 자리를 아끼기 위해서 고안된 아이디어다. 16까지 있는 HEX 코드와 비슷한 개념이라고 생각하면 어렵지 않다.
CME 선물 코드가 연도는 직관적인 반면 월 코드가 알파벳으로 되어 있어 다소 난해한 편인데, KRX 선물옵션 코드는 오히려 월이 더 빠르게 이해된다. 실질적으로 플레이어 입장에서는 KRX쪽이 더 쉽게 느껴진다. 연도코드는 해 바뀔 때 좀 햇갈리지만 1년 내내 안바뀌고 자주 바뀌는 월 코드는 좀 더 직관적이기 때문이다. CME 선물 월코드는 매번 리스트를 보고 체크를 해줘야 한다.
예외적으로 KOSPI200 위클리 옵션은 연도/월 코드 자리를 합쳐서 별도로 코드가 부여되는 것으로 보인다. 그래서 연도/월과 아무 상관이 없다. 주마다 그냥 sequence 개념으로 증가하다 끝까지 가면 다시 01로 순환하지 않을까 싶다. 아직 위클리 옵션의 네 번째, 다섯 번째 자리는 파악하지 못하고 있다.
마지막 세 자리, 옵션 행사가
여덟 자리 중 마지막 세 자리는 옵션 행사가Strike를 위해 사용된다. 간단히 풋옵션에 대한 설명과 더불어 예를 든다면, 545 풋옵션의 경우 만기일 KOSPI200 지수가 545보다 낮을 때 그 차이만큼을 가져가게 된다. 행사가가 545인 풋옵션을 1.05에 매수했는데 만기일에 KOSPI200 지수가 543.85에 끝났다면 0.10pts가 수익인 셈이다. 즉, 543.95 아래에서 끝나야 수익이라는 뜻, 만기일에 KOSPI200 지수가 545 이상으로 끝나고 그 전까지 포지션을 유지했다면 해당 옵션은 아무 가지가 없다. 1.05pts 모두 손실 처리된다. 이렇게 결제를 받지 않고 그 전에 시장에서 포지션을 청산해도 된다.
그렇다면 선물은? 선물은 행사가가 없는데? 선물의 경우 그냥 000으로 표기되거나 생략하고 다섯 자리만 사용하기도 한다. 예를 들면 KOSPI200 선물 2026년 3월물은 A0163000, 또는 A0163으로 검색할 수 있다. 마찬가지로 달러 선물 2026년 1월물은 A7561000.
2026년 이후에도 거래를 하고 있을 줄은 몰랐다
이렇게 KRX 선물옵션 코드 체계를 정리해 보았다. 이제 첫 번째 이미지에 있는 301WC545의 의미를 이해할 수 있을 것이다. 행사가가 545인 KOSPI200 풋옵션 2025년 12월물이라는 뜻이다. 그리고, 그 아래의 C0161545는 행사가가 545인 KOSPI200 풋옵션 2026년 1월물이다.
추측컨데, 30년 순환 구조로 만들 때 파생상품 종류를 의미하는 첫 번째 자리 1, 2, 3, 4는 유지하는 쪽으로 생각하지 않았을까? 그런데, 막상 사용하려고 보니 데이터베이스는 정규화 되어 있고, 만약 2026년에도 30161545 같은 코드를 사용한다면 충돌이 생길 가능성이 있다. 물론, 행사가가 워낙에 벌어져 있어서 그럴 가능성은 없지만, 충돌이 안생긴다는 보장도 없다.
그래서 결국 생각해낸 것이 첫 번째 자리에 다른 코드를 부여 하는 아이디어를 생각해낸 것이 아니었을까? 이렇게 충돌 문제는 해결되었고 또 30년 후에는 E/F/G/H 같은 코드를 다시 부여하면 되겠지만, 파생상품 종류를 의미하는 첫 번째 자리는 파생상품 종류만 뜻하는 자리가 아니게 되어 버렸다. 30년 이후의 일에 너무 근시안적이었다는 비판을 하는 것이 적절한 지는 모르겠지만 좀 더 먼 미래를 내다 봐야 하지 않았을까라는 생각은 든다.
참고로 이 여덟 자리는 단축코드다. 시장 참여자들은 증권사를 통해 거래를 할 때 이 여덟 자리 단축코드를 사용하지만, KRX 내부적으로 사용하는 공식코드는 좀 더 길다. 아마도 이 공식코드 위주로 생각했다가 시장 참여자들의 혼선을 우려해서 첫 번째 자리에 새로운 코드가 부여된 것이 아닐까 추측해 본다. 하지만, 풋옵션이 C로 시작된다는 점에 있어서는 좀 혼란스럽다. 계속 쓰다보면 익숙해 지려나?
개인적으로 이 코드 변경은 상당히 난감한 문제였다. 연도/월 코드, 여기에 첫 번째 자리인 파생상품 타입 코드는 데이터베이스에서 PK/FK로 정말 빈번하게 사용되고 있을 수 밖에 없으니 엄청난 수준의 마이그레이션이 이뤄져야 했고, 이에 따르는 Rest API 서버, 실질적인 트레이딩이 이뤄지는 클라이언트 앱까지 모두 엄청난 수준의 대응 작업이 이루어 졌다. 이 작업 때문에 한동안 엄청 바빴다.
KRX 선물옵션 시장에서 매매기록을 데이터베이스화해서 정리한 것이 2014년도부터였으니, 10년이 훌쩍 넘는 세월동안 시장에 참여하고 있는 셈이다. 당시엔 2026년 이후에도 시장에서 플레이어로 참여하고 있을 모습은 상상이 안가는 시나리오였을텐데, 어쨋든 시장에 계속 붙어 있다. 중간에 깡통은 차서 좀 쉰 적은 있지만 궁극적인 퇴학도 안당하고 여전히 졸업도 못한 상태다.
과연 30년 이후에도 KRX 선물옵션 시장에서 트레이딩을 하고 있을까? 나이를 생각하면 쉽지 않을 것 같긴 한데, 궁금하다.