Stratégie des virages binaires sur les contrats à terme sur les crypto-monnaies

Auteur:Le petit rêve, Date: 2021-12-03 11h25 et 28h
Les étiquettes:

Article détaillé: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)        
    }
}

Plus de

Le numéro de série:Je vous ai modifié un peu, monsieur, et les résultats semblent bons. Vous me donnez des conseils? Risque et optimisation Il est également possible de modifier la page d'accueil de l'application.

Les trésors du cielMaîtresse: Combien de fois avez-vous utilisé cette méthode d'enseignement pour le test?

Les trésors du cielJe commence à jouer, je ne réagis pas.

Les trésors du cielLe montant de l'impôt sur le revenu est calculé à partir du montant de l'impôt sur le revenu.

Les trésors du cielBuy ((-1, 5): 400: {"code":-2019, "msg:" Marge est insuffisante. "} Que signifie ah ~ une minute à la fois

Les trésors du cielProfesseur Choi Dream: Pourriez-vous ajouter votre message, s'il vous plaît, parlez-moi en privé?

Les trésors du cielCette stratégie fonctionne-t-elle sur le disque dur?

cylk9macd croisé acheter vers le haut et vendre vers le bas en même temps en changeant les ordres, non seulement gagner, mais seulement arrêter de perdre comment écrire

13826543292Merci mon Dieu, c'est génial.

Le petit rêveBien, cette étude a été menée.

Le numéro de série:Je ne sais pas si vous pouvez me donner une stratégie pour débloquer les sacs, ou si vous pouvez me donner une idée. La stratégie d'arrêt immédiat est trop forte. Nous voulons ajouter un blocage et attendre le prochain marché.

Le petit rêveBien, la plateforme partagera plus de stratégies dans le futur, merci de soutenir FMZ.

Le numéro de série:Tout ce que je peux dire, monsieur, c'est que vous êtes bien le 666. Je n'ai fait que profiter de l'avantage. Je suis en train de faire des recherches pour voir si ce n'est pas le cas. Cette estimation actuelle est insuffisante pour payer les frais d'entretien.

Le petit rêveIl y a aussi une petite quantité d'argent dans les comptes.

Le petit rêveEn général, l'effet de levier est 10 fois plus élevé lorsque le retest est effectué.

Le petit rêveX. X, je ne peux pas dire non plus. Mais en parlant de votre version optimisée de 666, quelle est la hauteur de Sharp?

Les trésors du cielC'est votre contrat, n'est-ce pas? C'est pas un levier?

Le petit rêveVous n'avez pas assez de garantie, vous n'avez pas assez d'argent pour payer.

Le petit rêveLe code est écrit en fonction des besoins.