80 줄의 코드에서 고주파 전략으로 뇌 없는 판매봇을 이용하는 방법

저자:리디아, 창작: 2023-12-25 13:12:00, 업데이트: 2024-01-02 21:23:26

img

기회 관찰

최근, 나는 바이낸스가 통화 STORJ 시장이 매우 이상한 것을 발견했습니다. 내가 시장을 지켜보고있을 때 의도하지 않은 일이었습니다. 거래량은 매우 크고 거래 빈도는 매우 빠릅니다. 다음 그래프의 특정 1 분 K 라인은 각 분 거래량이 일관성이 있음을 볼 수 있습니다.

img

바이낸스 1초 K 라인을 관찰하면, 나는 이야기의 끝을 알게되었습니다. 누군가가 비용에 관계없이 5-7초마다 10,000-20,000 STORJ를 판매하고 K 라인에 직접 작은 구멍을 뚫고, 가격이 단기적으로 회복하는 동안. 이 작업은 분명히 빙산 수수료에 대한 로봇에 의해 발생했습니다. 이 판매 작업은 매우 오랫동안 지속되었으며, 총 10 백만 달러 수준으로 추정되며, 많은 경우 0.1%까지 미끄러짐을 일으켰습니다. 이는 이 전략의 실행자가 거래에만 미끄러짐으로 수만 달러를 잃었다는 것을 의미합니다. 그러나 그러한 기계적 작업과 적극적인 거래로 시장 제작 스칼핑에 대한 명확한 기회가있었습니다.

img

원래의 스팟 HF 전략에 대한 간단한 변화로 몇 분 만에 이 로봇이 생겼습니다. 빙산 수수료의 이 뇌 없는 판매를 이용하는 데 전문적인 로봇이죠.

전략 아이디어

시장은 시장 가격에 매 매 몇 초마다 판매하기 때문에, 우리는 단지 구매 주문 책에서 10k 깊이를 찾아서 그 앞에 주문을 매달아야 합니다. 그래서 빙산이 판매 할 때, 시장 제작 로봇이 수신 할 수있는 높은 확률이 있으며, 이 시점에서 거래는 매우 활성화되어 있습니다. 순간적인 가격 하락은 또한 일부 구매 주문을 유발했습니다. 같은 토큰에 의해, 매달린 판매 주문은 트렌드에 던져질 수 있습니다. 따라서 반복된 운영. 거래의 빈도는 매우 높습니다. 매번 수익률이 크지 않더라도 총 수익률은 또한 상당히 크습니다. 물론 모든 것의 전제 사항은 낮은 수수료 계좌를 갖는 것입니다. 구매 및 판매 수수료 모두 0.1% 인 경우 수수료를 지불하기에 공간이 충분하지 않습니다.

전략 성과

전략은 아래와 같이 수행되고 있습니다. 처음에는 수익이 인쇄되지 않았기 때문에 오늘 오후에 변경하고 수익을 인쇄했습니다. 미친 판매 로봇은 한 번에 약 5000으로 볼륨을 변경했습니다. 따라서 중재의 최적의 시간이 지나갔습니다. 처음에는 아마도 시간당 100-200U를 벌고 있습니다. 열쇠는 위험 자유 및 저렴한 비용입니다. 다른 한편으로, 빙산 수수료는 실제로 많은 기술을 가지고 있습니다. 전략을 작성하는 방법을 알고 있다면 FMZ에서 빙산 수수료를 작성하는 데 10 분을 보낼 수 있습니다. 주문의 크기와 가격을 결정하기 위해 구매 주문의 깊이를 관찰하고, 대기 주문의 크기를 조정하고 시장 및 기타 특성을 점유하기 위해 활성 구매 주문의 크기를 관찰하여 수천 달러를 쉽게 모니터링합니다.

img

전략 소스 코드

전략 코드는 매우 간단합니다, 단지 80 라인, 초보자에게 적합합니다, 여기에 명령 정확도와 같은 몇 가지 매개 변수가 있습니다. 프로그램에서 고정되어 있습니다. 다음과 같이 매개 변수를 변경할 수 있습니다. 저장하는 것이 좋습니다. 거래 거래 쌍 또는 거래자가 통제되지 않는 경우 언제든지 그들에게 약간의 이자를 청구 할 수 있습니다.

img

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

더 많은