리소스 로딩... 로딩...

이중 EMA 크로스오버 트렌드 위험 관리 및 시간 필터링 시스템으로 전략을 따르는 것

저자:차오장, 날짜: 2024-11-29 15:05:45
태그:EMASLTPALGO

img

전반적인 설명

이 전략은 이중 EMA 크로스오버 신호, 스톱-로스/테이크-프로프트 관리 및 시간 필터링을 결합한 완전한 거래 시스템이다. 핵심 전략은 시장 트렌드를 포착하기 위해 빠르고 느린 기하급수적 이동 평균 (EMA) 의 크로스오버를 기반으로 하며, 이윤을 취하고 손실을 중지하는 설정을 통해 위험을 제어합니다. 또한 전략에는 특정 시간 범위 내에서 거래를 수행 할 수있는 시간 필터 기능이 포함되어 있습니다.

전략 원칙

이 전략은 다음과 같은 핵심 메커니즘에 기반합니다.

  1. 서로 다른 기간을 가진 두 개의 EMA를 사용합니다 (디폴트 5 및 21)
  2. 빠른 EMA가 느린 EMA를 넘을 때 긴 신호를 생성합니다.
  3. 빠른 EMA가 느린 EMA를 넘을 때 짧은 신호를 생성합니다.
  4. 각 거래는 백분율에 기반한 스톱 로스 및 영업 취득 수준이 있습니다.
  5. 거래 방향은: 단장, 단장 또는 둘 다로 구성될 수 있습니다.
  6. 시간 필터링을 포함합니다.
  7. 시스템은 핵심 순간에 경고를 생성합니다 (입구, 스톱 손실/이익 취득)

전략적 장점

  1. 체계적인 리스크 관리: 미리 설정된 스톱 로스 (stop loss) 및 리프트 테이크 (take profit) 수준을 통해 명확한 리스크 통제
  2. 유연한 매개 변수 구성: 거래자는 EMA 기간과 위험 수준을 조정할 수 있습니다.
  3. 방향 자유: 일방적 또는 양방향적 거래 옵션
  4. 시간 관리 능력: 불리한 기간 동안 거래를 피합니다.
  5. 실시간 경보 시스템: 거래자가 적시에 신호와 위험 알림을 받을 수 있도록 도와줍니다.
  6. 완전 위치 관리: 수동 개입 없이 자동 입출입

전략 위험

  1. 시장 위험: 다양한 시장에서 빈번한 잘못된 신호를 생성할 수 있습니다.
  2. 스리핑 리스크: 높은 변동성 중 실제 스톱 로스/트랙 이윤 가격은 변동될 수 있습니다.
  3. 매개 변수 민감성: 전략 성과는 EMA 기간 선택에 크게 달려 있습니다.
  4. 트렌드 의존성: 트렌드 없는 시장에서 실적이 저하될 수 있습니다.
  5. 자금 관리 위험: 특정 조건에서 고정 비율의 중단은 충분히 유연하지 않을 수 있습니다.

최적화 방향

  1. 시장 환경 필터링 추가:
    • 다른 시장 상태에 대한 변동성 지표를 포함합니다
    • 잘못된 파장을 피하기 위해 트렌드 강도 필터를 구현합니다.
  2. 동적 매개 변수 조정:
    • 시장의 변동성에 따라 스톱 로스/프로프트 테이크 레벨을 조정합니다
    • 트렌드 강도에 따라 EMA 기간을 수정
  3. 강화된 위험 관리:
    • 수익을 보호하기 위해 후속 중지 기능을 추가
    • 크기를 조정하는 메커니즘
  4. 입력 정밀도를 높여
    • 신호 유효성을 확인하기 위해 부피 표시기를 포함
    • 확인을 위한 추가 기술 지표 추가

요약

이 전략은 종합적인 거래 솔루션을 제공하기 위해 이동 평균 시스템, 위험 관리 및 시간 필터링을 결합한 잘 설계된 트렌드 추적 전략입니다. 이 전략은 다양한 위험 선호도를 가진 거래자에게 적합한 높은 구성성을 제공합니다. 제안된 최적화 방향에 의해 추가 개선의 여지가 있습니다. 핵심은 엄격한 위험 통제를 유지하면서 실제 시장 조건과 개인 거래 목표를 기반으로 매개 변수를 조정하는 것입니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Estrategia Cruce de EMAs con: Stop Loss, Take Profit, Días de Operación y Alertas (Modificables)", overlay=true, commission_value = 0.2, process_orders_on_close = true, initial_capital = 1000)

// Parámetros de las EMAs
emaRapidaLen = input.int(5, title="Periodo EMA rápida")
emaLentaLen = input.int(21, title="Periodo EMA lenta")

// Parámetros de Stop Loss y Take Profit
stopLoss = input.float(3.0, title="Stop Loss (%)", step=0.1) / 100
takeProfit = input.float(6.0, title="Take Profit (%)", step=0.1) / 100

// Tipo de operación: Largo, Corto o Ambos
operacion = input.string(title="Tipo de operación", defval="Largo", options=["Largo", "Corto", "Ambos"])

// Parámetros de la duración de la estrategia (días)
diasInicio = input(timestamp("2009-01-03 00:00"), title="Fecha de inicio (YYYY-MM-DD HH:MM)")
diasFin = input(timestamp("2024-09-11 00:00"), title="Fecha de fin (YYYY-MM-DD HH:MM)")

// Comprobar si estamos dentro del rango de días definido
dentroDeRango = true

// Cálculo de las EMAs
emaRapida = ta.ema(close, emaRapidaLen)
emaLenta = ta.ema(close, emaLentaLen)

// Condiciones para cruce de EMAs
cruceAlcista = ta.crossover(emaRapida, emaLenta)
cruceBajista = ta.crossunder(emaRapida, emaLenta)

// Operaciones en Largo (solo si estamos en el rango de días definido)
if dentroDeRango and (operacion == "Largo" or operacion == "Ambos") and cruceAlcista 
    strategy.entry("Compra", strategy.long)
    alert("Posición larga abierta: Cruce alcista de EMAs", alert.freq_once_per_bar_close)

// Operaciones en Corto (solo si estamos en el rango de días definido)
if dentroDeRango and (operacion == "Corto" or operacion == "Ambos") and cruceBajista
    strategy.entry("Venta", strategy.short)
    alert("Posición corta abierta: Cruce bajista de EMAs", alert.freq_once_per_bar_close)

// Cálculo del Stop Loss y Take Profit para largos
if (strategy.position_size > 0 and strategy.opentrades.entry_id(strategy.opentrades - 1) == "Compra")
    strategy.exit("Cerrar Compra", "Compra", stop=strategy.position_avg_price * (1 - stopLoss), limit=strategy.position_avg_price * (1 + takeProfit))
    alert("Posición larga cerrada: Alcanzado Stop Loss o Take Profit", alert.freq_once_per_bar_close)

// Cálculo del Stop Loss y Take Profit para cortos
if (strategy.position_size < 0 and strategy.opentrades.entry_id(strategy.opentrades - 1) == "Venta")
    strategy.exit("Cerrar Venta", "Venta", stop=strategy.position_avg_price * (1 + stopLoss), limit=strategy.position_avg_price * (1 - takeProfit))
    alert("Posición corta cerrada: Alcanzado Stop Loss o Take Profit", alert.freq_once_per_bar_close)

// Plot de las EMAs
plot(emaRapida, color=color.blue, title="EMA rápida", linewidth = 2)
plot(emaLenta, color=color.red, title="EMA lenta", linewidth = 2)


관련

더 많은