Ide utama dari strategi ini adalah untuk menerapkan tren mengikuti strategi yang seakurat mungkin. Hal ini menilai kemungkinan kesinambungan tren linier saat ini dengan menghitung
Strategi ini menghitung kesesuaian linier dari harga penutupan N yang lalu menggunakan regresi linier biasa, mendapatkan kemiringan k dan standar deviasi σ dari penyimpangan dari harga penutupan.
Ketika kepercayaan tren melebihi ambang
Dengan cara ini dapat menyaring sinyal dari pergerakan harga liar yang tidak mengikuti tren linier yang jelas.
Strategi ini menggabungkan metode mengikuti tren dan regresi linier dalam statistik, yang dapat menghindari mengikuti fluktuasi harga jangka pendek dan hanya mengikuti tren jangka panjang, sehingga mendapatkan frekuensi perdagangan yang lebih rendah dan tingkat kemenangan yang lebih tinggi.
Strategi ini memiliki ruang penyesuaian parameter yang besar dan dapat disesuaikan dengan produk dan kerangka waktu yang berbeda dengan menyesuaikan parameter, mencapai generalisasi yang baik.
Strategi ini memiliki risiko terperangkap. Ini akan menghasilkan kerugian besar ketika pembalikan tren yang signifikan terjadi. Selain itu, pengaturan parameter yang tidak tepat juga dapat menyebabkan overtrading atau kehilangan peluang perdagangan yang baik.
Stop loss dapat diatur untuk mengendalikan risiko penurunan. Pada saat yang sama, pilihan parameter harus dievaluasi dengan hati-hati untuk menghindari overfit.
Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:
Tambahkan logika stop loss/take profit untuk mengunci keuntungan dan mengendalikan risiko
Tambahkan modul optimasi adaptif untuk penyesuaian parameter dinamis
Tambahkan model pembelajaran mesin untuk menentukan titik pembalikan tren dan lebih meningkatkan tingkat kemenangan
Uji kemampuan beradaptasi pada produk dan kerangka waktu yang berbeda untuk meningkatkan generalisasi
Secara umum, ini adalah strategi trend long term dengan pengendalian risiko. Ini menggabungkan metode trend following dan regresi linier untuk menyaring sinyal perdagangan noise. Melalui tuning parameter, ini dapat beradaptasi dengan baik dengan produk dan kerangka waktu yang berbeda, dan merupakan strategi yang efektif yang layak penelitian dan perbaikan mendalam.
/*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)