Objetivo de la estrategia:
El 15 de febrero, Binance anunció el anuncio del despegue de las monedas CLOAK, MOD, SALT, SUB, WINGS. Después del anuncio, la moneda involucrada comenzó a caer inmediatamente, generalmente un 15% en una hora, con más y más usuarios conociendo la noticia, el declive continuó y no hubo rebote, y ha caído a la mitad hasta ahora.
Esta estrategia se ejecuta en la plataforma de negociación cuantitativa FMZ (anteriormente BotVS).
- ¿ Qué?
Descargar las páginas de anuncios de seguridad de Binance y observar la información de los dos tiempos de anuncio más cercanos. El formato específico es
La estrategia utilizará el
Código de rastreo:
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
}
}
Revocar el código de orden:
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)
}
}
}
}
Código de la cuenta de cheques:
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')
}
Código de la orden:
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)
}
}
En resumen:
El código anterior es sólo de demostración, el código completo se puede encontrar enFMZ.COMLa página de anuncios se puede rastrear una vez por minuto, que tendrá tiempo suficiente para vender antes que el usuario común.
Sin embargo, puede haber algunos problemas, como el rastreo bloqueado, cambios en el formato de anuncio, etc. Si la moneda no está en Binance, también puede referirse a esta estrategia a otros intercambios. Después de todo, la moneda de la lista afectará a todas las plataformas.