이중 지수 이동 평균 다중 목표 거래 전략

EMA SMA TP SL 移动平均线 止损 多目标策略 交叉信号
생성 날짜: 2025-08-21 09:01:39 마지막으로 수정됨: 2025-08-21 09:01:39
복사: 0 클릭수: 212
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

이중 지수 이동 평균 다중 목표 거래 전략 이중 지수 이동 평균 다중 목표 거래 전략

개요

이중 지수 이동 평균 다목적 거래 전략은 단기 및 장기 지수 이동 평균 ((EMA) 의 교차 신호를 기반으로 한 정량 거래 시스템이다. 이 전략은 9주기 및 21주기 EMA의 교차를 입시 신호로 사용하고 있으며, 최대 10개의 수익 목표와 수익을 극대화하기 위해 스톱로스를 설정한다. 이 전략은 다목적 쌍방향 거래를 동시에 지원하며, EMA가 단기 상에서 장기 EMA를 통과할 때 더 많이 열리고, 단기 EMA가 장기 EMA를 통과할 때 공백하고, 역 교차할 때 퇴출한다.

전략 원칙

이 전략의 핵심 원칙은 지수 이동 평균 교차 시스템을 기반으로 다음과 같이 구체적으로 구현된다:

  1. 두 개의 EMA를 계산합니다: 빠른 EMA ((9주기) 와 느린 EMA ((21주기)
  2. 빠른 EMA가 느린 EMA를 통과하면 다중 신호가 생성됩니다.
  3. 빠른 EMA 아래에서 느린 EMA를 통과하면 공백 신호가 발생
  4. 입시 후, 전략은 입시 가격에 따라 10개의 계단형 목표 가격 ((TP1-TP10) 과 스톱 로즈 가격을 자동으로 계산합니다.
  5. 이 전략은 다중 헤드 및 빈 헤드 포지션에 대해 동일한 비율을 사용하지만 방향은 반대입니다.
  6. 다목적으로, 입시 가격 아래 0.5%의 중지 손실이 설정되어 있으며, 입시 가격 위 0.5%에서 5.0%의 수익 목표가 있습니다.
  7. 공백을 위해, 중지 손실은 출입 가격보다 0.5% 높고, 수익 목표는 출입 가격보다 0.5%에서 5.0% 정도 높습니다.
  8. 전략은 역교차 신호가 발생했을 때 평점으로 빠져나갑니다.

이 전략은 체계적인 위험 관리 방법을 채택하고 있으며, 거래마다 기본으로 계좌 자금의 10%를 사용하며, 초기 자금은 100,000로 설정되어 있으며, 위자리 운영은 금지되어 있다.

전략적 이점

  1. 간단하고 효과적인 입구 신호: EMA 교차는 널리 사용되고 검증된 거래 신호로, 이해하기 쉽고 실행하기 쉽습니다. 921 주기에서의 파라미터 설정은 중·단기 경향을 더 잘 포착할 수 있습니다.
  2. 다목적 수익 관리10개의 계단형 수익 목표를 설정하여 거래자가 다른 가격 수준에서 수익을 분할할 수 있게 하고, 수익의 일부를 고정시키면서도 수익을 최대한 연장할 수 있게 한다.
  3. 엄격한 위험 관리모든 거래에 대해 명확한 스톱로스를 설정하여 단일 거래의 최대 손실 비율을 제한하고 위험을 효과적으로 제어합니다.
  4. 시각적 지원전략: 모든 입문 신호, 정지 및 목표 지점을 차트에 명확하게 표시하여 거래자가 시장 상황을 직관적으로 이해할 수 있도록 도와줍니다.
  5. 양방향 거래 능력이 전략은 동시에 다중공간 거래를 지원하며, 다양한 시장 환경에서 기회를 찾을 수 있습니다.
  6. 매개 변수 조정: 모든 핵심 매개 변수 (EMA 주기, 스톱 로즈, 수익 목표 등) 는 입력으로 사용자 정의 할 수 있으며, 전략의 유연성을 향상시킵니다.
  7. 완전 자동화전략 실행: 신호 인식에서 출입, 중지 및 수익 목표를 설정, 출입까지 완전히 자동화, 인적 개입이 필요하지 않습니다.

전략적 위험

  1. 가짜 침입 위험: EMA 교차 시스템은 흔들리는 시장에서 가짜 신호를 쉽게 생성할 수 있으며, 이는 빈번한 거래와 손실을 초래할 수 있다. 전략은 강한 신호와 약한 신호를 구분하기 위해 필터를 설정하지 않았다.
  2. 스톱 손실 편향: 현재 전략의 기본 중지 설정은 0.5%이며, 변동성이 높은 시장이나 품종에서 너무 밀착하여 시장 소음으로 촉발 될 수 있습니다.
  3. 단일 지표 의존이 전략은 EMA 교차만을 입시 신호로 사용하고, 다른 기술 지표나 시장 조건과 결합되지 않고 확인되지 않아 오판의 위험이 증가한다.
  4. 자금 관리 고정: 매 거래마다 10%의 계좌 자금을 고정하여 시장의 변동성이나 신호 강도에 따라 동적으로 조정하지 않고 충분히 최적화되지 않을 수 있습니다.
  5. 시장 환경 인식 부족전략: 동향시장과 진동시장을 구분하지 않고, EMA 교차 시스템에 적합하지 않은 시장 환경에서 신호를 생성합니다.
  6. 출전 전략: 여러 수익 목표가 설정되어 있지만, 실제로는 전략이 첫 번째 목표 지점 ((TP1) 에서만 상쇄되거나 역 교차할 때 퇴출되며 진정한 배당 수익을 달성하지 않습니다.

이러한 위험을 줄이기 위해, 트렌드 강도 지표와 같은 추가적인 필터링 조건을 도입하고, 시장의 변동적 동력에 따라 스톱로스 및 타겟 위치 설정을 조정하는 것을 고려하는 것이 좋습니다.

전략 최적화 방향

  1. 필터를 추가: 추가적인 기술 지표를 필터로 도입하는 것, 예를 들어 ADX (중간 트렌드 지수) 가 트렌드 강도를 확인하거나, 상대적으로 강한 지표 (RSI) 가 오버 바이 오버 셀 영역에서 거래를 피하기 위해.
  2. 동적 정지: 고정된 퍼센티지 스톱을 시장의 변동성에 기반한 동적 스톱으로 바꾸어, 예를 들어 ATR (진정한 변동의 평균) 을 사용하여 스톱 거리를 세울 수 있는 계수를 곱한다.
  3. 진정한 다목적 수익을 창출하는 방법: 전략 코드를 수정하여 첫 번째 목표 지점에서만 완전히 평정하는 대신 다른 목표 지점에서 일부 평정하는 것을 구현합니다. 이것은 각 거래를 여러 개의 더 작은 위치로 분할하는 것을 필요로합니다.
  4. 트렌드 식별 메커니즘을 추가합니다.: 트렌드 인식 논리를 추가하고, 트렌드 방향이 명확할 때만 포지션을 열고, 흔들리는 시장에서 자주 거래하는 것을 피한다.
  5. 자금 관리 최적화: 10%의 고정된 사용보다는 신호의 강도, 시장의 변동성 또는 철회 상황에 따라 거래당 자금 비율을 동적으로 조정한다.
  6. 시간 필터 추가시장 개시와 종결 전과 후의 높은 변동성 시기를 피하거나 중요한 경제 자료가 발표되는 시기를 피하십시오.
  7. 이동식 중지: 가격이 유리한 방향으로 일정 거리를 이동한 후, 스톱로스를 손해균형점 또는 더 유리한 위치로 이동하여 이미 이윤을 보호한다.
  8. 트렌드 대비 보호: 극단적인 시장 조건에서, 시장이 급격히 역전될 때 포지션을 계속 유지하지 않기 위해 경고 신호로 역전 지표를 추가합니다.

이러한 최적화를 통해 전략의 안정성과 수익성을 크게 향상시킬 수 있으며, 철회 및 손실 거래의 빈도를 줄일 수 있습니다.

요약하다

이중 지수 이동 평균 다목적 거래 전략은 명확하고 논리적으로 간단한 양적 거래 시스템으로, 클래식 EMA 교차 신호를 기반으로 하며, 다목적 이익 관리 및 중지 손실 설정을 보조한다. 이 전략은 중장기 트렌드 거래에 적합하며, 명확한 트렌드 시장에서 더 잘 작동한다.

전략 설계는 비교적 간단하지만, 거래 전략의 핵심 요소를 포함합니다: 입문 신호, 출구 조건, 손실 관리 및 수익 목표. 전략의 주요 장점은 동작이 명확하고 이해하기 쉽고 실행되는 것과 동시에 좋은 시각적 지원을 제공하는 것입니다.

그러나, 전략은 단일 지표에 의존하는, 시장 환경의 인식 부족과 자금 관리의 유연성 부족과 같은 한계도 있습니다. 트렌드 필터를 추가하고, 손실을 막는 장치를 최적화하고, 진정한 분기 수익을 달성하고, 자금 관리 방법을 개선함으로써 전략에는 큰 최적화 공간이 있습니다.

트레이더에게, 이 전략은 기본 프레임워크로서, 개인의 위험 선호와 거래 품종 특성에 따라 개인화 조정 및 최적화를 통해 더 나은 거래 효과를 얻을 수 있다.

전략 소스 코드
/*backtest
start: 2024-08-21 00:00:00
end: 2025-08-20 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"BNB_USDT","balance":5000}]
*/

//@version=5
strategy("9/21 EMA with 10 Targets + Stoploss", 
     overlay = true,
     initial_capital = 100000,
     default_qty_type = strategy.percent_of_equity,
     default_qty_value = 10,
     pyramiding = 0)

// === Inputs ===
emaFastLen = input.int(9, "Fast EMA Length")
emaSlowLen = input.int(21, "Slow EMA Length")
slPercent  = input.float(0.5, "Stoploss %", step=0.1)

// 10 Targets
tp1Percent = input.float(0.5, "Target 1 %", step=0.1)
tp2Percent = input.float(1.0, "Target 2 %", step=0.1)
tp3Percent = input.float(1.5, "Target 3 %", step=0.1)
tp4Percent = input.float(2.0, "Target 4 %", step=0.1)
tp5Percent = input.float(2.5, "Target 5 %", step=0.1)
tp6Percent = input.float(3.0, "Target 6 %", step=0.1)
tp7Percent = input.float(3.5, "Target 7 %", step=0.1)
tp8Percent = input.float(4.0, "Target 8 %", step=0.1)
tp9Percent = input.float(4.5, "Target 9 %", step=0.1)
tp10Percent = input.float(5.0, "Target 10 %", step=0.1)

// === EMA Calculation ===
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)

// === Entry Conditions ===
longCond  = ta.crossover(emaFast, emaSlow)
shortCond = ta.crossunder(emaFast, emaSlow)

// === Entry ===
if (longCond and strategy.position_size <= 0)
    strategy.entry("BUY", strategy.long)

if (shortCond and strategy.position_size >= 0)
    strategy.entry("SELL", strategy.short)

// === Series Variables for Targets ===
var float tp1 = na
var float tp2 = na
var float tp3 = na
var float tp4 = na
var float tp5 = na
var float tp6 = na
var float tp7 = na
var float tp8 = na
var float tp9 = na
var float tp10 = na
var float stopLevel = na

// === Long Positions ===
if strategy.position_size > 0
    stopLevel := strategy.position_avg_price * (1 - slPercent/100)
    tp1 := strategy.position_avg_price * (1 + tp1Percent/100)
    tp2 := strategy.position_avg_price * (1 + tp2Percent/100)
    tp3 := strategy.position_avg_price * (1 + tp3Percent/100)
    tp4 := strategy.position_avg_price * (1 + tp4Percent/100)
    tp5 := strategy.position_avg_price * (1 + tp5Percent/100)
    tp6 := strategy.position_avg_price * (1 + tp6Percent/100)
    tp7 := strategy.position_avg_price * (1 + tp7Percent/100)
    tp8 := strategy.position_avg_price * (1 + tp8Percent/100)
    tp9 := strategy.position_avg_price * (1 + tp9Percent/100)
    tp10 := strategy.position_avg_price * (1 + tp10Percent/100)

    strategy.exit("Exit Long", "BUY", stop=stopLevel, limit=tp1)

// === Short Positions ===
if strategy.position_size < 0
    stopLevel := strategy.position_avg_price * (1 + slPercent/100)
    tp1 := strategy.position_avg_price * (1 - tp1Percent/100)
    tp2 := strategy.position_avg_price * (1 - tp2Percent/100)
    tp3 := strategy.position_avg_price * (1 - tp3Percent/100)
    tp4 := strategy.position_avg_price * (1 - tp4Percent/100)
    tp5 := strategy.position_avg_price * (1 - tp5Percent/100)
    tp6 := strategy.position_avg_price * (1 - tp6Percent/100)
    tp7 := strategy.position_avg_price * (1 - tp7Percent/100)
    tp8 := strategy.position_avg_price * (1 - tp8Percent/100)
    tp9 := strategy.position_avg_price * (1 - tp9Percent/100)
    tp10 := strategy.position_avg_price * (1 - tp10Percent/100)

    strategy.exit("Exit Short", "SELL", stop=stopLevel, limit=tp1)

// === Plotting ===
plot(emaFast, "EMA 9", color=color.yellow, linewidth=2)
plot(emaSlow, "EMA 21", color=color.orange, linewidth=2)

// Global plots (avoid local scope error)
plot(tp1,  "TP1",  color=color.new(color.green, 0))
plot(tp2,  "TP2",  color=color.new(color.green, 10))
plot(tp3,  "TP3",  color=color.new(color.green, 20))
plot(tp4,  "TP4",  color=color.new(color.green, 30))
plot(tp5,  "TP5",  color=color.new(color.green, 40))
plot(tp6,  "TP6",  color=color.new(color.green, 50))
plot(tp7,  "TP7",  color=color.new(color.green, 60))
plot(tp8,  "TP8",  color=color.new(color.green, 70))
plot(tp9,  "TP9",  color=color.new(color.green, 80))
plot(tp10, "TP10", color=color.new(color.green, 90))
plot(stopLevel, "Stoploss", color=color.red, linewidth=2)

// Entry Signals
plotshape(longCond, title="BUY Signal", style=shape.labelup, color=color.green, text="BUY")
plotshape(shortCond, title="SELL Signal", style=shape.labeldown, color=color.red, text="SELL")