商品の清掃のために使われています. 例えば,複数の取引対を走る現金網,マーティン戦略,走るつもりはないが,手元にはNの通貨があり,一つずつ売るのに苦労している. 通貨をパラメータに入力すると,自動市場価格ですべて売られます. しかし,売り切れ後,0.0012BTC未満の資産が残る場合もあります. このとき,現金財布にBNBを交換し,小額資産を交換する必要があります. BNBは,市場価格で売却されるのが一番です.
//全局变量 var arrSymbols = B_symbols.split(",") // 逗号分割交易品种字符串 //获取价格精度 数量精度 函数 function GetPrecision() { var precision = { price: 0, //精度-价格 amount: 0 //精度-数量 } var depth = _C(exchange.GetDepth) if (!depth) { throw '无法连接交易所行情,需要海外托管者' } for (var i = 0; i < depth.Asks.length; i++) { var amountPrecision = depth.Asks[i].Amount.toString().indexOf('.') > -1 ? depth.Asks[i].Amount.toString().split('.')[1].length : 0 precision.amount = Math.max(precision.amount, amountPrecision) //数量精度 var pricePrecision = depth.Asks[i].Price.toString().indexOf('.') > -1 ? depth.Asks[i].Price.toString().split('.')[1].length : 0 precision.price = Math.max(precision.price, pricePrecision) //价格精度 } return precision } //取消所有挂单函数 //形参e 是 exchange.SetCurrency() 的 exchange function cancelAll(e) { while (true) { var orders = _C(e.GetOrders) if (orders.length == 0) { break } else { for (var i = 0; i < orders.length; i++) { e.CancelOrder(orders[i].Id, orders[i]) Sleep(200) } } Sleep(200) } } function Trad() { for (var i = 0; i < arrSymbols.length; i++) { Sleep(500) symbol = arrSymbols[i] exchange.SetCurrency(symbol) var ticker = _C(exchange.GetTicker).Last //最新价 var precision = GetPrecision() //获取数量精度、价格精度 var acc = _C(exchange.GetAccount) var base_balance = acc.Stocks //币种 可用余额 var base_FrozenStocks = acc.FrozenStocks //币种挂单冻结的数量 var holdAmount = _N(parseFloat(base_balance + base_FrozenStocks), precision.amount) //持仓量 = 币种余额+冻结数量 if (holdAmount == 0 || holdAmount * ticker < 10) { //没有持仓 就是一开始的状态,10USDT价值是币安现货的最小交易金额,小于10的没法交易 cancelAll(exchange) Log(symbol, "没有持仓,或者持仓数量不足以交易,持仓数量:", holdAmount) } if (holdAmount * ticker >= 10) { //持仓价值 >= USDT价值,则有持仓。 Log(symbol, "有持仓,持仓数量:", holdAmount, "市价清仓", "#B15BFF") cancelAll(exchange) Sleep(500) var clearsell = exchange.Sell(-1, holdAmount) //清仓 Sleep(500) acc = _C(exchange.GetAccount) base_balance = acc.Stocks //币种 可用余额 base_FrozenStocks = acc.FrozenStocks //币种挂单冻结的数量 holdAmount = _N(parseFloat(base_balance + base_FrozenStocks), precision.amount) //重新获取持仓数量 Log(symbol, "持仓数量:", holdAmount, "#B15BFF") } } } //退出撤销所有挂单 function onexit() { Log("机器人停止,撤销所有挂单", "#6F00D2") for (var i = 0; i < arrSymbols.length; i++) { symbol = arrSymbols[i] exchange.SetCurrency(symbol) cancelAll(exchange) Sleep(200) } Sleep(200) } //出错退出撤销所有挂单 function onerror() { Log("机器人出错,撤销所有挂单", "#00BB00") for (var i = 0; i < arrSymbols.length; i++) { symbol = arrSymbols[i] exchange.SetCurrency(symbol) cancelAll(exchange) Sleep(200) } Sleep(200) } function main() { if (B_chongzhi) { // LogProfitReset() //清空收益图表,只清空图表,日志信息不清除 LogReset() //清空日志。只清空日志,不清除图表。 LogVacuum() Log("重置所有数据", "#FF0000") } while (true) { Trad() Sleep(B_Sleep_time * 1000) } }