Tôi gần đây đã nhận được nhiều email từ những cá nhân muốn thay đổi nghề nghiệp từ kỹ thuật, học thuật và CNTT. Tài chính định lượng đã trở thành một lĩnh vực đặc biệt hấp dẫn gần đây do thách thức trí tuệ và lương cao. Một câu hỏi liên tục xuất hiện trong các email này là
Bất kỳ sự nghiệp nào trong tài chính định lượng đều đòi hỏi một mức độ khái quát hóa hơn là chuyên môn hóa rộng rãi. Các nhà phát triển định lượng cũng không khác. Họ phải phù hợp với một nhóm các nhà giao dịch, kỹ sư tài chính và hỗ trợ CNTT để giúp các ngân hàng đầu tư định giá và bán các sản phẩm đầu tư có cấu trúc mới hoặc giúp các quỹ phát triển cơ sở hạ tầng giao dịch và hệ thống quản lý danh mục đầu tư.
Máy tính khoa học
Cách phổ biến nhất để phát triển định lượng là thông qua một nền tảng học thuật trong máy tính khoa học. Điều này là bởi vì các kỹ năng cốt lõi cần thiết cho một
Tuy nhiên, nếu nền tảng của bạn không phải là máy tính khoa học, vẫn còn nhiều cơ hội để trở thành một nhà phát triển định lượng tận dụng nền tảng lập trình.
Kỹ năng lập trình
Đầu tiên và quan trọng nhất, một nhà phát triển định lượng là một nhà phát triển phần mềm. Do đó, vai trò này sẽ gần như hoàn toàn dựa trên lập trình 100%. Bạn sẽ thấy mình tối ưu hóa các nguyên mẫu giao dịch hoặc phát triển cơ sở hạ tầng giao dịch từ đầu. Nếu bạn nhắm mục tiêu các vai trò ngân hàng, thì có thể bạn sẽ cần phải sử dụng C ++, Java hoặc C # trong môi trường Microsoft / Windows. Nếu bạn nhắm mục tiêu các quỹ phòng hộ, thì có thể bạn sẽ dịch MatLab hoặc R sang C ++ và / hoặc Python. Các quỹ có xu hướng sử dụng Java và C # ít hơn, vì chúng thường ở trong môi trường UNIX nơi C ++ và Python có ý nghĩa hơn. Nếu bạn có nền tảng trong một trong hai môi trường lập trình này, có ý nghĩa để xác định điểm mạnh của bạn và gắn bó với phần mềm bạn biết rõ. Vì vậy, nếu bạn biết Java, ví dụ, sẽ khôn ngoan nếu bạn nhắm mục tiêu các vai trò ngân hàng đầu tư. Tôi đã viết một bài báo về các ngôn ngữ lập trình định lượng nếu bạn muốn chi tiết hơn.
Giả sử bạn là một lập trình viên có năng lực và hạnh phúc thay đổi sang phần mềm được sử dụng rộng rãi nhất trong ngành tài chính, thì tôi sẽ đề nghị học C ++ và Python cực kỳ tốt, vì điều đó mang lại cho bạn khả năng cắt ngang nhất trên các lĩnh vực khác nhau của ngành công nghiệp.
Đọc toàn bộ Accelerated C++ của Andrew Koenig. Cuốn sách này sẽ giúp bạn bắt đầu từ đầu về cú pháp C++ và, đặc biệt, sẽ đi sâu vào chi tiết về trỏ và quản lý bộ nhớ. Đây là một lĩnh vực mà nhiều lập trình viên (bao gồm cả những người có nền tảng Java và C#) sẽ không quen thuộc. Tốt nhất là đọc qua trong khi thực hiện các ví dụ, hoặc với Microsoft Visual Studio hoặc trình biên dịch GCC trên Linux / UNIX, để thực hành cú pháp, thay vì chỉ đọc nó! Đọc qua (nhiều lần!) toàn bộ hiệu quả C ++ của Scott Meyers. Tôi đã lặp lại lời khuyên này liên tục trên toàn trang web, nhưng nó vẫn phải nói lại. Cuốn sách này sẽ đưa bạn từ một lập trình viên C ++ mới bắt đầu đến một lập trình viên trung gian đã sẵn sàng cho cuộc phỏng vấn. Cuốn sách này thực sự khó thực hành trước thiết bị đầu cuối, vì Meyers thiết lập một số ví dụ phức tạp. Một cách để chạy qua cuốn sách này là xác định nơi trong các dự án của riêng bạn bạn có thể áp dụng các mẫu. Nếu bạn đang nộp đơn trực tiếp cho các công việc C ++, bạn có thể muốn vượt ra ngoài hai công việc này. Scott Meyers cũng đã viết More Effective C ++ và Effective STL. Sau đó bạn sẽ cần phải xem xét thư viện Boost, lập trình đa luồng và các nguyên tắc cơ bản của hệ điều hành Linux để trở thành một chuyên gia thực sự. Tương tự với Python:
Nếu bạn đã là một lập trình viên C ++ / Java / C # có kỹ năng, thì hãy đọc qua một số phần của Học Python của Mark Lutz. Đặc biệt, hãy xem qua các chương 4-9, thảo luận về Python
Kỹ thuật phần mềm
Để trở thành một ứng viên phỏng vấn tốt cho vị trí nhà phát triển lượng tử đòi hỏi bạn phải trở thành một lập trình viên tốt và một nhà phát triển phần mềm tốt. Nhiều người có thể học cái đầu tiên từ sách giáo khoa và thực hành. Tuy nhiên, cái sau chỉ có thể được học từ việc làm việc trên các dự án phần mềm lớn hơn, thường là với các nhà phát triển khác. Tuy nhiên, điều này không có nghĩa là nó không thể được kết hợp vào một chương trình học tập tại nhà! Ví dụ, bây giờ rất dễ dàng đóng góp vào các dự án phần mềm nguồn mở thông qua internet.
QuantLib
Đọc qua (một số) mã nguồn cho dự án này sẽ cho bạn một ý tưởng tốt về cách viết các dự án phần mềm C ++ quy mô lớn.
Để trở thành một nhà phát triển phần mềm tốt, bạn cần phải hiểu làm thế nào để tạo ra các dự án phần mềm quy mô lớn. Đối với phát triển phần mềm hiện đại, điều này đòi hỏi sử dụng kiểm soát phiên bản, tích hợp liên tục và các thực tiễn nhanh nhẹn khác. Dưới đây là một kế hoạch nghiên cứu để giúp bạn nắm bắt các khái niệm này:
Đọc qua cả Steve McConnell's Code Complete và Robert Martin's Clean Code. Cả hai cuốn sách này sẽ khiến bạn phải suy nghĩ lại nghiêm túc về cách bạn thiết kế phần mềm, từ các nguyên tắc ban đầu. Ví dụ - bạn dành bao nhiêu thời gian để thiết kế phần mềm trước khi chạm vào bàn phím? Cả hai cuốn sách này sẽ giúp bạn tiết kiệm nhiều giờ phát triển mã lãng phí. Tôi khuyên bạn nên áp dụng càng nhiều mẹo trong các cuốn sách này cho các dự án của mình càng sớm càng tốt để loại bỏ bất kỳ thói quen xấu nào. Chúng cũng rất tốt để thảo luận tại cuộc phỏng vấn, vì bạn sẽ luôn được yêu cầu viết một số mã.
Một cuộc thảo luận về kỹ thuật phần mềm tốt sẽ không hoàn chỉnh nếu không đề cập đến Design Patterns, còn được gọi là cuốn sách
Mặc dù trở thành một lập trình viên xuất sắc và một nhà phát triển phần mềm xuất sắc là những điều kiện tiên quyết để có được một vị trí phỏng vấn, bạn cũng sẽ được hỏi các vấn đề liên quan đến lưu trữ và phân tích dữ liệu. Một trong những thành phần quan trọng trong cuộc sống hàng ngày của một nhà phát triển lượng tử là tương tác với cơ sở dữ liệu. Do đó, một mức độ trưởng thành nhất định với việc xử lý cơ sở dữ liệu được mong đợi. Nếu bạn chưa bao giờ sử dụng một hệ thống lưu trữ dữ liệu, thì cách tốt nhất để bắt đầu là bắt đầu hiểu Hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS) và ngôn ngữ của họ - Ngôn ngữ truy vấn cấu trúc (SQL).
Cách tốt nhất để bắt đầu tìm hiểu về RDBMS là cài đặt một phiên bản nguồn mở (vì bạn có thể tải xuống miễn phí!) và làm theo danh sách đọc bên dưới. Nó vượt ra ngoài phạm vi của bài viết này để dạy bạn cách cài đặt RDBMS, nhưng bạn có thể thử MySQL, vì đây là một cơ sở dữ liệu rất phổ biến trong các quỹ phòng hộ. SQL Server và Oracle có nhiều khả năng phổ biến trong ngân hàng. Một khi bạn đã cài đặt một cơ sở dữ liệu như MySQL, hãy sử dụng các hướng dẫn sau đây để giúp bạn hiểu lưu trữ và truy cập dữ liệu:
Nếu bạn không quen thuộc với SQL thì cuốn sách O
Vì một nhà phát triển định lượng làm việc trong thị trường tài chính, nó hữu ích để có một sự hiểu biết tương đối tốt về các sản phẩm mà các ngân hàng sản xuất hoặc các công cụ mà các quỹ sẽ được giao dịch. Do đó, bạn sẽ cần phải làm quen với chính mình (khá rộng) với chứng khoán, ngoại hối, thu nhập cố định, hàng hóa và các thị trường phái sinh liên quan. Đặc biệt, bạn muốn liên tục suy nghĩ về cách dữ liệu này được đại diện, lưu trữ và truy cập như một phần lớn công việc của một nhà phát triển định lượng là cung cấp lưu trữ và truy cập dữ liệu tài chính. Một khi vào công việc, bạn gần như chắc chắn sẽ tập trung vào một lĩnh vực cụ thể sâu sắc, vì vậy hãy đảm bảo nghiên cứu ban đầu của bạn khá rộng.
Có liên quan hơn là các thuật toán được sử dụng trong tài chính định lượng để thực hiện cả định giá công cụ và giao dịch thuật toán. Các kỹ thuật định giá phái sinh ngân hàng đầu tư gần như chắc chắn sẽ tập trung vào Phương pháp Monte Carlo và Phương pháp khác biệt hữu hạn, cả hai đều dựa trên kiến thức về xác suất, thống kê, phân tích số và phương trình vi phân.
Đối với quỹ phòng hộ, bạn có thể sẽ thực hiện cơ sở hạ tầng giao dịch - tần suất thấp hoặc cao. Điều này sẽ liên quan đến việc lấy một thuật toán đã được mã hóa trong MatLab, R hoặc Python (hoặc thậm chí C ++) và sau đó tối ưu hóa nó bằng ngôn ngữ nhanh hơn, chẳng hạn như C ++, cũng như kết nối thuật toán này với giao diện lập trình ứng dụng môi giới chính (API) và thực hiện giao dịch. Các kỹ năng cần thiết ở đây khá khác nhau. Bạn sẽ cần có thể thu thập dữ liệu từ các nguồn khác nhau, đưa nó vào ngữ cảnh chính xác, lặp lại nhanh chóng và sau đó tạo báo cáo theo yêu cầu hoặc ở định dạng cố định (PDF), qua web hoặc như một API. Những kỹ năng này khó học trực tiếp từ sách và đòi hỏi một vài năm kinh nghiệm phát triển phần mềm trong ngành công nghệ.
Để đọc thêm về các chủ đề này, vui lòng xem các bài viết về triển khai C ++, bài viết về triển khai Python và Danh sách đọc Tài chính định lượng.
Đơn xin việc làm
Mặc dù danh sách trên có vẻ như là một lượng lớn tài liệu để nghiên cứu, nhưng điều này sẽ chỉ xảy ra với một người hoàn toàn mới về lập trình. Không có khả năng vị trí nhà phát triển định lượng sẽ phù hợp với một cá nhân như vậy và tôi giả định rằng nền tảng của bạn sẽ là lập trình hoặc khoa học vật lý. Hãy chắc chắn đọc chỉ những phần bạn cho là có liên quan đến tình huống của riêng bạn, vì nếu không bạn có thể dễ dàng dành một vài năm thời gian rảnh của mình để học tài liệu trên!
Một khi bạn tin rằng bạn đã sẵn sàng cho cuộc phỏng vấn thì bạn sẽ cần phải bắt đầu quá trình liên hệ với các nhà tuyển dụng định lượng. Có các công ty chuyên về các ngân hàng đầu tư và quỹ phòng hộ. Nếu bạn cần tên cụ thể, thì hãy tự do gửi email cho tôi tạimike@quantstart.comvà tôi sẽ vui vẻ chỉ cho bạn đúng hướng.
Bất kỳ nhà tuyển dụng tốt nào cũng sẽ thảo luận về nền tảng của bạn với mức độ chi tiết hợp lý vì họ đang đặt danh tiếng của họ vào cuộc chơi khi họ đề xuất bạn cho một cuộc phỏng vấn. Các nhà tuyển dụng thường không rất quen thuộc với các chi tiết kỹ thuật của công nghệ định lượng và cũng không cần phải. Tuy nhiên, điều này có nghĩa là họ phải dựa nhiều hơn vào sự phù hợp từ khóa cho việc lọc CV / sơ yếu lý lịch của riêng họ. Hãy chắc chắn nếu bạn mạnh mẽ với C ++ rằng bạn nêu kỹ năng C ++ - mạnh mẽ và tham khảo STL, Boost và bất kỳ dự án C ++ nào bạn đã làm việc, ví dụ. Đừng khiêm tốn về kỹ năng của bạn, nhưng cũng đừng phóng đại chúng. Nếu bạn viết bất cứ điều gì trên CV / sơ yếu lý lịch của mình, nó là một trò chơi công bằng để được hỏi về nó trong một cuộc phỏng vấn kỹ thuật!
Vì thị trường việc làm (năm 2013) không phải là tốt nhất (đặc biệt là ở cấp độ bắt đầu) ngay bây giờ, bạn có thể thấy sẽ mất một thời gian để có được công việc bạn đang tìm kiếm.