A quantificação do círculo de moedas é algo novo para mim - leva-me mais perto da quantificação do círculo de moedas.

Autora:Sonhos pequenos, Criado: 2021-06-09 14:30:43, Atualizado: 2023-09-19 21:45:29

img

A quantificação do círculo de moedas é uma nova visão que o leva a aproximar-se do círculo de moedas.

Neste artigo, vamos explorar uma estratégia mais complexa de design de estratégias - o design de estratégias de hedge. Neste artigo, vamos explorar uma estratégia de hedge multi-variedade, que certamente não é desconhecida para os pequenos parceiros que estão familiarizados com o comércio de futuros.

Coberturas de longo prazo

O hedge de longo prazo é simplesmente fazer mais um contrato, fazer um contrato vazio, e esperar três situações para estabilizar simultaneamente:

  • O dinheiro ganho, o dinheiro perdido, o dinheiro perdido, o dinheiro perdido, o dinheiro perdido, o dinheiro perdido.
  • Afinal, o que eu quero dizer é que, se você fizer muito dinheiro com prejuízos, ganhar muito dinheiro sem fazer nada, e se você fizer mais dinheiro com prejuízos, você vai ficar em um equilíbrio, etc.
  • Quem ganha mais, ganha mais, e quem não faz nada, ganha mais.

Outras situações são a queda, a suspensão ou a continuação do investimento.

设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开仓,搞反了就是相反的了),当然这个是理论上的,实际上还要考虑手续费、滑点等因素。

Uma vez que as trocas de moeda digital têm contratos de taxa de câmbio, também há contratos de prazo; e os preços dos contratos de prazo são sempre mais próximos dos preços do mercado atual devido às taxas de câmbio. Então, escolhemos usar contratos de taxa de câmbio e contratos de prazo com vantagem de hedge. Os contratos de prazo optam por um contrato de prazo mais longo, o que evita a frequente configuração de contratos de hedge.

A primeira coisa a fazer é fazer uma diferença de preços em várias variedades.

Depois de familiarizar-se com os princípios básicos, não é preciso apressar-se a escrever estratégias manualmente. Primeiro, faça uma estatística de diferença, desenhe um gráfico e observe a diferença.

Baseamos-nosContrato OKEXPara desenhar, o gráfico no FMZ é muito simples, usando funções bem encapsuladas pode ser muito fácil de desenhar gráficos, biblioteca de gráficos éHighcharts (Highcharts)Os gráficos de gráficos na documentação da API explicam:https://www.fmz.com/api#chart...

Uma vez que são várias variedades, primeiro é preciso determinar a diferença das variedades antes de imprimir o gráfico.

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

De acordo com o código de contrato definido aqui, inicializar configurações de gráficos. Esta configuração de gráficos certamente não pode ser escrita, porque você também não sabe o que fazer com variedades, fazer várias variedades (que são definidas com base no valor de arrDeliveryContractType e arrSwapContractType), então a configuração de gráficos é devolvida por uma função.

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()                                  // 初始化图表内容
    
    // 以下省略.....
}

A seguir, preparamos os dados, usando a interface de mercado agregado do contrato OKEX:

O USDT é um contrato permanente:

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

A taxa de troca de USDT é de aproximadamente:

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

Nós escrevemos uma função para lidar com as chamadas dessas duas interfaces, transformando os dados em um formato:

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 
}

E escrever uma função para processar o código do contrato.

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

O que resta é fazer o iteração de pares de dados obtidos, calcular o diferencial, produzir gráficos, etc. Aqui está a diferença entre os contratos do segundo trimestre 210 924 e os contratos permanentes. O código completo é:

// 临时参数
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)
    }
}

Disco real em funcionamento

img

Corra um pouco.

img

A diferença é muito grande.img


Relacionados

Mais.

Biologia da órbitaO próximo ano do OKEX pode ser de liquidez insuficiente ou algo assim, cair quando cair, subir quando subir.

Quantificação da microbiologiaMuito bem, muito bem.