트렌드 풀백은 위험 동적 진입 전략을 조정할 수 있습니다.

SMA EMA 移动平均线交叉 回调策略 风险管理 止损止盈 突破点保护 趋势确认
생성 날짜: 2025-03-26 13:29:16 마지막으로 수정됨: 2025-03-26 13:29:16
복사: 0 클릭수: 276
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

트렌드 풀백은 위험 동적 진입 전략을 조정할 수 있습니다. 트렌드 풀백은 위험 동적 진입 전략을 조정할 수 있습니다.

개요

트렌드 리커딩 조정 가능한 위험 동적 입점 전략은 단기 트렌드 전환 후의 리커딩에서 멀티 헤드 포지션을 구축하기를 희망하면서 시장 조건이 하향으로 유리한 경우 즉시 상공으로 진출하는 스윙 트레이더를 위해 설계되었습니다. 이 전략은 SMA 교차 확인 트렌드, 고정 백분율 리커딩 입점, 및 조정 가능한 위험 관리 매개 변수를 결합하여 최적의 거래 실행을 달성합니다.

전략의 핵심은 10주기 및 25주기 간단한 이동 평균 (SMA) 의 교차를 사용하여 트렌드 방향을 확인하고, 150주기 지수 이동 평균 (EMA) 과 결합하여 공허 거래의 추가 필터링 조건으로 둡니다. 멀티 헤드 거래는 SMA 교차 후 즉시 들어가지 않고, 가격이 지정된 퍼센트로 회귀한 후에 들어갑니다. 이러한 방법은 입문 가격을 최적화하고, 위험과 수익률을 높입니다.

전략 원칙

이 전략의 작동 원리는 다음과 같은 몇 가지 핵심 부분으로 나눌 수 있습니다.

  1. 트렌드 확인 메커니즘:

    • 10주기 SMA 위에 25주기 SMA를 뚫을 때, 시스템은 부진적인 트렌드 전환 신호로 인식합니다.
    • 10주기 SMA가 25주기 SMA를 넘어서면, 시스템은 하향 트렌드 전환 신호로 인식합니다.
    • 공백 거래는 150주기 EMA 이하의 가격에서만 실행되며, 이는 광범위한 추세와 일치하도록 보장합니다.
  2. 다중 리콜 메커니즘:

    • SMA 교차 신호가 발생했을 때 즉시 입문하는 것이 아니라, 가격 조정 후에 다시 다리 입문하는 것을 기다립니다.
    • 입구 지점은 최근 최고점으로부터 리콜 고정 비율 (기본 1%) 의 위치로 정의됩니다
    • 시스템 역동적으로 계산하고 지원 위치를 매핑하여 리콜 입구 지역을 시각화합니다.
    • 가격이 상향으로 회귀 지점을 돌파하면 다중 출입을 유발합니다
  3. 텅 빈 머리 입학 규칙:

    • 10주기 SMA 아래에서 25주기 SMA를 통과하고 150주기 EMA보다 낮은 가격으로 즉시 공백에 들어갑니다.
  4. 위험 관리 및 탈퇴 전략:

    • 정지 (TP) - 조정 가능한 점수 수익 목표 (예작: 1000 점)
    • 스톱 손실 (SL) - 조정 가능한 점수 스톱 손실 수준 (설정: 250 점)
    • 보전점 ((BE) - 가격이 유리 방향으로 움직일 때 설정 포인트를 설정하여 보전점으로 이동하는 스톱로스
    • 다수점 추가 탈퇴 조건: 다수점 포지션을 보유한 경우 10주기 SMA 아래 25주기 SMA를 통과하고 가격이 150주기 EMA보다 낮으면, 트렌드 반전의 손실을 피하기 위해 다수점 탈퇴를 강제합니다.

전략은 지속 가능한 변수를 사용하여 재개 신호를 추적하여 올바른 시간에 진입하도록합니다. 포지션이 없을 때 시스템은 다음 거래 신호를 준비하기 위해 모든 표시와 수준을 재설정합니다.

전략적 이점

코드의 심층적인 분석을 통해, 이 전략은 다음과 같은 중요한 장점을 보여준다:

  1. 최적화된 입학 시점:

    • 이 전략은 크로스 신호가 발생했을 때 즉시 출전하는 대신 다시 호출을 기다리는 것으로 더 나은 출전 가격을 얻습니다.
    • 이 방법은 초기 위험을 낮추고 잠재적인 위험-수익률을 높여줍니다.
    • 회귀 비율은 시장 환경과 거래자의 위험 취향에 따라 조정할 수 있습니다.
  2. 전체적인 위험 관리:

    • 정확한 스톱로스 및 스톱 스 매개 변수는 거래마다 명확한 위험 통제를 보장합니다.
    • 보금자리는 수익을 창출한 거래를 보호하고 전체적인 인출을 감소시킵니다.
    • 모든 리스크 매개 변수는 시장의 변동성에 따라 조정할 수 있습니다.
  3. 트렌드 조정 필터:

    • EMA150을 추가 필터링 조건으로 사용하여 단기 거래가 장기 추세와 일치하는지 확인합니다.
    • 트렌드가 바뀌면 추가적인 탈퇴 규칙이 큰 손실로부터 자금을 보호합니다.
  4. 시각적 피드백:

    • 시스템은 회귀 레벨과 신호를 도표에 그리며 명확한 시각적 지침을 제공합니다.
    • 거래 실행 지점과 탈퇴 지점은 명확하게 표시되어 있으며, 이를 통해 피드백과 전략 개선이 가능합니다.
  5. 매우 적응력이 좋다:

    • 전략은 주식, 외환, 지수 등 다양한 자산군에 적용됩니다.
    • 다양한 시장 환경과 거래 스타일에 적합한 변수 조정

전략적 위험

이 전략은 많은 장점들을 가지고 있지만, 다음과 같은 위험도 있습니다.

  1. 빠른 시장의 위험:

    • 높은 변동성 시장에서 가격이 계획된 입수점 또는 정지 수준을 뛰어넘을 수 있습니다.
    • 극한 시장 사건으로 인해 슬라이드 포인트가 증가하여 실제 실행 가격에 영향을 미칠 수 있습니다.
    • 해결 방법: 높은 변동성 기간 동안 회귀 비율과 위험 매개 변수를 조정하거나 일시적으로 거래를 중단하는 것을 고려하십시오.
  2. 시장의 흔들림:

    • 트렌드에 의존하는 전략 확인, 수평 변동 시장에서 잘못된 신호가 발생할 수 있습니다.
    • 자주 SMA 교차로 인해 연속적인 손실 거래가 발생할 수 있습니다.
    • 해결 방법: ADX 지표와 같은 트렌드 강도 필터를 추가하거나, 흔들리는 시장에서 거래를 중지합니다.
  3. 고정 점수 위험 관리의 한계:

    • 고정된 점수를 사용하는 중지 및 정지는 다른 시장의 변동성에 적합하지 않을 수 있습니다.
    • 변동성이 확대될 때, 조기 중단 또는 너무 멀리 멈추는 목표로 이어질 수 있습니다.
    • 해결 방법: ATR (진정한 변동 범위) 에 기반한 동적 중지 및 중지 수준을 고려합니다.
  4. 기술적인 지표에 지나치게 의존하는 것:

    • 전략은 기술적인 지표에 전적으로 의존하여 기본 요소와 시장의 감정을 무시합니다.
    • SMA와 EMA는 지연된 지표이며 시장의 전환점에 적절히 대응하지 못할 수 있습니다.
    • 해결 방법: RSI 또는 자본 흐름 지표와 같은 다른 선도적 지표 또는 시장 감정 지표와 결합
  5. 매개변수 최적화 위험:

    • 과잉 최적화 파라미터는 커브 적합성을 초래할 수 있으며, 미래 시장에서 좋지 않은 성과를 낼 수 있습니다.
    • 해결 방법: 충분히 긴 역사적 데이터를 사용하여 재검토하고 다양한 시장 조건에서 전략의 건전성을 검증하십시오.

전략 최적화 방향

코드 분석을 바탕으로 이 전략이 최적화될 수 있는 몇 가지 주요 방향은 다음과 같습니다.

  1. 동적 위험 관리:

    • ATR 기반의 동적 수준으로 고정 점수의 스톱 및 스톱을 변환
    • 이것은 현재의 시장의 변동성에 따라 위험을 관리하고 낮은 변동성 동안 더 작은 중지 손실을 설정하고 높은 변동성 동안 더 큰 중지 손실을 설정할 수 있습니다.
    • 구현 방법: 비슷한 것을 사용한다stopDistance = input.float(2.0) * ta.atr(14)계산 방법
  2. 트렌드 강도 필터링:

    • 추세 강도를 측정하기 위해 ADX (평균 방향 지수) 또는 비슷한 지표를 추가하십시오.
    • 트렌드가 충분히 강할 때만 거래하는 것 (예: ADX> 25), 흔들리는 시장에서 가짜 신호를 피하는 것
    • 이것은 잘못된 신호를 크게 줄이고 승률을 높일 것입니다.
  3. 다중 시간 프레임 분석:

    • 더 높은 시간 프레임의 트렌드 정보를 통합하여 거래가 더 큰 트렌드와 일치하도록합니다.
    • 예를 들어, 4시간 그래프와 일일표가 같은 트렌드 방향을 표시할 때만 거래합니다.
    • 이 방법은 거래 성공률을 높이고 역거래의 위험을 줄일 수 있습니다.
  4. 스마트 리모드 인식:

    • 간단한 고정된 비율을 보다 복잡한 리모델링 식별 방법으로 대체
    • 피보나치 리모델링 레벨 또는 핵심 지지 저항 지점을 고려하십시오.
    • 이것은 시장 구조와 더 잘 조화를 이루는 더 의미있는 입시 지점을 제공 할 것입니다.
  5. 거래량 확인:

    • 확인 신호의 일부로 거래량 분석을 추가
    • 낮은 거래량 회귀와 높은 거래량 돌파구에서 더 높은 품질의 입구 지점을 찾습니다
    • 거래량 확인은 신호 품질을 크게 향상시키고 거래 소음을 줄일 수 있습니다.
  6. 적응 변수:

    • 최근 시장의 변화에 따라 전략적 변수를 조정하는 메커니즘을 개발
    • 예를 들어, 변동성이 증가할 때 자동으로 회귀율을 증가시킵니다.
    • 이러한 적응력은 다양한 시장 환경에서 전략이 안정성을 유지할 수 있게 해줍니다.

요약하다

트렌드 회귀는 위험을 조정할 수 있습니다. 동적 입시 전략은 트렌드 식별, 입시 최적화 및 전체적인 위험 관리를 결합한 정교하게 설계된 거래 시스템입니다. 가격 회귀를 기다리며 다시 입시함으로써 전략은 간단한 SMA 교차 시스템보다 더 나은 입시 가격과 위험 수익률을 얻습니다.

이 전략의 핵심 장점은 개인 위험 선호와 시장 조건에 따라 변수를 조정할 수 있는 유연성과 조정성이라는 것입니다. 또한, 통합된 위험 관리 기능 (정지, 정지 및 경보점을 포함한) 은 전체적인 자금 보호를 제공합니다.

그러나, 이 전략은 또한 몇몇 제한이 있습니다. 격변 시장에서의 성과와 고정 점수 위험 관리의 제한을 포함합니다. 동적 위험 관리, 트렌드 강도 필터링 및 거래량 확인과 같은 권고의 최적화를 실행함으로써 전략의 안정성과 전반적인 성능을 크게 향상시킬 수 있습니다.

스윙 트레이더에게는 이상적인 기본 전략이며, 개인의 거래 스타일과 목표에 따라 추가적으로 조정할 수 있습니다. 합리적인 매개 변수 설정과 지속적인 모니터링 조정으로, 이 전략은 다양한 시장 환경에서 안정적인 거래 결과를 제공하는 잠재력을 가지고 있습니다.

전략 소스 코드
/*backtest
start: 2024-08-01 00:00:00
end: 2025-03-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("BTCUSD with adjustable sl,tp", 
     overlay=true, 
     initial_capital=10000, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=10, 
     calc_on_every_tick=true)

// ─────────────────────────────────────────────────────────────────────────────
//  ▌ USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────
longSignalStyle  = input.string("Label Up", title="Long Signal Style", options=["Label Up", "Arrow Up", "Cross"])
shortSignalStyle = input.string("Label Down", title="Short Signal Style", options=["Label Down", "Arrow Down", "Cross"])

// Adjustable exit parameters (in points)
tpDistance    = input.int(1000, "Take Profit Distance (points)", minval=1)
slDistance    = input.int(250, "Stop Loss Distance (points)",   minval=1)
beTrigger     = input.int(500, "Break-Even Trigger Distance (points)", minval=1)

// Adjustable retracement percentage for long pullback entry (e.g. 0.01 = 1%)
retracementPct = input.float(0.01, "Retracement Percentage (e.g. 0.01 for 1%)", step=0.001)

// ─────────────────────────────────────────────────────────────────────────────
//  ▌ INDICATORS: SMA & EMA
// ─────────────────────────────────────────────────────────────────────────────
sma10  = ta.sma(close, 10)
sma25  = ta.sma(close, 25)
ema150 = ta.ema(close, 150)

plot(sma10,  color=color.blue,   title="SMA 10")
plot(sma25,  color=color.red,    title="SMA 25")
plot(ema150, color=color.orange, title="EMA 150")

// ─────────────────────────────────────────────────────────────────────────────
//  ▌ ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────
longCondition  = ta.crossover(sma10, sma25)
shortCondition = ta.crossunder(sma10, sma25)
shortValid     = close < ema150  // Only take shorts if price is below EMA150

// Plot immediate entry signals (for visual reference)
plotshape(longCondition and (strategy.position_size == 0), title="Long Signal", 
     style=(longSignalStyle == "Label Up" ? shape.labelup : (longSignalStyle == "Arrow Up" ? shape.triangleup : shape.cross)), 
     location=location.belowbar, color=color.green, text="Long", size=size.small)
plotshape(shortCondition and shortValid and (strategy.position_size == 0), title="Short Signal", 
     style=(shortSignalStyle == "Label Down" ? shape.labeldown : (shortSignalStyle == "Arrow Down" ? shape.triangledown : shape.cross)), 
     location=location.abovebar, color=color.red, text="Short", size=size.small)

// ─────────────────────────────────────────────────────────────────────────────
//  ▌ LONG PULLBACK ENTRY USING FIXED PERCENTAGE RETRACEMENT
// ─────────────────────────────────────────────────────────────────────────────
// We use persistent variables to track the pullback signal.
var bool longSignalActive = false
var float pullHigh = na        // highest high since long signal activation
var float retraceLevel = na    // level = pullHigh * (1 - retracementPct)

// Only consider new entries when no position is open.
if strategy.position_size == 0
    // When a long crossover occurs, activate the signal and initialize pullHigh.
    if longCondition
        longSignalActive := true
        pullHigh := high

    // If signal active, update pullHigh and compute retracement level.
    if longSignalActive
        pullHigh := math.max(pullHigh, high)
        retraceLevel := pullHigh * (1 - retracementPct)

        // When price bounces upward and crosses above the retracement level, enter long
        if ta.crossover(close, retraceLevel)
            strategy.entry("Long", strategy.long)
            longSignalActive := false

    // Short entries: enter immediately if conditions are met
    if shortCondition and shortValid
        strategy.entry("Short", strategy.short)

// ─────────────────────────────────────────────────────────────────────────────
//  ▌ EXIT CONDITIONS WITH ADJUSTABLE TP, SL & BE
// ─────────────────────────────────────────────────────────────────────────────
var bool beLong  = false
var bool beShort = false

// LONG EXIT LOGIC
if strategy.position_size > 0 and strategy.position_avg_price > 0
    longEntry = strategy.position_avg_price

    // Additional exit: if SMA(10) crosses below SMA(25) while price < EMA150, exit long
    if ta.crossunder(sma10, sma25) and close < ema150
        label.new(bar_index, low, "SMA Exit", style=label.style_label_down, color=color.red, textcolor=color.white)
        strategy.close("Long", comment="SMA Cross Exit")

    // Break-even trigger if price moves in favor by beTrigger points
    if close >= longEntry + beTrigger
        beLong := true

    effectiveLongStop = beLong ? longEntry : (longEntry - slDistance)
    if close <= effectiveLongStop
        label.new(bar_index, low, (beLong ? "BE Hit" : "SL Hit"), style=label.style_label_down, color=color.red, textcolor=color.white)
        strategy.close("Long", comment=(beLong ? "BE Hit" : "SL Hit"))

    if close >= longEntry + tpDistance
        label.new(bar_index, high, "TP Hit", style=label.style_label_up, color=color.green, textcolor=color.white)
        strategy.close("Long", comment="TP Hit")

// SHORT EXIT LOGIC
if strategy.position_size < 0 and strategy.position_avg_price > 0
    shortEntry = strategy.position_avg_price

    // Basic stop logic
    if close >= shortEntry + slDistance
        label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
        strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))

    // Take profit logic
    if close <= shortEntry - tpDistance
        label.new(bar_index, low, "TP Hit", style=label.style_label_down, color=color.green, textcolor=color.white)
        strategy.close("Short", comment="TP Hit")

    // Break-even trigger
    if close <= shortEntry - beTrigger
        beShort := true

    effectiveShortStop = beShort ? shortEntry : (shortEntry + slDistance)
    if close >= effectiveShortStop
        label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
        strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))

// Reset BE flags when no position is open
if strategy.position_size == 0
    beLong  := false
    beShort := false
    // Reset the pullback signal
    if not longSignalActive
        pullHigh := na
        retraceLevel := na