Strategi mengikuti tren berdasarkan keyakinan tren


Tanggal Pembuatan: 2023-11-22 15:50:07 Akhirnya memodifikasi: 2023-11-22 15:50:07
menyalin: 0 Jumlah klik: 734
1
fokus pada
1617
Pengikut

Strategi mengikuti tren berdasarkan keyakinan tren

Ringkasan

Gagasan utama dari strategi ini adalah untuk mencapai strategi pelacakan tren yang seakurat mungkin. Strategi ini menilai kemungkinan keberlanjutan tren linier saat ini dengan menghitung jumlah harga penutupan harga yang terhenti di masa lalu. Strategi ini mengasumsikan bahwa tren linier yang sedang terjadi lebih mungkin untuk berlanjut setelah kepercayaan melampaui tingkat tertentu.

Prinsip Strategi

Strategi ini menggunakan metode regresi linier biasa untuk menghitung kecocokan linier dari N harga penutupan terakhir, mendapatkan kemiringan k dari kecocokan linier dan standar deviasi dari harga penutupan σ. Kemudian mendefinisikan ketidakpercayaan tren sebagai k/σ.

Ketika kepercayaan tren lebih tinggi dari nilai entang lebih tinggi dari entang, melakukan over; ketika turun ke nilai entang lebih rendah dari entang, melakukan leveling. Demikian pula, ketika kepercayaan tren lebih rendah dari entang dari entang dari entang, melakukan leveling; ketika melebihi entang dari entang dari leveling, melakukan leveling.

Dengan demikian, ia dapat menyaring sinyal dari pergerakan harga yang liar dan tidak mengikuti tren linier yang jelas.

Analisis Keunggulan

Strategi ini menggabungkan metode regresi linier dalam pelacakan tren dan statistik untuk menghindari mengikuti pergerakan harga jangka pendek dan hanya mengikuti tren jangka panjang, sehingga menghasilkan frekuensi perdagangan yang lebih rendah dan tingkat kemenangan yang lebih tinggi.

Ada banyak ruang untuk menyesuaikan parameter strategi ini, yang dapat disesuaikan dengan parameter yang berbeda untuk varietas dan periode waktu, untuk mencapai generalisasi yang baik.

Analisis risiko

Strategi ini memiliki risiko untuk di-arbitrase. Strategi ini menghasilkan kerugian yang lebih besar ketika harga mengalami pembalikan tren yang jelas. Selain itu, pengaturan parameter yang tidak tepat dapat menyebabkan overtrading atau kehilangan peluang perdagangan yang baik.

Stop loss dapat diatur untuk mengendalikan risiko kerugian. Pada saat yang sama, pilihan parameter harus dievaluasi dengan hati-hati untuk menghindari optimasi berlebihan.

Arah optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam hal:

  1. Menambahkan Stop Loss, Stop Stop Logic untuk mengunci keuntungan dan mengendalikan risiko

  2. Tambahkan parameter untuk menyesuaikan diri dengan modul optimasi sehingga parameter dapat disesuaikan secara dinamis

  3. Menambahkan model pembelajaran mesin untuk menilai titik balik tren dan meningkatkan peluang strategi lebih lanjut

  4. Mencoba adaptasi dengan berbagai varietas dan periode waktu, meningkatkan kemampuan generalisasi

Meringkaskan

Secara keseluruhan, strategi ini adalah strategi kuantitatif yang didasarkan pada tren jangka panjang dan pengendalian risiko. Ini menggabungkan metode pelacakan tren dan regresi linier, yang dapat menyaring sinyal perdagangan bising. Dengan penyesuaian parameter, ini dapat disesuaikan dengan baik dengan varietas dan periode yang berbeda, dan merupakan strategi efektif yang layak untuk penelitian dan perbaikan.

Kode Sumber Strategi
/*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)