다중 지수 이동 평균 교차 추세 필터 거래 전략

EMA 指数移动平均线 趋势过滤 固定资金 交叉信号 百分比止盈止损
생성 날짜: 2025-05-20 15:31:26 마지막으로 수정됨: 2025-05-20 15:31:26
복사: 0 클릭수: 332
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다중 지수 이동 평균 교차 추세 필터 거래 전략 다중 지수 이동 평균 교차 추세 필터 거래 전략

개요

다중 지수 이동 평균 교차 추세 필터링 거래 전략은 다중 주기 EMA (6, 14, 50, 200) 지표에 기반한 자동화 거래 시스템이다. 이 전략은 단기 EMA (6, 14, 50, 200) 의 교차 신호를 사용하여 거래 입점을 생성하고, 장기 EMA (50 및 200) 를 통해 시장 추세 방향을 확인하여 거래의 성공률을 높인다. 이 전략은 특히 고정된 USDT 금액의 포지션 관리 방법을 설계하고, 위험 통제를 위해 백분율 스톱 패스 메커니즘과 함께한다.

전략 원칙

이 전략의 핵심 논리는 다단계 지수 이동 평균 신호 확인 시스템에 기반합니다:

  1. 기본 신호 생성: EMA6과 EMA14의 교차를 초기 거래 신호로 사용한다. EMA6이 EMA14을 상향으로 통과하면 다중 신호가 발생한다. EMA6이 EMA14을 하향으로 통과하면 공백 신호가 발생한다.

  2. 동향 확인: EMA50과 EMA200의 상대적인 위치를 통해 시장의 주요 트렌드를 판단한다. EMA50이 EMA200보다 크면 상승 트렌드를 확인한다. EMA50이 EMA200보다 작으면 하락 트렌드를 확인한다.

  3. 트렌드 강도 필터링: EMA50과 EMA200 사이의 비율 차이를 계산하고, 트렌드가 충분히 강해서 거래가 허용될 수 있다고 판단하는 것은 오직 차이점이 사용자 설정된 최소값 (기본 1.0%) 보다 크거나 같을 때입니다.

  4. 가격 위치 필터: EMA50와 EMA200의 위치에 대한 현재 가격에 따라 추가 필터링. 과잉을 위해서는 가격이 EMA50보다 높거나 EMA50과 EMA200 사이의 “지역”에 있어야 하며, 공백을 위해서는 가격이 EMA200보다 낮거나 EMA50과 EMA200 사이의 “지역”에 있어야 한다.

  5. 포지션 관리: 두 가지 모드를 지원합니다. 포지션 크기를 설정하는 모드 - 퍼센트 모드 (계좌 지분의 고정 비율) 또는 고정 USDT 금액 모드, 그리고 레버리지 파라미터를 통해 실제 거래 규모를 조정할 수 있습니다.

  6. 탈퇴 전략두 가지의 스톱 모드를 제공합니다 - 퍼센티지 스톱 또는 EMA 크로스 스톱, 동시에 고정 퍼센티지 스톱을 사용하여 손실 보호 자금 안전.

전략적 이점

  1. 다중 인증 메커니즘: 단기 및 장기 이동 평균을 결합하여, 층층 필터링 된 신호 확인 메커니즘을 형성하여, 가짜 신호의 가능성을 크게 감소시킵니다. 단기 EMA는 즉각적인 동력을 포착하고, 장기 EMA는 전체적인 경향 방향을 검증합니다.

  2. 트렌드 강도 식별: EMA 사이의 비율 차이를 계산하여, 충분히 강한 추세에서만 거래하는 것을 보장하고, 가로 시장에서 자주 거래와 손실을 피한다.

  3. 유연 입학 구역전략: “지역 거래” 즉, 가격이 주요 추세 방향의 회귀 범위 (EMA50과 EMA200 사이에) 에 진입하는 것이 더 나은 진입 가격을 얻는 데 도움이 됩니다.

  4. 자금 관리의 유연성% 또는 고정 금액의 두 가지 포지션 관리 모드를 지원합니다. 다양한 계정 크기 및 위험 선호하는 거래자에게 적합합니다.

  5. 자동 정지: 백분율 스피드스피드 메커니즘을 내장하고, 자동으로 위험을 통제하고, 감정적 인 방해를 방지하고, 거래 자금을 보호합니다.

  6. 경고 기능 통합: alertcondition을 통해 구현된 고정 형식 경보 기능으로 외부 시스템과 조인하거나 수동 거래 보조를 수행할 수 있다.

전략적 위험

  1. 다중 지표 뒤처진 축적: 여러 개의 EMA를 사용하면 신호 지연적 중첩이 발생할 수 있으며, 빠르게 변하는 시장에서 최적의 입시 지점을 놓칠 수 있거나 반응이 느려질 수 있습니다. 해결 방법은 단기 EMA에서 더 민감한 변수를 도입하는 것을 고려하거나, 초기 경고로 운동량 지표를 추가하는 것입니다.

  2. 고정 변수 적응성 문제전략의 고정 EMA 주기 ((6,14,50,200) 는 모든 시장 조건이나 시간 주기에는 적용되지 않을 수 있습니다. 실제 사용 전에 재검토를 수행하고 특정 시장 특성에 따라 이러한 파라미터를 조정하는 것이 좋습니다.

  3. 고정 비율 스톱 손실 제한: 고정된 비율의 스톱 로드를 사용하여 시장의 변동률을 고려하지 않고, 높은 변동 환경에서는 중단 손실이 너무 작을 수 있으며, 낮은 변동 환경에서는 너무 크다. ATR (진정한 변동폭의 평균) 을 사용하여 스톱 로드 수준을 동적으로 조정하는 것을 고려하십시오.

  4. 트렌드 전환점 취약점주요 트렌드 전환점 근처에서 EMA 교차 신호는 종종 가짜 신호가 발생할 수 있습니다. 거래량, 충격 지표 또는 가격 형태 분석과 같은 추가 확인 지표를 추가하는 것이 좋습니다.

  5. 자금 관리 위험: 고정 USDT 모델은 가격 변동이 큰 시장에서 포지션 규모가 불합리한 결과를 초래할 수 있습니다. 시장 위험에 따라 거래당 자본 비율을 조정하는 동적 포지션 조정 장치를 적용하는 것을 고려하십시오.

전략 최적화 방향

  1. 동적 변수 조정 메커니즘자기 적응 EMA 주기 설정을 개발하여 시장 변동률이나 거래 주기에 따라 자동으로 EMA 매개 변수를 조정하여 다양한 시장 환경에서 전략의 적응성을 향상시킵니다. 이것은 ATR 값의 변화와 같은 변동률 계산 함수를 매개 변수 조정의 기초로 추가하여 가능합니다.

  2. 보조 확인 지표 추가: 추가적인 기술 지표인 RSI ((상대적 강약 지수), MACD ((이동 평균 수렴 산란도) 또는 교차량 지표가 도입되어 교차 신호의 확인으로 가짜 신호의 발생률을 줄인다.

  3. 지능형 정지: 고정된 퍼센트 스톱 스톱을 ATR 기반의 동적 스톱 스톱으로 대체하여 시장의 변동성에 더 잘 적응합니다. 예를 들어, 스톱 스톱을 입시 가격으로 설정하여 현재 ATR 값을 2 배로 줄일 수 있습니다.

  4. 무작위로 건설하고 평화적인 창고 전략: 전체 포지션이 한 번에 작동하는 대신, 분기 입수 및 분기 수익 전략을 구현하고, 시기를 선택하는 압력을 줄이고, 전체 수익 안정성을 향상시킵니다.

  5. 시장 상태 식별: 시장 상태 분류 기능을 추가 (추진시장, 변동시장과 같은), 다른 시장 상태에서 다른 거래 매개 변수를 적용하거나 심지어 특정 시장 상태를 완전히 피한다.

  6. 기계 학습 최적화: 간단한 기계 학습 알고리즘을 도입하여 최적의 EMA 주기 및 다른 파라미터 조합을 역사 데이터에 따라 자동으로 조정하는 최적의 파라미터 선택.

  7. 위험 균형 장치: 계좌의 순가치 변화에 따른 역동적인 포지션 조정, 연속적인 수익 후 포지션을 증가시키고, 연속적인 손실 후 포지션을 감소시키고, 재수익 성장을 달성하면서 철수율을 제어한다.

요약하다

다중 지수 이동 평균의 교차 트렌드 필터링 거래 전략은 다중 EMA 지표의 다중 계층을 결합 한 전체 거래 시스템으로, 단기 및 장기 이동 평균의 연동 작용을 통해 시장 추세를 효과적으로 식별하고 거래 신호를 생성합니다. 이 전략의 핵심 장점은 다중 확인 메커니즘과 유연한 포지션 관리 능력으로 트렌드 시장에서 탁월한 성능을 발휘합니다.

그러나, 이 전략은 지표 지각과 변수 고정의 한계도 있다. 최적화 방향은 주로 변수 동적 조정, 보조 지표를 추가하고, 중지 손실 메커니즘을 개선하는 데 집중한다. 변동률 감성의 동적 변수와 위험 관리를 도입함으로써, 이 전략은 다양한 시장 환경에서 적응력을 더욱 향상시킬 수 있다.

전체적으로, 이것은 명확한 구조와 논리적으로 엄격한 트렌드 추적 전략이며, 중·장기 투자자에게 적합합니다. 적극적인 거래자에게는 감수성을 높이기 위해 EMA 주기를 줄이는 것을 고려할 수 있습니다. 보수적인 거래자에게는 거래 빈도와 위험을 줄이기 위해 추가적인 필터링 조건을 추가하고 손해의 범위를 확장 할 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-05-20 00:00:00
end: 2024-08-17 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/

// @version=6
strategy("EMA sabit usdt ve Alarm)", overlay=true, margin_long=1, margin_short=1)

// —— GİRDİLER —— //
fastLen        = input.int(6,   "EMA6 Periyodu")
slowLen        = input.int(14,  "EMA14 Periyodu")
midLen         = input.int(50,  "EMA50 Periyodu")
longLen        = input.int(200, "EMA200 Periyodu")

tpMode         = input.string("Percent", "Take Profit Modu", options=["Percent", "EMA Cross"])
tpPerc         = input.float(2.0, "TP (%)", step=0.1)
slPerc         = input.float(7.0, "Stop Loss (%)", step=0.1)

orderSizeMode  = input.string("Percent", "Pozisyon Boyutu Modu", options=["Percent", "Fixed"])
orderSizePerc  = input.float(10.0, "Boyut (%)", minval=0.1, step=0.1)
orderSizeFixed = input.float(5.0,  "Boyut (Sabit) [USDT]", minval=0)

leverage       = input.int(1, "Kaldıraç", minval=1)

minEMAPct      = input.float(1.0, "%50–200 Min Fark", step=0.1)

// —— EMA HESAPLAMALARI —— //
ema6   = ta.ema(close, fastLen)
ema14  = ta.ema(close, slowLen)
ema50  = ta.ema(close, midLen)
ema200 = ta.ema(close, longLen)

plot(ema6,   title="EMA 6",   linewidth=1)
plot(ema14,  title="EMA 14",  linewidth=1)
plot(ema50,  title="EMA 50",  linewidth=2)
plot(ema200, title="EMA 200", linewidth=2)

crossUp    = ta.crossover(ema6, ema14)
crossDown  = ta.crossunder(ema6, ema14)
priceAbove50  = close > ema50
priceBelow50  = close < ema50
priceAbove200 = close > ema200
priceBelow200 = close < ema200
upTrend    = ema50 > ema200
downTrend  = ema50 < ema200
zoneLong   = priceBelow50 and priceAbove200
zoneShort  = priceAbove50 and priceBelow200
emaDistPct = math.abs(ema50 - ema200) / ema200 * 100
strongTrend= emaDistPct >= minEMAPct

// —— KOŞULLAR —— //
longCond  = crossUp and upTrend and strongTrend and (priceAbove50 or zoneLong)
shortCond = crossDown and downTrend and strongTrend and (priceBelow200 or zoneShort)

// —— POZİSYON MİKTARI —— //
var float qty = na
if orderSizeMode == "Percent"
    qty := strategy.equity * (orderSizePerc/100) * leverage
else
    qty := (orderSizeFixed / close) * leverage

// —— SİNYAL KOŞULLARI — statik mesajlar —— //
alarmLongID  = "EMA_Long_Signal"
alarmShortID = "EMA_Short_Signal"

// —— GİRİŞLER —— //
if longCond
    strategy.entry("Long", strategy.long, qty=qty)
    label.new(bar_index, high, text="Long", yloc=yloc.abovebar)

if shortCond
    strategy.entry("Short", strategy.short, qty=qty)
    label.new(bar_index, low, text="Short", yloc=yloc.belowbar)

// —— ALERTCONDITION ile sabit mesaj —— //
alertcondition(longCond, title="Long Alarm", message=alarmLongID)
alertcondition(shortCond, title="Short Alarm", message=alarmShortID)

// ÇIKIŞLAR (TP/SL) —— //
if tpMode == "Percent"
    if strategy.position_size > 0
        slPrice = strategy.position_avg_price * (1 - slPerc/100)
        tpPrice = strategy.position_avg_price * (1 + tpPerc/100)
        strategy.exit("Exit Long", from_entry="Long", stop=slPrice, limit=tpPrice)
    if strategy.position_size < 0
        slPrice = strategy.position_avg_price * (1 + slPerc/100)
        tpPrice = strategy.position_avg_price * (1 - tpPerc/100)
        strategy.exit("Exit Short", from_entry="Short", stop=slPrice, limit=tpPrice)
else
    if strategy.position_size > 0
        slPrice = strategy.position_avg_price * (1 - slPerc/100)
        strategy.exit("Stop Long", from_entry="Long", stop=slPrice)
    if strategy.position_size < 0
        slPrice = strategy.position_avg_price * (1 + slPerc/100)
        strategy.exit("Stop Short", from_entry="Short", stop=slPrice)