Perdagangan kuantitatif dalam lingkaran mata wang adalah sesuatu yang baru - membawa anda lebih dekat kepada kuantitatif dalam lingkaran mata wang.

Penulis:Mimpi kecil, Dicipta: 2021-06-09 14:30:43, Dikemas kini: 2023-09-19 21:45:29

img

Perdagangan kuantitatif lingkaran mata wang yang baru muncul untuk membawa anda lebih dekat ke lingkaran mata wang (7).

Dalam artikel sebelumnya, kami telah merancang strategi grid pelbagai jenis yang mudah. Seterusnya, kami terus belajar dalam perjalanan untuk mengukur perdagangan. Dalam artikel ini, kami akan mengkaji reka bentuk strategi yang lebih rumit - reka bentuk strategi lindung nilai. Dalam artikel ini, kami merancang strategi lindung nilai jangka panjang yang pelbagai jenis, yang dikatakan bahawa strategi lindung nilai jangka panjang pasti tidak asing kepada rakan-rakan kecil yang biasa dengan perdagangan niaga hadapan.

Hedging jangka panjang

Dengan kata lain, jangka panjang adalah satu lagi kontrak, satu lagi kontrak kosong, dan menunggu tiga keadaan untuk mengimbangi (lebih, kosong):

  • Menghasilkan lebih banyak wang, kehilangan wang tanpa melakukan apa-apa, satu bahagian (pengucapan bahasa Inggeris) lebih banyak daripada satu bahagian (pengucapan bahasa Inggeris) apabila diselaraskan, keuntungan dan kerugian diimbangi akan mendapat sebahagian daripada keuntungan.
  • Buat banyak wang rugi, buat banyak wang kosong, buat banyak wang rugi, buat lebih banyak wang rugi, dan buat lebih banyak wang rugi.
  • Orang yang banyak mendapat wang, orang yang tidak bekerja juga mendapat wang, dan itu juga ingin menghalang!

Keadaan lain ialah mengalami kerugian besar, bergelut atau terus meningkatkan saham. (Sebab pergerakan perbezaan lebih banyak daripada turun naik sepihak, 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开仓,搞反了就是相反的了),当然这个是理论上的,实际上还要考虑手续费、滑点等因素。

Oleh kerana pertukaran mata wang digital mempunyai kontrak peratusan dan kontrak kekal; dan harga kontrak kekal sentiasa lebih dekat dengan harga semasa kerana terdapat kadar dana; maka kita memilih untuk menggunakan kontrak peratusan dan kontrak kekal untuk mempertingkatkan peratusan; kontrak peratusan memilih kontrak yang lebih lama, sehingga tidak perlu menetapkan kontrak peratusan yang kerap;

Pertama, kita perlu membuat perbandingan harga pelbagai jenis.

Setelah mengetahui asas-asasnya, anda tidak perlu tergesa-gesa menulis strategi. Mulakan dengan membuat statistik perbezaan harga, melukis grafik, melihat perbezaan. Bersama-sama belajar beberapa jenis strategi gambar.

Kami berasaskanKontrak OKEXUntuk reka bentuk, gambar di FMZ sangat mudah, dengan fungsi yang terbungkus, gambar boleh dibuat dengan mudah, perpustakaan carta adalahCarta tinggi◎ Fungsi gambar dalam dokumen API menerangkan:https://www.fmz.com/api#chart...

Oleh kerana terdapat banyak jenis, anda perlu menentukan perbezaan jenis tersebut sebelum mencetak gambar. Pertama, anda perlu menulis dua aritmatika dalam kod untuk menunjukkan kontrak yang akan dibuat.

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"]  // 交割合约

Mengikut kod kontrak yang ditetapkan di sini, konfigurasi grafik initialized. Konfigurasi grafik ini pasti tidak boleh ditulis mati, kerana anda juga tidak tahu apa yang harus dilakukan varietas, melakukan beberapa varietas (yang ditentukan berdasarkan nilai arrDeliveryContractType dan arrSwapContractType), jadi konfigurasi grafik dikembalikan oleh 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()                                  // 初始化图表内容
    
    // 以下省略.....
}

Di sini, kita akan menyediakan data, dan kami menggunakan antara muka pasaran agregat kontrak OKEX:

USDT Perpetual Contract:

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

Peratusan pertukaran USDT adalah:

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

Kami menulis fungsi untuk menangani panggilan antara kedua-dua antara muka, dan membuat data dalam satu 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 tulis kod kontrak yang akan diuruskan oleh fungsi.

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

Selebihnya adalah menggunakan data yang diperolehi untuk mencocokkan secara berulang, mengira perbezaan, output grafik, dan sebagainya. Di sini, kami menguji perbezaan kontrak kedua suku 210,924 dan kontrak kekal. Kode penuh:

// 临时参数
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 sebenar berjalan

img

Berlarilah seketika~

img

Cuba lihat perbezaan harga!img


Berkaitan

Lebih lanjut

Makhluk orbitIni boleh berjalan terus, OKEX musim depan mungkin tidak mempunyai kecairan yang mencukupi atau apa-apa, jatuh ketika jatuh, ribut ketika naik.

Kuantiti KecilTidak, tidak, tidak, tidak.