Tren Mengikuti Strategi Berdasarkan Kepercayaan Tren

Penulis:ChaoZhang, Tanggal: 2023-11-22 15:50:07
Tag:

img

Gambaran umum

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 kepercayaan dari sejumlah harga penutupan masa lalu. Strategi mengasumsikan bahwa setelah kepercayaan melebihi tingkat tertentu, tren linier yang sedang berlangsung lebih mungkin untuk melanjutkan.

Prinsip Strategi

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 masuk panjang, pergi panjang; ketika turun ke ambang keluar panjang, tutup panjang. Demikian pula, ketika kepercayaan tren di bawah ambang masuk pendek, pergi pendek; ketika melebihi ambang keluar pendek, tutup pendek.

Dengan cara ini dapat menyaring sinyal dari pergerakan harga liar yang tidak mengikuti tren linier yang jelas.

Analisis Keuntungan

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.

Analisis Risiko

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.

Arahan Optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Tambahkan logika stop loss/take profit untuk mengunci keuntungan dan mengendalikan risiko

  2. Tambahkan modul optimasi adaptif untuk penyesuaian parameter dinamis

  3. Tambahkan model pembelajaran mesin untuk menentukan titik pembalikan tren dan lebih meningkatkan tingkat kemenangan

  4. Uji kemampuan beradaptasi pada produk dan kerangka waktu yang berbeda untuk meningkatkan generalisasi

Kesimpulan

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)


Lebih banyak