In den letzten zwei Tagen, als ich den Markt betrachtete, stellte ich unabsichtlich fest, dass Binance einen Bitcoin STORJ-Markt hat. Es ist seltsam, dass das Handelsvolumen sehr groß ist und die Handelsfrequenz sehr schnell ist.Bei der Beobachtung der 1-Sekunden-K-Linie von Binance wurde festgestellt, dass die Endpunkte, bei denen jemand alle 5- bis 7-s einen Preis von 20 000 STORJ auf den Markt bringt, unabhängig von den Kosten, direkt auf der K-Linie einen kleinen Putt bohrt, und der Preis in kurzer Zeit wiederhergestellt wird. Diese Operation wurde offensichtlich von einem von Eisberg beauftragten Roboter verursacht. Diese verkauften Operationen dauerten sehr lange, die Gesamtzahl wurde auf die zehn Millionen Dollar geschätzt.
Der Roboter, der speziell für die Ausbeutung des Hirnlosen, der den Eisberg verkauft, wurde in wenigen Minuten mit der einfachen Änderung der ursprünglichen Strategie der Hochfrequenz-Handlung fertiggestellt.
Da der Marktpreis alle paar Sekunden verkauft wird, müssen wir nur 10.000 Tiefen im Kaufbuch finden und die Einheiten vorne hängen. So ist es sehr wahrscheinlich, dass der Marktroboter genau das empfängt, wenn dieser Eisberg verkauft wird, und die Transaktionen sind sehr aktiv. Der sofortige Preisverfall hat auch einige Einheiten ausgelöst.
Die Strategie zeigt sich wie folgt: Anfangs wurden keine Erträge gedruckt, heute Nachmittag wurden sie geändert, die Erträge wurden ausgedruckt, der verrückte Verkaufsroboter hat die Menge jedes Mal auf etwa 5000 geändert, also ist die optimale Zeit vorbei. Anfangs kann man wahrscheinlich 100-200U pro Stunde kaufen, der Schlüssel ist risikofrei und kostengünstig. Von hier aus gesehen, gibt es im Gegenteil auch viele Techniken, wenn man eine Strategie schreibt, kann man in FMZ ein paar zehn Minuten verbringen, um die Bestellungen zu schreiben.
Der Strategie-Code ist sehr einfach, nur 80 Zeilen. Für Anfänger sind einige Parameter, wie z.B. die Präzision, bereits im Programm enthalten und können selbst geändert werden.
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()
}
}
KontrollpunktWie viel kostet diese Strategie, um zu laufen?
yc123hWenn diese Strategie wirksam ist, dann ist es, wenn man zu Beginn jeder Runde oft zwei versagte Bestellungen sieht, bevor man sie zurücknimmt (d.h. dass alle Kauf- und Verkaufsbedingungen wirksam sind).
Das GrasDas ist ein Null-Verfahren.
yc123hDanke, aber ich möchte Ihnen auch die Parameter fragen. Wie optimieren Sie die Parameter für eine solche Hochfrequenzstrategie? Zum Beispiel, ich sehe die Strategie aus dem Jahr 2014, die Sie geteilt haben, die Standard-Trainingsintervalle erreichen 3500 ms, wenn es sich um eine hohe Frequenz handelt, sollte das Trainingsintervall nicht ein wenig kürzer sein.
Das GrasDie Abschaffung ist ein Versagen, es ist ein Deal, man muss Geld verdienen, um zu beweisen, dass es funktioniert.