지난 글까지가 "어떤 종목을 살까"였다면, 이번 글은 "그 종목을 어떻게 살까"다. 정확히는, 내 매매 패턴을 코드에 녹여 넣다가 삽질한 이야기다.
내가 하려던 방식부터 말하면 이렇다. 돌파매매랑 눌림목 매매는 보통 다른 기법처럼 이야기한다. 돌파는 전고점을 뚫는 순간 사는 거고, 눌림은 뚫고 나서 잠깐 빠졌다 다시 오를 때 사는 거다. 근데 나는 이 둘을 따로 안 본다. 종목 하나가 전고점을 뚫는다. 조금 오르다 살짝 빠진다. 그 자리를 다시 뚫고 또 오른다. 강한 놈은 이 계단을 밟으면서 올라간다. 내 식대로 부르면 공 튕기면서 몰고 가는 드리블 같은 거다. 나는 그 한 흐름을 두 군데서 올라타고 싶었다.
그래서 진입을 둘로 나눴다. 전고점을 처음 뚫는 지점을 잡는 돌파, 뚫고 눌렸다 다시 가는 지점을 잡는 눌림. 봇에도 이 둘을 각각 엔진으로 넣기로 했다. 나는 이걸 돌파 엔진, 눌림 엔진이라고 부른다. 여기까진 말로는 참 쉬웠다. 그런데 이 쉬운 걸 코드로 옮기는 순간부터 이상해졌다.
목차
눌림을 코드로 시켰더니, 엉뚱하게 높은 자리를 잡았다
문제는 눌림 엔진이었다. 눌림을 코드로 만들려면 "이 종목이 어디서 눌렸는지"를 봇이 숫자로 딱 집어야 한다. 그걸 AI한테 시켰다. 빠져서 자리 잡은 구간을 하나 잡고, 그 구간을 다시 뚫으면 사라고.
봇은 그 눌린 구간을 이렇게 잡아서 로그에 찍는다.
🔵 [눌림형성] cur=6350 zone=(6342-6387)
여기서 zone이 봇이 잡은 눌림 구간이다. 근데 돌려보니 이게 자꾸 이상하게 높은 데 잡혔다. 실제로 종목이 눌린 자리보다 위에 zone이 떴다. 그러니 봇은 아직 오지도 않은 높은 자리를 "여기가 눌림이다" 하고 기다리다가 번번이 헛물을 켰다.
원인을 한참 찾다 알았다. 눌림 구간을 잡는 기준 고점을, 봇이 장중에 반짝 튄 고점으로 잡고 있었다. 하루 중 잠깐 위로 솟았던 순간을 기준으로 삼으니, 그 아래로 잡히는 눌림 구간도 통째로 위로 딸려 올라간 거다. 진짜 기준이 됐어야 할 건 그 반짝 고점이 아니라, 처음 전고점을 뚫고 올라섰을 때의 고점이었다.
그래서 기준점을 바꿨다. 장중에 잠깐 튄 값 말고, 돌파가 난 시점의 고점을 기준으로 눌림 구간을 잡게 고쳤다. 그러자 zone이 실제 눌린 자리에 제대로 붙기 시작했다. 말로는 "눌린 데서 산다" 한 줄인데, 그 눌린 데가 어디인지를 코드가 착각 안 하게 만드는 게 이렇게 일이었다.
돌파는 점심시간마다 헛것을 봤다
돌파 엔진은 다른 데서 터졌다. 나는 전고점을 딱 뚫는 걸 보고 사면 늦을 때가 많아서, 전고점 바로 아래에서 미리 들어가게 해뒀다. 하루에 한 번만.
근데 이 엔진이 유독 점심시간마다 헛것을 봤다. 낮 12시 언저리, 거래가 뚝 끊긴 시간에 주가가 살짝 위로 뚫는 것처럼 보이면 봇이 그걸 진짜 돌파로 착각했다. 실은 사는 사람도 파는 사람도 없어서 호가가 얇아진 틈에 가격만 살짝 밀려 올라간 건데, 봇 눈에는 그게 돌파로 보인 거다.
거래량이 실린 진짜 돌파랑, 거래가 없어서 가격만 뜬 가짜 돌파를 봇은 구분을 못 했다. 그래서 점심 시간대엔 돌파 진입을 아예 막았다. 거래 얇은 시간의 돌파는 안 믿기로 한 거다. 이것도 내가 손으로 매매할 땐 그냥 "점심엔 잘 안 속지" 하고 감으로 걸렀던 건데, 봇은 그 감이 없으니 규칙으로 박아줘야 했다.
진짜 눌림과 가짜 눌림을 가르는 것
두 삽질을 겪고 나니 결국 하나로 모였다. 진짜냐 가짜냐를 가르는 건 거의 거래량이었다.
거래량이 줄면서 빠지면 눌림으로 봤다. 살 사람이 잠깐 쉬는 거지 파는 사람이 쏟아지는 게 아니니까. 거래량이 늘면서 빠지면 그건 눌림이 아니라 그냥 하락이라 밑이 없다. 돌파도 똑같이, 거래량이 실려야 진짜였다. 그래서 봇도 그냥 빠졌다고, 그냥 뚫었다고 사는 게 아니라 거래량까지 같이 보고 판단하게 만들었다.
여기에 장세도 얹었다. 장이 강할 땐 종목이 깊게 안 빠지고 지지선 위에서 바로 튀어 오르니 그 위에서 보고, 장이 약할 땐 얕은 눌림이 잘 안 통하니 지지선이 한 번 깨진 더 아래 자리까지 기다렸다 봤다. 앞에서 장이 약하면 봇이 조건을 더 빡세게 잡게 해둔 거랑 같은 결이다.
틀릴 때도 많다
이렇게 고쳐놔도 항상 맞진 않는다. 눌림인 줄 알고 봤는데 그냥 계속 빠지는 경우도 많다. 이건 확률 싸움이라 맞을 때도 있고 틀릴 때도 있다.
다만 기준 하나는 정해뒀다. 거래량도 줄었고 장도 나쁘지 않은데 그런데도 지지선 밑으로 계속 빠지면, 그건 내가 본 그림이 틀렸다는 신호다. 그럴 땐 안 붙들고 자른다. 눌림을 잘 잡는 것보다, 잘못 잡았을 때 빨리 인정하고 나오는 게 더 중요하다고 본다.
로직을 코드로 옮기는 사람에게
혹시 매매 로직을 코드로 옮기는 사람이 있다면 하나 말해두고 싶다. 머릿속에서 "눌린 데서 산다", "돌파에서 산다"는 참 명확하다. 근데 코드는 그 "눌린 데"랑 "돌파"가 정확히 어느 값인지를 안 짚어주면 제멋대로 잡는다.
나는 그걸 눈으로 확인 안 하고 "알아서 잡겠지" 하고 넘겼다. 그러다 zone이 엉뚱한 데 잡히는 걸 한참 뒤에야 알았고, 점심 가짜 돌파에 속는 것도 로그를 뒤지고 나서야 알았다. 만약 그때 로그를 안 찍어놨으면, 봇이 왜 이상한 자리에서 사려는지 영영 몰랐을 거다.
그래서 조언은 간단하다. 로직 하나 넣을 때마다, 그게 진짜 내가 생각한 자리를 잡는지 로그로 찍어서 눈으로 확인해라. AI가 짜준 코드가 문법이 맞다고 내 의도대로 도는 건 아니다. "눌린 데서 산다"는 내 문장과, 봇이 실제로 잡은 zone 숫자가 같은지는 내가 직접 맞춰봐야 안다. 그게 돌아가는 봇을 만드는 제일 빠른 길이었다.
그다음 이야기는, 이렇게 산 걸 대체 언제 파느냐다. 그게 사는 것보다 훨씬 어려웠다.
이 글은 내가 직접 만든 프로그램의 개발 기록일 뿐, 특정 종목이나 매매 방식을 권하는 글이 아니다. 투자 판단과 그 결과는 각자의 몫이다.
댓글 쓰기