추세 추종 단기 거래 전략


생성 날짜: 2024-01-04 17:52:21 마지막으로 수정됨: 2024-01-04 17:52:21
복사: 0 클릭수: 588
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

추세 추종 단기 거래 전략

개요

이 전략은 트렌드 판단 지표 ADX 평균 트렌드 지수와 평균 라인 조합을 기반으로 트렌드 판단과 추적을 수행합니다. 트렌드 반전이 발생했을 때, 브레이크 작업을 사용하여 짧은 라인을 거래합니다.

전략 원칙

  1. ADX 평균 트렌드 지수를 사용하여 트렌드 방향을 판단하십시오. ADX가 20보다 크면 현재 트렌드 상태에 있음을 나타냅니다.
  2. EMA는 트렌드를 판단하는 지표로, EMA 금색 포크는 상승 트렌드를 나타내고, 죽은 포크는 하락 트렌드를 나타낸다.
  3. VWAP는 중요한 참고 가격으로, 가격은 VWAP 위쪽은 다단시장, 아래쪽은 공단시장이다.
  4. 위의 여러 지표에 따라 시장의 추세와 반전을 종합적으로 판단하고, 브레이크 작업을 수행하고, 추세를 추적하여 단선 거래를 수행합니다.

우위 분석

  1. 여러 지표들을 종합하여 트렌드를 판단하여 큰 트렌드를 정확하게 판단한다.
  2. VWAP는 중요한 기준 가격으로 유효하지 않은 지역에서 거래하는 것을 피하십시오.
  3. ADX는 트렌드가 존재한다고 판단한 후에 다시 작동하여 무효 거래를 줄인다.
  4. 은 성공률이 높고, 트렌드 운영에 적합하다.

위험 분석

  1. 파격 실패로 인해 스톱 손실이 발생할 가능성이 있다. 스톱 손실 위치를 최적화함으로써 위험을 줄일 수 있다.
  2. 거래의 수가 많으면, 단일 거래에 손실이 발생할 수 있다. 위치 수를 적절히 조정하여 단일 손실 비율을 줄일 수 있다.
  3. 거래 시간 및 거래 종류에 대한 선택은 전략 성능에도 영향을 미칩니다. 다른 거래 시간 및 다른 거래 종류를 테스트 할 수 있습니다.

최적화 방향

  1. ADX 변수를 최적화하여 추세를 더 잘 구분하고 ADX 값을 정리합니다.
  2. 평균선 변수 조합을 최적화하여 추세를 나타내는 더 나은 평균선 조합을 찾습니다.
  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)