지수 이동 평균 캔들스틱 스톱 트레이딩 전략

EMA RSI SUPPORT RESISTANCE BREAKOUT
생성 날짜: 2025-02-25 11:11:35 마지막으로 수정됨: 2025-02-25 11:11:35
복사: 8 클릭수: 348
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

지수 이동 평균 캔들스틱 스톱 트레이딩 전략 지수 이동 평균 캔들스틱 스톱 트레이딩 전략

개요

지수 이동 평균 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기하급수적 기

전략 원칙

이 전략의 핵심 원칙은 시장에서 특정 폭락 형태를 식별하는 것이며, 이러한 형태는 일반적으로 시장의 단기 반전의 가능성을 나타냅니다. 전략의 작동 메커니즘은 다음과 같습니다:

  1. 트렌드 판단: EMA20과 EMA90의 상대적 위치를 비교하여 시장의 흐름을 판단한다. EMA20이 EMA90 위에 있을 때 상승 추세로 판단하고, EMA20이 EMA90 아래에 있을 때 하락 추세로 판단한다.

  2. “아, 이봐요, 이봐요.

    • 상승 추세에서의 하락은 중지 신호 요구 사항: 하향 그림자 길이는 최소 0.8배, 상향 그림자 길이는 엔티티보다 작으며, 상장 가격이 상장 가격보다 높다.
    • 하향 트렌드에서의 하락은 중지 신호 요구 사항: 상도 선의 길이는 최소 0.8배이며, 하도 선은 주체보다 작으며, 상장 가격이 상장 가격보다 낮다.
  3. 브레이크 탐지: 현재 종결 가격과 지지/저항 수준을 비교하여 시장의 브레이크를 식별합니다.

  4. 진입 조건: 시장이 특정 추세에 있고 돌파하지 않은 상태에서 하락의 정지 신호가 발생하면 전략은 기본 위험 매개 변수에 따라 진입한다.

  5. 스톱로스 설정: 다단계 포지션의 경우, 스톱로스는 입시 가격 아래 2.5%로 설정; 공백 포지션의 경우, 스톱로스는 입시 가격 위 2.5%로 설정.

  6. 정지 조건: 수익률과 리스크 수익률에 기반한 조합 조건. 다목사는 최소 7%의 수익률과 3의 리스크 수익률을 요구한다. 공허는 최소 6%의 수익률과 3의 리스크 수익률을 요구한다.

전략적 이점

  1. 명확한 진입 및 출구 신호: 특정 하락 형태와 이동 평행 경향을 통해 명확한 거래 신호를 제공하여 주관적 판단으로 인한 감정적 인 영향을 줄입니다.

  2. 통합 트렌드 확인 메커니즘: 여러 시간 주기의 EMA 지표를 사용하여 시장의 흐름을 확인하고 거래 신호의 신뢰성을 향상시킵니다.

  3. 동적 지원 및 저항 식별: 이동 창을 사용하여 계산 된 동적 지원 및 저항 지점으로 전략이 다른 시장 단계에 적응 할 수 있습니다.

  4. 엄격한 리스크 관리: 리스크 매개 변수 (매 거래당 2.5%의 리스크) 와 리스크 수익률에 기반한 정지 조건으로 재원 관리의 합리성을 보장한다.

  5. 차별화 된 다공간 거래 기준: 다공간 거래와 공간 거래에 대해 다른 입시 조건과 수익 목표를 설정하여 시장의 비대칭적 특성에 적응하십시오.

  6. 다이내믹 포지션 계산: 스톱로스 거리를 기반으로 자동으로 계산되는 적절한 포지션 크기를 사용하여 각 거래의 위험을 일관되게 보장합니다.

전략적 위험

  1. 지표 지연성: 지연 지표인 EMA는 빠르게 변하는 시장에서 지연 신호를 제공하여 입출입 시기가 좋지 않을 수 있습니다.

  2. 가짜 돌파 위험: 시장에서 가짜 돌파 현상이 발생하여 잘못된 신호가 생성될 수 있다. 해결책은 거래량 확인을 도입하거나 돌파 확인 주기를 늘리는 것이다.

  3. 감수성 조정 도전: 타오르는 정지 신호의 파라미터 (예: 그림자 선과 실물 비율) 는 다른 시장과 주기에 따라 조정해야 하며, 너무 민감하면 과도한 거래가 발생할 수 있으며, 너무 엄격하면 기회를 놓칠 수 있다.

  4. 트렌드 전환 기간 위험: 트렌드 전환 기간 동안, 전략은 손실 거래의 연속을 일으킬 수 있습니다. 해결책은 트렌드 강도 필터를 추가하거나 트렌드가 불확실할 때 거래 빈도를 줄이는 것입니다.

  5. 고정된 중지 거리의 부적응성: 모든 거래에 대해 동일한 비율의 중지 (~ 2.5%) 를 사용하는 것은 다른 시장의 변동율에 적합하지 않을 수 있습니다. 변동율에 기반한 동적 중지 거리를 사용하는 것이 고려 될 수 있습니다.

  6. RSI 필터링 조건의 한계: 공허 거래에만 RSI 필터링을 사용하면 불균형한 거래 빈도가 발생할 수 있습니다. 다중 거래에도 비슷한 필터링 메커니즘을 도입하거나 현재 RSI 파라미터를 최적화 할 수 있습니다.

전략 최적화 방향

  1. 변동율 적응 파라미터: 변동율 지표 (ATR와 같은) 를 도입하여 동적으로 정지 신호의 그림자 비율 요구 사항과 정지 거리를 조정하여 전략이 다른 시장 조건에 더 잘 적응 할 수 있도록합니다.

  2. 다중 시간 프레임 확인: 더 높은 시간 프레임을 다시 도입하는 경향을 확인하고 거래 신호의 신뢰성을 높이고 가짜 신호의 영향을 줄인다.

  3. 진입 시점 최적화: 추가 필터 조건을 추가하여 진입 시점을 최적화하여 거래 성공률을 높인다.

  4. 부분 중지 메커니즘: 분기 중지 메커니즘을 도입하여, 일정 수익을 달성한 후 손실을 비용으로 이동하거나 수익의 일부를 잠금하여 위험과 수익을 더 잘 균형을 잡습니다.

  5. 회수 주기의 확장: 전략의 튼튼함과 적응성을 검증하기 위해 다른 시장 주기와 조건에서 더 포괄적인 회수를 수행합니다.

  6. 기계 학습 최적화: 특정 시장을 대상으로 최적의 변수 조합을 찾기 위해 전략 변수를 자동으로 최적화하기 위해 기계 학습 방법을 사용합니다.

  7. 거래 빈도 제어: 거래 횟수 제한 또는 냉각 기간 메커니즘을 도입하여 불리한 시장 조건에서 과도한 거래를 피하십시오.

요약하다

지수 이동 평형 상쇄 중단 거래 전략은 기술 분석과 위험 관리를 결합한 정량 거래 시스템으로 특정 상쇄 형태를 식별하고 트렌드 확인과 결합하여 거래 신호를 생성합니다. 이 전략의 주요 장점은 명확한 거래 규칙과 엄격한 위험 제어 장치로 거래 의사 결정이 더 체계화되고 규율적입니다. 그러나, 모든 기술 분석 전략과 마찬가지로 지표 낙후 및 시장 변화에 대한 적응 등의 과제에 직면합니다.

변동률 자율적 변수, 다중 시간 프레임 확인 및 진입 시기를 최적화하는 방향으로의 개선을 도입함으로써, 이 전략은 다양한 시장 환경에서 더 안정적인 성능을 발휘할 잠재력이 있다. 특히, 변수 최적화에 대한 기계 학습 방법을 적용하는 것은 전략의 적응성과 전반적인 성능을 크게 향상시킬 수 있다. 어쨌든, 이 전략을 실제적으로 배포하기 전에, 실제 시장 조건 하에서의 성능을 검증하기 위해 충분한 역검 및 전향 테스트를 수행하는 것이 좋습니다.

전략 소스 코드
/*backtest
start: 2024-02-26 00:00:00
end: 2025-02-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=6
strategy("Advanced Candle Stop Strategy Backtest - Tuned v9 - Max Trades", overlay=true)

// --- EMA Variables ---
ema5_length = 5
ema20_length = 20
ema90_length = 90

ema5 = ta.ema(close, ema5_length)
ema20 = ta.ema(close, ema20_length)
ema90 = ta.ema(close, ema90_length)

// --- Support, Resistance, and Volume Calculation ---
lookback_support_resistance = 30
support_level = ta.lowest(low, lookback_support_resistance)
resistance_level = ta.highest(high, lookback_support_resistance)

// --- Volume Condition for Short (Removed) ---
avg_volume_lookback = 20
avg_volume = ta.sma(volume, avg_volume_lookback)

// --- RSI Condition for Short (Removed) ---
rsi_length = 14
rsi_overbought = 70
rsi = ta.rsi(close, rsi_length)


// --- Candle Stop Function ---
is_candle_stop(trend) =>
    body = math.abs(close - open)
    upper_shadow = high - math.max(open, close)
    lower_shadow = math.min(open, close) - low

    if trend == "up"
        lower_shadow >= 0.8 * body and upper_shadow < body and close > open // Shadow ratio reduced to 0.8 for longs
    else if trend == "down"
        upper_shadow >= 0.8 * body and lower_shadow < body and close < open // Shadow ratio reduced to 0.8 for shorts - EMA5 and Volume conditions removed
    else
        false

// --- Trend Determination (only 15m, no 1H confirmation) ---
trend = ema20 > ema90 ? "up" : ema20 < ema90 ? "down" : "neutral"
final_trend = trend  // حذف تأیید با تایم‌فریم 1H

// --- Breakout Detection ---
var bool breakout_detected = false
if final_trend == "up" and close > resistance_level
    breakout_detected := true
    alert("شکست صعودی تشخیص داده شد! منتظر پولبک 🚀", alert.freq_once_per_bar)
else if final_trend == "down" and close < support_level
    breakout_detected := true
    alert("شکست نزولی تشخیص داده شد! منتظر پولبک 📉", alert.freq_once_per_bar)

// --- Entry and Exit Conditions ---
var float position = 0.0
var float entry_price = 0.0
var float stop_loss_price = na
var bool take_profit_long = false  // Declare take_profit_long
var bool stop_loss_hit_long = false // Declare stop_loss_hit_long
var bool take_profit_short = false // Declare take_profit_short
var bool stop_loss_hit_short = false // Declare stop_loss_hit_short
risk_per_trade_percent = 2.5  // افزایش ریسک به 2.5٪ برای موقعیت‌های بیشتر


if not breakout_detected
    if position == 0 and is_candle_stop(final_trend)
        risk_amount_usd = strategy.initial_capital * (risk_per_trade_percent / 100)
        if final_trend == "up"
            stop_loss_price := close * 0.975 // Stop loss at 2.5% below entry for longs
            if (close - stop_loss_price) != 0
                position_size_usd = risk_amount_usd / (close - stop_loss_price)
                amount = position_size_usd / close
                strategy.entry("Long", strategy.long, qty=amount)
                position := amount
                entry_price := close
        else if final_trend == "down"
            stop_loss_price := close * 1.025 // Stop loss at 2.5% above entry for shorts
            if (stop_loss_price - close) != 0
                position_size_usd = risk_amount_usd / (stop_loss_price - close)
                amount = position_size_usd / close
                if rsi >= rsi_overbought // RSI condition for short entry - No Change, still using RSI but not enforcing it for now - Consider removing RSI condition as well for max trades
                    strategy.entry("Short", strategy.short, qty=amount)
                    position := amount
                    entry_price := close

if position > 0
    profit_percent_long = (close - entry_price) / entry_price * 100
    profit_percent_short = (entry_price - close) / entry_price * 100
    loss_percent_long = (entry_price - close) / entry_price * 100
    loss_percent_short = (close - entry_price) / entry_price * 100

    risk_reward_long = loss_percent_long != 0 ? profit_percent_long / loss_percent_long : (profit_percent_long != 0 ? 99999 : 0)
    risk_reward_short = loss_percent_short != 0 ? profit_percent_short / loss_percent_short : (profit_percent_short != 0 ? 99999 : 0)


    take_profit_long := profit_percent_long >= 7 and risk_reward_long >= 3
    stop_loss_hit_long := close <= stop_loss_price
    take_profit_short := profit_percent_short >= 6 and risk_reward_short >= 3 // Reduced Take Profit for Shorts to 6% - No Change
    stop_loss_hit_short := close >= stop_loss_price

    if (final_trend == "up" and (take_profit_long or stop_loss_hit_long)) or (final_trend == "down" and (take_profit_short or stop_loss_hit_short))
        if final_trend == "up"
            strategy.close("Long")
        else
            strategy.close("Short")
        position := 0
        entry_price := 0.0
        breakout_detected := false

// --- Plotting EMAs and Support/Resistance Levels ---
plot(ema5, color=color.blue, title="EMA5")
plot(ema20, color=color.red, title="EMA20")
plot(ema90, color=color.green, title="EMA90")
plot(resistance_level, color=color.orange, style=plot.style_line, title="Resistance")
plot(support_level, color=color.orange, style=plot.style_line, title="Support")