Dans les derniers jours, j'ai reçu quelques messages privés d'utilisateurs de groupe de télégramme, ils espèrent avoir un exemple de conception de la stratégie de souscription de nouvelles actions pour référence.
Par exemple, à l'heure actuelle, une bourse et une paire de trading: XXX_USDT, n'ont pas encore été cotées à l'échange. Mais elle sera bientôt cotée. Nous devons suivre le marché XXX_USDT de cette bourse avec un programme. Une fois la paire de trading cotée, elle peut être négociée. Nous émettons 10 ordres d'achat à prix limité, spécifions le montant et énumérons l'ordre pour souscrire de nouvelles devises. Si vous pouvez les acheter avec succès, vous pouvez terminer la tâche. Sinon, vous pouvez l'énumérer jusqu'à ce que tous les ordres soient fermés et vous pouvez acheter des devises.
Les besoins sont très simples, mais pour ceux qui n'ont pas de base de programmation sur le marché de la monnaie numérique, ils peuvent ne pas être en mesure de commencer, alors commençons à le mettre en œuvre.
Définition du paramètre de stratégie:
Ici, nous définissons ces 7 paramètres pour contrôler les opérations telles que la passation des commandes.
Mise en œuvre 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("placed an order successfully", orderId)
}
}
return ordersIDs
}
function main() {
if (symbol == "null" || pendingPrice == -1 || pendingAmount == -1 || pendingPrice == -1 || deltaPrice == -1 || deltaAmount == -1) {
throw "Parameter setting error"
}
exchange.SetCurrency(symbol)
// Block error messages
SetErrorFilter("GetDepth")
while (true) {
var msg = ""
var depth = exchange.GetDepth()
if (!depth || (depth.Bids.length == 0 && depth.Asks.length == 0)) {
// No depth
msg = "No depth data, wait!"
Sleep(500)
} else {
// Obtain depth
Log("Place orders concurrently!")
var ordersIDs = pendingOrders(ordersNum, pendingPrice, pendingAmount, deltaPrice, deltaAmount)
while (true) {
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
Log("The current number of pending orders is 0, and the operation is stopped")
return
}
var tbl = {
type: "table",
title: "The current pending orders",
cols: ["id", "price", "amount"],
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 vérifie l'API de l'échange et l'interface du carnet de commandes. Une fois que les données du carnet de commandes peuvent être obtenues, la stratégie utilisera la fonction exchange.Go pour placer des commandes simultanément. Une fois l'ordre passé, l'état de l'ordre en attente sera vérifié de manière circulaire. La stratégie n'a pas été testée, voici juste une référence de conception de code. Si vous êtes intéressé, vous pouvez y modifier ou y ajouter des fonctions.
Stratégie complète de:https://www.fmz.com/strategy/358383