
Strategi ini adalah sistem perdagangan beli-hanya, yang menghasilkan isyarat beli berdasarkan crossover rata-rata bergerak dan indeks saluran komoditi kitaran ((CCI) atau indeks arah rata-rata kitaran ((ADX)). Isyarat beli dihasilkan apabila rata-rata bergerak bergerak perlahan melintasi rata-rata bergerak cepat dan CCI kitaran dan / atau ADX kitaran memenuhi syarat tertentu.
Strategi ini juga membenarkan kemasukan semula dinamik, yang bermaksud bahawa kedudukan bermulut baru boleh dibuka jika harga melewati tiga purata bergerak sekali lagi. Walau bagaimanapun, strategi ini akan meratakan kedudukan bermulut jika harga menutup harga di bawah purata bergerak ketiga.
Skrip mentakrifkan syarat untuk menghasilkan isyarat beli. Ia memeriksa dua syarat untuk menentukan isyarat beli yang sah:
“Saya tidak tahu apa yang berlaku.Jika tiada kedudukan berganda yang belum dihapuskan dan harganya lebih tinggi daripada tiga purata bergerak, buka kedudukan berganda baru.
Syarat untuk keluar:Jika harga penutupan jatuh di bawah purata bergerak ketiga, strategi ini akan melonggarkan kedudukan berlebih.
Strategi ini mempunyai kelebihan berikut:
Strategi ini juga mempunyai risiko:
Penyelesaian:
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Strategi pembelian masuk semula dinamik ini mengintegrasikan pelbagai petunjuk teknikal untuk menentukan masa pembelian dan menggunakan reka bentuk masuk semula dinamik, yang dapat mengesan trend dalam masa nyata; dan hanya melakukan lebih banyak untuk mengelakkan risiko tambahan yang dibawa oleh shorting. Dengan pengoptimuman parameter, tetapan berhenti dan pengurusan kedudukan, strategi ini dapat digunakan dalam perdagangan saham, mendapatkan keuntungan tambahan sambil mengawal risiko.
/*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)