Misalnya: A: ETH_BTC B: ETH_USDT Bursa C (yang sebenarnya adalah bursa B) adalah pasangan transaksi lain, yang secara logis dianggap sebagai C.): BTC_USDT
B, C adalah pasangan perdagangan yang menggabungkan ETH_BTC dan A. Jadi BC sebenarnya adalah akun 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 dapat membaca properti 'Sell' dari null pada main (__FILE__:45) Pro: GetTicker: 429: {"msg":"Permintaan terlalu sering.","kode":"50011"}
BNMBNMHalo, ini hanya bisa berjalan jika Anda memiliki 3 koin atau jika Anda memiliki USDT.
BNMBNMBagaimana tidak?
FmzeroDi mana video pengajaran?
Mimpi kecilSaya tidak tahu apa yang akan terjadi.
Mimpi kecilPermintaan terlalu sering!
BNMBNMHalo, ini hanya bisa berjalan jika Anda memiliki 3 koin atau jika Anda memiliki USDT.
BNMBNMApakah volume transaksi bisa disetel ke 0.03? Apa yang 0.0007 dan 1/1.02 itu?
BNMBNMBaiklah, aku akan lari lagi.
Mimpi kecilJika Anda ingin melaporkan kesalahan di sini, atau di grup resmi FMZ @dreamback.
BNMBNMJika Anda tidak bisa berlari, apakah Anda bisa menambahkan pesan Anda?
Mimpi kecilTuliskan pertanyaan Anda, atau tambahkan akun resmi FMZ di grup Weibo @MomGo
BNMBNMApakah Anda bisa menambahkan WeChat ke akun Anda?
Mimpi kecilIni adalah strategi langsung, jika ada masalah, Anda harus mengirim pertanyaan khusus.