Las estrategias de los puntos de inflexión de los futuros de las monedas digitales (enseñanza)

El autor:Un sueño pequeño., Fecha: 2021-12-03 11:25:28
Las etiquetas:

Artículo relacionado:https://www.fmz.com/bbs-topic/8479


/*backtest
start: 2021-09-01 00:00:00
end: 2021-12-02 00:00:00
period: 1h
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

var LONG = 1 
var SHORT = -1
var IDLE = 0

function getPosition(positions, direction) {
    var ret = {Price : 0, Amount : 0, Type : ""}
    _.each(positions, function(pos) {
        if (pos.Type == direction) {
            ret = pos
        }
    })
    return ret 
}

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

function cover(tradeFunc, direction) {
    var mapDirection = {"closebuy": PD_LONG, "closesell": PD_SHORT}
    var positions = _C(exchange.GetPosition)
    var pos = getPosition(positions, mapDirection[direction])
    if (pos.Amount > 0) {
        cancellAll()
        exchange.SetDirection(direction)
        if (tradeFunc(-1, pos.Amount)) {
            return true 
        } else {
            return false 
        }
    }
    return true 
}

function main() {
    if (okexSimulate) {
        exchange.IO("simulate", true) // 切换到OKEX V5模拟盘测试 
        Log("切换到OKEX V5模拟盘")
    }    
    exchange.SetContractType(ct)
    var state = IDLE
    var holdPrice = 0
    var preTime = 0

    while (true) {
        var r = _C(exchange.GetRecords)
        var l = r.length
        if (l < Math.max(ema1Period, ema2Period)) {
            Sleep(1000)
            continue
        }
        var ema1 = TA.EMA(r, ema1Period)
        var ema2 = TA.EMA(r, ema2Period)
        
        // 画图
        $.PlotRecords(r, 'K线')
        if(preTime !== r[l - 1].Time){
            $.PlotLine('ema1', ema1[l - 2], r[l - 2].Time)
            $.PlotLine('ema2', ema2[l - 2], r[l - 2].Time)
            
            $.PlotLine('ema1', ema1[l - 1], r[l - 1].Time)
            $.PlotLine('ema2', ema2[l - 1], r[l - 1].Time)
            preTime = r[l - 1].Time
        } else {
            $.PlotLine('ema1', ema1[l - 1], r[l - 1].Time)
            $.PlotLine('ema2', ema2[l - 1], r[l - 1].Time)
        }
        
        var up = (ema1[l - 2] > ema1[l - 3] && ema1[l - 4] > ema1[l - 3]) && (ema2[l - 2] > ema2[l - 3] && ema2[l - 4] > ema2[l - 3])
        var down = (ema1[l - 2] < ema1[l - 3] && ema1[l - 4] < ema1[l - 3]) && (ema2[l - 2] < ema2[l - 3] && ema2[l - 4] < ema2[l - 3])
        if (up && (state == SHORT || state == IDLE)) {
            if (state == SHORT && cover(exchange.Buy, "closesell")) {
                state = IDLE
                holdPrice = 0
                $.PlotFlag(r[l - 1].Time, 'coverShort', 'CS')
            }
            exchange.SetDirection("buy")
            if (exchange.Buy(-1, amount)) {
                state = LONG
                holdPrice = r[l - 1].Close
                $.PlotFlag(r[l - 1].Time, 'openLong', 'L')
            }
        } else if (down && (state == LONG || state == IDLE)) {
            if (state == LONG && cover(exchange.Sell, "closebuy")) {
                state = IDLE
                holdPrice = 0
                $.PlotFlag(r[l - 1].Time, 'coverLong', 'CL')
            }
            exchange.SetDirection("sell")
            if (exchange.Sell(-1, amount)) {
                state = SHORT
                holdPrice = r[l - 1].Close
                $.PlotFlag(r[l - 1].Time, 'openShort', 'S')
            }
        }
        
        // 止盈
        if (state == LONG && r[l - 1].Close - holdPrice > profitTarget && cover(exchange.Sell, "closebuy")) {            
            state = IDLE
            holdPrice = 0
            $.PlotFlag(r[l - 1].Time, 'coverLong', 'CL')
        } else if (state == SHORT && holdPrice - r[l - 1].Close > profitTarget && cover(exchange.Buy, "closesell")) {            
            state = IDLE
            holdPrice = 0
            $.PlotFlag(r[l - 1].Time, 'coverShort', 'CS')
        }
        LogStatus(_D())
        Sleep(500)        
    }
}

Más.

Se trata de la siguiente información:Señor, he modificado un poco tu pequeño y los resultados parecen buenos. ¿Cuáles son sus consejos? En la actualidad, la mayoría de los editores de blogs están trabajando en el tema de los blogs.

Las riquezas del cieloMaestra: ¿Cuántas veces has aplicado la estrategia de enseñanza en este examen?

Las riquezas del cieloComienza el disco, no hay respuesta.

Las riquezas del cielo/cargar/activo/2152afd2a78355e8ce25b.png

Las riquezas del cieloBuy ((-1, 5): 400: {"code":-2019, "msg:"Margin is insufficient. "} ¿Qué quiere decir?

Las riquezas del cielo¿Puedes añadir tu mensaje, por favor?

Las riquezas del cielo¿Puede esta estrategia funcionar en un disco real?

el ciclo9macd cruza compra hacia arriba y venta hacia abajo al mismo tiempo, no sólo ganar, sólo dejar de perder

13826543292Gracias a Dios, muy bueno.

Un sueño pequeño.Bueno, este estudio fue un estudio.

Se trata de la siguiente información:¿Puedes darme una estrategia para desbloquear el depósito? La estrategia de parar las pérdidas de forma directa es demasiado explosiva.

Un sueño pequeño.Bien, la plataforma compartirá más estrategias en el futuro, gracias por apoyar FMZ.

Se trata de la siguiente información:Sólo tienes que decir que eres el verdadero 666. Yo sólo estoy usando la ventaja de la ganancia. Tú prueba la prueba de EOS. Estoy haciendo un estudio para ver si el disco real no lo es. Actualmente el disco real está estimado como insuficiente para pagar las cuotas.

Un sueño pequeño.En la actualidad, la mayoría de las personas que viven en el país no tienen una cuenta de crédito.

Un sueño pequeño.En general, el apalancamiento es 10 veces mayor cuando se vuelve a evaluar.

Un sueño pequeño.X. X cantidad, y no puedo decir.... Pero hablando de tu versión optimizada del 666, ¿qué tan alta es Sharp?

Las riquezas del cielo¿Es el contrato propio de U? ¿No es un apalancamiento?

Un sueño pequeño.No hay suficiente garantía en su cuenta, no hay suficiente dinero para pagar.

Un sueño pequeño.El código se escribe según las necesidades.