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.
Skrip menentukan syarat untuk menjana isyarat beli. Ia memeriksa dua syarat untuk isyarat beli yang sah:
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.
Kelebihan strategi ini termasuk:
Risiko strategi ini termasuk:
Penyelesaian:
Strategi ini boleh dioptimumkan dengan:
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)