EMA 지표를 기반으로 한 교차 기간 거래 전략


생성 날짜: 2024-01-29 15:56:56 마지막으로 수정됨: 2024-01-29 15:56:56
복사: 0 클릭수: 608
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

EMA 지표를 기반으로 한 교차 기간 거래 전략

개요

이 전략은 EMA 지표에 기반한 크로스 사이클 트레이딩 전략이다. 이 전략은 두 개의 서로 다른 사이클의 EMA를 구매/판매 신호로 사용하며, 단기 EMA에서 긴 사이클 EMA를 통과할 때 더 많이 하고, 단기 EMA 아래에서 긴 사이클 EMA를 통과할 때 공백하고, 트렌드 추적 전략에 속한다. 이 전략은 위험을 제어하기 위해 동시에 중지 및 중지 위치를 설정한다.

전략 원칙

이 전략은 EMA 지표의 골드포크를 거래 신호로 사용합니다. 구체적으로, 단기 EMA와 장기 EMA를 각각 계산하여, 단기 EMA 위에 장기 EMA를 통과하면 구매 신호를 생성합니다. 단기 EMA 아래에 장기 EMA를 통과하면 판매 신호를 생성합니다. 따라서 EMA의 이동 경향을 통해 구매 방향을 결정합니다.

포지션에 진입한 후, 전략은 동시에 스톱로스와 스톱을 설정한다. 스톱로스는 진입 가격의 일정한 비율을 스톱 라인으로, 가격이 스톱 라인을 만지면 평지 포지션 스톱; 스톱 포스는 진입 가격의 일정한 비율을 스톱 라인으로, 가격이 스톱 라인을 만지면 평지 포지션 스톱.

이 전략은 또한 오직 상장 또는 상하만을 선택하도록 허용하며, 일일 거래 또는 포지션 거래를 선택할 수 있다. 일일 거래의 경우, 주식 종결 전에 평지 포지션을 강제한다.

우위 분석

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

  1. EMA 지표의 곡선을 필터링하여 고주파동의 오해를 피하고, 순차적으로 중·장선 추세를 포착할 수 있다.

  2. 단기 EMA와 장기 EMA의 교차를 거래 신호로 사용해서 자주 거래하는 것을 피한다.

  3. 각 주문의 리스크/이익 비율을 제어하기 위해 스톱로스 스톱을 설정하여 자금 관리에 도움이 됩니다.

  4. 오로지 상장 또는 상장, 그리고 일일 거래 또는 포지션 거래의 선택이 가능하며, 다양한 유형의 거래자에게 적합합니다.

  5. 다양한 거래 유형을 지원합니다. 주식, 외환, 디지털 통화 등이 포함됩니다.

위험 분석

이 전략에는 몇 가지 잠재적인 위험도 있습니다.

  1. EMA 지표는 지연되어 있으며, 단기 트렌드 전환점을 놓칠 수 있다.

  2. 장기단기 EMA 선택이 잘못되면 거래 신호에 오류가 발생할 수 있습니다.

  3. 지분 보유 기간이 너무 길어지면 더 큰 시장의 충격에 노출될 수 있습니다.

  4. 기계적으로 손실을 막는 것은 조기 퇴장하거나 수익을 줄일 수 있다.

이에 대응하는 위험 관리 조치들은:

  1. EMA 변수를 최적화하여 최적의 주기 조합을 찾습니다.

  2. 다른 지표들을 보조적으로 추가해 보세요.

  3. 동적으로 조정된 스로스 스탠드 포지션

  4. “인간의 개입이 비정상적인 상황”

최적화 방향

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

  1. EMA 파라미터를 최적화하여 다양한 품종에 적합한 길고 짧은 주기 조합을 찾습니다.

  2. MACD, KD 등과 같은 다른 지표 판단을 추가하여, 다중 지표 공진을 구현한다.

  3. 기계 학습 모형 훈련이 증가하여 동적 스톱 손실을 생성합니다.

  4. 더 진보된 RISK 지표에 접근하여 특성을 설계한다.

  5. 자율적 거래 요소를 추가하고 매개 변수를 자동으로 최적화합니다.

요약하다

이 전략은 전체적으로 우수한 트렌드 추적 전략 템플릿이며, 핵심 장점은 EMA 지표 필터링 소음을 사용하여 안정적인 수익을 달성하는 것과 동시에 완벽한 위험 수익 관리를 갖는 것입니다. 지속적인 최적화를 통해 이 전략은 시장 전반에 걸쳐 통용되는 양적 전략이 될 수 있으며, 거래자가 학습하고 실천할 가치가 있습니다.

전략 소스 코드
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Crossover Strategy by Vikrant Singh", overlay=true)


// Input for EMA Lengths
var bool runningPOS = false
var float stopLossLevel = na
var float targetLevel = na
shortLength = input(11, title="Short EMA Length")
longLength = input(21, title="Long EMA Length")

// Input for Stop-Loss and Target
stopLossPct = input(1, title="Stop-Loss (%)")
targetPct = input(3, title="Target (%)")
longOnly = input(true, title="Long Only")
intraDay = input(true, title="intraday?")


// Calculate EMAs
emaShort = ta.ema(close, shortLength)
emaLong = ta.ema(close, longLength)

// Calculate crossover conditions
crossoverCondition = ta.crossover(emaShort, emaLong)
crossunderCondition = ta.crossunder(emaShort, emaLong)

// Entry condition (long position just before crossover)
if crossoverCondition and not runningPOS and longOnly and (hour <= 15)
    strategy.entry("Long", strategy.long)
    runningPOS := true
    stopLossLevel := close * (1 - stopLossPct / 100)
    targetLevel := close * (1 + targetPct / 100)

//Entry condition (short position just before crossover)
if crossunderCondition and not runningPOS and not longOnly and (hour <= 15)
    strategy.entry("Short", strategy.short)
    runningPOS := true
    stopLossLevel := close * (1 + stopLossPct / 100)
    targetLevel := close * (1 - targetPct / 100)

// Exit conditions (square off on reverse crossover)
//Exit long
if (crossunderCondition or (low < stopLossLevel) or (high > targetLevel) ) and longOnly and runningPOS
    strategy.close("Long",comment = "Exit long")// ("Long", from_entry="Long",stop=stopLossLevel, limit=targetLevel)
    runningPOS := false

//Exit short
if (crossoverCondition or (high > stopLossLevel) or (low < targetLevel) ) and not longOnly and runningPOS
    strategy.close("Short", comment = "Exit Short")
    runningPOS := false

if intraDay and runningPOS
    if (hour >= 15)
        strategy.close_all(comment = "Intraday square off")
        //strategy.close("Long",comment = "intraday square off")
        runningPOS := false


// Plot EMAs
plot(emaShort, color=color.blue, title="Short EMA")
plot(emaLong, color=color.red, title="Long EMA")