Chiến lược giao dịch Squeeze Momentum dựa trên chỉ số LazyBear

Tác giả:ChaoZhang, Ngày: 2024-02-05 14:48:01
Tags:

img

Tổng quan

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

Chiến lược logic

Chiến lược này sử dụng Bollinger Bands và Keltner Channels để tính toán các kênh giá. Breakout báo hiệu tăng biến động. Nó kết hợp Squeeze Momentum Indicator của LazyBear sử dụng hồi quy tuyến tính để xác định hướng động lực giá.

Chiến lược này thêm bộ lọc động lực, chỉ giao dịch khi động lực tuyệt đối vượt quá ngưỡng. Khi nén biến động (thắt chặt kênh) với bộ lọc động lực vượt qua, nó đánh giá hướng xu hướng cho dài / ngắn. Nó cũng đặt dừng lỗ, lấy lợi nhuận và dừng lại để 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 chỉ số để đánh giá toàn diện. Nó giới hạn tổn thất mỗi giao dịch với các cơ chế quản lý rủi ro. Nó có thể đánh giá kịp thời xu hướng giá sau khi ép. Các tham số có thể tùy chỉnh làm cho nó thích nghi.

Phân tích rủi ro

Các rủi ro chính bao gồm: đột phá sai gây ra phán đoán sai; không đảo ngược kịp thời với cài đặt tham số không đúng; vi phạm dừng lỗ làm tăng lỗ. Những rủi ro này có thể được giảm thiểu bằng cách tối ưu hóa các tham số, điều chỉnh cài đặt quản lý rủi ro, chọn các sản phẩm và phiên giao dịch phù hợp.

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

Xem xét kết hợp các bộ lọc chỉ số khác như khối lượng; tinh chỉnh ngưỡng động lực cho độ chính xác cao hơn; thêm stop loss để kiểm soát rủi ro chặt chẽ hơn; kiểm tra hiệu quả trên nhiều sản phẩm hơn.

Tóm lại

Chiến lược đánh giá xu hướng giá và biến động tương đối toàn diện với mức độ tích hợp cao và các biện pháp kiểm soát rủi ro được cải thiện.


/*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)



Thêm nữa