Beaucoup d'amis de Coin Circle qui font des transactions manuelles ont besoin d'un robot de suivi, mais il faut plus de temps pour commencer à programmer la conception lorsque vous avez des difficultés avec les bases 0.
Tout d'abord, pour analyser les besoins, le robot a pour fonction de réaliser que lorsque l'opération de vente et d'achat d'un compte est effectuée, les autres comptes suivent. Nous avons donc commencé par identifier deux sujets:
Une fois que nous avons compris ce besoin, nous devons continuer à réfléchir.
La surveillance des comptes de référence est très simple pour les comptes en espèces, nous pouvons simplement comparer le nombre de pièces dans les données d'information de compte les plus récentes avec le nombre de pièces dans les données d'information de compte les plus récentes actuellement obtenues. Si le nombre de pièces dans les données d'information de compte actuelles est supérieur à celui enregistré la dernière fois, il est prouvé que le compte de référence a effectué une opération d'achat et que l'achat a été effectué avec succès. Si, au contraire, il y a moins de pièces, une opération de vente est effectuée pour le compte de référence.
Lorsque vous découvrez que le compte de référence a exécuté une transaction, vous devez toujours mettre à jour le dernier enregistrement de données de compte pour comparer avec les informations de compte obtenues la prochaine fois pour déterminer s'il y a eu une nouvelle transaction.
La logique ci-dessus est décrite en code stratégique:
// 检测跟单
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
}
// 执行跟单
Log("跟单!数量:", Math.abs(amount), "#FF0000")
for (var i = 1 ; i < exchanges.length ; i++) { // i 等于 0 时,是参考交易所,不处理,处理其它的跟单交易所
func(exchanges[i], Math.abs(amount)) // 执行具体的交易函数,可能是$.Buy 或者是 $.Sell ,具体看amount 是大于0,还是小于0
}
// 执行跟单之后更新参考交易所账户信息记录
initAcc = nowAcc // 更新参考交易所最近一次的账户信息,用于下次对比
La stratégie est basée sur la logique de détection du code ci-dessus. Pour simplifier la conception, la stratégie utilise le modèle de la bibliothèque de transactions de crypto-monnaies officiel de FMZ.$.Buy
, $.Sell
Toutes sont des fonctions de ce modèle, dont la fonction est d'exécuter l'opération suivante.
En plus d'ajouter des barres d'état à la politique pour faciliter la surveillance des données de chaque compte, la politique complète est la suivante:
function test() {
// 测试函数
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 "没有跟单的交易所"
}
var exName = exchange.GetName()
// 检测参考交易所
if (exName.includes("Futures_")) {
throw "仅支持现货跟单"
}
Log("开始监控", exName, "交易所", "#FF0000")
// 检测跟单交易所
for (var i = 1 ; i < exchanges.length ; i++) {
if (exchanges[i].GetName().includes("Futures_")) {
throw "不支持期货交易所跟单"
}
}
var initAcc = _C(exchange.GetAccount)
while(1) {
if(IsVirtual()) {
// 测试函数
test()
}
Sleep(5000)
// 更新参考账户当前的账户信息
var nowAcc = _C(exchange.GetAccount)
// 参考交易所账户信息
var refTbl = {
type : "table",
title : "参考交易所",
cols : ["名称", "币", "冻结币", "钱", "冻结钱"],
rows : []
}
refTbl.rows.push([exName, nowAcc.Stocks, nowAcc.FrozenStocks, nowAcc.Balance, nowAcc.FrozenBalance])
// 跟单交易所账户信息
var followTbl = {
type : "table",
title : "跟单交易所",
cols : ["名称", "币", "冻结币", "钱", "冻结钱"],
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])
}
// 状态栏显示
LogStatus(_D(), "\n`" + JSON.stringify(refTbl) + "`", "\n`" + JSON.stringify(followTbl) + "`")
// 检测跟单
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
}
// 执行跟单
Log("跟单!数量:", Math.abs(amount), "#FF0000")
for (var i = 1 ; i < exchanges.length ; i++) {
func(exchanges[i], Math.abs(amount))
}
// 执行跟单之后更新参考交易所账户信息记录
initAcc = nowAcc
}
}
Nous allons faire un test en direct, en utilisant FMZ pour tester une simulation d'échange WexApp. J'ai ajouté ici trois comptes WexApp, qui sont indépendants les uns des autres.
Ensuite, nous utilisons le terminal de transaction de FMZ pour effectuer manuellement la prochaine commande et voir si le robot effectue la commande automatiquement.
Vous pouvez voir que le robot détecte la transaction et exécute l'opération de suivi.
La stratégie complète:https://www.fmz.com/strategy/255182
Les stratégies sont uniquement pour l'apprentissage, merci de laisser un message si vous avez des questions.
Les SyriensBonjour, pourriez-vous m'aider à le déployer, en payant une contribution. Merci.
Les SyriensBonjour, pourriez-vous m'aider à le déployer, en payant une contribution. Merci.
Je suis grosse.Les pendentifs peuvent-ils être détectés?
13169222039Bonjour, j'aimerais vous demander si vous pouvez obtenir le code de la personne qui est sur le billet.
L'inventeur de la quantification - un petit rêveLe code de cette stratégie est open source, elle est disponible sur Strategy Square et vous pouvez consulter les tutoriels mis en place par la communauté FMZ.
la racineIl y a un retard sur les pièces de monnaie réelles, et peut-être que votre prix est très différent de leur prix.