Dalam strategi perdagangan berjangka komoditi frekuensi tinggi, kelajuan penerimaan sebut harga pasaran Tick mempunyai pengaruh yang menentukan pada hasil keuntungan strategi. Walau bagaimanapun, kebanyakan kerangka perdagangan di pasaran menggunakan mekanisme mod panggilan balik. Kerana dalam fungsi onBar / onTick, anda perlu berurusan dengan keseluruhan kod logik, yang adalah pemborosan masa; sama ada anda mahu atau tidak, logik strategi anda mesti terganggu, dan anda mesti menggunakan mod mesin keadaan, seperti:
var state = STATE_IDLE;
function onTick() {
if (state == STATE_IDLE) {
// do something...
} else if (state == ....) {
// do something
}
}
FFMZ Quant tidak menggunakan mekanisme panggilan balik ke belakang, tetapi menggunakan mekanisme kemasukan fungsi
Di bawah model strategi, anda boleh dengan mudah mengendalikan akaun N syarikat niaga hadapan yang berbeza, menggabungkan TAQ mereka, dan meletakkan pesanan pada kelajuan terpantas. Dalam keadaan biasa, kita boleh mendapatkan dua tik setiap saat dari syarikat niaga hadapan, tetapi dengan teknologi penggabungan TAQ, mengambil MA801 sebagai contoh, kita boleh mendapatkan maksimum 6 tik tidak berulang setiap saat.
Mari pergi terus ke kod (kod hanya boleh dikendalikan dalam bot, bukan dalam backtest), dan penggunaan fungsi IO boleh merujuk kepada:https://www.fmz.cn/api#io函数
Apabila bot menambah platform, N syarikat niaga hadapan boleh ditambah untuk memproses penggabungan serentak TAQ; di sini kita sementara menambah dua dan menunjukkan ini:
Kod seperti berikut:
function main() {
Log("Prepare to access the platform and subscribe to TAQ")
// Step 1: all futures front-end processors are subscribing for symbols
_.each(exchanges, function(e) {
// wait to access the platform, and yes, the strategy runs continuously for 365 days, and it can run even after the market is closed, and it is not the logic of event callback
good mistake
while (!e.IO("status")) Sleep(1000);
// Use the _C retry function to eliminate network errors, and subscribe to TAQ just access to the platform; there may be an error that CTP is not ready
_C(e.SetContractType, "MA801")
// Switch the TAQ receiving mode to immediate return mode instead of event trigger mode, please refer to the API documentation
e.IO("mode", 0)
})
Log("Start to merge data...")
// Step 2: here comes the important part
var preVolume = 0
while (true) {
var ts = new Date().getTime()
// If any platform has tick event, return
var e = exchange.IO("wait_any")
// Reset Volume at a proper time
if (e.Nano/1000000 - ts > 60000) {
preVolume = 0
}
if (e.Event == 'tick' && e.Ticker.Volume >= preVolume) {
Log(ret, e.Ticker.Last, e.Ticker.Volume)
preVolume = e.Ticker.Volume
}
}
}
Hasil seperti berikut:
Ia dapat dilihat bahawa pada pukul 21:24:44, data syarikat niaga hadapan pertama tiba sebelum yang kedua, dan hasilnya dapat dilihat dengan menambah dua syarikat niaga hadapan. Jika anda menggunakannya untuk membangunkan strategi perdagangan frekuensi tinggi, anda telah menyelesaikan langkah yang sangat penting dan menentukan, iaitu kelajuan, kestabilan dan kebolehpercayaan mendapatkan Tick.
FMZ Quant (dahulu BotVS) adalah platform yang dibuat khas untuk pemaju yang mempunyai keperluan kritikal mengenai kestabilan dan kelajuan strategi. Teknologi protokol lapisan bawah dibangunkan secara bebas, yang boleh dikendalikan di bawah komputer mikro cip tunggal Linux / Windows / Mac / ARM atau juga telefon bimbit, dan kelajuan pesanan sangat cepat.