
Als ich mir kürzlich den Markt ansah, stellte ich zufällig fest, dass der Markt für STORJ, eine Münze auf Binance, sehr seltsam war. Das Handelsvolumen war sehr groß und die Handelsfrequenz sehr schnell. Die spezifische einminütige K-Linie ist wie folgt. Sie können sehen, dass das Handelsvolumen pro Minute ziemlich konstant ist und auf der Minutenlinie ein langer unterer Schatten zu sehen ist.
Durch die Beobachtung der 1-Sekunden-K-Linie von Binance haben wir einen Hinweis gefunden. Jemand würde alle 5-7 Sekunden 10.000 bis 20.000 STORJ verkaufen, unabhängig vom Preis, und direkt auf ein kleines Loch in der K-Linie treffen. Es wird sich im Inneren erholen. Dieser Vorgang wurde offensichtlich von einem von Iceberg in Auftrag gegebenen Roboter durchgeführt. Diese Verkaufsoperation dauerte sehr lange und der Gesamtbetrag wurde auf mehrere zehn Millionen Dollar geschätzt. In vielen Fällen erreichte der verursachte Slippage 1⁄1000, was bedeutet, dass der Ausführende dieser Strategie Zehntausende von Dollar verlor nur aufgrund des Scheiterns der Transaktion. Dollar. Solche mechanischen Vorgänge und aktiven Transaktionen schaffen jedoch offensichtliche Möglichkeiten für Market Making und Scalping.

Durch eine einfache Modifizierung der ursprünglichen Spot-Hochfrequenzstrategie dauerte es nur wenige Minuten, diesen Roboter zu erstellen, der gezielt den gedankenlosen Verkauf von Iceberg-Orders ausnutzt.
Da es alle paar Sekunden zu Marktverkäufen kommt, müssen wir nur eine Tiefe von 10.000 im Kaufauftragsbuch finden und die Bestellung davor platzieren. Auf diese Weise besteht eine hohe Wahrscheinlichkeit, dass der Market-Making-Roboter diesen Eisberg erhalten kann, wenn er verkauft wird. Zu diesem Zeitpunkt ist der Handel sehr aktiv und der sofortige Preisrückgang löst auch einige Kaufaufträge aus. Der Dasselbe Prinzip gilt für das Platzieren von Verkaufsaufträgen und deren entsprechenden Verkauf. Wiederholen Sie den Vorgang. Die Transaktionsfrequenz ist sehr hoch und auch wenn die Rendite jedes Mal nicht hoch ist, ist der Gesamtgewinn immer noch beträchtlich. Voraussetzung für alles ist natürlich, dass das Konto niedrige Transaktionsgebühren hat. Wenn die Transaktionsgebühren für Kauf und Verkauf 0,1 % betragen, reicht dieser Platz nicht aus, um die Transaktionsgebühren zu bezahlen.
Die Strategieleistung ist wie folgt. Zu Beginn wurden die Gewinne nicht gedruckt. Ich habe es heute Nachmittag geändert und die Gewinne gedruckt. Der verrückte Verkaufsroboter hat die Menge jedes Mal auf etwa 5.000 geändert, sodass die beste Arbitrageperiode vorbei ist. Zu Beginn können Sie etwa 100-200U pro Stunde verdienen. Der Schlüssel ist, dass es risikolos und kostengünstig ist. Wenn man es von der anderen Seite betrachtet, gibt es tatsächlich viele Techniken für Eisberg-Orders. Wenn Sie wissen, wie man eine Strategie schreibt, können Sie in nur einem Dutzend Minuten eine auf FMZ schreiben. Beobachten Sie die Tiefe der Kaufaufträge, um die Auftragsgröße zu bestimmen und Preis und beobachten Sie die Größe aktiver Kaufaufträge, um die Größe ausstehender Aufträge anzupassen. Und die Eisberg-Anvertrauensstrategie mit Merkmalen wie der Besetzung des Marktes kann leicht Zehntausende von Dollar sparen.

Der Strategiecode ist sehr einfach, nur 80 Zeilen. Geeignet für Anfänger. Einige Parameter wie die einfache Genauigkeit sind im Programm fest codiert. Sie können sie selbst ändern. Die erforderlichen Parameter sind in der folgenden Abbildung dargestellt. Es wird empfohlen, sie für die zukünftige Verwendung zu speichern, falls das Börsenhandelspaar hat eine weitere verrückte Transaktion. Sie können ihnen jederzeit Zinsen berechnen.

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 //这里要减去自己的挂单
}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) //保证在盘口
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
function main() {
CancelPendingOrders()
while (true) {
OnTick()
}
}