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

Thực hiện nhanh chóng một công cụ giao dịch định lượng bán tự động

Tác giả:Tốt, Tạo: 2020-08-30 10:11:02, Cập nhật: 2023-10-08 19:54:06

Quickly implement a semi-automatic quantitative trading tool

Thực hiện nhanh chóng một công cụ giao dịch định lượng bán tự động

Trong giao dịch hợp đồng tương lai hàng hóa, sự điều chỉnh giữa thời gian là một phương pháp giao dịch phổ biến. Loại điều chỉnh này không phải là không có rủi ro. Khi hướng đơn phương của chênh lệch tiếp tục mở rộng, vị trí điều chỉnh sẽ ở trong trạng thái mất nổi. Tuy nhiên, miễn là vị trí điều chỉnh được kiểm soát đúng cách, nó vẫn rất hoạt động và khả thi.

Trong bài viết này, chúng tôi cố gắng chuyển sang một chiến lược giao dịch khác, thay vì xây dựng một chiến lược giao dịch hoàn toàn tự động, chúng tôi đã nhận ra một công cụ giao dịch định lượng tương tác bán tự động để làm cho nó dễ dàng hơn để điều chỉnh giữa thời gian trong giao dịch tương lai hàng hóa.

Nền tảng phát triển chúng tôi sẽ sử dụng nền tảng FMZ Quant.

Điều tra giữa thời gian là một khái niệm rất đơn giản.

Khái niệm trọng tài liên thời gian

  • trích dẫn từ Wikipedia


# Strategy Design

The strategy framework is as follows:

Chức năng chính Trong khi (đúng) If(exchange.IO(status)){ // Xác định trạng thái kết nối của giao thức CTP. LogStatus(_D(), Đã kết nối với CTP!) // Thời gian mở thị trường, kết nối đăng nhập là bình thường. { other { LogStatus ((_D(), CTP không được kết nối!) // Không đăng nhập vào giao dịch giao dịch. } } }


If the CTP protocol is connected properly, then we need to set up the trading contract and then get the market quote. After obtaining the quotes, we can use the FMZ Quant platform build-in "line drawing" library to draw the difference.

Chức năng chính Trong khi (đúng) If(exchange.IO(status)){ // Xác định trạng thái kết nối của giao thức CTP. exchange.SetContractType ((rb2001) // Thiết lập hợp đồng tháng xa Var tickerA = exchange.GetTicker() // dữ liệu báo giá hợp đồng tháng xa exchange.SetContractType ((rb1910) // Thiết lập hợp đồng gần tháng Var tickerB = exchange.GetTicker() // dữ liệu báo giá hợp đồng gần tháng Var diff = tickerA.Last - tickerB.Last $.PlotLine ((diff, diff)

LogStatus(_D(), Đã kết nối với CTP!) // Thời gian mở thị trường, kết nối đăng nhập là bình thường. { other { LogStatus ((_D(), CTP không được kết nối!) // Không đăng nhập vào giao dịch giao dịch. } } }


Get the market data, calculate the difference, and draw the graph to record. let it simply reflects the recent fluctuations in the price difference.
Use the function of "line drawing" library ```$.PlotLine```

 ![Quickly implement a semi-automatic quantitative trading tool](/upload/asset/6e286fea238b8266dd13.png) 

# Interactive part

On the strategy editing page, you can add interactive controls directly to the strategy:

 ![Quickly implement a semi-automatic quantitative trading tool](/upload/asset/6e9b91112616d444b964.png) 

Use the function ```GetCommand``` in the strategy code to capture the command that was sent to the robot after the above strategy control was triggered.

After the command is captured, different commands can be processed differently.

The trading part of the code can be packaged using the "Commodity Futures Trading Class Library" function. First, use ```var q = $.NewTaskQueue()``` to generate the transaction control object ```q``` (declared as a global variable).

var cmd = GetCommand() if (cmd) { if (cmd == plusHedge) { q.pushTask ((exchange, rb2001, sell, 1, function ((task, ret) { Log ((task.desc, ret) if (ret) { q.pushTask ((exchange, rb1910, buy, 1, 123, function ((task, ret)) { Log ((q, task.desc, ret, task.arg) }) } { \ cHFFFFFF } } nếu không (cmd == minusHedge) { q.pushTask ((exchange, rb2001, buy, 1, function ((task, ret)) { Log ((task.desc, ret) if (ret) { q.pushTask ((exchange, rb1910, sell, 1, 123, function ((task, ret) { Log ((q, task.desc, ret, task.arg) { \ cHFFFFFF } } }) } nếu không (cmd == coverPlus) { q.pushTask ((exchange, rb2001, closesell, 1, function ((task, ret) { Log ((task.desc, ret) if (ret) { q.pushTask ((exchange, rb1910, closebuy, 1, 123, function ((task, ret) {) Log ((q, task.desc, ret, task.arg) { \ cHFFFFFF } } { \ cHFFFFFF } } nếu (cmd == coverMinus) { q.pushTask ((exchange, rb2001, closebuy, 1, function ((task, ret) {) Log ((task.desc, ret) if (ret) { q.pushTask ((exchange, rb1910, closesell, 1, 123, function ((task, ret) { Log ((q, task.desc, ret, task.arg) }) } }) } } q.poll ((() `


Nội dung liên quan

Nhiều hơn nữa