Python có tốt hơn Excel về tài chính không?

Ngôn ngữ Python có chức năng gửi nhiều bảng tính chứa VBA, được giữ cùng với băng dính, vào thùng rác. Tính dễ sử dụng và tính phù hợp của nó đối với sự phát triển lặp đi lặp lại phù hợp với các quy trình công việc dựa trên tài chính. Chúng tôi đi sâu vào vấn đề này và cung cấp một hướng dẫn ngắn gọn

Show

Qua

Stefan Thelin

Stefan là một chủ ngân hàng M&A kiêm Giám đốc tài chính khởi nghiệp với kinh nghiệm tài chính chuyên sâu trong các dự án, từ huy động vốn chuỗi A trị giá 6 triệu đô la cho đến 7 tỷ đô la BO

ĐĂNG LẠI

ĐĂNG LẠI

Tóm tắt điều hành

Tại sao Python là ngôn ngữ lập trình tuyệt vời cho các chuyên gia tài chính học?

  • Python là ngôn ngữ lập trình cấp cao, có nghĩa là nó trừu tượng hóa và xử lý nhiều khía cạnh kỹ thuật của lập trình, chẳng hạn như quản lý bộ nhớ, phải được xử lý rõ ràng bằng các ngôn ngữ khác. Điều này làm cho Python dễ sử dụng đối với những người không có nền tảng kỹ thuật
  • Bởi vì ngôn ngữ được thiết kế với mục đích dễ đọc và dễ sử dụng, nên đây là một trong những ngôn ngữ dễ học nhất. Mã Python ngắn gọn và gần với tiếng Anh đơn giản
  • Python là lý tưởng để tạo nguyên mẫu và phát triển lặp đi lặp lại nhanh chóng. Các công cụ thông dịch tương tác của nó cung cấp môi trường nơi bạn có thể viết và thực thi từng dòng mã một cách riêng biệt và xem kết quả ngay lập tức
  • Đồng thời, Python mạnh mẽ và hiệu quả, làm cho nó trở thành một lựa chọn khả thi cho các hệ thống cốt lõi và các ứng dụng lớn hơn
  • Ngoài thư viện tiêu chuẩn lớn gồm các công cụ hữu ích, Python còn có các thư viện tuyệt vời của bên thứ ba để phân tích và tính toán tài chính, chẳng hạn như thư viện Pandas và NumPy được sử dụng trong hướng dẫn này

Một số trường hợp sử dụng để triển khai Python và tài chính cùng nhau là gì?

  • Các tập lệnh Python có thể được sử dụng để tự động hóa các tác vụ và quy trình công việc lặp đi lặp lại, tiết kiệm thời gian và giảm nguy cơ mắc lỗi thủ công
  • Tập lệnh cho phép người dùng dễ dàng lấy dữ liệu từ bảng tính, cơ sở dữ liệu và API hoặc thậm chí cạo dữ liệu web, sau đó có thể xử lý và phân tích dữ liệu này bằng các công cụ phân tích và thống kê mạnh mẽ
  • Nhiều plugin khác nhau dành cho Excel cho phép người dùng tạo liên kết hai chiều theo thời gian thực giữa bảng tính của bạn và mã Python
  • Python cho phép các loại phân tích mới, chẳng hạn như mô phỏng Monte Carlo, không có sẵn trong bảng tính tiêu chuẩn
  • Giao dịch tiền thuật toán không còn là lĩnh vực độc quyền của các quỹ phòng hộ và ngân hàng đầu tư lớn. Với Python, bạn có thể phát triển, kiểm tra lại và triển khai các chiến lược giao dịch của riêng mình trong thời gian ngắn với chi phí thấp

Đối với các ngành nghề từ lâu đã dựa vào việc rà soát bảng tính, Python đặc biệt có giá trị. Citigroup, một ngân hàng Mỹ, đã giới thiệu một khóa học cấp tốc về Python cho các nhà phân tích thực tập của mình. - Nhà kinh tế

Các chuyên gia tài chính từ lâu đã có quyền truy cập vào VBA (Visual Basic for Applications) trong Excel để xây dựng chức năng tùy chỉnh và tự động hóa quy trình công việc. Với sự xuất hiện trong những năm gần đây của Google Trang tính như một ứng cử viên nặng ký trong không gian bảng tính, Google Apps Script hiện cung cấp thêm một lựa chọn

Tuy nhiên, tôi muốn thu hút sự chú ý đến tùy chọn thứ ba, ngôn ngữ lập trình Python, đã trở nên cực kỳ phổ biến trong một số lĩnh vực

Trong bài viết này, tôi sẽ cung cấp một số ví dụ về những gì bạn có thể đạt được với Python, bắt đầu với tổng quan về ngôn ngữ này và lý do tại sao nó trở nên phổ biến trong nhiều lĩnh vực khác nhau, từ phát triển web, học máy, tài chính, . Phần thứ hai sau đó sẽ bao gồm hướng dẫn từng bước

Mục đích tôi viết bài này là để giúp bạn quyết định xem Python có đủ hấp dẫn để bạn xem xét thêm nó vào hộp công cụ tài chính của mình hay không. Nếu bạn thực hiện bước nhảy vọt, có rất nhiều ứng dụng, khóa học, video, bài báo, sách và bài đăng trên blog để học ngôn ngữ. Ở cuối phần này, tôi đã liệt kê một số tài nguyên đã giúp tôi trong suốt quá trình

Trường hợp sử dụng. Ví dụ về những gì tôi đã sử dụng Python cho

Giới thiệu về lập trình của tôi là học CƠ BẢN trên Oric 1 vào giữa những năm 1980. Hồi đó BASIC là ngôn ngữ phổ biến nhất dành cho người mới bắt đầu. Các ngôn ngữ khác mà tôi đã học vào cuối những năm 80 cho đến giữa những năm 90 là Pascal và C, nhưng tôi chưa bao giờ sử dụng chúng trong bất kỳ khả năng chuyên môn nào và tôi không mong đợi sẽ cần hoặc sử dụng các kỹ năng lập trình. Theo hiểu biết của tôi vào thời điểm cuối những năm 90, tài chính và lập trình là những lĩnh vực rất khác nhau, khi tôi chọn dấn thân vào con đường sự nghiệp trong lĩnh vực tài chính

Tua nhanh đến năm 2012, và tôi đang muốn chọn lập trình trở lại như một sở thích, vì vậy tôi bắt đầu nghiên cứu các ngôn ngữ có sẵn vào thời điểm đó. Hóa ra có một chút chuyện đã xảy ra, và khi tôi bắt gặp Python, tôi đã bị cuốn hút, vì nhiều lý do mà tôi sẽ trình bày trong phần tiếp theo. Kể từ đó, tôi đã sử dụng Python cho nhiều nhiệm vụ khác nhau, từ các tập lệnh nhỏ đến các dự án lớn hơn, cả cá nhân và chuyên nghiệp. Nhiều, nhưng không phải tất cả, có liên quan đến bảng tính, bàn làm việc của nhiều chuyên gia tài chính

Dưới đây là một số ví dụ về cách bảng tính và Python có thể kết hợp với nhau tốt như thế nào

1. Theo dõi hàng trăm hoạt động theo thời gian trong thiết lập PMO tích hợp M&A

Tôi làm việc với tất cả các khía cạnh của giao dịch M&A, không chỉ thực hiện mà còn tích hợp. Trong một trường hợp gần đây, nhóm PMO đã quyết định sử dụng phương pháp quản lý dự án và chương trình kết hợp, sử dụng kế hoạch thác nước và biểu đồ Gantt cho các kế hoạch cấp cao cho mỗi trong số 12 luồng công việc tích hợp, ngoài ra còn có bảng Kanban để theo dõi hàng trăm hoạt động đang diễn ra. . Công cụ Kanban đã được chọn, MeisterTask, có một số tính năng thống kê và báo cáo, nhưng nhu cầu của chúng tôi vượt xa điều đó về mặt phân tích và trình bày, đòi hỏi phải có giải pháp tùy chỉnh. Đây là quy trình làm việc mà tôi đã tự động hóa bằng Python

  1. Lưu trạng thái của toàn bộ bảng hàng tuần dưới dạng tệp CSV
  2. Đọc tất cả các tệp CSV lịch sử vào Khung dữ liệu Pandas
  3. Sắp xếp, lọc, nhóm và thao tác dữ liệu thành các định dạng đã thống nhất về cách chúng tôi muốn theo dõi tiến trình (theo trạng thái của hoạt động, luồng công việc, v.v. )
  4. Viết đầu ra vào tệp Excel với dữ liệu từ mỗi phân tích trong trang tính riêng của nó, được định dạng theo cách sao cho có thể sao chép và dán vào biểu đồ ô suy nghĩ một cách đơn giản
  5. Tạo bảng, biểu đồ cho gói báo cáo họp ban chỉ đạo hàng tháng

Việc phát triển kịch bản yêu cầu đầu tư trước vài giờ, nhưng hiện tại, việc cập nhật gói báo cáo cho các cuộc họp của ban chỉ đạo hoặc phân tích đột xuất chỉ mất vài phút. Theo nghĩa đen, mất khoảng 30 giây để chuyển đến đúng thư mục và chạy tập lệnh bằng lệnh một dòng, sau đó mất vài phút để sao chép-dán kết quả đầu ra vào trang trình bày. Với khoảng 500 hoạt động (thẻ) trên 12 luồng công việc đã được thực hiện trong khoảng một tháng, theo dõi hàng tuần về cách chúng di chuyển, trong khung thời gian của chương trình là hai năm, bạn nhanh chóng thấy mình đang xử lý hàng nghìn và cuối cùng là hàng chục nghìn điểm dữ liệu trên hàng chục . Không có tự động hóa, chúng ta đang nói về một số nhiệm vụ rất tẻ nhạt ở đây

Sự đánh đổi giữa “giá trị thời gian của tiền bạc” giữa việc tiếp tục với mọi thứ hoặc bổ sung thêm khối lượng công việc ban đầu bằng cách thiết lập tự động hóa là một chủ đề phổ biến trong lĩnh vực tài chính. Tôi đã đưa ra quyết định tương tự với bước đầu tiên của quy trình này, bằng cách xuất dữ liệu dưới dạng tệp CSV. MeisterTask, giống như nhiều ứng dụng web hiện đại, có một API, có thể được kết nối với ứng dụng Python của bạn, nhưng thời gian thiết lập nó sẽ vượt xa thời gian tiết kiệm được cho trường hợp sử dụng của chúng ta ở đây

Vì vậy, như bạn thấy, đôi khi giải pháp tối ưu là tự động hóa các bước nhất định của quy trình làm việc và giữ các bước khác thủ công

2. Phân tích thống kê giá nhà bằng cách sử dụng Web Scraping, Google Maps API và Excel

Một ví dụ khác là điều tôi đã làm vì sở thích cá nhân nhưng tôi muốn làm nổi bật nó vì nó chứa một số yếu tố thú vị khác của tiện ích Python

  1. Quét dữ liệu của danh sách bất động sản, bao gồm địa chỉ, kích thước, số phòng, giá chào bán và các tính năng khác, cho một khu vực nhất định;
  2. Lưu vào cấu trúc dữ liệu Python
  3. Kết nối với API Google Maps và đối với mỗi danh sách, truy xuất khoảng cách giữa tài sản và các địa danh chính như biển, trung tâm thành phố, ga tàu gần nhất, sân bay gần nhất, v.v.
  4. Xuất dữ liệu ra file Excel
  5. Sử dụng chức năng Excel tiêu chuẩn để chạy hồi quy, tính toán số liệu thống kê và tạo biểu đồ trên các số liệu tiêu chuẩn như giá trên một mét vuông và khoảng cách đến các mốc

Các kết quả ở đây có thể được kết hợp với trọng số cá nhân của riêng bạn về sở thích và giới hạn tài chính khi tìm kiếm bất động sản

Đây chỉ là hai ví dụ, tập trung vào việc tự động hóa công việc liên quan đến bảng tính và thêm các tính năng, nhưng cơ hội với Python gần như vô tận. Trong phần tiếp theo, tôi sẽ phác thảo lý do tại sao nó trở nên phổ biến như vậy, trước khi chuyển sang hướng dẫn mô phỏng Monte Carlo từng bước bằng Python

Tại sao Python là một lựa chọn tuyệt vời cho các chuyên gia tài chính

Ngôn ngữ lập trình Python đã xuất hiện từ những năm 1990 nhưng phải đến những năm gần đây thì mức độ phổ biến của nó mới bùng nổ.

python is the most searched-for programming language

Có một số lý do cho điều này, chúng ta hãy lần lượt xem xét từng lý do

1. Python là ngôn ngữ lập trình cấp cao

Ngôn ngữ lập trình cấp cao là ngôn ngữ trừu tượng hóa nhiều chi tiết về hoạt động bên trong của máy tính. Một ví dụ điển hình là quản lý bộ nhớ. Các ngôn ngữ lập trình cấp thấp hơn yêu cầu sự hiểu biết chi tiết về sự phức tạp của cách bố trí, phân bổ và giải phóng bộ nhớ của máy tính, ngoài thời gian sử dụng và các dòng mã cần thiết để xử lý các tác vụ. Python trừu tượng hóa và tự động xử lý nhiều chi tiết này, giúp bạn tập trung vào những gì bạn muốn đạt được

2. nó ngắn gọn

Vì Python là ngôn ngữ lập trình cấp cao, nên mã này ngắn gọn hơn và gần như hoàn toàn tập trung vào logic nghiệp vụ của những gì bạn muốn đạt được, thay vì các chi tiết triển khai kỹ thuật. Lựa chọn thiết kế ngôn ngữ góp phần vào điều này. như một ví dụ, Python không yêu cầu sử dụng dấu ngoặc nhọn hoặc dấu chấm phẩy để mô tả các hàm, vòng lặp và dòng theo cách mà nhiều ngôn ngữ khác làm, điều này làm cho nó ngắn gọn hơn và, như một số người tranh luận, cải thiện khả năng đọc

3. Dễ học và dễ hiểu

Một quan sát đã ảnh hưởng đến các lựa chọn thiết kế ngôn ngữ trong Python là các chương trình được đọc thường xuyên hơn là được viết. Python vượt trội ở đây vì mã của nó trông rất gần với tiếng Anh thuần túy, đặc biệt nếu bạn đặt tên cho các thành phần khác nhau của tập lệnh hoặc chương trình của mình một cách hợp lý

4. Thích hợp cho phát triển nhanh, lặp đi lặp lại

Thử nghiệm và sai lầm được giác ngộ vượt trội hơn kế hoạch của trí tuệ hoàn hảo. - David Kelly

Python lý tưởng cho việc tạo nguyên mẫu và phát triển lặp đi lặp lại nhanh chóng (và vâng, thử và sai) vì các công cụ thông dịch tương tác như Python shell, IPython và sổ ghi chép Jupyter luôn ở phía trước và trung tâm trong chuỗi công cụ Python. Trong các môi trường tương tác này, bạn có thể viết và thực thi từng dòng mã một cách riêng biệt và xem kết quả (hoặc thông báo lỗi hữu ích) ngay lập tức. Các ngôn ngữ khác cũng có điều này, nhưng trong hầu hết các trường hợp không ở cùng mức độ với Python

5. Có thể được sử dụng cho cả Mã sản xuất và Mã sản xuất

Ngoài việc tuyệt vời để tạo nguyên mẫu, Python còn là một ngôn ngữ tuyệt vời và mạnh mẽ cho các ứng dụng sản xuất lớn. Một số công ty phần mềm lớn nhất trên thế giới sử dụng Python rất nhiều trong nhiều ứng dụng và trường hợp sử dụng

6. Đi kèm với “Đã bao gồm pin. ” Thư viện chuẩn Python

Mọi thứ cần thiết cho các hoạt động cơ bản đều được tích hợp ngay trong ngôn ngữ, nhưng ngoài ra, thư viện chuẩn Python còn có các công cụ để làm việc với tệp, phương tiện, mạng, thông tin ngày và giờ, v.v. Điều này cho phép bạn hoàn thành nhiều nhiệm vụ khác nhau mà không cần phải tìm kiếm các gói của bên thứ ba

7. Thư viện tuyệt vời của bên thứ ba để phân tích tài chính

Đối với các chuyên gia tài chính, Pandas với các đối tượng DataFrame và Series và Numpy với ndarray của nó là những công cụ phân tích tài chính bằng Python. Kết hợp với matplotlib và các thư viện trực quan khác, bạn có các công cụ tuyệt vời để hỗ trợ năng suất

8. Python miễn phí

Python được phát triển theo giấy phép nguồn mở, khiến nó miễn phí cho mục đích thương mại

Hướng dẫn từng bước sử dụng Python và tài chính cùng nhau

Phần tiếp theo là hướng dẫn từng bước chỉ ra cách tạo phiên bản đơn giản hóa của mô phỏng Monte Carlo được mô tả trong bài đăng trên blog trước đây của tôi, nhưng sử dụng Python thay vì plugin @RISK cho Excel

Phương pháp Monte Carlo dựa vào lấy mẫu ngẫu nhiên để thu được kết quả số. Một ứng dụng như vậy là lấy các mẫu ngẫu nhiên từ phân phối xác suất đại diện cho các trạng thái tiềm ẩn không chắc chắn trong tương lai của thế giới nơi các biến hoặc giả định có thể nhận một loạt các giá trị

Sẽ rất hữu ích khi thực hiện mô phỏng Monte Carlo trên mô hình định giá DCF đơn giản thay vì các ví dụ phổ biến hơn mà bạn thấy thể hiện việc định giá quyền chọn hoặc các công cụ phái sinh khác, vì đối với điều này, chúng ta không cần bất kỳ phép toán nào ngoài những điều cơ bản về tính toán báo cáo tài chính và . Xin lưu ý rằng mô hình hướng dẫn cơ bản này nhằm minh họa các khái niệm chính và không hữu ích cho bất kỳ mục đích thực tế nào. Tôi cũng sẽ không đề cập đến bất kỳ khía cạnh học thuật nào của mô phỏng Monte Carlo

Hướng dẫn giả định rằng bạn đã quen thuộc với các khối lập trình cơ bản, chẳng hạn như biến và hàm. Nếu không, có thể hữu ích nếu bạn dành 10 phút để kiểm tra các khái niệm chính trong phần giới thiệu này chẳng hạn

Điểm khởi đầu và kết quả mong muốn

Tôi bắt đầu với cùng một mô hình định giá DCF rất đơn giản được sử dụng trong hướng dẫn mô phỏng Monte Carlo. Nó có một số mục dòng chính từ ba báo cáo tài chính và ba ô đầu vào được đánh dấu, trong phiên bản Excel có các ước tính điểm mà giờ đây chúng tôi muốn thay thế bằng phân phối xác suất để bắt đầu khám phá các phạm vi kết quả tiềm năng

example financial projections

Cách tiếp cận hai bước để phát triển một tập lệnh nhỏ

Làm cho nó hoạt động, làm cho nó đúng, làm cho nó nhanh - Kent Beck

Mục đích của hướng dẫn này là cung cấp cho các chuyên gia tài chính mới làm quen với Python không chỉ giới thiệu về một chương trình hữu ích có thể trông như thế nào mà còn giới thiệu về quy trình lặp mà bạn có thể sử dụng để phát triển nó. Do đó, nó có hai phần

  1. Đầu tiên, tôi phát triển một nguyên mẫu đang hoạt động bằng cách sử dụng cách tiếp cận đơn giản mà tôi nghĩ là dễ thực hiện và không hoàn toàn khác với quy trình mà người ta có thể sử dụng để bắt đầu dự án này nếu bạn bắt đầu từ đầu.
  2. Sau đó, sau khi đã phát triển nguyên mẫu hoạt động, tôi xem qua quá trình tái cấu trúc - thay đổi cấu trúc mã mà không thay đổi chức năng của nó. Bạn có thể muốn sử dụng phần đó - đó là một giải pháp tao nhã hơn giải pháp đầu tiên và, như một phần thưởng, nó nhanh hơn khoảng 75 lần về thời gian thực hiện

1. Phát triển một nguyên mẫu làm việc

Thiết lập Máy tính xách tay Jupyter

Sổ tay Jupyter là một công cụ tuyệt vời để làm việc với Python một cách tương tác. Nó là một trình thông dịch Python tương tác với các ô có thể chứa mã, văn bản Markdown, hình ảnh hoặc dữ liệu khác. Đối với hướng dẫn này, tôi đã sử dụng Nền tảng Python Quant, nhưng tôi cũng có thể đề xuất Colaboratory của Google, miễn phí và chạy trên đám mây. Khi đó, chỉ cần chọn “New Python 3 Notebook” trong menu “File” và bạn đã sẵn sàng để sử dụng

Sau khi hoàn thành việc đó, bước tiếp theo là nhập các gói của bên thứ ba mà chúng tôi cần để thao tác và trực quan hóa dữ liệu, đồng thời cho chương trình biết rằng chúng tôi muốn xem các biểu đồ nội tuyến trong sổ ghi chép của mình thay vì trong các cửa sổ riêng biệt

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

Một lưu ý trước khi chúng tôi bắt đầu đặt tên cho các biến đầu tiên của mình. Như tôi đã nhấn mạnh, khả năng đọc là một trong những thế mạnh của Python. Thiết kế ngôn ngữ đi một chặng đường dài để hỗ trợ điều đó, nhưng mọi người viết mã đều có trách nhiệm làm cho nó dễ đọc và dễ hiểu, không chỉ cho người khác mà còn cho chính họ. Như Luật Eagleson nêu rõ, “Bất kỳ đoạn mã nào của riêng bạn mà bạn chưa xem trong sáu tháng trở lên cũng có thể được viết bởi người khác. ”

Một nguyên tắc nhỏ là đặt tên cho các thành phần của chương trình của bạn theo cách mà bạn giảm thiểu nhu cầu nhận xét riêng giải thích chương trình của bạn làm gì

Với ý nghĩ đó, hãy tiếp tục

Lập báo cáo tài chính

Có nhiều cách để chúng ta có thể làm việc với dữ liệu bảng tính hiện có trong Python. Ví dụ: chúng ta có thể đọc một trang tính vào Khung dữ liệu Pandas bằng một dòng mã bằng cách sử dụng lệnh

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
2. Nếu bạn muốn tích hợp chặt chẽ hơn và liên kết theo thời gian thực giữa bảng tính và mã Python, thì có cả tùy chọn thương mại và miễn phí để cung cấp chức năng đó

Vì mô hình ở đây rất đơn giản và để tập trung vào các khái niệm Python, chúng tôi sẽ tạo lại nó từ đầu trong tập lệnh của mình. Ở cuối phần đầu tiên, tôi sẽ chỉ cho bạn cách xuất những gì chúng ta đã tạo sang bảng tính

Là bước đầu tiên hướng tới việc tạo biểu diễn Python của báo cáo tài chính, chúng tôi sẽ cần một cấu trúc dữ liệu phù hợp. Có rất nhiều thứ để lựa chọn, một số được tích hợp trong Python, một số khác từ các thư viện khác nhau hoặc chúng ta có thể tạo của riêng mình. Hiện tại, hãy sử dụng một Sê-ri từ thư viện Pandas để xem chức năng của nó

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales

Đầu vào này và đầu ra tương ứng của nó được hiển thị bên dưới

creating a series from a python library

Với ba dòng đầu tiên, chúng tôi đã tạo cấu trúc dữ liệu với chỉ mục bao gồm các năm (mỗi dòng được đánh dấu để hiển thị nếu đó là Thực tế, Ngân sách hoặc Dự kiến), giá trị ban đầu (tính bằng triệu euro, như trong mô hình DCF ban đầu) và . Dòng thứ tư in một biểu diễn của dữ liệu - nói chung, nhập tên của một biến hoặc các đối tượng khác trong trình thông dịch tương tác thường sẽ cung cấp cho bạn một biểu diễn hợp lý về nó

Tiếp theo, chúng tôi khai báo một biến để đại diện cho mức tăng trưởng doanh thu hàng năm dự kiến. Ở giai đoạn này, nó là một ước tính điểm, con số tương tự như trong mô hình DCF ban đầu của chúng tôi. Trước tiên, chúng tôi muốn sử dụng các đầu vào giống nhau đó và xác nhận rằng phiên bản Python của chúng tôi hoạt động giống nhau và cho kết quả giống như phiên bản Excel, trước khi xem xét thay thế các ước tính điểm bằng phân phối xác suất. Sử dụng biến này, chúng tôi tạo một vòng lặp tính toán doanh số bán hàng trong mỗi năm của các dự đoán dựa trên năm trước và tốc độ tăng trưởng

growth_rate = 0.1
for year in range(1, 6):
    sales[year] = sales[year - 1] * (1 + growth_rate)
    
sales

Bây giờ chúng tôi có doanh số bán hàng dự kiến, thay vì NaN

python and finance: projecting sales figures

Sử dụng phương pháp tương tự, chúng tôi tiếp tục thông qua các báo cáo tài chính, khai báo các biến khi chúng tôi cần và thực hiện các tính toán cần thiết để cuối cùng đạt được dòng tiền tự do. Khi chúng tôi đến đó, chúng tôi có thể kiểm tra xem những gì chúng tôi có tương ứng với những gì phiên bản Excel của mô hình DCF nói

ebitda_margin = 0.14
depr_percent = 0.032
ebitda = sales * ebitda_margin
depreciation = sales * depr_percent
ebit = ebitda - depreciation
nwc_percent = 0.24
nwc = sales * nwc_percent
change_in_nwc = nwc.shift(1) - nwc 
capex_percent = depr_percent
capex = -(sales * capex_percent)
tax_rate = 0.25
tax_payment = -ebit * tax_rate
tax_payment = tax_payment.apply(lambda x: min(x, 0))
free_cash_flow = ebit + depreciation + tax_payment + capex + change_in_nwc
free_cash_flow

Điều này mang lại cho chúng ta dòng tiền tự do

discounted cash flow output from python

Một dòng ở trên có lẽ cần bình luận ở giai đoạn này là tài liệu tham khảo thứ hai của

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
3. Ở đây, chúng tôi áp dụng một chức năng nhỏ để đảm bảo rằng trong các trường hợp lợi nhuận trước thuế bị âm, thì chúng tôi sẽ không có khoản thanh toán thuế dương. Điều này cho thấy mức độ hiệu quả mà bạn có thể áp dụng các chức năng tùy chỉnh cho tất cả các ô trong Sê-ri Pandas hoặc DataFrame. Tất nhiên, chức năng thực tế được áp dụng là một sự đơn giản hóa. Một mô hình thực tế hơn cho một bài tập định giá lớn hơn sẽ có một mô hình thuế riêng tính toán thuế tiền mặt thực tế được trả dựa trên một số yếu tố cụ thể của công ty

Thực hiện Định giá DCF

Khi đã đạt được dòng tiền dự kiến, giờ đây chúng ta có thể tính toán giá trị đầu cuối đơn giản và chiết khấu tất cả các dòng tiền về hiện tại để có kết quả DCF. Đoạn mã sau giới thiệu tính năng lập chỉ mục và cắt lát, cho phép chúng tôi truy cập một hoặc nhiều phần tử trong cấu trúc dữ liệu, chẳng hạn như đối tượng Pandas Series

Chúng tôi truy cập các phần tử bằng cách viết dấu ngoặc vuông ngay sau tên của cấu trúc. Lập chỉ mục đơn giản truy cập các phần tử theo vị trí của chúng, bắt đầu bằng 0, nghĩa là

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
4 sẽ cung cấp cho chúng ta phần tử thứ hai.
years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
5 là cách viết tắt để truy cập phần tử cuối cùng (dòng tiền của năm ngoái được sử dụng để tính giá trị cuối cùng) và việc sử dụng dấu hai chấm sẽ cho chúng ta một lát cắt, nghĩa là
years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
6 cung cấp cho chúng ta tất cả các phần tử ngoại trừ phần tử đầu tiên, vì chúng ta không muốn

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
0dcf output from python discounted cash flow calculation

Điều đó kết thúc phần đầu tiên của nguyên mẫu của chúng tôi - chúng tôi hiện có một mô hình DCF đang hoạt động, mặc dù là một mô hình rất thô sơ, bằng Python.

Xuất dữ liệu

Trước khi chuyển sang mô phỏng Monte Carlo thực tế, đây có thể là thời điểm tốt để đề cập đến các khả năng xuất có sẵn trong gói Pandas. Nếu bạn có đối tượng Pandas DataFrame, bạn có thể ghi đối tượng đó vào tệp Excel bằng một dòng bằng phương pháp

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
8. Cũng có chức năng tương tự để xuất sang hơn chục định dạng và đích khác

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
2example of excel table output generated with python

Tạo phân phối xác suất cho mô phỏng Monte Carlo của chúng tôi

Bây giờ chúng tôi đã sẵn sàng để giải quyết thử thách tiếp theo. để thay thế một số đầu vào ước tính điểm bằng phân phối xác suất. Mặc dù các bước cho đến thời điểm này có vẻ hơi rườm rà so với việc xây dựng cùng một mô hình trong Excel, nhưng một vài dòng tiếp theo sẽ cho bạn một cái nhìn sơ lược về sức mạnh của Python.

Bước đầu tiên của chúng tôi là quyết định số lần lặp lại mà chúng tôi muốn chạy trong mô phỏng. Sử dụng 1.000 làm điểm bắt đầu tạo ra sự cân bằng giữa việc có đủ điểm dữ liệu để có được các biểu đồ đầu ra hợp lý, so với việc kết thúc mô phỏng trong một khung thời gian hợp lý. Tiếp theo, chúng tôi tạo ra các bản phân phối thực tế. Để đơn giản, tôi đã tạo ba bản phân phối bình thường ở đây, nhưng thư viện NumPy có một số lượng lớn các bản phân phối để lựa chọn và cũng có những nơi khác để xem, bao gồm cả thư viện chuẩn Python. Sau khi quyết định sử dụng phân phối nào, chúng ta cần chỉ định các tham số cần thiết để mô tả hình dạng của chúng, chẳng hạn như giá trị trung bình và độ lệch chuẩn cũng như số lượng kết quả mong muốn

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
3monte carlo simulation output from python

Ở đây, bạn có thể lập luận rằng EBITDA không nên là một biến ngẫu nhiên riêng biệt độc lập với doanh số bán hàng mà thay vào đó có tương quan với doanh số bán hàng ở một mức độ nào đó. Tôi đồng ý với điều này và nói thêm rằng nó nên được thúc đẩy bởi sự hiểu biết vững chắc về động lực của cấu trúc chi phí (chi phí biến đổi, bán biến đổi và cố định) và các yếu tố thúc đẩy chi phí chính (một số trong số đó có thể có phân phối xác suất riêng, .

Bạn càng có ít dữ liệu để cung cấp thông tin cho lựa chọn phân phối và tham số của mình, thì bạn càng phải dựa vào kết quả của các luồng công việc thẩm định khác nhau, kết hợp với kinh nghiệm, để hình thành quan điểm đồng thuận về các phạm vi tình huống có thể xảy ra. Trong ví dụ này, với các dự báo về dòng tiền, sẽ có một thành phần chủ quan lớn, điều đó có nghĩa là việc trực quan hóa các phân phối xác suất trở nên quan trọng. Tại đây, chúng ta có thể hình dung cơ bản, hiển thị phân phối tăng trưởng doanh số bán hàng, chỉ với hai dòng mã ngắn. Bằng cách này, chúng tôi có thể nhanh chóng xem bất kỳ phân phối nào đối với nhãn cầu phản ánh đúng nhất quan điểm tập thể của nhóm

Bây giờ chúng tôi có tất cả các khối xây dựng mà chúng tôi cần để chạy mô phỏng, nhưng chúng không ở định dạng thuận tiện để chạy mô phỏng. Đây là cùng một mã mà chúng tôi đã làm việc cho đến nay nhưng tất cả được tập hợp trong một ô và sắp xếp lại thành một hàm để thuận tiện

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
4

Bây giờ chúng ta có thể chạy toàn bộ mô phỏng và vẽ biểu đồ phân phối đầu ra, đây sẽ là giá trị dòng tiền chiết khấu của công ty này trong mỗi 1.000 lần lặp, với đoạn mã sau. Lệnh

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
9 không phải là mã Python mà là một cách viết tắt của sổ ghi chép đo thời gian để chạy một thứ gì đó (thay vào đó, bạn có thể sử dụng hàm Python từ thư viện chuẩn). Nó phụ thuộc vào máy tính bạn chạy nó, nhưng phiên bản này cần 1-2 giây để chạy 1.000 lần lặp và hình dung kết quả

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
6monte carlo simulation output from python script

2. Tinh chỉnh Nguyên mẫu

Sự nghi ngờ tiềm ẩn rằng một cái gì đó có thể được đơn giản hóa là nguồn thử thách bổ ích phong phú nhất thế giới. - Edsger Dijkstra

Tái cấu trúc đề cập đến quá trình viết lại mã hiện có để cải thiện cấu trúc của nó mà không thay đổi chức năng của nó và đây có thể là một trong những yếu tố thú vị và bổ ích nhất của mã hóa. Có thể có một số lý do để làm điều này. Nó có thể là

  1. Tổ chức các phần khác nhau một cách hợp lý hơn
  2. Đổi tên các biến và hàm để làm cho mục đích và hoạt động của chúng rõ ràng hơn
  3. Cho phép và chuẩn bị cho các tính năng trong tương lai
  4. Cải thiện tốc độ thực thi, dung lượng bộ nhớ hoặc việc sử dụng tài nguyên khác

Để cho thấy một bước trong quy trình đó có thể trông như thế nào, tôi đã dọn sạch nguyên mẫu mà chúng ta vừa xem qua bằng cách thu thập tất cả các biến ban đầu vào một nơi, thay vì rải rác khắp nơi như trong tập lệnh nguyên mẫu và tối ưu hóa tốc độ thực thi của nó thông qua một quy trình có tên là

Sử dụng mảng NumPy cho phép bạn thể hiện nhiều loại tác vụ xử lý dữ liệu dưới dạng biểu thức mảng ngắn gọn mà có thể yêu cầu viết vòng lặp. Phương pháp thay thế các vòng lặp rõ ràng này bằng các biểu thức mảng thường được gọi là vector hóa. Wes McKinney

Bây giờ nó trông rõ ràng hơn và dễ hiểu hơn

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
7
years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
0

Sự khác biệt chính mà bạn sẽ nhận thấy giữa phiên bản này và phiên bản trước là không có vòng lặp

growth_rate = 0.1
for year in range(1, 6):
    sales[year] = sales[year - 1] * (1 + growth_rate)
    
sales
0. Sử dụng thao tác mảng của NumPy, phiên bản này chạy trong 18 mili giây so với phiên bản 1. 35 giây cho phiên bản nguyên mẫu - nhanh hơn khoảng 75 lần

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales
1NumPy array operation example

Tôi chắc chắn rằng có thể tối ưu hóa hơn nữa vì tôi đã tổng hợp cả phiên bản nguyên mẫu và phiên bản tinh chỉnh trong một thời gian ngắn chỉ cho mục đích của hướng dẫn này.

Đưa nó đi xa hơn

Hướng dẫn này cho thấy một số tính năng mạnh mẽ của Python và nếu bạn muốn phát triển điều này hơn nữa thì cơ hội gần như là vô tận. Bạn có thể ví dụ

  • Thu thập hoặc tải xuống số liệu thống kê của công ty hoặc lĩnh vực có liên quan từ các trang web hoặc các nguồn dữ liệu khác, để giúp thông báo lựa chọn giả định và phân phối xác suất của bạn
  • Sử dụng Python trong các ứng dụng tài chính định lượng, chẳng hạn như trong thuật toán giao dịch tự động dựa trên các yếu tố cơ bản và/hoặc kinh tế vĩ mô
  • Xây dựng các khả năng xuất để tạo đầu ra ở định dạng bảng tính và/hoặc bản trình bày, được sử dụng như một phần của quy trình xem xét và phê duyệt giao dịch nội bộ của bạn hoặc cho các bản trình bày bên ngoài

Tôi thậm chí còn chưa đề cập đến những gì bạn cũng có thể làm với các ứng dụng web, khoa học dữ liệu và máy học khác nhau đã góp phần vào thành công của Python

Tóm tắt. Ngôn ngữ hữu ích cho hộp công cụ tài chính của bạn

Bài viết này giới thiệu về ngôn ngữ lập trình Python, liệt kê một số lý do khiến nó trở nên phổ biến trong lĩnh vực tài chính và chỉ ra cách xây dựng một tập lệnh Python nhỏ. Trong hướng dẫn từng bước, tôi đã hướng dẫn cách Python có thể được sử dụng để tạo mẫu lặp, phân tích tài chính tương tác và mã ứng dụng cho các mô hình định giá, chương trình giao dịch theo thuật toán, v.v.

Đối với tôi, vào cuối ngày, tính năng tuyệt vời của công nghệ Python là nó rất thú vị khi làm việc với. Nếu bạn thích giải quyết vấn đề, xây dựng mọi thứ và làm cho quy trình làm việc hiệu quả hơn, thì tôi khuyến khích bạn dùng thử. Tôi rất thích nghe những gì bạn đã làm với nó hoặc muốn làm gì với nó

Tài nguyên được đề xuất cho các chuyên gia tài chính để học Python

  • Sách của O'Reilly. Tôi đặc biệt có thể giới thiệu
    • Python for Finance của Yves Hilpisch
    • Học Python của Mark Lutz
    • Thông thạo Python của Luciano Ramalho
  • Số lượng Python
  • PyCon nói chuyện trên YouTube
  • Udemy

Hiểu những điều cơ bản

Python được sử dụng như thế nào trong tài chính?

Python chủ yếu được sử dụng để phân tích định lượng và định tính cho các dự đoán và xu hướng giá tài sản. Nó cũng rất phù hợp để tự động hóa quy trình công việc trên các nguồn dữ liệu khác nhau

Python được tạo ra khi nào?

Python được hình thành vào những năm 1980 và được triển khai lần đầu tiên vào tháng 12 năm 1989

Lập trình Python dùng để làm gì?

Python là ngôn ngữ lập trình tổng quát, dễ uốn với các trường hợp sử dụng trên nhiều lĩnh vực. Bằng cách quan tâm đến khía cạnh lập trình của ứng dụng, nó cho phép lập trình viên tập trung vào chức năng tạo ra của họ

Thẻ

Tài chínhPhân tích dữ liệuMô hình hóa

Người làm việc tự do? Tìm công việc tiếp theo của bạn.

Công việc tự do từ xa

Xem thông tin đầy đủ

Stefan Thelin

Chuyên gia tài chính

Thông tin về các Tác giả

Là một chủ ngân hàng đầu tư, giám đốc tài chính khởi nghiệp, nhà tư vấn gây quỹ và giám đốc M&A của công ty, Stefan đã xây dựng các mô hình tài chính và tiến hành thẩm định và phân tích cho các dự án từ gây quỹ khởi nghiệp trị giá 6 triệu euro đến LBO trị giá 7 tỷ euro. Công việc tự do không thường xuyên cho phép anh ấy giải quyết những thách thức tài chính thú vị trong các lĩnh vực nằm ngoài phạm vi công việc toàn thời gian của mình với tư cách là giám đốc M&A

Thuê Stefan

Bình luận

Ngõ Sharman

tôi yêu cái này. Đây là vấn đề. Sau khi bạn hoàn thành một dự án tuyệt vời bằng Python, dự án khác sẽ xuất hiện và sau đó là dự án khác. Bạn còn lại ba cơ sở mã để hỗ trợ. ?. Các ngôn ngữ hiện đại và hướng đối tượng mạnh mẽ như Java cho phép bạn tạo các bản tóm tắt và giao diện được sử dụng lại trên các ứng dụng khác nhau và đang phát triển. Ngoài ra, có rất nhiều hàng nhập khẩu đã được chứng minh có sẵn với tài liệu tuyệt vời. Java thực thi các giao diện mạnh tách biệt việc triển khai khỏi giao diện thư viện (nghĩ rằng JDBC). Đối với tự động hóa quy mô nhỏ, Python thật tuyệt vời. Hãy suy nghĩ về nơi bạn sẽ đến khi chọn một ngôn ngữ lập trình hiện đại. Trăn, nhỏ. Java, lớn

Ngõ Sharman

tôi yêu cái này. Đây là vấn đề. Sau khi bạn hoàn thành một dự án tuyệt vời bằng Python, dự án khác sẽ xuất hiện và sau đó là dự án khác. Bạn còn lại ba cơ sở mã để hỗ trợ. ?. Các ngôn ngữ hiện đại và hướng đối tượng mạnh mẽ như Java cho phép bạn tạo các bản tóm tắt và giao diện được sử dụng lại trên các ứng dụng khác nhau và đang phát triển. Ngoài ra, có rất nhiều hàng nhập khẩu đã được chứng minh có sẵn với tài liệu tuyệt vời. Java thực thi các giao diện mạnh tách biệt việc triển khai khỏi giao diện thư viện (nghĩ rằng JDBC). Đối với tự động hóa quy mô nhỏ, Python thật tuyệt vời. Hãy suy nghĩ về nơi bạn sẽ đến khi chọn một ngôn ngữ lập trình hiện đại. Trăn, nhỏ. Java, lớn

Illahi Bux

Cảm ơn Stefan, bạn đã giải thích rõ ràng với các bài đánh giá toàn diện về Python.

Illahi Bux

Cảm ơn Stefan, bạn đã giải thích rõ ràng với các bài đánh giá toàn diện về Python.

Ramshah Akbar

bố trí tốt

Ramshah Akbar

bố trí tốt

Youssouf Traore

quan điểm tuyệt vời. Cảm ơn

Youssouf Traore

quan điểm tuyệt vời. Cảm ơn

Stefan Josefsson

chào ngõ. Cảm ơn đã dành thời gian để đọc và bình luận. Tôi rất vui vì bạn thích nó. Tôi đồng ý rằng việc chọn ngôn ngữ lập trình nào để học hoặc sử dụng cho một dự án cụ thể là một cam kết lớn. Sự lựa chọn cuối cùng dẫn đến một số sự đánh đổi, mà tôi đã không đi sâu vào bài báo. Cảm ơn vì đã chỉ ra điều đó và cảm ơn vì đã làm nổi bật một số điểm mạnh của Java. Tôi nghĩ Python cũng có nhiều điểm mạnh cho các dự án lớn hơn, nhưng cả điều đó và cuộc thảo luận rộng hơn về các mô hình lập trình đều nằm ngoài phạm vi những gì tôi dự định đạt được với bài viết này. Tôi hy vọng rằng nó có thể là phần giới thiệu hữu ích về lập trình cho các chuyên gia tài chính và tôi rất vui vì nó cũng khơi dậy một số suy nghĩ khác

Stefan Josefsson

chào ngõ. Cảm ơn đã dành thời gian để đọc và bình luận. Tôi rất vui vì bạn thích nó. Tôi đồng ý rằng việc chọn ngôn ngữ lập trình nào để học hoặc sử dụng cho một dự án cụ thể là một cam kết lớn. Sự lựa chọn cuối cùng dẫn đến một số sự đánh đổi, mà tôi đã không đi sâu vào bài báo. Cảm ơn vì đã chỉ ra điều đó và cảm ơn vì đã làm nổi bật một số điểm mạnh của Java. Tôi nghĩ Python cũng có nhiều điểm mạnh cho các dự án lớn hơn, nhưng cả điều đó và cuộc thảo luận rộng hơn về các mô hình lập trình đều nằm ngoài phạm vi những gì tôi dự định đạt được với bài viết này. Tôi hy vọng rằng nó có thể là phần giới thiệu hữu ích về lập trình cho các chuyên gia tài chính và tôi rất vui vì nó cũng khơi dậy một số suy nghĩ khác

Jose Aquino

Ý kiến ​​đơn giản của tôi sau nhiều dự án thực tế. Java đắt, khó học và mã lớn, quá lớn. Python rẻ, miễn phí, nhẹ, dễ học. Vì vậy, để thao tác dữ liệu Python là lựa chọn của tôi. Bài báo tuyệt vời Stefan

Jose Aquino

Ý kiến ​​đơn giản của tôi sau nhiều dự án thực tế. Java đắt, khó học và mã lớn, quá lớn. Python rẻ, miễn phí, nhẹ, dễ học. Vì vậy, để thao tác dữ liệu Python là lựa chọn của tôi. Bài báo tuyệt vời Stefan

preeti mishra

Best python Training Institute inn Bangalore. https://riainstitutebangalore.com/

Khoa NA

Cảm ơn, Stephan. Rất khuyến khích bước vào thế giới lập trình. Tôi có một số nền tảng về đầu tư nhưng không có nền tảng về lập trình => học nó để quay trở lại thế giới đầu tư mà tôi khao khát nhất cho sự nghiệp của mình

Pavel Šumichrast

Bài viết hoàn hảo, cảm ơn bạn và chúc bạn thành công

Ruben Dario Carvajal Herrera

Cảm ơn, xuất sắc

Indranil Dasgupta

Bài viết hoàn toàn xuất sắc. Ngay cả đối với mô hình DCF nhỏ hơn, với tư cách là người mới bắt đầu, tôi thấy việc tiếp cận chủ đề theo cách có cấu trúc và dễ đọc hơn sẽ dễ dàng hơn. Các ví dụ trong bài viết này từ một chuyên gia tài chính rất hữu ích trong việc giải thích cho mọi người về lợi ích của việc chuyển sang python

Python có tốt cho phân tích tài chính không?

Python hiện đang trở thành ngôn ngữ lập trình số 1 cho khoa học dữ liệu. Do tính đơn giản và khả năng đọc cao của python, nên nó ngày càng trở nên quan trọng trong ngành tài chính . Khóa học kết hợp cả mã hóa python và các khái niệm thống kê và áp dụng vào việc phân tích dữ liệu tài chính, chẳng hạn như dữ liệu chứng khoán.

Python có hữu ích hơn Excel không?

Nó có thể dễ dàng thay thế các tác vụ thông thường bằng tự động hóa. Python cũng mang lại hiệu quả và khả năng mở rộng cao hơn . Nó nhanh hơn Excel cho các đường dẫn dữ liệu, tự động hóa và tính toán các phương trình và thuật toán phức tạp.

Khi nào tôi nên sử dụng Python thay vì Excel?

Khi nói đến việc mở rộng quy mô và làm việc với nhiều tập dữ liệu lớn hơn , Python có một số lợi thế nghiêm trọng không thể bỏ qua. Excel chỉ có thể xử lý rất nhiều dữ liệu và bạn càng có nhiều dữ liệu và tab trong sổ làm việc của mình thì càng khó quản lý và tệp sẽ càng chậm.

Tài chính có cần Python không?

Học lập trình tài chính với Python đang trở thành một yêu cầu . Tài chính ngân hàng nổi tiếng với mức lương rất cao nên lĩnh vực việc làm thu hút một lượng lớn ứng viên. Nếu bạn là một trong số họ, bạn nên biết Python cực kỳ phổ biến trong tài chính — và vẫn đang ngày càng phổ biến.