Tài nguyên đang được tải lên... tải...

3.1 Đánh giá ngôn ngữ lập trình giao dịch định lượng

Tác giả:Tốt, Tạo: 2019-04-18 15:03:37, Cập nhật: 2019-04-27 11:54:49

Tóm lại

Trong chương 1 và 2, chúng ta đã học được những điều cơ bản của giao dịch định lượng và việc sử dụng các công cụ FMZ Quant. Trong chương này, chúng ta sẽ thực hiện các chiến lược giao dịch thực tế. Nếu một công nhân muốn làm một cái gì đó tốt, trước tiên anh ta phải mài giũa các công cụ của mình. Để thực hiện một chiến lược giao dịch, bạn phải đầu tiên làm chủ một ngôn ngữ lập trình. Phần này đầu tiên giới thiệu các ngôn ngữ lập trình chính thống trong giao dịch định lượng, cũng như các đặc điểm của mỗi ngôn ngữ lập trình.

Ngôn ngữ lập trình là gì?

Trước khi học một ngôn ngữ lập trình, trước tiên bạn phải hiểu khái niệm về ngôn ngữ lập trình. Một ngôn ngữ lập trình là một ngôn ngữ mà cả con người và máy tính đều có thể hiểu. Nó là một mã giao tiếp tiêu chuẩn. Mục đích của một ngôn ngữ lập trình là sử dụng ngôn ngữ của con người để điều khiển một máy tính và nói với máy tính những gì chúng ta sẽ làm. Máy tính có thể thực hiện các hướng dẫn theo ngôn ngữ lập trình, và chúng ta cũng có thể viết mã để đưa ra các hướng dẫn cho máy tính.

Cũng giống như cha mẹ dạy chúng ta nói và dạy chúng ta cách hiểu những gì người khác nói. Sau một thời gian dài xây dựng và tự học, chúng ta đã học cách nói mà không biết, và có thể hiểu ý nghĩa của những đứa trẻ khác nói. Có nhiều ngôn ngữ, bao gồm tiếng Trung, tiếng Anh, tiếng Pháp, v.v. như:

  • Tiếng Trung: Chào thế giới

  • tiếng Anh: Hello World

  • Tiếng Pháp: Bonjour tout le monde

Nếu bạn sử dụng ngôn ngữ lập trình để hiển thị Hello World trên màn hình máy tính của bạn, đây là trường hợp:

  • Ngôn ngữ C: puts (Hello World);

  • Ngôn ngữ Java: System.out.println ((Hello World);

  • Ngôn ngữ Python: print (Hello World)

Bạn có thể thấy rằng các ngôn ngữ máy tính có những quy tắc cụ thể của riêng chúng, và có rất nhiều ngôn ngữ, và các quy tắc ngôn ngữ này là sự phân loại các ngôn ngữ lập trình mà chúng tôi cần giải thích cho bạn hôm nay. Trong mỗi loại, chúng ta chỉ cần nhớ những quy tắc cơ bản nhất. Chúng ta có thể sử dụng các ngôn ngữ lập trình này để giao tiếp với máy tính và để máy tính chạy chiến lược tương ứng theo hướng dẫn của chúng tôi.

Phân loại ngôn ngữ lập trình

Để dễ dàng tham khảo và so sánh, hãy chọn ngôn ngữ lập trình giao dịch định lượng phù hợp với bạn. Chúng tôi sẽ phân loại sáu ngôn ngữ lập trình được sử dụng phổ biến nhất: Python, Matlab / R, C ++, Java / C #, EasyLanguage và Ngôn ngữ lập trình trực quan (như được hiển thị bên dưới).

img

Chúng tôi đánh giá chúng theo khả năng chức năng, tốc độ, mở rộng và khó học. Điểm số từ 1 đến 5, ví dụ, điểm số 5 trên phạm vi chức năng có nghĩa là mạnh mẽ, và 1 điểm có nghĩa là ít chức năng hơn. (như được hiển thị ở trên) Chương trình thị giác và EasyLanguage dễ học và rất mới; Python có khả năng mở rộng mạnh mẽ và phù hợp để phát triển các chiến lược giao dịch phức tạp hơn; Chương trình C ++ là nhanh nhất và phù hợp hơn cho các nhà giao dịch tần số cao.

Nhưng đối với mỗi ngôn ngữ lập trình, đánh giá chủ yếu là cho các ứng dụng trong lĩnh vực giao dịch định lượng. và với các thành phần chủ quan của cá nhân. bạn cũng được chào đón để khám phá chúng bản thân, tiếp theo, chúng tôi sẽ bắt đầu giới thiệu các ngôn ngữ lập trình này một một.

Lập trình trực quan

Lập trình trực quan đã tồn tại trong một thời gian dài, loại ý tưởng lập trình này, được trang bị nhiều mô-đun điều khiển, chỉ bằng cách kéo và thả, bạn có thể xây dựng logic mã, hoàn thành thiết kế chiến lược giao dịch, quá trình giống như các khối xây dựng.

img img

Như đã được hiển thị ở trên, cùng một thủ tục chỉ là một vài dòng mã trên nền tảng giao dịch FMZ Quant lập trình trực quan. Điều này làm giảm đáng kể ngưỡng lập trình, đặc biệt là đối với các nhà giao dịch không hiểu về lập trình, đó là một trải nghiệm hoạt động tuyệt vời.

Bởi vì chiến lược thực hiện cơ bản của lập trình trực quan này được chuyển đổi sang C ++, nó có ít ảnh hưởng đến tốc độ chạy của chương trình. Tuy nhiên, chức năng và khả năng mở rộng yếu, và không thể phát triển một chiến lược giao dịch quá phức tạp và quá tinh tế.

EasyLanguage

img

EasyLanguage được gọi là ngôn ngữ lập trình độc đáo cho một số phần mềm giao dịch định lượng được thương mại hóa. Mặc dù các ngôn ngữ này cũng có một số tính năng định hướng đối tượng, chúng chủ yếu được kịch bản trong ứng dụng. Về ngữ pháp, nó cũng rất gần với ngôn ngữ tự nhiên của chúng ta. Đối với những người mới bắt đầu giao dịch định lượng, sử dụng EasyLanguage như một điểm khởi đầu là một lựa chọn tốt. Ví dụ, ngôn ngữ M trên nền tảng FMZ Quant.

Ngôn ngữ kịch bản kiểu này không có vấn đề gì trong việc kiểm tra lại chiến lược và thị trường thực tế trong phần mềm cụ thể của nó, nhưng về mặt mở rộng, nó thường bị hạn chế. Ví dụ, các nhà phát triển chiến lược không thể gọi các API bên ngoài. Và ở tốc độ chạy, ngôn ngữ kịch bản này chạy trên máy ảo của riêng nó, và tối ưu hóa hiệu suất cũng tốt như Java / C #.

Python

Như thể hiện trong hình dưới đây, trên Stackoverflow, số lượng truy cập ngôn ngữ lập trình chính thống không thay đổi nhiều trong những năm gần đây, và chỉ có Python đang tăng rất nhiều. Python có thể được sử dụng cho phát triển web, học máy, học sâu, phân tích dữ liệu, v.v. Nó đã trở thành ngôn ngữ linh hoạt nhất vì tính linh hoạt và cởi mở của nó. Điều tương tự cũng đúng trong lĩnh vực đầu tư định lượng.

img

Các danh sách cấu trúc dữ liệu cơ bản và từ điển của Python rất mạnh mẽ và có thể đáp ứng hầu hết các nhu cầu phân tích dữ liệu. Nếu bạn cần một cấu trúc dữ liệu nhanh hơn, toàn diện hơn, chúng tôi khuyên bạn nên sử dụng NumPy và SciPy.

Đối với kỹ thuật tài chính, thư viện được nhắm mục tiêu hơn là Pandas, với hai cấu trúc dữ liệu, Series và DataFrame, lý tưởng để xử lý chuỗi thời gian.

Về tốc độ, Python ở giữa trò chơi, chậm hơn C ++, và nhanh hơn EasyLanguage, chủ yếu là bởi vì Python là một ngôn ngữ năng động chạy với tốc độ bình thường như một ngôn ngữ Python thuần túy.

Là một ngôn ngữ dán, Python là số một về khả năng mở rộng. Ngoài việc có thể giao diện với các ngôn ngữ khác rộng rãi, thiết kế của API mở rộng rất dễ sử dụng. Về khó khăn học tập, Python có cú pháp đơn giản, khả năng đọc mã cao và dễ nhập.

Matlab/R

Sau đó là Matlab và ngôn ngữ R. Hai ngôn ngữ này chủ yếu hướng đến phân tích dữ liệu. Các nhà tạo ngôn ngữ đã thực hiện rất nhiều thiết kế cho các hoạt động khoa học trong ngữ pháp, được đặc trưng bởi sự hỗ trợ tự nhiên cho các hoạt động giao dịch định lượng. Tuy nhiên, phạm vi ứng dụng hạn chế, và nó thường được sử dụng cho phân tích dữ liệu và kiểm tra lại chiến lược. Đối với hệ thống giao dịch và phát triển thuật toán chiến lược, sự dễ sử dụng và ổn định của nó ít hơn.

Ngoài ra, tốc độ và khả năng mở rộng của chúng tương đối kém, bởi vì ngôn ngữ Matlab và R chạy trên một máy ảo ngôn ngữ độc đáo. Về hiệu suất, máy ảo của chúng tồi tệ hơn nhiều so với Java và C #. Nhưng vì ngữ pháp của chúng gần với công thức biểu thức toán học, nó tương đối dễ học.

C++

C++ là một ngôn ngữ lập trình phổ biến hỗ trợ nhiều mẫu lập trình như lập trình thủ tục, trừu tượng dữ liệu, lập trình hướng đối tượng, lập trình chung và mẫu thiết kế. Bạn có thể thực hiện tất cả các chức năng bạn muốn đạt được trong C++, nhưng nhược điểm lớn nhất của một ngôn ngữ mạnh mẽ như vậy là rất khó học, chẳng hạn như mẫu, trỏ, rò rỉ bộ nhớ, v.v.

Hiện tại, C ++ vẫn là ngôn ngữ lập trình được ưa thích cho giao dịch dung lượng cao, tần số cao. Lý do rất đơn giản. Bởi vì các tính năng ngôn ngữ C ++ dễ dàng truy cập vào lớp cơ bản của máy tính, nó là công cụ hiệu quả nhất để phát triển các hệ thống backtesting và thực thi hiệu suất cao xử lý một lượng lớn dữ liệu.

Java/C#

Java/C# là các ngôn ngữ tĩnh chạy trên máy ảo. So với C++, không có mảng ngoài ranh giới, không có coredump, các ngoại lệ được ném có thể xác định chính xác mã lỗi, mang lại cơ chế thu gom rác tự động, không cần phải lo lắng về sự rò rỉ bộ nhớ v.v. Vì vậy, về khó khăn học ngữ pháp, chúng cũng dễ dàng hơn C++. Về tốc độ, bởi vì máy ảo của chúng đi kèm với các chức năng JIT được biên dịch tại thời điểm chạy, tốc độ chỉ đứng thứ hai sau C++.

Nhưng về chức năng, không thể tối ưu hóa hệ thống giao dịch cơ bản như C ++. Về hiệu suất mở rộng, nó yếu hơn C ++, bởi vì phần mở rộng của chúng cần vượt qua cầu C, và cả hai ngôn ngữ tự chạy trên máy ảo, vì vậy khi mở rộng mô-đun chức năng, bạn cần vượt qua một bức tường Layer nữa.

Tóm lại

Tuy nhiên, cuối cùng, ngôn ngữ lập trình định lượng không quan trọng, điều quan trọng là ý tưởng. Ngôn ngữ FMZ Quant M và ngôn ngữ lập trình trực quan hoàn toàn không có vấn đề như một bước nhảy vào giao dịch định lượng. Sau những điều cơ bản, sự cải thiện là liên tục khám phá các điều kiện thị trường khác nhau và cố gắng sử dụng ngôn ngữ cơ bản hơn, chẳng hạn như C ++.

Thiết kế chiến lược của bạn và giao dịch ý tưởng của bạn. Từ quan điểm này, cốt lõi của giao dịch định lượng vẫn là giao dịch ý tưởng. Là một nhà giao dịch định lượng, bạn không chỉ cần làm chủ ngữ pháp cơ bản và chức năng của nền tảng viết chiến lược, mà còn cần hiểu khái niệm giao dịch trong chiến đấu thực tế.

Các bài tập sau giờ học

  1. Những lợi thế của ngôn ngữ Python như một công cụ giao dịch định lượng là gì?

  2. Cố gắng viết một vài API được sử dụng phổ biến bằng ngôn ngữ M?

Thông báo phần tiếp theo

Tôi tin rằng với giới thiệu trên về ngôn ngữ lập trình, bạn phải biết cách chọn nó, sau đó trong vài chương tiếp theo, chúng tôi sẽ phát triển một chiến lược giao dịch định lượng dựa trên phân loại ngôn ngữ lập trình.


Thêm nữa