Es gibt viele Freunde im Kryptowährungskreis, die einen Auftragsüberwachungsbot benötigen, aber sie leiden unter der langen Zeit, um mit programmatischem Design zu beginnen, wenn sie Null-Basics haben.
Die Funktion dieses Bots besteht darin, zu erkennen, dass, wenn ein Konto eine Kauf- oder Verkaufsaktion hat, andere Konten der Auftragsüberwachung folgen und die Operation auch ausführen. Zuerst definieren wir zwei Themen:
Wenn diese Anforderung erst einmal geklärt ist, denken wir weiter über den nächsten Schritt nach: Wie können wir jede Aktion des Referenzberichts identifizieren?
Wir müssen nur den Symbolbetrag in den neuesten Kontoinformationsdaten mit dem aktuellen Symbolbetrag in den neuesten erhaltenen Kontoinformationsdaten vergleichen. Wenn der Symbolbetrag in den aktuell erhaltenen letzten Kontoinformationsdaten größer ist als der vorherige Datensatz, beweist dies, dass das Referenzkonto eine Kaufoperation ausgeführt hat und die Ausführung erfolgreich war. Umgekehrt wird, wenn weniger Symbole vorhanden sind, eine Verkaufsoperation für das Referenzkonto ausgeführt. Nachdem wir die Aktion erkannt haben, lassen wir andere Plattformkonten die gleiche Operation ausführen.
Wird festgestellt, dass das Referenzkonto einen Handel ausgeführt hat, muss der letzte Konto-Datensatz aktualisiert werden, um ihn mit den beim nächsten Mal erhaltenen Kontoinformationen zu vergleichen, um festzustellen, ob es sich um eine neue Handelsaktion handelt.
Die Strategiecodebeschreibung der obigen Logik:
// 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
Um das Design zu vereinfachen, verwendet die Strategie die offizielle FMZ-Vorlage [Digital Currency Trading Library] und$.Buy
und$.Sell
Die Funktion ist die Ausführung der Auftragsvorgänge.
Hinzufügen einiger Statusleiste Anzeigen an die Strategie, um die Überwachung der Daten jedes Kontos zu erleichtern.
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
}
}
Lassen Sie uns es auf dem echten Bot testen, von FMZ wexApp Simulationsplattform zum Testen. Hier habe ich drei wexApp Konten hinzugefügt, die alle unabhängige Konten sind. Einer von ihnen dient als Referenzplattform, und die anderen zwei dienen als Auftragsüberwachungsplattformen.
Dann platzierten wir manuell einen Auftrag über das FMZ-Trading-Terminal, um zu sehen, ob der Bot den Auftrag automatisch überwachen konnte.
Sie können sehen, dass der Bot den Handel erkannt hat und den Auftragsüberwachungsvorgang durchgeführt hat.
Vollständige Strategie:https://www.fmz.com/strategy/255182
Die Strategie ist nur für das Studium bestimmt, und wenn Sie Fragen haben, würden wir uns freuen, wenn Sie Kommentare dazu hinterlassen.