Ý tưởng chính của chiến lược này là thực hiện một chiến lược theo xu hướng chính xác nhất có thể. Nó đánh giá khả năng tiếp tục của xu hướng tuyến tính hiện tại bằng cách tính toán
Chiến lược tính toán sự phù hợp tuyến tính của giá đóng cửa N trong quá khứ bằng cách sử dụng hồi quy tuyến tính thông thường, lấy độ nghiêng k và độ lệch chuẩn σ của độ lệch so với giá đóng cửa.
Khi sự tin tưởng xu hướng vượt quá ngưỡng
Bằng cách này, nó có thể lọc các tín hiệu từ các chuyển động giá hoang dã không theo xu hướng tuyến tính rõ ràng.
Chiến lược kết hợp các phương pháp theo xu hướng và hồi quy tuyến tính trong thống kê, có thể tránh theo biến động giá ngắn hạn và chỉ theo xu hướng dài hạn, do đó có tần suất giao dịch thấp hơn và tỷ lệ thắng cao hơn.
Chiến lược có không gian điều chỉnh tham số lớn và có thể được điều chỉnh cho các sản phẩm và khung thời gian khác nhau bằng cách điều chỉnh các tham số, đạt được khả năng tổng quát tốt.
Chiến lược này có nguy cơ bị mắc kẹt. Nó sẽ tạo ra tổn thất lớn khi có sự đảo ngược xu hướng đáng kể. Ngoài ra, cài đặt tham số không đúng cũng có thể dẫn đến giao dịch quá mức hoặc bỏ lỡ cơ hội giao dịch tốt.
Stop loss có thể được thiết lập để kiểm soát rủi ro giảm. Đồng thời, sự lựa chọn các tham số phải được đánh giá cẩn thận để tránh quá mức.
Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:
Thêm logic dừng lỗ / lấy lợi nhuận để khóa lợi nhuận và kiểm soát rủi ro
Thêm mô-đun tối ưu hóa thích nghi để điều chỉnh tham số động
Thêm mô hình học máy để xác định các điểm đảo ngược xu hướng và tiếp tục cải thiện tỷ lệ thắng
Kiểm tra khả năng thích nghi trên các sản phẩm và khung thời gian khác nhau để cải thiện khái quát hóa
Thông thường, đây là một chiến lược theo xu hướng dài hạn với kiểm soát rủi ro. Nó kết hợp các phương pháp theo xu hướng và hồi quy tuyến tính để lọc ra các tín hiệu giao dịch tiếng ồn. Thông qua điều chỉnh tham số, nó có thể thích nghi tốt với các sản phẩm và khung thời gian khác nhau và là một chiến lược hiệu quả đáng nghiên cứu và cải tiến sâu sắc.
/*backtest start: 2022-11-15 00:00:00 end: 2023-11-21 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/ // © carefulCamel61097 // ################################################################################################ // "This is a trend following strategy that performed very well on the past 5 years" // "Intended to be used on BTC-USDT, 4hr timeframe" // "A factor 2 Leverage can be added by changing Order Size to 200% of equity" // "Higher leverage is not recommended due to big drawdowns" // "Also seems to work on 1D timeframe, although ideal parameters may be different" // "Also seems to work on ETH-USDT and some other altcoins, although ideal parameters are different" // ################################################################################################ //@version=5 strategy("Trend Following based on Trend Confidence", overlay=false ) // Inputs source = input(close) since = input(timestamp('2000-01-01'), title='Start trading interval') till = input(timestamp('2030-01-01'), title='End trading interval') length = input(30, title='Length') longs_on = input.bool(true, title='Longs') shorts_on = input.bool(true, title='Shorts') // Parameters for best performance 2018 - 2022 // long_entry = input.float(0.26, step=0.01, title='Long entry threshold') // long_exit = input.float(-0.10, step=0.01, title='Long exit threshold') // short_entry = input.float(-0.24, step=0.01, title='Short entry threshold') // short_exit = input.float(-0.04, step=0.01, title='Short exit threshold') long_entry = input.float(0.25, step=0.01, title='Long entry threshold') long_exit = input.float(-0.10, step=0.01, title='Long exit threshold') short_entry = input.float(-0.25, step=0.01, title='Short entry threshold') short_exit = input.float(-0.05, step=0.01, title='Short exit threshold') stop_loss = input.float(10, step=1, title='Stop loss (percentage)') / 100 // Trend Confidence linreg = ta.linreg(source, length, 0) linreg_p = ta.linreg(source, length, 0+1) x = bar_index slope = linreg - linreg_p intercept = linreg - x*slope deviationSum = 0.0 for i = 0 to length-1 deviationSum := deviationSum + math.pow(source[i]-(slope*(x-i)+intercept), 2) deviation = math.sqrt(deviationSum/(length)) slope_perc = slope / source[0] deviation_perc = deviation / source[0] trend_confidence = slope_perc / deviation_perc // Strategy in_interval = true sl_long = strategy.position_avg_price * (1 - stop_loss) sl_short = strategy.position_avg_price * (1 + stop_loss) if in_interval and longs_on and ta.crossover(trend_confidence, long_entry) strategy.entry("TC Long Entry", strategy.long) strategy.exit("TC Long Exit", stop=sl_long) if in_interval and longs_on and ta.crossunder(trend_confidence, long_exit) strategy.close("TC Long Entry") if in_interval and shorts_on and ta.crossunder(trend_confidence, short_entry) strategy.entry("TC Short Entry", strategy.short) strategy.exit("TC Short Exit", stop=sl_short) if in_interval and shorts_on and ta.crossover(trend_confidence, short_exit) strategy.close("TC Short Entry") // Plots plot(trend_confidence, "Trend Confidence", color.rgb(255, 255, 255)) plot(long_entry, "", color.rgb(0, 255, 0), linewidth=1) plot(long_exit, "", color.rgb(255, 0, 0), linewidth=1) plot(short_entry, "", color=bar_index % 10 == 0 ? color.rgb(0, 255, 0) : #00000000, linewidth=1) plot(short_exit, "", color=bar_index % 10 == 0 ? color.rgb(255, 0, 0) : #00000000, linewidth=1)