Merakam pengumuman Binance tentang penyingkiran mata wang

Penulis:Kebaikan, Dicipta: 2019-02-20 11:28:46, Dikemas kini:

Tujuan strategi:

Pada 15 Februari, Binance mengumumkan pengumuman lepas landas CLOAK, MOD, SALT, SUB, WINGS. Selepas pengumuman, mata wang yang terlibat segera mula jatuh, umumnya turun 15% dalam satu jam, dengan semakin banyak pengguna mengetahui berita itu, penurunan berterusan dan tidak ada pemulihan, dan ia telah jatuh separuh setakat ini. Jika anda dapat menjual syiling yang dipegang pada kali pertama selepas pengumuman, anda boleh memulihkan banyak kerugian.

Strategi ini berjalan di platform perdagangan kuantitatif FMZ (dahulu BotVS).

Idea:

Merayap ke halaman pengumuman keselamatan Binance dan memerhatikan maklumat dua masa pengumuman terdekat. Format khusus adalah Binance akan menghapus CLOAK, MOD, SALT, SUB, WINGS, Binance akan menghapus BCN, CHAT, ICN, TRIG.

Strategi ini akan menggunakan will delist sebagai kata kunci untuk merakam pengumuman pelepasan baru, sudah tentu, tidak mengesampingkan format pemberitahuan perubahan Binance, anda boleh merujuk kepada strategi ini untuk meningkatkan. Oleh kerana tugas perayap terlalu mudah, ia akan ditulis dalam JavaScript yang mudah. Selepas merakam mata wang delist, maklumat akaun akan diperiksa. Jika ada mata wang delist, ia akan dijual dengan harga yang lebih rendah. Jika ada pesanan yang belum selesai, ia akan dibatalkan terlebih dahulu. Sehingga penjualan syiling yang tersisa terjual sepenuhnya.

Kod merangkak:

var html = HttpQuery('https://support.binance.com/hc/zh-cn/sections/115000202591-%E6%9C%80%E6%96%B0%E5%85%AC%E5%91%8A')//Announcement page
html = html.slice(html.indexOf('article-list'),html.indexOf('pagination')) // Article list section
if(html.indexOf('will delist')>0){
    if(html.slice(html.indexOf('will delist')+3,html.indexOf('</a>')) != title){ //crawl only the first delist information
        var title = html.slice(html.indexOf('delist')+3,html.indexOf('</a>'))
        var downList = title.split('、')
        Log('New announcement is detected, the currency will be delist:', title, '@')//WeChat push release announcement
    }
}

Mengundurkan kod perintah:

function cancellOrder(){
    var openOrders = exchange.IO('api', 'GET', '/api/v3/openOrders')//Get all unexecuted orders
    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('There is a delist currency order exist, revoked', currency)
                exchange.IO("currency", currency)//To revoke a order, you need the trading pair information, so you must first switch to the trading pair.
                exchange.CancelOrder(order.orderId)
            }
        }
    }
}

Kod akaun cek:

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('delist currency will be emptied', account.Info.balances[i].asset)
                sellAll(account.Info.balances[i].asset, parseFloat(account.Info.balances[i].free))
                done = false
            }
        }
        Sleep(1000)
    }
    Log('Sale completed')
}

Kod pesanan:

var exchangeInfo = JSON.parse(HttpQuery('https://api.binance.com/api/v1/exchangeInfo'))
var pairInfo = {}  //Trading pair information, storing transaction progress, minimum trading volume and other related information, placing order will needed
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('Failed to get transaction information')
}
function sellAll(coin, free){
    var symbol = coin + 'BTC'
    exchange.IO("currency", coin+'_BTC') //switching trading pair
    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){
        exchange.Sell(sellPrice, sellAmount, symbol)
    }
}

Ringkasnya:

Kod di atas hanya untuk demonstrasi, kod lengkap boleh didapati diFMZ.COM. Halaman pengumuman boleh dijelajah sekali dalam satu minit, yang akan mempunyai masa yang cukup untuk menjual sebelum pengguna biasa.

Tetapi mungkin ada beberapa masalah, seperti mengembara yang disekat, perubahan format pengumuman, dan sebagainya. Jika mata wang tidak ada di Binance, anda juga boleh merujuk strategi ini ke bursa lain. Lagipun, mata wang yang tidak disenaraikan akan mempengaruhi semua platform.


Lebih lanjut