In den letzten Tagen erhielt ich einige private Nachrichten von Telegramm-Gruppenbenutzern, sie hoffen, ein Designbeispiel für die Abonnementstrategie für neue Aktien zu haben.
Zum Beispiel, zur Zeit, eine Börse und ein Handelspaar: XXX_USDT, hat noch nicht auf der Börse gelistet. Aber es wird bald gelistet werden. Wir müssen den XXX_USDT Markt dieser Börse mit einem Programm zu verfolgen. Sobald das Handelspaar gelistet ist, kann es gehandelt werden. Wir geben 10 limitierte Preis Kauf Aufträge, geben den Betrag, und listen die Bestellung, um neue Währungen zu unterzeichnen. Wenn Sie sie erfolgreich kaufen können, können Sie die Aufgabe abschließen. Wenn nicht, können Sie es auflisten, bis alle Aufträge geschlossen sind und Sie Währungen kaufen können.
Die Bedürfnisse sind sehr einfach, aber für diejenigen, die keine Programmiergrundlagen auf dem digitalen Währungsmarkt haben, können sie vielleicht nicht anfangen, also lasst uns damit beginnen, es umzusetzen.
Definition des Strategieparameters:
Hier definieren wir diese 7 Parameter zur Steuerung von Operationen wie der Auftragserteilung.
Umsetzung des Codes:
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)
}
}
Die Strategie überprüft die Exchange API und die Orderbuch-Schnittstelle. Sobald die Orderbuchdaten erhalten werden können, wird die Strategie die Exchange.Go-Funktion verwenden, um Bestellungen gleichzeitig zu platzieren. Nachdem die Bestellung platziert wurde, wird der Status der aktuellen ausstehenden Bestellung kreisförmig überprüft. Die Strategie wurde nicht tatsächlich getestet, hier ist nur eine Code-Design-Referenz. Wenn Sie interessiert sind, können Sie Funktionen anpassen oder hinzufügen.
Vollständige Strategie von:https://www.fmz.com/strategy/358383