Просмотр объявления Binance об исключении валют из списка

Автор:Доброта, Создано: 2019-02-20 11:28:46, Обновлено:

Цель стратегии:

15 февраля Binance объявила о снятии объявления о CLOAK, MOD, SALT, SUB, WINGS. После объявления об этом валюта сразу начала падать, в целом на 15% за час, все больше и больше пользователей узнали о новостях, спад продолжался и не было отскока, и он упал вдвое до сих пор.

Эта стратегия работает на платформе количественной торговли FMZ (ранее BotVS).

Идея:

Прокрутите страницы с объявлениями о безопасности Binance и посмотрите информацию о ближайших двух времених объявления.

Стратегия будет использовать will delist в качестве ключевого слова для сканирования нового объявления о выпуске, конечно, не исключает формат уведомления об изменении Binance, вы можете обратиться к этой стратегии для улучшения. Поскольку задача сканирования слишком проста, она будет написана простым JavaScript. После сканирования валюты delist, информация о счете будет проверена. Если есть валюта delist, она будет продаваться по более низкой цене. Если есть незавершенный заказ, он будет отменен сначала. Пока продажа оставшихся монет не будет полностью продана.

Код сканирования:

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
    }
}

Код отмены приказа:

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)
            }
        }
    }
}

Код счета:

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')
}

Код заказа:

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)
    }
}

Подводя итог:

Вышеприведенный код предназначен только для демонстрации, полный код можно найти по адресу:FMZ.COM. Страница объявления может сканироваться раз в минуту, что даст достаточно времени, чтобы продать раньше обычного пользователя.

Но могут возникнуть некоторые проблемы, такие как блокировка сканирования, изменения формата объявления и т. д. Если валюта не на Binance, вы также можете обратиться к этой стратегии на другие биржи. В конце концов, валюта с списка повлияет на все платформы.


Больше