Trend Mengikuti Strategi Berdasarkan Kepercayaan Trend

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

img

Ringkasan

Idea utama strategi ini adalah untuk melaksanakan strategi trend berikut yang tepat mungkin. Ia menilai kemungkinan kesinambungan trend linear semasa dengan mengira kepercayaan dari sebilangan harga penutupan masa lalu. Strategi ini mengandaikan bahawa apabila keyakinan melebihi tahap tertentu, trend linear yang sedang berlangsung lebih cenderung untuk berterusan.

Prinsip Strategi

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 masuk panjang, pergi panjang; apabila turun ke ambang keluar panjang, tutup panjang. Begitu juga, apabila keyakinan trend di bawah ambang masuk pendek, pergi pendek; apabila melebihi ambang keluar pendek, tutup pendek.

Dengan cara ini ia boleh menapis isyarat dari pergerakan harga liar yang tidak mengikuti trend linear yang jelas.

Analisis Kelebihan

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.

Analisis Risiko

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.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Tambah logik stop loss / mengambil keuntungan untuk mengunci keuntungan dan mengawal risiko

  2. Tambah modul pengoptimuman adaptif untuk pelarasan parameter dinamik

  3. Tambah model pembelajaran mesin untuk menentukan titik pembalikan trend dan meningkatkan lagi kadar kemenangan

  4. Uji kesesuaian pada produk dan jangka masa yang berbeza untuk meningkatkan generalisasi

Kesimpulan

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)


Lebih lanjut