Chiến lược giao dịch định lượng dựa trên chỉ báo động lượng nén LazyBear


Ngày tạo: 2024-02-05 14:48:01 sửa đổi lần cuối: 2024-02-05 14:48:01
sao chép: 0 Số nhấp chuột: 1698
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng dựa trên chỉ báo động lượng nén LazyBear

Tổng quan

Chiến lược này dựa trên chỉ số động lượng nén của LazyBear, thêm bộ lọc động lượng, thay đổi nguồn dữ liệu và thêm hệ thống quản lý rủi ro, có thể tùy chỉnh khoảng thời gian quay trở lại, nhằm mục đích nắm bắt sự bùng nổ giá sau khi nén biến động.

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

Chiến lược này sử dụng chỉ số Brin Belt và Keltner Channel để tính toán cổng giá, được coi là một tín hiệu biến động khi giá vượt qua cổng. Nó kết hợp với chỉ số động lượng nén của LazyBear, sử dụng phương pháp hồi quy tuyến tính để xác định hướng động lượng giá.

Chiến lược thêm vào bộ lọc động lực, chỉ phát ra tín hiệu giao dịch khi giá trị tuyệt đối động lực vượt quá ngưỡng. Khi nén biến động ((thường xuyên thắt chặt trong kênh) và bộ lọc động lực đi qua, chiến lược đánh giá xu hướng, làm nhiều hoặc làm trống. Đồng thời thiết lập dừng lỗ, dừng lỗ và theo dõi dừng lỗ để kiểm soát rủi ro.

Phân tích lợi thế

Chiến lược này tích hợp nhiều đánh giá chỉ số, tương đối toàn diện; kết hợp với cơ chế quản lý rủi ro, có thể hạn chế tổn thất đơn lẻ; có thể xác định định hướng xu hướng giá sau khi nén biến động; tham số có thể tùy chỉnh, thích ứng mạnh.

Phân tích rủi ro

Rủi ro chủ yếu là: phá vỡ giả tạo dẫn đến phán đoán sai; tham số được thiết lập không đúng cách, không thể đảo ngược kịp thời; dừng lỗ bị mở rộng do phá vỡ. Các tham số có thể được tối ưu hóa, điều chỉnh các tham số quản lý rủi ro, chọn loại phù hợp và thời gian giao dịch để giảm các rủi ro này.

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

Có thể xem xét kết hợp với các tín hiệu lọc của các chỉ số khác, chẳng hạn như chỉ số khối lượng giao dịch; điều chỉnh giá trị giảm động lượng chính xác hơn; thiết lập dừng rút để kiểm soát rủi ro hơn nữa; kiểm tra hiệu quả dữ liệu nhiều giống hơn. Những tính tối ưu này có thể làm cho chiến lược ổn định hơn và phổ biến hơn.

Tóm tắt

Chiến lược này có khả năng đánh giá toàn diện hơn về xu hướng và biến động của giá, có mức độ tích hợp cao, các biện pháp kiểm soát rủi ro hoàn hảo hơn, có thể được cải tiến thêm theo hướng tối ưu hóa và có khả năng thích ứng mạnh mẽ với sự bùng nổ giá sau khi nắm bắt sự nén biến động.

Mã nguồn chiến lược
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Strategy based on LazyBear Squeeze Momentum Indicator
// © Bitduke
// All scripts: https://www.tradingview.com/u/Bitduke/#published-scripts

strategy(shorttitle="SMS", title="Squeeze Momentum Strategy", overlay=false )

length = input(12, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(16, title="KC Length")
mult_kc = input(1.5, title="KC MultFactor")


//FILTERS
useMomAverage = input(false, title="Filter for Momenutum value", type=input.bool)
MomentumMin = input(20, title="Min for momentum")

// Calculate BB
src = ohlc4

ma_1 = sma(src, length)
ma_2 = sma(src, lengthKC)
range_ma = sma(high - low, lengthKC)

dev = mult * stdev(src, length)

upper_bb = ma_1 + dev
lower_bb = ma_1 - dev

upper_kc = ma_2 + range_ma * mult_kc
lower_kc = ma_2 - range_ma * mult_kc

sqz_on = lower_bb > lower_kc and upper_bb < upper_kc
sqz_off = lower_bb < lower_kc and upper_bb > upper_kc
no_sqz = sqz_on == false and sqz_off == false

val = linreg(src - avg(avg(highest(hl2, lengthKC), lowest(low, lengthKC)), sma(hl2, lengthKC)), lengthKC, 0)

bcolor = iff(val > 0, iff(val > nz(val[1]), color.lime, color.green), iff(val < nz(val[1]), color.red, color.maroon))
scolor = no_sqz ? color.blue : sqz_on ? color.black : color.aqua
plot(val, color=bcolor, style=plot.style_histogram, linewidth=4)
plot(0, color=scolor, style=plot.style_cross, linewidth=2)

//LOGIC
//momentum filter
filterMom = useMomAverage ? abs(val) > MomentumMin / 100000 ? true : false : true

//standard condition
longCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.lime and filterMom
exitLongCondition = bcolor == color.green
shortCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.red and filterMom
exitShortCondition = bcolor == color.maroon

// Risk Management Sysyem
stop_loss = input(defval = 600, title="Stop Loss", minval = 0)
take_profit = input(defval = 1000, title="Take Profit", minval = 0)
trailing_stop = input(defval = 20, title="Trailing Stop", minval = 0)
// If the zero value is set for stop loss, take profit or trailing stop, then the function is disabled
s_loss = stop_loss >= 1 ? stop_loss : na
tk_profit = take_profit >= 1 ? take_profit : na
tr_stop = trailing_stop >= 1 ? trailing_stop : na


//STRATEGY
strategy.entry("SQ_Long", strategy.long, when=longCondition)
strategy.exit("Exit Long", from_entry = "SQ_Long", profit = take_profit, trail_points = trailing_stop, loss = s_loss)
strategy.close("SQ_Long", exitLongCondition)

strategy.entry("SQ_Short", strategy.short, when=shortCondition)
strategy.exit("Exit Short", from_entry = "SQ_Short", profit = take_profit, trail_points = trailing_stop, loss = s_loss )
strategy.close("SQ_Short", when=exitShortCondition)