Il y a beaucoup d'amis dans le cercle de crypto-monnaie qui ont besoin d'un bot de supervision des ordres, mais ils souffrent du long temps pour commencer avec la conception programmatique quand ils ont zéro de base.
La fonction de ce bot est de réaliser que lorsqu'un compte a une opération d'achat ou de vente, d'autres comptes de supervision d'ordre suivront et exécuteront l'opération aussi. Donc, nous définissons d'abord 2 sujets:
Une fois que cette exigence a été clarifiée au début, nous continuons à réfléchir à l'étape suivante: comment identifier chaque action du compte de référence?
Surveiller le compte de référence. C'est très simple pour les comptes de négociation au comptant. Nous avons seulement besoin de comparer le montant du symbole dans les dernières données d'information du compte avec le montant du symbole actuel dans les dernières données d'information du compte obtenues. Si le montant du symbole dans les dernières données d'informations de compte actuellement obtenues est supérieur à l'enregistrement précédent, cela prouve que le compte de référence a effectué une opération d'achat et que l'exécution a été réussie. Inversement, s'il y a moins de symboles, une opération de vente est effectuée pour le compte de référence. Après avoir détecté l'action, laissez d'autres comptes de plate-forme effectuer la même opération.
Lorsqu'il est établi que le compte de référence a effectué une transaction, l'enregistrement des données du compte le plus récent doit être mis à jour pour le comparer avec les informations du compte obtenues la prochaine fois afin de déterminer s'il y a une nouvelle action de négociation.
La description du code de stratégie de la logique ci-dessus:
// 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
La logique de détection principale de la stratégie est le code ci-dessus. Afin de simplifier la conception, la stratégie utilise le modèle officiel FMZ [Digital Currency Trading Library], et$.Buy
et$.Sell
L'exposition au risque de défaut est calculée sur la base de l'exposition au risque de défaut.
Ajouter quelques affichages de barre d'état à la stratégie pour faciliter le suivi des données de chaque compte.
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
}
}
Nous allons le tester sur le vrai bot, par la plateforme de simulation FMZ wexApp pour le tester. Ici j'ai ajouté trois comptes wexApp, qui sont tous des comptes indépendants.
Ensuite, nous avons placé manuellement une commande par le terminal de trading FMZ pour voir si le bot pouvait automatiquement superviser l'ordre.
Vous pouvez voir que le bot a détecté le commerce et a effectué l'opération de supervision des ordres.
Stratégie complète:https://www.fmz.com/strategy/255182
La stratégie est uniquement à des fins d'étude. Si vous avez des questions, nous vous serions reconnaissants de laisser vos commentaires.