지수 이동 평균과 동적 트레일링 스톱 로스를 갖춘 다차원 추세 거래 시스템

EMA TSL Pivot MT5 AUTOMATED TRADING risk management TREND FOLLOWING
생성 날짜: 2025-04-01 11:21:46 마지막으로 수정됨: 2025-04-01 11:21:46
복사: 0 클릭수: 356
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

지수 이동 평균과 동적 트레일링 스톱 로스를 갖춘 다차원 추세 거래 시스템 지수 이동 평균과 동적 트레일링 스톱 로스를 갖춘 다차원 추세 거래 시스템

개요

지수 이동 평균과 동적 추적 스톱은 지수 이동 평균과 동적 추적 스톱을 가진 다차원 트렌드 거래 시스템 MetaTrader 5 플랫폼을 위해 설계된 자동 거래 로봇이다. 전략의 핵심은 지수 이동 평균을 통합한다. EMA 필터, 동적 추적 스톱 메커니즘과 위험 관리 기반의 위치 계산 방법을 결합하여 거래 입시 및 출력을 최적화한다. 이 시스템은 EMA 트렌드 필터를 사용하여 거래 방향이 시장 추세와 일치하도록 보장하고, 동적으로 추적 스톱을 통해 손실을 보호하여 수익을 창출하며, 정확한 위험 비율 방식을 사용하여 적절한 거래를 자동으로 계산하여 각 거래의 위험 경로를 최대한 제어한다.

전략 원칙

이 거래 시스템은 다음과 같은 몇 가지 핵심 구성 요소와 논리에 기반하여 작동합니다.

  1. EMA 트렌드 필터시스템 기본으로 8주기 EMA를 트렌드 지표로 사용하고, EMA가 상승할 때만 구매를 하고, EMA가 하락할 때만 판매를 합니다. 이것은 거래 방향이 단기 트렌드와 일치하도록 하고, 역전 거래의 가능성을 감소시킵니다.

  2. 핵심 가격 식별 메커니즘전략은 핵심 가격 수준으로 피벗 고점과 낮은 점 ((지방적 극치) 을 사용하며, 설정된 회귀 주기 (기본 3 기둥) 을 통해 이러한 핵심 포인트 지점을 식별한다. 이 피벗 지점은 스톱로스 및 스톱 스톱 계산의 기준 지점으로 사용되며, 상표의 촉발 가격으로도 사용된다.

  3. 스마트 주문 실행

    • 다단 입시: 가격이 가장 가까운 피벗 고점으로부터 일정 거리에 떨어져 있고, EMA가 상승하는 경우, 피벗 고점 위치에서 구매 중지 명령을 설정한다.
    • 공허 입시: 가격이 가장 가까운 피벗 하위점으로부터 일정 거리에 있을 때, 그리고 EMA가 하향으로 향할 때, 피벗 하위점 위치에서 스톱을 판매한다.
  4. 위험 관리 시스템전략: 전략은 기본적으로 각 거래의 위험을 계좌 자금의 4%로 설정합니다. 이 매개 변수는 자동으로 적절한 거래량을 계산하여 위험 통제의 일관성을 보장합니다.

  5. 동적 상쇄 메커니즘: 거래 수익이 설정된 트리거 포인트를 넘어섰을 때 (기본 15 포인트), 추적 스톱 손실 기능이 활성화되며, 스톱 손실 라인은 가격 이동에 따라 움직이며, 달성 된 수익을 보호하면서 거래가 수익을 계속 얻을 수 있습니다.

  6. 시간 필터: 거래자는 거래의 시작과 종료 시간을 설정할 수 있으며, 특정 시간대에 거래하는 것을 피합니다. 가격이 거래되지 않는 시간에 움직이면, 시스템은 자동으로 이익을 보호하기 위해 포지션을 평정합니다.

전략적 이점

이 전략의 코드 구조와 논리를 깊이 살펴보면 다음과 같은 중요한 장점을 볼 수 있습니다.

  1. 트렌드 동시 거래EMA 필터링 메커니즘을 통해, 전략은 오직 확립된 추세 방향에서만 거래되는 것을 보장하고, 거래 신호의 품질과 신뢰성을 크게 향상시키고, 빈번한 흔들림 시장의 가짜 돌파구를 피한다.

  2. 정확한 위험 통제: 계정 비율에 기반한 위험 관리 방식은 다양한 시장 조건과 계정 크기에 따라 전략이 일관된 위험 수준을 유지하도록 허용하며, 과도한 레버리지와 부적절한 자금 관리로 인한 계정 침식을 방지합니다.

  3. 동적 보호 장치: 트래킹 스톱 기능은 두 가지 보호를 제공합니다. 최대 손실을 제한하는 것 ( 고정 스톱을 통해) 과 수익을 보호하는 것 ( 트래킹 스톱을 통해) 은 특히 변동하는 시장에서 중요합니다.

  4. 핵심 가격에 기반한 입점피벗 포인트를 입시 신호로 사용하는 것은 전략이 기술적으로 중요한 가격 수준에서 거래할 수 있도록 해줍니다. 이러한 수준은 일반적으로 지지 또는 저항 지점을 나타냅니다. 거래의 정확성을 향상시킵니다.

  5. 적응력여러 사용자 정의 가능한 매개 변수는 거래자가 다양한 시장 조건과 개인 위험 선호에 따라 전략을 조정할 수 있도록 허용하며, 전략의 적응성과 장기간 사용성을 강화합니다.

  6. 비효율적인 시간을 피하세요.시간 필터 기능: 전략이 고효율 시장 시간 내에만 작동하도록 보장하고, 시장의 변동성이 낮거나 유동성이 부족한 시간에 비효율적인 거래를 피합니다.

  7. 시각적 피드백: 전략은 EMA와 피벗 포인트의 그래픽 표시를 제공하여 거래자가 거래 논리와 시장 상황을 직관적으로 이해할 수 있도록 해 전략 최적화 및 성능 평가를 용이하게합니다.

전략적 위험

이 전략은 훌륭하게 설계되었지만, 잠재적인 위험과 제약이 존재하며, 트레이더들은 이를 충분히 알아야 합니다.

  1. 빠른 시장 점유율의 위험극한 시장 조건에서, 특히 주요 뉴스 발표 또는 블랙 스 이벤트 기간 동안, 정지 명령은 설정된 가격으로 실행되지 않을 수 있으며, 예상보다 실제 손실이 발생할 수 있습니다. 완화 방법은 거래량을 적절하게 줄이거나 자동 거래를 중단하는 것입니다.

  2. 추세 반전 위험:8 주기적 EMA는 단기적인 지표이며, 수평 또는 급격하게 변하는 시장에서 잘못된 신호를 일으킬 수 있습니다. 이 위험을 줄이기 위해 다중 시간 프레임 분석이나 추가적인 트렌드 확인 지표를 추가하는 것이 고려 될 수 있습니다.

  3. 매개변수 최적화 위험과도한 최적화 전략의 매개 변수는 “곡선 적합” 문제로 이어질 수 있습니다. 즉, 전략은 역사적 데이터에서 잘 작동하지만 실제 거래에서 잘 작동하지 않습니다. 합리적인 샘플 외 테스트와 전향 검증을 사용하여 매개 변수의 안정성을 검증하는 것이 좋습니다.

  4. 시스템 의존 위험: 완전히 자동화된 시스템으로서, 이 전략은 거래 플랫폼의 안정성과 연결성에 의존한다. 기술적 문제로 인해 주문 실행이 지연되거나 실패할 수 있다.

  5. 고정 점수 위험전략: 고정 점수를 사용하여 중지, 중지 및 추적 중지 트리거를 설정합니다. 이것은 다양한 변동성 환경에서 충분히 유연하지 않을 수 있습니다. ATR (평균 실제 파장) 을 기반으로 한 동적 점수를 사용하는 것을 고려하여 다른 시장 조건에 더 적합 할 수 있습니다.

전략 최적화 방향

코드의 심층적인 분석을 바탕으로, 이 전략이 더 최적화될 수 있는 방향은 다음과 같습니다:

  1. 동적 변수 조정고정 점수를 (예: 정지, 중단) 시장의 변동성에 기반한 동적 계산으로 변환합니다. 예를 들어 ATR 지표를 사용하여 이러한 매개 변수를 조정하여 전략이 다른 시장 조건과 시간 프레임에 더 잘 적응 할 수 있습니다.

  2. 다중 시간 프레임 분석더 장기적인 트렌드 필터를 도입하여, 예를 들어, 더 높은 시간 프레임에 추가 EMA를 계산하고, 단기 및 장기적인 트렌드가 일치할 때만 거래를 실행하면, 가짜 신호를 줄이고 전체적인 승률을 높일 수 있습니다.

  3. 입시 최적화: 현재 전략은 간단한 피벗 포인트를 입문 신호로 사용하며, 입문 정확성을 높이기 위해 상대적으로 강한 약한 지수 (RSI), 무작위 지수 또는 MACD와 같은 추가 확인 지표를 추가하는 것을 고려할 수 있습니다.

  4. 지능형 시간 필터고정 시간 필터를 시장 세션 기반의 스마트 필터로 업그레이드하여 아시아, 유럽 및 미국 거래 시간대의 높은 변동성과 낮은 변동성을 자동으로 식별하고 거래 실행 시간을 최적화합니다.

  5. 위험 동적 조정: 최근 전략의 성과에 따라 동적으로 위험을 조정하는 비율, 예를 들어, 연속적인 손실 후 자동으로 위험 을 낮추고, 수익 추세에서 정상적인 위험 수준을 단계적으로 회복하고, 더 똑똑한 자금 관리를 구현합니다.

  6. 상관관계 분석다중 품종 거래에서 연관성 필터를 도입하여 고도로 연관된 시장에서 비슷한 방향의 여러 포지션을 동시에 보유하는 것을 피하여 전체 포트폴리오 위험을 줄입니다.

  7. 기계 학습 강화: 기본 기계 학습 알고리즘을 도입하여 파라미터 선택을 최적화하거나 최적의 거래 시기를 예측하는 것을 고려하십시오. 이는 전략이 역사적인 패턴에서 배우고 스스로 개선할 수 있도록 할 것입니다.

요약하다

지수 이동 평균과 동적 트래킹 스톱 로즈의 다차원 트렌드 트레이딩 시스템은 신중하게 설계된 자동화 트레이딩 솔루션이며, 특히 트렌드가 명확한 시장 환경에서 체계적으로 거래를 원하는 투자자에게 적합합니다. 이 전략은 EMA 트렌드 필터링을 통해 거래 방향이 시장 추세와 일치하도록 보장하며, 피벗 포인트의 정확한 입수 및 동적 트래킹 스톱 로즈 출구 메커니즘과 결합하여 완전한 거래 시스템 프레임 워크를 구성합니다.

전략의 주요 장점은 위험에 대한 정확한 제어, 동향 동기화 된 거래 방법 및 유연한 매개 변수 설정으로 인해 다양한 시장 환경에 적응할 수 있습니다. 그러나 거래자는 잠재적인 슬라이드 위험, 트렌드 역전 위험 및 고정 매개 변수의 한계를 인식해야합니다.

이 전략은 ATR 기반의 동적 변수, 다중 시간 프레임 분석 및 더 복잡한 입문 확인 메커니즘을 도입함으로써 더욱 최적화 될 수 있으며, 다양한 시장 조건에서 거친성과 안정성을 향상시킬 수 있습니다. 이 전략은 경험이 풍부한 거래자와 자동화 거래 초보자에게는 개인 위험 선호 및 거래 목표에 따라 조정 및 확장 할 수있는 견고한 기반을 제공합니다.

전략 소스 코드
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-31 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Trend Robot with EMA & Trailing Stop", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=4)

//===== Inputs =====//
riskPercent       = input.float(title="Risk Percent", defval=4.0, step=0.1)
tpPoints          = input.int(title="Take Profit Points", defval=300)
slPoints          = input.int(title="Stop Loss Points", defval=150)
tslTriggerPoints  = input.int(title="Trailing SL Trigger Points", defval=15)
tslPoints         = input.int(title="Trailing SL Points", defval=10)
orderDistPoints   = input.int(title="Order Distance Points", defval=50)
emaPeriod         = input.int(title="EMA Period", defval=8)
useEmaFilter      = input.bool(title="Use EMA Filter", defval=true)
startHour         = input.int(title="Start Hour (0 = no restriction)", defval=0, minval=0, maxval=23)
endHour           = input.int(title="End Hour (0 = no restriction)", defval=0, minval=0, maxval=23)
barsN             = input.int(title="Pivot Lookback (BarsN)", defval=3)

//===== Conversion Factor =====//
// syminfo.mintick is used as the smallest price increment.
minTick = syminfo.mintick

//===== EMA Calculation & Filter Conditions =====//
emaValue = ta.ema(close, emaPeriod)
isEmaBullish = not useEmaFilter or (emaValue > emaValue[1])
isEmaBearish = not useEmaFilter or (emaValue < emaValue[1])

//===== Time Filter =====//
currentHour = hour(time)
sessionOK = true
if startHour != 0 and currentHour < startHour
    sessionOK := false
if endHour != 0 and currentHour >= endHour
    sessionOK := false

//===== Out-of-Session Position Closing =====//
if not sessionOK and strategy.position_size != 0
    // Close all existing positions when outside session hours
    strategy.close("Long", comment="Session Close")
    strategy.close("Short", comment="Session Close")

//===== Pivot (Local Extreme) Detection =====//
// ta.pivothigh and ta.pivotlow return a value only at the pivot bar (after lookback period).
pivotHigh = ta.pivothigh(high, barsN, barsN)
pivotLow  = ta.pivotlow(low, barsN, barsN)

//===== Entry Conditions & Orders =====//
// Only evaluate at confirmed (closed) bars and during valid session.
if barstate.isconfirmed and sessionOK
    //---- Long Entry Condition ----//
    if strategy.position_size <= 0 and isEmaBullish and not na(pivotHigh)
        if close < (pivotHigh - orderDistPoints * minTick)
            // Place a Buy Stop order at the pivotHigh price.
            strategy.order("Long", strategy.long, stop=pivotHigh, comment="BuyStop")
            // Attach an exit order with SL, TP and trailing stop parameters.
            strategy.exit("Long Exit", from_entry="Long", stop=pivotHigh - slPoints * minTick, limit=pivotHigh + tpPoints * minTick, trail_points=tslTriggerPoints, trail_offset=tslPoints)
            
    //---- Short Entry Condition ----//
    if strategy.position_size >= 0 and isEmaBearish and not na(pivotLow)
        if close > (pivotLow + orderDistPoints * minTick)
            // Place a Sell Stop order at the pivotLow price.
            strategy.order("Short", strategy.short, stop=pivotLow, comment="SellStop")
            // Attach an exit order with SL, TP and trailing stop parameters.
            strategy.exit("Short Exit", from_entry="Short", stop=pivotLow + slPoints * minTick, limit=pivotLow - tpPoints * minTick, trail_points=tslTriggerPoints, trail_offset=tslPoints)

//===== Plots for Visual Reference =====//
plot(emaValue, color=color.blue, title="EMA")
plot(pivotHigh, style=plot.style_circles, color=color.green, title="Pivot High")
plot(pivotLow,  style=plot.style_circles, color=color.red, title="Pivot Low")