트리플 EMA 크로스오버 브레이크업 전략

저자:차오장, 날짜: 2023-12-28 15:56:54
태그:

img

전반적인 설명

트리플 EMA 크로스오버 브레이크아웃 전략은 시장 트렌드 방향을 결정하고 트렌드 브레이크아웃 지점에 진입하기 위해 트리플 기하급수적인 이동 평균 (EMA) 지표를 사용합니다. 또한 신호 신뢰성을 필터링하기 위해 촛불 패턴을 결합합니다.

전략 논리

이 전략은 주로 다음과 같은 원칙에 기초합니다.

  1. 주요, 중장기 및 단기 시장 추세를 결정하기 위해 다른 기간 (200 일, 50 일, 20 일) 을 가진 세 개의 EMA를 사용하십시오.

  2. 단기 EMA (20일) 가 중기 EMA (50일) 를 넘을 때 구매 신호가 생성됩니다. 이보다 낮을 때 판매 신호가 생성됩니다.

  3. 신호 신뢰성을 확인하기 위해 촛불 패턴을 결합합니다. 두 번째 촛불의 폐쇄 가격이 이전 촛불의 높은 (저한) 가격보다 높을 때만 브레이크아웃이 신뢰할 수 있다고 간주됩니다.

  4. 스톱 로스를 설정하고 수익 수준을 취하여 합리적인 가격 변동 이상의 위험을 제한합니다.

이점 분석

  1. 여러 EMA를 사용하면 트렌드 판단의 정확도가 향상됩니다.

  2. 촛불 패턴으로 가짜 신호를 필터링하면 불필요한 거래 위험을 피할 수 있습니다.

  3. 스톱 손실 및 이익 취득은 단일 거래 손실을 효과적으로 제어합니다.

위험 분석

  1. 시장의 범위에서 EMA는 과도한 가짜 신호를 생성하고 시장 방향을 결정하지 못할 수 있습니다.

  2. 단일 지표 시스템은 복잡한 시장 상황에서 제한된 용량을 가지고 있습니다.

  3. 높은 수수료 시장에서 수익성이 떨어질 수 있는 거래 비용을 무시합니다.

최적화

  1. MACD와 KDJ와 같은 다른 지표를 도입하여 결합된 시스템을 형성하고 판단의 정확성을 향상시킵니다.

  2. 특정 기호와 시간 프레임에 대한 백테스팅을 통해 매개 변수를 최적화하여 전략을 더 잘 맞출 수 있습니다.

  3. 거래 부피를 늘려서 적은 거래량으로 가짜 신호를 피합니다.

결론

트리플 EMA 크로스오버 브레이크아웃 전략은 시장 트렌드를 결정하고 EMA 크로스오버를 사용하여 진입 시기를 찾기 위해 명확하고 이해하기 쉬운 논리를 가지고 있습니다. 그러나 복잡한 시장 상황을 처리하는 데에도 몇 가지 한계가 있습니다. 다른 지표와 결합하고 다양한 거래 환경에 적응하기 위해 매개 변수를 최적화하는 것이 좋습니다.


/*backtest
start: 2022-12-21 00:00:00
end: 2023-12-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("GHG RETRACEMENT MODE 1", overlay=true)

entryLevel1 = input(0.5, "ENTRY LEVEL 1")
entryLevel2 = input(0.25, "ENTRY LEVEL 2")
entryLevel3 = input(0.0, "ENTRY LEVEL 3")

stopLevel = input(-0.35, "STOP LEVEL")
tpLevel = input(0.88, "TP LEVEL")
dontUseEma = input(false, "Don't Use EMA")


get_level(level, level100, level0) =>
    level * (level100 - level0) + level0

buySignal = close[2] < open[2] and close[1] > open[1] and close[0] > open[0] and high[0] > open[2] and high[1] < high[2]
sellSignal = close[2] > open[2] and close[1] < open[1] and close[0] < open[0] and low[0] < open[2] and low[1] > low[2]

if buySignal and (close[0] > ta.ema(close, 200) or dontUseEma)
    l = label.new(bar_index, na)
    entryPrice1 = get_level(entryLevel1, high[0], low[2])
    entryPrice2 = get_level(entryLevel2, high[0], low[2])
    entryPrice3 = get_level(entryLevel3, high[0], low[2])
    
    exitPrice = get_level(tpLevel, high[0], low[2])
    stopPrice = get_level(stopLevel, high[0], low[2])
    
    strategy.order("BUY 1", strategy.long, comment="BUY 1", limit=entryPrice1)
    strategy.exit("exit", "BUY 1", limit=high[0], stop=stopPrice)
    strategy.order("BUY 2", strategy.long, comment="BUY 2", limit=entryPrice2)
    strategy.exit("exit", "BUY 2", limit=high[0], stop=stopPrice)

    label.set_text(l, "Buy => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
    label.set_color(l, color.green)
    label.set_yloc(l, yloc.belowbar)
    label.set_style(l, label.style_label_up)
    
if sellSignal and (close[0] < ta.ema(close, 200) or dontUseEma)
    a = label.new(bar_index, na)
    entryPrice1 = get_level(entryLevel1, low[0], high[2])
    entryPrice2 = get_level(entryLevel2, low[0], high[2])
    entryPrice3 = get_level(entryLevel3, low[0], high[2])
    
    exitPrice = get_level(tpLevel, low[0], high[2])
    stopPrice = get_level(stopLevel,low[0], high[2])
    
    strategy.order("SELL 1", strategy.short, comment="SELL 1", limit=entryPrice1)
    strategy.exit("exit", "SELL 1", limit=low[0], stop=stopPrice) 
    strategy.order("SELL 2", strategy.short, comment="SELL 2", limit=entryPrice2)
    strategy.exit("exit", "SELL 2", limit=low[0], stop=stopPrice) 

    label.set_text(a,"Sell => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
    label.set_color(a, color.red)
    label.set_yloc(a, yloc.abovebar)
    label.set_style(a, label.style_label_down)
   


더 많은