추세 추종 RSI 변동성 포착 전략


생성 날짜: 2024-02-04 10:48:38 마지막으로 수정됨: 2024-02-04 10:48:38
복사: 0 클릭수: 595
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

추세 추종 RSI 변동성 포착 전략

개요

트렌드 라이딩 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)