이중 EMA 크로스오버 전략

저자:차오장, 날짜: 2023-10-30 12:27:50
태그:

img

전반적인 설명

듀얼 EMA 크로스오버 전략은 트렌드를 따르는 전형적인 전략이다. 그것은 서로 다른 기간의 두 개의 EMA 라인을 사용하고 그 크로스오버에 따라 거래 신호를 생성한다. 더 빠른 EMA가 더 느린 EMA를 넘을 때 구매 신호가 생성된다. 더 빠른 EMA가 더 느린 EMA를 넘을 때 판매 신호가 생성된다. 이 전략은 중장기 트렌드를 추적하고 트렌드 시작 단계에서 거래 기회를 포착할 수 있다.

전략 논리

이 전략의 주요 구성 요소는 다음과 같습니다.

  1. 더 빠른 EMA와 더 느린 EMA의 길이를 설정합니다. 여기서 더 빠른 EMA 길이는 12, 더 느린 EMA는 26.

  2. 더 빠른 EMA와 더 느린 EMA를 계산합니다. 더 빠른 EMA는 더 빨리 반응하고 느린 EMA는 더 안정적입니다.

  3. 거래 신호를 생성하기 위해 EMA 교차 상황을 결정합니다. 더 빠른 EMA가 느린 EMA를 넘을 때 구매 신호가 생성됩니다. 더 빠른 EMA가 느린 EMA를 넘을 때 판매 신호가 생성됩니다.

  4. 신호에 기반한 거래를 입력합니다. 긴 지점에 가려면 기존의 짧은 지점이 먼저 닫히고 긴 지점을 열기 전에 닫습니다. 그 반대의 경우입니다.

  5. 스톱 로스 포인트를 설정합니다. 장기간 거래할 때, 스톱 로스는 가격이 정해진 비율로 이전 최저치 아래로 떨어지면 작동합니다. 반대로.

  6. 신호에 기반한 출구 거래. 더 빠른 EMA가 느린 EMA를 넘을 때 긴 포지션은 닫습니다. 더 빠른 EMA가 느린 EMA를 넘을 때 짧은 포지션은 닫습니다.

이 논리는 간단하고 직관적입니다. EMA의 교차는 트렌드 방향과 강도를 결정합니다. 더 빠른 EMA는 단기 가격 변화에 빠르게 반응하며 느린 EMA는 장기적인 트렌드에 꾸준히 반응합니다. 두 라인의 교차는 트렌드 변화를 감지하는 고전적인 방법입니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 간단하고 이해하기 쉽고 구현하기 쉬운 개념입니다. EMA와 크로스오버는 효과적인 지표와 신호로 인식됩니다.

  2. 중장기 동향을 효과적으로 추적하고 기회를 조기에 포착할 수 있습니다.

  3. 이중 EMA 설정은 단기 시장 변동의 소음을 피합니다.

  4. 명확한 출입 규칙, 출입 규칙, 스톱 로스 규칙.

  5. 몇 개의 매개 변수만 필요하고, 과장되지 않습니다.

  6. 좋은 백테스트 결과, 라이브 트레이딩에 적합합니다. 독립적으로 또는 다른 전략과 결합하여 사용할 수 있습니다.

위험 분석

이 전략의 몇 가지 위험:

  1. 듀얼 EMA 크로스오버는 잘못된 신호를 생성하는 경향이 있습니다. 파라미터는 유효하지 않은 신호를 필터하기 위해 조정해야합니다.

  2. 다른 지표로부터 확인을 필요로 합니다.

  3. 이중 EMA 전략은 최고치를 추격하고 최저치를 판매하는 경향이 있습니다. 위치 크기와 수익 취득은 통제되어야합니다.

  4. 백테스트 결과는 어느 정도 과장 될 수 있습니다. 매개 변수 민감도는 견고성을 위해 테스트해야합니다.

  5. 적시에 스톱 로스가 없으면 큰 손실이 발생할 수 있습니다. 합리적인 스톱 로스 레벨을 설정해야합니다.

  6. 거래 비용은 실제 수익성에 영향을 줄 수 있습니다. 다른 제품에 대한 수수료 요인은 고려되어야합니다.

개선 할 수 있는 분야

전략을 개선할 수 있는 몇 가지 방법:

  1. EMA 기간 매개 변수를 최적화하여 최적의 조합을 찾습니다. 앞으로의 최적화와 기계 학습을 이용합니다.

  2. ADX, CCI 등과 같은 트렌드 필터 지표를 추가하여 불확실한 트렌드에 거래하는 것을 피합니다.

  3. 거래량과 같은 거래량 지표를 추가하여 실제 거래가 신호를 유도하는지 확인합니다.

  4. 동적 스톱 손실을 구현하여 시장 변동성에 따라 자동으로 스톱을 조정합니다.

  5. 연관된 제품을 결합하여 위험 관리에 연관성을 활용합니다.

  6. 매개 변수 최적화, 기능 엔지니어링, 신호 필터링 등을 위한 기계 학습을 도입합니다.

  7. 거래 비용을 고려하고 거래 빈도를 줄이기 위해 정지 및 크기를 조정하십시오.

  8. 제품 특성에 기반한 매개 변수를 사용자 정의하여 적응력을 향상시킵니다.

  9. 복합적인 전략 프레임워크를 설계하고 다른 전략과 결합하여 탄력성을 향상시킵니다.

이러한 개선은 라이브 거래에 대한 전략을 더욱 견고하고 수익성있게 만들 수 있습니다.

결론

이 전략은 트레이딩 신호를 생성하기 위해 이중 EMA 크로스오버를 사용하며 중장기 트렌드를 효과적으로 추적할 수 있다. 이 전략의 장점은 단순성과 좋은 백테스트 결과로 초보자도 쉽게 사용할 수 있다. 그러나 위험은 존재하며 매개 변수 최적화, 지표 추가, 동적 스톱, 거래 비용을 최적화 등으로 관리되어야 한다. 이 전략은 독립적으로 사용되거나 실용성을 높이기 위해 다른 사람들과 결합될 수 있다.


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

//@version=2

strategy(title = "EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
StartYear = input(2018, "Backtest Start Year")
StartMonth = input(1, "Backtest Start Month")
StartDay = input(1, "Backtest Start Day")
UseStopLoss = input(true,"UseStopLoss")

window() => time >=  timestamp(StartYear, StartMonth, StartDay,00,00) ? true : false

stopLoss = input(20, title = "Stop loss percentage(0.1%)")


maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 12, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 26, title = "Slow MA Period", minval = 1)

maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)


fast = plot(maFast, title = "Fast MA", color = #7a8598, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #e08937, linewidth = 2, style = line, transp = 50)


longEMA = crossover(maFast, maSlow)
exitLong = crossunder(maFast, maSlow)

shortEMA = crossover(maSlow, maFast)
exitShort = crossover(maFast, maSlow)


if (longEMA)
    strategy.entry("LongId", strategy.long, when=window())
 
if (shortEMA)
    strategy.entry("ShortId", strategy.short, when=window())


if (UseStopLoss)
    strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick)
    strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)

더 많은