Nhấp vào trang thông báo Binance và xem thông tin về hai lần tháo gỡ gần đây, định dạng cụ thể là Binance tháo gỡ CLOAK, MOD, SALT, SUB, WINGS, Binance tháo gỡ BCN, CHAT, ICN, TRIG.
Crawler sẽ thu thập thông báo mới bằng cách sử dụng các từ khóa để thu thập thông báo mới, nhưng không loại trừ định dạng thông báo thay đổi tiền tệ, bạn có thể tham khảo chiến lược này để cải thiện. Vì nhiệm vụ của Crawler quá đơn giản, nó sẽ được viết bằng JavaScript đơn giản. Sau khi thu thập thông tin tài khoản, nếu có đồng tiền, nó sẽ được bán với giá thấp hơn, nếu có đơn đặt hàng chưa hoàn thành, nó sẽ được thu hồi. Các bài viết tham khảo và phân tích: https://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)
}
}