
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.
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.
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.

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