
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)
}
}


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.