Chiến lược giao dịch lưới động


Ngày tạo: 2023-12-01 14:41:57 sửa đổi lần cuối: 2023-12-01 14:41:57
sao chép: 0 Số nhấp chuột: 1253
1
tập trung vào
1619
Người theo dõi

Chiến lược giao dịch lưới động

Tổng quan

Chiến lược giao dịch lưới động bằng cách tính toán đường trung bình di chuyển và đường lên xuống của nó, thiết lập khu vực giao dịch lưới động. Khi giá phá vỡ khu vực lưới, tín hiệu giao dịch được phát ra theo đường lưới được thiết lập với khoảng cách cố định, và thu lợi nhuận.

Nguyên tắc chiến lược

Chiến lược này đầu tiên tính toán các trung bình di chuyển trong thời gian n được xác định, và các trung bình di chuyển trên đường ray xuống.(1 + tham số đầu vào std), đường ray dưới là đường trung bình di chuyển(1 - tham số đầu vào std) 。 Như vậy có thể xây dựng một dải phân vùng giao dịch được điều chỉnh động 。

Sau đó, trong dải khoảng cách, chúng ta định nghĩa một đường lưới với khoảng cách bằng m đường. Khi giá tăng vượt qua một đường lưới, nó sẽ phát ra nhiều tín hiệu. Khi giá giảm vượt qua một đường lưới, nó sẽ phát ra tín hiệu giá bằng trên đường lưới tương ứng.

Cụ thể, chúng ta sử dụng một mảng order_array kiểu bool để ghi lại trạng thái giao dịch của mỗi dòng lưới. Khi một trong các dòng lưới được kích hoạt nhiều điều kiện, hãy đặt trạng thái tương ứng trong order_array thành true, cho thấy dòng lưới đã nắm giữ vị thế. Khi giá giảm vượt qua đường lưới, hãy đặt trạng thái trên của dòng lưới tương ứng trong order_array thành false, phát ra tín hiệu đồng vị.

Phân tích lợi thế

Chiến lược này có một số lợi thế:

  1. Sử dụng trung bình di chuyển để xây dựng các khu vực giao dịch được điều chỉnh động, phạm vi khu vực có thể được điều chỉnh theo biến động của thị trường, làm cho chiến lược phù hợp hơn với thị trường.

  2. Thiết kế lưới có thể tự động thực hiện dừng lỗ, ngăn chặn sự gia tăng lỗ do các tình huống cực đoan.

  3. Số lượng lưới và phân bổ tiền sử dụng khoảng cách và phân bổ bằng nhau, có thể kiểm soát tốt quy mô vị trí đơn lẻ, giảm rủi ro vị trí đơn lẻ.

  4. Các tín hiệu giao dịch được thiết lập hợp lý, có thể giao dịch theo chiều hướng thuận lợi, dừng lỗ kịp thời.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Khi thị trường bị yếu lâu dài và không thể phá vỡ đường lưới, chiến lược sẽ bị mắc kẹt trong giao dịch xung đột không định hướng, và việc hoán đổi nhiều chỗ trống có thể dẫn đến mất tiền trong tài khoản.

  2. Các tham số std và số lượng lưới được chọn có thể không hoàn toàn hợp lý và cần được xác định dựa trên phân tích các loại giao dịch khác nhau. Nếu các tham số được đặt không đúng, sẽ dẫn đến phạm vi giao dịch và lưới quá lớn hoặc quá nhỏ, ảnh hưởng đến hiệu quả của chiến lược.

  3. Chiến lược không tính đến một số tình huống cực đoan, chẳng hạn như giá nhảy vọt, tăng hoặc giảm theo đường ngắn. Những tình huống này có thể dẫn đến chiến lược phá vỡ nhiều lưới, gây ra tổn thất vượt quá khả năng kiểm soát rủi ro.

Hướng tối ưu hóa

Chiến lược này cũng có thể được tối ưu hóa theo các khía cạnh sau:

  1. Các thuật toán học máy có thể được đưa vào, các mô hình đào tạo dự đoán các đường trung bình di chuyển lên và xuống đường, làm cho các khu giao dịch trở nên thông minh và động hơn.

  2. Các tham số có thể được tối ưu hóa dựa trên các đặc điểm của các chỉ số giao dịch khác nhau, bao gồm số lượng lưới, tỷ lệ phân bổ vốn, quy mô vị trí, và các tham số thích ứng được sử dụng.

  3. Có thể đặt đơn điều kiện, đặt đơn dừng lỗ dự phòng trên đường lưới ở một khoảng cách nhất định, có thể đóng vai trò dừng lỗ trước, kiểm soát tổn thất trong trường hợp cực đoan.

  4. Thiết kế cơ chế xử lý bất thường cho các tình huống cực đoan, chẳng hạn như tăng vị trí mở kho lần đầu tiên, bỏ qua dừng trực tiếp của lưới trung gian, v.v., có thể đối phó với các trường hợp bất thường như giá nhảy vọt.

Tóm tắt

Chiến lược giao dịch mạng lưới động được thiết kế hợp lý, có thể sử dụng mạng lưới để xây dựng hệ thống dừng lỗ tự động, phù hợp với các loại giao dịch có biến động giá thường xuyên hơn. Tuy nhiên, chiến lược này cũng có một số rủi ro thị trường, cần xử lý tối ưu các tham số và trường hợp bất thường để làm cho chiến lược trở nên ổn định hơn.

Mã nguồn chiến lược
/*backtest
start: 2023-10-31 00:00:00
end: 2023-11-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Grid Trading Strategy', overlay=true)

// Input
ma_length = input.int(300, 'Moving Average Length',group = 'Moving Average Conditions', step = 10)
std = input.float(0.03, title='Upper and Lower Grid Deviation', group='Grid Conditions', step = 0.01)
grid = input.int(15, maxval=15, title='Grid Line Quantity', group='Grid Conditions')

// Moving Average
ma = ta.sma(close, ma_length)
upper_bound = ma * (1 + std)
lower_bound = ma * (1 - std)
grid_width = (upper_bound - lower_bound) / (grid - 1)
grid_array = array.new_float(0)
for i = 0 to grid - 1 by 1
    array.push(grid_array, lower_bound + grid_width * i)
var order_array = array.new_bool(grid, false)    
strategy.initial_capital = 10000
// Entry Conditions
for i = 0 to grid - 1 by 1
    if close < array.get(grid_array, i) and not array.get(order_array, i)
        buy_id = i
        array.set(order_array, buy_id, true)
        strategy.entry(id=str.tostring(buy_id), direction=strategy.long, comment='#Long ' + str.tostring(buy_id))
    if close > array.get(grid_array, i) and i!=0
        if array.get(order_array, i-1)
            sell_id = i - 1
            array.set(order_array, sell_id, false)
            strategy.close(id=str.tostring(sell_id), comment='#Close ' + str.tostring(sell_id))

plot(grid > 0 ? array.get(grid_array,0) : na, color = color.yellow, transp = 10)
plot(grid > 1 ? array.get(grid_array,1) : na, color = color.yellow, transp = 10)
plot(grid > 2 ? array.get(grid_array,2) : na, color = color.yellow, transp = 10)
plot(grid > 3 ? array.get(grid_array,3) : na, color = color.yellow, transp = 10)
plot(grid > 4 ? array.get(grid_array,4) : na, color = color.yellow, transp = 10)
plot(grid > 5 ? array.get(grid_array,5) : na, color = color.yellow, transp = 10)
plot(grid > 6 ? array.get(grid_array,6) : na, color = color.yellow, transp = 10)
plot(grid > 7 ? array.get(grid_array,7) : na, color = color.yellow, transp = 10)
plot(grid > 8 ? array.get(grid_array,8) : na, color = color.yellow, transp = 10)
plot(grid > 9 ? array.get(grid_array,9) : na, color = color.yellow, transp = 10)
plot(grid > 10 ? array.get(grid_array,10) : na, color = color.yellow, transp = 10)
plot(grid > 11 ? array.get(grid_array,11) : na, color = color.yellow, transp = 10)
plot(grid > 12 ? array.get(grid_array,12) : na, color = color.yellow, transp = 10)
plot(grid > 13 ? array.get(grid_array,13) : na, color = color.yellow, transp = 10)
plot(grid > 14 ? array.get(grid_array,14) : na, color = color.yellow, transp = 10)