글쓴이 보관물: 나루

나루에 대하여

클린 코드를 지향하는 개발자입니닷~*

나스닥 지수와 코스닥 지수의 상관관계

2015년 12월 16일부터 2021년 1월 14일까지의 데이터를 가지고 분석하였다. 샘플 사이즈를 키운다고해서 딱히 상관관계가 더 있을 것으로 보이지 않아서 추가 분석은 생략하였다.

트레이딩 관련 도서에서는 나스닥과 코스닥의 상관이 없다고 이야기한다. 그 와중에도 전일 나스닥 상승률이 코스닥 상승률과 상관이 있다고 생각하는 친구들이 있어서, 사실인지 확인해보고 싶었다.

전일 나스닥이 상승하면 코스닥도 상승할까? Pearson 상관계수는 0.23이었다. 즉, 통계적으로는 상관이 없는 것으로 나왔다.

따라서, 크게 의미를 두지 않고 시스템을 개발하는 것이 좋다. 물론 이따금씩 구체적인 글로벌 시장 상황에 따른 영향을 받아서 함께 움직일 수도 있지만, 그렇다고 해서 매일 나스닥 지수가 모두 코스닥 지수에 영향을 준다고 일반화의 오류에 빠지는 것이다.

쨌든 나스닥 지수는 코스닥 지수에 대한 예측력이 없다.

끝!

코로나19 확진 추이

지난 달에 코로나19 확진자가 늘어나는 부분에 대해 통제불가능에 무게를 두어야 한다는 이야기를 한 적이 있다. 결국 슬픈 소식이 들려왔다(http://naver.me/GRvUvqzv). 중증 환자가 병상이 부족해서 제 때 입원을 하지 못하고 돌아가셨다는 소식이었다. 경증 환자들을 자가격리하고 병상 확보만 했어도 이런 상황이 오지는 않았을텐데, 아직도 이 나라는 확진자에 대해 자가격리를 최후의 카드로 남겨두고 있다. 대학의 기숙사들을 활용하려고 다양한 노력을 하고 있지만, 결국 어차피 확진 받아도 자가격리하는 쪽으로 방향이 잡힐 것이다.

이런 생각을 하게 된 이유에 대해 데이터를 가지고 이야기하려고 한다.

출처: 네이버

위의 도표는 네이버에서 ‘코로나19’로 검색한 후 ‘누적 확진, 격리해제’ 항목을 선택했을 때 나오는 그래프다. 1차 확산과 2차 확산의 시기가 있었다. 1, 2차 확산 시기보다 더 중요한 것은 필자가 위에 ‘1’과 ‘2’로 표시한 구간이다. 확진자와 격리해제의 차이에 주목해야 한다. 1번 구간에서는 확진자와 격리해제의 차이가 대략 1,000명가량 된다. 2번 구간에서는 2,000명가량 된다. 이 숫자가 무엇을 의미하는지 생각해 보자.

1과 2 구간 모두 표면적으로는 현재 코로나19에 감염되고 치료 중에 있는 사람의 숫자다. 1번 구간에서도 국민들은 모두 방역을 열심히 했고, 비교적 잘 통제되는 상황으로 만들었다. 2번 구간도 국민들이 모두 방역수칙을 열심히 지켰다. 그래서 그 이상 확산되지 않는 수준을 유지했다.

그런데, 1번 구간에서는 치료중인 사람이 약 1,000명이었는데, 2번 구간에서는 약 2,000명이었다. 그 이유는 바로 자신이 감염됐는지도 확실치 않고, 애매하고, 감기인거 같은데, 뭔가 코로나19에 감염됐다고 하면 피해볼 것 같고, 그런데 딱히 중증은 아니고 그러니까 그냥 버티자고 하다가 나은 사람들이 있다는 것이다. 말그대로 통계치에 잡히지 않은 감염자들이 있고, 그들이 바이러스의 숙주가 되어 전파되는 형태 말이다.

지금은 3차 확산세를 지나고 있다. 3차 확산세가 지나도 분명 자신도 모르게 감염되고 전파되는 사람들이 생겨날 거다. 그 폭이 얼마가 될지는 잘 모르겠다. 1차 확산기와 안정기, 2차 확산기와 안정기, 그렇다면 3차 확산기 이후에도 안정기가 올 거다. 그런데 그 수준은 분명 1, 2번 구간 이상일 것이다. 그리고 4차, 5차 확산이 진행된다면 그 이상으로 치료중인 사람의 숫자는 늘어날 것이고, 결국 의료시스템을 모두 활용해도 수용치를 넘어갈 것이다. 사실 이미 포화상태를 넘어가고 있다는 신호는 여기저기서 들려오고 있다. 즉, 기본적으로 경증 환자는 자가격리하면서 상태를 의료진에게 보고하고, 중증 환자만 입원하는 형태가 돼야 할 것이다.

코로나 확산 예상 추이

필자는 전체적으로는 위의 그래프와 같이 진행될 것이라는 예상이고, 현재는 빨간 동그라미를 지나고 있는 것으로 보인다. 사실 3차 확산세는 언제 어느정도로 잡힐지 지금 예상도 할 수 없는 상황이다. 슬픈 일이지만 안정적인 백신이 나와서 효과를 보기 전까지는 계속 확산될 것이다. 필자는 정말 아주 짧아야 앞으로 1~2년, 길면 5년 이상도 걸릴 수 있다고 본다.

코로나19의 확산을 늦추기 위해서라도 코로나19 감염자에 대한 시선을 바꿔야 한다. 얼마전에 모 구청에서는 어린이집 보육교사가 코로나에 걸리면 벌금을 내게 하겠다는 이야기도 들었고, 같은 구청에서 특정 건물에서 확진자 한 번만 더 나오면 위탁을 하지 않겠다는 둥의 이야기를 들었다. 모두 질병을 이유로 하는 차별이다. 코로나19에 감염된 것만으로도 힘들고 괴로울텐데, 직장에서 해고되고, 사업을 접어야 한다면 이건 분명 옳지 않다.

코로나19에 대한 차별적 시선 때문에 분명 검사를 받아야 할 것 같은 느낌이 들어도, 검사를 받을 수 없는 사람들이 있다. 그런 일 때문에 코로나19 감염자가 늘어나는 일은 최소한 없어야 하지 않겠는가. 이런 이유로도 차별금지법은 제정돼야 한다.

어쨌거나 지금은 3차 확산기를 지나고 있다. 아직은 전체 국민 대비 0.937%의 감염률이다. 그래서 이제 시작이라는 생각인데, 지금부터 진을 빼면 장기화 됐을 때 그걸 어떻게 감당할 수 있을지 걱정이 된다. 정부에서는 하루 속히 통제 불가능에 무게를 두고 옳은 의사결정을 하기 바란다.

무엇보다도 하루 속히 차별금지법이 제정돼서 더 이상 아픈 사람을 두 번 죽이는 일들이 일어나지 않았으면 좋겠다.

자율성 대 수치심

심리학자들이 다들 대단하지만 아이를 키우면서 요즘 느끼는 건, 에릭 에릭슨의 이론이 참 대단하다는 거다.

요즘 아이가 프로이트의 심리발달 단계로 치면 항문기에 있다. 배변 연습을 하고 있다. 기저귀를 하고서도 ‘응가할거야’를 외치며 변기에 달려가서 응가를 성공적으로 해내던 녀석이다.

그런데 아직 소변을 변기에 누는 게 힘든지 연일 ‘쉬하고 있어’를 외치며 바지에 쉬를 하고 있다. 소위 육아와 관련된 정보들은 2~3시간에 한 번 아이가 쉬하게 해 주라고 한다. 그런데 이 녀석은 그러면 그럴수록 안한다고 난리다.

그래서 오늘 방식을 바꾸기로 결정했다. 2~3시간에 한 번 제안하는 것보다도 그냥 아이가 의사를 표현할 때까지 기다리기로 했다. 그리고 이에 대해 아이에게 그동안 마음을 불편하게 한 것에 대해 미안함을 표하고, 그의 자율성을 존중할 것임을 알려주었다. 자기 직전에 한 번 쉬할 것인지 물어만 보았는데, 스스로 가겠다 하였다. 뭐 앞으로 어찌될 지 모르겠지만, 그래도 바지에 쉬한 것 때문에 스트레스를 받지는 않을 것 같다. 이 편이 나도 마음이 편하다.

사실 에릭 에릭슨의 인간발달에 대한 이론을 몰랐다면, 계속 힘들었을 수도 있는데, 이럴 땐 참 이론가들이 대단하다 싶다.


2020.12.19 추가
뭐 그래도 여전히 ‘쉬하고 있어’를 외치며 바지에 하고 있다. 난 또 일희일비 했구나 싶다. 그래도 괜찮다. 마음을 바꾸고 마음이 편해졌으니까. 이럴 땐 상담학, 심리학 공부하길 잘했다는 생각이다. 🙂

윈도우10에서 심볼릭 링크 사용하기

특정 디렉토리에 대한 심볼릭 링크를 생성하는 경우 /d 옵션을 사용한다.

아래 예와 같이 하면 현재 디렉토리에 my_clock 이라는 심볼릭 링크가 생긴다.

단, 관리자 권한으로 실행해야 한다.

mklink /d my_clock c:\users\naru\project\my_clock

계획된 트레이딩 전략

사람들은 미체결 주문이 발생하는 경우 대기하거나 매수/매도 단가를 조정해서 주문을 변경한다. 이와 같은 일을 트레이딩 시스템을 개발할 때에도 고려해서 개발해야 한다. 고가에 매수하거나 저가에 매도하는 경우 슬리피지가 발생할 수 있는 영역이기 때문에, 신중하게 결정하고 개발해야 한다.

너무도 당연한 얘기 아니겠나 싶지만, 성향상 이런 부분들에 대한 디테일을 챙기기 어려운 분들은 꼭 챙겨주셔야 한다.

즉, 매매에 있어서 모든 전략은 계획되어 있어야 하고, 계획한 대로 처리할 수 있어야 한다. 계획한대로 되지 않았을 경우에 대한 예외처리까지 말이다.

하지만 대다수의 투자자들은 그런 상황에 대한 준비까지 하지도 않는다. 그렇기 때문에 그와 같은 상황을 마주하게 되면 감정적으로 결정하는 경우가 많다. 물론 경험치에 따른 훌륭한 직관으로 대응할 수 있다면 그렇게 하면 된다. 하지만 트레이딩 시스템으로 구축한다면 모든 판단은 계산 가능해야 하고 분명해야 한다. 애매하게 대충 처리하는 일은 있을 수 없다.

마음 편한 투자

대다수의 투자자들은 주가를 예측하고 싶어한다. 100%의 확률로 내가 사면 오르고, 팔면 내리는 경우를 맞추고 싶어한다. 딱 잘라서 말하건데, 그런 건 없다. 1% 씩 매일 꾸준히 수익을 내면 한 달 누적수익은 20%. 1% 안에는 다양한 이야기들이 담겨있다. 단일 종목으로 1% 매일 수익이라고 생각하면 곤란하다. 그게 그렇게 쉬운 일이라면 주식시장에 뛰어든 사람들은 모두 벌었어야 했다. 하지만 95%의 사람들이 잃는 게 현실이다.

즉, 수익을 볼 확률이 높은 자리에서 대응의 의사결정을 할 뿐이다. 손실을 보기도 하지만 장기적으로 수익을 보는 구조를 만들어 투자해야 한다. 승패는 병가지상사라는 말이 있다. 손익은 시장에서 늘상 있는 일이다. 손익비를 높여서 안정적인 수익 모델을 만드는 것이 트레이더가 해야 할 일이다.

실패가 두렵고, 손실 보는 일을 절대로 하고 싶지 않다면 투자나 트레이딩을 하지 않으면 된다. 무엇보다 마음이 편한 게 우선이다. 자기의 결과 맞지 않은 길을 굳이 갈 필요가 없다.

매매로직 재사용

빠른 배포가 중요하다는 포스팅에서 이야기 한 방법은 사실 안정적이지 않다. 더 좋은 방법은 백테스트할 때 활용한 매매 시스템의 로직을 트레이딩 시스템에서 동일하게 활용하는 방법이다. 1호 시스템을 만들고 나서, 앞으로 2호 이후의 시스템들을 만들 생각을 하니 매번 모든 코드를 작성해야 하는 것은 비효율적이라는 생각이 들었다. 매매로직을 모듈화해서 백테스트와 트레이딩 시스템에 모두 동일하게 활용할 수 있게 한다면, 백테스트에서 실전 매매 시스템 개발까지의 기간을 최소화 할 수 있을 것이라는 생각이 들었고, 이 작업에 이제 곧 착수할 예정이다.

백테스트의 성능을 저하시키지 않으면서, 트레이딩 시스템에 어떻게 장착할 수 있을지에 대한 설계가 필요하다. 특히 키움의 QEventLoop 사용방식은 코드의 복잡도를 증가시키기 때문에 ES7의 async, await 처럼 비동기를 동기식으로 사용할 수 있는 방법을 찾아보려고 한다.

그리고 앞으로는 TDD를 사용하여 시스템을 개발하려고 한다. 과거의 경험을 비추어봐도 TDD로 개발할 때 생산성이 가장 좋았고, 오류가 적었다. 1호 시스템을 개발하면서 매매로직 테스트하는 부분만 TDD를 활용하긴 했는데, case에 대한 정리가 부족한 탓에 오류 상황들이 발생했다. 그럼에도 테스트코드가 있어서 빠르게 문제를 발견하고 해결할 수 있었다.

쨌든 Do not Repeat Yourself(DRY 원칙)를 시스템 구축에도 활용해서 시스템 제작의 생산성을 높여야겠다.

트레이딩 시스템도 역시 빠른 배포가 필요하다!

시스템을 제작하고 이번 주에 시스템을 구동했다.

개발을 하면서 늘 느끼는 것은 ‘빠른 출시’는 언제나 항상 옳다는 것이다. 서버에 배포가 되고나면 문제해결에 보다 집중하게 된다.

작성한 코드에서 문제가 발생하면 안되기 때문에, 빠르게 버그를 잡아내고 문제를 해결해야 한다. 심지어 트레이딩 시스템은 현물로 거래하는 구조이기 때문에, 자칫 잘못하면 금전적 손실을 떠안을 수도 있다.

트레이딩 시스템 구축시 반드시 해야 하는 것은, 1차적인 테스트는 절대적으로 모의투자 기능을 적극적으로 활용해야 한다. 사실 모의투자와 실전투자의 차이는 키움의 경우 모의투자에서 제공되지 않는 API가 있는 정도고, 그 외에는 모두 동일하다. 단지 계좌번호가 다를 뿐이다.

본인이 만든 시스템에서 매수/매도 신호를 제때 일으키고 정해진 룰에 따라 주문을 하는지 확인하는 과정은 필수적이다. 이 과정을 굳이 실전계좌를 사용해서 현물을 잃어가면서 할 필요는 없다.

적정한 테스트 기간이 필요할 것이고, 안정적으로 테스트가 된 후에 실전계좌로 변경해서 수익화 해 가면 될 것이다.

시가 또는 종가 매매

시가나 종가는 매우 쉬운 개념이지만, 호가창에서 일어나는 상황들을 생각하면 그렇게 단순하지만은 않다. 이번엔 트레이딩 시스템 구축시 가격과 관련하여 발생할 수 있는 현실적인 문제를 짚어보도록 하겠다.

과거 데이터 상에 있는 시가나 종가로 매매하는 전략을 세운 경우, 호가창의 현실을 간과하는 경우가 많다. 고려해야 할 두 가지 사항이 있다.

첫째는, 호가가 순식간에 밀려서 움직여 버리는 경우다. 백테스트할 때에는 시가에 구입하겠다고 했는데, 실제 호가창에 호가가 아주 얇게 깔려 있어서 절대로 해당 가격에 원하는 수량을 구입할 수 없다면, 해당 백테스트 내용의 신뢰도가 떨어지게 되고, 실제로 원하는 수준으로 매매가 되기 어렵다.

말그대로 만약 시가가 그냥 딱 한 명이 한 번 살 수 있는 기회만 주고, 5호가 정도가 순식간에 올라가 버리고 두 번 다시 해당 가격에서 살 기회를 주지 않는다면, 백테스트처럼 매매할 수는 없는 것이다. 그래서 이런 상황들이 발생할 것을 대비해서 슬리피지를 고려해야 한다.

둘째는, 시가가 매수호가에 걸려있느냐, 매도호가에 걸려있느냐에 대한 문제이다. 위의 첫째 상황에 대한 좀 더 상세한 상황이다. 최우선 매수호가에서 출발해서 바로 현재가가 상승해 버리면 원하는 가격에 매수할 수 없다. 역으로 최우선 매도호가에서 출발해서 바로 현재가가 하락해 버리면 원하는 가격에 매도할 수 없다. 따라서 아주 공격적으로 슬리피지를 잡는다면 최소한 한 호가 정도는 슬리피지로 잡아야 한다.

단순하게 나는 양봉 시가에 살거야 내지는 팔거야 라는 생각을 한다면, 정말 내가 그 가격에 살 수 있는 상황일지 고려해야 한다.

수급이 풍부해서 사고 파는 데 큰 문제가 없다면 슬리피지는 줄어들고 수익은 상승할 것이다. 반대로 수급이 풍부하지 않은 종목은 슬리피지를 심각하게 고려하지 않으면 절대 수익을 낼 수 없을 것이다.

수수료와 증권거래세

수수료와 증권거래세는 결코 무시할 수 없다. 그깟 0.015% 정도의 수수료. 수수료보다는 좀 더 내지만 0.25%의 증권거래세 정도라고 대충 생각할 수도 있다.

하지만 거래횟수가 증가하고 거래대금이 커지다 보면 수익금보다 수수료와 세금이 더 많이 나가는 경우도 생길 수 있다. 물론 그런 전략은 좀 더 강화해서 수익을 극대화하는 쪽으로 조정할 필요가 있다고 생각한다.

증권사들은 서로 회원 뺐어오기(?) 경쟁을 열심히 한다. 그래서 당사 거래를 몇 개월 이상 하지 않으면 수수료 할인 혜택을 종종 주곤 한다. 그럴 때 잽싸게 수수료를 적게 내는 쪽으로 잘만 활용하면, 수수료를 적게 내면서도 거래를 할 수 있다.

필자는 증권사에서 제공하는 API를 사용해서 거래할 것이므로, 2개 증권사(크레온, 키움) 정도의 API 연동을 준비해 놓고, 이쪽 업체로 저쪽 업체로 계좌를 옮기며 사용해 보려 한다. 선물 API는 제공하는 곳이 더 많이 있으므로 추후에는 다양한 업체를 활용할 수도 있을 것 같다.

백테스트 결과 ETF 거래의 경우 거래당 0.015%의 수수료만 내지 않는다고 설정했을 때, 최종 백테스트 결과 수익에 상당한 차이가 발생했다.

백테스트시 좀 더 현실적인 결과 확인을 위해서 수수료와 세금을 감안할 필요가 있다.