উদাহরণস্বরূপ A এক্সচেঞ্জঃ ETH_BTC বি এক্সচেঞ্জঃ ETH_USDT এক্সচেঞ্জ সি (বাস্তবে এক্সচেঞ্জ বি) অন্য একটি লেনদেনের জোড়া, যা যৌক্তিকভাবে C বলে মনে করা হয়): BTC_USDT
বি.সি. এক্সচেঞ্জ ট্রেডিং প্যারে ইটিএইচ_বিটিসি এবং এ এক্সচেঞ্জ হেজিংয়ের সমন্বয় করে; সুতরাং বিসি আসলে একটি এক্সচেঞ্জ অ্যাকাউন্ট।
// 交易对以 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) } }
বিএনএমবিএনএমপ্রো: TypeError: main (__FILE__:45) এ null এর 'Sell' সম্পত্তি পড়তে পারে না প্রো: GetTicker: 429: {"msg":"অতি ঘন ঘন অনুরোধ.","কোড":"50011"}
বিএনএমবিএনএমহ্যালো, এটা চালানোর জন্য তিনটি মুদ্রা লাগবে, অথবা USDT থাকলে চালানো যাবে।
বিএনএমবিএনএমকেন পালাতে পারছ না?
fmzeroশিক্ষামূলক ভিডিও কোথায়?
ছোট্ট স্বপ্নতিন মুদ্রার প্রয়োজন।
ছোট্ট স্বপ্নঅনেক বার অনুরোধ!
বিএনএমবিএনএমহ্যালো, এটা চালানোর জন্য তিনটি মুদ্রা লাগবে, অথবা USDT থাকলে চালানো যাবে।
বিএনএমবিএনএমআপনি কি 0.03 সেট করতে পারেন? 0.07 এবং 1/1.02 এর মানে কি?
বিএনএমবিএনএমঠিক আছে, আমি আবার দৌড়াবো।
ছোট্ট স্বপ্নএফএমজেডের অফিসিয়াল গ্রুপ @মুনগুরুতে ভুলের খবর পাঠাতে পারেন।
বিএনএমবিএনএমআপনি কি আপনার মেসেঞ্জার ডাউনলোড করতে পারবেন?
ছোট্ট স্বপ্নএফএমজেডের অফিসিয়াল উইকিমিডিয়া গ্রুপ @ ডিনমিরো যোগ করুন।
বিএনএমবিএনএমআপনি কি আপনার উইকিমিডিয়া যোগ করতে পারেন?
ছোট্ট স্বপ্নএটি একটি সহজ কৌশল, যদি কোনও সমস্যা হয় তবে একটি নির্দিষ্ট প্রশ্ন পাঠাতে হবে।