Realizar una idea con 60 líneas de código - Estrategia de pesca en el fondo del contrato

El autor:- ¿ Por qué?, Creado: 2022-11-08 15:30:01, Actualizado: 2023-09-20 09:05:08

img

La estrategia de red, la estrategia Martingale, que prefieren las fluctuaciones del mercado, tienen sus propios inconvenientes, y han sido probados durante algún tiempo en el mercado de contratos ETH.FMZ.COMUna cosa sobre este tipo de estrategia está muy de acuerdo con un amigo, es que, en cuanto a los contratos, ir largo tiene menos riesgo que ir corto en el mercado de divisas digitales.

Así que, Martingale, Grid y otras estrategias sólo ir largo, no ir corto, y la propagación del riesgo de pesca de fondo en un largo rango será mejor que la posición bilateral? esta idea suena muy bien, pero nadie sabe si se puede poner en práctica. pero, al menos, podemos backtesting simplemente.

Desarrollo rápido basado enFMZ.COM

El código para implementar esta idea es realmente simple, gracias a la flexibilidad de la plataforma, el encapsulado de la interfaz, el poderoso sistema de backtesting y así sucesivamente.

La idea de diseño de la estrategia es muy simple. Coloque la orden de compra a intervalos de acuerdo con el precio inicial al comienzo de la lógica y si el precio continúa disminuyendo, continuamos colocando la orden de compra y continuamos pescando en el fondo. Luego colocamos la orden de posición de cierre basada en el precio de la posición aumentando un cierto margen de ganancia y esperamos que la posición se cierre. Si la posición se cierra, la lógica anterior se repetirá con el precio actual como el precio inicial. La estrategia no será corta para mantener la posición, sino larga solo.

Código fuente de la estrategia:

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

El diseño de los parámetros también es muy simple:

img

Con estos 6 parámetros sólo.

Mira el resultado de las pruebas.

Establezca el rango de tiempo de backtesting al azar:

img

Prueba posterior:

img

img

img

Se parece mucho a la estrategia de cuadrícula, la estrategia de Martingale ~. Los estudiantes que son principiantes generalmente tienen miedo de la estrategia con código largo, que es fácil de disuadir. Una estrategia corta y concisa para comenzar es más fácil y más apropiada para entender las ideas de estrategia y aprender el diseño lógico.

El código de estrategia es sólo para fines de estudio e investigación.


Relacionados

Más.