Contohnya: Pertukaran A: ETH_BTC Bursa B: ETH_USDT Bursa C (yang sebenarnya adalah Bursa B) adalah pasangan perdagangan lain, secara logiknya dianggap sebagai C (^): BTC_USDT
B, C pertukaran perdagangan pasangan gabungan ETH_BTC dan A pertukaran lindung nilai. Jadi BC sebenarnya adalah akaun pertukaran.
// 交易对以 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) } }
BNMBNMPro: TypeError: tidak boleh membaca sifat 'Sell' dari null pada utama (__FILE__:45) Pro: GetTicker: 429: {"msg":"Permintaan terlalu kerap.","kod":"50011"}
BNMBNMHei, ini hanya boleh berjalan jika anda mempunyai tiga mata wang atau jika anda mempunyai USDT.
BNMBNMTidak boleh berlari.
FmzeroDi mana video pengajaran?
Mimpi kecilPermintaan untuk tiga mata wang.
Mimpi kecilPermintaan terlalu kerap!
BNMBNMHei, ini hanya boleh berjalan jika anda mempunyai tiga mata wang atau jika anda mempunyai USDT.
BNMBNMApakah jumlah transaksi boleh ditetapkan 0.03? Apa yang 0.0007 dan 1/1.02 bermaksud?
BNMBNMBaiklah, saya akan berlari lagi.
Mimpi kecilJika anda ingin membuat laporan kesalahan, boleh hantar di sini atau melalui kumpulan rasmi FMZ @dreamback.
BNMBNMJika anda tidak boleh berlari, bolehkah anda menutup akaun anda?
Mimpi kecilSila hantar soalan atau tambah kepada kumpulan WeChat rasmi FMZ @MomGo
BNMBNMAdakah anda boleh menambahkan WeChat anda?
Mimpi kecilIni adalah strategi yang mudah, jika ada masalah, anda perlu menghantar soalan yang spesifik.