Vor kurzem fand ich, dass Binance hat eine Währung STORJ Markt ist sehr seltsam unbeabsichtigt, wenn ich den Markt beobachtete, das Handelsvolumen ist sehr groß, und die Handelsfrequenz ist sehr schnell, die spezifische ein-Minuten-K-Linie der folgenden Grafik, können wir sehen, dass das Handelsvolumen jeder Minute sind konsistent, und die Minute K-Linie kann in einer langen unteren Schattenlinie gesehen werden.
Beobachten Sie mit Binance 1-Sekunde K-Linie, Ich fand heraus, das Ende der Geschichte, jemand wird vermarktet 10.000-20.000 STORJs alle 5-7s, unabhängig von den Kosten, und brechen ein kleines Loch in der K-Linie direkt, während der Preis erholt sich auf kurze Sicht. Diese Operation wurde offensichtlich durch einen Roboter auf einer Eisberg-Kommission verursacht. Diese Verkaufsaktion dauerte für eine sehr lange Zeit, insgesamt geschätzte $10 Millionen Niveau, und in vielen Fällen verursacht Schlupf von bis zu 0,1%, was bedeutet, dass der Ausführende dieser Strategie verlor Zehntausende von Dollar in Schlupf auf dem Handel allein. Aber mit einer solchen mechanischen Operation und aktiven Handel, gab es eine klare Gelegenheit für den Markt Scalping machen.
Eine einfache Änderung der ursprünglichen Spot-HF-Strategie, und in wenigen Minuten bekam ich diesen Bot, der sich auf den Ausnutzung dieses hirnlosen Verkaufs von Eisbergprovisionen spezialisiert hat.
Da der Markt alle paar Sekunden zum Marktpreis verkauft, müssen wir nur die 10k-Tiefe im Buy-Order-Buch finden und den Auftrag davor aufhängen. So dass, wenn der Eisberg verkauft, eine hohe Wahrscheinlichkeit besteht, dass der Market-Making-Roboter nur empfangen kann, und zu diesem Zeitpunkt ist die Transaktion sehr aktiv, der momentane Preisrückgang auch einige Buy-Orders auslöste. Auf die gleiche Weise können Hanging-Sell-Orders in den Trend geworfen werden, so dass wiederholte Operationen. Die Häufigkeit der Transaktionen ist sehr hoch, auch wenn jedes Mal die Rendite nicht sehr groß ist, ist die Gesamtrendite auch erheblich. Natürlich ist die Prämisse von allem, ein niedriges Gebührenkonto zu haben, wenn sowohl die Kauf- als auch die Verkaufsgebühren 0,1%, dann reicht der Platz nicht aus, um die Gebühren zu bezahlen.
Die Strategie funktioniert wie folgt, zunächst wurde keiner der Gewinne gedruckt, also habe ich sie heute Nachmittag geändert, und habe die Gewinne gedruckt, die verrückten Verkaufsroboter haben das Volumen auf ungefähr 5000 pro Mal geändert, also ist es
Der Strategie-Code ist sehr einfach, nur 80 Zeilen, die für Anfänger geeignet ist, hier sind einige der Parameter wie Bestellgenauigkeit und so weiter im Programm festgeschrieben, können Sie die Parameter wie folgt ändern.
function CancelPendingOrders() {
var orders = _C(exchange.GetOrders)
for (var j = 0; j < orders.length; j++) {
exchange.CancelOrder(orders[j].Id, orders[j])
}
}
function onexit(){
CancelPendingOrders()
}
function GetPrice(Type, Depth) {
var sumAmount = 0
var checkAmount = Type == "Buy" ? CheckBuyAmount : CheckSellAmount
var deep = Type == "Buy" ? Depth.Bids : Depth.Asks
for(var i = 0; i < Math.min(20, deep.length); i++) {
if(Type == "Buy" && deep[i].Price == lastBuyPrice && buyId){
sumAmount += deep[i].Amount - amountBuy //Subtract your own pending orders here
}else if(Type == "Sell" && deep[i].Price == lastSellPrice && sellId){
sumAmount += deep[i].Amount - amountSell
}else{
sumAmount += deep[i].Amount
}
if(sumAmount >= checkAmount){
return deep[i].Price
}
}
return deep[19].Price
}
function OnTick() {
var depth = _C(exchange.GetDepth)
var buyPrice = _N(Math.min(GetPrice("Buy", depth) + 0.0001, depth.Asks[0].Price-0.0001) , 4) //Guaranteed at the market
var sellPrice = _N(Math.max(GetPrice("Sell", depth) - 0.0001, depth.Bids[0].Price+0.0001), 4)
LogStatus('buy_price:'+buyPrice, ' sell price: '+sellPrice)
if ((sellPrice - buyPrice) < DiffPrice) {
buyPrice = 0
}
if(sellPrice != lastSellPrice && sellId){
exchange.CancelOrder(sellId);
sellId = 0
lastSellPrice = 0
}
if(buyPrice != lastBuyPrice && buyId){
exchange.CancelOrder(buyId);
buyId = 0
lastBuyPrice = 0
}
var acc = _C(exchange.GetAccount)
if(account.Stocks+account.FrozenStocks != acc.Stocks+acc.FrozenStocks){
LogProfit((acc.Stocks+acc.FrozenStocks)*depth.Bids[0].Price+acc.Balance+acc.FrozenBalance - 2000)
Log('free '+acc.Stocks, ' lock: '+ acc.FrozenStocks, ' total: ' , (acc.Stocks+acc.FrozenStocks)*depth.Bids[0].Price+acc.Balance+acc.FrozenBalance)
}
account = acc
amountBuy = _N(Math.min(account.Balance / buyPrice - 0.1, Amount), 0)
amountSell = _N(account.Stocks, 0)
if (sellPrice > 0 && amountSell > 40 && sellId == 0) {
sellId = exchange.Sell(_N(sellPrice,4), amountSell)
lastSellPrice = sellPrice
}
if (buyPrice>0 && amountBuy > 40 && buyId == 0) {
buyId = exchange.Buy(_N(buyPrice,4), amountBuy)
lastBuyPrice = buyPrice
}
Sleep(Interval)
}
var account = {Stocks:0, FrozenStocks:0, Balance:0, FrozenBalance:0}
var buyId = 0
var sellId = 0
var lastBuyPrice = 0
var lastSellPrice = 0
var amountSell = 0
var amountBuy = 0
var log_account_time = 0
function main() {
CancelPendingOrders()
while (true) {
OnTick()
}
}