Bài trước chúng tôi đã cùng nhau suy nghĩ, thiết kế một chiến lược lưới đa dạng đơn giản. Sau đó, chúng tôi tiếp tục học trên con đường định lượng giao dịch, đi trước. Bài này chúng tôi sẽ khám phá một chiến lược phức tạp hơn - thiết kế chiến lược đầu cơ.
Trong khi đó, các nhà đầu tư có thể sử dụng các giao dịch này để tạo ra một giao dịch có giá trị cao hơn, và các nhà đầu tư có thể sử dụng các giao dịch này để tạo ra một giao dịch có giá trị cao hơn.
Các trường hợp khác là trượt lỗ, trì trệ hoặc tiếp tục tăng giá. (Vì biến động chênh lệch giá nhiều hơn so với biến động đơn phương giảm nhẹ, rủi ro tương đối nhỏ, chỉ cần chú ý là 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开仓,搞反了就是相反的了),当然这个是理论上的,实际上还要考虑手续费、滑点等因素。
Vì các sàn giao dịch tiền kỹ thuật số có giao dịch tỷ lệ giao dịch, cũng có hợp đồng vĩnh cửu. Và giá của hợp đồng vĩnh cửu luôn gần với giá hiện tại vì có mức phí vốn. Vì vậy, chúng tôi chọn sử dụng giao dịch tỷ lệ giao dịch và hợp đồng vĩnh cửu để có được lợi nhuận.
Sau khi đã quen thuộc với các nguyên tắc cơ bản, bạn có thể không vội vàng viết chiến lược. Trước tiên, hãy tạo số liệu thống kê chênh lệch giá, vẽ biểu đồ, quan sát chênh lệch giá. Cùng nhau học nhiều hình ảnh chiến lược.
Chúng tôi dựa trênHợp đồng OKEXĐể thiết kế, vẽ biểu đồ trên FMZ rất đơn giản, sử dụng các hàm được đóng gói dễ dàng vẽ biểu đồ, thư viện biểu đồ làBiểu đồ cao◎ Chức năng vẽ trên tài liệu API:https://www.fmz.com/api#chart...
Vì có nhiều giống, trước khi vẽ bản đồ, bạn phải xác định sự khác biệt của các giống đó.
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"] // 交割合约
Theo mã hợp đồng được đặt ở đây, cấu hình biểu đồ được khởi tạo. cấu hình biểu đồ này chắc chắn không thể được viết chết, vì bạn cũng không biết phải làm gì, làm vài loại (đây được xác định dựa trên giá trị của arrDeliveryContractType và arrSwapContractType), vì vậy 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 tôi 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:
USDT là một hợp đồng vĩnh viễn:
https://www.okex.com/api/v5/market/tickers?instType=SWAP
Mức giao dịch USDT là:
https://www.okex.com/api/v5/market/tickers?instType=FUTURES
Chúng ta viết một hàm để xử lý các cuộc gọi giữa hai giao diện 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 lại một hàm xử lý hợp đồng
function formatSymbol(originalSymbol) {
var arr = originalSymbol.split("-")
return [arr[0] + "_" + arr[1], arr[0], arr[1]]
}
Những gì còn lại là kết hợp dữ liệu lặp lại, tính toán chênh lệch, đầu ra biểu đồ, v.v. Ở đây, chúng tôi kiểm tra chênh lệch giữa hợp đồng quý 2 210 924 và hợp đồng vĩnh viễn. Mã đầy đủ:
// 临时参数
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)
}
}
Hãy chạy một chút.
Nhìn vào sự chênh lệch giá, hãy nói lại!
Động vật quỹ đạoCó thể chạy trực tiếp, mùa sau của OKEX có thể là không đủ thanh khoản hoặc bất cứ điều gì, giảm khi giảm, thổi lên khi tăng.
Kiểu học số lượngRất tốt, rất tốt, học tập.