
Tìm hiểu chiến lược giao dịch của việc xây dựng mô-đun trực quan - chương giới thiệu và hiểu biết khái niệm về việc xây dựng và ghép nối các mô-đun trực quan. Sau đó, bạn có thể dễ dàng học cách sử dụng các mô-đun khác. Một số chức năng phức tạp hơn có thể được kết hợp.
Trong các nghiên cứu và thử nghiệm trước đây, chúng tôi đã tiếp xúc với một số mô-đun “danh mục giao dịch”. Ví dụ: Mô-đun “Trao đổi báo giá” Mô-đun “Trao đổi lấy K-line” …
Tôi sẽ không đi sâu vào chi tiết về những phương pháp đã được sử dụng.

Khi viết chiến lược giao dịch bằng robot, bạn có thể thêm nhiều đối tượng trao đổi, ví dụ như chiến lược phòng ngừa rủi ro. Hoặc bạn cần phải duyệt qua (duyệt qua có nghĩa là ghé thăm từng đối tượng một) các đối tượng trao đổi để tiếp cận các điều kiện thị trường. Lúc này, bạn cần sử dụng một module để lấy số lượng trao đổi.
Đầu tiên chúng ta có thể sử dụng một cấu trúc đơn giản để in số lượng trao đổi hiện được cấu hình:

Trên thực tế, nó giống như việc gọi mã chính sách JavaScript sau:
function main () {
Log(exchanges.length)
}
Hãy cùng xem kết quả khi chạy mô-đun kết hợp này:

Bạn có thể thấy rằng chúng tôi đã thêm 3 đối tượng trao đổi, đại diện cho ba tài khoản trao đổi khác nhau và kết quả đầu ra của nhật ký kiểm tra ngược là 3.

Khi thêm ba đối tượng trao đổi, hộp thả xuống sẽ hiển thị ba tùy chọn.
Tìm hiểu trước về mô-đun vòng lặp trong loại vòng lặp.

Chúng ta hãy cùng tìm hiểu trước một mô-đun phán đoán có điều kiện:
Điều kiện phán đoán có thể được viết như sau:

Chúng tôi sử dụng mô-đun vòng lặp để lặp lại các tên trao đổi đã thêm Sử dụng mô-đun phán đoán có điều kiện để xác định xem số vòng lặp hiện tại có tương ứng với tên trao đổi cần in hay không.

Kết quả chạy thử nghiệm ngược:

Giống như mã chiến lược JavaScript:
function main () {
for (var i = 1 ; i <= exchanges.length ; i++) {
if (i == 1) {
Log(exchanges[0].GetName())
} else if (i == 2) {
Log(exchanges[1].GetName())
} else {
Log(exchanges[2].GetName())
}
}
}

Một ví dụ đơn giản lấy cặp giao dịch của đối tượng trao đổi đầu tiên hiện được thiết lập và gán nó cho biến văn bản (được tạo trước trong danh mục biến).
Kết quả kiểm tra ngược:

Nếu bạn gọi mã chính sách JavaScript:
function main () {
var text = exchange.GetCurrency()
Log(text)
}
Mô-đun này rất quan trọng và được sử dụng cho các hoạt động đặt hàng. Biến giá được nhúng vào vị trí mộng (rãnh) đầu tiên để chỉ định giá đặt hàng. Bạn cũng có thể nhập trực tiếp giá trị cố định.
Vị trí mộng thứ hai (chấm) nhúng biến số lượng đặt hàng, được sử dụng để chỉ định số lượng đặt hàng.
Ví dụ, chúng tôi sẽ tạo một ví dụ về việc đặt lệnh mua dựa trên giá mới nhất của dữ liệu thị trường hiện tại, với mức trượt giá 10 nhân dân tệ, đặt số lượng lệnh là 0,1 xu và in ID lệnh.

Kết quả chạy thử nghiệm ngược:

Giống như mã chính sách JavaScript sau đây:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
Log(id)
}

Mô-đun này sẽ trả về tất cả các lệnh chưa hoàn thành cho cặp giao dịch hiện tại. Cấu trúc trả về là một danh sách (mảng), có thể được xử lý bởi các mô-đun loại danh sách (hoạt động duyệt, v.v.). Ví dụ: Chúng tôi sửa đổi một chút ví dụ về mô-đun lệnh [4] ở trên và thay đổi mức giá 10 nhân dân tệ được thêm vào khi đặt lệnh thành mức giá trừ đi 10 nhân dân tệ. Lệnh sẽ không được thực hiện ngay lập tức mà sẽ ở trạng thái chờ trong độ sâu mua và bán (tức là ở một mức nhất định giữa Mua 1, Mua 2 và Mua N), do đó lệnh sẽ ở trạng thái chờ thực hiện. Sau đó, chúng tôi sử dụng mô-đun “Lấy lệnh giao dịch của cặp giao dịch hiện tại” để lấy danh sách các lệnh đang ở trạng thái CHỜ (chờ thực hiện). Để tránh việc thực hiện lệnh trong các điều kiện thị trường tiếp theo và ảnh hưởng đến việc quan sát cuối cùng của backtest, sau khi mô-đun “Lấy lệnh ủy thác cặp giao dịch hiện tại” được thực hiện và danh sách lệnh được in ra, chúng tôi ngay lập tức sử dụng “Ném ngoại lệ” “mô-đun để dừng chương trình.

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

Giá lệnh mua thấp hơn 10 nhân dân tệ so với giá mới nhất tại thời điểm đó nên giao dịch sẽ không được hoàn tất ngay lập tức. Sau đó lấy các lệnh đang chờ thực hiện và in chúng ra. Cuối cùng, một ngoại lệ được đưa ra để dừng chương trình.
Toàn bộ mô-đun được lắp ráp giống như việc gọi một chiến lược JavaScript:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(id)
Log(exchange.GetOrders())
throw "stop"
}

Mô-đun này được sử dụng để hủy đơn hàng.
Có nhiều trường hợp cần phải thực hiện điều này khi viết chính sách:
Hủy tất cả các đơn hàng đang chờ xử lý.
Không nghi ngờ gì nữa, điều này sẽ yêu cầu sử dụng “mô-đun hủy lệnh”. Trong khi tìm hiểu mô-đun hủy lệnh, chúng ta có thể sử dụng [5] để lấy mô-đun cho lệnh ủy thác của cặp giao dịch hiện tại và kết hợp chúng để đạt được chức năng này.
Đầu tiên, để kiểm tra lệnh hủy tất cả đơn hàng, việc đặt hàng không thực sự rõ ràng, chúng ta bắt đầu bằng cách đặt hai đơn hàng có giá và số lượng khác nhau để phân biệt hai đơn hàng.

Sử dụng mô-đun “Duyệt từng phần tử trong danh sách” trong mô-đun loại vòng lặp để duyệt các thứ tự trong danh sách thứ tự đang chờ xử lý hiện tại.
Trong quá trình duyệt, mỗi thứ tự được truy xuất sẽ được gán cho biến module order (được tạo trong biến module type, như được hiển thị bên dưới:)
Sử dụng mô-đun loại công cụ:
Lấy ID lệnh và chuyển đến vị trí mộng (lõm) của mô-đun hủy lệnh, mô-đun hủy lệnh sẽ thực hiện lệnh hủy.
Chạy thử nghiệm ngược:

Sử dụng mô tả chính sách JavaScript:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(id)
var id2 = exchange.Buy(_C(exchange.GetTicker).Last - 12, 0.2)
Log(id2)
var orders = exchange.GetOrders()
Log(orders)
for (var i in orders) {
var order = orders[i]
Log(exchange.CancelOrder(order.Id))
}
}

Mô-đun này có thể trả về thông tin đơn hàng chi tiết bằng cách kết nối mô-đun biến ID đơn hàng với vị trí mộng và chốt.

Chú ý đến thứ tự trả về sau khi chạy:

So sánh với kết quả chạy trong ví dụ [5], có thể thấy rằng thứ tự in là thông tin thứ tự riêng biệt.[] Được đặt trong dấu ngoặc vuông.
Vì ví dụ [5] trả về một danh sách, ví dụ này trả về một thông tin thứ tự duy nhất (được lấy dựa trên biến ID module tại vị trí mộng được module truyền vào).
Ví dụ trên tương đương với việc thực thi chính sách JavaScript:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
Log(exchange.GetOrder(id))
}
Chúng ta sẽ nghiên cứu từng mô-đun trên và thiết lập sàn giao dịch thử nghiệm cho hợp đồng tương lai hàng hóa.
Thiết lập kiểm tra ngược:
Ví dụ sau đây sẽ kiểm tra lại thiết lập này.

Hợp đồng tương lai hàng hóa có thời gian mở và đóng. Khi thị trường đóng cửa, bạn không thể kết nối.

Khi đối tượng trao đổi được cấu hình là sàn giao dịch tương lai, nếu bạn không thiết lập hợp đồng và không trực tiếp lấy thông tin thị trường, lỗi sẽ được báo cáo:

Chúng tôi thiết lập hợp đồng là MA909, đây là hợp đồng chính hiện tại về methanol.
Theo cách này, giá trị giá mới nhất trên thị trường tích tắc hiện tại của hợp đồng MA909 sẽ được thu thập.
Trong mô-đun lệnh thực hiện

Hướng lệnh cần phải được chỉ định vì hợp đồng tương lai có:
mua: mở một vị thế mua dài
bán: mở một vị thế bán khống
closebuy : đóng vị thế mua dài
closesell : đóng vị thế bán khống
Bốn hướng (hợp đồng tương lai hàng hóa có thêm hai hướng nữa: closebuy_today đóng các vị thế mua hôm nay, closesell_today đóng các vị thế bán hôm nay).
Ví dụ, nếu mô-đun lệnh được thiết lập là mua, thì sẽ có hai ý nghĩa: mở một vị thế mua và đóng một vị thế bán, điều này tạo ra sự mơ hồ. Do đó, cần có mô-đun “Thiết lập hướng lệnh giao dịch tương lai” để thiết lập hướng lệnh rõ ràng.

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

Giống như mã chiến lược JavaScript:
function main () {
while (true) {
if (exchange.IO("status")) {
exchange.SetContractType("MA909")
Log(exchange.GetTicker().Last)
exchange.SetDirection("buy")
Log(exchange.Buy(1000, 1))
throw "stop"
} else {
Log("未连接商品期货前置机")
}
Sleep(1000)
}
}
Việc sử dụng hợp đồng tương lai tiền kỹ thuật số về cơ bản giống như việc sử dụng hợp đồng tương lai hàng hóa trong [8] ở trên.
Lấy OKEX làm ví dụ, mã hợp đồng có thể là:
BitMEX :
Thiết lập Mô-đun Đòn bẩy

Được sử dụng để thiết lập đòn bẩy cho hợp đồng tương lai tiền kỹ thuật số.
# 注意 : 回测不支持。
Như trong chiến lược JavaScript:
function main () {
exchange.SetMarginLevel(10)
}
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