Jump to content

3-9. 데이타 마법사와 알고리즘 현자들이 마법과 연금술을 완성시키다.


Recommended Posts

  • Members

image.jpeg.fedc328db17205680000432db241bb7f.jpeg

주말은 특별하지 않았다. 어짜피 한번은 이런 일이 있을꺼 같았다. Peter 덕분인지 나도 제법 멘탈이 강해진 상태였다. 난 주말 동안에 봇 코드를 다시 리뷰하면서 MDR이 깨졌을 때 왜 봇이 작동을 멈추지 않았는지 살펴봤다.

우리는 봇에 최대 손실율을 프로그래밍해두었다. 즉, 우리가 지정한 손실율에 도달하면 봇은 손절을 하고 포지션을 정리해야 한다. MDR이 깨졌다는 건, 우리가 설정한 최대 손실율 이상의 손실이 발생했다는 것을 의미한다. MDR이 깨지는데에는 여러 요인은 있을 수 있다. 봇이 시장의 급격한 변동성에서 위험 회피 알고리즘이 제대로 작동하지 않았거나, 봇의 리커버리 알고리즘과의 충돌 때문일수 있다. – Wizz

봇의 코드와 알고리즘 보호 방법을 엄격하게 관리해야 한다는 Peter의 요청에 따라, 난 봇의 많은 부분들을 모듈화했었다. 연금술사들이 많아지면서 특정 알고리즘의 모듈을 수정하거나 개선이 필요할 때에도 알고리즘의 특정 부분을 브릿지 형태로 확장하는 방법을 사용했다. 이 방법은 연금술사들조차 봇이 어떤 방식으로 작동하는지 짐작할 순 있지만, 전체 알고리즘을 파악하는건 불가능하게 만들었다. 마치 직소 퍼즐의 한 두조각만을 가지고 작업하는 방식이었다.

회사 내부에서도 알려지지 않게 비밀리에 개발중인 메타트레이더 5용 포렉스 봇의 경우 슈퍼 KEY 트랜드 같은 핵심 알고리즘 인디케이터를 아예 별도로 봇과 분리해버렸다. 이를 통해, 봇의 핵심 작동 매커니즘 자체를 연금술사들도 알 수 없게 되었다.

40981-1024x585.jpg
봇의 비밀을 풀지 못하게 우린 연금술사들에게 퍼즐 조각 몇개만을 던져주었다.

MDR이 깨진 이후에도 봇이 멈추지 않고 작동했던 이유는 아주 간단한 내 실수 때문이었다. 특정 알고리즘이 수정되어 적용 될 때, 봇이 멈춰야 하는 안전장치 부분의 코드가 내 부주의로 잘못 덮어 쒸어진 상태였다. 이건 단순한 실수였기 때문에 다음부턴 더 주의하면 간단히 해결될 문제였다. 변명을 하자면 그 당시엔 사실 하루에도 몇번씩 봇의 알고리즘 조정이 있었다. 봇 또한 여러 버전이 있었고 하루에도 몇번씩 봇이 다시 컴파일되던 때였다.

진짜 문제는 우리 알고리즘이 MDR로 설정된 값 이상의 손실을 냈다는 점이었다. 이건 누구의 실수가 아니었다. 시장 상황에 따라 이렇게 언제든 문제가 다시 발생 할 수 있었다. 이 알고리즘을 어떻게 수정할 수 있을까? 수정한다고 이런 문제가 앞으로 더 생기지 않을까?하는 고민을 하다가, 우선 Peter에게 짧게 이메일을 작성해 보냈다.

“MDR이 깨진 후 봇의 안전 장치가 작동하지 않았던건 내 실수였어. 봇의 코드 업데이트를 하면서 해당 부분이 삭제된체 덮어 쒸어졌어. 이 문제는 다시 발생하지 않도록 봇을 Deploy 할 때 점검 프로세스에 확인 작업을 해야 한다고 테스크를 추가하면 될꺼 같아. 문제는 거래 알고리즘인데 이건 다음주에 퀀트 마법사팀과 회의를 한 후 다시 업데이트 해줄께.”

얼마 뒤 Peter에게 전화가 왔는데, 받지 않았다. 지금 그와 통화하면 왠지 주말 동안 푹 쉬지 못할꺼 같은 기분이 들었다.

내가 전화를 받지 않자 Peter는 잠시 뒤 내게 이메일을 보냈다.

Peter의 이메일에는 MDR이 깨진 후 봇이 멈추지 않은건 전혀 중요한 일이 아니라고 적혀 있었다. 중요한건 MDR 자체가 깨진거고 다음주에 전문가들에게 이런 다양한 시장 상황에서 봇의 안정성을 높힐 수 있도록 준비할테니 주말 동안에 그냥 푹 쉬란 내용이었다. 추가로 퀀트 팀과의 미팅도 하지 않아도 된다고 적혀 있었다. Peter는 이 문제를 퀀트팀이 해결할 문제가 아니라고 판단한듯 싶다.

이제는 Peter의 이런 이메일이 단순히 날 위로하기 위한 이메일이 아님을 안다. 생각해보면 Peter는 아주 큰 범주에서의 리스크 관리에 탁월했고, 지금 이 문제 또한 봇이 멈추지 않은게 아니라 MDR 자체가 깨진거였다. Peter는 단순히 봇이 멈추지 않은건 쉽게 고칠 수 있다고 생각했고, 맞는 얘기였다. 다만 봇의 여러 매매 알고리즘은 다른 문제였고, 문제 해결을 위해선 해당 문제 해결에 특화된 외부 전문가가 필요하다고 생각한 것이다. Peter는 늘 어떤 문제가 발생했을 때, 빠르게 상황들을 정리하고 해결 방법들을 제시한다. 그의 빠른 결정들은 수많은 대마법사들(팀의 리더들 또는 중간 관리자들)이 그들의 위치에서 내릴 수 없는 결정들일 때가 많았다. 그렇기에, 모두 Peter가 제시한 해결 방안을 빠르게 쫒아 문제를 해결 할 수 있었다.

난 Peter의 조언데로 더 이상 이 문제에 대해 생각하지 않기로 했다. 그렇게 주말을 푹 쉰 후 월요일 아침 일찍 출근했다. 나는 퀀트 마법사들과 연금술사들과 오전 내내 금요일 있었던 차트 움직임과 봇이 왜 그런 매매를 수행했는지 부검을 하면서 오전을 보냈다. Chris는 아직 출근 전이었다.

오전 11시경 David이 수소문해서 섭외한 DataMage(데이타 마법사)와 AlgoSages(알고리즘 현자들)들이 사무실에 도착했다. 한 둘을 빼고선 그들 대부분 모두 너무 어려보였다. 애띤 얼굴은 20대 초중반 정도로 밖에 보이지 않았다. 우린 그들과 함께 회의실로 이동해 자리에 앉았고, 내가 자리에 앉기도 전, 과거에도 이런 문제를 같이 해결해 본 사람처럼, Peter는 그들에게 오늘부터 바로 일을 시작할 수 있는지 물어봤고, 그들은 가능하다고 대답했다. 그 대답에 Peter는 알겠다면서 먼저 자리에 일어나 자신의 사무실로 돌아갔다. 그때서야 Chris가 회의실로 들어왔다. Chris는 이미 그들 중 몇 명과 친분이 있는 듯 보였다. David은 Chris에게 그들이 사무실에서 상주하면서 일을 할 수 있는 공간으로 1층에 있는 대회의실을 쓰면 어떨까? 하고 물었고 Chris는 날 바라보며 자신을 따라오라는 눈치를 준 후 그들과 함께 자리에서 일어났다.

그들이 1층 대회의실에 들어가 밖에서 안이 보이지 않도록 블라인드를 치고 노트북을 꺼내 일할 준비를 하는 동안, Chris는 내게 지난주 금요일에 벌어진 사건에 대해 물어봤고 우린 그렇게 선체로 한참을 얘기했다.

5147-1024x682.jpg
그들이 어떻게 일하는지 알 수 없었다.

그 때 Peter에게서 전화가 걸려왔다. Peter는 나와 Chris에게 DataMage(데이타 마법사)와 AlgoSages(알고리즘 현자들)에게 이번에 문제가 된 봇 외에도 지금 한참 준비가 끝난 다른 비밀 병기들 모두 최적화 작업을 의뢰하라고 얘길했다.

그들은 그렇게 회의실에 자리를 잡고 무언가를 하기 시작했고, 화장실에 갈 때 빼고는 누구 하나 회의실 밖으로 나오는 사람이 없었다.

몇시간 뒤, 그들 중 리더로 보이는 Jay가 나와 Chris를 찾아왔다. Jay는 내게 현재 봇의 알고리즘들을 직접 수정해서 적용할 수 있는 Configuration 화면을 요구했다. 나는 그걸 열어줘도 되는지 몰라 Chris를 바라봤고, Chris는 별도 설명없이 숫자들만 수정할 수 있게 해당 기능을 추가해주겠다고 Jay에게 대답했다. Jay는 그거면 충분하다면서 대신 숫자들의 단위에 대해서는 별도로 알려달란 얘기를 했다. 나는 무슨 말인지 알아듣고, 알겠다고 대답했다. 맞다. 예를 들면, 어떤 알고리즘의 설정값은 10 단위로 조정이 되지만 어떤건 또 0.1 단위로 조정이 된다. 난 이 얘기를 듣고 그들이 무언가 봇의 세세한 알고리즘들을 변경하면서 테스트를 하겠구나 싶었다.

어렵지 않은 요청이어서 난 봇을 실행 후 직접 알고리즘 설정 값들을 수정할 수 있는 화면을 추가해서 다시 컴파일한 후 그들에게 전달했다.

그리고 다음날 아침부터 거의 수백메가짜리 엑셀 파일들 수십개와 한장짜리 보고서가 올라오기 시작했다.

나는 그 보고서를 봐도 전혀 이해가 안갔다. 그런 날 보면서 Chris가 자세히 설명을 해주었다.

22103-1024x1024.jpg

DataMage(데이타 마법사)와 AlgoSages(알고리즘 현자들)들은 과거 수많은 시점의 엄청난 시장 데이타를 가지고 흔히 우리가 얘기하는 백테스트를 하고 있었다. 문제는 그들이 방대한 과거 시장 데이타와 변동이 컸던 특정 시점들의 데이타를 활용해 봇을 테스트하는데 그치는게 아니라, 수많은 변수들을 하나 하나 조정해가면서 그 모든 시장 데이타에서 봇의 성능 평가를 하고 있다는 점이었다. 특히 시간 왜곡 마법을 펼치자, 봇은 특정 시간대의 마켓 상황을 실제 상황으로 인식하기 시작했다. 이 점이 단순히 과거 시장 데이타에 시그널 등을 맞춰보는 백테스트와 다른 점이었다.

결과를 알고 맞추는건 사실 미래 예측에 전혀 도움이 되지 않는다. – Jay

그렇기에 엄청난 결과 데이타가 매일 매일 쏟아져 나왔다. 봇은 엄청난 속도로 과거 시간 여행을 하는 중이었다. 그들은 그런 데이타들 사이에서 매직 넘버를 열심히 조합하며 찾아가고 있었다.

37446-1024x585.jpg
답이 없는 문제를 푸는 듯 보였다. 그러나 그들은 결국 답을 찾았다.

마치 암호를 푸는 과정처럼 보였다. 그들은 한자리 한자리 매직 넘버를 그렇게 찾아가고 있었다. 그리고 결국 그 주 금요일 밤, DataMage(데이타 마법사)와 AlgoSages(알고리즘 현자들)은 우리 봇의 매직 넘버들을 찾았다.

수많은 경우의 수와 그 각각에 대한 MDR과 수익율 그리고 그 MDR이 얼마나 유지되는지 총거래일수와 그 설정을 위한 매직 넘버로 구성된 엑셀 파일속 쉬트에는 수백개의 조합 결과가 있었다. DataMage가 추천하는 몇가지 조합들에는 하이라잇이 되어 있었다.

Peter는 내게 그 중 가장 MDR이 낮고 유지 기간이 길었던 반면에 수익율은 상대적으로 낮은 미세 조정값 하나와 그 다음 단계의 설정 데이타를 봇에 각각 적용해달라고 요청했다.

Peter는 다시 그들에게 바로 이어서 우리가 준비하고 있는 일반 포렉스 전체 통화쌍 거래를 위한 다른 비밀 병기들과 아직 가설 단계에서 테스트 중인 다른 봇들도 모두 점검을 해달라고 요청했다.

난 그들이 찾아낸 미세 조정된 설정 값들이 적용된 봇을 각각 준비했다. MDR이 깨졌을 땐 봇이 멈추는 기능도 테스트를 마쳤다. 다시 봇을 테스트할 준비가 끝났다.

그리고 10월 2째주부터 우린 다시 봇을 실제 시장에서 운용하기 시작했다.

  • Like 1

아캔락의 연금술사, 투자, 재테크, 경제적 자유, 원칙 등의 주제에 대해 글을 씁니다.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...