꼼꼼한 EMA 크로스오버 전략

저자:차오장날짜: 2023-12-20 14:28:36
태그:

img

전반적인 설명

꼼꼼한 EMA 크로스오버 전략은 두 개의 기하급수적인 이동 평균 라인 (EMA) 사이의 크로스오버 신호를 기반으로 하는 트렌드 거래 시스템이다. 이 시스템은 짧은 기간 빠른 EMA 라인과 더 긴 기간 느린 EMA 라인을 사용하여 교차할 때 무역 신호를 생성한다. 빠른 라인이 느린 라인을 넘을 때 긴 신호가 트리거되고 빠른 라인이 느린 라인을 넘을 때 긴 위치 신호가 트리거된다. 이 시스템은 또한 스톱 로스, 트레일링 스톱과 같은 위험 관리 수단과 함께 수익을 잠금하고 위험을 제어한다.

전략 원칙

이 전략의 핵심 지표는 두 개의 EMA 라인: 빠른 라인 및 느린 라인이다. 빠른 라인 의 매개 변수는 가격 변화에 더 빠르게 반응하기 위해 13 기간 라인으로 기본 설정되어 있다. 느린 라인 의 매개 변수는 느린 응답을 위해 48 기간 라인으로 기본 설정되어 있다. 단기 트렌드가 빠르게 상승할 때 빠른 라인은 느린 라인보다 빠르게 상승할 것이다. 그리고 가격이 떨어질 때 빠른 라인은 느린 라인보다 더 빨리 떨어질 것이다. 따라서 느린 라인의 위를 넘는 빠른 라인은 상승 추세를 신호하고 느린 라인의 아래를 넘는 빠른 라인은 하향 반전을 신호한다.

이 원칙에 따라 전략은 빠른 EMA 라인이 느린 EMA 라인의 위를 넘어서면 상향 트렌드를 표시하여 구매할 수 있습니다. 빠른 라인이 느린 라인의 아래를 넘을 때 상승 트렌드의 끝과 수익을 취할 시간을 표시하여 포지션을 닫습니다. 위험을 제어하기 위해 전략은 또한 초기 스톱 손실을 엔트리 가격의 8% 아래로 설정하고 트레일링 스톱은 시장 가격에서 120 지점으로 설정합니다. 이것은 시스템이 일찍 종료하고 트렌드 반전이있을 때 손실을 최소화 할 수 있습니다.

코딩 구현에서, 크로스오버크로스온더 함수는 EMA 크로스오버 신호를 결정하는 데 사용됩니다. 해당 엔트리클로즈 명령어는 구매 또는 폐쇄 포지션을 실행합니다.

이점 분석

세심한 EMA 크로스오버 전략은 다음과 같은 주요 장점을 가지고 있습니다.

  1. 신호는 간단하고 명확하고 이해하기 쉽고 실행하기 쉽습니다. 초보자도 적합합니다.

  2. MA 필터는 트렌드 변화를 더 적은 시장 소음으로 발견할 수 있습니다.

  3. 빠른 EMA 라인이나 느린 EMA 라인, 스톱 로스 레벨 등에 대한 매우 구성 가능한 매개 변수

  4. 스톱 로스는 위험을 효과적으로 통제하는 것을 의미합니다.

  5. 다양한 시장 조건에서 비교적 안정적인 시스템

위험 분석

이 전략에는 몇 가지 본질적인 위험도 있습니다.

  1. EMA 신호는 급격한 시장 변동에 따라 지연할 수 있으며 가격 변화를 적시에 반영할 수 없습니다.

  2. MA 지표의 너무 빠른 매개 변수 조정은 더 많은 잘못된 신호를 생성 할 수 있습니다.

  3. 약한 가격 추세는 EMA 크로스오버를 줄일 수 있으므로 움직임을 파악할 수 없습니다.

  4. 전체적인 시장 추세를 분석하지 않는 것은 주요 추세에 반대하는 것을 의미합니다.

위험은 다음을 통해 완화 될 수 있습니다.

  1. 크로스오버 신호를 확인하기 위해 MACD와 KD 같은 필터를 추가합니다.

  2. 잘못된 신호를 줄이기 위해 다른 시장에 기반한 EMA 매개 변수를 조정합니다.

  3. 장기 이동 평균에 기초한 전체 추세 분석을 포함합니다.

최적화 방향

이 전략은 아래와 같은 측면에서 업그레이드 될 수 있습니다.

  1. 범위에 묶인 시장에서 과도한 거래를 피하기 위해 오픈 포지션 필터를 추가합니다. 포지션 개시 문턱을 설정하기 위해 변동성과 볼륨 지표를 결합 할 수 있습니다.

  2. 스톱 로스를 설정하고 높은 / 낮은 수준과 지원 / 저항 구역을 기반으로 수익 수준을 취하여 더 정확한 위치를 설정하십시오.

  3. 트렌드 모듈을 추가하여 장기 트렌드를 분석하여 단기 신호를 필터로 사용하여 주요 트렌드에 대한 거래를 피합니다.

  4. 기계 학습을 사용하여 잘못된 신호를 줄이기 위해 실제 시장에 맞는 이상적인 EMA 매개 변수를 훈련하고 최적화합니다.

위와 같은 주요 방향은 앞으로 이 기본 EMA 크로스오버 전략을 개선할 수 있습니다. 더 많은 기술적 지표와 위험 관리 수단을 적절하게 결합하면 전략의 효과를 향상시킬 수 있습니다.

결론

세심한 EMA 크로스오버 전략은 가격 추세를 결정하기 위해 EMA 빠르고 느린 라인 크로스오버를 기반으로 한 기본 트렌드 다음 시스템이며 위험을 제어하기 위해 스톱 로스를 통합합니다. 신호는 간단하고 깨끗하며 초보자도 쉽게 이해할 수 있으므로 전형적인 시작 양 전략 중 하나입니다. 그러나 내재적인 지연과 잘못된 신호 위험이 있습니다. 앞으로 더 많은 필터와 방법을 도입하면 더 정교한 시장 환경에 대한 이 전략을 더 잘 최적화하고 더 안정적인 수익을 얻을 수 있습니다.


/*backtest
start: 2022-12-13 00:00:00
end: 2023-12-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// *** USE AT YOUR OWN RISK ***
// 
strategy("EMA Strategy", shorttitle = "EMA Strategy", overlay=true, pyramiding = 3,default_qty_type = strategy.percent_of_equity, default_qty_value = 10)


// === Inputs ===
// short ma
maFastSource   = input(defval = close, title = "Fast MA Source")
maFastLength   = input(defval = 13, title = "Fast MA Period", minval = 1)

// long ma
maSlowSource   = input(defval = close, title = "Slow MA Source")
maSlowLength   = input(defval = 48, title = "Slow MA Period", minval = 1)

// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop     = input(defval = true, title = "Use Initial Stop Loss?")
slPoints    = input(defval = 25, title = "Initial Stop Loss Points", minval = 1)
useTS       = input(defval = true, title = "Use Trailing Stop?")
tslPoints   = input(defval = 120, title = "Trail Points", minval = 1)
useTSO      = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset   = input(defval = 20, title = "Trail Offset Points", minval = 1)

// === Vars and Series ===
fastMA = ema(maFastSource, maFastLength)
slowMA = ema(maSlowSource, maSlowLength)

plot(fastMA, color=blue)
plot(slowMA, color=purple)

goLong() => crossover(fastMA, slowMA)
killLong() => crossunder(fastMA, slowMA)
strategy.entry("Buy", strategy.long, when = goLong())
strategy.close("Buy", when = killLong())

// Shorting if using
goShort() => crossunder (fastMA, slowMA)
killShort() => crossover(fastMA, slowMA)
//strategy.entry("Sell", strategy.short, when = goShort())
//strategy.close("Sell", when = killShort())

if (useStop)
    strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08 )
    strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)



더 많은