Strategi Penyerahan Kembali Dinamis

Penulis:ChaoZhang, Tarikh: 2023-12-19 13:56:55
Tag:

img

Ringkasan

Strategi ini adalah sistem perdagangan hanya beli yang menghasilkan isyarat beli berdasarkan persilangan purata bergerak dan Indeks Saluran Komoditi Mingguan (CCI) atau Indeks Arah Purata Mingguan (ADX).

Strategi ini juga membolehkan kemasukan semula dinamik, yang bermaksud ia boleh membuka kedudukan panjang baru jika harga melebihi tiga purata bergerak selepas keluar.

Prinsip Strategi

Skrip menentukan syarat untuk menjana isyarat beli. Ia memeriksa dua syarat untuk isyarat beli yang sah:

  • Purata bergerak pantas melintasi di atas purata bergerak perlahan
  • Pengguna boleh memilih untuk menapis dagangan menggunakan CCI Mingguan atau ADX Mingguan

Masuk semula secara dinamik:Jika tiada kedudukan panjang aktif dan harga di atas ketiga-tiga purata bergerak, kedudukan panjang baru dibuka.

Keadaan keluar:Jika harga penutupan jatuh di bawah purata bergerak ketiga, skrip menutup kedudukan panjang.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Menggunakan pelbagai penunjuk teknikal untuk menapis isyarat mengurangkan isyarat palsu
  2. Mekanisme kemasukan semula dinamik memaksimumkan penangkapan trend
  3. Menjadi panjang sahaja mengelakkan risiko pendek

Analisis Risiko

Risiko strategi ini termasuk:

  1. Ada beberapa risiko whipsaws
  2. Masa tunggu yang panjang mungkin terlalu lama, memerlukan hentian
  3. Tetapan parameter yang buruk boleh menyebabkan perdagangan yang terlalu kerap

Penyelesaian:

  1. Gunakan kombinasi parameter yang lebih baik dan kombinasi penunjuk untuk menapis
  2. Tetapkan stop loss yang munasabah
  3. Sesuaikan parameter untuk memastikan kestabilan

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Ujian lebih banyak gabungan penunjuk teknikal untuk mencari masa kemasukan yang lebih baik
  2. Mengoptimumkan parameter untuk mencari kombinasi parameter terbaik
  3. Menambah mekanisme stop loss untuk mengawal kerugian tunggal
  4. Menambah saiz kedudukan untuk meningkatkan/mengurangkan kedudukan berdasarkan keadaan pasaran

Ringkasan

Strategi pembelian semula yang dinamik ini mengintegrasikan beberapa penunjuk teknikal untuk menentukan masa kemasukan dan menggunakan reka bentuk kemasukan semula yang dinamik untuk mengesan trend dalam masa nyata.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Buy Only Strategy with Dynamic Re-Entry and Exit", overlay=true)

// Input Parameters
fast_length = input(20, title="Fast Moving Average Length")
slow_length = input(30, title="Slow Moving Average Length")
third_ma_length = input(100, title="Third Moving Average Length")
cci_period = input(14, title="CCI Period for Weekly CCI")
use_cci = input(true, title="Use CCI for Entry")
use_adx = input(true, title="Use ADX for Entry")
adx_length = input(14, title="ADX Length")
adx_threshold = input(25, title="ADX Threshold")

// Calculate Moving Averages
fast_ma = ta.sma(close, fast_length)
slow_ma = ta.sma(close, slow_length)
third_ma = ta.sma(close, third_ma_length)

// Weekly Commodity Channel Index (CCI) with user-defined period
weekly_cci = request.security(syminfo.tickerid, "W", ta.cci(close,  cci_period))

// Weekly Average Directional Index (ADX)
dirmov = hlc3
plus = ta.change(dirmov) > 0 ? ta.change(dirmov) : 0
minus = ta.change(dirmov) < 0 ? -ta.change(dirmov) : 0
trur = ta.rma(ta.tr, adx_length)
plusDI = ta.rma(plus, adx_length) / trur * 100
minusDI = ta.rma(minus, adx_length) / trur * 100
sum = plusDI + minusDI
DX = sum == 0 ? 0 : math.abs(plusDI - minusDI) / sum * 100
ADX = ta.rma(DX, adx_length)

// Entry Conditions (Buy Only and Weekly CCI > 100 and/or Weekly ADX > 25)
cci_condition = use_cci ? (weekly_cci > 100) : false
adx_condition = use_adx ? (ADX > adx_threshold) : false
long_condition = ta.crossover(fast_ma, slow_ma) and (cci_condition or adx_condition)

// Exit Condition and Dynamic Re-Entry
exit_condition = close < third_ma
re_entry_condition = close > fast_ma and close > slow_ma and close > third_ma and weekly_cci > 100

// Entry and Exit Signals
strategy.entry("Long", strategy.long, when=long_condition)
strategy.close("Long", when=exit_condition)

// Dynamic Re-Entry and Exit
if strategy.position_size == 0 and re_entry_condition
    strategy.entry("Long", strategy.long)

if strategy.position_size > 0 and close < third_ma
    strategy.close("Long")

// Plot Weekly CCI and ADX for reference
plot(weekly_cci, title="Weekly CCI", color=color.orange)
plot(ADX, title="Weekly ADX", color=color.blue)


Lebih lanjut