다중 타겟 이동 평균 교차 추세 추종 전략

EMA SL TP
생성 날짜: 2025-02-08 15:22:15 마지막으로 수정됨: 2025-02-08 15:22:15
복사: 6 클릭수: 391
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중 타겟 이동 평균 교차 추세 추종 전략

개요

이 전략은 평행선 (EMA) 교차 신호에 기반한 트렌드 추적 시스템이다. 34주기 EMA를 주요 트렌드 지표로 사용하고, 분기 수익 및 위험 제어 메커니즘과 결합하여 완전히 자동화된 거래를 구현한다. 전략의 핵심은 가격과 EMA의 교차를 통해 트렌드 시작점을 포착하고, 다중 수익 목표를 설정하여 수익 기회를 극대화하는 것이다.

전략 원칙

이 전략은 다음과 같은 핵심 원칙에 기반합니다.

  1. 34주기 EMA를 트렌드 판단 지표로 사용함
  2. 가격이 EMA를 상향으로 넘어가면 EMA 가격 위치에서 더 많은 포지션을 만듭니다.
  3. 세 배의 수익 목표 (5%, 10%, 15%) 를 사용하여 분량 정지
  4. 7%의 스톱로드를 설정하여 리스크를 제어합니다.
  5. 10%의 지위를 장기간 보유하여 큰 추세를 파악하는 방법
  6. 최소 8시간 간격으로 과도한 거래를 피하십시오.
  7. 고정 거래량과 동적 포지션 크기를 지원하는 두 가지 방법

전략적 이점

  1. 다중 수익을 위한 디자인으로, 다양한 시장 환경에서도 잘 작동합니다.
  2. 일부 지분을 장기 보유로 유지함으로써 큰 추세에서 오는 수익을 누릴 수 있습니다.
  3. 리버리지 거래가 가능하며, 리스크 취향에 따라 조정할 수 있습니다.
  4. 과도한 거래를 막는 장치가 있습니다.
  5. 고정 또는 동적 위치를 선택할 수 있는 위치 관리의 유연성
  6. 완전히 자동화되고, 사람의 개입이 필요하지 않습니다.
  7. 다양한 거래 스타일에 맞게 조정 가능한 변수

전략적 위험

  1. EMA는 지연된 지표로서 입시 시기를 지연시킬 수 있습니다.
  2. 불안한 시장에서 여러 번의 중단이 발생할 수 있습니다.
  3. 레버를 사용하면 손실이 커질 수 있습니다.
  4. 고정 비율의 정지 손실은 높은 변동성 시장에서 충분히 유연하지 않을 수 있습니다.
  5. 다중 수익 목표가 강세를 조기 종료할 수 있다 대책:
  • 트렌드가 뚜렷한 시장에서 사용하는 것이 좋습니다.
  • 시장의 변동에 따라 조정된 손실 비율
  • 레버를 조심하세요
  • 최적화 매개 변수를 주기적으로 재검토한다

전략 최적화 방향

  1. 트렌드 강도 필터를 늘리고, 진입 품질을 향상시킵니다.
  2. ATR 상쇄와 같은 동적 상쇄 메커니즘을 도입합니다.
  3. 트랜지먼트 확인 지표
  4. 적응된 수익 목표 메커니즘 개발
  5. 시장 판단 모듈을 추가합니다.
  6. 거래 간격을 최적화하는 동적 조정 장치 이러한 최적화는 전략의 안정성과 수익성을 높이고, 잘못된 신호의 영향을 줄일 수 있습니다.

요약하다

이것은 합리적이고 논리적으로 명확하게 설계된 트렌드 추적 전략이다. 동선을 가로질러 트렌드를 포착하고, 다중 수익 목표를 사용하여 위험을 관리하며, 일부 포지션을 유지하여 큰 트렌드를 잡는다. 전략은 조정성이 강하여 다양한 위험 선호를 가진 거래자가 사용할 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-02-08 00:00:00
end: 2025-02-06 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA25 Long Strategy", overlay=true)

// Inputs
initial_capital = input.float(50000, title="Initial Capital ($)")
leverage = input.int(1, title="Leverage")
mode = input.string("Fixed Volume", title="Position Sizing Mode", options=["Fixed Volume", "Current Balance"])
ema_length = input.int(34, title="EMA Length")
stop_loss_percent = input.float(7, title="Stop Loss (%)", step=0.1) / 100
take_profit_1_percent = input.float(5, title="Take Profit 1 (%)", step=0.1) / 100
take_profit_2_percent = input.float(10, title="Take Profit 2 (%)", step=0.1) / 100
take_profit_3_percent = input.float(15, title="Take Profit 3 (%)", step=0.1) / 100
position_size_percent = input.float(100, title="Position Size (%)", step=1) / 100
long_term_hold_percent = input.float(10, title="Long Term Hold (%)", step=1) / 100
trade_delay = input.int(8, title="Trade Delay (hours)", minval=1) * 60  // Convert hours to minutes

// Calculate EMA
ema = ta.ema(close, ema_length)
// Plot EMA
plot(ema, title="EMA25", color=color.blue)

// Determine if a new trade can be placed
var float last_trade_time = na
can_trade = na(last_trade_time) or (time - last_trade_time) > trade_delay * 60 * 1000

// Determine position size based on selected mode
var float position_size = na
if (mode == "Fixed Volume")
    position_size := initial_capital * leverage * position_size_percent / close
else
    position_size := strategy.equity * leverage * position_size_percent / close

// Entry Condition
var float entry_price = na
price_crossed_ema_up = ta.crossover(close, ema)
price_crossed_ema_down = ta.crossunder(close, ema)

if ((price_crossed_ema_up or price_crossed_ema_down) and can_trade)
    entry_price := ema
    strategy.entry("Long", strategy.long, qty=position_size, limit=entry_price)
    last_trade_time := time
    label.new(bar_index, entry_price, text="Entry", color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

// Stop Loss
strategy.exit("Stop Loss", from_entry="Long", stop=entry_price * (1 - stop_loss_percent))

// Take Profits
take_profit_1_price = entry_price * (1 + take_profit_1_percent)
take_profit_2_price = entry_price * (1 + take_profit_2_percent)
take_profit_3_price = entry_price * (1 + take_profit_3_percent)

strategy.exit("Take Profit 1", from_entry="Long", limit=take_profit_1_price, qty=position_size / 3)
strategy.exit("Take Profit 2", from_entry="Long", limit=take_profit_2_price, qty=position_size / 3)
strategy.exit("Take Profit 3", from_entry="Long", limit=take_profit_3_price, qty=position_size / 3)

// Long Term Hold (10% of position)
hold_qty = position_size * long_term_hold_percent
if (strategy.position_size > hold_qty)
    strategy.close("Long Term Hold")