Cách khai thác robot vô trí tuệ để bán bằng chiến lược tần số cao 80 dòng mã

Tác giả:Cỏ nhỏ, Tạo: 2023-12-24 21:37:45, Cập nhật: 2023-12-26 15:40:23

img

Cơ hội quan sát

Trong hai ngày gần đây, khi xem thị trường, tôi vô tình phát hiện ra rằng Binance có một thị trường Bitcoin STORJ rất kỳ lạ, khối lượng giao dịch rất lớn và tần suất giao dịch rất nhanh, hình dưới đây cho thấy khối lượng giao dịch mỗi phút là tương tự và đường phút có thể thấy đường dài dài.imgTheo quan sát của Binance, người ta đã phát hiện ra một lỗ hổng, một người sẽ bán 20 000 STORJ mỗi 5-7s, không tính chi phí, và đào một lỗ nhỏ trực tiếp trên đường K, trong khi giá sẽ phục hồi trong thời gian ngắn. Hoạt động này rõ ràng là do robot được ủy thác bởi núi băng. Hoạt động được bán này kéo dài rất lâu, với tổng số ước tính đạt mức 10 triệu đô la, và nhiều lần gây ra điểm trượt lên đến một phần nghìn, có nghĩa là chỉ có điểm trượt giao dịch, người thực hiện chiến lược này sẽ mất hàng chục nghìn đô la.img

Sau khi thay đổi một cách đơn giản chiến lược tần số cao hiện tại của mình, robot chuyên khai thác và bán tảng băng này chỉ trong vài phút.

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

Vì giá thị trường sẽ được bán ra mỗi vài giây, chúng ta chỉ cần tìm sâu 10.000 trong sổ mua hàng, treo đơn trước. Vì vậy, trong thời gian bán hàng trên tảng băng trôi này, có rất nhiều khả năng robot thị trường có thể nhận được, và giao dịch lúc này rất hoạt động, giá giảm ngay lập tức cũng gây ra một số đơn đặt hàng, cùng một lý do treo đơn đặt hàng theo trật tự và lặp đi lặp lại.

Hành động chiến lược

Chiến lược biểu hiện như sau, ngay từ đầu không có lợi nhuận được in ra, chiều nay đã thay đổi, và đã in ra lợi nhuận, robot bán điên đã thay đổi số lượng mỗi lần khoảng 5.000, vì vậy đã qua thời gian lợi nhuận tốt nhất. Ngay từ đầu, có lẽ có thể đánh 100-200U mỗi giờ, chìa khóa là không có rủi ro, chi phí thấp.

img

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

Mã chiến lược rất đơn giản, chỉ có 80 dòng. Đối với người mới bắt đầu, một số tham số như độ chính xác đơn giản sau đây đã được viết trong chương trình, bạn có thể tự thay đổi, các tham số cần thiết như hình dưới đây, đề nghị lưu trữ, trong trường hợp giao dịch giao dịch với các nhà giao dịch lại xuất hiện, bạn có thể thu lợi nhuận từ họ bất cứ lúc nào.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 //这里要减去自己的挂单
        }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()
    }
}

Thêm nữa

điểm kiểm traChết tiệt, chi phí cho chiến thuật chạy bộ này là bao nhiêu?

yc123hGiáo viên Gà nhỏ, xin vui lòng cho tôi biết, trong trường hợp chiến lược này có hiệu quả, liệu bạn có thấy thông báo thất bại của hai đơn hàng trước khi thu hồi trước khi bắt đầu mỗi lượt tập (tức là cả hai đơn hàng đã có hiệu lực) để chỉ ra rằng chiến lược này có hiệu quả?

Cỏ nhỏĐó là 0 phí.

yc123hXin cảm ơn, tôi cũng muốn hỏi bạn về các tham số. Ví dụ như chiến lược tần số cao như thế này, làm thế nào để tối ưu hóa các tham số. Ví dụ, tôi xem chiến lược năm 2014 mà bạn chia sẻ, khoảng thời gian đào tạo mặc định đạt đến 3500 ms, nếu tần số cao, khoảng thời gian đào tạo không nên ngắn hơn một chút tốt hơn. Nhưng giao dịch quá ngắn cũng khá khó khăn, nếu quá dài, ảnh hưởng của biến động thị trường sẽ rất lớn, nếu bạn không thể bán điểm lợi nhuận sau khi nắm giữ, bạn có thể mất mát.

Cỏ nhỏViệc hủy bỏ thất bại là một thỏa thuận, kiếm tiền để chứng minh hiệu quả.