이전 기사 우리는 함께 생각했고, 간단한 다품질 격자 전략을 설계했습니다. 다음 기사에는 거래의 수량화를 위해 계속 공부했습니다. 다음 기사에서는 조금 더 복잡한 전략 설계 - 헤지 전략 설계에 대해 이야기했습니다. 이번 기사에서는 다품질 연장 헤지 전략을 설계했습니다.
단기 헤딩은 단순히 한 개의 계약을 하고, 한 개의 계약을 공허하게 하고, 세 가지 상황을 기다린 다음 (공허한, 더 많은) 공허하게 하는 것입니다.
다른 경우에는 파손, 침체 또는 계속 거래가 된다. (비율 변동이 단편 변동보다 완화되기 때문에 상대적으로 위험이 작기 때문에 주의는 상대적일 뿐이다.)
设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开仓,搞反了就是相反的了),当然这个是理论上的,实际上还要考虑手续费、滑点等因素。
디지털 화폐 거래소에는 거래율 계약이 있기 때문에 상속 계약도 있습니다. 그리고 상속 계약의 가격은 자본 요금으로 인해 항상 현장 가격에 가깝습니다. 그러면 우리는 거래율 계약과 상속 계약 헤지프리드를 선택합니다. 거래율 계약은 더 긴 기간 계약을 선택하여 자주 헤지프리를 설정하지 않습니다.
기본 원리를 익히면, 서두르지 않고 전략을 작성할 수 있습니다. 먼저 차이 통계, 그래프를 그리며 차이를 관찰하십시오. 함께 다양한 전략을 배우십시오.
우리는OKEX 계약FMZ에서 그래프를 그리는 것은 매우 간단합니다. 포장된 함수를 사용하여 매우 쉽게 그래프를 만들 수 있습니다. 그래프 라이브러리는하이라이트 차트◎ API 문서의 그림자 함수는 다음과 같습니다:https://www.fmz.com/api#chart...
여러 종류이기 때문에 그림을 그리기 전에 먼저 그 종류의 차이를 결정해야 한다. 코드에는 두 개의 대수열을 먼저 작성하여 계약서를 표시한다.
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"] // 交割合约
여기서 설정된 계약 코드에 따라 그래프 구성을 초기화한다. 이 그래프 구정은 확실히 쓸 수 없다. 왜냐하면 당신은 어떤 종류를 해야 할지 모르기 때문에, 몇 가지 종류를 해야 한다. (이것들은 arrDeliveryContractType와 arrSwapContractType의 값에 의해 결정된다.) 그래서 그래프 구정은 함수로 반환된다.
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() // 初始化图表内容
// 以下省略.....
}
다음으로 데이터를 준비합니다. 우리는 OKEX 계약의 통합 시장 인터페이스를 사용합니다.
유로트 (USDT) 영구 계약:
https://www.okex.com/api/v5/market/tickers?instType=SWAP
USDT 교환 비율은 약:
https://www.okex.com/api/v5/market/tickers?instType=FUTURES
우리는 이 두 인터페이스의 호출을 처리하는 함수를 작성하고 데이터를 한 형태로 만듭니다.
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 formatSymbol(originalSymbol) {
var arr = originalSymbol.split("-")
return [arr[0] + "_" + arr[1], arr[0], arr[1]]
}
이데올로기를 이용해서 이더리얼 매칭을 하고, 차트를 출력하고, 차트를 계산하는 것만으로도 됩니다. 여기서는 2분기 계약 210924과 영구 계약의 차이점을 테스트합니다. 전 코드는:
// 临时参数
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)
}
}
잠시 달려가~
이 모든 것이 다른 나라와 다른 나라와 다른 나라와 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들과 다른 나라들.
궤도 생물이것은 곧바로 실행될 수 있습니다, OKEX의 다음 시즌은 유동성이 부족하거나 어떤 것일 수 있습니다.
소모학 양성아주 잘하고, 공부하고,