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

Mô-đun hình dung để xây dựng chiến lược giao dịch - Hiểu nâng cao

Tác giả:FMZ~Lydia, Tạo: 2022-12-13 14:11:36, Cập nhật: 2023-09-20 09:53:59

img

Mô-đun hình dung để xây dựng chiến lược giao dịch - Hiểu nâng cao

Chúng tôi đã học được mô-đun trực quan để xây dựng chiến lược giao dịch - Lần đầu tiên quen biết, và chúng tôi có một sự hiểu biết khái niệm về xây dựng mô-đun trực quan và splicing, Tiếp theo, dễ dàng học cách sử dụng các mô-đun khác. Có thể kết hợp một số chức năng phức tạp hơn.

Mô-đun danh mục giao dịch

Trong quá trình học tập và thử nghiệm trước đây, chúng tôi đã tiếp xúc với một số mô-đun định mục giao dịch. Ví dụ: Thay đổi Get Ticker module Thay đổi Nhận OHLC mô-đun ...

Những điều đã được sử dụng sẽ không được lặp lại ở đây.

1. Nhận số lượng trao đổi

img

Khi viết các chiến lược để sử dụng robot giao dịch, bạn có thể thêm nhiều hơn một đối tượng trao đổi, chẳng hạn như các chiến lược phòng ngừa rủi ro. Hoặc bạn cần phải đi qua (đi qua có nghĩa là truy cập các đối tượng trao đổi một lần một lần) các đối tượng trao đổi để truy cập thị trường. Đây là nơi mà mô-đun để có được số lượng trao đổi đi vào chơi.

Chúng ta có thể in số lượng các giao dịch được cấu hình hiện tại trong một cấu trúc đơn giản:

img

Trong thực tế, nó giống như gọi mã chiến lược JavaScript như vậy:

function main () {
    Log(exchanges.length)
}

Chúng ta hãy xem xét các kết quả của mô-đun kết hợp này:

img img img

Chúng ta có thể thấy rằng chúng ta đã thêm ba đố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ý backtest là 3.

2. Tìm tên của sàn giao dịch

img

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 một module vòng lặp trong kiểu vòng lặp trước.

img

Tìm hiểu một mô-đun đánh giá điều kiện trước:

img

Các điều kiện phán quyết có thể được viết như sau:

img

Chúng tôi sử dụng module vòng lặp để đi qua các tên trao đổi được thêm vào. Chúng tôi sử dụng mô-đun đánh giá điều kiện để đánh giá xem số vòng hiện tại có tương ứng với tên của sàn giao dịch để in không.

img

Kết quả hoạt động thử nghiệm sau:

img

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())
        }
    }
}

3. Tìm cặp giao dịch hiện tại của sàn giao dịch

img

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

img

Kết quả kiểm tra hậu quả:

img img img

Nếu bạn gọi mã chiến lược JavaScript:

function main () {
    var text = exchange.GetCurrency()
    Log(text)
}

4. Mô-đun đặt hàng

img

Mô-đun này rất quan trọng đối với hoạt động đặt hàng. vị trí tenon đầu tiên được nhúng với một biến giá, được sử dụng để chỉ định giá đặt hàng. Bạn cũng có thể nhập một giá trị cố định trực tiếp. Vị trí tenon thứ hai (đốm) được nhúng với biến số lượng đơn đặt hàng, được sử dụng để chỉ định số lượng đơn đặt hàng.

Ví dụ, chúng tôi ghép một ví dụ về đặt lệnh mua tại thêm một giá trượt 10 nhân dân tệ dựa trên giá mới nhất của dữ liệu thị trường tick hiện tại, với số lượng lệnh được thiết lập thành 0,1 đồng xu, và in ID lệnh.

img

Kết quả hoạt động thử nghiệm sau:

img

Giống như mã chiến lược JavaScript sau:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
    Log(id)
}

5. Nhận lệnh đang chờ của các mô-đun cặp giao dịch hiện tại

img

Mô-đun này sẽ trả về tất cả các lệnh đang chờ trong trạng thái chưa hoàn tất của cặp giao dịch hiện tại. Nó trả về một cấu trúc danh sách (mảng), có thể được xử lý bởi mô-đun loại danh sách (hoạt động xuyên qua, v.v.). Ví dụ, chúng tôi đã sửa đổi mô-đun đơn đặt hàng ví dụ trên một chút[4] và thay đổi giá 10 nhân dân tệ được thêm vào khi đặt đơn đặt hàng xuống dưới 10 nhân dân tệ. Sau đó chúng ta sử dụng mô-đun của Get pending orders of the current trading pair để có được danh sách các lệnh trong trạng thái PENDING (đang chờ được hoàn thành). Để tránh tác động đến quan sát cuối cùng của backtest do các đơn đặt hàng được hoàn thành trong thị trường tiếp theo, sau khi mô-đun Get pending orders of the current trading pair được thực hiện, chúng tôi in ra danh sách đơn đặt hàng và sử dụng mô-đun Throw exception ngay lập tức để dừng chương trình.

img

Kiểm tra hậu quả cho thấy:

img

Giá của lệnh mua là 10 nhân dân tệ thấp hơn giá mới nhất vào thời điểm đó, vì vậy nó sẽ không được thực hiện ngay lập tức. Sau đó lấy lệnh trong tình trạng giao dịch đang chờ, và in nó ra. Cuối cùng, một ngoại lệ được ném để dừng chương trình.

Toàn bộ mô-đun lắp ráp giống như một cuộc gọi đến 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"
}

6. hủy đơn đặt hàng mô-đun

img

Mô-đun này được sử dụng để hủy lệnh.

Có nhiều kịch bản đòi hỏi các hoạt động như vậy khi viết chiến lược:

Hủy tất cả các đơn đặt hàng đang chờ.

Không có nghi ngờ gì rằng Phân hủy mô-đun lệnh phải được sử dụng. Trong khi học mô-đun lệnh hủy, chúng ta có thể sử dụng [5] để nhận các lệnh đang chờ của mô-đun cặp giao dịch hiện tại và kết hợp để đạt được chức năng này.

Trước hết, để kiểm tra việc hủy bỏ tất cả các đơn đặt hàng, nó không phải là hiển nhiên để đặt một đơn đặt hàng. chúng tôi bắt đầu đặt 2 đơn đặt hàng, giá cả và số lượng của họ là khác nhau để phân biệt hai đơn đặt hàng.

img

Sử dụng Traverse every element in the list module in the Loop module để đi qua các đơn đặt hàng trong danh sách hiện tại của các đơn đặt hàng đang chờ.

img

Trong quá trình đi qua, mỗi thứ tự được lấy được gán một giá trị cho thứ tự module biến (được tạo trong kiểu module biến, như được hiển thị bên dưới:)

img

Sử dụng Util module:

img

Lấy ID đơn đặt hàng, truyền nó đến vị trí tenon (đôn) của Cancel order module, và Cancel order module thực hiện hủy đơn đặt hàng.

Hoạt động kiểm tra ngược:

img

Sử dụng mô tả chiến lược 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))
    }
}

7. Mô-đun để có được chi tiết của một đơn đặt hàng dựa trên ID đơn đặt hàng của nó

img

Vị trí của mô-đun được kết nối với mô-đun biến số ID lệnh, và chi tiết lệnh có thể được trả về.

img

Lưu ý thứ tự được trả về sau khi chạy:

img

So sánh với kết quả chạy trong ví dụ [5], có thể thấy rằng đơn đặt hàng in là thông tin đơn đặt hàng riêng biệt mà không có dấu ngoặc []. Bởi vì ví dụ [5] trả về một danh sách, nhưng ví dụ này trả về một thông tin thứ tự riêng biệt (được thu được dựa trên mô-đun biến ID về vị trí tenon được chuyển vào bởi mô-đun).

Ví dụ trên tương tự như thực hiện chiến lược JavaScript:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1)
    Log(exchange.GetOrder(id))
}

8. Mô-đun giao dịch tương lai

Chúng ta sẽ học các mô-đun trên một lần một và chúng ta thiết lập giao dịch thử nghiệm như tương lai hàng hóa.

Cài đặt kiểm tra ngược:

img

Ví dụ sau thực hiện backtest dựa trên các cài đặt.

  • Đánh giá mô-đun trạng thái kết nối giữa tương lai hàng hóa CTP và máy chủ công ty tương lai

img

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

  • Mô-đun hợp đồng đặt

img

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

Chúng tôi đặt hợp đồng là MA909, hợp đồng chính của methanol hiện tại.

Bằng cách này, giá trị giá mới nhất trên thị trường tick hiện tại của hợp đồng MA909 được thu được.

  • Thiết lập mô-đun hướng lệnh cho giao dịch tương lai

Trong mô-đun thực thi lệnh

img

Định hướng lệnh cần phải được xác định, bởi vì tương lai có: mua: mở các vị trí dài bán: mở các vị trí ngắn closebuy: đóng các vị trí dài closesell: đóng các vị trí ngắn Bốn hướng (có hai hướng khác cho hợp đồng tương lai hàng hóa: closebuy_today để đóng các vị trí dài ngày hôm nay và closesell_today để đóng các vị trí ngắn ngày hôm nay).

Ví dụ, nếu mô-đun lệnh được đặt là buy, có hai ý nghĩa của việc mở các vị trí dài và đóng các vị trí ngắn, điều này là mơ hồ. Do đó, Set the order direction module for futures trading là cần thiết để thiết lập một hướng lệnh rõ ràng.

img

Hiển thị kiểm tra ngược:

img

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("The commodity futures front-end processor is not connected")
        }
        Sleep(1000)
    }
}

9. Mô-đun giao dịch tương lai tiền tệ kỹ thuật số

Việc sử dụng hợp đồng tương lai tiền kỹ thuật số về cơ bản giống như hợp đồng tương lai hàng hóa trong [8] ở trên

  • Ví dụ như OKEX, mã hợp đồng có thể là:
    • this_week: tuần này
    • next_week: tuần tới
    • quý: quý
    • swap: vĩnh viễn
  • BitMEX:
    • XBTUSD
    • ETHUSD
  • Đặt mô-đun đòn bẩy

img

Nó được sử dụng để thiết lập đòn bẩy của tương lai tiền kỹ thuật số.

#Note: Backtesting is not supported.

Giống như chiến lược JavaScript:

function main () {
    exchange.SetMarginLevel(10)
}

Ví dụ về các chiến lược trực quan hóa:

https://www.fmz.com/strategy/121404 https://www.fmz.com/strategy/129895 https://www.fmz.com/strategy/123904 https://www.fmz.com/strategy/122318Để biết thêm các chiến lược, vui lòng tham khảo:https://www.fmz.com/square

Các bài viết khác trong loạt bài này

  • Mô-đun trực quan hóa để xây dựng chiến lược giao dịch -https://www.fmz.com/digest-topic/9509) Mô-đun trực quan hóa để xây dựng chiến lược giao dịch - Lần đầu tiên quen (https://www.fmz.com/bbs-topic/9814) Việc lập trình nhàm chán có thể dễ dàng được hoàn thành bằng các khối xây dựng.

Có liên quan

Thêm nữa