트렌드 라이딩 RSI 스윙 캡처 전략

저자:차오장, 날짜: 2024-02-04 10:48:38
태그:

img

전반적인 설명

트렌드 라이딩 RSI 스윙 캡처 전략 (Trend Riding RSI Swing Capture Strategy) 은 RSI, MACD 및 볼륨 분석을 결합하여 시장 변동을 포착하는 스윙 거래 전략이다. 이는 시장 트렌드에 대한 지원 수준을 식별하고 과소매 또는 과소매 시나리오가 나타날 때 역 트렌드 포지션을 취하여 낮게 구매하고 높게 판매합니다.

원칙

이 전략의 핵심 지표는 RSI, MACD 및 부피입니다. 논리는 다음과 같습니다.

  1. RSI가 과반 구매 또는 과반 판매 구역으로 들어갔는지 판단하여 임박한 반전을 확인합니다.

  2. MACD 황금 십자와 죽음의 십자 등을 추가 입시 조건으로 가격 추세와 동력 변화를 결정하기 위해 사용한다.

  3. 부피의 파장을 활용하여 진정한 파장을 확인하고 잘못된 신호를 피합니다.

거래 신호는 세 가지 조건이 동시에 충족 될 때만 생성됩니다. 긴 또는 짧은 방향은 가격 브레이크의 방향에 달려 있습니다. 이것은 잘못된 브레이크를 효과적으로 필터링하고 신호 신뢰성을 향상시킵니다.

장점

이 전략의 가장 큰 장점은 뛰어난 리스크 관리에 있다. 이동 스톱 로스, 고정 스톱 로스, 고정 트레이드 크기와 같은 엄격한 자본 관리 규칙은 개별 트레이드의 위험을 효과적으로 제어하고 자본 안전을 보장하기 위해 설정되어 있다. 또한, 이 전략은 가짜 브레이크아웃을 필터링하고 불필요한 리버스 트레이드를 피하기 위해 볼륨을 포함하기도 한다. 따라서 이 전략은 시장 조건에 관계없이 안정적인 수익을 얻을 수 있다.

위험성

어떤 거래 전략도 시장 위험을 완전히 피할 수 없으며 이 전략도 예외가 아닙니다. 주요 위험은 다음과 같습니다.

  1. 스톱 로스 인출. 극단적 인 시장 조건 하에서 가격은 순간 급격하게 변동 할 수 있습니다. 스톱 로스 수준이 직접 침투하면 엄청난 손실이 발생할 수 있습니다.

  2. 부적절한 매개 변수 설정. 부적절한 RSI, MACD 매개 변수 설정은 신호 품질 저하 및 과도한 오류 신호로 이어질 수 있습니다.

위의 위험에 대응하기 위해, 줄이는 것은 추적 중지 손실 등을 도입함으로써 중지 손실 알고리즘을 최적화하는 것을 포함합니다. 한편, 안정성과 신뢰성을 보장하기 위해 주요 매개 변수에 대한 반복적인 역 테스트 및 최적화가 수행되어야합니다.

최적화 방향

현재 전략 틀에 근거한 주요 최적화 방향:

  1. 기계 학습 알고리즘을 도입하여 스톱 로스 레벨의 동적 추적을 달성하고, 스톱 로스와 관련된 리스크를 방지합니다.

  2. 신호 품질을 향상시키고 불필요한 리버스 트레이드를 줄이기 위해 볼링거 밴드, KD와 같은 더 많은 필터 지표를 포함합니다.

  3. 급격한 사건의 영향에 대한 더 나은 통제를 가능하게 하는 역동적으로 지점 크기를 조정함으로써 자본 관리 전략을 최적화합니다.

  4. 고급 데이터 분석을 활용하여 최적의 매개 변수를 자동으로 찾아서 수동 테스트 작업 부하를 줄이십시오.

  5. 주문 흐름에 기반한 거래 신호를 통합하여 전략 효율성을 높이기 위해 더 깊은 수준의 시장 데이터를 활용합니다.

결론

요약하자면, 트렌드 라이딩 RSI 스윙 캡처 전략은 매우 실용적인 단기 거래 전략이다. 가격 추세와 과잉 구매/ 과잉 판매 시나리오를 모두 고려하고 볼륨 필터링으로 비교적 안정적인 거래 시스템을 형성합니다. 엄격한 위험 통제 하에서이 전략은 다양한 시장 조건에서 안정적인 이익을 얻을 수 있으며 투자자들에게 심도 있는 연구와 연습을 할 가치가 있습니다.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// SwingSync RSI Strategy
// This strategy combines RSI, MACD, and volume analysis to capture swing trading opportunities.
// It includes risk management features to protect your capital.
// Adjust the input parameters and backtest to optimize performance.// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © str0zzapreti

//@version=5
strategy('SwingSync RSI', overlay=true)
// Adjustable Parameters
// var custom_message = input.string('', title='Symbol')
ma_period = input.int(20, title='Moving Average Period')
stop_loss_percent = input.float(1, title='STOP LOSS (%)',step=0.1)
macd_fast_length = input(12, title='MACD Fast Length')
macd_slow_length = input(26, title='MACD Slow Length')
macd_signal_smoothing = input(9, title='MACD Signal Smoothing')
rsi_period = input(14, title='RSI Period')
rsi_overbought = input(70, title='RSI OVERBOUGHT LEVEL')
rsi_oversold = input(30, title='RSI OVERSOLD LEVEL')
volume_ma_period = input(20, title="Volume MA Period")
volume_threshold_percent = input(50, title="Volume Threshold (%)")
slippage = 0.5
risk_per_trade = input(1, title='Risk per Trade (%)')

// Calculating Indicators *
price = close
ma = ta.sma(price, ma_period)
rsi = ta.rsi(price, rsi_period)
vol_ma = ta.sma(volume, volume_ma_period)
[macdLine, signalLine, _] = ta.macd(price, macd_fast_length, macd_slow_length, macd_signal_smoothing)
volume_threshold = vol_ma * (1 + volume_threshold_percent / 100)

// Definitions
volumeCheck = volume > volume_threshold
longRsiCheck = rsi < rsi_overbought
longMovAvgCross = ta.crossover(price, ma)
longMovAvgCheck = price > ma
longMacdCross = ta.crossover(macdLine, signalLine)
longMacdCheck = macdLine > signalLine
shortRsiCheck = rsi > rsi_oversold
shortMovAvgCross = ta.crossunder(price, ma)
shortMovAvgCheck = price < ma
shortMacdCross = ta.crossunder(macdLine, signalLine)
shortMacdCheck = macdLine < signalLine

// Entry Conditions for Long and Short Trades
longCondition = volumeCheck and longRsiCheck and ((longMovAvgCross and longMacdCheck) or (longMacdCross and longMovAvgCheck)) 
shortCondition = volumeCheck and shortRsiCheck and  ((shortMovAvgCross and shortMacdCheck) or (shortMacdCross and shortMovAvgCheck)) 

// Tracking Last Trade Day
var int last_trade_day = na

if longCondition or shortCondition
    last_trade_day := dayofweek

// Calculate can_exit_trade based on day difference
can_exit_trade = dayofweek != last_trade_day

// Entry Orders
var float max_qty_based_on_equity = na
var float qty = na

if longCondition
    max_qty_based_on_equity := strategy.equity / price
    qty := (strategy.equity * risk_per_trade / 100) / price
    if qty > max_qty_based_on_equity
        qty := max_qty_based_on_equity
    strategy.entry('Long', strategy.long, 1)

if shortCondition
    max_qty_based_on_equity := strategy.equity / price
    qty := (strategy.equity * risk_per_trade / 100) / price
    if qty > max_qty_based_on_equity
        qty := max_qty_based_on_equity
    strategy.entry('Short', strategy.short, 1)

// Exit Conditions
exitLongCondition = ta.crossunder(price, ma) or rsi > rsi_overbought
exitShortCondition = ta.crossover(price, ma) or rsi < rsi_oversold

// Calculate take profit and stop loss levels
stopLossLevelLong = strategy.position_avg_price * (1 - stop_loss_percent / 100)
stopLossLevelShort = strategy.position_avg_price * (1 + stop_loss_percent / 100)

// Adjust for slippage
adjusted_stop_loss_long = stopLossLevelLong * (1 + slippage / 100)
adjusted_stop_loss_short = stopLossLevelShort * (1 - slippage / 100)

// Strategy Exit Orders for Long Positions
if strategy.position_size > 0 and can_exit_trade
    if (close < adjusted_stop_loss_long)
        strategy.close('Long', comment='Stop Loss Long')
    if exitLongCondition
        strategy.close('Long', comment='Exit Long')

// Strategy Exit Orders for Short Positions
if strategy.position_size < 0 and can_exit_trade
    if (close > adjusted_stop_loss_short)
        strategy.close('Short', comment='Stop Loss Short')
    if exitShortCondition
        strategy.close('Short', comment='Exit Short')

plot(ma)


더 많은