6

Tôi làm việc cho một cửa hàng chuyên về tài chính.Làm thế nào để thiết kế một ngôn ngữ lập trình phù hợp với các công cụ tài chính?

Chúng tôi đã nghĩ về việc thiết kế ngôn ngữ để mô tả các thực thể tài chính liên quan đến thị trường tài chính.

Điều này sẽ chủ yếu được sử dụng như một loại ngôn ngữ kịch bản để thay thế nhiều quá trình chạy trong bảng tính và macro VBA.

Nó phải đơn giản và trên thực tế, để gọi nhiều thư viện C++ và C# khác nhau đằng sau hậu trường. Nó phải cho phép người dùng xử lý các đối tượng trừu tượng có thể đại diện cho chuỗi thời gian (trong ngày và hàng ngày).

Nó phải được hoàn toàn debuggable, khi người dùng sẽ có một vấn đề, chúng ta phải có khả năng bước vào mã C++/C# và tái tạo các lỗi. Lý tưởng nhất là nó có thể được đưa ra thông qua một số cơ chế trong Excel và trả về kết quả trong Excel. (không may là hầu hết mọi người làm việc trong Tài chính đều sử dụng Excel)

Nếu bạn phải thực hiện tác vụ này, bạn sẽ làm thế nào?

Bạn có sử dụng cú pháp chức năng không?

Bạn có phát triển một số ngôn ngữ kịch bản sẽ được diễn giải hoặc bạn sẽ biên dịch nó bằng ngôn ngữ khác (như chuyển đổi tập lệnh bằng C++ hoặc C#)?

Tôi không tìm thấy bất kỳ dự án mã nguồn mở nào cho loại phát triển này, nhưng có bất kỳ sản phẩm thương mại nào sử dụng loại cú pháp này không?

EDIT: Tôi đã đọc tất cả câu trả lời của bạn nhưng tôi sẽ đợi thêm thời gian trước để chọn câu trả lời. Họ là tất cả các ý kiến ​​rất hữu ích mặc dù!

EDIT2: Tôi đã đánh dấu Đánh dấu hiệu suất cao làm giải pháp. Tất cả các câu trả lời của bạn rất hữu ích và tôi đã modded tất cả chúng lên. Anh ấy là một trong những câu trả lời đầu tiên và câu trả lời của anh ấy khá sâu sắc đối với chúng tôi.

+2

Đây không phải là những gì COBOL ban đầu được thiết kế cho? = P –

+1

@Marc Không, không phải vậy. –

+0

Xin lỗi nhưng đó là một nhận xét vui nhộn:) – BlueTrin

Trả lời

10

Tôi khuyên bạn nên tập trung phát triển một tập hợp phong phú các lớp trong ngôn ngữ OO ưa thích của bạn (hoặc C# hoặc C++, mặc dù tôi nghi ngờ bạn có thể dễ dàng tích hợp trước đây với Excel). Điều đó sẽ cung cấp cho bạn ngôn ngữ của bạn để mô tả các tổ chức tài chính liên quan đến thị trường tài chính. Khi bạn đã thực hiện điều đó, bạn nên cân nhắc xem có nên tiếp tục bao bọc các lớp này trong một số Ngôn ngữ cụ thể theo miền hay chỉ đơn giản là hiển thị chúng cho cộng đồng người dùng của bạn.

Tôi nghi ngờ rằng miền của bạn có một số phức tạp không thể xáo trộn và DSL trung gian sẽ phải phức tạp như tập các lớp và do đó, bạn có ít thu nhập bằng cách tạo nó.

Một cách tiếp cận khác là tích hợp Excel với Mathematica mà Wolfram tạo ra một hộp công cụ của một số loại. Tôi không có kinh nghiệm về điều này, nhưng Mathematica chắc chắn phù hợp với bất kỳ tính toán nào bạn sẽ phải làm.

Kính trọng

5

Tôi sẽ gói các thư viện C++ bằng Python.

Tôi sẽ định nghĩa một gói các lớp thông thạo - có hiệu lực - là ngôn ngữ cụ thể theo miền của tôi.

Tôi sẽ sử dụng ngôn ngữ Python trực tiếp dựa trên hai nền tảng đó. Tôi sẽ không phát minh cú pháp mới của riêng tôi. Thế giới không cần Cú pháp khác; chúng tôi có cú pháp và ngữ pháp đủ để phân tích, đủ để kéo dài đến cuối thời gian.

Bạn có sử dụng cú pháp chức năng không? Python có khả năng hoạt động. Nếu bạn cẩn thận với thiết kế lớp Python, bạn có thể đạt được một phong cách chức năng sạch sẽ.

Lý tưởng nhất là nó có thể được khởi chạy qua một số cơ chế trong Excel và trả lại kết quả trong Excel.

Vì trình thông dịch Python có thể được nhúng trong ứng dụng C++ (hoặc C#), bạn có thể dễ dàng tạo Excel API. Từ Excel sang ngôn ngữ mới của bạn, hãy làm ít nhất có thể trong API C++ để bắt đầu chức năng Python.

BTW, cạnh tranh của bạn là Resolver One. Đây là những gì họ làm.

+1

Được đánh số thứ hai (ngay cả khi ngôn ngữ cơ bản không phát ra là Python); đây chính xác là những gì DSL dành cho, và nó giải phóng bạn để tập trung vào các yêu cầu nghiệp vụ của API, thay vì các chi tiết nhỏ hơn. –

1

Nếu thư viện cơ bản của bạn sử dụng Java, bạn nên xem xét thực hiện DSL trong Groovy. Có một số podcast và bài viết về điều này, hãy thử Googling "DSL Groovy".

+0

Tôi sẽ đề nghị Scala, vì những lý do tương tự. Nhưng một trong những ngôn ngữ * ho * mà họ muốn giao tiếp là C#, và tôi không nghĩ nó thực sự trơn tru khi tích hợp một ngôn ngữ JVM với một ngôn ngữ CLR. –

+0

D'oh, bỏ qua chi tiết đó, vì vậy vâng, nó sẽ là "khó khăn" để giao tiếp với C# :-) –

3

Tôi khuyên bạn nên sử dụng R.

  • R có một số lượng lớn gói tài chính và chuỗi thời gian. Hãy xem qua số finance, econometricstime series chế độ xem. R cũng được sử dụng rộng rãi trong lĩnh vực tài chính (xem this recent conference làm ví dụ).
  • R có thể tích hợp với Excel. Hãy xem this blog post on the subject.
  • R có thể chạy mã C++ và có thể tương tác với C# qua COM.
2

Jane Street Capital sử dụng OCaml và viết lên kinh nghiệm của họ here. Thật thú vị nếu đọc rộng.

Đối với môi trường của bạn, nếu bạn theo dõi mô hình của họ, bạn có thể sử dụng F#, bắt đầu cuộc sống dưới dạng phương ngữ OCaml, nhưng tất nhiên chạy trong thế giới .NET.

+0

Cảm ơn bạn đã trả lời, tôi đã theo dõi F #, có vẻ như một ứng viên rất mạnh cho loại ứng dụng này một ngôn ngữ chức năng. – BlueTrin

3

Một quan điểm khác thúc đẩy C#.

Như bạn đã có một công cụ lập trình chức năng đa năng mạnh mẽ mà người dùng của bạn quen thuộc và đã mua vào trong hình dạng của Excel, tôi sẽ xem xét để xây dựng một giải pháp xung quanh đó. Bạn vẫn nhận được tùy chọn theo cách có thể sử dụng các tiện ích bổ sung và tùy chọn tích hợp của bên thứ ba khác (ví dụ: R và Mathematica)

Tôi sẽ xem xét Bổ trợ tự động được quản lý cho các chức năng do người dùng xác định. Về cơ bản, chúng là các dự án thư viện C# sử dụng System.Runtime.InteropServices như được mô tả trong bài viết này link text. Đối với người dùng, các chức năng này được thêm vào ở mức tế bào theo cách thông thường bằng cách sử dụng trình hướng dẫn chức năng và có thể nhiều hơn hoặc ít hơn những gì bạn muốn. Đây là DSL của bạn. Người dùng có thể chọn để tích hợp các chức năng trong các mô hình hiện tại của họ một cách dễ dàng. Nó cũng sẽ nhanh chóng để thử nghiệm một cái gì đó để kiểm tra tính khả thi của điều này. Đây là hoàn toàn debuggable.Ngoài ra, sử dụng Visual Studio Tools for Office, bạn có thể truy cập toàn bộ hệ thống phân cấp đối tượng excel và thậm chí thêm các khung hành động có thể được đặt ra bằng cách kéo và thả các điều khiển cho các yêu cầu nhập dữ liệu phức tạp hơn. Tôi tin rằng nó thậm chí có thể sử dụng WPF với Excel theo cách này nếu bạn cần thêm các visualisations chuyên biệt. Nếu bạn cần lưu trữ dữ liệu để nói Sql Server, bạn có thể xây dựng một lượt vòng quanh biểu mẫu xác nhận bằng cách sử dụng phương pháp này.

Tôi nghe có vẻ giống M $ shill! (Chỉ cần thiết lập hồ sơ thẳng tôi không làm việc cho họ).

Bạn sẽ cần đánh giá hiệu suất của điều này và tôi không chắc nó sẽ mở rộng như thế nào.

+0

Excel-DNA là một triển khai tuyệt vời của khái niệm này. –

1

Hầu hết các tổ chức tài chính crunching số (hoặc các bộ phận trong đó) đã có được giấy phép Matlab. Tôi khuyên bạn nên xem xét các cơ sở hướng đối tượng được cung cấp bởi Matlab (và, thực sự, tại số Financial Toolbox).

Up trước tôi nghĩ rằng bạn có được ba điều:

1) Truy cập vào một môi trường cấp cao, nơi người dùng có thể tập trung vào các vấn đề và không về việc thực hiện 2) Tình trạng của đồ họa chất lượng cao 3) Tích hợp liền mạch với Excel và các gói năng suất khác

Tôi biết bạn có ý định phát triển ngôn ngữ (trái với ứng dụng), nhưng hãy cân nhắc chuyển ngữ ngữ thành ngôn ngữ rõ ràng - bằng cách này bạn tránh đường cong học tập cho người dùng của mình .

3

Simon Peyton-Jones của danh tiếng Haskell đã đóng góp cho bài báo 'Composing contracts: an adventure in financial engineering' đã thảo luận cách ngôn ngữ chức năng cho phép tự soạn thảo mô tả thực thi của các hợp đồng phái sinh tài chính. Một phương pháp như vậy nên có thể với F #.

Tôi tin rằng các dịch vụ của LexiFi nhằm mục đích thương mại hóa một số nghiên cứu này.

Các vấn đề liên quan