이중 EMA 크로스오버 전략

저자:차오장, 날짜: 2023-10-16 16:15:38
태그:

img

전반적인 설명

이 전략은 빠른 EMA와 느린 EMA 지표를 기반으로 하는 이중 EMA 크로스오버 거래 전략이다. 빠른 EMA가 느린 EMA를 넘어서면 긴 신호를 생성하고 빠른 EMA가 느린 EMA를 넘어서면 긴 포지션을 닫는다. 전략은 중장기 거래에 간단하고 실용적이다.

전략 논리

이 전략은 주로 이중 EMA 지표로 구현됩니다. 빠른 EMA는 가격 변화를 민감하게 반영하기 위해 짧은 기간을 가지고 있으며 느린 EMA는 장기적인 경향을 나타내는 더 긴 기간을 가지고 있습니다.

빠른 EMA가 느린 EMA를 넘을 때, 금색 십자가가 형성되며, 단기적으로 가격 상승 동력을 나타냅니다. 빠른 EMA가 느린 EMA를 넘을 때, 죽음의 십자가가 형성되며, 긴 포지션을 닫기 위해 하향 동력을 나타냅니다.

특히 전략은 다음을 포함합니다.

  1. 빠른 EMA와 느린 EMA를 위한 입력 매개 변수, 기간, 출처 등

  2. 빠른 EMA와 느린 EMA를 계산합니다.

  3. 빠른 EMA가 느린 EMA를 넘을 때 황금색을 정의합니다.

  4. 빠른 EMA가 느린 EMA를 넘을 때 죽음의 십자가를 정의합니다.

  5. 골든 크로스에 오래 걸립니다.

  6. 죽음의 십자가에 있는 포지션을 닫으세요

  7. 단축 및 손실/이익 취득 중지 옵션

  8. 출력 구매 및 판매 알림.

이 간단한 이중 EMA 크로스오버 시스템으로 전략은 단기적인 수익 트렌드를 파악할 수 있습니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 논리는 간단하고 명확하고 이해하기 쉽습니다.

  2. 이중 EMA만 사용해서 쉽게 구현할 수 있습니다.

  3. 단기적인 트렌드를 파악하고 수익을 올릴 수 있습니다.

  4. 다른 시장에 맞게 맞춤형 EMA 기간.

  5. 리스크를 통제하기 위해 단축할 수 있는 옵션

  6. 스톱 손실/이익 취득 옵션

  7. 모니터링을 위한 구매/판매 통보

  8. 더 나은 수익을 위해 EMA 매개 변수를 최적화하기 쉽습니다.

위험 분석

또한 몇 가지 위험이 있습니다.

  1. 이중 EMA는 잘못된 신호를 생성하여 불필요한 손실을 유발할 수 있습니다.

  2. 잘못된 스톱 로스 설정은 손실을 증가시킬 수 있습니다.

  3. 높은 거래 빈도는 비용과 미끄러짐 위험을 증가시킵니다.

  4. 고정된 EMA 매개 변수는 시장 변화에 적응할 수 없습니다.

  5. 추진력을 추구하고 평온한 판단력을 잃는 경향이 있습니다.

  6. 트렌드 반전을 파악할 수 없으니 반전 포지션을 개설할 수 있습니다.

대응한 위험 관리 조치:

  1. 잘못된 신호를 줄이기 위해 EMA 매개 변수를 최적화합니다.

  2. 적절한 스톱 로스를 거래당 한계로 설정합니다.

  3. EMA 기간을 최적화해서 빈도를 줄여라

  4. 다른 시장 단계에 동적으로 EMA를 조정합니다.

  5. 동력을 쫓지 않기 위해 트렌드 지표를 추가합니다.

  6. 트렌드 도구로 주요 트렌드 방향을 파악합니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 다른 시장에 대한 EMA 매개 변수의 동적 최적화.

  2. 정확도를 높이기 위해 스톡 필터를 추가합니다.

  3. 변동성 지수를 포함하여 낮은 변동성 환경에서 포지션을 줄이십시오.

  4. 신호에 대한 볼륨 확인을 추가합니다.

  5. 시그널을 받기 전에 20SMA 브레이크와 같은 가격 수준을 설정하세요.

  6. 스톱 로스 및 수익 전략 개선

  7. 주요 트렌드의 분석을 추가하여 트렌드에 반대하는 거래를 피합니다.

  8. 머신러닝 알고리즘으로 전략을 지속적으로 최적화하세요.

요약

요약하자면, 이중 EMA 크로스오버 전략은 단기 트렌드를 포착하기 위한 간단하고 명확한 논리를 가지고 있지만, 또한 일부 수익 위험을 가지고 있다. 우리는 지속적으로 만족스러운 수익을 얻기 위해 매개 변수를 최적화하고, 스톱 로스/이익 취득을 구현하고, 주식을 필터링하고, 주요 트렌드를 판단하여 위험을 관리할 수 있다. 전략은 지속적인 연구와 향상으로 점진적으로 개선될 수 있다.


/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy("EMA Strategy", shorttitle="EMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


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

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

// invert trade direction
shorting = input(defval=false, title="Allow Shorting?")
// risk management
useStop = input(defval=false, title="Use Initial Stop Loss?")
slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1)
useTS = input(defval=false, 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)

// Messages for buy and sell
message_buy  = input("Buy message", title="Buy Alert Message")
message_sell   = input("Sell message", title="Sell Alert Message")

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time)
 
time_cond  = true

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

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

goLong() =>
    crossover(fastMA, slowMA)
killLong() =>
    crossunder(fastMA, slowMA)
strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_buy)
strategy.close("Buy", when=killLong() and time_cond, alert_message = message_sell)

// Shorting if using
if shorting
    strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_sell)
    strategy.close("Sell", when=goLong() and time_cond, alert_message = message_buy)

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)



더 많은