EMA의 크로스오버 거래 전략

저자:차오장, 날짜: 2024-02-22 17:48:09
태그:

img

전반적인 설명

EMA 크로스오버 거래 전략은 다른 기간의 EMA 라인을 계산하고 그들의 크로스오버 상황을 감지함으로써 구매 및 판매 신호를 생성합니다. 더 빠른 EMA가 느린 EMA를 넘을 때 구매 신호가 생성됩니다. 더 빠른 EMA가 느린 EMA를 넘을 때 판매 신호가 생성됩니다.

전략 논리

이 전략의 핵심은 다른 기간을 가진 두 개의 EMA 라인을 계산하는 것입니다. 여기에는 9의 기본 기간을 가진 더 빠른 EMA와 20의 기본 기간을 가진 더 느린 EMA가 포함됩니다. 코드는 파인 스크립트에서 내장된 ema 함수를 호출하여 두 라인을 계산합니다. 두 개의 EMA 라인이 교차하는지 감지하여 거래 신호를 생성합니다. 구체적으로, 더 빠른 EMA가 느린 EMA 위에 넘어가면 구매 신호가 유발됩니다. 더 빠른 EMA가 느린 EMA 아래에 넘어가면 판매 신호가 유발됩니다.

크로스오버 상황은 파이인 스크립트 (Pine Script) 에 내장된 크로스오버 및 크로스온더 함수를 사용하여 검출됩니다. 크로스오버 함수는 더 빠른 EMA가 더 느린 EMA를 넘어서서 부올 값을 반환하는지 확인하고, 크로스오버 함수는 더 빠른 EMA가 더 느린 EMA를 넘어서서 부올 값을 반환하는지 확인하고, 이 두 함수의 반환 값을 기반으로 코드가 해당 구매 또는 판매 명령을 제출합니다.

또한, 코드는 시작 / 종료 날짜를 설정, 단지 긴 또는 짧은 거래를 제한, 등과 같은 몇 가지 보조 조건을 제공합니다. 이러한 기능은 더 정교한 백테스트 또는 최적화를 수행하는 데 도움이됩니다.

이점 분석

이 전략의 가장 큰 장점은 매우 간단하고 직설적이며 이해하기 쉽고 구현하기 쉽기 때문에 초보자도 배울 수 있습니다. 또한, 트렌드를 따르는 지표로서 이동 평균은 시장 트렌드를 효과적으로 추적하고 모멘텀을 활용하여 추가 수익을 창출 할 수 있습니다. 마지막으로이 전략은 몇 가지 매개 변수를 가지고 있으며 조정 및 최적화를 쉽게합니다.

위험 분석

이 전략의 주요 위험은 윙사 트레이드와 트렌드 역전이다. EMA 라인은 단기 시장 변동에 취약하여 잘못된 신호를 생성하고 불필요한 트레이드를 유발하여 거래 빈도와 비용을 증가시킬 수 있다. 반면, 크로스오버 신호가 발생하면 트렌드가 역전 지점에 가까워지고 트레이드를 위험하게 만들 수 있다. 부적절한 매개 변수 설정은 전략 성능에도 영향을 줄 수 있다.

EMA 기간을 조정하고 필터를 추가하는 것과 같은 방법은 윙사우를 줄이는 데 도움이 될 수 있습니다. 스톱 로스 오더는 단일 거래 손실을 제어합니다. 매개 변수 최적화는 안정성을 향상시킵니다. 그러나 어떤 거래 전략도 손실을 완전히 피할 수 없으므로 위험을 감수 할 준비가 있어야합니다.

최적화 기회

이 전략은 다음과 같은 측면에서 개선될 수 있습니다.

  1. 가장 좋은 매개 변수 집합을 찾기 위해 EMA 기간을 최적화
  2. 잘못된 신호를 줄이기 위해 필터로 MACD, RSI와 같은 지표를 추가하십시오.
  3. 트렌드 반전을 피하기 위해 트렌드 메트릭을 포함
  4. 기본 기준에 따라 주식을 선택
  5. 위치 크기를 조정하고 ATR에 기반한 정지 설정

결론

EMA 크로스오버 (EMA crossover) 는 단순하면서도 효과적인 트렌드 추후 전략이다. EMA 크로스를 사용하여 거래 신호를 생성하여 자동으로 가격 트렌드를 캡처한다. 이 이해하기 쉽고 조정 가능한 전략은 초보자도 배울 수 있습니다. 또한 더 복잡한 전략에 통합 될 수 있습니다. 그러나 모든 전략은 위험을 감수하고 신중한 관리가 필요합니다. 최적화 및 부양 시장 조건의 측면에서 지속적인 향상으로이 전략이 더 견고해질 수 있습니다.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// This strategy has been created for illustration purposes only and should not be relied upon as a basis for buying, selling, or holding any asset or security.
// © kirilov

//@version=4
strategy(
     "EMA Cross Strategy",
     overlay=true,
     calc_on_every_tick=true,
     currency=currency.USD
     )

// INPUT:

// Options to enter fast and slow Exponential Moving Average (EMA) values
emaFast = input(title="Fast EMA", type=input.integer, defval=9, minval=1, maxval=9999)
emaSlow = input(title="Slow EMA", type=input.integer, defval=20, 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 1970 00:00"))
endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2170 23:59"))


// CALCULATIONS:

// Use the built-in function to calculate two EMA lines
fastEMA = ema(close, emaFast)
slowEMA = ema(close, emaSlow)


// PLOT:

// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.black, linewidth=2)
plot(series=slowEMA, color=color.red, linewidth=2)


// CONDITIONS:

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

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

// Decide if we should go long or short using the built-in functions
longCondition = crossover(fastEMA, slowEMA)
shortCondition = crossunder(fastEMA, slowEMA)


// ORDERS:

// Submit entry (or reverse) orders
if (longCondition and inDateRange)
    strategy.entry(id="long", long=true, when = longOK)
if (shortCondition and inDateRange)
    strategy.entry(id="short", long=false, when = shortOK)
    
// Submit exit orders in the cases where we trade only long or only short
if (strategy.position_size > 0 and shortCondition)
    strategy.exit(id="exit long", stop=close)
if (strategy.position_size < 0 and longCondition)
    strategy.exit(id="exit short", stop=close)



더 많은