아는 건 없는데 주저리주저리 무언가 쓰기는 열심히 쓰는 듯....
궁금해 하는 분이 계시길래 그냥 제가 아는 수준에서 말씀드립니다.
금융과 프로그래밍….
혹자는 금융이 금융공학만 있는 것이 아닌데
프로그래밍이 필수일 필요가 있냐고 합니다.
필수전공이어야 하는지는 제가 답할 수 있는 부분이 아닐테고…
업무에서는 기본적인 수준까지는 필수가 되어 가고 있습니다.
물론 어느 일을 하느냐에 따라 달라지기는 하겠지만…
Quant가 아니어도
간단한 프로그래밍을 할 일은 있습니다.
예를 들면,
CDO 분석을 생각해 봅시다.
실제로 투자자에 따라
(1) 전체 보고서를 IB 브로커에 요청하는 사람,
(2) 브로커가 준 자료를 편집하는 수준의 보고서를 만드는 사람
(3) 민감도 분석자료를 추가로 요청하는 사람
(4) 직접 Cash flow 모델을 다시 만들고 민감도 분석을 수행하는 사람
(5) 직접 Cash flow 모델을 다시 만들고 simulation test를 하는 사람
등이 있습니다.
저마다 그렇게하는 논리는 있습니다.
(1)으로 갈수록 브로커를 믿어야 한다,
안그래도 할일이 많은데 굳이 IB에서 수행한 일을 반복할 필요가 있느냐
라고 합니다.
하지만 default event가 일정하게 발생되는게 아니기에
궁극적으로는 simulation으로 가야 합니다.
지금까지 대부분의 사람들이 외면해왔던 건
민감도 분석까지는 엑셀에서 가능하지만
Simulation을 위해서는 programming이 수반되어야 합니다만
기존 금융인력 중 프로그래밍이 가능한 사람이 많지 않았기 때문입니다.
하지만 알아두어야 할 건..
별도 학교나 학원을 다니지는 않더라도
지금도 현업에서 관심을 갖고 공부하고 있는 사람은 많다는 것입니다.
만드는 입장이 아니라 투자자 입장에서 CDO 분석시에는
그렇게 고난이도의 프로그래밍을 필요로 하지는 않습니다.
많이 알수록 좋은 건 당연하겠지만…
제 경우를 예를 들면,
CDO분석시 대부분의 작업은 엑셀에서 수행합니다.
엑셀에서 캐쉬플로우 추정모델을 만들면 좋은 이유는
필요한 raw data를 다른 sheet에 두고 얼마든 참조할 수 있으며,
여러 tranche에서 수행되는 복잡한 test를 반영하려면
Check를 해야 하기 때문입니다.
프로그래밍을 아주 잘하면 직접 프로그래밍을 하는게 편할 수도 있겠지만…
그러나 cash flow 추정 모델을 엑셀에서 만들었어도
시뮬레이션을 하기 위해서는 무언가 필요합니다.
저는 VBA를 사용합니다.
말이 VBA이지 Macro 수준이지만….
Fund 분석의 경우
매니저에 대한 정성적 분석이 큰 영향을 미치게 되지만…
역시 펀드편입 자산 guide line과 매니저의 과거 실적을 이용해
simulation을 돌립니다.
별도의 tranche가 없고 여러가지 test 등이 없어서
CDO보다는 simulation을 돌리기 쉽습니다.
엑셀과 VBA를 이용하기도 하지만,
Matlab에서 돌리기도 어렵지 않습니다.
파생결합상품으로 넘어가면…
파생결합상품 쪽에서 다시 말씀드리겠지만…
Closed form으로 분석 가능한 투자안은 거의 없습니다.
사람에 따라서는 잘 분해하면 가능하다고 주장하기도 합니다만…
제가 보기에는 그렇게 나눠질 만한 상품은 없다고 봅니다.
대부분은 binominal tree나 simulation을 이용합니다.
Simulation. 당연히 프로그래밍이 뒷받침되어야 합니다.
Binominal tree를 엑셀에서 구현하려면,
256개 이상의 node를 만들 수 없다는 단점이 있습니다.
아니, 그 이상을 만들 수 있다손 치더라도 만드는 건 참 힘든 일입니다.
기본적으로 참조되는 인덱스의 tree를 만들고,
Coupon의 tree를 만들고,
파생결합상품의 tree를 만들어야 하니…
엄청난 노가다입니다.
거기다…
상당수의 파생결합상품은 두 개 이상의 인데스를 참조합니다.
결국은 프로그래밍이 필요하게 됩니다.
그렇지만…
필요성을 인정하더라도… 질문할 수 있을 겁니다.
필요하더라도 프로그래밍을 꼭 직접할 필요가 있느냐?
전산인력의 도움을 받으면 되지 않냐?
대부분의 기관에서는 그런 일을 위한 전산인력을 별도로 두지는 않고 있습니다.
제가 알던 한 분은 프로그래밍을 잘 아는 주니어를 밑에 두고
그 사람한테 그런 일을 시키기도 했습니다만…
이제는 그렇게 할 수 있는 건 옛날 일이 되어 버리지 않았나 싶습니다.
또한 시킬 수 있더라도
주니어급이 잘 짰는지 볼수 있는 능력은 있어야지
프로그래밍에 대해 까막눈이면… 안됩니다.
설령 전산인력을 두고 있다고 해도…
전산출신 분이나, 아니면 전산개발을 해보신 분들은 느끼실 겁니다.
현업과 전산개발자와 이야기를 하다보면
통역관이 필요하다는 생각이 들 때가 많습니다.
누가 잘못해서가 아니라…
한쪽은 금융만 알고 한쪽은 전산만 알기에 발생하는 당연한 일입니다.
그러기에 전문 개발 회사에서는
현업과 전산을 직접 개발하는 사람들 사이에
Consultant가 존재하는게 아닐까 생각됩니다.
그럼 또 다른 질문이 있겠죠?
뭘 직접 프로그래밍을 하느냐?
전문 개발 회사를 이용하거나 시스템을 도입하면 되지 않느냐?
일단 그러려면 어떤 시스템을 도입하느냐는 문제가 있습니다.
백오피스나 미들오피스 쪽은 비교적 전산도입이 수월합니다만
프론트쪽은 여러가지 문제가 있습니다.
우선 비용문제입니다.
저렴한 시스템은 신상품이 나올 경우 실질적으로 업그레이드가 불가능합니다.
그렇다고 비싼 시스템은 도입비용이나 유지비를 생각하면
대형 금융회사 몇군데를 제외하면
도입하느니 차라리 그런 류의 투자안을 투자하지 않는게 효율적입니다.
그리고 비싼 시스템도 결국은 업그레이드 시기가 문제가 됩니다.
모두다 업그레이드를 할 수는 없고,
업그레이들 하더라도 시간이 걸립니다.
그외 직접 해보는 것이 상품 구조를 이해하는데 도움이 됩니다.
투자자들이 도입하는 시스템은 새로운 투자안이 나온 후
업그레이드 들어가니 그만큼 시간갭이 어쩔 수 없습니다.
IB에서는 새로운 상품을 만들기 위해서 자체 시스템을 동시에 업그레이드 한다고 합니다.
시스템 업그레이드 자체가 문제되지는 않습니다.
그럼에도 그들은 직접 엑셀에서 계산을 합니다.
그 이유는 직접 만들어봐야 상품 구조를 이해할 수 있고,
편하다고 직접 안해보면 나중에는 바보가 되기 때문이랍니다.
제게 직접 말하지는 않았지만
다른 경로를 통해 들은
또 하나의 이유는 IB는 대부분 자체 모델을 쓰지만,
IB사람들은 더 좋은 조건을 찾아 언제든 떠날 준비를 해야 하기 때문이죠.
자신이 몸담고 있는 회사의 시스템에 종속되면…
나중에 다른 곳으로 옮길 수 없으니….
참고로…
여기서 말하는 엑셀은 무늬만 엑셀입니다.
말을 들을 때는 엑셀과 VBA에서 해결한다고 생각했는데…
지금 생각해 보면 실제 돌아가는 엔진은 C등을 이용했던 것 같습니다.
도대체 어떤 프로그래밍을 알아야 하는가?
엑셀과 VBA는 기본입니다.
엑셀에서 더 편한 부분도 있고, 엑셀과 엑셀VBA는 궁합이 잘 맞습니다.
혹자는 엑셀과 VBA의 기능을 100% 활용해도 프로그래밍이 필요없다고 합니다.
프로그래밍의 구조는 잘은 모르지만....
일단 속도와 관련해서는 아니까 한마디...
조금만 복잡해 지면…
바로 엑셀+VBA의 한계가 느껴집니다.
엑셀과 VBA를 이용해
적게는 10,000번, 많게는 100,000번 이상의 시뮬레이션을 돌려야 하는데…
엄청난 시간이 걸리게 됩니다.
매트랩의 장점은 매트릭스 기반이라는 점입니다.
매트릭스를 활용하면 작업이 많이 단순해 지고,
시뮬레이션도 훨씬 빠르게 됩니다.
아주 간단한 예를 들어
평균 부도율 0%, 0.5%, 1%, 1.5%, 2%인 경우
각각 10,000번씩 시뮬레이션을 돌리려 한다고 치면,
VBA에서는
각각의 경우 case를 바꿔가며 10,000번씩 돌려 50,000번을 돌려야 합니다.
그러나 매트랩에서는 부도율 변수만 더 추가해서
10,000번만 돌리면 한꺼번에 결과를 계산해 낼 수 있습니다.
PC가 사양이 딸리다 보니 개인적으로 가장 맘에 드는 건…
매트랩에서는 시뮬레이션 돌리면서 다른 작업도 가능하다는 점입니다.
C의 필요성은?
일단 사람마다 의견이 다릅니다.
VBA만 알면 된다는 사람, VBA와 Matlab만 알면 된다는 사람,
VBA와 Matlab 뿐만 아니라 C도 알아야 된다는 사람….
제가 C는 전혀 사용해 보지 않아서…
뭐라 말하기 어렵지만…
일단 Quant를 염두해 두는 분들에게는… 필수라고 생각합니다.
IB에서는 고객에게 대부분 pdf 자료만 제공합니다만,
간혹 직접 프라이싱 해보라면 엑셀자료를 주기도 합니다.
VBA에서 돌아가지만, VBA코드는 암호로 막아놓은 상태입니다.
그런데 좀더 복잡해 지면…
거기다 파일 몇 개를 더 주고 엑셀화일과 같은 폴더에 놓으라고 합니다.
모르는 사람이 보면, 그냥 한 무리의 엑셀화일이지만
사실 같이 깔라고 한 건 C로 만든 dll 파일이고 실질적인 엔진인 경우가 많습니다.
아직 국내에서는 매트랩 파일(m 화일)을 주는 곳을 못봤습니다만…
해외에서는 m 파일을 주기도 한다고 합니다.
매트랩의 m파일은 공개를 기반으로 하고 있습니다.
그러다 보니…
무늬는 매트랩이지만…
숨기고 싶은 부분이 많다보니
정작 m파일에는 별 내용없고, 실제 돌아가는 건 역시 C인 경우가 많다고 합니다.
비단 고객에게 줄 때 숨기기 위해서 뿐만 아니라…
직접 개발할 때도…
데이터 직접 핸들링을 할 때는 엑셀,
매트릭스가 필요한 부분은 매트랩,
그리고 핵심부분은 C로 만들고 있는 것 같습니다.
서로 엮어서 부르고 돌리는게 가능하기 때문에…
저야 그렇게까지 사용할 줄 모르지만…
매트랩에서 C를 불러올 수도 있고,
매트랩 파일을 엑셀의 함수로 만들 수 있다고 하더군요.
대체가 아닌 보완의 관계이고,
다른 사람들이 볼때는 엑셀만 쓴다고 생각하지만
알고 보면 매트랩과 C를 모두 활용해서 작동된다고 합니다.
이런저런 이야기들을 많이 썼지만 결론은 다음과 같이 요약 되겠네요.
(1) 무엇을 하든 기본적으로 VBA는 알아야 한다.
(2) VBA, Matlab, C 모두 알면 좋다. (당연한 말….)
(3) 모두가 거기까지 알 필요는 없겠지만… Quant를 생각한다면 C는 알면 좋은게 아니라 필수에 가깝다.