0
focar em
1
Seguidores

Pensando sobre a movimentação de ativos por meio da estratégia de hedge de contratos

Criado em: 2020-10-20 16:48:32, atualizado em: 2023-09-26 20:59:29
comments   2
hits   2374

Pensando sobre a movimentação de ativos por meio da estratégia de hedge de contratos

Pensando sobre a movimentação de ativos por meio da estratégia de hedge de contratos

Houve muitas notícias no mundo das criptomoedas recentemente, e notícias sobre exchanges também estão circulando por todo lugar. Por um tempo, todos os entusiastas de criptomoedas ficaram em pânico, preocupados com a segurança de seus ativos de blockchain. Há muitos pequenos anúncios em vários grupos de criptomoedas oferecendo descontos de 10% ou 20% em moedas de segunda mão ociosas. Há muitas pessoas que buscam diversas estratégias para “buscar uma perda constante de dinheiro e um lucro constante ao mesmo tempo”. Muitos amigos das moedas também brincaram: “Se existe uma maneira estável de ganhar dinheiro, por que precisamos de uma maneira estável de perder dinheiro!” Na verdade, as coisas que geram dinheiro de forma constante e perdem dinheiro de forma constante sãomoney printer, e não é fácil de encontrar. Perdoe meu inglês ruim.

Entretanto, ainda há instabilidade, como por exemplo, por meio do hedge de contratos, é possível obter perdas e lucros ao mesmo tempo.

Estratégia DEMO

/*backtest
start: 2020-09-30 00:00:00
end: 2020-10-19 00:00:00
period: 1d
basePeriod: 1m
exchanges: [{"eid":"Futures_OKCoin","currency":"BTC_USD"},{"eid":"Futures_HuobiDM","currency":"BTC_USD"}]
*/

var step = 20    // 加仓价格步长

function main() {
    var pos1 = []
    var pos2 = []
    var ct = "quarter"                         // 例如用季度合约
    exchanges[0].SetContractType(ct)
    exchanges[1].SetContractType(ct)
    var diff = 0

    while (true) {
        var r1 = exchanges[0].Go("GetDepth")   // A交易所
        var r2 = exchanges[1].Go("GetDepth")   // B交易所
        var depth1 = r1.wait()
        var depth2 = r2.wait()

        if(depth1.Bids[0].Price - depth2.Asks[0].Price > diff) {
            if(pos1.length == 0 && pos2.length == 0) {
                var info1 = $.OpenShort(exchanges[0], ct, 10)
                var info2 = $.OpenLong(exchanges[1], ct, 10)
                pos1 = _C(exchanges[0].GetPosition)
                pos2 = _C(exchanges[1].GetPosition)
                diff = depth1.Bids[0].Price - depth2.Asks[0].Price
            } else if(depth1.Bids[0].Price - depth2.Asks[0].Price > diff + step) {
                var info1 = $.OpenShort(exchanges[0], ct, 10)
                var info2 = $.OpenLong(exchanges[1], ct, 10)
                pos1 = _C(exchanges[0].GetPosition)
                pos2 = _C(exchanges[1].GetPosition)
                diff = depth1.Bids[0].Price - depth2.Asks[0].Price
            }
        }
        
        if(pos1.length != 0 && pos1[0].Profit < -0.001) {
            var info1 = $.CoverShort(exchanges[0], ct, pos1[0].Amount)
            var info2 = $.CoverLong(exchanges[1], ct, pos2[0].Amount)
            pos1 = _C(exchanges[0].GetPosition)
            pos2 = _C(exchanges[1].GetPosition)
            diff = 0
        }
        LogStatus(_D(), diff)
        Sleep(500)
    }
}

Pensando sobre a movimentação de ativos por meio da estratégia de hedge de contratos

Pensando sobre a movimentação de ativos por meio da estratégia de hedge de contratos

Lógica da estratégia: A estratégia começa inicializando as variáveis ​​de posição pos1 e pos2 como matrizes vazias. A estratégia entra no loop principal e, no início de cada loop, obtém os dados de profundidade (dados do livro de ordens) dos contratos das duas bolsas e calcula a diferença de preço. Se a diferença de preço continuar a aumentar além da “última diferença de preço mais um passo”, continue a fazer hedge e a aumentar as posições. Ao manter uma posição, se a perda da primeira posição de câmbio exceder um determinado valor (por exemplo: -0,001), a posição será fechada. Esse processo é repetido repetidamente.

O princípio é na verdade muito simples, ou seja, se a diferença de preço for grande, o hedge é oposto. Espere que a exchange que você espera perder dinheiro mantenha uma perda e então feche a posição. Se o spread continuar a aumentar, continue a aumentar a posição para proteger até que a exchange que você espera perder dinheiro mantenha uma perda. Os parâmetros mais importantes são: quanta perda é necessária para fechar uma posição, o tamanho do passo da diferença de preço para adicionar posições e o valor do hedge.

A estratégia é relativamente simples e é usada apenas para verificar a ideia. Não é aplicável em negociações reais. Ainda há muitas questões que precisam ser consideradas na negociação real, como se o contrato a ser negociado é baseado em moeda ou U, se os multiplicadores de diferentes contratos nas bolsas A e B são os mesmos, etc.

Dessa forma, se uma bolsa perde dinheiro, a perda se tornará aproximadamente o lucro de outra bolsa (devido à diferença de preço, pode haver perdas de hedge, ou seja, a perda é maior que o lucro). A estratégia usa uma biblioteca de negociação de futuros.$.CoverShort,$.OpenShortEstas são as funções de interface do template. Para fazer backtest e executar o DEMO acima, você precisa referenciar esta biblioteca de classes.

O protótipo de estratégia acima é apenas a exploração mais simples. Pode haver mais detalhes a serem considerados na operação real. Por exemplo, a quantidade de aumento na posição pode ser projetada para ser incremental. Este é apenas um ponto de partida. Estratégias semelhantes devem ser capazes de ser mais otimizadas. Especialistas são bem-vindos para dar sugestões.