이중 이동 평균 손절매 이익 및 손절매 추세 거래 전략

SMA MA TP SL CROSSOVER
생성 날짜: 2025-02-20 15:08:54 마지막으로 수정됨: 2025-02-27 17:36:23
복사: 0 클릭수: 331
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

이중 이동 평균 손절매 이익 및 손절매 추세 거래 전략 이중 이동 평균 손절매 이익 및 손절매 추세 거래 전략

개요

이 전략은 위험 관리 메커니즘과 결합된 쌍평균선 교차를 기반으로 한 트렌드 추적 거래 시스템입니다. 전략은 시장 추세를 포착하기 위해 9 주기와 21 주기의 간단한 이동 평균 ((SMA) 을 사용하며, 위험을 제어하기 위해 1%의 스톱 및 스톱을 설정합니다.

전략 원칙

전략의 핵심 논리는 시장 경향의 연속성 특성에 기초한다. 짧은 (계 9주기) 와 긴 (계 21주기) 이동 평균의 교차점을 관찰함으로써 트렌드의 전환점을 판단한다. 단기 평균선 상에서 긴 평균선을 통과하면 “골드 포크”가 형성되어 상승 추세가 시작되는 것을 나타내고, 시스템은 여러 신호를 발산한다. 짧은 평균선 아래에서 긴 평균선을 통과하면 “죽은 포크”가 형성되어 상승 추세가 끝날 수 있음을 나타내고, 시스템은 평형 출장한다. 동시에, 전략은 1%의 중지 손실 및 중지 장치를 도입하여 시장에서 불리한 움직임이 발생했을 때 적시에 손실을 중지하거나 예상 이익이 발생했을 때 수익을 고정한다.

전략적 이점

  1. 트렌드 잡기 능력: 트렌드 전환점을 잡는 쌍평선 교차로로 시장의 주요 트렌드를 더 잘 잡을 수 있다.
  2. 리스크 제어: 고정 비율의 스톱로스 및 스톱 스을 설정하여 단일 거래의 위험을 효과적으로 제어한다.
  3. 자동화 수준: 시스템이 완전히 자동으로 작동하며, 인간의 개입이 필요하지 않습니다.
  4. 그래픽 인터페이스를 통해 거래 신호와 리스크 제어 영역을 명확하게 보여줍니다.
  5. 매개 변수 최적화 유연성: 평균 라인 주기와 스톱 스톱 비율은 시장 특성에 따라 조정할 수 있다.

전략적 위험

  1. 흔들림 시장 위험: 가로판 흔들림 시장에서, 빈번한 평행선 교차는 가짜 신호를 유발할 수 있다.
  2. 슬라이드 포인트 위험: 시장이 급격하게 변동할 때, 실제 거래 가격은 신호 가격과 큰 오차를 일으킬 수 있다.
  3. 트렌드 반전 위험: 강한 트렌드가 갑자기 반전되면 고정된 스톱로드는 큰 변동에 대처할 수 없습니다.
  4. 매개 변수 의존성: 전략의 성능은 평균선 주기 및 스톱 스톱 매개 변수 설정에 민감하다.

전략 최적화 방향

  1. 트렌드 필터를 도입합니다. 트렌드 강도 지표인 ADX를 추가하여 트렌드가 명확한 경우에만 포지션을 열 수 있습니다.
  2. 동적 중지 손해 메커니즘: ATR 또는 변동률을 사용하여 동적으로 중지 손해를 조정할 수 있습니다.
  3. 거래량 확인이 증가: 거래량을 거래 신호의 보조 확인 지표로 사용한다.
  4. 최적화 매개 변수는 스스로 적응한다: 시장의 변동 특성에 따라 동적으로 평균선 주기를 조정한다.
  5. 트렌드 강도 필터를 추가합니다. RSI와 같은 지표와 결합하여 트렌드 강도를 판단할 수 있습니다.

요약하다

이 전략은 쌍평선 교차로 트렌드를 포착하고, 손해 중지 장치와 결합하여 위험을 제어하는, 보다 완전한 트렌드 추적 거래 시스템이다. 불안정한 시장에서 거짓 신호를 생성 할 수 있지만, 합리적인 파라미터를 최적화하고 보조 지표를 추가하면 전략의 안정성과 수익성을 더욱 향상시킬 수 있다. 전략의 핵심 장점은 자동화 정도가 높고, 위험 제어가 완벽하여 중·장기 트렌드 추적을 위한 기본 전략 프레임워크로 적합하다.

전략 소스 코드
/*backtest
start: 2024-02-21 00:00:00
end: 2024-12-13 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Moving Average Crossover with Stop Loss and Take Profit", overlay=true)

// Parameters for moving averages
short_length = input.int(9, title="Short Moving Average Length")  // Optimized for 15-minute time frame
long_length = input.int(21, title="Long Moving Average Length")   // Optimized for 15-minute time frame

// Parameters for risk management
stop_loss_percent = input.float(1.0, title="Stop Loss (%)") / 100  // 1% stop loss
take_profit_percent = input.float(1.0, title="Take Profit (%)") / 100  // 1% take profit

// Calculate moving averages
short_ma = ta.sma(close, short_length)
long_ma = ta.sma(close, long_length)

// Plot moving averages
plot(short_ma, color=color.blue, title="Short MA")
plot(long_ma, color=color.orange, title="Long MA")

// Entry and exit conditions
long_condition = ta.crossover(short_ma, long_ma)  // Golden Cross
short_condition = ta.crossunder(short_ma, long_ma)  // Death Cross

// Execute strategy with stop loss and take profit
if (long_condition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Long", stop=strategy.position_avg_price * (1 - stop_loss_percent), limit=strategy.position_avg_price * (1 + take_profit_percent)  )

if (short_condition)
    strategy.close("Long")  // Close long position on Death Cross

// Plot Buy/Sell Signals
plotshape(series=long_condition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=short_condition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")

// Draw 1% stop loss level as a transparent red rectangle
var float stop_loss_level = na
var float entry_price = na
if (strategy.position_size > 0)  // Only update when in a trade
    stop_loss_level := strategy.position_avg_price * (1 - stop_loss_percent)
    entry_price := strategy.position_avg_price

// Create transparent colors
transparent_red = color.new(color.black, 90)  // 90% transparency
transparent_green = color.new(color.green, 90)  // 90% transparency

// Plot stop loss and entry levels conditionally
plot(strategy.position_size > 0 ? stop_loss_level : na, color=transparent_red, title="Stop Loss Level", linewidth=1)
plot(strategy.position_size > 0 ? entry_price : na, color=transparent_green, title="Entry Price", linewidth=1)

// Fill the area between stop loss and entry price conditionally
fill( plot(strategy.position_size > 0 ? stop_loss_level : na),  plot(strategy.position_size > 0 ? entry_price : na),  color=transparent_red)