Apakah Tick? Sebagai contoh, data transaksi boleh dibayangkan sebagai sungai, dan Tick adalah data bahagian sungai. Granulariti terbaik niaga hadapan domestik adalah dua kali sesaat. Dengan kata lain, niaga hadapan domestik menghantar sehingga satu Tick pada 500 mili saat.
Bagaimana kebanyakan perisian domestik (bermaksud China dalam artikel ini) mendapat Tick?
Kemudian sering terdapat lebih daripada satu urus niaga dalam masa 500 milidetik, dan situasi tertentu di dalamnya adalah kotak hitam sepenuhnya.
Kebanyakan kerangka perdagangan di pasaran menggunakan mod callback, yang bermaksud bahawa terdapat paling banyak satu Tick dalam 500 milidetik dalam keadaan ideal. Di bawah keadaan sebenar pada Bar / onTick, ia adalah baik untuk tidak terlepas Tick. mengapa? Kerana anda perlu berurusan dengan keseluruhan kod logik dalam fungsi onBar / onTick, yang memerlukan banyak masa. Sama ada anda mahu atau tidak, logik strategi anda mesti terganggu, anda mesti menggunakan keadaan tidak aktif, seperti ini:
Mekanisme yang lebih maju
Platform perdagangan kuantitatif FMZ tidak menggunakan mekanisme panggilan balik ke belakang ini, tetapi menggunakan mekanisme fungsi utama yang tidak mengganggu logik strategi, yang membolehkan pengguna mengawal aliran strategi dengan lebih semula jadi.
Jangan katakan bahawa bahasa skrip adalah perlahan, kecuali anda menggunakannya untuk latihan rangkaian saraf, walaupun ia boleh digunakan pada bila-bila masa selepas menambahkan Jit hot compilation. Strategi peringkat kemasukan tidak ditulis di sini, dan bercakap tentang sintesis Tick frekuensi tinggi niaga hadapan. Sebagai contoh, jika kita menyambung ke syarikat niaga hadapan, kita hanya boleh menerima pasaran syarikat niaga hadapan ini. Kelajuan dan kualiti penerimaan kita berkaitan dengan rangkaian kita sendiri, dan juga berkaitan dengan beban mesin depan syarikat niaga hadapan.
Jadi, bagaimana kita boleh mendapatkan data Tick niaga hadapan yang lebih tepat lebih cepat? Di bawah model strategi FMZ Quant
Demo kod
Kod ini hanya boleh digunakan di pasaran sebenar dan tidak boleh diuji kembali. Apabila menambah bursa, banyak syarikat niaga hadapan boleh ditambahkan untuk menjalankan pemprosesan penggabungan serentak pasaran.
Kod adalah seperti berikut:
Kesan demo
Seperti yang ditunjukkan di atas, pada 21:24:44, data syarikat niaga hadapan pertama lebih awal daripada yang kedua. Menambah dua syarikat niaga hadapan boleh menunjukkan kesan, jika anda menambah lebih daripada 5 syarikat niaga hadapan untuk bergabung bersama, maka anda pada dasarnya tidak mempunyai kemungkinan kehilangan Tick; jika anda membangunkan strategi perdagangan frekuensi tinggi, anda telah menyelesaikan langkah yang sangat penting dan menentukan, iaitu kelajuan dan kestabilan penerimaan Tick.
Dapatkan kod lengkap:
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
}
}
}