【币安多交易对】 现货 用来市价清仓用的

Author: 轻轻的云, Date: 2022-05-02 10:15:10
Tags:

这个就是用来清仓现货的, 比如跑多交易对的现货网格、马丁策略,不想跑了,可是手里N多各种币种,挨个卖太麻烦了, 就用这个就行,把币种输入到参数里面,就自动的市价全都卖了。 不过有时候卖完之后,还会有估值小于0.0012BTC的资产,这个时候就需要到现货钱包中用【小额资产兑换BNB】了, 也就是说如果有BNB,最好最后再市价卖掉。

img

img

img


//全局变量
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)
    }
}



More