Chiến lược tần số cao tiền kỹ thuật số giới thiệu chi tiết

Tác giả:Lydia., Tạo: 2023-03-27 16:46:14, Cập nhật: 2023-09-18 20:12:59

img

Chiến lược tần số cao tiền kỹ thuật số giới thiệu chi tiết

Tôi đã viết một bài báo vào năm 2020 giới thiệu các chiến lược tần số cao,https://www.fmz.com/bbs-topic/9750. Mặc dù nó nhận được khá nhiều sự chú ý, nhưng nó không phải là rất sâu sắc. Hơn hai năm đã trôi qua kể từ đó, và thị trường đã thay đổi. Sau khi bài báo đó được xuất bản, chiến lược tần số cao của tôi có thể tạo ra lợi nhuận ổn định trong một thời gian dài, nhưng dần dần, lợi nhuận giảm và thậm chí dừng lại ở một thời điểm. Trong những tháng gần đây tôi đã dành một số nỗ lực để cải tiến nó, và bây giờ nó vẫn có thể tạo ra một số lợi nhuận. Trong bài viết này, tôi sẽ cung cấp một giới thiệu chi tiết hơn về ý tưởng chiến lược tần số cao của tôi và một số mã đơn giản như một điểm khởi đầu cho các cuộc thảo luận; và phản hồi được hoan nghênh.

Điều kiện giao dịch tần số cao

  • Binance có mức giảm giá cho các tài khoản giảm giá, ví dụ như Binance, hiện có mức giảm giá cho người tạo 0,0005%. Nếu số tiền giao dịch hàng ngày là 100 triệu U, mức giảm giá sẽ là 5000 U. Tất nhiên, phí người nhận vẫn dựa trên tỷ lệ VIP, vì vậy nếu chiến lược không yêu cầu người nhận, mức VIP có ít tác động đến các chiến lược tần suất cao. Các mức độ giao dịch khác nhau thường có tỷ lệ giảm giá khác nhau và yêu cầu duy trì số tiền giao dịch cao. Trong thời gian đầu khi một số thị trường tiền tệ biến động rất nhiều, thậm chí còn có lợi nhuận mà không cần giảm giá. Khi cạnh tranh tăng cường, giảm giá chiếm tỷ lệ lợi nhuận lớn hơn hoặc thậm chí chỉ dựa vào chúng; các nhà giao dịch tần suất cao theo đuổi phí cấp cao.

  • Tốc độ. Lý do tại sao các chiến lược tần số cao được gọi là tần số cao là vì chúng rất nhanh. Tham gia máy chủ màu của sàn giao dịch, có được độ trễ thấp nhất và kết nối ổn định nhất cũng đã trở thành một trong những điều kiện cho cạnh tranh nội bộ. Thời gian tiêu thụ nội bộ của chiến lược nên càng ít càng tốt, và bài viết này sẽ giới thiệu khung websocket mà tôi sử dụng, áp dụng thực thi đồng thời.

  • Thị trường phù hợp. Giao dịch tần số cao được gọi là ngọc trai của giao dịch định lượng, và nhiều nhà giao dịch theo chương trình đã thử nó, nhưng hầu hết mọi người dừng lại vì họ không thể kiếm lợi nhuận và không thể tìm ra một hướng để cải thiện. Lý do chính là họ đã chọn sai thị trường giao dịch. Trong giai đoạn đầu phát triển chiến lược, nên chọn các thị trường tương đối dễ dàng để kiếm lợi nhuận trong giao dịch để có lợi nhuận và phản hồi để cải thiện, điều này có lợi cho sự tiến bộ của chiến lược. Nếu bạn bắt đầu cạnh tranh trong thị trường cạnh tranh nhất với nhiều đối thủ tiềm năng, bất kể bạn cố gắng khó khăn đến mức nào, bạn sẽ mất tiền và bỏ cuộc. Tôi khuyên bạn nên liệt kê các cặp giao dịch hợp đồng vĩnh cửu mới khi không có nhiều đối thủ cạnh tranh, đặc biệt là những đối thủ giao dịch tương đối lớn; đây là khi kiếm lợi nhuận dễ nhất. BTC và ETH có số lượng giao dịch lớn nhất và hoạt động nhiều nhất nhưng cũng khó tồn tại.

  • Đối mặt với sự cạnh tranh. Thị trường cho bất kỳ giao dịch nào đều đang thay đổi liên tục, và không có chiến lược giao dịch nào có thể tồn tại mãi mãi, đặc biệt là trong giao dịch tần số cao. Nhập vào thị trường này có nghĩa là cạnh tranh trực tiếp với các nhà giao dịch thông minh và siêng năng nhất. Trong thị trường trò chơi tổng bằng không, bạn càng kiếm nhiều, người khác sẽ càng kiếm ít. Bạn càng vào muộn, khó khăn càng cao; những người đã có mặt trên thị trường cũng phải cải thiện liên tục. 3-4 năm trước đây có lẽ là cơ hội tốt nhất; gần đây, hoạt động tổng thể trên thị trường tiền kỹ thuật số đã giảm, khiến người mới bắt đầu giao dịch tần số cao rất khó khăn.

Nguyên tắc tần số cao

Có nhiều chiến lược tần số cao khác nhau:

  • Bảo hiểm tần suất cao, tìm kiếm các cơ hội bảo hiểm thông qua sàn giao dịch này hoặc các sàn giao dịch khác, dựa trên lợi thế tốc độ để nắm bắt đơn đặt hàng và kiếm lợi nhuận;
  • Xu hướng tần suất cao, kiếm lợi nhuận bằng cách đánh giá xu hướng ngắn hạn;
  • Người tạo ra thị trường, đặt lệnh trên cả hai bên mua và bán, kiểm soát các vị trí tốt và kiếm lợi nhuận thông qua các khoản giảm giá;
  • Có rất nhiều người khác mà tôi sẽ không kể từng người một. Chiến lược của tôi là sự kết hợp của xu hướng và người tạo thị trường. Đầu tiên, chúng tôi đánh giá xu hướng, sau đó đặt một lệnh. Sau khi giao dịch được hoàn thành, đặt một lệnh ngay lập tức để bán mà không giữ các vị trí hàng tồn kho. Tiếp theo, tôi sẽ giới thiệu nó kết hợp với mã chiến lược.

Khung chiến lược

Mã sau đây dựa trên khuôn khổ cơ bản của các hợp đồng vĩnh cửu Binance, chủ yếu đăng ký độ sâu websocket, dữ liệu thị trường giao dịch dòng lệnh độ sâu và thông tin vị trí. Vì dữ liệu thị trường và thông tin tài khoản được đăng ký riêng biệt, cần phải sử dụng read ((-1) liên tục để xác định liệu thông tin mới nhất đã được thu thập hay không. Ở đây EventLoop ((1000) được sử dụng để tránh các vòng vô tận trực tiếp và giảm tải hệ thống. EventLoop ((1000) sẽ chặn cho đến khi có wss hoặc đồng thời trả về nhiệm vụ với thời gian hết 1000ms.

var datastream = null
var tickerstream = null
var update_listenKey_time = 0

function ConncetWss(){
    if (Date.now() - update_listenKey_time < 50*60*1000) {
        return
    }
    if(datastream || tickerstream){
        datastream.close()
        tickerstream.close()
    }
    //Need APIKEY
    let req = HttpQuery(Base+'/fapi/v1/listenKey', {method: 'POST',data: ''}, null, 'X-MBX-APIKEY:' + APIKEY) 
    let listenKey = JSON.parse(req).listenKey
    datastream = Dial("wss://fstream.binance.com/ws/" + listenKey + '|reconnect=true', 60)
    //Symbols are the set trading pairs
    let trade_symbols_string = Symbols.toLowerCase().split(',')
    let wss_url = "wss://fstream.binance.com/stream?streams="+trade_symbols_string.join(Quote.toLowerCase()+"@aggTrade/")+Quote.toLowerCase()+"@aggTrade/"+trade_symbols_string.join(Quote.toLowerCase()+"@depth20@100ms/")+Quote.toLowerCase()+"@depth20@100ms"
    tickerstream = Dial(wss_url+"|reconnect=true", 60)
    update_listenKey_time = Date.now()
}

function ReadWss(){
    let data = datastream.read(-1)
    let ticker = tickerstream.read(-1)
    while(data){
        data = JSON.parse(data)
        if (data.e == 'ACCOUNT_UPDATE') {
            updateWsPosition(data)
        }
        if (data.e == 'ORDER_TRADE_UPDATE'){
            updateWsOrder(data)
        }        
        data = datastream.read(-1)
    }
    while(ticker){
        ticker = JSON.parse(ticker).data
        if(ticker.e == 'aggTrade'){
            updateWsTrades(ticker)
        }
        if(ticker.e == 'depthUpdate'){
            updateWsDepth(ticker)
        }
        ticker = tickerstream.read(-1)
    }
    makerOrder()
}

function main() {
    while(true){
        ConncetWss()
        ReadWss()
        worker()
        updateStatus()
        EventLoop(1000)
    }
}

Các chỉ số chiến lược

Như đã đề cập trước đây, chiến lược tần số cao của tôi đòi hỏi phải xác định xu hướng trước khi thực hiện mua và bán. Xu hướng ngắn hạn chủ yếu được đánh giá dựa trên dữ liệu giao dịch tick-by-tick, tức là aggTrade trong đăng ký, bao gồm hướng giao dịch, giá, số lượng, thời gian giao dịch, vv. Mua và bán chủ yếu đề cập đến độ sâu và số lượng giao dịch. Sau đây là những giới thiệu chi tiết về các chỉ số cần quan tâm; hầu hết trong số đó được chia thành các nhóm mua và bán và được tính năng động trong một khoảng thời gian nhất định. Cửa sổ thời gian của chiến lược của tôi là trong vòng 10 giây.

  • Số lượng giao dịch trung bình cho mỗi giao dịch, mỗi giao dịch giao dịch là tập hợp các lệnh khác nhau với cùng một hướng và giá trong vòng 100ms, phản ánh kích thước của lệnh mua và bán. Dữ liệu này có trọng lượng cao, có thể giả định rằng nếu khối lượng lệnh mua lớn hơn lệnh bán, đây là một thị trường do người mua thống trị.
  • Số lượng giao dịch trung bình (Order frequency) hoặc khoảng thời gian giao dịch, cũng dựa trên dữ liệu giao dịch theo từng giao dịch, số lượng giao dịch trung bình được đề cập trước đây không tính đến khái niệm thời gian và không hoàn toàn chính xác. Nếu một lệnh theo một hướng có số lượng giao dịch trung bình nhỏ nhưng tần suất cao, nó vẫn góp phần vào sức mạnh của hướng đó. Số lượng giao dịch trung bình * Tần suất giao dịch đại diện cho tổng số giao dịch theo khoảng thời gian cố định và có thể được sử dụng để so sánh trực tiếp.
  • Thị trường hiện tại chủ yếu có mức chênh lệch 1 tick. Nếu chênh lệch trở nên lớn hơn, nó thường có nghĩa là có xu hướng thị trường.
  • Giá mua và bán trung bình, tính toán giá trung bình của mỗi giao dịch riêng biệt và so sánh với giá gần đây nhất. Nếu giá lệnh mua gần đây cao hơn giá trung bình của lệnh mua, nó có thể được đánh giá sơ bộ rằng một bước đột phá đã xảy ra.

Chiến lược logic

Xác định xu hướng ngắn hạn

//bull represents short-term bullish, bear represents short-term bearish
let bull =  last_sell_price > avg_sell_price && last_buy_price > avg_buy_price &&
            avg_buy_amount / avg_buy_time > avg_sell_amount / avg_sell_time;
let bear =  last_sell_price < avg_sell_price && last_buy_price < avg_buy_price && 
            avg_buy_amount / avg_buy_time < avg_sell_amount / avg_sell_time;

Nếu giá bán gần nhất cao hơn giá bán trung bình, giá mua gần nhất cao hơn giá mua trung bình và giá trị lệnh mua khoảng thời gian cố định lớn hơn giá trị lệnh bán, thì nó được đánh giá là tăng ngắn hạn. Ngược lại, nó giảm.

Giá đặt hàng

function updatePrice(depth, bid_amount, ask_amount) {

    let buy_price = 0
    let sell_price = 0
    let acc_bid_amount = 0
    let acc_ask_amount = 0

    for (let i = 0; i < Math.min(depth.asks.length, depth.bids.length); i++) {
        acc_bid_amount += parseFloat(depth.bids[i][1])
        acc_ask_amount += parseFloat(depth.asks[i][1])
        if (acc_bid_amount > bid_amount  && buy_price == 0) {
            buy_price = parseFloat(depth.bids[i][0]) + tick_size
        }
        if (acc_ask_amount > ask_amount  && sell_price == 0) {
            sell_price = parseFloat(depth.asks[i][0]) - tick_size
        }
        if (buy_price > 0 && sell_price > 0) {
            break
        }
    }
    return [buy_price, sell_price]
}

Ở đây, chúng tôi vẫn áp dụng phương pháp cũ, lặp lại đến độ sâu cần thiết. Giả sử rằng 10 đồng xu có thể được giao dịch trong 1 giây, mà không cần xem xét các đơn đặt hàng đang chờ, giá bán được đặt tại vị trí mà 10 đồng xu được mua. Kích thước cụ thể của cửa sổ thời gian cần phải được đặt bởi chính bạn.

Số tiền đặt hàng

let buy_amount = Ratio * avg_sell_amount / avg_sell_time
let sell_amount = Ratio * avg_buy_amount / avg_buy_time

Tỷ lệ đại diện cho một tỷ lệ cố định, có nghĩa là số lượng đơn đặt hàng mua là một tỷ lệ cố định của số lượng đơn đặt hàng bán gần đây. Bằng cách này, chiến lược có thể điều chỉnh kích thước đơn đặt hàng thích nghi theo hoạt động mua và bán hiện tại.

Điều kiện đặt hàng

if(bull && (sell_price-buy_price) > N * avg_diff) {
    trade('buy', buy_price, buy_amount)
}else if(position.amount < 0){
    trade('buy', buy_price, -position.amount)
}
if(bear && (sell_price-buy_price) >  N * avg_diff) {
    trade('sell', sell_price, sell_amount)
}else if(position.amount > 0){
    trade('sell', sell_price, position.amount)
}

Trong đó avg_diff là chênh lệch giá thị trường trung bình, và lệnh mua sẽ chỉ được đặt khi chênh lệch giá thầu - mua lớn hơn một số lần số này và nó tăng. Nếu giữ một vị trí ngắn, nó cũng sẽ đóng vị trí để tránh giữ trong một thời gian dài. Các lệnh có thể được đặt như đơn đặt hàng chỉ có người thực hiện để đảm bảo chúng được thực hiện. Ngoài ra, ID lệnh tùy chỉnh của Binance có thể được sử dụng để không cần phải chờ đợi phản hồi lệnh.

Cấu trúc đồng thời

var tasks = []
var jobs = []

function worker(){
    let new_jobs = []
    for(let i=0; i<tasks.length; i++){
        let task = tasks[i]
        jobs.push(exchange.Go.apply(this, task.param))
    }
    _.each(jobs, function(t){
        let ret = t.wait(-1)
        if(ret === undefined){
            new_jobs.push(t)//Unreturned tasks will continue to wait next time
        }
    })
    jobs = new_jobs
    tasks = []
}

/*
Write the required task parameters in param
tasks.push({'type':'order','param': ["IO", "api", "POST","/fapi/v1/order",
        "symbol="+symbol+Quote+"&side="+side+"&type=LIMIT&timeInForce=GTX&quantity="+
        amount+"&price="+price+"&newClientOrderId=" + UUID() +"&timestamp="+Date.now()]})
*/

Dữ liệu theo dõi

  • Sự chậm trễ, tầm quan trọng của tốc độ chiến lược tần số cao đã được nhấn mạnh. Trong chiến lược, các sự chậm trễ khác nhau cần được theo dõi và ghi lại, chẳng hạn như đặt đơn đặt hàng, hủy đơn đặt hàng, lợi nhuận vị trí, độ sâu, luồng đơn đặt hàng, vị trí, vòng lặp tổng thể v.v. Bất kỳ sự chậm trễ bất thường nào nên được điều tra kịp thời và cố gắng rút ngắn sự chậm trễ chiến lược tổng thể.
  • Tỷ lệ số tiền giao dịch, tính toán số tiền giao dịch là tỷ lệ phần trăm của tổng số tiền giao dịch. Nếu tỷ lệ thấp, vẫn còn chỗ cho tăng trưởng. Vào thời điểm cao điểm, có thể chiến lược chiếm hơn 10% tổng số tiền giao dịch.
  • Tỷ lệ lợi nhuận của các vị trí đóng cửa, tính toán tỷ lệ lợi nhuận trung bình của vị trí đóng cửa là tham chiếu quan trọng nhất để đánh giá liệu một chiến lược có hiệu quả hay không.
  • Tỷ lệ giảm giá, tỷ lệ giảm giá trong tổng doanh thu, phản ánh mức độ phụ thuộc vào giảm giá của chiến lược.
  • Tỷ lệ thất bại đặt hàng, lệnh chỉ được giao dịch bằng cách đặt lệnh. Do sự chậm trễ trong việc đặt lệnh, nó có thể không được đặt. Nếu tỷ lệ này cao, điều đó có nghĩa là tốc độ của chiến lược không có lợi.
  • Tỷ lệ đơn đặt hàng hoàn thành, nền tảng thường có yêu cầu về tỷ lệ giao dịch. Nếu quá thấp, điều đó có nghĩa là chiến lược hủy đơn đặt hàng quá thường xuyên và cần phải được giải quyết.
  • Khoảng cách trung bình mua và bán lệnh, phản ánh chiến lược đặt lệnh và khoảng cách giữa thị trường, chúng ta có thể thấy rằng hầu hết trong số họ vẫn chiếm vị trí mua một và bán một.

Các đề xuất khác

  • Thương mại nhiều loại tiền tệ, chiến lược tần số cao trong bài viết này chỉ đề cập đến một sàn giao dịch duy nhất, đồng tiền duy nhất và thị trường duy nhất. Nó có những hạn chế lớn, và hầu hết các tình huống và đồng tiền không thể tạo ra lợi nhuận. Tuy nhiên, không thể dự đoán được loại tiền tệ nào sẽ có lợi trong tương lai, vì vậy bạn có thể giao dịch nhiều hoặc thậm chí tất cả các loại tiền tệ mà không bỏ lỡ cơ hội. Ngay cả dưới giới hạn tần số của sàn giao dịch, một robot cũng có thể giao dịch nhiều cặp giao dịch. Tất nhiên, để có tốc độ tối ưu, một tài khoản phụ có thể giao dịch một cặp giao dịch với một máy chủ tương ứng với một robot; tuy nhiên, điều này sẽ dẫn đến chi phí cao hơn nhiều.
  • Xác định số lượng đơn đặt hàng và điều kiện đơn đặt hàng dựa trên lợi nhuận. Giao dịch với nhiều loại tiền tệ sẽ dẫn đến chi phí cao của các nỗ lực, nếu giám sát không có lợi nhuận, sử dụng số tiền giao dịch tối thiểu và giảm tần suất giao dịch cho đến khi chiến lược theo dõi động tỷ lệ lợi nhuận tích cực, sau đó tăng số tiền giao dịch để cải thiện lợi nhuận dần dần.
  • Nhận thêm thông tin, một tính năng khác của giao dịch tần số cao là nó xử lý một lượng dữ liệu lớn hơn và sử dụng nhiều thông tin hơn. Tất cả thông tin thị trường cho một cặp giao dịch duy nhất trong một sàn giao dịch duy nhất nên được tham chiếu, và các hợp đồng vĩnh viễn cũng có thể tham chiếu đến dữ liệu thị trường tại chỗ, cũng như dữ liệu từ các sàn giao dịch khác cho cùng một cặp giao dịch, hoặc thậm chí dữ liệu từ các loại tiền tệ khác.
  • Máy chủ của Binance nằm ở Tokyo, các sàn giao dịch khác khác nhau, bạn có thể tham khảo các nhân viên kỹ thuật của sàn giao dịch để biết chi tiết.
  • Mã chiến lược trong bài viết này chỉ là một mã ví dụ đơn giản, với nhiều chi tiết khó khăn nhưng cần thiết được loại bỏ. Các chỉ số được sử dụng chỉ để tham khảo và không nên được sử dụng trực tiếp. Có nhiều chi tiết cần chú ý khi chạy một chiến lược tần số cao, và nó đòi hỏi sự kiên nhẫn để sửa đổi và cải thiện.

Có liên quan

Thêm nữa