Réaliser un robot de supervision d'ordre simple de Cryptocurrency Spot

Auteur:Je suis désolée., Créé à: 2022-04-11 11:54:34, Mis à jour à: 2022-04-11 11:55:08

Réaliser un robot de supervision d'ordre simple de Cryptocurrency Spot

Il y a beaucoup d'amis dans le cercle de crypto-monnaie qui ont besoin d'un bot de supervision des ordres, mais ils souffrent du long temps pour commencer avec la conception programmatique quand ils ont zéro de base.

La fonction de ce bot est de réaliser que lorsqu'un compte a une opération d'achat ou de vente, d'autres comptes de supervision d'ordre suivront et exécuteront l'opération aussi. Donc, nous définissons d'abord 2 sujets:

  • Compte de référence: le compte surveillé, dont chaque action est surveillée.
  • Compte de surveillance des ordres: le compte de surveillance des ordres; lorsque le compte de référence a une action, le compte de surveillance des ordres effectue la même action.

Une fois que cette exigence a été clarifiée au début, nous continuons à réfléchir à l'étape suivante: comment identifier chaque action du compte de référence?

Surveiller le compte de référence. C'est très simple pour les comptes de négociation au comptant. Nous avons seulement besoin de comparer le montant du symbole dans les dernières données d'information du compte avec le montant du symbole actuel dans les dernières données d'information du compte obtenues. Si le montant du symbole dans les dernières données d'informations de compte actuellement obtenues est supérieur à l'enregistrement précédent, cela prouve que le compte de référence a effectué une opération d'achat et que l'exécution a été réussie. Inversement, s'il y a moins de symboles, une opération de vente est effectuée pour le compte de référence. Après avoir détecté l'action, laissez d'autres comptes de plate-forme effectuer la même opération.

Lorsqu'il est établi que le compte de référence a effectué une transaction, l'enregistrement des données du compte le plus récent doit être mis à jour pour le comparer avec les informations du compte obtenues la prochaine fois afin de déterminer s'il y a une nouvelle action de négociation.

La description du code de stratégie de la logique ci-dessus:

        // detect order supervising
        var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks)  // detect the currency amount changes 
        var func = null 
        if (amount > 0) {   // the amount increased 
            func = $.Buy    // buy
        } else if (amount < 0) {  // the amount decreased 
            func = $.Sell         // sell 
        } else {
            continue
        }
        
        // execute order supervising 
        Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {    // when i equals 0, it indicates the reference platform, not to be processed; process other order supervising platforms 
            func(exchanges[i], Math.abs(amount))          // execute the specified trading function, and it could be $.Buy or $.Sell, which needs to be determined by observing whether amount is larger than 0 or less than 0
        }
        
        // update the information record of the reference account after order supervising 
        initAcc = nowAcc                                  // update the latest account information of the reference platform, to compare it with the next one 

La logique de détection principale de la stratégie est le code ci-dessus. Afin de simplifier la conception, la stratégie utilise le modèle officiel FMZ [Digital Currency Trading Library], et$.Buyet$.SellL'exposition au risque de défaut est calculée sur la base de l'exposition au risque de défaut.

Ajouter quelques affichages de barre d'état à la stratégie pour faciliter le suivi des données de chaque compte.

function test() { 
    // test function 
    var ts = new Date().getTime()    
    if (ts % (1000 * 60 * 60 * 6) > 1000 * 60 * 60 * 5.5) {
        Sleep(1000 * 60 * 10)
        var x = Math.random()
        if (x > 0.5) {
            $.Buy(exchange, x / 10)    
        } else {
            $.Sell(exchange, x / 10)    
        }        
    }
}

function main() {
    LogReset(1)
    if (exchanges.length < 2) {
        throw "no platform of order supervising"
    }
    var exName = exchange.GetName()
    // detect the reference platform 
    if (exName.includes("Futures_")) {
        throw "only support sport order supervising"
    }
    Log("start monitoring", exName, "platform", "#FF0000")
    
    // detect the order supervising platforms 
    for (var i = 1 ; i < exchanges.length ; i++) {
        if (exchanges[i].GetName().includes("Futures_")) {
            throw "Do not support the order supervising of futures platfroms"
        }
    }
    
    var initAcc = _C(exchange.GetAccount)
    while(1) {
        if(IsVirtual()) {
           // test function
           test()  
        }  
        Sleep(5000)
        
        // update the current information of the reference account 
        var nowAcc = _C(exchange.GetAccount)
        
        // the account information of the reference platform
        var refTbl = {
            type : "table", 
            title : "reference platform",
            cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
            rows : []
        }
        refTbl.rows.push([exName, nowAcc.Stocks, nowAcc.FrozenStocks, nowAcc.Balance, nowAcc.FrozenBalance])
        
        // the account information of the order supervising platform
        var followTbl = {
            type : "table", 
            title : "order supervising platform",
            cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
            rows : []        
        }
        for (var i = 1 ; i < exchanges.length ; i++) {
            var acc = _C(exchanges[i].GetAccount)
            var name = exchanges[i].GetName()
            followTbl.rows.push([name, acc.Stocks, acc.FrozenStocks, acc.Balance, acc.FrozenBalance])
        }
        
        // status bar display 
        LogStatus(_D(), "\n`" + JSON.stringify(refTbl) + "`", "\n`" + JSON.stringify(followTbl) + "`")
        
        // detect order supervising 
        var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks)
        var func = null 
        if (amount > 0) {
            func = $.Buy
        } else if (amount < 0) {
            func = $.Sell
        } else {
            continue
        }
        
        // execute order supervising 
        Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {            
            func(exchanges[i], Math.abs(amount))
        }
        
        // update the information record of the reference account after order supervising 
        initAcc = nowAcc
    }
}

Nous allons le tester sur le vrai bot, par la plateforme de simulation FMZ wexApp pour le tester. Ici j'ai ajouté trois comptes wexApp, qui sont tous des comptes indépendants.

img

Ensuite, nous avons placé manuellement une commande par le terminal de trading FMZ pour voir si le bot pouvait automatiquement superviser l'ordre.

img

Vous pouvez voir que le bot a détecté le commerce et a effectué l'opération de supervision des ordres.

img

Stratégie complète:https://www.fmz.com/strategy/255182

La stratégie est uniquement à des fins d'étude. Si vous avez des questions, nous vous serions reconnaissants de laisser vos commentaires.


Plus de