Bagaimana untuk memecahkan had penerimaan Tick barangan niaga hadapan

Penulis:rubi, Dicipta: 2018-08-27 15:58:30, Dikemas kini:

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:

img

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, anda boleh dengan mudah mengendalikan akaun syarikat niaga hadapan yang berbeza, dan menggabungkan harga mereka untuk memproses pesanan pada kelajuan terpantas. Dalam keadaan normal, kita boleh mendapatkan dua Tick setiap saat dari syarikat niaga hadapan, tetapi melalui teknologi menggabungkan pasaran, mengambil MA801 sebagai contoh, kita boleh mendapatkan Tick dengan sehingga enam kali setiap saat dan tanpa pengulangan.

img

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.

img

Kod adalah seperti berikut:

img

Kesan demo

img

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



Lebih lanjut