EMA의 크로스오버 양적 거래 전략

저자:차오장날짜: 2024-01-29 15:56:56
태그:

img

전반적인 설명

이것은 EMA 크로스오버 양적 거래 전략이다. 이 전략은 다른 기간을 가진 두 개의 EMA를 거래 신호로 사용하며, 짧은 기간 EMA가 긴 기간 EMA를 넘을 때 긴 기간 EMA를 넘을 때 짧은 기간 EMA가 긴 기간 EMA를 넘을 때 짧은 기간 EMA를 넘을 때 짧은 기간 EMA를 사용합니다. 이 전략은 트렌드 다음 전략에 속합니다. 이 전략은 또한 위험을 제어하기 위해 스톱 로스를 설정하고 수익을 취합니다.

전략 논리

이 전략은 EMA의 황금 십자가와 죽음의 십자가를 거래 신호로 사용합니다. 구체적으로, 그것은 각각 짧은 기간 EMA와 긴 기간 EMA를 계산합니다. 짧은 기간 EMA가 긴 기간 EMA를 넘을 때, 그것은 긴 기간 EMA를 넘을 수있는 구매 신호를 생성합니다. 짧은 기간 EMA가 긴 기간 EMA를 넘을 때, 그것은 짧은 기간 EMA를 넘을 수있는 판매 신호를 생성합니다. 따라서 EMA의 움직이는 추세는 거래 방향을 결정합니다.

포지션을 입력한 후 전략은 동시에 스톱 로스를 설정하고 수익을 취합니다. 스톱 로스는 엔트리 가격의 일정 비율로 스톱 로스 라인입니다. 가격이 스톱 로스 라인을 만지면 스톱 로스 포지션을 종료합니다. 이윤을 취하는 것은 엔트리 가격의 일정 비율로 이윤을 취하는 라인입니다. 가격이 이윤을 취하는 라인을 만지면 이윤을 취하는 포지션을 종료합니다.

이 전략은 또한 단지 긴, 단지 짧은, 내일 거래 또는 포지션 거래를 선택할 수 있습니다. 내일 거래의 경우 시장 종료 전에 모든 포지션을 닫습니다.

이점 분석

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

  1. EMA 지표를 사용하여 소음을 필터하고 중장기 트렌드를 원활하게 파악합니다.

  2. 더 짧은 기간과 더 긴 기간 사이의 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")

더 많은