이 전략은 유동 평균과 상대 강도 지수를 최대한 활용하여 추세를 파악하고 추적합니다. 추세를 결정하고 적절한 입출시기를 찾기 위해 두 개의 지표 만 필요합니다. 전략은 단기 시장 소음을 피하면서 중장기 가격 추세를 파악하는 것을 목표로합니다.
이 전략은 서로 다른 기간을 가진 세 개의 EMA를 사용하며, EMA-A는 가장 짧은 기간, EMA-B는 중간, EMA-C는 가장 긴 기간을 가지고 있습니다. 짧은 EMA-A가 긴 EMA-B 위에 넘어가면 상승 추세를 신호하며, 따라서 길게 이동합니다. 반대로, EMA-A가 EMA-B 아래에 넘어가면 하락 추세를 신호하여, 따라서 짧게 이동합니다. 잘못된 신호를 필터링하기 위해 가장 긴 EMA-C를 사용합니다. 가격이 EMA-C를 넘은 후에 입시를 고려합니다.
이 전략은 또한 RSI를 사용하여 출구 지점을 찾습니다. 긴 경우, RSI가 70을 넘으면 포지션을 닫습니다. 짧은 경우, RSI가 30 이하로 떨어지면 포지션을 종료합니다. 이는 트렌드 수익을 잠금하고 손실이 더 확장되는 것을 방지합니다.
이러한 위험은 RSI 매개 변수를 최적화하고 필터를 추가하고 트렌드 분석과 결합하여 줄일 수 있습니다.
이 전략은 트렌드 추적 및 오시레이터 지표를 결합하여 트렌드 식별 및 포착을 수행합니다. 간단한 매개 변수 및 논리 최적화로 단순성을 유지하면서 크게 향상 될 수 있습니다. 중장기 투자자에게 적합한 매우 실용적인 트렌드 추적 템플릿입니다.
/*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)