
Chiến lược này sử dụng phương thức giao dịch lưới cố định, đặt giá khởi đầu và tỷ lệ khoảng cách của mỗi lớp lưới, sau đó đặt giá mua và bán cố định 10 lớp dựa trên tỷ lệ này, để thực hiện chiến lược giao dịch lưới mua thấp và bán cao.
Chiến lược này bắt đầu bằng việc thiết lập giá khởi điểm sprice và tỷ lệ gridpercent khoảng cách mỗi lớp. Sau đó, tính toán giá mua và bán 10 tầng dựa trên giá khởi điểm và tỷ lệ.
Công thức giá mua:
b1=sprice-(sprice*p1)
b2=sprice-(sprice*p2)
b3=sprice-(sprice*p3)
…
Trong đó, p1 đến p10 là tỷ lệ được tính theo lớp theo gridpercent.
Giá bán:
s1=b1+(sprice*p1)
s2=b2+(sprice*p1)
s3=b3+(sprice*p1)
…
Điều kiện mua là khi giá đóng cửa thấp hơn giá mua tương ứng sẽ kích hoạt mua:
if (close
strategy.entry(“b1”, strategy.long, when=(close
Tương tự, khi giá đóng cửa cao hơn giá bán tương ứng, nó sẽ kích hoạt bán:
if (close>s1)
strategy.exit(“b1”, when=(close>s1))
Do đó, chiến lược mua mua cao của lưới cố định đã được thực hiện.
Chiến lược mạng lưới cố định này có một số ưu điểm:
Có khả năng tự động mua và bán, không cần thời gian thị trường, giảm khó khăn giao dịch.
Việc thiết lập khoảng cách lưới hợp lý có thể kiểm soát rủi ro một cách hiệu quả và tránh bị mắc kẹt.
Có thể kiếm được lợi nhuận dù thị trường tăng hay giảm.
Bạn có thể điều chỉnh các tham số lưới để phù hợp với các hoạt động thị trường khác nhau.
Có thể mở rộng quy mô nắm giữ bằng cách tăng số lớp lưới.
Có thể kết hợp với việc ngăn chặn để tránh tổn thất lớn trong các trường hợp cực đoan.
Chiến lược này cũng có một số rủi ro:
Khi giao dịch bị chênh lệch, chi phí giao dịch sẽ làm giảm lợi nhuận.
Giá khởi điểm và thiết lập lưới không kịp thời, dễ bị mất mát.
Các sự kiện bất ngờ có thể dẫn đến tổn thất khi giá tăng vọt.
Hệ thống giao dịch tự động có nguy cơ bị xếp hàng.
Các vụ nổ tập trung đã dẫn đến sự gia tăng tổn thất.
Các giải pháp tương ứng:
Đặt các tham số lưới hợp lý để đảm bảo lợi nhuận lớn hơn chi phí giao dịch.
Đặt giá khởi đầu và khoảng cách lưới phù hợp bằng cách đo lại các tham số tối ưu hóa.
Tăng Stop Loss để kiểm soát rủi ro.
Đánh giá giao dịch được nới lỏng một cách thích hợp để tránh bị xếp hàng.
Thiết lập kiểm soát rủi ro, hạn chế tổn thất tối đa.
Chiến lược này có thể được tối ưu hóa theo các hướng sau:
Động thái điều chỉnh khoảng cách lưới, mở rộng khoảng cách và giảm khoảng cách khi sóng tăng lên.
Phân tích giá khởi điểm dựa trên dữ liệu lịch sử và tính toán phạm vi dao động.
Tham gia mô hình học máy, dự đoán biến động giá, điều chỉnh động lưới.
Thêm lệnh dừng ở điểm rủi ro cao, tối ưu hóa vị trí dừng bằng cách quan sát điểm dừng lịch sử.
Kết hợp với chiến lược quản lý vốn, điều chỉnh vị trí động theo lợi nhuận.
Tối ưu hóa quản lý vị trí, tối đa hóa hiệu quả sử dụng vốn.
Tối ưu hóa thực hiện giao dịch, sử dụng các thuật toán như TWAP để giảm chi phí tác động.
Chiến lược này sử dụng phương thức giao dịch lưới cố định, đặt giá mua và bán theo tỷ lệ giá khởi điểm và khoảng cách lưới, thực hiện giao dịch mua bán tự động, có thể tận dụng hiệu quả sự biến động của thị trường. Đồng thời, cũng cần chú ý đến kiểm soát rủi ro, khóa lợi nhuận và kiểm soát tổn thất bằng cách tối ưu hóa tham số, điều chỉnh động lực và dừng lỗ. Kết hợp với các phương tiện học máy và quản lý tiền tiên tiến, có thể làm tăng thêm lợi nhuận và tỷ lệ chiến thắng của chiến lược.
/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Lionkind
//@version=5
strategy("Grid HW", overlay = true, margin_long = 1, margin_short = 1)
// Fix 35k price as starting point and 1% as a distance
sprice=input(40500,"Starting price")
gridpercent=input(1,"Percent")
// calculate the % of the 10 layers
p1=((gridpercent*1)/100)
p2=((gridpercent*2)/100)
p3=((gridpercent*3)/100)
p4=((gridpercent*4)/100)
p5=((gridpercent*5)/100)
p6=((gridpercent*6)/100)
p7=((gridpercent*7)/100)
p8=((gridpercent*8)/100)
p9=((gridpercent*9)/100)
p10=((gridpercent*10)/100)
//set buy prices
b1=sprice-(sprice*p1)
b2=sprice-(sprice*p2)
b3=sprice-(sprice*p3)
b4=sprice-(sprice*p4)
b5=sprice-(sprice*p5)
b6=sprice-(sprice*p6)
b7=sprice-(sprice*p7)
b8=sprice-(sprice*p8)
b9=sprice-(sprice*p9)
b10=sprice-(sprice*p10)
//set sell prices
s1=b1+(sprice*p1)
s2=b2+(sprice*p1)
s3=b3+(sprice*p1)
s4=b4+(sprice*p1)
s5=b5+(sprice*p1)
s6=b6+(sprice*p1)
s7=b7+(sprice*p1)
s8=b8+(sprice*p1)
s9=b9+(sprice*p1)
s10=b10+(sprice*p1)
//Long conditions
lc1=close<b1
lc2=close<b2
lc3=close<b3
lc4=close<b4
lc5=close<b5
lc6=close<b6
lc7=close<b7
lc8=close<b8
lc9=close<b9
lc10=close<b10
//exit conditions
ec1=close>s1
ec2=close>s2
ec3=close>s3
ec4=close>s4
ec5=close>s5
ec6=close>s6
ec7=close>s7
ec8=close>s8
ec9=close>s9
ec10=close>s10
//long orders
if (lc1)
strategy.entry("b1", strategy.long, when=(lc1))
if (lc2)
strategy.entry("b2", strategy.long, when=(lc2))
if (lc3)
strategy.entry("b3", strategy.long, when=(lc3))
if (lc4)
strategy.entry("b4", strategy.long, when=(lc4))
if (lc5)
strategy.entry("b5", strategy.long, when=(lc5))
if (lc6)
strategy.entry("b6", strategy.long, when=(lc6))
if (lc7)
strategy.entry("b7", strategy.long, when=(lc7))
if (lc8)
strategy.entry("b8", strategy.long, when=(lc8))
if (lc9)
strategy.entry("b9", strategy.long, when=(lc9))
if (lc10)
strategy.entry("b10", strategy.long, when=(lc10))
//exit orders
if (ec1)
strategy.exit("b1", when=(ec1), limit=1)
if (ec2)
strategy.exit("b2", when=(ec2), limit=1)
if (ec3)
strategy.exit("b3", when=(ec3), limit=1)
if (ec4)
strategy.exit("b4", when=(ec4), limit=1)
if (ec5)
strategy.exit("b5", when=(ec5), limit=1)
if (ec6)
strategy.exit("b6", when=(ec6), limit=1)
if (ec7)
strategy.exit("b7", when=(ec7), limit=1)
if (ec8)
strategy.exit("b8", when=(ec8), limit=1)
if (ec9)
strategy.exit("b9", when=(ec9), limit=1)
if (ec10)
strategy.exit("b10", when=(ec10), limit=1)
plot(b1,color=color.green)
plot(s1, color=color.red)
plot(b2, color=color.purple)