Chiến lược Động lực dựa trên Squeeze của LazyBear

Tác giả:ChaoZhang, Ngày: 2023-12-21 14:22:49
Tags:

img

Tổng quan

Ý tưởng chính của chiến lược này dựa trên chỉ số Squeeze Momentum của LazyBear để phân tích thời gian mua và bán. Nó phân tích các điểm uốn cong trong xu hướng đà tăng, xác định vị trí đỉnh và đáy như tín hiệu bán và mua tương ứng. Vì nó là một chiến lược dài, nó cũng xem xét Trung bình Di chuyển Triển số 50 giai đoạn để xác định xu hướng tăng. Nếu giá đóng của nến nằm trên 50EMA, và độ nghiêng của 50EMA đang có xu hướng tăng, thì tín hiệu mua sẽ được thực hiện.

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

Chiến lược này kết hợp các dải Bollinger và kênh Keltner để xác định xu hướng và các vùng ép. Cụ thể, nó tính toán các dải Bollinger 20 giai đoạn và các kênh Keltner 20 giai đoạn. Khi các dải Bollinger hoàn toàn nằm trong các kênh Keltner, nó được xem là một tín hiệu ép. Khu vực ép được xác định khi dải Bollinger thấp hơn đi trên dải Keltner và dải Bollinger trên đi dưới dải Keltner. Ngược lại, khi dải Bollinger thấp hơn rơi dưới dải Keltner và dải Bollinger trên tăng trên dải Keltner, đó là một khu vực không ép.

Ngoài ra, chiến lược sử dụng hồi quy tuyến tính để phân tích sự thay đổi độ nghiêng của động lực. Nó tính toán giá trị hồi quy tuyến tính của giá trong 20 giai đoạn qua trừ giá điển hình. Khi độ nghiêng của giá trị hồi quy tuyến tính là dương tính, nó được xem là xu hướng tăng. Khi độ nghiêng là âm tính, đó là xu hướng giảm. Trong vùng ép, nếu có sự đảo ngược trong độ nghiêng của động lực, nó báo hiệu mua hoặc bán. Cụ thể, khi trong vùng ép, một chuyển động từ dương tính sang âm tính phát ra tín hiệu bán. Và khi trong vùng ép, một chuyển động từ âm tính sang dương tính phát ra tín hiệu mua.

Để lọc ra các tín hiệu sai, chiến lược cũng đánh giá xem giá đóng cửa có cao hơn Trung bình Di chuyển Triệt để 50 ngày và nếu Trung bình Di chuyển Triệt để 50 ngày có độ nghiêng tăng hay không.

Phân tích lợi thế

Đây là một chiến lược rất thông minh, sử dụng hai loại chỉ số khác nhau để đánh giá đa chiều về thị trường, có thể tránh hiệu quả các tín hiệu sai.

  1. Ứng dụng toàn diện các dải Bollinger, kênh Keltner và chỉ số động lực để phân tích đa chiều và tăng độ chính xác.

  2. Các vùng ép có thể xác định hiệu quả các đỉnh và đáy của sự đảo ngược động lượng và nắm bắt chính xác các đường rẽ.

  3. Việc lọc xu hướng dựa trên giá đóng cửa và EMA 50 ngày tránh việc mở lại các vị trí trong quá trình củng cố.

  4. Các tín hiệu chỉ phát ra trong các vùng ép giảm tín hiệu sai và cải thiện tỷ lệ lợi nhuận.

  5. Không gian tối ưu hóa tham số lớn cho phép tối ưu hóa nhắm mục tiêu thông qua thời gian điều chỉnh vv.

  6. Kết hợp dài và ngắn, xem xét xu hướng chu kỳ lớn và tích hợp các chỉ số trung hạn, hướng dài là rõ ràng.

Phân tích rủi ro

Mặc dù chiến lược này có nhiều chỉ số kỹ thuật, nhưng vẫn có một số rủi ro:

  1. Mất cơ hội mua/bán khi Bollinger Bands và Keltner Channels phân biệt.

  2. Mất mát lớn có thể xảy ra trong khi thị trường tăng hoặc giảm mạnh.

  3. Trong các thị trường biến động cao, các tình huống nén có thể không rõ ràng, dẫn đến ít tín hiệu hơn.

  4. Có xu hướng mất mát điều chỉnh trong quá trình chuyển đổi tăng-gấu.

Để tránh những rủi ro này, chúng ta có thể thực hiện các biện pháp sau:

  1. Tối ưu hóa các tham số để đồng bộ hóa Bollinger Bands và Keltner Channels càng nhiều càng tốt.

  2. Thiết lập stop loss để kiểm soát single loss.

  3. Sử dụng chiến lược này như một phần của chiến lược danh mục đầu tư, kết hợp với các chiến lược khác.

  4. Giảm các vị trí thích hợp trong các thị trường biến động cao.

Hướng dẫn tối ưu hóa

Vẫn còn nhiều chỗ để tối ưu hóa chiến lược này, chủ yếu theo các hướng sau:

  1. Tối ưu hóa các khoảng thời gian của Bollinger Bands và Keltner Channels để đồng bộ hóa chúng càng nhiều càng tốt.

  2. Kiểm tra các yếu tố nhân khác nhau để tìm kết hợp tham số tối ưu.

  3. Hãy thử giới thiệu các chỉ số khác để xác nhận, chẳng hạn như RSI vv.

  4. Dựa trên mô hình 5 màu sắc của Wen Hua, chọn lọc sử dụng chiến lược này tùy thuộc vào giai đoạn thị trường.

  5. Sử dụng máy học vv để tối ưu hóa các thông số một cách năng động.

  6. Kiểm tra lại trên các đồng tiền khác nhau để tìm ra các sản phẩm giao dịch phù hợp nhất.

  7. Khám phá hiệu quả của chiến lược này trong các khung thời gian dài hơn (ngày, hàng tuần, v.v.).

Kết luận

Chiến lược đè nén LazyBear sử dụng nhiều chỉ số kỹ thuật, xác định chính xác sự đảo ngược đè nén cho giao dịch trong các vùng đè nén, tránh mở lại các vị trí lặp đi lặp lại trong các thị trường không có xu hướng. Nó có quy tắc mua và bán có thể định lượng được định nghĩa có hệ thống, hoạt động xuất sắc trong các bài kiểm tra ngược. Thông qua tối ưu hóa cài đặt tham số, giới thiệu các chỉ số phán đoán mới vv, chiến lược này có nhiều khả năng cải thiện và đáng nghiên cứu và áp dụng sâu sắc bởi các nhà giao dịch lượng.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

//
// @author LazyBear 
// List of all my indicators: https://www.tradingview.com/v/4IneGo8h/
//
initialBalance = 8000

strategy("Crypto momentum strategy", overlay=false)


length = input(20, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")

useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool)

// Calculate BB
source = close
basis = sma(source, length)
ema = ema(source, 50)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : high - low
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn = lowerBB > lowerKC and upperBB < upperKC
sqzOff = lowerBB < lowerKC and upperBB > upperKC
noSqz = sqzOn == false and sqzOff == false

val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)), sma(close, lengthKC)), lengthKC, 0)

slope = (val - val[2])
emaSlope = (ema - ema[1])


bcolor = iff(slope > 0, color.lime, color.red)
scolor = noSqz ? color.green : sqzOn ? color.black : color.green
squeeze = (noSqz ? 0 : sqzOn ? 1 : 0)

plot(val, color=color.gray, style=plot.style_line, linewidth=1, title="momentum")
plot(slope, color=bcolor, style=plot.style_circles, linewidth=2, title="slope")
plot(0, color=scolor, style=plot.style_line, linewidth=2, title="squeeze-zero")

co = crossover(slope / abs(slope), 0)
cu = crossunder(slope / abs(slope), 0)

if co and source > ema and emaSlope > 0
    strategy.entry("long", strategy.long, comment="long")
if cu
    strategy.close("long")


Thêm nữa