EMA 기반 골든크로스 트레이딩 전략


생성 날짜: 2024-02-22 17:48:09 마지막으로 수정됨: 2024-02-22 17:48:09
복사: 1 클릭수: 729
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

EMA 기반 골든크로스 트레이딩 전략

개요

EMA 골드 크로스 트레이딩 전략은 서로 다른 주기의 EMA 평균선을 계산하여, 그들의 교차 상황을 판단하여 구매 및 판매 신호를 발산한다. 짧은 주기의 EMA 상에서 긴 주기의 EMA를 통과하면 구매 신호를 생성하고, 짧은 주기의 EMA 아래에서 긴 주기의 EMA를 통과하면 판매 신호를 생성한다.

전략 원칙

이 전략의 핵심은 두 개의 다른 주기의 EMA 평균을 계산하는 것입니다. 그 중 하나는 짧은 주기의 EMA 평균이며, 기본 주기는 9이며, 더 긴 주기의 EMA 평균은 20입니다. 코드는 파인 스크립트의 built-in ema 함수를 호출하여 각각 두 개의 라인을 계산합니다. 두 개의 EMA 라인이 교차하는지 판단하여 거래를 생성합니다.

교차 신호의 판단은 pine 스크립트의 crossover와 crossunder 두 개의 내장 함수를 통해 실현된다. crossover 함수는 빠른 선이 아래에서 긴 선을 통과하여 부어 값을 반환하는지 판단하고, crossunder 함수는 빠른 선이 위에서 아래에서 긴 선을 통과하여 부어 값을 반환하는지 판단한다. 이 두 가지 함수의 반환값에 따라, 코드는 대응하는 구매 또는 판매 명령을 제출한다.

이 외에도 코드는 시작 및 종료 날짜를 설정하고, 더 많은 작업을 수행하거나 더 많은 작업을 수행하는 것을 제한하는 것과 같은 보조 조건을 제공합니다. 이것은 더 정교한 재검토 또는 최적화를 수행하는 데 도움이됩니다.

우위 분석

이 전략의 가장 큰 장점은 매우 간단하고 직설적이며 이해하기 쉽고 구현하기 쉽고 초보자 학습에 적합하다. 또한, 이동 평균 자체는 추세 추적 지표로서 시장 추세를 효과적으로 추적하여 추세를 사용하여 추가 수익을 창출 할 수 있습니다. 마지막으로, 이 전략의 파라미터가 적고 조정하기 쉽다는 것도 이 전략의 장점 중 하나입니다.

위험 분석

이 전략은 주로 노이즈 트레이딩과 트렌드 반전의 위험에 직면한다. EMA 라인은 단기 시장의 변동에 영향을 받기 쉽고, 잘못된 신호를 생성하여 불필요한 거래를 초래할 수 있으며, 이는 거래 빈도와 비용을 증가시킨다. 다른 한편으로, 교차 신호가 발산될 때, 트렌드가 반전 지점에 가까워질 수 있으며, 이때 거래의 위험이 높다. 또한, 파라미터를 적절하게 설정하지 않으면 전략의 성과에 영향을 줄 수 있다.

EMA 주기를 조정하거나 다른 필터 조건을 추가하는 등의 방법을 사용하여 노이즈 거래를 줄일 수 있습니다. 또한 단독 손실을 제어하기 위해 스톱로스를 설정할 수 있습니다. 최적화 매개 변수는 전략을 더 안정적으로 만들 수 있습니다. 물론, 어떤 거래 전략도 손실을 완전히 피할 수 없으며 약간의 위험을 감수해야합니다.

최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. EMA 주기 변수를 최적화하여 최적의 변수 조합을 찾습니다.
  2. MACD, RSI 등과 같은 다른 지표 필터를 추가하여 가짜 신호를 줄이십시오.
  3. 트렌드를 판단하는 지표를 늘리고, 트렌드 반전을 방지하는 방법
  4. 주식 기본 선택 지표와 결합된
  5. ATR에 따라 정해진 스톱로즈와 같은 포지션 관리 조정

요약하다

EMA 골드 크로스 (EMA Gold Cross) 는 간단한 효과적인 트렌드 추적 전략이다. EMA 크로스 (EMA Cross) 를 사용하여 거래 신호를 생성하여 가격 트렌드를 자동으로 캡처하고, 가격의 트렌드로부터 이익을 얻을 수 있다. 이 전략은 이해하기 쉽고 조정할 수 있으며 초보자 학습에 적합하며 더 복잡한 전략에 모듈로 통합 될 수 있다. 그러나 모든 전략에는 위험이 있으며 적절한 관리가 필요합니다.

전략 소스 코드
/*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)