Strategi ini memanfaatkan sepenuhnya purata bergerak dan indeks kekuatan relatif untuk mengenal pasti dan mengikuti trend. Ia hanya memerlukan dua penunjuk untuk menentukan trend dan mencari masa masuk / keluar yang betul. Strategi ini bertujuan untuk menangkap trend harga jangka menengah hingga panjang sambil mengelakkan bunyi pasaran jangka pendek.
Strategi ini menggunakan tiga EMA dengan tempoh yang berbeza, dengan EMA-A mempunyai tempoh yang paling pendek, EMA-B medium, dan EMA-C yang paling lama. Apabila EMA-A yang lebih pendek melintasi di atas EMA-B yang lebih panjang, ia menandakan trend menaik, sehingga panjang. Sebaliknya, apabila EMA-A melintasi di bawah EMA-B, ia menandakan trend menurun, sehingga pendek. Untuk menapis isyarat palsu, ia juga menggunakan EMA-C yang paling panjang - hanya mempertimbangkan kemasukan selepas harga memecahkan EMA-C.
Strategi ini juga menggunakan RSI untuk mencari titik keluar. Apabila panjang, ia menutup kedudukan jika RSI melintasi di atas 70. Apabila pendek, ia keluar jika RSI jatuh di bawah 30. Ini mengunci keuntungan trend dan menghalang kerugian daripada berkembang lebih lanjut.
Risiko ini boleh dikurangkan dengan mengoptimumkan parameter RSI, menambah penapis, dan menggabungkan dengan analisis trend.
Strategi ini menggabungkan trend berikut dan penunjuk pengayun untuk pengenalan trend dan menangkap. Dengan parameter mudah dan pengoptimuman logik, ia boleh dipertingkatkan dengan baik sambil mengekalkan 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)