트렌드 추적 단기 거래 전략

저자:차오장, 날짜: 2024-01-04 17:52:21
태그:

img

전반적인 설명

이 전략은 트렌드 판단 지표 ADX와 이동 평균을 사용하여 트렌드를 결정하고 추적합니다. 트렌드 반전이 확인되면 단기 거래를 위해 브레이크아웃 작전을 사용합니다.

전략 논리

  1. 추세 방향을 판단하기 위해 ADX를 사용하십시오. 20 이상의 ADX는 추세 시장을 나타냅니다.
  2. 상승 추세와 하락 추세를 결정하기 위해 EMA 크로스오버를 사용하십시오. 상승 추세를위한 황금 십자 및 하락 추세를위한 죽음의 십자.
  3. 중요한 기준 가격 수준으로 VWAP를 사용하십시오. VWAP 이상의 가격은 상승 분위기를 나타내고 아래는 하락 분위기를 나타냅니다.
  4. 트렌드 전환이 확인되면 지표에서 종합적인 트렌드 분석을 기반으로 포지션을 입력합니다. 단기 거래를 사용하여 새로운 트렌드를 추적합니다.

이점 분석

  1. 다중 지표를 이용한 종합적인 트렌드 분석은 정확성을 향상시킵니다.
  2. VWAP는 비효율적인 가격 영역에서 거래를 피합니다.
  3. ADX가 트렌드를 확인할 때만 거래하세요. 잘못된 신호를 피하세요.
  4. 브레이크아웃 거래는 성공 가능성이 높습니다.

위험 분석

  1. 스톱 로스로 이어지는 실패한 브레이크오웃은 가능합니다. 스톱 로스 배치를 최적화 할 수 있습니다.
  2. 더 높은 거래 빈도는 개인 손실 거래를 위험 합니다. 위치 크기를 조정할 수 있습니다.
  3. 시간 프레임과 기호 선택은 성능에 영향을 미칩니다. 다른 구성을 테스트하세요.

최적화 방향

  1. ADX 매개 변수를 최적화하여 트렌드 대 범위 식별을 개선합니다.
  2. 트렌드를 더 잘 파악하기 위해 EMA 조합을 테스트합니다.
  3. 거래 비용을 줄이기 위해 스톱 로스를 넓혀라
  4. 포지션 크기를 거래당 낮은 위험으로 줄이세요.

결론

이 전략은 이동 평균, 트렌드 지표 및 주요 가격 수준을 종합적으로 활용하여 시장 트렌드를 정확하게 결정합니다. 트렌드 반전에서 거래 파기까지 식별하고 단기 수익을위한 새로운 트렌드 방향을 추적합니다. 추가 최적화는 성능을 향상시킬 수 있습니다.


/*backtest
start: 2023-12-27 00:00:00
end: 2023-12-29 23:00:00
period: 3m
basePeriod: 1m
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/
// © mariocastel

//@version=5
strategy("Wave Rider", overlay=true, initial_capital = 100000)

session = input(defval = "1400-1500", title = "Session Time")
t = not na(time(timeframe.period,session))
RR = input.float(1.5, "Risk to reward", step=0.5)
var bool movetoBE = input(false, "Move to Break Even")
BE = input.float(1, "Break Even at", step=0.5)

vwap_mult = 0.001 * input(3, "VWAP Multiplier")
aboveVWAP = ta.vwap(close) * (1 + vwap_mult)
belowVWAP = ta.vwap(close) * (1 - vwap_mult)
sym = input("BTC_USDT:swap", "VWAP Source")

QQQaboveVWAP = request.security(sym, "3", aboveVWAP)
QQQbelowVWAP = request.security(sym, "3", belowVWAP)
QQQclose = request.security(sym, "3", close)

ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema60 = ta.ema(close, 60)
ema9 = ta.ema(close, 9)

opentrades = strategy.opentrades > 0

aboveEMA = close > ema60
belowEMA = close < ema60

uptrend = aboveEMA and aboveEMA[1] and aboveEMA[2] and aboveEMA[3] and aboveEMA[4] and aboveEMA[5] and aboveEMA[6] and aboveEMA[7] and aboveEMA[8] and aboveEMA[9] and aboveEMA[10] and aboveEMA[11] and aboveEMA[12] and aboveEMA[13] and aboveEMA[14] and aboveEMA[15] and aboveEMA[16] and aboveEMA[17] and aboveEMA[18] and aboveEMA[19] and aboveEMA[20] and aboveEMA[21] and aboveEMA[22] and aboveEMA[23] and aboveEMA[24] and aboveEMA[25] and aboveEMA[26] and aboveEMA[27] and aboveEMA[28] and aboveEMA[29]
downtrend = belowEMA and belowEMA[1] and belowEMA[2] and belowEMA[3] and belowEMA[4] and belowEMA[5] and belowEMA[6] and belowEMA[7] and belowEMA[8] and belowEMA[9] and belowEMA[10] and belowEMA[11] and belowEMA[12] and belowEMA[13] and belowEMA[14] and belowEMA[15] and belowEMA[16] and belowEMA[17] and belowEMA[18] and belowEMA[19] and belowEMA[20] and belowEMA[21] and belowEMA[22] and belowEMA[23] and belowEMA[24] and belowEMA[25] and belowEMA[26] and belowEMA[27] and belowEMA[28] and belowEMA[29]

buy = (low < ema20 and low > ema50 and close > ema9) and QQQclose > QQQaboveVWAP  or (low[1] < ema20 and low[1] > ema50 and close > ema9) and QQQclose > QQQaboveVWAP and uptrend
sell = (high > ema20 and high < ema50 and close < ema9) and QQQclose < QQQbelowVWAP  or (high[1] > ema20 and high[1] < ema50 and close < ema9) and QQQclose < QQQbelowVWAP and downtrend

var float entry = na
var float sl = na
var float qty = na
var float tp = na
var float be = na

if ema20 > ema50 and ema9 > ema20 
    if buy and not opentrades and t and uptrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(close - sl) * 1
        if close - sl > syminfo.mintick*300
            tp := close + ((close - sl)*1)
        else 
            tp := close + ((close - sl)*RR)
        be := close + ((close - sl)*BE)
        strategy.entry("Buy", strategy.long, qty=qty)
        strategy.exit("Close Buy", "Buy",qty=qty, stop=sl, limit=tp)

if ema20 < ema50 and ema9 < ema20 
    if sell and not opentrades and t and downtrend
        alert("Wave Rider Setup")
        entry := close
        sl := ema50
        qty := 1000/(sl - close) * 1
        if sl - close > syminfo.mintick*300
            tp := close - ((sl - close)*1)
        else
            tp := close - ((sl - close)*RR)
        be := close - ((sl - close)*BE)
        strategy.entry("Sell", strategy.short, qty=qty)
        strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)

// Adjust BEs
if movetoBE == true
    if strategy.position_size > 0
        if high >= be
            sl := entry
            strategy.cancel("Close Buy")
            strategy.exit("Close Buy", "Buy", qty=qty, stop=sl, limit=tp)   
    if strategy.position_size < 0
        if low <= be
            sl := entry
            strategy.cancel("Close Sell")  
            strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp)  


EoD_time = timestamp(year, month, dayofmonth, 15, 58, 00)
EoD = time == EoD_time
if EoD
    strategy.close_all()

barcolor(color=buy ? color.rgb(191, 255, 131): na)
barcolor(color=sell ? color.rgb(255, 149, 149): na)
ema20plot = plot(ema20, color=color.rgb(168, 131, 131, 55))
ema50plot = plot(ema50, color=color.black)
fill(ema20plot, ema50plot, color=color.rgb(168, 131, 131, 85))
plot(ema9, color=color.red)
plot(ema60, color=color.purple)
plot(QQQaboveVWAP)
plot(QQQbelowVWAP)
plotshape(uptrend, style=shape.triangleup, location=location.belowbar, color=color.black)
plotshape(downtrend, style=shape.triangledown, location=location.abovebar, color=color.black)


더 많은