Perdagangan Kuantitatif Lingkaran Mata Uang Baru - Membawa Anda Lebih Dekat Ke Kuantitatif Lingkaran Mata Uang

Penulis:Mimpi kecil, Dibuat: 2021-06-09 14:30:43, Diperbarui: 2023-09-19 21:45:29

img

Perdagangan Kuantitatif Lingkaran Mata Uang Yang Baru Terlihat Yang Membawa Anda Mendekat Ke Kuantitatif Lingkaran Mata Uang (7).

Pada artikel sebelumnya, kita berpikir bersama, merancang strategi grid multi-varietas sederhana. Selanjutnya, kita terus belajar di jalan untuk mengkuantifikasi perdagangan, maju. Pada artikel ini, kita akan membahas desain strategi yang sedikit lebih rumit - desain strategi hedging. Pada artikel ini, kita akan merancang strategi hedging multi-varietas, yang diyakini tidak asing bagi teman-teman muda yang terbiasa dengan perdagangan futures.

Hedging jangka panjang

Dengan kata lain, hedging jangka panjang adalah melakukan satu kontrak lagi, membuat satu kontrak kosong, dan menunggu tiga situasi untuk berdamai:

  • Jika Anda membuat lebih banyak uang, jika Anda tidak melakukan banyak uang, jika Anda membuat lebih banyak uang, maka Anda akan mendapatkan lebih banyak uang.
  • Jika Anda memiliki uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak, uang yang lebih banyak.
  • Orang yang banyak menghasilkan uang, orang yang tidak bekerja juga menghasilkan uang, itu juga ingin mendapatkan uang!

Situasi lain adalah mengalami kerugian, menahan diri atau melanjutkan perdagangan. Karena volatilitas harga lebih banyak daripada volatilitas sepihak yang mereda, risiko relatif lebih kecil, perhatikan hanya relatif!)

设A1为合约A在1时刻的价格,设B1为合约B在1时刻的价格,此时做空A合约,做空价格A1,做多B合约,做多价格B1。
设A2为合约A在2时刻的价格,设B2为合约B在2时刻的价格,此时平仓A合约(平空),平空价格A2,平仓B合约(平多),平多价格B2。

1时刻的差价:A1 - B1 = X 
2时刻的差价:A2 - B2 = Y 
X - Y = A1 - B1 - (A2 - B2)
X - Y = A1 - B1 - A2 + B2
X - Y = A1 - A2 + B2 - B1

可以看到,A1 - A2 就是A合约平仓的盈利差价。
B2 - B1就是B合约平仓的盈利差价。只要这两个平仓总体是正数,即:A1 - A2 + B2 - B1 > 0 就是盈利的。也就是说只要X - Y > 0。
因为:X - Y = A1 - A2 + B2 - B1

得出结论,只要开仓时的差价X大于平仓时的差价Y就是盈利的(注意是做空A,做多B开仓,搞反了就是相反的了),当然这个是理论上的,实际上还要考虑手续费、滑点等因素。

Karena pertukaran mata uang digital memiliki kontrak rasio, ada juga kontrak jangka panjang. Dan harga kontrak jangka panjang selalu lebih dekat dengan harga saat ini karena ada biaya modal. Jadi kita memilih untuk menggunakan kontrak rasio dan kontrak jangka panjang untuk hedging. Kontrak jangka panjang dipilih, sehingga tidak perlu sering mengatur kontrak hedging.

Pertama, mari kita mulai dengan statistik harga yang berbeda.

Setelah mengetahui dasar-dasarnya, Anda tidak perlu terburu-buru menulis strategi. Pertama, buatlah statistik perbedaan, gambar grafik, lihat perbedaan. Bersama-sama belajar beberapa strategi grafik.

Kami didasarkan padaKontrak OKEXUntuk mendesain, menggambar di FMZ sangat sederhana, menggunakan fungsi yang terbungkus dapat menggambar dengan mudah, perpustakaan grafik adalahHighchartFungsi gambar pada dokumen API menjelaskan:https://www.fmz.com/api#chart...

Karena ada banyak varietas, Anda harus menentukan perbedaan varietas sebelum mencetak gambar. Pertama, tulis dua array dalam kode untuk menunjukkan kontrak yang akan dilakukan.

var arrSwapContractType = ["BTC-USDT-SWAP", "LTC-USDT-SWAP", "ETH-USDT-SWAP", "ETC-USDT-SWAP"]   // 永续合约
var arrDeliveryContractType = ["BTC-USDT-210924", "LTC-USDT-210924", "ETH-USDT-210924", "ETC-USDT-210924"]  // 交割合约

Konfigurasi grafik initialized berdasarkan kode kontrak yang ditetapkan di sini. Konfigurasi grafik ini pasti tidak bisa ditulis mati, karena Anda juga tidak tahu apa yang harus dilakukan varietas, melakukan beberapa varietas (ini ditentukan berdasarkan nilai arrDeliveryContractType dan arrSwapContractType), sehingga konfigurasi grafik dikembalikan oleh sebuah fungsi.

function createCfg(symbol) {
    var cfg = {
        extension: {
            // 不参于分组,单独显示,默认为分组 'group'
            layout: 'single', 
            // 指定高度,可以设置为字符串,"300px",设置数值300会自动替换为"300px"
            height: 300,      
            // 指定宽度占的单元值,总值为12
            col: 6
        },
        title: {
            text: symbol
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'plus',
            data: []
        }]
    }

    return cfg
}

function main() {
    // 声明arrCfg
    var arrCfg = []                                    // 声明一个数组,用来存放图表配置信息
    _.each(arrSwapContractType, function(ct) {         // 迭代记录永续合约代码的数组,用合约名称XXX-USDT部分作为参数传给createCfg函数,构造图表配置信息,返回
        arrCfg.push(createCfg(formatSymbol(ct)[0]))    // createCfg返回的图表配置信息push进arrCfg数组
    })
    var objCharts = Chart(arrCfg)                      // 调用FMZ平台的图表函数Chart,创建图表控制对象objCharts
    objCharts.reset()                                  // 初始化图表内容
    
    // 以下省略.....
}

Berikutnya kita akan mempersiapkan data, dan kita menggunakan antarmuka pasar agregat kontrak OKEX:

USDT kontrak permanen:

https://www.okex.com/api/v5/market/tickers?instType=SWAP

Perbandingan transaksi USDT adalah:

https://www.okex.com/api/v5/market/tickers?instType=FUTURES

Kita menulis sebuah fungsi untuk menangani panggilan dari kedua antarmuka ini dan membuat data dalam format:

function getTickers(url) {
    var ret = []
    try {
        var arr = JSON.parse(HttpQuery(url)).data
        _.each(arr, function(ele) {
            ret.push({
                bid1: parseFloat(ele.bidPx),             // 买一价
                bid1Vol: parseFloat(ele.bidSz),          // 买一价的量
                ask1: parseFloat(ele.askPx),             // 卖一价
                ask1Vol: parseFloat(ele.askSz),          // 卖一价的量
                symbol: formatSymbol(ele.instId)[0],     // 格式成交易对
                type: "Futures",                         // 类型
                originalSymbol: ele.instId               // 原始合约代码
            })
        })
    } catch (e) {
        return null 
    }
    return ret 
}

Kemudian tulislah kode kontrak untuk fungsi yang akan diproses.

function formatSymbol(originalSymbol) {
    var arr = originalSymbol.split("-")
    return [arr[0] + "_" + arr[1], arr[0], arr[1]]
}

Yang tersisa adalah mengkombinasikan data yang diperoleh, menghitung perbedaan, output grafik, dll. Di sini kita menguji perbedaan antara kontrak kedua kuartal 210 924 dan kontrak permanen. Kode lengkap:

// 临时参数
var arrSwapContractType = ["BTC-USDT-SWAP", "LTC-USDT-SWAP", "ETH-USDT-SWAP", "ETC-USDT-SWAP"]
var arrDeliveryContractType = ["BTC-USDT-210924", "LTC-USDT-210924", "ETH-USDT-210924", "ETC-USDT-210924"]
var interval = 2000

function createCfg(symbol) {
    var cfg = {
        extension: {
            // 不参于分组,单独显示,默认为分组 'group'
            layout: 'single', 
            // 指定高度,可以设置为字符串,"300px",设置数值300会自动替换为"300px"
            height: 300,      
            // 指定宽度占的单元值,总值为12
            col: 6
        },
        title: {
            text: symbol
        },
        xAxis: {
            type: 'datetime'
        },
        series: [{
            name: 'plus',
            data: []
        }]
    }

    return cfg
}

function formatSymbol(originalSymbol) {
    var arr = originalSymbol.split("-")
    return [arr[0] + "_" + arr[1], arr[0], arr[1]]
}

function getTickers(url) {
    var ret = []
    try {
        var arr = JSON.parse(HttpQuery(url)).data
        _.each(arr, function(ele) {
            ret.push({
                bid1: parseFloat(ele.bidPx), 
                bid1Vol: parseFloat(ele.bidSz), 
                ask1: parseFloat(ele.askPx), 
                ask1Vol: parseFloat(ele.askSz), 
                symbol: formatSymbol(ele.instId)[0], 
                type: "Futures", 
                originalSymbol: ele.instId
            })
        })
    } catch (e) {
        return null 
    }
    return ret 
}

function main() {
    // 声明arrCfg
    var arrCfg = []
    _.each(arrSwapContractType, function(ct) {
        arrCfg.push(createCfg(formatSymbol(ct)[0]))
    })
    var objCharts = Chart(arrCfg)
    objCharts.reset()
    
    while (true) {
        // 获取行情数据        
        var deliveryTickers = getTickers("https://www.okex.com/api/v5/market/tickers?instType=FUTURES")
        var swapTickers = getTickers("https://www.okex.com/api/v5/market/tickers?instType=SWAP")
        if (!deliveryTickers || !swapTickers) {
            Sleep(2000)
            continue
        }

        var tbl = {
            type : "table",
            title : "交割-永续差价",
            cols : ["交易对", "交割", "永续", "正对冲", "反对冲"],
            rows : []
        }
        
        var subscribeDeliveryTickers = []
        var subscribeSwapTickers = []
        _.each(deliveryTickers, function(deliveryTicker) {
            _.each(arrDeliveryContractType, function(symbol) {
                if (deliveryTicker.originalSymbol == symbol) {
                    subscribeDeliveryTickers.push(deliveryTicker)
                }
            })
        })
        _.each(swapTickers, function(swapTicker) {
            _.each(arrSwapContractType, function(symbol) {
                if (swapTicker.originalSymbol == symbol) {
                    subscribeSwapTickers.push(swapTicker)
                }
            })
        })
        
        var pairs = []
        var ts = new Date().getTime()
        _.each(subscribeDeliveryTickers, function(deliveryTicker) {
            _.each(subscribeSwapTickers, function(swapTicker) {
                if (deliveryTicker.symbol == swapTicker.symbol) {
                    var pair = {symbol: swapTicker.symbol, swapTicker: swapTicker, deliveryTicker: deliveryTicker, plusDiff: deliveryTicker.bid1 - swapTicker.ask1, minusDiff: deliveryTicker.ask1 - swapTicker.bid1}
                    pairs.push(pair)
                    tbl.rows.push([pair.symbol, deliveryTicker.originalSymbol, swapTicker.originalSymbol, pair.plusDiff, pair.minusDiff])
                    for (var i = 0 ; i < arrCfg.length ; i++) {
                        if (arrCfg[i].title.text == pair.symbol) {
                            objCharts.add([i, [ts, pair.plusDiff]])
                        }                        
                    }                    
                }
            })
        })

        LogStatus(_D(), "\n`" + JSON.stringify(tbl) + "`")        
        Sleep(interval)
    }
}

Disk nyata berjalan

img

Berlarilah sebentar.

img

Perhatikan perbedaan harga!img


Berkaitan

Lebih banyak

Makhluk di lintasanIni bisa berjalan langsung, OKEX musim depan mungkin tidak cukup likuiditas atau apa, jatuh ketika jatuh, naik ketika naik.

Kuantitas KecilSaya tidak tahu apa yang akan terjadi.