avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

60 líneas de código para implementar una idea: estrategia de selección de contratos

Creado el: 2022-03-19 14:37:08, Actualizado el: 2024-12-02 21:32:02
comments   14
hits   3439

60 líneas de código para implementar una idea: estrategia de selección de contratos

Las estrategias que prefieren mercados volátiles, como la estrategia de red y la estrategia Martingala, tienen desventajas inherentes. Se han probado estrategias similares en el mercado de contratos de ETH durante algún tiempo. También suelo charlar y compartir experiencias con jugadores nuevos y antiguos en FMZ.COM. Respecto a este tipo de estrategia hay un punto en el que coincido totalmente con lo que dice un amigo. Es decir, al realizar contratos en el círculo de criptomonedas, el riesgo de entrar en largo es ligeramente menor que el de entrar en corto. O para decirlo de forma sencilla, la peor caída posible es cero, pero las ventajas son ilimitadas.

Entonces, ¿será mejor que las estrategias como Martingala y la cuadrícula solo permiten ir en largo y no en corto, y distribuir los riesgos de selección de mínimos en un largo plazo, que hacer operaciones bilaterales? Esta idea suena bien, pero nadie sabe si resistirá la práctica. Pero al menos podemos simplemente probar esta idea retrospectivamente. Así que tenemos el tema del artículo de hoy: diseñar una estrategia de selección de contratos de mínimos.

Desarrollo rápido basado en FMZ.COM

El código para implementar esta idea es realmente muy sencillo, gracias a la flexibilidad de la plataforma, la encapsulación de la interfaz, el potente sistema de backtesting, etc. El código completo sólo ocupa 60 líneas (por el bien de los estándares de escritura de código, no se utilizan muchas abreviaturas).

El diseño de la estrategia es muy simple. De acuerdo con el precio inicial al comienzo de la lógica, se colocan órdenes de compra a intervalos hacia abajo. Si el precio continúa bajando, se continúan colocando órdenes de compra para continuar pescando en el fondo. Luego, coloque una orden de cierre basada en el precio de la posición más una cierta diferencia de ganancias y espere a que se cierre la posición. Si la posición está cerrada, se repetirá la lógica anterior con el precio actual como precio inicial. La estrategia no mantiene posiciones cortas, sólo posiciones largas.

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 sencillo:

60 líneas de código para implementar una idea: estrategia de selección de contratos

Sólo existen estos pocos parámetros.

Observa el efecto de backtesting de estas docenas de líneas de código

Simplemente configure el rango de tiempo de la prueba retrospectiva:

60 líneas de código para implementar una idea: estrategia de selección de contratos

Ejecución de backtest:

60 líneas de código para implementar una idea: estrategia de selección de contratos

60 líneas de código para implementar una idea: estrategia de selección de contratos

Se parece mucho a una estrategia tipo cuadrícula o Martin~. ¿Los nuevos estudiantes que recién comienzan a aprender tienen miedo de las estrategias largas y se desaniman fácilmente? Es más adecuada una introducción breve y concisa a las estrategias, lo que facilita la digestión de las ideas estratégicas y el aprendizaje del diseño lógico.

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