
Gagasan utama strategi ini adalah untuk mencapai strategi pengesanan trend yang paling tepat. Strategi ini menilai kemungkinan berterusan trend linear semasa dengan mengira tahap kepercayaan yang terhad pada beberapa harga penutupan masa lalu. Strategi ini mengandaikan bahawa apabila kepercayaan melebihi tahap tertentu, trend linear yang sedang berlaku lebih cenderung untuk berlanjutan.
Strategi ini menggunakan kaedah regresi linear biasa untuk mengira kecocokan linear pada harga penutupan pada masa lalu N, untuk mendapatkan slope k untuk kecocokan linear dan standard deviasi yang berbeza dengan harga penutupan σ. Kemudian menentukan ketidakpercayaan trend sebagai k / σ.
Apabila keyakinan trend melebihi nilai penarikan masuk lebih banyak daripada penarikan masuk, melakukan penarikan; apabila jatuh ke penarikan lebih banyak daripada penarikan kedudukan yang sama, melakukan penarikan; sama, apabila keyakinan trend lebih rendah daripada penarikan masuk lebih sedikit daripada penarikan, melakukan penarikan; apabila melebihi penarikan lebih sedikit daripada penarikan kedudukan yang sama, melakukan penarikan.
Dengan cara ini, ia boleh menyaring isyarat daripada pergerakan harga yang liar dan tidak mengikuti trend linear yang jelas.
Strategi ini menggabungkan kaedah regresi linear dalam trend tracking dan statistik untuk mengelakkan pergerakan harga jangka pendek dan hanya mengikuti trend jangka panjang, yang menghasilkan frekuensi perdagangan yang lebih rendah dan kadar kemenangan yang lebih tinggi.
Strategi ini mempunyai banyak ruang untuk menyesuaikan parameter, dan dapat mencapai generalisasi yang baik dengan menyesuaikan parameter untuk pelbagai jenis dan tempoh masa.
Strategi ini mempunyai risiko untuk diboikot. Strategi ini akan menghasilkan kerugian yang lebih besar apabila terdapat perubahan trend yang jelas. Selain itu, parameter yang tidak betul juga boleh menyebabkan perdagangan berlebihan atau kehilangan peluang perdagangan yang baik.
Anda boleh menetapkan Hentian Kerosakan untuk mengawal risiko kerugian. Pada masa yang sama, anda mesti menilai pilihan parameter dengan teliti untuk mengelakkan pengoptimuman yang berlebihan.
Strategi ini boleh dioptimumkan dengan cara:
Tambah logik stop loss untuk mengunci keuntungan dan mengawal risiko
Tambah parameter untuk menyesuaikan diri dengan modul pengoptimuman supaya parameter dapat disesuaikan secara dinamik
Menambah model pembelajaran mesin untuk menilai titik-titik perubahan trend dan meningkatkan lagi peluang strategi
Mencuba kesesuaian dengan pelbagai jenis dan tempoh masa, meningkatkan keupayaan generalisasi
Strategi ini secara keseluruhan adalah strategi kuantitatif untuk trend jangka panjang, mengawal risiko. Ia menggabungkan trend pelacakan dan kaedah regresi linear, yang boleh menapis isyarat perdagangan bising. Ia boleh disesuaikan dengan baik dengan pelbagai varieti dan kitaran, dengan penyesuaian parameter, dan merupakan strategi berkesan yang bernilai kajian dan penambahbaikan.
/*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)