Làm thế nào để khai thác robot bán hàng không có não với một chiến lược tần số cao trong 80 dòng mã

Tác giả:Lydia., Tạo: 2023-12-25 13:12:00, Cập nhật: 2024-01-02 21:23:26

img

Quan sát cơ hội

Gần đây, tôi thấy rằng Binance có một thị trường tiền tệ STORJ là rất kỳ lạ vô tình khi tôi đang xem thị trường, khối lượng giao dịch rất lớn, và tần suất giao dịch là rất nhanh, cụ thể một phút K-đường của biểu đồ sau, chúng ta có thể thấy rằng khối lượng giao dịch của mỗi phút là phù hợp, và phút K-đường có thể được nhìn thấy trong một đường bóng dài dưới.

img

Quan sát với Binance K-line 1 giây, tôi đã tìm ra kết thúc của câu chuyện, ai đó được bán 10.000-20.000 STORJs mỗi 5-7s, bất kể chi phí, và phá vỡ một lỗ nhỏ trong đường K trực tiếp, trong khi giá phục hồi trong ngắn hạn. Hoạt động này rõ ràng là do một robot trên một khoản hoa hồng băng. Hoạt động bán hàng này kéo dài rất lâu, tổng cộng ước tính mức $ 10 triệu, và trong nhiều trường hợp gây ra trượt lên đến 0,1%, có nghĩa là người thực hiện chiến lược này đã mất hàng chục ngàn đô la trong trượt chỉ trên giao dịch. Nhưng với một hoạt động cơ học và giao dịch tích cực như vậy, có một cơ hội rõ ràng để làm cho thị trường scalping.

img

Một sự thay đổi đơn giản đối với chiến lược HF điểm ban đầu, và trong vài phút tôi đã có một bot chuyên khai thác việc bán hàng iceberg này.

Ý tưởng chiến lược

Vì thị trường bán theo giá thị trường mỗi vài giây, chúng ta chỉ cần tìm độ sâu 10k trong sổ lệnh mua và treo lệnh trước nó. Vì vậy, khi tảng băng trôi bán, xác suất cao mà robot làm thị trường chỉ có thể nhận được, và tại thời điểm này giao dịch rất hoạt động, sự sụt giảm giá tạm thời cũng kích hoạt một số lệnh mua. Bằng cách tương tự, treo lệnh bán có thể bị ném vào xu hướng, do đó các hoạt động lặp lại. Tần suất giao dịch rất cao, ngay cả khi mỗi lần lợi nhuận không khá lớn, tổng lợi nhuận cũng khá lớn. Tất nhiên, tiền đề của mọi thứ là có một tài khoản phí thấp, nếu cả phí mua và bán là 0,1%, thì không gian không đủ để trả phí.

Hiệu suất chiến lược

Chiến lược hoạt động như sau, ban đầu, không có lợi nhuận nào được in, vì vậy tôi đã thay đổi nó vào buổi chiều nay, và in ra lợi nhuận, các robot bán hàng điên đã thay đổi khối lượng lên khoảng 5000 tại một thời điểm, vì vậy đã qua thời gian tối ưu cho sự điều chỉnh. Tôi có thể kiếm được 100-200U mỗi giờ lúc đầu, chìa khóa là không có rủi ro và chi phí thấp. Mặt khác, ủy ban tảng băng có thực sự rất nhiều kỹ năng, nếu bạn biết cách viết một chiến lược, bạn có thể dành mười phút trên FMZ để viết chiến lược tảng băng quan sát chiều sâu của lệnh mua để quyết định kích thước và giá của lệnh, quan sát kích thước của lệnh mua tích cực để điều chỉnh kích thước của lệnh đang chờ và theo dõi thị trường và các đặc điểm khác, tiết kiệm hàng chục ngàn đô la dễ dàng.

img

Mã nguồn chiến lược

Mã chiến lược rất đơn giản, chỉ có 80 dòng, phù hợp cho người mới bắt đầu, đây là một số thông số như độ chính xác của đơn đặt hàng và vân vân được viết cố định trong chương trình, bạn có thể thay đổi các thông số như sau.

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

Thêm nữa