다중 시간 프레임 추세 추종 및 모멘텀 확인 정량적 거래 전략

SMA EMA RSI MACD ATR
생성 날짜: 2025-02-28 09:53:59 마지막으로 수정됨: 2025-02-28 09:53:59
복사: 2 클릭수: 411
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

다중 시간 프레임 추세 추종 및 모멘텀 확인 정량적 거래 전략 다중 시간 프레임 추세 추종 및 모멘텀 확인 정량적 거래 전략

개요

이것은 다중 시간 프레임 분석과 기술 지표 확인을 결합한 종합적인 양적 거래 전략이다. 이 전략의 핵심은 서로 다른 시간 주기 (H1, H4 및 일계) 의 이동 평균 교차 상태를 통해 시장 추세 강도를 평가하고 RSI와 MACD 등동량 지표와 결합하여 거래 신호 확인을 수행하는 것이다.

전략 원칙

이 전략의 핵심은 다차원 시장 추세를 분석하고 확인하는 것입니다.

  1. 다중 시간 프레임 트렌드 점수 시스템:

    • 3개의 시간 주기 (H1, H4 및 일선) 의 빠른 (50주기) 및 느린 (200주기) 이동 평균을 비교하여 종합 트렌드 점수를 계산합니다.
    • H1 시간 프레임 권한 부여 ± 1 분, H4 시간 프레임 권한 부여 ± 2 분, 해상 시간 프레임 권한 부여 ± 3 분
    • 빠른 선이 느린 선 위에 있을 때 점수가 긍정적으로, 반대로 점수가 부정적으로, 세 시간 주기의 점수가 합쳐져 최종 점수가 된다.
  2. 입학 조건:

    • 다중 입점: 트렌드 점수 ≥3, 가격 H1 빠른 이동 평균 위, RSI>50, MACD 선> 신호 선
    • 공허 입구: 트렌드 스코어≤-3, 가격은 H1 빠른 이동 평균 아래, RSI<50, MACD 라인<신호 라인
  3. 위험 관리 및 탈퇴 전략:

    • 포지션 계산: 계정 잔액과 설정된 레버리지를 바탕으로 계산되며, 단위 리스크가 계정에서 2%를 넘지 않도록 제한됩니다.
    • 스톱 손실 설정: 2배의 ATR 동적으로 스톱 손실 거리를 계산합니다
    • 스텝 스톱: 50%의 포지션은 1배의 ATR에서 수익을 얻으며, 나머지 50%는 3배의 ATR의 목표치를 설정하고 추적 스톱 메커니즘을 사용합니다.
  4. 제어판:

    • 실시간으로 각 시간 주기 이동 평균 값과 관계를 표시
    • 현재 점수와 거래 신호 추천을 표시합니다 (구매, 판매 또는 중립)

전략적 이점

  1. 다차원 경향 확인3개의 시간주기의 트렌드 정보를 통합함으로써, 전략은 강력한 트렌드를 더 정확하게 식별하고, 가짜 신호와 잡음을 효과적으로 필터링할 수 있다. 더 긴 시간주기에 더 높은 무게를 부여하는 것은 기술분석에서 중·장기 트렌드를 우선하는 원칙에 부합한다.

  2. 입력 신호 복수 확인트렌드 점수 이외에도, 전략은 가격, RSI, MACD 지표가 동시에 특정 조건을 충족하도록 요구하여 거래를 수행합니다. 이 여러 확인 메커니즘은 신호 품질을 크게 향상시킵니다.

  3. 지능형 위험 관리:

    • 시장의 변동성 (ATR) 에 기반한 동적 중지 손실 설정, 다양한 시장 조건에 적응
    • 단계적 수익 전략은 수익을 고정하고 트렌드를 추적하는 필요성을 균형 잡습니다.
    • 위치 크기는 계좌 규모에 따라 자동으로 조정되며, 재원 비율의 일관성을 보장합니다.
  4. 시각화된 의사결정 지원: 제어판은 각 시간 주기의 트렌드 상태와 종합 점수를 직관적으로 표시하여 거래자가 시장 상황을 신속하게 판단하고 의사 결정에 대한 확신을 높일 수 있습니다.

  5. 매우 적응력이 좋다이 전략은 여러 종류의 거래에 적용될 수 있으며, 특히 트렌드가 뚜렷한 외환 쌍과 귀금속에서 더 잘 작동한다.

전략적 위험

  1. 추세 반전 위험: 전략이 다중 시간 프레임 분석을 통해 정확도를 높였음에도 불구하고 시장의 강도가 역전되면 여전히 큰 회수가 발생할 수 있습니다. 중요한 경제 데이터 또는 이벤트가 발표되기 전에 일시적으로 지위를 낮추거나 거래를 중단하는 것이 좋습니다.

  2. 과도한 거래의 위험: 시장이 간격적인 흔들림에 처할 때, 트렌드 스코어는 종종 임계 근처에서 변동할 수 있으며, 이는 반복적인 입출구를 초래한다. 해결책은 실제 변동 범위 비율 ((ATR%) 또는 변동률 지표와 같은 추가적인 흔들림 시장 필터를 추가하는 것이다.

  3. 매개변수 민감도전략 성능은 SMA 주기 ((50200) 와 ATR 배수 설정에 민감하다. 전체적인 역사 회귀를 사용하여 매개 변수를 최적화하고 매개 변수가 현재 시장 환경에 여전히 적합한지 정기적으로 평가하는 것이 좋습니다.

  4. 자금 관리의 한계: 현재의 고정 비율 위험 모델은 극한 시장 조건에서 충분히 유연하지 않을 수 있습니다. 높은 변동성 기간에 자동으로 포지션을 줄이는 유동성 조정 포지션 규모 계산 방법을 도입하는 것이 고려 될 수 있습니다.

  5. 실행 지연의 위험빠른 시장에서, 전략에 의존하는 여러 가지 확인은 진입 시기를 지연시켜 최적의 가격을 놓치게 할 수 있다. 이 위험을 줄이기 위해, 가격 행위에 기반한 초기 진입 신호를 추가하는 것을 고려할 수 있다.

전략 최적화 방향

  1. 트렌드 인식 개선:

    • 단순 이동 평균 (SMA) 을 지수 이동 평균 (EMA) 또는 헐 이동 평균으로 교체하여 트렌드 식별에 대한 응답 속도를 향상시킵니다.
    • 트렌드 강도 지표 (ADX와 같은) 를 추가 필터로 도입하여 명확한 트렌드에서만 출전을 보장합니다.
    • 가격과 이동 평균 사이의 거리를 평가하는 것을 고려하여 과도하게 확장된 시장에 진입하는 것을 피하십시오.
  2. 증강 신호 확인 시스템:

    • 거래량 분석을 추가하여 거래 방향과 거래량 추세와 일치하도록합니다.
    • 통합된 가격 행동 패턴 식별 (예: 돌파구, 회귀, 하위/고위 형태) 을 보조적인 확인으로
    • 계절성 및 시장 감정 지표를 도입하여 신호 품질을 향상시킵니다.
  3. 탈퇴 메커니즘을 최적화:

    • 시장 상태에 따라 동적 교착 조정, 강력한 추세에서 더 많은 여유 공간을 제공
    • 이동 평균의 교차 또는 트렌드 스코어 변경을 일부 위치의 조기 종료 신호로 추가
    • 긴 시간 동안 수익을 얻지 못하는 거래를 피하기 위해 변동성 주기 기반의 시간 중지 개발
  4. 위험 관리 강화:

    • 연관성에 민감한 위험 분배를 실현하고, 연관성이 높은 시장에서 과도한 위험 집중을 피합니다.
    • 매일, 주간, 월간 최대 인출 제한을 추가하여 트리거 시 자동으로 포지션을 낮출 수 있습니다.
    • 시장의 변동성에 기반한 동적 레버리지 조정 시스템을 개발
  5. 시스템 적응력을 높여라:

    • 개발된 매개 변수 적응 메커니즘, 시장의 다양한 단계에 따라 핵심 매개 변수를 자동으로 조정하는 매개 변수 적응 메커니즘
    • 기계 학습 알고리즘을 도입하여 트렌드 평점 중량 분배를 최적화합니다.
    • 뉴스 이벤트 필터를 추가하고 중요한 경제 자료가 발표되기 전에 거래를 중단합니다.

요약하다

다중 시간 프레임 트렌드 추적과 동력 확인 수량 거래 전략은 종합적이고 체계적인 거래 솔루션으로, 여러 시간 주기 트렌드 정보와 기술 지표 확인을 통합하여 고품질 거래 신호를 생성합니다. 가장 큰 장점은 여러 계층의 트렌드 식별과 신호 확인 메커니즘으로 신호 품질을 효과적으로 향상시키는 것입니다. 동시에, 시장의 변동성에 기반한 동적 위험 관리 및 단계적 수익 전략은 자금 안전을위한 강력한 보장을 제공합니다.

전략의 주요 위험은 트렌드 반전 기간 동안 잠재적인 회수와 변수 감수성이다. 제안된 최적화 방향, 예를 들어, 트렌드 식별 메커니즘을 개선, 신호 확인 시스템을 강화, 탈퇴 메커니즘을 최적화, 위험 관리를 강화하고 시스템의 적응성을 향상시키는 등의 전략은 다양한 시장 환경에서 안정성과 수익성을 더욱 향상시킬 수 있다.

외환 및 귀금속 시장에서 중장기 트렌드 기회를 잡으려는 거래자에게는 이론적으로 완벽하고 실용적인 전략 프레임 워크입니다. 충분한 재검토와 적절한 매개 변수를 최적화 한 후 체계화된 거래의 핵심 구성 요소 또는 독립 거래 시스템으로 사용할 수 있습니다.

전략 소스 코드
/*backtest
start: 2025-02-20 00:00:00
end: 2025-02-27 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("JolurocePro v2.0", overlay=true, margin_long=100, margin_short=100, pyramiding=1)

// 1. Configuración Principal
capitalMaximo      = input(20000, "Capital Maximo (USD)")
lotajeBase         = input.float(0.1, "Lotes por 1000 USD", minval=0.01)
paresPermitidos    = input.string("XAUUSD,EURUSD,GBPUSD,GBPNZD,EURCAD,USDCAD,USDJPY", "Pares Permitidos")

// 2. Indicadores Multitemporales
[mediaRapidaH1, mediaLentaH1] = request.security(syminfo.tickerid, "60", [ta.sma(close, 50), ta.sma(close, 200)])
[mediaRapidaH4, mediaLentaH4] = request.security(syminfo.tickerid, "240", [ta.sma(close, 50), ta.sma(close, 200)])
[mediaRapidaD, mediaLentaD]   = request.security(syminfo.tickerid, "D", [ta.sma(close, 50), ta.sma(close, 200)])

// 3. Calculo del Score
currentScore = (mediaRapidaH1 > mediaLentaH1 ? 1 : -1) + (mediaRapidaH4 > mediaLentaH4 ? 2 : -2) + (mediaRapidaD > mediaLentaD ? 3 : -3)

// 4. Panel de Control
var table panel = table.new(position.top_right, 4, 6, bgcolor=color.new(#2C3E50, 90))

if barstate.islast
    // Encabezado
    table.cell(panel, 0, 0, " JolurocePro ", width=4, text_color=color.white, text_size=size.large)
    
    // Temporalidad H1
    table.cell(panel, 0, 1, "H1", text_color=color.white)
    table.cell(panel, 1, 1, str.tostring(math.round(mediaRapidaH1, 4)), text_color=mediaRapidaH1 > mediaLentaH1 ? #2ECC71 : #E74C3C)
    table.cell(panel, 2, 1, str.tostring(math.round(mediaLentaH1, 4)), text_color=mediaRapidaH1 > mediaLentaH1 ? #2ECC71 : #E74C3C)
    table.cell(panel, 3, 1, mediaRapidaH1 > mediaLentaH1 ? "▲" : "▼", text_color=mediaRapidaH1 > mediaLentaH1 ? #2ECC71 : #E74C3C)
    
    // Temporalidad H4
    table.cell(panel, 0, 2, "H4", text_color=color.white)
    table.cell(panel, 1, 2, str.tostring(math.round(mediaRapidaH4, 4)), text_color=mediaRapidaH4 > mediaLentaH4 ? #2ECC71 : #E74C3C)
    table.cell(panel, 2, 2, str.tostring(math.round(mediaLentaH4, 4)), text_color=mediaRapidaH4 > mediaLentaH4 ? #2ECC71 : #E74C3C)
    table.cell(panel, 3, 2, mediaRapidaH4 > mediaLentaH4 ? "▲" : "▼", text_color=mediaRapidaH4 > mediaLentaH4 ? #2ECC71 : #E74C3C)
    
    // Temporalidad Diaria
    table.cell(panel, 0, 3, "Diario", text_color=color.white)
    table.cell(panel, 1, 3, str.tostring(math.round(mediaRapidaD, 4)), text_color=mediaRapidaD > mediaLentaD ? #2ECC71 : #E74C3C)
    table.cell(panel, 2, 3, str.tostring(math.round(mediaLentaD, 4)), text_color=mediaRapidaD > mediaLentaD ? #2ECC71 : #E74C3C)
    table.cell(panel, 3, 3, mediaRapidaD > mediaLentaD ? "▲" : "▼", text_color=mediaRapidaD > mediaLentaD ? #2ECC71 : #E74C3C)
    
    // Recomendacion
    table.cell(panel, 0, 4, "Score Actual:", text_color=color.white)
    table.cell(panel, 1, 4, str.tostring(currentScore), text_color=currentScore >= 3 ? #2ECC71 : currentScore <= -3 ? #E74C3C : #F1C40F, width=3)
    table.cell(panel, 0, 5, "Senal:", text_color=color.white)
    table.cell(panel, 1, 5, currentScore >= 3 ? "COMPRA" : currentScore <= -3 ? "VENTA" : "NEUTRO", text_color=currentScore >= 3 ? #2ECC71 : currentScore <= -3 ? #E74C3C : #F1C40F, width=3)

// 5. Indicadores Tecnicos
atrValor = ta.atr(14)
rsi = ta.rsi(close, 14)
macdLine = ta.ema(close, 12) - ta.ema(close, 26)
macdSignal = ta.ema(macdLine, 9)

// 6. Condiciones de Entrada
condicionLong = currentScore >= 3 and close > mediaRapidaH1 and rsi > 50 and macdLine > macdSignal
condicionShort = currentScore <= -3 and close < mediaRapidaH1 and rsi < 50 and macdLine < macdSignal

// 7. Gestion de Riesgo
posicionSize = math.min((strategy.equity / 1000) * lotajeBase, strategy.equity * 0.02)
slLong = close - (atrValor * 2)
tp1Long = close + (atrValor * 1)
tp2Long = close + (atrValor * 3)

slShort = close + (atrValor * 2)
tp1Short = close - (atrValor * 1)
tp2Short = close - (atrValor * 3)

// 8. Ejecucion de Ordenes
if condicionLong
    strategy.entry("Long", strategy.long, qty=posicionSize)
    strategy.exit("TP1", "Long", stop=slLong, limit=tp1Long, qty_percent=50)
    strategy.exit("TP2", "Long", limit=tp2Long, trail_points=atrValor*10)

if condicionShort
    strategy.entry("Short", strategy.short, qty=posicionSize)
    strategy.exit("TP1", "Short", stop=slShort, limit=tp1Short, qty_percent=50)
    strategy.exit("TP2", "Short", limit=tp2Short, trail_points=atrValor*10)

// 9. Senales Visuales
plotshape(condicionLong, "Compra", shape.triangleup, location.belowbar, color=#2ECC71, size=size.small)
plotshape(condicionShort, "Venta", shape.triangledown, location.abovebar, color=#E74C3C, size=size.small)