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

EMA의 크로스오버 전략

저자:차오장, 날짜: 2023년 11월 10일 15:05:22
태그:

img

전반적인 설명

이 전략은 빠른 EMA와 느린 EMA 라인의 크로스오버를 구매 및 판매 신호로 사용하여 EMA 크로스오버에 기반한 자동화 거래를 구현합니다. 빠른 EMA 라인은 가격 동작을 밀접하게 따르고 느린 EMA 라인은 가격 동작을 부드럽게합니다. 빠른 EMA 라인이 아래에서 느린 EMA 라인의 위에 넘어가면 구매 신호가 생성됩니다. 빠른 EMA 라인이 위에서 느린 EMA 라인의 아래에 넘어가면 판매 신호가 생성됩니다. 전략은 빠르고 느린 EMA의 매개 변수를 조정하여 입출에 대한 사용자 정의 신호 포인트를 정의하여 유연하고 사용자 정의 할 수 있습니다.

전략 논리

이 전략은 주로 빠른 EMA 라인과 느린 EMA 라인을 계산하고 그 관계를 비교하여 거래 신호를 생성합니다.

먼저, 빠른 EMA emaFast의 기간은 입력 매개 변수에서 1로 설정되어 가격 변화를 자세히 추적 할 수 있습니다. 동시에 느린 EMA의 기간이 설정됩니다. 구매 신호를 생성하는 emaSlowBuy와 판매 신호를위한 emaSlowSell.

다음으로 빠른 EMA와 느린 EMA는 입력 기간에 따라 계산됩니다. 빠른 EMA는 가격을 자세히 추적하기 위해 1의 고정 기간을 가지고 있으며 느린 EMA는 원활한 가격 데이터를 조정 할 수있는 매개 변수입니다.

다음으로, 빠른 EMA와 느린 EMA 사이의 관계는 크로스오버를 결정하기 위해 비교됩니다. 빠른 EMA가 느린 EMA를 넘어서 황금 십자가를 형성하면 구매 조건이 충족됩니다. 빠른 EMA가 느린 EMA를 넘어서 죽음의 십자가를 형성하면 판매 조건이 충족됩니다.

마지막으로, 입점 및 출구 명령은 거래를 완료하기 위해 구매 및 판매 조건이 충족되면 실행됩니다. 한편으로, 현재 시간이 날짜 범위 내에서 있는지 확인하여 날짜 범위 밖의 잘못된 거래를 피합니다.

이점 분석

  • 진입점과 출구점을 결정하기 위해 EMA 크로스오버를 사용하는 것은 성숙하고 신뢰할 수 있는 기술 지표입니다.
  • 조정 가능한 빠르고 느린 EMA 기간은 다양한 시장 조건에서 최적의 거래 기회를 찾기 위해 매개 변수를 조정 할 수 있습니다.
  • 금색 십자가에서 구매하고 죽음의 십자가에서 판매하는 논리는 간단하고 이해하기 쉽습니다.
  • 구매 및 판매 EMA의 유연한 구성은 거래 전략을 완전히 사용자 정의 할 수 있습니다.
  • 단편, 단편 또는 쌍방향 거래 옵션은 다른 시장 환경에 대한 유연성을 제공합니다.
  • 사용자 정의 가능한 백테스트 날짜 범위 특정 시간대에 최적화 테스트를 허용

위험 분석

  • EMA 크로스오버 신호는 지연이 있고 가격 변화의 최적의 시기를 놓칠 수 있습니다.
  • 변동성 있는 시장에서 빈번한 크로스오버 신호가 발생할 수 있어 거래가 과도하게 이루어질 수 있습니다.
  • 최적의 EMA 조합을 찾기 위해 광범위한 테스트가 필요합니다. 그렇지 않으면 과도한 잘못된 신호가 발생할 수 있습니다.
  • 고정된 1주기 빠른 EMA는 시장 충격 사건 중 소음을 효과적으로 필터 할 수 없습니다.
  • 옆으로 흔들리는 시장은 불필요한 거래 신호를 생성 할 수 있습니다.

위험을 줄이기 위한 가능한 개선 사항:

  1. 다른 지표를 사용하는 필터를 추가하여 EMA 크로스오버 신호를 검증하고 잘못된 신호를 피합니다.

  2. 거래 빈도를 줄이기 위해 시장 변동성에 따라 EMA 기간을 조정합니다.

  3. 스톱 로스를 포함하고 리스크를 제어하기 위해 수익을 취하십시오.

  4. 특정 시장 조건에서 더 나은 성과를 위해 빠른 EMA 기간을 최적화하십시오.

  5. 다양한 시장에서 과도한 거래를 피하기 위해 트렌드 결정을 추가합니다.

더 나은 기회

이 전략이 더 이상 최적화 될 수 있는 몇 가지 방법:

  1. 최적의 설정을 찾기 위해 다른 기간 조합을 테스트하여 EMA 매개 변수를 최적화하십시오.

  2. 신호를 검증하기 위해 MACD, KDJ, 볼링거 밴드와 같은 다른 지표를 사용하는 필터를 추가하십시오.

  3. ATR와 같은 트렌드 메트릭을 포함하여 시장의 범위를 피하십시오.

  4. 더 나은 위험과 수익성을 위해 손해를 멈추고 수익 전략을 최적화하십시오.

  5. 더 나은 매개 변수를 찾기 위해 듀얼 또는 트리플 EMA와 같은 다른 EMA 조합을 테스트하십시오.

  6. 트렌딩에 더 빠른 EMA와 불안정한 시장에 더 느린 EMA와 같은 다른 시장 주기에 동적으로 매개 변수를 조정

결론

EMA 크로스오버 전략은 진입 및 출구를 결정하기 위해 기술 지표를 사용하여 명확하고 이해하기 쉬운 논리를 가지고 있습니다. 다른 시장 조건에 걸쳐 최적화를 위해 EMA 매개 변수 조정을 통해 매우 사용자 정의 할 수 있습니다. 그러나 EMA 신호는 지연이 있으며 최상의 매개 변수를 찾기 위해 광범위한 테스트가 필요합니다. 또한 신호 필터를 추가하고 정지를 최적화하고 시장의 범위를 피함으로써 위험을 완화하기 위해 추가 개선이 필요합니다. 지속적인 최적화 및 테스트로이 전략은 강력한 거래 성과를 얻을 수 있습니다.


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

//@version=4
strategy(
     "EMA Cross Strategy with Custom Buy/Sell Conditions",
     overlay=true
     )

// INPUT:

// Options to enter fast Exponential Moving Average (EMA) value
emaFast = 1

// Options to enter slow EMAs for buy and sell signals
slowEMABuy = input(title="Slow EMA for Buy Signals",  defval=20, minval=1, maxval=9999)
slowEMASell = input(title="Slow EMA for Sell Signals",  defval=30, minval=1, maxval=9999)

// Option to select trade directions
tradeDirection = input(title="Trade Direction", options=["Long", "Short", "Both"], defval="Both")

// Options that configure the backtest date range
startDate = input(title="Start Date", type=input.time, defval=timestamp("01 Jan 2018 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2025 23:59"))


// CALCULATIONS:

// Use a fixed fast EMA of 1 and calculate slow EMAs for buy and sell signals
fastEMA = ema(close, emaFast)
slowEMABuyValue = ema(close, slowEMABuy)
slowEMASellValue = ema(close, slowEMASell)


// PLOT:

// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.orange, linewidth=2)
plot(series=slowEMABuyValue, color=color.blue, linewidth=2, title="Slow EMA for Buy Signals")
plot(series=slowEMASellValue, color=color.red, linewidth=2, title="Slow EMA for Sell Signals")


// CONDITIONS:

// Check if the close time of the current bar falls inside the date range
inDateRange = true

// Translate input into trading conditions for buy and sell signals
buyCondition = crossunder(slowEMABuyValue, fastEMA)
sellCondition = crossover(slowEMASellValue, fastEMA)

// Translate input into overall trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")


// ORDERS:

// Submit entry (or reverse) orders based on buy and sell conditions
if (buyCondition and inDateRange)
    strategy.entry("Buy", strategy.long)

if (sellCondition and inDateRange)
    strategy.close("Buy")

// Submit exit orders based on opposite trade conditions
if (strategy.position_size > 0 and sellCondition)
    strategy.close("Sell")
if (strategy.position_size < 0 and buyCondition)
    strategy.close("Sell")

더 많은