
Dalam artikel sebelumnya, kami telah memikirkan dan mereka strategi grid berbilang pelbagai yang mudah. Seterusnya, kami akan terus belajar dan bergerak ke hadapan di jalan perdagangan kuantitatif. Dalam artikel ini, kita akan membincangkan reka bentuk strategi yang lebih kompleks - reka bentuk strategi lindung nilai. Artikel ini merancang untuk mereka bentuk strategi lindung nilai rentas tempoh berbilang pelbagai Bercakap tentang strategi lindung nilai merentas tempoh, mereka yang biasa dengan perdagangan niaga hadapan mesti biasa dengannya. Pemula mungkin belum memahami konsep ini, jadi mari kita terangkan secara ringkas konsep lindung nilai antara tempoh.
Lindung nilai merentas tempoh hanya bermaksud pergi panjang pada satu kontrak, pendek pada kontrak lain dan menunggu tiga situasi berikut untuk menutup kedudukan secara serentak:
Dalam kes lain, terdapat kerugian terapung, dan anda boleh menahannya atau terus meningkatkan kedudukan anda. (Memandangkan turun naik perbezaan harga adalah lebih ringan daripada turun naik unilateral, risiko relatif adalah lebih kecil. Sila ambil perhatian bahawa ia 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开仓,搞反了就是相反的了),当然这个是理论上的,实际上还要考虑手续费、滑点等因素。
Kerana pertukaran mata wang digital mempunyai kedua-dua kontrak penghantaran dan kontrak kekal. Di samping itu, disebabkan oleh kadar pembiayaan, harga kontrak kekal sentiasa hampir dengan harga spot. Kemudian kami memilih untuk menggunakan kontrak penghantaran dan kontrak kekal untuk lindung nilai dan timbang tara. Pilih kontrak jangka panjang untuk penghantaran supaya anda tidak perlu menyediakan kontrak lindung nilai dengan kerap.
Sebaik sahaja anda sudah biasa dengan prinsip asas, anda tidak perlu tergesa-gesa untuk menulis strategi. Mula-mula, buat statistik tentang perbezaan harga, lukis graf, dan perhatikan perbezaan harga. Mari belajar cara melukis carta strategi berbilang pelbagai.
Kami berdasarkanKontrak OKEXUntuk mereka bentuk, lukisan pada FMZ adalah sangat mudah, anda boleh melukis dengan mudah menggunakan fungsi berpakej, perpustakaan carta adalahHighcharts. Melukis penerangan fungsi pada dokumentasi API: https://www.fmz.com/api#chart...
Memandangkan terdapat pelbagai jenis, anda mesti terlebih dahulu menentukan perbezaan harga varieti tersebut untuk dicetak sebelum melukis carta. Mula-mula tulis dua tatasusunan dalam kod untuk mewakili 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"] // 交割合约
Mulakan konfigurasi carta mengikut kod kontrak yang ditetapkan di sini. Konfigurasi carta ini mestilah tidak berkod keras, kerana anda tidak tahu produk yang hendak dibuat atau bilangan produk yang perlu dibuat (ini ditentukan oleh nilai arrDeliveryContractType dan arrSwapContractType), jadi konfigurasi carta 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() // 初始化图表内容
// 以下省略.....
}
Seterusnya, mari sediakan data Kami menggunakan antara muka pasaran agregat kontrak OKEX:
Kontrak Kekal USDT:
https://www.okex.com/api/v5/market/tickers?instType=SWAP
Kontrak penghantaran USDT:
https://www.okex.com/api/v5/market/tickers?instType=FUTURES
Kami menulis fungsi untuk mengendalikan panggilan kedua-dua antara muka ini dan meletakkan data ke 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
}
Tulis fungsi lain untuk memproses kod kontrak
function formatSymbol(originalSymbol) {
var arr = originalSymbol.split("-")
return [arr[0] + "_" + arr[1], arr[0], arr[1]]
}
Apa yang tinggal ialah memasangkan secara berulang data yang diperoleh, mengira perbezaan harga, mengeluarkan carta, dsb. Apa yang diuji di sini ialah perbezaan harga antara kontrak suku tahun berikutnya 210924 dan kontrak kekal. Kod 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)
}
}

Lari sekejap~

Perhatikan perbezaan harga dahulu! 