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 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
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.
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.
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.
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.
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)