다기간 이동평균 교차 전략을 통한 동적 추세 추적

SMA EMA MA
생성 날짜: 2024-12-13 10:40:30 마지막으로 수정됨: 2024-12-13 10:40:30
복사: 0 클릭수: 475
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다기간 이동평균 교차 전략을 통한 동적 추세 추적

개요

이 전략은 다주기 평균선을 기반으로 한 트렌드 추적 거래 시스템이다. 전략은 89주기 및 21주기 간단한 이동 평균 (SMA) 을 사용하여 시장의 전반적인 트렌드 방향을 결정하고, 5주기 지수 이동 평균 (EMA) 의 최고점과 최저점을 결합하여 특정 거래 신호를 찾는다. 전략은 이중 포지션 관리 방식을 채택하고, 고정된 스톱 손실과 추적 스톱을 결합하여 위험을 제어한다.

전략 원칙

전략의 핵심 논리에는 다음과 같은 핵심 요소가 포함됩니다.

  1. 추세 판단: 89주기 및 21주기 SMA의 상대적인 위치와 가격 위치를 사용하여 추세를 결정한다. 가격과 5주기 EMA가 모두 21주기 SMA 위에 있고, 21주기 SMA가 89주기 SMA 위에 있을 때, 상승 추세로 판단한다. 반대로 하향 추세이다.
  2. 진입 신호: 상승 추세에서, 가격이 5주기 EMA 하위점으로 회전할 때 진입한다. 하향 추세에서, 가격이 5주기 EMA 하위점으로 반발할 때 진입한다.
  3. 포지션 관리: 신호 발동마다 두 개의 동일한 수의 계약 포지션을 열기.
  4. 위험 제어: 첫 번째 포지션에 대해 고정된 중지 및 수익 목표를 적용하고, 두 번째 포지션에 대해 추적된 중지 방식을 적용하여 관리한다.

전략적 이점

  1. 다중 시간 주기의 확인: 다른 주기의 이동 평균 조합을 통해 시장 추세를 더 포괄적으로 판단하여 잘못된 신호를 줄일 수 있습니다.
  2. 유연한 스톱 방식: 고정 스톱과 추적 스톱을 결합하여 단기 변동에서 이익을 얻을 수 있지만 큰 추세를 놓치지 않습니다.
  3. 위험 제어: 명확한 중지 지점을 설정하고, 각 거래 신호의 위험 을 고정한다.
  4. 체계화 된 운영: 거래 규칙이 명확하고, 주관적 판단의 영향을 받지 않으며, 프로그램적으로 구현하기 쉽다.

전략적 위험

  1. 흔들림 시장 위험: 수평 평행선 교차는 수평 평행선 교차로 인해 과도한 가짜 신호가 발생할 수 있습니다.
  2. 슬라이드 포인트 위험: 시장의 변동이 큰 경우, 실제 거래 가격은 이론적 신호 가격과 큰 편차를 일으킬 수 있다.
  3. 자금 관리 위험: 고정 계약 수 거래 방식은 모든 자금 규모에 적합하지 않을 수 있습니다.
  4. 변수 민감성: 이동 평균 주기 선택은 전략 성능에 큰 영향을 미치며, 다른 시장에 대한 최적화가 필요합니다.

전략 최적화 방향

  1. 역동적인 포지션 관리: 계좌의 순가치와 시장의 변동성에 따라 거래 계약 수를 역동적으로 조정하는 것이 좋습니다.
  2. 시장 환경 필터: 트렌드 강도 지표를 증가 시키고 (ADX와 같은), 흔들리는 시장에서 거래 빈도를 줄인다.
  3. 스톱 로즈 최적화: ATR를 사용하여 스톱 로즈 거리를 동적으로 조정하여 다양한 시장 환경에 대한 전략의 적응성을 향상시킬 수 있습니다.
  4. 신호 확인: 거래량, 동력 등의 보조 지표를 증가시키고 거래 신호의 신뢰성을 향상시킨다.

요약하다

이 전략은 구조적인 트렌드 추적 시스템으로, 다중 주기평균선 조합을 통해 시장 트렌드를 포착하고, 유연한 포지션 관리와 스톱 스톱 손실 방식을 사용하여 위험을 제어한다. 약간의 최적화 공간이 있지만, 전략의 기본 프레임 워크는 실용성과 확장성이 좋다. 다양한 거래 품종과 시장 환경에 맞게, 매개 변수를 조정하고 필터링 조건을 추가하여 전략의 안정성을 향상시킬 수 있다.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tobiashartemink2

//@version=5
strategy("High 5 Trading Technique", overlay=true)

// --- Input parameters ---
sma89Length = input.int(title="SMA 89 Length", defval=89)
sma21Length = input.int(title="SMA 21 Length", defval=21)
ema5HighLength = input.int(title="EMA 5 High Length", defval=5)
ema5LowLength = input.int(title="EMA 5 Low Length", defval=5)
contracts = input.int(title="Aantal Contracten", defval=1)
stopLossPoints = input.int(title="Stop Loss Points per Contract", defval=25)
takeProfitPoints = input.int(title="Take Profit Points per Contract", defval=25)

// --- Calculate moving averages ---
sma89 = ta.sma(close, sma89Length)
sma21 = ta.sma(close, sma21Length)
ema5High = ta.ema(high, ema5HighLength)
ema5Low = ta.ema(low, ema5LowLength)

// --- Identify trend and order of moving averages ---
longSetup = close > sma89 and close > sma21 and ema5High > sma21 and sma21 > sma89
shortSetup = close < sma89 and close < sma21 and ema5Low < sma21 and sma21 < sma89

// --- Entry signals ---
longTrigger = longSetup and close <= ema5Low
shortTrigger = shortSetup and close >= ema5High

// --- Entry orders ---
if (longTrigger)
    strategy.entry("Long 1", strategy.long, qty=contracts)
    strategy.entry("Long 2", strategy.long, qty=contracts)

if (shortTrigger)
    strategy.entry("Short 1", strategy.short, qty=contracts)
    strategy.entry("Short 2", strategy.short, qty=contracts)

// --- Stop-loss and take-profit for long positions ---
if (strategy.position_size > 0)
    strategy.exit("Exit Long 1", "Long 1", stop=strategy.position_avg_price - stopLossPoints, limit=strategy.position_avg_price + takeProfitPoints)
    strategy.exit("Exit Long 2", "Long 2", stop=strategy.position_avg_price - stopLossPoints, trail_offset=takeProfitPoints, trail_points=takeProfitPoints)

// --- Stop-loss and take-profit for short positions ---
if (strategy.position_size < 0)
    strategy.exit("Exit Short 1", "Short 1", stop=strategy.position_avg_price + stopLossPoints, limit=strategy.position_avg_price - takeProfitPoints)
    strategy.exit("Exit Short 2", "Short 2", stop=strategy.position_avg_price + stopLossPoints, trail_offset=takeProfitPoints, trail_points=takeProfitPoints)

// --- Plot moving averages ---
plot(sma89, color=color.blue, linewidth=2)
plot(sma21, color=color.red, linewidth=2)
plot(ema5High, color=color.green, linewidth=2)
plot(ema5Low, color=color.orange, linewidth=2)