Par exemple: Une bourse: ETH_BTC Échangeur B: ETH_USDT L'échange C (en fait, l'échange B est une autre paire de transactions, qui est logiquement considérée comme C。) : BTC_USDT
B, C est une combinaison d'ETH_BTC et A est une contrepartie de l'échange.
// 交易对以 ETH_BTC , ETH_USDT , BTC_USDT 为例 // 教学策略,还有很大优化空间,例如:币平衡模块,根据手续费率控制对冲差价,硬搬砖等等。 function main () { if (exchanges[0].GetQuoteCurrency() != exchanges[2].GetCurrency().split("_")[0] || exchanges[0].GetCurrency().split("_")[0] != exchanges[1].GetCurrency().split("_")[0]) { throw "交易所 交易对 配置错误。" } var marketSlideRate = 1 // 1.02 var hedgeDiff = 0.0007 var hedgeAmount = 0.1 var isFirst = true var concurrenter = function (funcName, isWait, tasks, amounts) { for (var i = 0 ; i < exchanges.length; i++) { if (isFirst) { exchanges[i].acc = _C(exchanges[i].GetAccount) exchanges[i].initAcc = exchanges[i].acc } if (isWait) { var a = funcName == "GetTicker" ? exchanges[i].ticker = exchanges[i].tiR.wait() : exchanges[i].id = exchanges[i].trR.wait() if (funcName == "trade") { exchanges[i].acc = _C(exchanges[i].GetAccount) } } else { var b = funcName == "GetTicker" ? exchanges[i].tiR = exchanges[i].Go(funcName) : exchanges[i].trR = exchanges[i].Go(tasks[i], -1, amounts[i], exchanges[i].GetCurrency()) } } if (funcName == "trade" && isWait) { Log("BTC:", exchange.BTC = exchanges[0].acc.Balance + exchanges[2].acc.Stocks, "ETH:", exchange.ETH = exchanges[0].acc.Stocks + exchanges[1].acc.Stocks, "USDT:", exchange.USDT = exchanges[1].acc.Balance + exchanges[2].acc.Balance, "#FF0000") LogProfit(exchange.USDT - (exchanges[1].initAcc.Balance + exchanges[2].initAcc.Balance) - (exchanges[0].initAcc.Balance + exchanges[2].initAcc.Stocks - exchange.BTC) * exchanges[2].ticker.Last - (exchanges[0].initAcc.Stocks + exchanges[1].initAcc.Stocks - exchange.ETH) * exchanges[1].ticker.Last) } isFirst = false } while (1) { concurrenter("GetTicker", false) concurrenter("GetTicker", true) var tickerA = exchanges[0].ticker var tickerB = exchanges[1].ticker var tickerC = exchanges[2].ticker var tickerBC = { Buy : tickerB.Buy / tickerC.Sell, Sell : tickerB.Sell / tickerC.Buy, } if (tickerA.Buy - tickerBC.Sell > hedgeDiff && exchanges[0].acc.Stocks > 0.2 && exchanges[1].acc.Balance > 500 && exchanges[2].acc.Stocks > 0.03) { // Sell A , Buy BC (Buy B Sell C) concurrenter("trade", false, ["Sell", "Buy", "Sell"], [hedgeAmount, marketSlideRate * tickerB.Sell * hedgeAmount, tickerB.Sell * hedgeAmount / tickerC.Buy]) concurrenter("trade", true) } if (tickerBC.Buy - tickerA.Sell > hedgeDiff && exchanges[0].acc.Balance > 0.03 && exchanges[1].acc.Stocks > 0.2 && exchanges[2].acc.Balance > 500) { // Buy A , Sell BC (...) concurrenter("trade", false, ["Buy", "Sell", "Buy"], [marketSlideRate * hedgeAmount * tickerA.Sell, hedgeAmount, marketSlideRate * hedgeAmount * tickerA.Sell * tickerC.Sell]) concurrenter("trade", true) } Sleep(500) } }
N.B.M.N.M.Pour: TypeError: ne peut pas lire la propriété 'Sell' de null au niveau principal (__FILE__:45) Pour: Je suis en train d'essayer de vous aider.
N.B.M.N.M.Bonjour, il faut trois pièces de monnaie pour courir, ou il faut USDT pour courir.
N.B.M.N.M.Comment ne pas courir?
Je suis zéro.Où est la vidéo pédagogique?
L'inventeur de la quantification - un petit rêveLes trois pièces sont nécessaires.
L'inventeur de la quantification - un petit rêveDes demandes trop fréquentes!
N.B.M.N.M.Bonjour, il faut trois pièces de monnaie pour courir, ou il faut USDT pour courir.
N.B.M.N.M.On peut définir le volume de transaction à 0.03?
N.B.M.N.M.Je vais recommencer.
L'inventeur de la quantification - un petit rêveLes messages d'erreur peuvent être envoyés ici, ou sur le groupe officiel de FMZ @dreamback.
N.B.M.N.M.Je ne peux pas courir, je ne peux pas me lever, je ne peux pas me lever, je ne peux pas me lever.
L'inventeur de la quantification - un petit rêveEnvoyez des questions spécifiques, ou ajoutez le groupe officiel de FMZ sur WeChat @Mönchön
N.B.M.N.M.Vous pouvez ajouter votre compte sur WeChat?
L'inventeur de la quantification - un petit rêveC'est une tactique à la main, si vous avez un problème, envoyez des questions concrètes.