avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Nouvelle stratégie de capture de pièces de monnaie numérique (enseignement)

Créé le: 2022-04-20 15:59:01, Mis à jour le: 2023-09-20 10:29:48
comments   0
hits   3060

Nouvelle stratégie de capture de pièces de monnaie numérique (enseignement)

Nouvelle stratégie de capture de pièces de monnaie numérique (enseignement)

Au cours des deux derniers jours, un utilisateur du groupe Telegram m’a envoyé un message privé dans l’espoir d’obtenir un exemple de conception pour une stratégie d’introduction en bourse. Parfois, lorsqu’une plateforme d’échange propose de nouvelles pièces, vous souhaitez en acquérir certaines. Cet article décrit une stratégie simple pour acheter de nouvelles pièces.

Exigences en matière de stratégie

Par exemple, actuellement sur une certaine bourse, une certaine paire de trading : XXX_USDT, n’a pas encore été cotée sur la bourse. Mais il sera bientôt disponible en ligne. Un programme est nécessaire pour surveiller le marché XXX_USDT de cette bourse. Une fois la limite supérieure de cette paire de trading atteinte, elle peut être négociée. Ensuite, émettez 10 ordres d’achat limités, spécifiez la quantité et passez des commandes pour récupérer des pièces. L’acheter complète la tâche. Si vous ne pouvez pas l’acheter, gardez-le simplement en attente jusqu’à ce que toutes les commandes soient exécutées et que vous achetiez les pièces.

L’exigence est très simple, mais pour ceux qui n’ont aucune base de programmation dans le domaine des crypto-monnaies, ils ne savent peut-être pas par où commencer. Ensuite, nous travaillerons à la réalisation de cette exigence.

Code de stratégie

Définition des paramètres de stratégie :

Nous définissons ici plusieurs paramètres pour contrôler des opérations telles que la passation de commandes. Nouvelle stratégie de capture de pièces de monnaie numérique (enseignement)

Implémentation du code :

function pendingOrders(ordersNum, price, amount, deltaPrice, deltaAmount) {
    var routineOrders = []
    var ordersIDs = []
    for (var i = 0 ; i < ordersNum ; i++) {
        var routine = exchange.Go("Buy", price + i * deltaPrice, amount + i * deltaAmount)
        routineOrders.push(routine)
        Sleep(ApiReqInterval)        
    }
    for (var i = 0 ; i < routineOrders.length ; i++) {
        var orderId = routineOrders[i].wait()
        if (orderId) {
            ordersIDs.push(orderId)
            Log("成功挂单", orderId)
        }        
    }
    return ordersIDs
}

function main() {
    if (symbol == "null" || pendingPrice == -1 || pendingAmount == -1 || pendingPrice == -1 || deltaPrice == -1 || deltaAmount == -1) {
        throw "参数设置错误"
    }
    exchange.SetCurrency(symbol)
    // 屏蔽错误信息
    SetErrorFilter("GetDepth")
    while (true) {
        var msg = ""
        var depth = exchange.GetDepth()
        if (!depth || (depth.Bids.length == 0 && depth.Asks.length == 0)) {
            // 没有深度
            msg = "没有深度数据,等待!"
            Sleep(500)
        } else {
            // 获取到深度
            Log("并发下单!")
            var ordersIDs = pendingOrders(ordersNum, pendingPrice, pendingAmount, deltaPrice, deltaAmount)
            while (true) {
                var orders = _C(exchange.GetOrders)
                if (orders.length == 0) {
                    Log("当前挂单个数0,停止运行")
                    return 
                }
                var tbl = {
                    type: "table",
                    title: "当前挂单",
                    cols: ["id", "价格", "数量"], 
                    rows: []
                }
                _.each(orders, function(order) {
                    tbl.rows.push([order.Id, order.Price, order.Amount])
                })
                LogStatus(_D(), "\n`" + JSON.stringify(tbl) + "`")
                Sleep(500)
            }
        }
        LogStatus(_D(), msg)
    }
}

La stratégie détecte l’API d’échange et l’interface du carnet d’ordres. Une fois les données du carnet d’ordres disponibles, la stratégie utilise la fonction exchange.Go pour passer des ordres. Après avoir passé une commande, le statut de la commande en attente actuelle sera vérifié en boucle. La stratégie n’a pas été réellement testée. Voici simplement une référence de conception de code. Ceux qui sont intéressés peuvent modifier et ajouter des fonctions à utiliser.

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