리소스 로딩... 로딩...

두 개의 MA와 볼륨 확인과 함께 RSI 트렌드 모멘텀 거래 전략

저자:차오장, 날짜: 2024-11-28 17:02:32
태그:RSISMA

img

전반적인 설명

이 전략은 RSI 과잉 판매 신호, 장기 이동 평균, 및 볼륨 확인을 결합하는 트렌드-추천 시스템이다. 이는 볼륨 확대로 검증된 기존 상승 추세 내에서 과잉 판매 조건에서 긴 포지션을 포착하는 것을 목표로 한다. 전략은 10 기간 RSI, 250 및 500 기간의 이중 SMA, 20 기간 볼륨 이동 평균을 핵심 지표로 사용합니다.

전략 원칙

핵심 논리는 세 가지 핵심 조건에 기반하고 있습니다.

  1. RSI 초판 신호 (RSI<=30): 시장 리바운드 기회를 포착합니다.
  2. 이중 MA 상승조직 (SMA250>SMA500): 장기 상승 추세를 확인합니다.
  3. 부피 확인 (현행 부피>20주기 부피 MA*2.5): 가격 움직임을 확인합니다

롱 포지션은 세 가지 조건이 동시에 충족될 때 시작됩니다. 출구 신호는 죽음의 십자가 (더 긴 MA 아래로 짧은 MA가 넘는다) 로 시작됩니다. 또한 위험 관리에 5%의 스톱 로스를 구현합니다.

전략적 장점

  1. 다중 확인은 잘못된 신호를 줄입니다: RSI, MAs 및 볼륨의 통합은 강력한 신호 필터링을 제공합니다.
  2. 트렌드를 따르는 특징: 장기 MAs는 트렌드 반대 거래를 방지합니다.
  3. 종합적인 리스크 관리: 고정 스톱 로스는 거래별 리스크를 효과적으로 관리합니다.
  4. 높은 적응력: 다른 시장 조건에 따라 매개 변수를 조정할 수 있습니다.
  5. 엄격한 무역 선택: 여러 조건이 최적의 출입 시기를 보장합니다.

전략 위험

  1. 지연 위험: 장기 MA는 트렌드 식별에 상당한 지연을 초래합니다.
  2. 과도한 필터링 위험: 엄격한 여러 조건으로 유효한 거래 기회를 놓칠 수 있습니다.
  3. 다양한 시장 위험: 옆 시장에서 잘못된 신호가 자주 발생할 수 있습니다.
  4. 스톱 로스 구성 위험: 고정 비율의 스톱은 모든 시장 조건에 적합하지 않을 수 있습니다.
  5. 매개 변수 최적화 위험: 과도한 최적화가 실전 거래 성과를 저하시킬 수 있습니다.

최적화 방향

  1. 동적 스톱 로스: ATR 또는 변동성 기반 동적 스톱을 적용하는 것을 고려하십시오.
  2. 트렌드 강도 정량화: 더 나은 트렌드 평가를 위해 ADX 또는 유사한 지표를 포함
  3. 포지션 사이즈 최적화: 신호 강도와 시장 변동성에 따라 포지션 크기를 조정합니다.
  4. 출구 메커니즘 강화: 유연한 출구에 대한 수익 목표 및 후속 중지
  5. 시간 필터링: 비효율적인 기간을 피하기 위해 거래 시간 필터를 구현하십시오.

요약

이 전략은 엄격한 논리로 잘 설계된 트렌드를 따르는 전략이며, 여러 기술적 지표를 통해 수익과 위험을 효과적으로 균형 잡는다. 이 전략의 핵심 강점은 포괄적인 신호 확인 및 위험 관리 시스템이지만 과잉 필터링 및 지연에 대한 과제와 직면하고 있다. 제안된 최적화 방향을 통해 이 전략은 실제 응용 분야에서 성능을 향상시킬 수 있는 잠재력을 보여준다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © wielkieef

//@version=5
strategy(title=' Rsi Long-Term Strategy [15min]', overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.03)

// Rsi
rsi_lenght = input.int(10, title='RSI lenght', minval=0)
rsi_up = ta.rma(math.max(ta.change(close), 0), rsi_lenght)
rsi_down = ta.rma(-math.min(ta.change(close), 0), rsi_lenght)
rsi_value = rsi_down == 0 ? 100 : rsi_up == 0 ? 0 : 100 - 100 / (1 + rsi_up / rsi_down)
rsi_overs = rsi_value <= 30
rsi_overb = rsi_value >= 70

// Volume
vol_sma_length = input.int(20, title='Volume lenght  ', minval=1)
Volume_condt = volume > ta.sma(volume, vol_sma_length) * 2.5

//SMA1
lengthSMA1 = input(250, title="Lenght SMA 1")
SMA1 = ta.sma(close, lengthSMA1)
//plot(SMA1, color=color.rgb(245, 108, 3), linewidth=1, title="SMA250")

//SMA2
lengthSMA2 = input(500, title="Lenght SMA 2")
SMA2 = ta.sma(close, lengthSMA2)
//plot(SMA2, color=#9803f5, linewidth=1, title="SMA500")


//Entry Logic
Long_cond = (rsi_overs and SMA1 > SMA2 and Volume_condt )  

if Long_cond
    strategy.entry('Long', strategy.long)

//Close Logic
Long_close = ta.crossunder(SMA1,SMA2)

if Long_close
    strategy.close("Long")

//Bar colors
Bar_color = Volume_condt ? #fc9802 : SMA1 > SMA2 ? color.rgb(84, 252, 0) : SMA1 < SMA2 ? color.maroon : color.gray
barcolor(color=Bar_color)

// Rsi value Plotshapes
plotshape(rsi_value < 30 and SMA1 > SMA2 and Volume_condt, title='Buy', color=color.new(color.green, 0), style=shape.circle, location=location.belowbar, size=size.tiny, textcolor=color.new(color.black, 0))
plotshape(rsi_value > 70 and SMA1 < SMA2 and Volume_condt, title='Sell', color=color.new(color.red, 0), style=shape.circle, location=location.abovebar, size=size.tiny, textcolor=color.new(color.black, 0))
plotshape(ta.crossunder(SMA1,SMA2) , title='DEATH CROSS', color=#000000, style=shape.xcross, location=location.abovebar, size=size.small, textcolor=color.new(color.black, 0))

//Stop-Loss// this code is from author RafaelZioni, modified by wielkieef
pera(pcnt) =>
    strategy.position_size != 0 ? math.round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
stoploss = input.float(title=' stop loss', defval=5.0, minval=0.5)
los = pera(stoploss)
strategy.exit('SL', loss=los)




// by wielkieef

관련

더 많은