
최근에 우연히 바이낸스 코인인 STORJ의 시장이 매우 이상하다는 것을 알게 되었습니다. 거래량이 매우 크고 거래 빈도가 매우 빠릅니다. 구체적인 1분 K-라인은 다음과 같습니다. 다음을 볼 수 있습니다. 분당 거래량은 매우 일정하며, 분 단위 선에 긴 하단 그림자가 나타납니다.
바이낸스의 1초 K-라인을 사용하여 우리는 단서를 찾았습니다. 누군가는 비용에 관계없이 5~7초마다 10,000~20,000 STORJ를 판매하고 K-라인에 작은 구덩이를 직접 만들었습니다. 내부에서 회복될 것입니다. 이 작전은 분명히 아이스버그의 의뢰에 따라 수행된 로봇에 의해 수행되었습니다. 이 판매 작업은 매우 오랫동안 지속되었고 총 금액은 수천만 달러로 추산되었습니다. 많은 경우 발생한 슬리피지는 1/1000에 달했으며 이는 이 전략의 실행자가 수만 달러를 잃었다는 것을 의미합니다. 거래가 미끄러져서 그렇습니다. 달러. 그러나 이러한 기계적인 작업과 활발한 거래는 시장 조작과 스캘핑에 대한 명확한 기회를 만들어냅니다.

원래의 스팟 고주파 전략을 간단히 수정하여 아이스버그 주문의 무분별한 판매를 특별히 이용하는 이 로봇을 만드는 데 걸린 시간은 불과 몇 분이었습니다.
몇 초마다 시장 매도가 있을 것이므로 매수 주문장에서 10,000의 깊이만 찾아서 앞에 주문을 내면 됩니다. 이런 식으로 이 빙산이 매도될 때, 마켓메이킹 로봇이 그것을 받을 수 있는 확률이 높습니다. 이때는 거래가 매우 활발하고, 즉각적인 가격 하락도 일부 매수 주문을 유발합니다. 매도 주문을 하고 그에 따라 매도하는 데도 같은 원칙이 적용됩니다. 작업을 반복합니다. 거래 빈도가 매우 높고, 매번 수익률이 크지 않더라도 전체 수익은 여전히 상당합니다. 물론, 모든 것의 전제는 낮은 거래 수수료가 있는 계정을 갖는 것입니다. 매수 및 매도 거래 수수료가 0.1%라면 이 공간은 거래 수수료를 지불하기에 충분하지 않습니다.
전략 성과는 다음과 같습니다. 처음에는 수익이 인쇄되지 않았습니다. 오늘 오후에 변경하여 수익을 인쇄했습니다. 미친 판매 로봇은 매번 수량을 약 5,000으로 변경하여 최상의 차익 거래 기간이 지났습니다. 처음에는 시간당 100-200U 정도 벌 수 있습니다. 중요한 것은 위험이 없고 비용이 저렴하다는 것입니다. 다른 측면에서 보면, 실제로 아이스버그 주문에는 많은 기술이 있습니다. 전략을 작성하는 방법을 알고 있다면 FMZ에서 단 12분 만에 전략을 작성할 수 있습니다. 매수 주문의 깊이를 관찰하여 주문 크기를 결정하고 가격을 확인하고, 활성 매수 주문의 크기를 관찰하여 보류 주문 크기를 조정합니다. 그리고 시장을 점유하는 것과 같은 특성을 가진 아이스버그 위탁 전략은 수만 달러를 쉽게 절약할 수 있습니다.

전략 코드는 매우 간단해서 80줄에 불과합니다. 초보자에게 적합합니다. 단정도와 같은 일부 매개변수는 프로그램에 하드코딩되어 있습니다. 직접 수정할 수 있습니다. 필요한 매개변수는 아래 그림과 같습니다. 거래소 거래 쌍이 나중에 사용할 수 있도록 저장하는 것이 좋습니다. 또 다른 미친 거래가 있습니다. 언제든지 그들에게 이자를 청구할 수 있습니다.

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