Những sai sót của hệ thống hồi âm tần số cao dựa trên giao dịch theo chữ cái và K-line

Tác giả:Cỏ nhỏ, Tạo: 2020-06-04 16:48:02, Cập nhật: 2023-10-08 19:46:18

img

Tôi đang ởBinance làm việc trên giá cao làm việc trên giá thấp chiến lược đầu cơ tiền tệTrong khi đó, một công cụ kiểm tra lại cũng được phát hành; và báo cáo đầu tiên dựa trên kiểm tra lại K-line một giờ đã chứng minh hiệu quả của chiến lược; nhưng thời gian ngủ của chiến lược công khai thực tế là 1s, một chiến lược khá thường xuyên, không thể đưa ra kết quả chính xác với kiểm tra lại K-line một giờ; sau đó được thêm vào.Đánh giá đường phútKết quả là, lợi nhuận của việc kiểm tra lại được cải thiện rất nhiều, nhưng vẫn không thể xác định được các tham số nên sử dụng trong trường hợp cấp giây, và sự hiểu biết về toàn bộ chiến lược cũng không rõ ràng. Lý do chính là do một nhược điểm quan trọng của việc kiểm tra lại dựa trên đường K.

Vấn đề dựa trên K-line retest

Một dữ liệu đường K bao gồm bốn giá, hai thời gian bắt đầu và giao dịch giữa các khoảng. Hầu hết các nền tảng và khuôn khổ định lượng đều dựa trên kiểm tra đường K, nền tảng FMZ cũng cung cấp kiểm tra cấp độ tick. Lần kiểm tra đường K rất nhanh và hầu hết các trường hợp cũng không có vấn đề, nhưng cũng có những khiếm khuyết rất nghiêm trọng, đặc biệt là các chiến lược kiểm tra đa dạng và chiến lược tần số cao, hầu như không đưa ra kết luận chính xác.

Đầu tiên là vấn đề thời gian, thời gian giá cao nhất và giá thấp nhất của dữ liệu đường K không được đưa ra, không cần phải xem xét, nhưng giá mở và đóng quan trọng nhất không phải là thời gian mở và đóng. Ngay cả các loại giao dịch không quá lạnh, cũng thường không giao dịch trong vài giây, và khi chúng ta xem xét lại nhiều chiến lược, thường mặc định giá mở và giá đóng của chúng là cùng một lúc, đây cũng là nền tảng cho việc đánh giá giá quay lại.

Hãy tưởng tượng hai loại được tính theo đường phút, giá của chúng thường là 10 đô la, và bây giờ tìm thấy lúc 10:01 giờ, giá đóng A là 100 đô la, giá đóng B là 112 đô la, giá đóng là 12 đô la, vì vậy chiến lược bắt đầu bảo hiểm, và tại một thời điểm nào đó giá chênh lệch quay trở lại, chiến lược kiếm được lợi nhuận quay trở lại 2 đô la.

Trong trường hợp thực tế có thể là vào lúc 10 giờ 45 phút, hợp đồng A tạo ra một giao dịch trị giá 100 đô la, sau đó không có giao dịch, hợp đồng B tạo ra một giao dịch trị giá 112 đô la vào lúc 10 giờ 58 phút, tại thời điểm này, cả hai giá đều không tồn tại, tại thời điểm này, giá giao dịch là bao nhiêu và có thể có bao nhiêu chênh lệch? không ai biết được. Một trường hợp có thể là: vào lúc 10 giờ 58 phút, giao dịch mua bán trên hợp đồng A là 101.9-102.1, và không có chênh lệch 2 đô la. Điều này sẽ gây ra một sự nhầm lẫn lớn đối với chiến lược tối ưu hóa của chúng tôi.

Sau đó là vấn đề chụp ảnh, chụp ảnh thực sự là ưu tiên giá, ưu tiên thời gian. Nếu người mua vượt quá giá bán, họ thường sẽ giao dịch trực tiếp với giá bán, ngược lại, vào sổ đặt hàng chờ đợi. Dữ liệu đường K rõ ràng không mua và bán, là chụp ảnh không thể mô phỏng mức độ chi tiết.

Cuối cùng là tác động của chính chiến lược giao dịch đối với thị trường, nếu là một khoản tiền nhỏ, không ảnh hưởng nhiều. Nhưng nếu tỷ lệ giao dịch lớn, sẽ gây ra một cú sốc cho thị trường. Không chỉ là giao dịch ngay lập tức, điểm trượt giá sẽ rất lớn, nếu bạn giao dịch ngay lập tức, thực sự chiếm các giao dịch của các nhà giao dịch khác, hiệu ứng bướm sẽ ảnh hưởng đến thị trường.

Đánh giá lại dựa trên độ sâu và dấu chấm trong thời gian thực

FMZ cung cấp tính toán lại trên đĩa thực, có thể lấy dữ liệu sâu 20 khung hình lịch sử thực, tick giây thực, giao dịch từng ký tự, và dựa trên đó.Chức năng phát đĩa thực Số lượng dữ liệu tái đo này rất lớn, tốc độ tái đo cũng chậm, thường chỉ có thể được tái đo trong hai ngày.  Đối với các chiến lược đòi hỏi tần suất tương đối cao hoặc quyết định thời gian nghiêm ngặt, tái đo ở mức đĩa thực là bắt buộc.  FMZ thu thập các cặp giao dịch và thời gian không dài, nhưng cũng có hơn 70 tỷ dữ liệu lịch sử.

img

Cơ chế kiểm tra lại dựa trên dòng lệnh giao dịch từng mẩu

Thông tin trên đường K là rất ít, độ sâu cũng có thể là độ sâu giả, nhưng có một dữ liệu là sự sẵn sàng giao dịch thực sự của thị trường, phản ánh lịch sử giao dịch thực sự nhất là giao dịch từng lần. Bài viết này sẽ đề xuất một hệ thống đo lường ngược tần số cao dựa trên luồng đơn đặt hàng, sẽ giảm đáng kể lượng dữ liệu đo lường ngược trên đĩa thực và một số tác động của giao dịch giả lập đối với thị trường.

Tôi đã tải về một giao dịch đơn lẻ gần đây của hợp đồng vĩnh viễn 5 ngày XTZ (địa chỉ tải về:https://www.fmz.com/upload/asset/1ff487b007e1a848ead.csvTrong khi đó, các nhà nghiên cứu đã nghiên cứu và phân tích một số loại dữ liệu khác nhau, trong đó có một số loại không phổ biến, với tổng số 213.000 dữ liệu, trước tiên hãy xem cấu trúc của dữ liệu:

[['XTZ', 1590981301905, 2.905, 0.4, 'False\n'],
 ['XTZ', 1590981303044, 2.903, 3.6, 'True\n'],
 ['XTZ', 1590981303309, 2.903, 3.7, 'True\n'],
 ['XTZ', 1590981303738, 2.903, 238.1, 'True\n'],
 ['XTZ', 1590981303892, 2.904, 0.1, 'False\n'],
 ['XTZ', 1590981305250, 2.904, 0.1, 'False\n'],
 ['XTZ', 1590981305643, 2.903, 197.3, 'True\n'],

Dữ liệu là một danh sách hai chiều, được sắp xếp theo thời gian giao dịch. Ý nghĩa cụ thể là: tên giống, giá giao dịch, thời gian giao dịch, số lượng giao dịch, liệu đơn hàng có được giao dịch chủ động hay không.

Đầu tiên, theo hướng giao dịch, có thể suy đoán khá chính xác về giá mua và bán trên thị trường, nếu là đơn đặt hàng chủ động, thì giá mua tại thời điểm này là giá giao dịch, nếu là đơn đặt hàng chủ động, thì giá bán là giá giao dịch, nếu có giao dịch mới thì sẽ cập nhật bảng xếp hạng mới, không cập nhật giữ kết quả lần trước.

Theo dòng lệnh, có thể chụp như sau: ví dụ như một giao dịch, giá là giá, số lượng đặt hàng là số lượng, tại thời điểm này thanh mua bán bán một lần cho mỗi giao dịch là giá thầu, hỏi. Nếu giá thấp hơn giá thầu, thì trước tiên quyết định là người tạo ra, và có thể được chọn hợp đồng ưu tiên, sau đó trong thời gian tồn tại của lệnh, tất cả các giao dịch có giá thấp hơn hoặc bằng giá của lệnh đều được chọn hợp đồng với lệnh này.

Một trong những vấn đề dễ thấy của việc chụp hình này là nếu đơn đặt hàng là người nhận, thực tế là có thể giao dịch ngay lập tức, thay vì chờ đợi đơn đặt hàng mới được chụp. Đầu tiên, chúng tôi không xem xét số lượng đặt hàng, ngay cả khi có dữ liệu, đánh giá trực tiếp giao dịch cũng thay đổi chiều sâu, ảnh hưởng đến thị trường. Và dựa trên đơn đặt hàng mới, chụp hình tương đương với việc thay thế đơn đặt hàng trong lịch sử thành đơn đặt hàng của bạn, dù sao cũng không vượt quá giới hạn giao dịch của thị trường, lợi nhuận cuối cùng cũng không thể vượt quá lợi nhuận tối đa được tạo ra.

Có một số chi tiết nhỏ, nếu giá mua lệnh bằng giá mua một, thực tế vẫn có một xác suất nhất định để mua một giá được chụp, cần phải xem xét ưu tiên của đơn hàng và xác suất giao dịch, v.v., phức tạp hơn, không được xem xét ở đây.

Chụp mã

Đối tượng giao dịch có thể tham khảo giới thiệu ban đầu, không thay đổi về cơ bản, chỉ thêm sự khác biệt giữa chi phí người tạo và người lấy, và tối ưu hóa tốc độ kiểm tra lại.

    symbol = 'XTZ'
    loop_time = 0
    intervel = 1000 #策略的休眠时间为1000ms
    init_price = data[0][2] #初始价格
    e = Exchange([symbol],initial_balance=1000000,maker_fee=maker_fee,taker_fee=taker_fee,log='') #初始化交易所
    depth = {'ask':data[0][2], 'bid':data[0][2]} #深度
    order = {'buy':{'price':0,'amount':0,'maker':False,'priority':False,'id':0},
             'sell':{'price':0,'amount':0,'maker':False,'priority':False,'id':0}} #订单
    for tick in data:
        price = int(tick[2]/tick_sizes[symbol])*tick_sizes[symbol] #成交价格
        trade_amount = tick[3] #成交数量
        time_stamp = tick[1] #成交时间戳
        if tick[4] == 'False\n':
            depth['ask'] = price
        else:
            depth['bid'] = price
        
        if depth['bid'] < order['buy']['price']:
            order['buy']['priority'] = True
        if depth['ask'] > order['sell']['price']:
            order['sell']['priority'] = True
        if price > order['buy']['price']:
            order['buy']['maker'] = True
        if price < order['sell']['price']:
            order['sell']['maker'] = True
        
        #订单网络延时也可以作为撮合条件之一,这里没考虑
        cond1 = order['buy']['priority'] and order['buy']['price'] >= price and order['buy']['amount'] > 0
        cond2 = not order['buy']['priority'] and order['buy']['price'] > price and order['buy']['amount'] > 0
        cond3 = order['sell']['priority'] and order['sell']['price'] <= price and order['sell']['amount'] > 0
        cond4 = not order['sell']['priority'] and order['sell']['price'] < price and order['sell']['amount'] > 0

        if cond1 or cond2:
            buy_price = order['buy']['price'] if order['buy']['maker'] else price
            e.Buy(symbol, buy_price, min(order['buy']['amount'],trade_amount), order['buy']['id'], order['buy']['maker'])
            order['buy']['amount'] -= min(order['buy']['amount'],trade_amount)
            e.Update(time_stamp,[symbol],{symbol:price})
        if cond3 or cond4:
            sell_price = order['sell']['price'] if order['sell']['maker'] else price
            e.Sell(symbol, sell_price, min(order['sell']['amount'],trade_amount), order['sell']['id'], order['sell']['maker'])
            order['sell']['amount'] -= min(order['sell']['amount'],trade_amount)
            e.Update(time_stamp,[symbol],{symbol:price})

        if time_stamp - loop_time > intervel:
            order = get_order(e,depth,order) #交易逻辑,这里未给出
            loop_time += int((time_stamp - loop_time)/intervel)*intervel

Một số chi tiết cần lưu ý:

  • 1.当有新成交时,要先去撮合订单,再去根据最新的价格去下单。
  • 2.每个订单都有两个属性:maker——是否为maker,priority——撮合优先级,以买单为例,当买价小于卖一,标记为maker,当买价大于买一是标记为优先撮合,priority决定了价格等于买价是是否撮合,maker决定了手续费。
  • 3.订单的maker和priority是更新的,如下了一笔很大的超过盘口的买单,当出现一个价格大于买价时,此时剩余的成交量将是maker。
  • 4.策略的intervel是必须的,它可以代表行情的延时。

Phân tích lại chiến lược lưới

Cuối cùng đến giai đoạn kiểm tra thực tế, chúng tôi đã kiểm tra lại một chiến lược lưới cổ điển nhất để xem liệu nó có đạt được hiệu quả mong đợi hay không. Nguyên tắc chiến lược là mỗi khi giá tăng 1%, chúng tôi giữ một danh mục trống có giá trị nhất định (trái lại là giữ nhiều đơn đặt hàng), tính toán các phiếu bán hàng được treo trước. Mã không được phát hành.Grid('XTZ',100,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)Trong hàm, các tham số là: cặp giao dịch, giá sai 1% giá trị giữ, mật độ đăng ký 0.3%, khoảng thời gian ngủ yên ms, phí đăng ký, phí ăn đơn.

Trong 5 ngày gần đây, thị trường XTZ đang trong giai đoạn biến động, rất phù hợp với lưới.img

Trước tiên, chúng ta sẽ xem xét tác động của kích thước cổ phiếu khác nhau đối với lợi nhuận, và lợi nhuận được xem xét lại theo phương pháp xem xét cổ phiếu truyền thống chắc chắn sẽ tăng theo tỷ lệ tăng của cổ phiếu.

e1 = Grid('XTZ',100,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e1.account['USDT'])
e2 = Grid('XTZ',1000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e2.account['USDT'])
e3 = Grid('XTZ',10000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e3.account['USDT'])
e4 = Grid('XTZ',100000,0.3,1000,maker_fee=-0.00002,taker_fee=0.0003)
print(e4.account['USDT'])

Tổng cộng bốn nhóm được kiểm tra lại, với giá trị lưu trữ là 100, 1000, 10000, 100000, và kết quả là như sau:

{'realised_profit': 28.470993031132966, 'margin': 0.7982662957624465, 'unrealised_profit': 0.0104554474048441, 'total': 10000028.481448, 'leverage': 0.0, 'fee': -0.3430967859046398, 'maker_fee': -0.36980249726699727, 'taker_fee': 0.026705711362357405}
{'realised_profit': 275.63148945320177, 'margin': 14.346335829979132, 'unrealised_profit': 4.4382117331794045e-14, 'total': 10000275.631489, 'leverage': 0.0, 'fee': -3.3102045933457784, 'maker_fee': -3.5800688964477048, 'taker_fee': 0.2698643031019274}
{'realised_profit': 2693.8701498889504, 'margin': 67.70120400534114, 'unrealised_profit': 0.5735269329348516, 'total': 10002694.443677, 'leverage': 0.0001, 'fee': -33.984021415250744, 'maker_fee': -34.879233866850974, 'taker_fee': 0.8952124516001403}
{'realised_profit': 22610.231198585603, 'margin': 983.3853688758861, 'unrealised_profit': -20.529965947304365, 'total': 10022589.701233, 'leverage': 0.002, 'fee': -200.87094000385412, 'maker_fee': -261.5849078470078, 'taker_fee': 60.71396784315319}

Có thể thấy lợi nhuận cuối cùng đã đạt được lần lượt là 28.4%, 27.5%, 26.9%, 22.6% của giá trị nắm giữ. Điều này cũng phù hợp với thực tế, giá trị nắm giữ càng lớn, giá trị đăng ký càng lớn, càng có khả năng xảy ra một số giao dịch, lợi nhuận cuối cùng đạt được cũng nhỏ hơn so với số lượng đăng ký. Dưới đây là so sánh lợi nhuận tương đối của giá trị nắm giữ lần lượt là 100 và 10000:img

Chúng ta cũng có thể kiểm tra lại các thông số khác nhau ảnh hưởng đến lợi nhuận kiểm tra lại, chẳng hạn như mật độ đăng nhập, thời gian ngủ, chi phí thủ tục, vv. Ví dụ, thay đổi thời gian ngủ thành 100ms, so với thời gian ngủ 1000ms, xem lợi nhuận. Kết quả kiểm tra lại như sau:

{'realised_profit': 29.079440803790423, 'margin': 0.7982662957624695, 'unrealised_profit': 0.0104554474048441, 'total': 10000029.089896, 'leverage': 0.0, 'fee': -0.3703702128662524, 'maker_fee': -0.37938946377435134, 'taker_fee': 0.009019250908098965}

Lợi nhuận được cải thiện một chút, vì chiến lược chỉ treo một nhóm đơn đặt hàng, sẽ có một số đơn đặt hàng không thể ăn do giá biến động do không thể thay đổi, giảm giờ ngủ đã cải thiện vấn đề này.

Tóm lại

Các sáng kiến trong bài viết này đề xuất một hệ thống tracking dựa trên dòng lệnh mới, có thể mô phỏng một phần các trường hợp đặt hàng, mua hàng, giao dịch, trì hoãn, phản ánh một phần tác động của quy mô vốn chiến lược đối với lợi nhuận, có giá trị tham chiếu quan trọng đối với chiến lược tần suất cao và chiến lược đầu cơ, tracking chính xác cao chỉ ra hướng để tối ưu hóa các thông số chiến lược.


Có liên quan

Thêm nữa

Có thểChiến lược là tăng giá 1% Bao lâu để tăng 1%?

Có thểChiến lược là tăng giá 1% Tôi không biết. Bao lâu để tăng 1%?

bài giảngCó thể bạn sẽ thấy nó ở trên bảng xếp hạng.

dsaidasiSố lượng dữ liệu này lớn đến mức nào, và trang web này có chấp nhận được không?

Cỏ nhỏ/upload/asset/1ff487b007e1a848ead.csv

Cỏ nhỏVà chúng ta có thể sử dụng một cách này để kiểm tra dữ liệu, nhưng chúng ta không thể kiểm tra dữ liệu này.

Cỏ nhỏChỉ số này là nhỏ hơn nhiều so với các giao dịch thực tế, với mức độ giao dịch bận rộn, 1M-20M mỗi ngày.