Realizar uma ideia com 60 linhas de código - Estratégia de pesca no fundo do contrato

Autora:Lydia., Criado: 2022-11-08 15:30:01, Atualizado: 2023-09-20 09:05:08

img

A estratégia de grade, estratégia Martingale, que preferem flutuações do mercado, têm suas próprias desvantagens, e eles foram testados por algum tempo no mercado de contratos ETH.FMZ.COMUma coisa sobre este tipo de estratégia é muito de acordo com um amigo, que é, como para os contratos, ir longo tem menos risco do que ir curto no mercado de moeda digital.

Então, será Martingale, Grid e outras estratégias apenas ir longo, não ir curto, e espalhar o risco de pesca de fundo em uma longa distância ser melhor do que posição bilateral? Esta ideia soa muito bem, mas ninguém sabe se pode ser colocado em prática.

Desenvolvimento rápido baseadoFMZ.COM

O código para implementar essa ideia é realmente simples, graças à flexibilidade da plataforma, encapsulamento da interface, sistema de backtesting poderoso e assim por diante.

A ideia de design da estratégia é muito simples. Coloque a ordem de compra em intervalos de acordo com o preço inicial no início da lógica e, se o preço continuar a diminuir, continuaremos a colocar a ordem de compra e continuaremos a pescar no fundo. Em seguida, colocamos a ordem de posição de fechamento com base no preço da posição aumentando uma certa margem de lucro e esperamos o fechamento da posição. Se a posição for fechada, a lógica acima será repetida com o preço atual como o preço inicial. A estratégia não será curta para manter a posição, mas apenas longa.

Código fonte da estratégia:

function cancelAll() {
    while (true) {
        var orders = _C(exchange.GetOrders)
        if (orders.length == 0) { 
            break 
        }
        for (var i = 0 ; i < orders.length ; i++) {
            exchange.CancelOrder(orders[i].Id, orders[i])
            Sleep(interval)
        }
    }
}

function getLong(arr, kind) {
    var ret = null 
    for (var i = 0 ; i < arr.length ; i++) {
        if (arr[i].Type == (kind == "pos" ? PD_LONG : ORDER_TYPE_BUY)) {
            ret = arr[i]
        }
    }
    return ret
}

function pendingBidOrders(firstPrice) {
    var index = 0
    var amount = baseAmount
    while (true) {
        var pos = _C(exchange.GetPosition)
        var price = firstPrice - index * baseSpacing
        amount *= ratio
        index++
        exchange.SetDirection("buy")
        exchange.Buy(price, amount)        
        if (pos.length != 0) {
            var longPos = getLong(pos, "pos")
            if (longPos) {
                exchange.SetDirection("closebuy")
                exchange.Sell(longPos.Price + profitTarget, longPos.Amount)
            }
        }
        while (true) {
            Sleep(interval)
            if (!getLong(_C(exchange.GetOrders), "orders")) {
                cancelAll()
                break
            }
            if (!getLong(_C(exchange.GetPosition), "pos")) {
                cancelAll()
                return 
            }
        }
    }
}

function main() {
    exchange.SetContractType(symbol)
    while (true) {
        pendingBidOrders(_C(exchange.GetTicker).Last)
    }
}

O projeto dos parâmetros também é muito simples:

img

Com estes 6 parâmetros apenas.

Olha para o resultado do backtesting.

Configure o intervalo de tempo de backtesting aleatoriamente:

img

Teste de retrocesso:

img

img

img

Parece muito a estratégia de grelha, estratégia de Martingale ~. Os alunos que são iniciantes geralmente têm medo da estratégia com código longo, que é fácil de ser dissuadido. Uma estratégia curta e concisa para começar é mais fácil e mais apropriada para entender as ideias de estratégia e aprender o design lógico.

O código de estratégia é apenas para fins de estudo e investigação.


Relacionados

Mais.