
Trong bài viết trước, chúng ta đã nghĩ đến và thiết kế một chiến lược lưới đa dạng đơn giản. Tiếp theo, chúng ta sẽ tiếp tục tìm hiểu và tiến lên trên con đường giao dịch định lượng. Trong bài viết này, chúng ta sẽ thảo luận về một thiết kế chiến lược phức tạp hơn - thiết kế chiến lược phòng ngừa rủi ro. Bài viết này có kế hoạch thiết kế một chiến lược phòng ngừa rủi ro đa dạng xuyên thời kỳ. Nói về các chiến lược phòng ngừa rủi ro xuyên thời kỳ, những người quen thuộc với giao dịch tương lai chắc hẳn đã quen thuộc với chúng. Người mới có thể chưa hiểu những khái niệm này, vì vậy trước tiên chúng ta hãy giải thích ngắn gọn về khái niệm phòng ngừa rủi ro giữa các giai đoạn.
Phòng ngừa rủi ro chéo kỳ hạn đơn giản có nghĩa là mua một hợp đồng, bán một hợp đồng khác và chờ ba tình huống sau để đóng vị thế cùng lúc:
Trong những trường hợp khác, sẽ có khoản lỗ thả nổi và bạn có thể giữ nguyên hoặc tiếp tục tăng vị thế của mình. (Vì chênh lệch giá nhẹ hơn nhiều so với chênh lệch giá đơn phương nên rủi ro tương đối nhỏ hơn. Xin lưu ý rằng rủi ro này chỉ mang tính tương đối!)
设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开仓,搞反了就是相反的了),当然这个是理论上的,实际上还要考虑手续费、滑点等因素。
Bởi vì các sàn giao dịch tiền kỹ thuật số có cả hợp đồng giao hàng và hợp đồng vĩnh viễn. Ngoài ra, do tỷ lệ tài trợ, giá của hợp đồng vĩnh viễn luôn gần với giá giao ngay. Sau đó, chúng tôi chọn sử dụng hợp đồng giao hàng và hợp đồng vĩnh viễn để phòng ngừa rủi ro và chênh lệch giá. Chọn hợp đồng giao hàng dài hạn hơn để bạn không phải thường xuyên thiết lập hợp đồng phòng ngừa rủi ro.
Khi bạn đã quen với các nguyên tắc cơ bản, bạn không cần phải vội vàng viết chiến lược. Đầu tiên, hãy thống kê mức chênh lệch giá, vẽ biểu đồ và quan sát mức chênh lệch giá. Hãy cùng học cách vẽ biểu đồ chiến lược đa dạng.
Chúng tôi dựa trênHợp đồng OKEXĐể thiết kế, vẽ trên FMZ rất đơn giản, bạn có thể dễ dàng vẽ bằng các hàm đóng gói, thư viện biểu đồ làHighcharts. Mô tả chức năng vẽ trên tài liệu API: https://www.fmz.com/api#chart...
Vì có nhiều loại nên trước tiên bạn phải xác định mức chênh lệch giá của những loại đó để in trước khi vẽ biểu đồ. Đầu tiên hãy viết hai mảng vào mã để biểu diễn các hợp đồng cần thực hiện.
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"] // 交割合约
Khởi tạo cấu hình biểu đồ theo bộ mã hợp đồng được đặt tại đây. Cấu hình biểu đồ này không được mã hóa cứng, vì bạn không biết phải tạo sản phẩm nào hoặc tạo bao nhiêu sản phẩm (những điều này được xác định bởi các giá trị của arrDeliveryContractType và arrSwapContractType), do đó cấu hình biểu đồ được trả về bởi một hàm .
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() // 初始化图表内容
// 以下省略.....
}
Tiếp theo, chúng ta hãy chuẩn bị dữ liệu. Chúng tôi sử dụng giao diện thị trường tổng hợp của hợp đồng OKEX:
Hợp đồng vĩnh viễn USDT:
https://www.okex.com/api/v5/market/tickers?instType=SWAP
Hợp đồng giao hàng USDT:
https://www.okex.com/api/v5/market/tickers?instType=FUTURES
Chúng tôi viết một hàm để xử lý các cuộc gọi của hai giao diện này và đưa dữ liệu vào một định dạng:
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
}
Viết một hàm khác để xử lý mã hợp đồng
function formatSymbol(originalSymbol) {
var arr = originalSymbol.split("-")
return [arr[0] + "_" + arr[1], arr[0], arr[1]]
}
Công việc còn lại là ghép nối dữ liệu thu được theo từng lần lặp, tính toán chênh lệch giá, xuất biểu đồ, v.v. Những gì được kiểm tra ở đây là sự chênh lệch giá giữa hợp đồng quý tiếp theo 210924 và hợp đồng vĩnh viễn. Mã hoàn chỉnh:
// 临时参数
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)
}
}

Chạy một lúc nhé~

Trước tiên hãy quan sát sự chênh lệch giá! /tải lên/tài sản/16a9cc6330dfc9c7fb21.jpg