
Lập trình trực quan luôn là mục tiêu mong muốn của các nhà phát triển công cụ phần mềm, ngay cả trong lĩnh vực giao dịch định lượng. Bởi vì cách tiếp cận trực quan hóa “những gì bạn thấy là những gì bạn nhận được” làm giảm đáng kể ngưỡng kỹ thuật cho quá trình phát triển lập trình. Người dùng không còn phải xử lý một loạt mã hóa nhàm chán nữa. Họ chỉ cần sử dụng trí óc, trí tưởng tượng và tư duy logic, và tập trung vào chính doanh nghiệp. Bạn có thể thực hiện được chương trình mình muốn, thật tuyệt vời phải không!
Vậy thì chúng ta hãy cùng nhau bước vào lĩnh vực lập trình trực quan về các chiến lược giao dịch định lượng nhé!
Sau khi đăng nhập vào https://www.fmz.com, hãy đăng ký tài khoản (nếu bạn đã đăng ký, hãy đăng nhập trực tiếp) và nhấp vào: Trung tâm điều khiển->Thư viện chính sách->Chính sách mới.

Chúng ta có thể thấy chiến lược trực quan ban đầu. Nó chỉ xuất ra thông tin tài sản tài khoản của sàn giao dịch được cấu hình mặc định (đối tượng sàn giao dịch đầu tiên được thêm vào trong quá trình kiểm tra ngược hoặc robot). (Như hình dưới đây)

## Trước khi bắt đầu tìm hiểu cách sử dụng trực quan hóa, chúng ta cần hiểu một số khái niệm thiết kế về trực quan hóa.
Khi quan sát cẩn thận, ta thấy tất cả các mô-đun đều có chốt (lõm) và lỗ mộng (lồi), nghĩa là các mô-đun có thể được “kết nối” và “kết nối”. Nếu các mã chức năng được biểu thị bởi hai mô-đun có thể được kết nối, thì chúng sẽ được ghép lại với nhau khi bạn đưa mộng và chốt của hai mô-đun lại gần nhau.

Một số mô-đun có một số cài đặt đặc biệt, ví dụ:

Bạn có thể kéo mô-đun “Project” ở bên trái vào mô-đun “Join” để có thể thêm vị trí mộng và chốt, qua đó thêm vị trí để nối văn bản. Theo cách này, bạn có thể thực hiện một số điều chỉnh và cài đặt cho mô-đun bằng cách nhấp vào bánh răng nhỏ.
Một số mô-đun yêu cầu tham số đầu vào, có thể là giá trị, chuỗi, v.v. Nếu bạn không thêm biến làm tham số đầu vào của mô-đun, mô-đun sẽ được thực thi theo các tham số đầu vào mặc định.
Một mô-đun tính toán như thế này để tìm căn bậc hai sẽ đưa ra kết quả tính toán của mô-đun này.
Như bạn thấy, nếu tham số đầu vào bị thiếu, giá trị mặc định 9 sẽ được sử dụng làm tham số đầu vào để tính căn bậc hai của 9.

Tất nhiên, nếu bạn muốn sử dụng mô-đun biến đổi làm tham số đầu vào, bạn có thể kết nối trực tiếp mô-đun biến đổi với vị trí mộng và chốt (rãnh).

Có thể nhấp và kéo mô-đun bằng nút chuột trái. Có thể sao chép mô-đun bằng phím ctrl + c và dán bằng phím ctrl + v, tiện lợi như sao chép và dán mã hoặc văn bản. Khu vực hoạt động có thể được tăng hoặc giảm bằng cách sử dụng bánh xe chuột và tất cả các mô-đun sẽ được tăng hoặc giảm tỷ lệ. Nhấp và giữ vùng trống trong vùng thao tác và kéo để di chuyển vùng thao tác. Thùng rác bên phải ghi lại các mô-đun đã bị xóa gần đây. Quan trọng nhất, sau khi lập xong chiến lược mô-đun, đừng quên nhấp vào “Lưu”.
Bạn có thể thấy có nhiều danh mục mô-đun ở phía bên trái của vùng chỉnh sửa trực quan và có nhiều mô-đun trực quan có sẵn trong mỗi danh mục.
Tổng cộng có 11 danh mục.

Mô-đun này thường được sử dụng kết hợp với các mô-đun văn bản, như được hiển thị bên dưới:
Bạn có thể nhập một chuỗi vào mô-đun lớp văn bản để khi bạn chạy mô-đun “thông tin đầu ra”, nội dung chuỗi trong mô-đun văn bản sẽ được in ra.
Kiểm tra ngược:

Giống như mã ngôn ngữ JavaScript:
function main(){
Log("你好,可视化编程!")
}
Mô-đun này trông giống như “Thông tin đầu ra”, ngoại trừ việc nó xuất thông tin và đẩy thông tin đó vào tài khoản WeChat được liên kết với tài khoản hiện tại.

Giống như mã ngôn ngữ JavaScript:
function main () {
Log("微信推送!@")
}
Mô-đun throw exception cho phép chương trình đưa ra lỗi và sau đó dừng thực thi chương trình (mà không cần viết mã xử lý ngoại lệ).

Điều này tương tự như chiến lược JavaScript trong đó hàm throw “chuỗi cần xuất ra” được thực thi trực tiếp trong hàm main.
function main () {
throw "第一句就抛出异常,让程序停止!"
}
Kết quả kiểm tra ngược:
Nó thường được sử dụng thường xuyên hơn trong quá trình gỡ lỗi, ví dụ, khi bạn muốn chương trình dừng lại trong một điều kiện nhất định và in một số dữ liệu tại thời điểm đó để dễ quan sát.
Hoặc bạn có thể đặt một mô-đun phát hiện ngoại lệ trong luồng mã nơi có thể xảy ra sự cố, để chương trình có thể báo cáo lỗi và phát hiện một số lỗi.
Mô-đun ngủ đông
Như trong chiến lược JavaScript:
function main () {
Sleep(1000 * 5)
}
Kiểm tra mô-đun ngủ đông:
Kết quả kiểm tra ngược:


Mô-đun này tương tự như chức năng LogProfit của API Nền tảng giao dịch định lượng Inventor, in nhật ký lợi nhuận và tự động vẽ đường cong lợi nhuận dựa trên các tham số đầu vào.
Ví dụ:
Quá trình thực hiện kiểm tra ngược được hiển thị bên dưới:
Mã chính sách JavaScript tương ứng như sau:
function main () {
LogProfit(1)
Sleep(1000 * 5)
LogProfit(2)
Sleep(1000 * 5)
LogProfit(3)
Sleep(1000 * 5)
LogProfit(2)
Sleep(1000 * 5)
LogProfit(5)
}
Có thể ghép nối ở bất kỳ vị trí nào bạn muốn xuất thông tin doanh thu.
Mô-đun vòng lặp có thể gói một loạt các tổ hợp mô-đun được ghép nối và để tổ hợp mô-đun này thực thi trong một vòng lặp.
Bài kiểm tra:
Kết quả kiểm tra ngược:
Có thể thấy rằng sau khi mô-đun vòng lặp bao bọc tổ hợp mô-đun gồm Print Profit và Sleep, tổ hợp mô-đun sẽ được thực thi liên tục.
Cách sử dụng của module này về cơ bản giống như module vòng lặp, điểm khác biệt duy nhất là module này có chức năng ngủ tích hợp.

Module này có thể được sử dụng khi các module biến hoặc giá trị số cần kiểm soát độ chính xác. Giá trị số của phần tham số đầu vào sẽ được xuất ra dưới dạng giá trị số của các chữ số thập phân được chỉ định theo các thiết lập.
Ví dụ, số 3.1415926535897 được xử lý một cách chính xác.

Kiểm tra ngược cho thấy:


Được sử dụng để xóa nhật ký. Tùy thuộc vào các tham số đầu vào, một phần nhật ký có thể được giữ lại. Như trong tài liệu API:
LogReset()

Được sử dụng để xóa nhật ký doanh thu. Tùy thuộc vào các tham số đầu vào, một phần nhật ký có thể được giữ lại. Như trong tài liệu API:
LogProfitReset()

Mô-đun công cụ này cần được sử dụng kết hợp với mô-đun thị trường trong “Loại mô-đun giao dịch”, như thể hiện trong hình:

Sử dụng mô-đun thông tin đầu ra để đưa ra giá giao dịch mới nhất của thị trường chứng khoán mới nhất:

Kiểm tra ngược cho thấy:

Giống như mã chiến lược JavaScript:
function main () {
Log(exchange.GetTicker().Last)
}

Mô-đun này cũng cần được sử dụng cùng với mô-đun thu thập dữ liệu K-line trong “Loại mô-đun giao dịch”.
Đầu tiên, hãy tạo một mô-đun biến và đặt tên là: K-line.
Sau đó lấy dữ liệu K-line, sử dụng mô-đun dữ liệu K-line để lấy dữ liệu đó và gán dữ liệu đó cho mô-đun biến: “K-line”.
Sau đó, sử dụng mô-đun độ dài danh sách trong “Kiểu mô-đun danh sách” để lấy độ dài của mô-đun biến K-line, được sử dụng để chỉ định Thanh nào của K-line để lấy dữ liệu.
Khâu lại với nhau như hình minh họa:
Khi chạy thử nghiệm ngược, dấu thời gian của thanh K-line cuối cùng sẽ được in ra.


Nó cũng cần được sử dụng cùng với mô-đun Lấy dữ liệu độ sâu trong “Loại mô-đun giao dịch”.

Đặt chỉ số về 0, đặt lệnh bán và lấy thông tin về lệnh bán một.

Giống như mã chiến lược JavaScript:
function main () {
Log(exchange.GetDepth().Asks[0])
}
Mô-đun này cần được sử dụng cùng với mô-đun Lấy thông tin tài sản.

Ví dụ: in số lượng tiền xu có sẵn trong tài khoản hiện tại

Kiểm tra ngược cho thấy:

Như trong chiến lược JavaScript:
function main () {
Log(exchange.GetAccount().Stocks)
}

Mô-đun này được sử dụng để lấy giá trị của một thuộc tính nhất định trong dữ liệu đơn hàng, chẳng hạn như giá hoặc số lượng bán đầu tiên trong sổ lệnh (ví dụ số 13).

Kết quả kiểm tra ngược:
Như trong chiến lược JavaScript:
function main () {
Log(exchange.GetDepth().Asks[0].Price)
}
Nó cũng có thể được sử dụng để lấy một thuộc tính nhất định trong thông tin đơn hàng được trả về bởi “Mô-đun truy vấn chi tiết đơn hàng” (sẽ được giải thích trong phần nâng cao).

Tương tự như vậy, nó nên được sử dụng cùng với “Mô-đun Vị thế Tương lai Nhận”. Cần lưu ý rằng dữ liệu vị thế được trả về bởi Mô-đun Vị thế Tương lai Nhận là một mảng (danh sách), là một cấu trúc dữ liệu chứa các vị thế của các hợp đồng và hướng khác nhau . Do đó, bạn phải chỉ định chỉ mục khi sử dụng nó.
Sau khi tìm hiểu nhiều như vậy, chúng ta hãy kết hợp một hoạt động phòng ngừa rủi ro, tức là phòng ngừa cả hợp đồng ngắn hạn và hợp đồng kỳ hạn cùng một lúc. Chúng tôi thực hiện giao dịch phòng ngừa chênh lệch giá tích cực, nghĩa là mở một hợp đồng kỳ hạn ngắn, 1 hợp đồng và mở một hợp đồng dài trong thời gian ngắn.

Kết quả kiểm tra ngược:

Ví dụ về chiến lược trực quan hóa:
Có thêm nhiều chiến lược tại: https://www.fmz.com/square
Các bài viết khác trong loạt bài này