다중 시간대 SMA-EMA 교차 양적 전략

SMA EMA RSI HTF TP/SL Trailing Stop
생성 날짜: 2025-06-16 14:55:14 마지막으로 수정됨: 2025-06-16 14:55:14
복사: 4 클릭수: 257
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다중 시간대 SMA-EMA 교차 양적 전략 다중 시간대 SMA-EMA 교차 양적 전략

개요

다중 시간 SMA-EMA 교차량화 전략은 간단한 이동 평균 (SMA) 과 지수 이동 평균 (EMA) 의 교차 신호를 결합하고, 다중 시간 필터링과 RSI 지표의 보조 판단을 이용한 기술 분석 전략이다. 이 전략의 핵심 아이디어는 EMA15와 SMA60의 교차점 지점을 입점으로 포착하는 것이며, 신호는 장기적인 추세 참고로 EMA200을 도입하고, 더 높은 시간의 EMA200과 결합하여 거래 방향을 필터링하여 최종적으로 RSI 지표의 과도한 매매 지역을 피하는 것이다.

전략 원칙

이 전략의 핵심은 다음과 같은 기술 분석 구성 요소에 기반합니다.

  1. 이동 평균 교차 시스템

    • 15주기 EMA와 60주기 SMA의 교차를 주요 신호로 사용
    • EMA15 위 SMA60을 통과하여 다중 신호를 생성합니다.
    • EMA15 아래 SMA60을 뚫고 공백 신호를 형성한다
    • 200주기 EMA는 장기적인 트렌드 기준선입니다.
  2. 다중 시간 필터링

    • 트렌드 판단 도구로 더 높은 시간 (설정 60 분) 을 도입한 EMA200
    • 가격 상승 시 EMA200 상위에 있을 때만 더 많이 할 수 있습니다.
    • 하위 EMA200 이하의 시점에만 공백을 허용합니다.
    • 이러한 필터링 메커니즘은 거래의 방향이 더 큰 시간 주기의 추세와 일치하도록 보장합니다.
  3. RSI 필터 메커니즘

    • 14주기 RSI를 사용하여 과도한 거래 지역에서 입장을 피하십시오.
    • RSI가 30보다 낮으면 과매매 지역이며, 공백을 제한합니다.
    • RSI 70 이상은 과매매 지역이며, 과잉을 제한합니다.
    • 이 디자인은 역대 거래를 방지하고 입시 품질을 향상시키는 데 도움이됩니다.
  4. 위험 관리 시스템

    • 고정 점수 또는 비율 방식을 지원하는 유연한 정지 설정
    • 고정 점수의 중지 손실 설정
    • 은 이윤을 막는 후속 손해배상 장치
    • 거래시간 통제, 시장 종결 전에 포지션을 보유하지 않는 것

이 전략의 거래 논리는 “트렌드를 따라 + 여러 번 확인”의 사고방식을 따르며, 여러 층의 필터링 메커니즘을 통해 높은 확률의 방향으로만 거래되는 것을 보장하며, 엄격한 위험 제어 조치로 자금을 보호합니다.

전략적 이점

코드의 심층적인 분석을 통해, 이 전략은 다음과 같은 중요한 장점을 가지고 있다:

  1. 다중 인증 메커니즘: 단기 이동 평균 크로스, 장기 트렌드 판단 및 RSI 필터링과 결합하여, 삼중 확인 메커니즘을 형성하여, 신호 품질을 크게 향상시키고, 가짜 브레이크 및 잘못된 신호를 줄였습니다.

  2. 다른 시장 환경에 적응하는 것변수형 설계로, 전략은 다른 시장 환경과 거래 품종에 적응하기 위해 유연하게 조정할 수 있습니다. 이동 평균 주기, RSI 경과 등이 조정됩니다.

  3. 좋은 위험 관리

    • 여러 가지 스티핑 방식을 지원합니다.
    • 고정 손실 보호
    • 이윤을 고정하는 후속 중지
    • 이러한 다단계 위험 관리 메커니즘은 단일 거래의 최대 위험을 효과적으로 통제합니다.
  4. 거래 시간 관리: 자동으로 상장 전에 시점을 정하고, 하룻밤의 위험과 상장 변동으로 인한 불확실성을 피합니다. 특히 일일 거래자에게 적합합니다.

  5. 높은 시간 트렌드 필터트렌드 판단을 위해 더 높은 시간대를 도입하여 거래 방향이 큰 트렌드와 일치하는 것을 보장하고 승률을 높였습니다.

  6. 모듈 디자인전략의 각 구성요소들 (신호 생성, 필터링 메커니즘, 위험 관리) 은 명확하게 분리되어 있으며, 이를 이해하기 쉽고 조정할 수 있으며, 또한 향후 최적화 및 확장할 수 있습니다.

전략적 위험

이 전략은 포괄적으로 설계되었지만, 다음과 같은 잠재적인 위험들이 있습니다.

  1. 매개변수 민감도: 전략 효과는 이동 평균 주기, RSI 값 등의 파라미터 설정에 크게 의존한다. 다른 시장 환경에는 다른 파라미터 조합이 필요할 수 있으며, 파라미터 최적화가 적절하지 않은 것은 과도하게 역사 데이터를 적합하게 만들 수 있다.

  2. 뒤처진 문제이동 평균은 본질적으로 지연된 지표이며, 급격한 변동이나 급격한 반전 시장에서 늦은 신호를 생성할 수 있으며, 최적의 입문 지점을 놓치거나 큰 회수로 이어질 수 있다.

  3. 상자 시장의 부진: 뚜렷한 추세가 없는 상반기 정리 시장에서, 이동 평균의 교차는 빈번한 가짜 신호를 생성하여 연속적인 손실을 초래할 수 있다.

  4. 기술적인 지표에 지나치게 의존하는 것이 전략은 전적으로 기술적 지표에 기반하여 기본 요소와 시장의 감정을 고려하지 않고 주요 뉴스 또는 이벤트에 의해 주도되는 시장에서 좋지 않을 수 있습니다.

  5. 고정 손실 위험: 고정 점수 정지는 변동성이 변화하는 시장에서 충분히 유연하지 않을 수 있으며, 변동성이 확대될 때 정지는 너무 느려질 수 있으며, 변동성이 축소될 때 정지는 너무 긴밀할 수 있다.

해결책:

  • 다양한 시장과 기간을 재검토하여 탄탄한 변수 조합을 찾습니다.
  • 변동률을 증가시키는 자기 적응의 손해 제도를 고려
  • 수평 시장에서 추가 필터링 조건을 추가합니다.
  • 기본 요소 또는 시장 감정 지표와 결합된 강화 전략
  • 거래량 확인 메커니즘을 추가하여 신호 품질을 향상시키는 것을 고려하십시오.

전략 최적화 방향

현재 전략의 프레임워크를 바탕으로 다음과 같은 몇 가지 최적화 방향을 고려할 수 있습니다.

  1. 변동율 적응 메커니즘

    • ATR (Average True Range) 지표의 도입으로 스톱 및 스톱 레벨의 조정
    • 높은 변동률 환경에서 손해배상 범위를 확장하고 낮은 변동률 환경에서 손해배상 범위를 강화
    • 이러한 자기 적응은 시장의 다른 조건에 더 잘 적응할 수 있습니다.
  2. 다중 시간 일관성 강화

    • 중간 시간대를 추가하여 “단기+중기+장기”의 3개의 시간 프레임의 일관성 요구사항을 형성합니다.
    • 여러 시간 주기 신호가 일치할 때만 거래를 수행합니다.
    • 이것은 가짜 신호의 위험을 더욱 낮출 수 있습니다.
  3. 거래량 확인

    • 거래량 분석에 추가하여 신호가 발생하면 거래량이 증가하도록 요구합니다.
    • 상대 거래량 지표는 OBV 또는 Chaikin Money Flow를 사용할 수 있습니다.
    • 거래량 확인은 신호 품질과 돌파 효과를 크게 향상시킬 수 있습니다.
  4. 동적 변수 최적화

    • 최근 시장의 성과에 따라 이동 평균 주기 및 RSI 절벽을 자동으로 최적화하는 변수 동적 조정 메커니즘을 구현합니다.
    • 이러한 적응적 접근은 시장의 변화에 대응하는 전략을 수립하는 데 도움이 됩니다.
  5. 시장 상태 분류

    • 트렌드 시장과 변동 시장을 구분하는 시장 상태 인식 모듈을 추가합니다.
    • 다른 시장 상태에서 다른 신호 생성 및 필터링 규칙을 사용
    • 이러한 동적 조정은 다양한 시장 환경에서 전략의 적응력을 향상시킬 수 있습니다.
  6. 기계학습 최적화를 도입합니다.

    • 의사결정 나무나 신경망과 같은 기계학습 알고리즘을 사용하여 입학 결정을 최적화
    • 계절성, 시장의 감정, 변동성 등과 같은 더 많은 요소들을 종합적으로 고려합니다.
    • 이것은 전략의 예측력과 적응력을 향상시킬 수 있습니다.

이러한 최적화 방향은 전략의 결점을 개선하여 광범위한 시장 환경에서 안정적인 성능을 유지할 수 있습니다.

요약하다

다중 시간 SMA-EMA 교차량화 전략은 구조적이고 논리적으로 명확한 기술적 분석 거래 시스템이다. 그것은 이동 평균 교차 신호, 다중 시간 트렌드 필터링 및 RSI 오버 바이 오버 셀 판단을 결합하여 다중 계층의 거래 의사 결정 프레임 워크를 형성한다. 동시에, 전략은 또한 다중의 스톱 스톱 손실 방식과 거래 시점 통제를 포함하는 포괄적 인 위험 관리 장치를 포함하고 있다.

이 전략의 주요 장점은 다중 확인 메커니즘과 완벽한 위험 제어로 인해 트렌드 시장에서 우수한 성능을 발휘할 수 있으며 위험을 효과적으로 제어 할 수 있습니다. 그러나, 전략에는 파라미터 민감도가 높고 수평 시장에 대한 적응성이 떨어지는 문제도 있습니다.

변동율 자조제도를 도입하고, 다중 시간대 일관성 요구 사항을 강화하고, 거래량 확인을 증가시키고, 동적 변수 최적화를 구현하는 등의 방법으로, 전략에 많은 개선의 여지가 있습니다. 이러한 최적화는 전략이 다양한 시장 환경에 더 잘 적응하고, 전반적인 안정성과 수익성을 향상시키는 데 도움이 될 수 있습니다.

전반적으로, 이것은 잘 설계된 트렌드 추적 전략이며, 기술적 분석 기반을 가진 거래자가 사용할 수 있습니다. 적절한 파라미터를 조정하고 최적화하면 신뢰할 수있는 거래 도구가 될 수 있습니다. 특히 중·장기 추세가 명확한 시장 환경에 적합합니다.

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

//@version=5
strategy(title="PhaiSinh_SMA & EMA [VNFlow]", overlay=true, slippage=1, backtest_fill_limits_assumption=1, initial_capital=100.000, default_qty_type=strategy.fixed, default_qty_value=4, commission_type=strategy.commission.cash_per_order, commission_value=2700,fill_orders_on_standard_ohlc=true, calc_on_order_fills=true, process_orders_on_close=true)

// === Chỉ báo chính ===
sma60 = ta.sma(close, 60)
ema15 = ta.ema(close, 15)
ema200 = ta.ema(close, 200)
plot(sma60, title="SMA 60", color=color.rgb(227, 10, 251), linewidth=1)
plot(ema15, title="EMA 15", color=color.rgb(246, 222, 11), linewidth=1)
plot(ema200, title="EMA 200", color=color.rgb(13, 141, 245), linewidth=1)

// === Cấu hình thời gian thoát trước khi hết phiên ===
session_close_hour = input.int(14, title="Giờ đóng phiên (24h)")
session_close_minute = input.int(30, title="Phút đóng phiên")
minutes_before_close = input.int(5, title="Số phút thoát lệnh trước đóng phiên")
exit_hour = session_close_hour
exit_minute = session_close_minute - minutes_before_close
exit_hour := exit_minute < 0 ? exit_hour - 1 : exit_hour
exit_minute := exit_minute < 0 ? exit_minute + 60 : exit_minute
cutoff_time = (hour > exit_hour) or (hour == exit_hour and minute >= exit_minute)

// === Bộ lọc RSI ===
use_rsi_filter = input.bool(true, title="Bộ lọc RSI?")
rsi_period = input.int(14, title="Chu kỳ RSI")
rsi_overbought = input.int(70)
rsi_oversold = input.int(30)
rsi_val = ta.rsi(close, rsi_period)

// === Bộ lọc EMA từ HTF ===
use_htf_filter = input.bool(true, title="Bộ lọc EMA HTF?")
htf_tf = input.timeframe("60", title="Khung thời gian EMA cao hơn")
htf_ema = request.security(syminfo.tickerid, htf_tf, ta.ema(close, 200))
ema_trend_up = close > htf_ema
ema_trend_down = close < htf_ema

// === Cài đặt TP/SL/Trailing ===
use_percent_tp = input.bool(false, title="TP theo % (nếu không: tính theo tick)")
tp_value = input.float(1.0, title="Take Profit (tick hoặc %)")
sl_value = input.float(20.0, title="Stop Loss (tick)")
trail_offset = input.int(10, title="Trailing Stop (tick)")

// === Logic tín hiệu vào/ra ===
long_entry = ta.crossover(ema15, sma60) and close >= ema15 and not cutoff_time
short_entry = ta.crossunder(ema15, sma60) and close <= ema15 and not cutoff_time
long_ok = long_entry and (not use_htf_filter or ema_trend_up) and (not use_rsi_filter or rsi_val > rsi_oversold)
short_ok = short_entry and (not use_htf_filter or ema_trend_down) and (not use_rsi_filter or rsi_val < rsi_overbought)

// === Vào lệnh ===
if long_ok
    strategy.entry("Long", strategy.long)
if short_ok
    strategy.entry("Short", strategy.short)

// === Tính TP theo giá nếu chọn % ===
long_tp_price = close * (1 + tp_value / 100)
short_tp_price = close * (1 - tp_value / 100)

// === Thoát lệnh với TP/SL/Trailing ===
if strategy.position_size > 0
    if use_percent_tp
        strategy.exit("Dừng Long %", from_entry="Long", loss=sl_value, limit=long_tp_price, trail_points=trail_offset, trail_offset=trail_offset)
    else
        strategy.exit("Dừng Long Tick", from_entry="Long", loss=sl_value, profit=tp_value, trail_points=trail_offset, trail_offset=trail_offset)

if strategy.position_size < 0
    if use_percent_tp
        strategy.exit("Dừng Short %", from_entry="Short", loss=sl_value, limit=short_tp_price, trail_points=trail_offset, trail_offset=trail_offset)
    else
        strategy.exit("Dừng short Tick", from_entry="Short", loss=sl_value, profit=tp_value, trail_points=trail_offset, trail_offset=trail_offset)

// === Đóng toàn bộ trước phiên ===
if cutoff_time
    strategy.close_all()