Idea utama strategi ini adalah untuk melaksanakan strategi trend berikut yang tepat mungkin. Ia menilai kemungkinan kesinambungan trend linear semasa dengan mengira
Strategi ini mengira kesesuaian linear N harga penutupan yang lalu menggunakan regresi linear biasa, mendapatkan cerun k dan penyimpangan standard σ dari penyimpangan dari harga penutupan. Kemudian keyakinan trend ditakrifkan sebagai k / σ.
Apabila keyakinan trend melebihi ambang
Dengan cara ini ia boleh menapis isyarat dari pergerakan harga liar yang tidak mengikuti trend linear yang jelas.
Strategi ini menggabungkan trend berikut dan kaedah regresi linear dalam statistik, yang boleh mengelakkan mengikuti turun naik harga jangka pendek dan hanya mengikuti trend jangka panjang, dengan itu mendapatkan kekerapan perdagangan yang lebih rendah dan kadar kemenangan yang lebih tinggi.
Strategi ini mempunyai ruang penyesuaian parameter yang besar dan boleh disesuaikan dengan produk dan jangka masa yang berbeza dengan menyesuaikan parameter, mencapai umum yang baik.
Strategi ini mempunyai risiko terperangkap. Ia akan menghasilkan kerugian besar apabila pembalikan trend yang ketara berlaku. Di samping itu, tetapan parameter yang tidak betul juga boleh menyebabkan overtrading atau kehilangan peluang perdagangan yang baik.
Stop loss boleh ditetapkan untuk mengawal risiko penurunan. Pada masa yang sama, pilihan parameter mesti dinilai dengan teliti untuk mengelakkan overfitting.
Strategi ini boleh dioptimumkan lagi dalam aspek berikut:
Tambah logik stop loss / mengambil keuntungan untuk mengunci keuntungan dan mengawal risiko
Tambah modul pengoptimuman adaptif untuk pelarasan parameter dinamik
Tambah model pembelajaran mesin untuk menentukan titik pembalikan trend dan meningkatkan lagi kadar kemenangan
Uji kesesuaian pada produk dan jangka masa yang berbeza untuk meningkatkan generalisasi
Secara amnya, ini adalah strategi mengikuti trend jangka panjang dengan kawalan risiko. Ia menggabungkan trend berikut dan kaedah regresi linear untuk menapis isyarat perdagangan bunyi bising. Melalui penyesuaian parameter, ia dapat menyesuaikan diri dengan baik dengan produk dan jangka masa yang berbeza, dan merupakan strategi yang berkesan yang bernilai penyelidikan dan peningkatan yang 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)