Tick là gì? Ví dụ, dữ liệu giao dịch có thể được hình dung như một con sông, và Tick là dữ liệu của một phần của con sông.
Làm thế nào hầu hết các phần mềm trong nước (có nghĩa là Trung Quốc trong bài viết này) có được Tick?
Sau đó, thường có nhiều hơn một giao dịch trong 500 mili giây, và tình huống cụ thể trong đó hoàn toàn là một hộp đen. Đặc biệt trong chiến lược giao dịch tần suất cao của hợp đồng tương lai hàng hóa, tốc độ nhận thị trường Tick có ảnh hưởng quyết định đến lợi nhuận của chiến lược.
Hầu hết các khung giao dịch trên thị trường sử dụng một chế độ gọi lại, có nghĩa là có tối đa một Tick trong 500 mili giây trong tình huống lý tưởng. Dưới tình huống thực tế onBar / onTick, tốt hơn là không bỏ lỡ Tick. tại sao? Bởi vì bạn phải đối phó với toàn bộ logic mã trong hàm onBar / onTick, tốn rất nhiều thời gian. Cho dù bạn muốn hay không, logic chiến lược của bạn phải bị gián đoạn, bạn phải sử dụng trạng thái không hoạt động, như thế này:
Cơ chế tiên tiến hơn
Nền tảng giao dịch định lượng FMZ không áp dụng cơ chế gọi lại ngược này, nhưng áp dụng cơ chế chức năng chính không gián đoạn logic chiến lược, cho phép người dùng kiểm soát dòng chảy chiến lược một cách tự nhiên hơn. Sử dụng C ++ và Golang như một mức độ cơ bản chiến lược, cấp cao hơn của chiến lược sử dụng JavaScript / Python để xử lý các vấn đề logic. Kết hợp với cơ chế kích hoạt sự kiện, chiến lược cũng có thể được sử dụng để xử lý thị trường với tốc độ nhanh nhất trong lần đầu tiên.
Đừng nói rằng ngôn ngữ kịch bản chậm, trừ khi bạn sử dụng nó cho đào tạo mạng thần kinh, ngay cả khi nó là, nó có thể được sử dụng trong bất kỳ dịp nào sau khi thêm Jit hot compilation. Chiến lược cấp nhập cảnh không được viết ở đây, và nói về sự tổng hợp của tương lai tần số cao Tick. Ví dụ, nếu chúng ta kết nối với một công ty tương lai, chúng ta chỉ có thể nhận được thị trường của công ty tương lai này. Tốc độ và chất lượng của việc nhận của chúng ta liên quan đến mạng của riêng chúng ta, và cũng liên quan đến tải của máy front-end của công ty tương lai.
Vì vậy, làm thế nào chúng ta có thể có được dữ liệu Tick tương lai chính xác hơn nhanh hơn? Dưới mô hình chiến lược của FMZ Quant
Demo mã
Mã này chỉ có thể được sử dụng trong thị trường thực và không thể được kiểm tra lại. Khi thêm sàn giao dịch, nhiều công ty tương lai có thể được thêm để thực hiện xử lý hợp nhất đồng thời của thị trường.
Mã là như sau:
Hiệu ứng demo
Như đã được hiển thị ở trên, lúc 21:24:44, dữ liệu của công ty tương lai đầu tiên là sớm hơn so với công ty tương lai thứ hai. Thêm hai công ty tương lai có thể cho thấy hiệu quả, nếu bạn thêm hơn 5 công ty tương lai để sáp nhập với nhau, thì về cơ bản bạn không có khả năng bỏ lỡ Tick; nếu bạn đang phát triển một chiến lược giao dịch tần số cao, bạn đã giải quyết một bước rất quan trọng và quyết định, cụ thể là tốc độ và sự ổn định của việc nhận Tick.
lấy mã đầy đủ:
function main() {
log("Prepare to connect to the exchange and subscribe to the market")
//step 1:All futures front-end machines are starting to subscribe to the variety
_.each(exchanges, function(e){
/*Waiting to connect to the exchange. The strategy is running without
interruption, and it is not the logic of the event callback. */
while(!e.IO("status"))Sleep(1000);
/*Use _C function to troubleshoot network errors. If subscribe to the market just
after connecting to exchanges, there may be a CTP unprepared error. */
_C(e.SetContractType, "MA801")
/*Switch the market receiving mode to the immediate return mode instead of the
event trigger mode. Refer to the API documentation on FMZ website. */
e.IO("mode", 0)
})
Log("start fusing the data")
//step 2: the important part begins
var preVolume = 0
while (true) {
var ts = new Date().getTime()
//Return if any exchanges occur tick event
var ret = exchange.IO("wait_any")
//Reset Volume at the right time
if (ret.Nano/1000000 - ts > 60000) {
preVolume = 0
}
//Target the exchange where the event occurred
var e = exchanges[ret.Index]
//Get ticker, because of switching mode as return before, so here is the updated market, and GetTicker won't fail
//Only the Tick with increasing volume is displayed. It no need to compare actual process, just process it.
var ticker = e.GetTicker()
if (ticker.Volume >= preVolume){
Log(ret,ticker.Last, ticker.Volume)
preVolume = ticker.Volume
}
}
}