이 전략의 주요 아이디어는 시장의 후퇴 후 리바운드 기회를 포착하기 위해 서로 다른 기간을 가진 두 개의 이동 평균을 사용하는 것입니다. 가격이 장기 이동 평균보다 높고 단기 이동 평균으로 되돌아 갈 때, 전략은 긴 포지션을 열고 가격이 단기 이동 평균보다 다시 상승하거나 스톱 로스 가격을 달성 할 때 포지션을 닫습니다. 트렌드에서 후퇴하는 동안 구매 기회를 추구함으로써 전략은 트렌딩 시장에서 이익을 얻는 것을 목표로합니다.
이동 평균 풀백 추적 전략은 다른 기간을 가진 두 이동 평균의 상대적 위치를 사용하여 상승 추세의 가격 인하 동안 긴 거래 기회를 포착합니다. 이 전략은 트렌딩 시장에 적합하며 적절한 매개 변수 설정과 스톱 손실로 트렌딩 조건에서 안정적인 수익을 창출 할 수 있습니다. 그러나 전략은 불안정한 시장과 트렌드 반전 중에 특정 위험에 직면합니다. 더 많은 지표를 도입하고 위치 크기를 최적화하고 동적 스톱 손실을 구현하여 이 전략의 성능과 안정성을 더욱 향상시킬 수 있습니다.
/*backtest start: 2023-03-22 00:00:00 end: 2024-03-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © contapessoal_ivan // @version=5 strategy("Pullback Strategy", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, // 100% of balance invested on each trade commission_type=strategy.commission.cash_per_contract, commission_value=0.005) // Interactive Brokers rate // Get user input i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA") i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA") i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline") i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2") i_startTime = input(title="Start Filter", defval=timestamp("26 Jan 2023 00:00 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("26 Mar 2024 23:59 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Get indicator values ma1 = ta.sma(close, i_ma1) ma2 = ta.sma(close, i_ma2) // Check filter(s) f_dateFilter = true // Check buy/sell conditions var float buyPrice = 0 buyCondition = close > ma1 and close < ma2 and strategy.position_size == 0 and f_dateFilter sellCondition = close > ma2 and strategy.position_size > 0 and (not i_lowerClose or close < low[1]) stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent // Enter positions if buyCondition strategy.entry(id="Long", direction=strategy.long) if buyCondition[1] buyPrice := open // Exit positions if sellCondition or stopCondition strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : "")) buyPrice := na // Draw pretty colors plot(buyPrice, color=color.lime, style=plot.style_linebr) plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1) plot(ma1, color=color.blue) plot(ma2, color=color.orange)