양적 개발자 가 되기 위한 자기 연구 계획

저자:선함, 2019-02-12 09:08:19, 업데이트:

최근에는 엔지니어링, 학계 및 IT에서 경력을 바꾸고 싶어하는 개인으로부터 많은 이메일을 받았습니다. 양적 금융은 지적 도전과 높은 보상으로 인해 최근 특히 매력적인 분야가되었습니다. 이러한 이메일에서 끊임없이 발생하는 질문은 "나는 면접대상을 설득하여 취업하도록 설득하려면 무엇을 공부해야합니까?"입니다. 이것은 양적 금융 업계에서 일자리를 얻기 위해 자기 공부 계획을 구성하는 방법에 대해 논의하는 3부 시리즈의 첫 번째입니다. 이 게시물은 양적 개발자가 되기 위해 자기 공부하는 방법에 대해 논의합니다. 나머지 두 가지는 양적 분석가와 양적 거래자에 집중할 것입니다.

양적 금융 분야의 모든 경력은 광범위한 전문화보다는 일반화 정도가 필요합니다. 양적 개발자는 다르지 않습니다. 투자 은행의 가격 및 새로운 구조화된 투자 제품을 판매하는 것을 돕기 위해 거래자, 금융 엔지니어 및 IT 지원 팀에 적합해야합니다. 또는 거래 인프라와 포트폴리오 관리 시스템을 개발하는 데 자금을 지원하십시오.

과학 컴퓨팅

양적 개발에 대한 가장 일반적인 경로는 과학적 컴퓨팅의 학문적 배경을 통해 이루어집니다. 이것은 양적 개발에 필요한 핵심 기술이 고급 프로그래밍 기술과 수치 알고리즘 구현이기 때문입니다. 이러한 기술은 물리 과학 또는 공학을위한 대학원 연구 환경에서 당연하게 개발됩니다. 이것이 귀하의 배경이라면 일반적인 구현 및 프로그래밍 기술이 충분히 발달 될 가능성이 있기 때문에 양적 금융에서 사용되는 특정 제품과 수치 알고리즘을 파악하는 것이 작업입니다.

그러나, 당신의 배경은 과학적 컴퓨팅이 아니라면, 프로그래밍의 배경을 활용하여 양적 개발자가 될 수있는 기회가 여전히 많습니다. 적어도 알고리즘을 구현하는 것에 익숙해져야합니다. 그 연습은 아래에 논의 할 것입니다.

프로그래밍 기술

우선 양적 개발자는 소프트웨어 개발자입니다. 따라서 역할은 거의 전적으로 100% 프로그래밍에 기반을 둔 것입니다. 당신은 거래 프로토타입을 최적화하거나 처음부터 거래 인프라를 개발하는 것을 발견 할 것입니다. 만약 당신이 은행 역할을 목표로 한다면, 당신은 아마도 마이크로소프트 / 윈도우 환경에서 C ++, Java 또는 C #를 사용해야 할 것입니다. 만약 당신이 헤지 펀드를 목표로 한다면, 당신은 아마도 MatLab 또는 R를 C ++ 및 / 또는 파이썬으로 번역 할 것입니다. 자금은 종종 C ++와 파이썬이 더 의미가있는 UNIX 환경에서 Java와 C #를 덜 사용하는 경향이 있습니다.

당신이 유능한 프로그래머라고 가정하고 금융 산업에서 가장 널리 사용되는 소프트웨어로 변경하는 것을 기쁘게한다면, C ++와 파이썬을 매우 잘 배우는 것을 제안합니다. 이는 산업의 다른 분야에 걸쳐 가장 횡단 단위 능력을 제공합니다.

앤드류 코니그의 가속 C++ 전체를 읽으십시오. 이 책은 C++ 문법을 처음부터 배울 수 있도록 도와줍니다. 특히 포인터와 메모리 관리에 대해 자세히 설명합니다. 이것은 많은 프로그래머 (자바와 C# 배경을 가진 사람들을 포함하여) 가 익숙하지 않은 영역입니다. 문법을 연습하기 위해 마이크로소프트 비주얼 스튜디오 또는 리눅스 / UNIX에서 GCC 컴파일러로 예를 구현하는 동안 읽는 것이 가장 좋습니다. 스콧 마이어스의 효과적 C++ 전체 (다중!) 를 읽으십시오. 나는이 조언을 사이트에서 지속적으로 반복했지만 여전히 다시 말해야합니다. 이 책은 초보자 C++ 프로그래머에서 인터뷰에 준비된 중간 프로그래머로 데려 갈 것입니다. 마이어스가 복잡한 예제를 설정하기 때문에이 책은 터미널 앞에 실제로 연습하기가 어렵습니다. 이 책을 실행하는 한 가지 방법은 자신의 프로젝트에서 패턴을 적용 할 수있는 곳을 결정하는 것입니다. C++ 직장에 직접 지원하는 경우, 당신은 아마도 이 두 가지 작업을 넘어 가고 싶어 할 것입니다. 스콧 마이어스는 또한 더 효과적인 C++ 및 효과적인 STL를 썼다. 당신은 Boost 라이브러리, 멀티 스레드 프로그래밍 및 리눅스 운영 체제 기초를 고려해야 진정한 전문가가 될 것입니다. 파이썬에서도 마찬가지입니다.

이미 숙련된 C++/Java/C# 프로그래머라면, 마크 루츠의 Learning Python의 특정 섹션을 읽으십시오. 특히, 타입으로 구축된 파이썬에 대해 논의하는 4-9 장을 살펴보십시오. 10-13 장은 파이썬의 가지와 루핑의 문법을 논의하므로 문법을 결정하기 위해 가볍게 읽을 수도 있습니다. 그러나, 반복/지식 및 고급 함수 사용과 같은 파이썬의 특정 기능에 대해 논의하는 14-20 장에 상당한 시간을 보내는 것이 좋습니다. 5 및 6 장은 네임스페이싱과 객체 지향 프로그래밍을 다루고, 이러한 개념들이 파이썬에서 C++/Java와 같은 언어와 어떻게 다르는지에 대해 설명합니다. 좋은 중간 파이썬 프로그래머가 되고 싶다면, 책의 나머지 장도 고려해야 합니다. 이 책이 1,000 페이지 이상 길어지는 것을 기억하십시오. 따라서 당신은 당신의 배경에 적합한 섹션을 선택하고 선택해야 합니다. 마크 루츠의 두 번째 책, 프로그래밍 파이썬, 실제로 파이썬 내에서 응용 프로그램을 구축하는 것입니다. 이것은 첫 번째에서 얻은 문법 지식을 모두 가지고 강력한 응용 프로그램을 구축하기 시작할 수 있습니다. 이것은 당신이 훨씬 더 나은 파이썬 소프트웨어 엔지니어가 될 수 있습니다. 산업의 양적 거래 측면에 확실히 관심이있는 사람들에게는 파이썬 내에서 데이터 분석을 수행하는 방법을 배우는 것이 필요합니다. 이것은 대학원에서 종종 선택되는 기술입니다. 그러나 웨스 맥키니의 데이터 분석을위한 파이썬은 SciPy와 판다와 같은 최신 라이브러리 중 일부를 잘 다루고 있습니다. 위의 계획을 따랐을 때 당신은 어떤 C ++ 또는 파이썬 면접에도 좋은 기회를 가질 수 있습니다. 그러나 개발자 기술을 강화하기 위해서는 소프트웨어 엔지니어링의 최근 혁신에 대해 알아야합니다.

소프트웨어 공학

양자 개발자 직위에 대한 좋은 인터뷰 후보가 되려면 좋은 프로그래머와 좋은 소프트웨어 개발자가 될 필요가 있습니다. 많은 사람들이 교과서와 연습에서 전자를 배울 수 있습니다. 그러나 후자는 일반적으로 다른 개발자들과 함께 더 큰 소프트웨어 프로젝트에 일하면서만 배울 수 있습니다. 그러나 이것은 가정 연구 프로그램에 포함될 수 없다는 것을 의미하지 않습니다! 예를 들어, 이제는 인터넷을 통해 오픈 소스 소프트웨어 프로젝트에 기여하는 것이 쉽습니다. 가장 큰 양자 금융 프로젝트 중 하나는

퀀트 리브

이 프로젝트의 소스 코드를 읽으면 대규모 C++ 소프트웨어 프로젝트가 어떻게 작성되는지 잘 알 수 있습니다.

좋은 소프트웨어 개발자가 되기 위해서는 대규모 소프트웨어 프로젝트를 만드는 방법을 이해하는 것이 필요합니다. 현대 소프트웨어 개발을 위해서는 버전 제어, 지속적인 통합 및 기타 민첩한 방법을 사용해야합니다.

스티브 맥코넬의 코드 완전과 로버트 마틴의 클린 코드를 모두 읽으십시오. 이 두 책은 두 가지 원칙에서 소프트웨어를 설계하는 방법에 대해 진지하게 재고하도록 만들 것입니다. 예를 들어 - 키보드를 만지기 전에 소프트웨어를 설계하는 데 얼마나 많은 시간을 소비합니까? 이 두 책은 낭비 된 코드 개발 시간을 절약 할 것입니다. 나쁜 습관을 제거하기 위해 가능한 한 빨리이 책 내의 팁을 프로젝트에 적용하는 것을 제안합니다. 그들은 또한 인터뷰에서 논의하는 것이 좋습니다. 좋은 소프트웨어 공예에 대한 논의는 디자인 패턴을 언급하지 않고는 완성되지 않을 것입니다. 이 책은 C++와 같은 언어에 매우 관련이 있지만 파이썬과 같은 스크립트 언어에 대해서는 덜 관련이 있습니다. 당신은 아마도 코드에서 유사한 디자인을 사용하고 있음을 알게 될 것입니다. 이 책은 언제 어디서 적용해야하는지 결정하는 데 도움이됩니다. 다른 좋은 개발자가 그들을 인식한다는 것이 한 가지 장점입니다. 개발 동료 그룹에서 더 인기가 있습니다. 자율 학습을 위해 상당히 어려운 책입니다. 그래서 가장 자주 사용되는 공장, 장식자 또는 싱글턴과 같은 2-3 가지 디자인을 선택하고 거기에서 작업을 수행하십시오. 여러 팀원들과 대규모 소프트웨어 프로젝트를 진행할 때 버전 제어 소프트웨어를 사용하는 것은 절대적인 필요성이다. 자동 개정, 롤백, 브랜칭/메이징 및 더 나은 테스트 기능은 버전 제어가 거의 모든 (좋은) 소프트웨어 기관에서 보편적이라는 것을 의미합니다. 두 개의 큰 경쟁자는 Git과 Subversion (SVN) 이다. SVN이 비슷하기 때문에 (하지만 조금 더 사용하기 어렵다면!) 일부 산업은 현재 완전 자동화된 테스트 및 배포 시스템을 통해 코드를 지속적으로 테스트하고 배포하도록 권장하는 지속적인 통합 관행으로 돌리고 있습니다. CI 시스템이 어떻게 작동하는지 대부분 직장에서 파악 할 수 있지만, 폴 두발의 연속 통합과 같은 책을 통해 작업함으로써 주제에 대한 지식을 입증함으로써 면접자에게 인상을 주기를 원할 수 있습니다. 데이터베이스 상호 작용

훌륭한 프로그래머와 훌륭한 소프트웨어 개발자가 되는 것은 면접 직위를 얻기 위한 전제 조건이지만, 데이터 저장 및 분석과 관련된 문제도 요구될 것입니다. 양자 개발자의 일상 생활의 핵심 요소 중 하나는 데이터베이스와의 상호 작용입니다. 따라서 데이터베이스 처리와 관련된 어느 정도의 성숙도를 기대할 수 있습니다. 데이터 저장 시스템을 사용해 본 적이 없는 경우, 가장 좋은 방법은 관계 데이터베이스 관리 시스템 (RDBMS) 과 그 언어 - 구조화된 질의 언어 (SQL) 를 이해하기 시작하는 것입니다. 일반적인 RDBMS에는 Microsoft SQL 서버, 오라클 및 MySQL이 포함됩니다. 다른 유형의 데이터 저장 시스템에는 10s MongoDB와 캐산드라를 포함한 NoSQL 데이터 저장소라고 불리는 것이 포함됩니다.

RDBMS에 대해 배우기 시작하는 가장 좋은 방법은 오픈 소스 버전을 설치하는 것입니다 (당신은 무료로 다운로드 할 수 있기 때문에!) 그리고 아래의 읽기 목록을 따르십시오. RDBMS를 설치하는 방법을 가르치는 것은 이 문서의 범위를 초월하지만 헤지 펀드 내에서 매우 일반적인 데이터베이스이기 때문에 MySQL을 시도 할 수 있습니다. SQL 서버와 오라클은 은행 내에서 널리 퍼져 있습니다. MySQL과 같은 데이터베이스를 설치 한 후에는 다음 가이드를 사용하여 데이터의 저장 및 접근을 이해하는 데 도움이됩니다.

SQL에 익숙하지 않은 경우, Alan Beaulieu의 OReilly 책 Learning SQL은 훌륭한 시작입니다. 그것은 데이터를 저장, 액세스 및 보고서를 제공하기 위해 알아야 할 모든 초보 및 중간 SQL을 다루고 있습니다. 그것은 또한 데이터베이스 최적화를 간략하게 논의합니다. 모든 자료가 일상 양적 데이터베이스 개발 업무에 관련이 있기 때문에 전체 책을 읽었는지 확인하십시오. 특정 데이터베이스 작업에 대해서는 OReilly SQL 요리책을 살펴보고 싶습니다. 나는 특정 날짜 / 시간 또는 보고서 질의를 검색하기 위해 지속적으로 선반에서 꺼내기 때문에이 책을 믿을 수 없을 정도로 유용하게 생각했습니다. 이것을 덮어 덮어 읽을 필요가 없지만, 확실히 내용의 개요와 자료를 찾는 것이 유용합니다. 퀀트 개발자는 종종 데이터베이스 관리자가 아니지만, 고급 MySQL 최적화에 대해 더 많은 것을 배우고 싶다면, 다음 두 권의 책은 확실히 필요하지 않지만 데이터베이스 문제에 직면하는 경우 매우 유용합니다. 금융 및 수치 알고리즘

양적 개발자는 금융 시장에서 일하기 때문에 은행이 생산하는 제품이나 자금이 거래하는 도구에 대해 상대적으로 잘 이해하는 것이 유용합니다. 따라서 주식, 외환, 고정 소득, 재화 및 관련 파생물 시장에 대해 (대밀하게) 익숙해질 필요가 있습니다. 특히 양적 개발자의 작업의 큰 부분이 금융 데이터의 저장 및 액세스를 제공하는 것이기 때문에 이러한 데이터가 어떻게 표현되고 저장되고 액세스되는지에 대해 지속적으로 생각하고 싶습니다. 직장에 들어가면 거의 특정 영역에 깊이 집중 할 것입니다. 따라서 초기 연구가 매우 광범위하다는 것을 확인하십시오.

더 관련성은 양적 금융에서 사용되는 알고리즘입니다. 도구 가격 결정과 알고리즘 거래를 수행하기 위해. 투자 은행 파생 상품 가격 결정 기술은 거의 확실하게 몬테 카를로 방법과 유한 차이 방법, 둘 다 확률, 통계, 수치 분석 및 부분 미분 방정식의 지식에 의존하는 데 집중합니다. 이것들은 좋은 학생이 대학원에서 익숙해질 모든 주제입니다. 그러나 경력 변경을 고려하는 사람들에게 은행에서 양적 옵션 가격 결정 개발자가되고 싶다면 이러한 방법을 잘 이해해야합니다.

헤지 펀드에서는 낮은 주파수 또는 높은 주파수에서 거래 인프라를 구현할 수 있습니다. 이것은 이미 MatLab, R 또는 Python (또는 C ++) 에서 코딩 된 알고리즘을 가져다가 C ++와 같은 더 빠른 언어로 최적화하고 이 알고리즘을 주요 중개 애플리케이션 프로그래밍 인터페이스 (API) 와 연결하고 거래를 실행하는 것을 포함합니다. 여기서 필요한 기술은 상당히 다릅니다. 다양한 소스에서 데이터를 모으고 올바른 맥락에 넣고 빠르게 반복하여 고정 형식 (PDF), 웹을 통해 또는 API 자체로 주문 보고서를 생성해야합니다. 이러한 기술은 책에서 직접 배우는 것이 어렵고 기술 산업에서 몇 년의 소프트웨어 개발 경험을 필요로합니다.

이 주제에 대해 더 자세히 읽으려면 C++ 구현 기사, 파이썬 구현 기사 및 양적 금융 읽기 목록을 참조하십시오.

취업 신청

위의 목록은 공부할 수 있는 방대한 자료처럼 보이지만, 이것은 프로그래밍에 완전히 새로운 사람에게만 적용될 것이다. 양적 개발자 직위가 그러한 개인에게 적합할 가능성은 거의 없으며, 나는 당신의 배경이 프로그래밍이나 물리 과학에 있을 것이라고 가정한다. 그렇지 않으면 당신은 쉽게 위의 자료를 배우는 데 몇 년의 여가 시간을 보낼 수 있기 때문에 자신의 상황에 관련 있다고 생각하는 섹션만을 읽는 것을 확인하십시오.

당신이 인터뷰에 준비되어 있다고 생각하면 양적 채용자와 연락하는 과정을 시작해야합니다. 투자 은행과 헤지 펀드를 다루는 전문 회사들이 있습니다. 특정 이름이 필요한 경우,mike@quantstart.com그리고 저는 기꺼이 당신을 올바른 방향으로 안내할 것입니다.

어떤 좋은 채용사는 면접에 추천할 때 자신의 명성을 걸고 있기 때문에 당신의 배경에 대해 합리적인 수준의 세부 사항을 논의할 것입니다. 채용사는 일반적으로 양적 기술의 기술에 대해 잘 알지 못하며 그렇게 할 필요가 없습니다. 그러나 이것은 자신의 CV / 자기소개서를 필터링하기 위해 Buzzword 일치?? 에 더 의존해야한다는 것을 의미합니다. 당신이 C ++를 잘 알고 있다면 C ++ 기술을 - strong을 명시하고 예를 들어 STL, Boost 및 당신이 작업 한 모든 C ++ 프로젝트를 참조하십시오. 당신의 기술에 대해 겸손하지 말고 또한 과장하지 마십시오. 당신이 CV / 자기소개서에 무언가를 작성하면 기술 면접에서 그것에 대해 묻히는 것이 공평합니다!

2013년 취업 시장이 현재 (특히 입시 수준) 가장 좋지 않기 때문에, 당신이 찾고 있는 직장을 얻는 데 시간이 걸릴 수 있습니다. 속임수는 당신이 참석하는 각 면접에 참여하는 것처럼 계속 시도하는 것입니다. 당신은 채용자와 면접자가 찾고있는 것에 대해 더 많은 지식을 얻을 것입니다. 그래서 당신은 그것에 맞춰 당신의 연구를 할 수 있습니다.


더 많은