Binanceの発表をクロールして、上場廃止になりそうなコインを自動的に売却する

Tool Trade-aided
作成日: 2019-02-15 18:33:28 最終変更日: 2019-07-03 16:16:39
コピー: 41 クリック数: 3457
3
フォロー
1444
フォロワー

Binanceの公告ページをクレイプして,最近2回の下場情報を見てください.具体的には,BinanceはCLOAK,MOD,SALT,SUB,WINGSを下場し,BinanceはBCN,CHAT,ICN,TRIGSを下場しました.

爬虫は,を下架にキーワードとして付け,新しい下架公告をクロールする.もちろん,Binanceの変更公告形式は,この策略を改良するために参照することができる.爬虫の任務があまりにも単純であるため,単純なJavaScriptで書き出す.下架コインにクロールした後,アカウント情報をチェックし,下架コインがある場合は,より低い価格で全部売却し,未完成の注文がある場合は,持っていた下架コインが完全に売却されるまで撤回する. 詳細は http://zhuanlan.zhihu.com/p/57012933で公開されています.

ストラテジーソースコード
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)
    }
}