Strategi ini memanfaatkan sepenuhnya rata-rata bergerak dan indeks kekuatan relatif untuk mengidentifikasi dan mengikuti tren. Ini hanya membutuhkan dua indikator untuk menentukan tren dan menemukan waktu masuk / keluar yang tepat. Strategi ini bertujuan untuk menangkap tren harga jangka menengah hingga panjang sambil menghindari kebisingan pasar jangka pendek.
Strategi ini menggunakan tiga EMA dengan periode yang berbeda, dengan EMA-A memiliki periode terpendek, EMA-B medium, dan EMA-C terpanjang. Ketika EMA-A yang lebih pendek melintasi di atas EMA-B yang lebih panjang, itu menandakan tren naik, sehingga akan panjang. Sebaliknya, ketika EMA-A melintasi di bawah EMA-B, itu menandakan tren turun, sehingga akan pendek. Untuk menyaring sinyal palsu, itu juga menggunakan EMA-C terpanjang - hanya mempertimbangkan masuk setelah harga melanggar EMA-C.
Strategi ini juga menggunakan RSI untuk menemukan titik keluar. Ketika panjang, ia menutup posisi jika RSI melintasi di atas 70. Ketika pendek, ia keluar jika RSI turun di bawah 30. Ini mengunci keuntungan tren dan mencegah kerugian dari perluasan lebih lanjut.
Risiko ini dapat dikurangi dengan mengoptimalkan parameter RSI, menambahkan filter, dan menggabungkan dengan analisis tren.
Strategi ini menggabungkan indikator trend following dan oscillator untuk identifikasi dan penangkapan trend. Dengan parameter sederhana dan optimasi logika, dapat sangat ditingkatkan sambil menjaga kesederhanaan.
/*backtest start: 2023-08-26 00:00:00 end: 2023-09-25 00:00:00 period: 2h basePeriod: 15m 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/ //@author Alorse //@version=5 // strategy(title='Tendency EMA + RSI [Alorse]', shorttitle='Tendece EMA + RSI [Alorse]', overlay=true, pyramiding=0, currency=currency.USD, default_qty_type=strategy.percent_of_equity, initial_capital=1000, default_qty_value=20, commission_type=strategy.commission.percent, commission_value=0.01) // Bollinger Bands len = input.int(14, minval=1, title='Length', group='RSI') src = input.source(close, 'Source', group='RSI') rsi = ta.rsi(src, len) // Moving Averages len_a = input.int(10, minval=1, title='EMA A Length', group='Moving Averages') out_a = ta.ema(close, len_a) plot(out_a, title='EMA A', color=color.purple) len_b = input.int(20, minval=1, title='EMA B Length', group='Moving Averages') out_b = ta.ema(close, len_b) plot(out_b, title='EMA B', color=color.orange) len_c = input.int(100, minval=1, title='EMA C Length', group='Moving Averages') out_c = ta.ema(close, len_c) plot(out_c, title='EMA B', color=color.green) // Strategy Conditions stratGroup = 'Strategy' showLong = input.bool(true, title='Long entries', group=stratGroup) showShort = input.bool(false, title='Short entries', group=stratGroup) closeAfterXBars = input.bool(true, title='Close after X # bars', tooltip='If trade is in profit', group=stratGroup) xBars = input.int(24, title='# bars') entryLong = ta.crossover(out_a, out_b) and out_a > out_c and close > open exitLong = rsi > 70 entryShort = ta.crossunder(out_a, out_b) and out_a < out_c and close < open exitShort = rsi < 30 bought = strategy.opentrades[0] == 1 and strategy.position_size[0] > strategy.position_size[1] entry_price = ta.valuewhen(bought, open, 0) var int nPastBars = 0 if strategy.position_size > 0 nPastBars := nPastBars + 1 nPastBars if strategy.position_size == 0 nPastBars := 0 nPastBars if closeAfterXBars exitLong := nPastBars >= xBars and close > entry_price ? true : exitLong exitLong exitShort := nPastBars >= xBars and close < entry_price ? true : exitShort exitShort // Long Entry strategy.entry('Long', strategy.long, when=entryLong and showLong) strategy.close('Long', when=exitLong) // Short Entry strategy.entry('Short', strategy.short, when=entryShort and showShort) strategy.close('Short', when=exitShort)