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

EMA와 SMA를 기반으로 하는 전략에 따른 다중 지표 동적 경향

저자:차오장, 날짜: 2024-12-27 14:12:50
태그:EMASMAATRPP슈퍼트렌드

img

전략 개요

이 전략은 여러 가지 기술적 지표를 결합한 동적 추세 추후 시스템이다. 시장 추세와 거래 기회를 식별하기 위해 피보트 포인트, 슈퍼 트렌드 지표 및 이동 평균 크로스오버 신호를 통합합니다. 전략의 주요 특징은 고정 시간 프레임 분석 접근 방식이며, 피보트 포인트를 통해 신호를 검증하는 동안 신호 일관성을 보장합니다.

전략 원칙

이 전략은 다음과 같은 핵심 메커니즘에 기반합니다.

  1. 분석을 위해 고정된 시간 프레임 가격 데이터를 사용하여 다른 시간 프레임의 간섭을 피합니다.
  2. 8주기 및 21주기 EMA를 기반으로 기초를 따라 트렌드를 형성하는 SMA를 계산합니다.
  3. 트렌드 방향 확인을 위한 슈퍼트렌드 지표를 계산하기 위해 ATR와 피보트 포인트를 결합합니다.
  4. SMA 크로스오버 신호는 중추점의 3개의 기간 내에 발생하면 유효하다고 간주됩니다.
  5. 거래 기준에 대한 지원/저항 수준을 동적으로 계산하고 추적합니다.

전략적 장점

  1. 다중 표시자 교차 검증은 신호 신뢰성을 향상시킵니다.
  2. 고정 시간 프레임 분석은 거짓 신호 간섭을 줄입니다.
  3. 피브 포인트 검증은 거래가 주요 가격 수준에서 이루어지는 것을 보장합니다.
  4. 지지/저항의 동적 추적은 스톱 로스 및 영업률을 결정하는데 도움이 됩니다.
  5. 슈퍼트렌드 지표는 트렌드 방향을 추가로 확인합니다.
  6. 유연한 매개 변수 설정은 다른 시장 조건에 조정 할 수 있습니다.

전략 위험

  1. 여러 가지 지표가 신호 지연으로 이어질 수 있습니다.
  2. 다양한 시장에서 과도한 잘못된 신호를 생성 할 수 있습니다.
  3. 고정 시간 프레임 분석은 다른 시간 프레임에서 중요한 신호를 놓칠 수 있습니다.
  4. 피보트 포인트 검증은 중요한 거래 기회를 놓칠 수 있습니다.
  5. 매개 변수 최적화는 과도한 부착으로 이어질 수 있습니다.

전략 최적화 방향

  1. 변동성이 낮은 기간 동안 거래 빈도를 줄이기 위해 변동성 필터링 메커니즘을 도입
  2. ADX 또는 MACD와 같은 트렌드 강도 확인 지표를 추가합니다.
  3. 시장 조건에 따라 동적으로 조정되는 적응 가능한 매개 변수 시스템을 개발
  4. 신호 신뢰성을 향상시키기 위해 볼륨 분석을 통합하십시오.
  5. 시장 변동성에 따라 조정되는 동적 스톱 로스 메커니즘을 구현합니다.

요약

이 전략은 여러 기술적 지표의 조합을 통해 거래 시스템을 따르는 비교적 완전한 추세를 설정합니다. 그것의 핵심 장점은 고정 시간 프레임 분석 및 피보트 포인트 검증을 통해 신호 신뢰성을 향상시키는 데 있습니다. 특정 지연 위험이 있지만 매개 변수 최적화 및 위험 관리 조치를 통해 효과적으로 제어 할 수 있습니다. 거래자는 라이브 구현 전에 철저한 백테스팅을 수행하고 특정 시장 특성에 따라 매개 변수를 조정하는 것이 좋습니다.


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

//@version=6
strategy("Buy Sell Pivot Point", overlay=true)

// Input Parameters
prd = input.int(defval=2, title="Periodo Pivot Point", minval=1, maxval=50)
Factor = input.float(defval=3, title="Fator ATR", minval=1, step=0.1)
Pd = input.int(defval=10, title="Periodo ATR", minval=1)
showpivot = input.bool(defval=false, title="Mostrar Pivot Points")
showlabel = input.bool(defval=true, title="Mostrar Buy/Sell Labels")
showcl = input.bool(defval=false, title="Mostrar PP Center Line")
showsr = input.bool(defval=false, title="Mostrar Support/Resistance")
sma1_length = input.int(defval=8, title="SMA 1")
sma2_length = input.int(defval=21, title="SMA 2")
timeframe_fix = input.timeframe("D", title="Timeframe Fixo")

// Request data from the fixed timeframe
fix_close = request.security(syminfo.tickerid, timeframe_fix, close)
fix_high = request.security(syminfo.tickerid, timeframe_fix, high)
fix_low = request.security(syminfo.tickerid, timeframe_fix, low)
fix_ph = request.security(syminfo.tickerid, timeframe_fix, ta.pivothigh(prd, prd))
fix_pl = request.security(syminfo.tickerid, timeframe_fix, ta.pivotlow(prd, prd))
fix_atr = request.security(syminfo.tickerid, timeframe_fix, ta.atr(Pd))

// Convert Pivot High/Low to valid boolean for conditions
ph_cond = not na(fix_ph)
pl_cond = not na(fix_pl)

// Draw Pivot Points
plotshape(ph_cond and showpivot, title="Pivot High", text="H", style=shape.labeldown, color=color.red, textcolor=color.red, location=location.abovebar, offset=-prd)
plotshape(pl_cond and showpivot, title="Pivot Low", text="L", style=shape.labelup, color=color.lime, textcolor=color.lime, location=location.belowbar, offset=-prd)

// Calculate the Center line using pivot points
var float center = na
lastpp = ph_cond ? fix_ph : pl_cond ? fix_pl : na
if not na(lastpp)
    center := na(center) ? lastpp : (center * 2 + lastpp) / 3

// Upper/Lower bands calculation
Up = center - (Factor * fix_atr)
Dn = center + (Factor * fix_atr)

// Get the trend
var float TUp = na
var float TDown = na
var int Trend = 0
TUp := na(TUp[1]) ? Up : fix_close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := na(TDown[1]) ? Dn : fix_close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn
Trend := fix_close > TDown[1] ? 1 : fix_close < TUp[1] ? -1 : nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// Plot the trend
linecolor = Trend == 1 ? color.lime : Trend == -1 ? color.red : na
plot(Trailingsl, color=linecolor, linewidth=2, title="PP SuperTrend")

// Plot Center Line
plot(showcl ? center : na, color=showcl ? (center < fix_close ? color.blue : color.red) : na, title="Center Line")

// Calculate Base EMAs
ema_8 = ta.ema(fix_close, 8)
ema_21 = ta.ema(fix_close, 21)

// Calculate SMAs based on EMAs
sma1 = ta.sma(ema_8, sma1_length)
sma2 = ta.sma(ema_21, sma2_length)

// Plot SMAs
plot(sma1, color=#ffff00, linewidth=2, title="SMA 1 (based on EMA 8)")
plot(sma2, color=#aa00ff, linewidth=2, title="SMA 2 (based on EMA 21)")

// Initialize variables to track pivot points
var float last_pivot_time = na

// Update the pivot time when a new pivot is detected
if (ph_cond)
    last_pivot_time := bar_index
if (pl_cond)
    last_pivot_time := bar_index

// Calculate the crossover/crossunder signals
buy_signal = ta.crossover(sma1, sma2)  // SMA 8 crossing SMA 21 upwards
sell_signal = ta.crossunder(sma1, sma2)  // SMA 8 crossing SMA 21 downwards

// Ensure signal is only valid if it happens within 3 candles of a pivot point
valid_buy_signal = buy_signal and (bar_index - last_pivot_time <= 3)
valid_sell_signal = sell_signal and (bar_index - last_pivot_time <= 3)

// Plot Buy/Sell Signals
plotshape(valid_buy_signal and showlabel, title="Buy Signal", text="BUY", style=shape.labelup, color=color.lime, textcolor=color.black, location=location.belowbar)
plotshape(valid_sell_signal and showlabel, title="Sell Signal", text="SELL", style=shape.labeldown, color=color.red, textcolor=color.white, location=location.abovebar)

// Get S/R levels using Pivot Points
var float resistance = na
var float support = na
support := pl_cond ? fix_pl : support[1]
resistance := ph_cond ? fix_ph : resistance[1]

// Plot S/R levels
plot(showsr and not na(support) ? support : na, color=showsr ? color.lime : na, style=plot.style_circles, offset=-prd)
plot(showsr and not na(resistance) ? resistance : na, color=showsr ? color.red : na, style=plot.style_circles, offset=-prd)

// Execute trades based on valid signals
if valid_buy_signal
    strategy.entry("Buy", strategy.long)
if valid_sell_signal
    strategy.entry("Sell", strategy.short)

// Alerts
alertcondition(valid_buy_signal, title="Buy Signal", message="Buy Signal Detected")
alertcondition(valid_sell_signal, title="Sell Signal", message="Sell Signal Detected")
alertcondition(Trend != Trend[1], title="Trend Changed", message="Trend Changed")


관련

더 많은