2.4 Làm thế nào để viết một chiến lược giao dịch trên nền tảng FMZ Quant

Tác giả:Tốt, Tạo: 2019-06-25 12:04:22, Cập nhật: 2023-11-13 19:50:01

img

Làm thế nào để viết một chiến lược giao dịch trên nền tảng FMZ Quant

Tóm lại

Sau khi nghiên cứu các phần trước, cuối cùng chúng tôi đã sẵn sàng viết một chiến lược giao dịch định lượng. Đây sẽ là bước quan trọng nhất trong việc bạn bước vào giao dịch định lượng từ giao dịch thủ công. Trên thực tế, nó không quá bí ẩn. Viết một chiến lược không gì khác ngoài việc thực hiện ý tưởng của bạn bằng mã. Phần này sẽ thực hiện một chiến lược giao dịch định lượng từ đầu, sau khi nghiên cứu, mọi người sẽ quen thuộc với cách viết các chiến lược trên hệ thống FMZ Quant.

Sẵn sàng rồi.

Trước tiên, mở trang web chính thức của FMZ Quant, đăng nhập vào tài khoản của bạn. nhấp vào DashboardstrategyAdd Strategy. xin lưu ý rằng trước khi bắt đầu viết mã, bạn cần chọn các loại ngôn ngữ lập trình. trong phần này chúng tôi sẽ sử dụng JavaScript. chọn nó từ menu thả xuống. ngoài ra, nền tảng FMZ Quant cũng hỗ trợ Python, C ++, và lập trình trực quan.

Ý tưởng chiến lược

Trong chương trước, tôi đã giới thiệu một chiến lược trung bình động. đó là: nếu giá cao hơn giá trung bình của 10 ngày qua, mở vị trí dài. nếu giá thấp hơn giá trung bình của 10 ngày qua, bán nó. Tuy nhiên, mặc dù giá có thể phản ánh trực tiếp tình trạng thị trường, vẫn sẽ có nhiều tín hiệu đột phá sai; do đó, chúng ta phải nâng cấp và cải thiện chiến lược này.

Đầu tiên, hãy chọn một đường trung bình động dài hơn để đánh giá hướng xu hướng. Ít nhất một nửa các tín hiệu đột phá sai đã được lọc. đường trung bình động chu kỳ lớn chậm, nhưng nó sẽ ổn định hơn. Sau đó, để tăng tỷ lệ thành công của vị trí mở, chúng tôi thêm một điều kiện khác. đường trung bình động chu kỳ lớn này ít nhất là tăng; cuối cùng, mối quan hệ vị trí tương đối giữa giá, đường trung bình động ngắn hạn và đường trung bình động dài hạn được sử dụng để hình thành một chiến lược giao dịch hoàn chỉnh.

img

Chiến lược logic

Với những ý tưởng chiến lược trên, chúng ta có thể cố gắng xây dựng logic chiến lược này. logic ở đây không phải là để bạn tính toán luật chuyển động thiên văn, nó không phức tạp như vậy. nó không gì khác hơn là thể hiện các ý tưởng chiến lược trước đó bằng lời nói.

  • Mở vị trí dài: Nếu hiện không có vị trí, và giá đóng lớn hơn trung bình di chuyển ngắn hạn, và giá đóng lớn hơn trung bình di chuyển dài hạn, và trung bình di chuyển ngắn hạn lớn hơn trung bình di chuyển dài hạn, và trung bình di chuyển dài hạn đang tăng.

  • Mở vị trí ngắn: Nếu hiện không có vị trí, và giá đóng là thấp hơn trung bình động ngắn hạn, và giá đóng là thấp hơn trung bình động dài hạn, và trung bình động ngắn hạn thấp hơn trung bình động dài hạn, và trung bình động dài hạn đang giảm.

  • Đóng vị trí dài: Nếu hiện đang nắm giữ vị trí dài, và giá đóng là thấp hơn trung bình động dài hạn, hoặc trung bình động ngắn hạn thấp hơn trung bình động dài hạn, hoặc trung bình động dài hạn đang giảm.

  • Khóa vị trí ngắn: Nếu hiện tại giữ vị trí ngắn, và giá đóng cửa lớn hơn trung bình động dài hạn, hoặc trung bình động ngắn hạn lớn hơn trung bình động dài hạn, hoặc trung bình động dài hạn đang tăng.

Điều trên là logic của toàn bộ chiến lược, nếu chúng ta chuyển đổi phiên bản văn bản của chiến lược này thành mã, nó sẽ bao gồm: việc mua lại báo giá thị trường, tính toán các chỉ số, đặt lệnh để mở và đóng vị trí, ba bước này.

M Chiến lược ngôn ngữ

Điều đầu tiên là lấy giá báo giá thị trường. Trong chiến lược này, chúng ta chỉ cần lấy giá đóng cửa. Trong ngôn ngữ M, API để lấy giá đóng cửa là: CLOSE, có nghĩa là bạn chỉ cần viết CLOSE trong khu vực mã hóa để có được giá đóng cửa dòng K mới nhất.

Điều tiếp theo là tính toán chỉ số. Trong chiến lược này, chúng ta sẽ sử dụng hai chỉ số, cụ thể là: trung bình di chuyển ngắn hạn và trung bình di chuyển dài hạn. Chúng ta giả định rằng trung bình di chuyển ngắn hạn là trung bình di chuyển 10 giai đoạn và trung bình di chuyển dài hạn là trung bình di chuyển 50 giai đoạn. Làm thế nào để sử dụng mã để đại diện cho hai thứ này? Vui lòng xem bên dưới:

MA10:=MA(CLOSE,10); // Get the 10-cycle moving average of the latest K-line and save the result in variable MA10
MA50:=MA(CLOSE,50); // Get the 50-cycle moving average of the latest K-line and save the result in variable MA50

Trong giao dịch thủ công, chúng ta có thể nhìn thấy một cái nhìn xem trung bình động 50 giai đoạn đang tăng hay giảm, nhưng làm thế nào chúng ta thể hiện nó bằng mã? Hãy suy nghĩ cẩn thận, đánh giá liệu trung bình động đang tăng hay không, liệu trung bình động hiện tại của đường K lớn hơn trung bình động của đường K trước đó? hoặc nó cao hơn hai đường K trước đó? Nếu câu trả lời là có, thì chúng ta có thể nói rằng trung bình động đang phá vỡ. Chúng ta cũng có thể đánh giá sự giảm theo cùng một phương pháp.

MA10:=MA(CLOSE,10); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10
MA50:=MA(CLOSE,50); //Get the 50-cycle moving average of the latest K line and save the result to variable MA10

MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling

Lưu ý rằng trên các dòng 8 và 9 của mã trên, từ AND, là một toán tử logic. có nghĩa là khi cả hai bên của điều kiện and là đúng, toàn bộ câu là đúng, nếu không thì nó là sai.

Bước cuối cùng là đặt lệnh, bạn chỉ cần gọi API lệnh FMZ Quants để thực hiện hoạt động mua và bán sau mã logic.

MA10:=MA(CLOSE,10); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10
MA50:=MA(CLOSE,50); //Get the 50-cycle moving average of the latest K line and save the result to variable MA10

MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling

CLOSE>MA10 AND CLOSE>MA50 AND MA10>MA50 AND MA50_ISUP,BK; //open long position
CLOSE<MA10 AND CLOSE<MA50 AND MA10<MA50 AND MA50_ISUP,SK; //open short position
CLOSE<MA50 OR MA10<MA50,SP;//close long position
CLOSE>MA50 OR MA10>MA50,BP;//close short position

Lưu ý rằng dòng 13 và 14 ở trên, từ OR, đó là một toán tử logic khác, trong ngôn ngữ M có nghĩa là or, dịch sang tiếng Anh: nếu giá đóng của dòng K hiện tại thấp hơn giá trung bình di chuyển 50 giai đoạn của dòng K hiện tại, hoặc giá trung bình di chuyển 10 giai đoạn của dòng K hiện tại thấp hơn giá trung bình di chuyển 50 giai đoạn của dòng K hiện tại, giá trị được tính là Yes. Và đặt lệnh ngay lập tức; nếu không thì tính toán là no và không làm gì cả.

Xin lưu ý rằng ANDOR là tất cả các toán tử logic trong ngôn ngữ M:

  • AND là khi tất cả các điều kiện là , và điều kiện cuối cùng là ;

  • OR là khi miễn là bất kỳ điều kiện nào là yes, điều kiện cuối cùng là yes.

Tóm lại

Trên đây là toàn bộ quá trình viết chiến lược giao dịch trên nền tảng FMZ Quant bằng cách sử dụng ngôn ngữ lập trình M. Có tổng cộng ba bước: từ có ý tưởng chiến lược, đến suy nghĩ chiến lược và sử dụng văn bản để mô tả logic, và cuối cùng thực hiện một chiến lược giao dịch hoàn chỉnh với mã. Mặc dù đây là một chiến lược đơn giản, quá trình thực hiện cụ thể tương tự như chiến lược phức tạp, ngoại trừ việc chiến lược và cấu trúc dữ liệu của chiến lược là khác nhau. Do đó, miễn là bạn hiểu quy trình chiến lược định lượng trong phần này, bạn có thể tiến hành nghiên cứu và thực hành chiến lược định lượng trên nền tảng FMZ Quant.

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

  1. Cố gắng thực hiện các chiến lược trong phần này một mình.

  2. Dựa trên chiến lược của phần này, thêm hàm dừng lỗ và lấy lợi nhuận.

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

Trong việc phát triển các chiến lược giao dịch định lượng, ngôn ngữ lập trình giống như vũ khí, một ngôn ngữ lập trình tốt có thể giúp bạn đạt được kết quả gấp đôi với một nửa nỗ lực. Ví dụ, có hơn một chục ngôn ngữ Python, C ++, Java, C #, EasyLanguage và M được sử dụng phổ biến nhất trong thế giới giao dịch định lượng. Bạn nên chọn vũ khí nào để chiến đấu trên chiến trường? Trong phần tiếp theo chúng tôi sẽ giới thiệu các ngôn ngữ lập trình phổ biến này, cũng như các đặc điểm của mỗi ngôn ngữ lập trình.


Có liên quan

Thêm nữa