• 爬虫爬取币安公告自动出售将要下架币策略


    此爬虫爬取币安公告,判断是否有币要下架,然后自动判断要下架的币,如果账户内有下架币余额,将会自动出售。每分钟检查一次,基本可以赶在绝大部分人之前将币卖出,挽回损失。

    策略运行在FMZ发明者量化平台,语言使用JavaScript.

    源码复制地址:https://www.fmz.com/strategy/137450

    var exchangeInfo = JSON.parse(HttpQuery('https://api.binance.com/api/v1/exchangeInfo'))
    var pairInfo = {} 
    var downList = []
    if(exchangeInfo){
        for (var i=0; i<exchangeInfo.symbols.length; i++){
            var info = exchangeInfo.symbols[i];
            pairInfo[info.symbol] = {minQty:parseFloat(info.filters[2].minQty),tickerSize:parseFloat(info.filters[0].tickSize), 
                stepSize:parseFloat(info.filters[2].stepSize), minNotional:parseFloat(info.filters[3].minNotional)}
        }
    }else{
        Log('fail to get exchangeInfo')
    }
    function sellAll(coin, free){
        var symbol = coin + 'BTC'
        exchange.IO("currency", coin+'_BTC')
        var ticker = _C(exchange.GetTicker)
        var sellPrice = _N(ticker.Buy*0.7, parseInt((Math.log10(1.1/pairInfo[symbol].tickerSize))))
        var sellAmount = _N(free, parseInt((Math.log10(1.1/pairInfo[symbol].stepSize))))
        if (sellAmount > pairInfo[symbol].minQty && sellPrice*sellAmount > pairInfo[symbol].minNotional){
            var id = exchange.Sell(sellPrice, sellAmount, symbol)
            exchange.CancelOrder(order.orderId)
        }
    }
    function cancellOrder(){
        var openOrders = exchange.IO('api', 'GET', '/api/v3/openOrders')
        for (var i=0; i<openOrders.length; i++){
            var order = openOrders[i];
            for (var j=0;j<downList.length;j++){
                if(order.symbol.startsWith(downList[j])){
                    var currency = downList[j] + '_' + order.symbol.slice(downList[j].length);
                    Log('delist coin exist, cancel all orders first', currency)
                    exchange.IO("currency", currency)
                    exchange.CancelOrder(order.orderId)
                }
            }
        }
    }
    function checkAccount(){
        var done = false
        while(!done){
            account = _C(exchange.GetAccount)
            done = true
            for (var i=0; i<account.Info.balances.length; i++){
                if(downList.indexOf(account.Info.balances[i].asset)>-1 && parseFloat(account.Info.balances[i].free)>pairInfo[account.Info.balances[i].asset+'BTC'].minQty){
                    Log('this coin will be dumped', account.Info.balances[i].asset)
                    sellAll(account.Info.balances[i].asset, parseFloat(account.Info.balances[i].free))
                    done = false
                }
            }
            Sleep(1000)
        }
        Log('sell done')
    }
    function main() {
        var title = ''
        while(true){
            var html = HttpQuery('https://support.binance.com/hc/en-us/sections/115000202591-Latest-News')
            html = html.slice(html.indexOf('Delist '),html.length)
            if(html){
                if(html.slice(7,html.indexOf('</a>')) != title){
                    title = html.slice(7,html.indexOf('</a>'))          
                    downList = html.slice(7,html.indexOf('</a>')).replace(' and ', ',').split(',')
                    Log('new announcement,will delist:', downList)
                    cancellOrder()
                    checkAccount()
                }else{
                    Log('new announcement was not found')
                }
            }else{
                Log('web spider wrong')
            }
            Sleep(60*1000)
        }
    }
  • 相关阅读:
    K8S--架构及基本概念
    虚拟化及云原生的一些概念
    JPA事务中的异常最后不也抛出了,为什么没被catch到而导致回滚?
    OpenFaaS实战之六:of-watchdog(为性能而生)
    OpenFaaS实战之五:大话watchdog
    OpenFaaS实战之四:模板操作(template)
    OpenFaaS实战之三:Java函数
    OpenFaaS实战之二:函数入门
    OpenFaaS实战之一:部署
    Python
  • 原文地址:https://www.cnblogs.com/botvsing/p/10984154.html
Copyright © 2020-2023  润新知