양자 추세 전략

저자:차오장, 날짜: 2024-01-04 15:25:42
태그:

img

전반적인 설명

양성 트렌드 추적 전략은 EMA 라인과 ATR 스톱 로스를 기반으로하는 트렌드 추적 전략이다. EMA 라인을 사용하여 전체 시장 트렌드 방향을 판단하고, 트렌드 수익을 잠금하고 수익을 극대화하기 위해 ATR로 동적으로 스톱 로스를 추적합니다.

원칙

이 전략은 다음과 같은 주요 부분으로 구성됩니다.

  1. 주요 트렌드를 결정하기 위한 EMA 라인

    13일, 50일 및 100일 라인을 사용하여 상승/하락 편향을 형성하고 주요 트렌드 방향을 판단합니다.

  2. ATR 동적 스톱 손실

    ATR 인디케이터를 사용하여 현재 기간의 가격 이동 범위를 계산하고 수익을 잠금하기 위해 스톱 로스 가격을 설정합니다.

  3. 신호 평형화

    잘못된 신호를 피하기 위해 SMA를 사용하여 일정 기간 동안 순탄한 폐쇄 가격을 유지합니다.

  4. 상승/하락 신호

    가격이 EMA 라인을 넘어서면 길게, 밑으로 넘어가면 짧게, 동적 ATR 후속 스톱 로스를 설정합니다.

이점 분석

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

  1. 탁월한 유출 통제, 최대 유출 160% 내에서.
  2. 동적 스톱 손실은 고정된 것보다 더 똑똑합니다. 더 많은 트렌드 수익을 얻을 수 있습니다.
  3. 주요 트렌드를 결정하기 위해 EMA를 사용하는 것은 역전 거래를 피합니다.
  4. 매끄러운 바가 가짜 신호를 필터하고 승률을 향상시킵니다.

위험 분석

또한 몇 가지 위험이 있습니다.

  1. 정적 매개 변수는 다른 제품에 맞지 않을 수 있습니다. 최적화가 필요합니다.
  2. 스톱 로즈는 다양한 시장에서 틈이 있을 수 있습니다.
  3. 신호를 놓치지 않기 위해 서버의 안정성을 필요로 합니다.

이러한 위험은 매개 변수 최적화, 적응력 테스트 등을 통해 줄일 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 기계 학습 알고리즘으로 자동화된 파라미터 최적화
  2. 시장 조건에 따라 적응 스톱 로스를 추가합니다.
  3. 안정성을 높이기 위해 복합 필터를 늘려
  4. 적응력을 높이기 위해 크로스 제품 테스트를 고려하십시오.

결론

요약하자면, 이것은 트렌드 다음 개념을 기반으로 설계된 양성 전략이다. EMA와 함께 트렌드 방향을 결정하고 동적 ATR 스톱 로스를 사용합니다. 트렌드 수익을 캡처하는 동안 인하를 효과적으로 제어 할 수 있습니다. 지속적인 최적화와 반복은 향상된 결과를 창출 할 수 있습니다.


/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Combined Strategy", overlay=true)

// Input variables for EMA Crossover
ema13_length = input(13, title="EMA 13 Length")
ema50_length = input(50, title="EMA 50 Length")
ema100_length = input(100, title="EMA 100 Length")
ema200_length = input(200, title="EMA 200 Length")

// Calculate EMAs for EMA Crossover
ema13 = ema(close, ema13_length)
ema50 = ema(close, ema50_length)
ema100 = ema(close, ema100_length)
ema200 = ema(close, ema200_length)

// Plot EMAs for EMA Crossover
plot(ema13, color=color.blue, title="EMA 13")
plot(ema50, color=color.orange, title="EMA 50")
plot(ema100, color=color.green, title="EMA 100")
plot(ema200, color=color.red, title="EMA 200")

// Input variables for LinReg Candles
signal_length = input(title="Signal Smoothing", type=input.integer, minval=1, maxval=200, defval=11)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=true)

lin_reg = input(title="Lin Reg", type=input.bool, defval=true)
linreg_length = input(title="Linear Regression Length", type=input.integer, minval=1, maxval=200, defval=11)

// Calculate LinReg Candles
bopen = lin_reg ? linreg(open, linreg_length, 0) : open
bhigh = lin_reg ? linreg(high, linreg_length, 0) : high
blow = lin_reg ? linreg(low, linreg_length, 0) : low
bclose = lin_reg ? linreg(close, linreg_length, 0) : close

r = bopen < bclose

signal = sma_signal ? sma(bclose, signal_length) : ema(bclose, signal_length)

plotcandle(r ? bopen : na, r ? bhigh : na, r ? blow: na, r ? bclose : na, title="LinReg Candles", color=color.green, wickcolor=color.green, bordercolor=color.green, editable=true)
plotcandle(r ? na : bopen, r ? na : bhigh, r ? na : blow, r ? na : bclose, title="LinReg Candles", color=color.red, wickcolor=color.red, bordercolor=color.red, editable=true)

plot(signal, color=color.white)

// Input variables for UT Bot Alerts
a = input(1, title="Key Value. 'This changes the sensitivity'")
c = input(10, title="ATR Period")
h = input(false, title="Signals from Heikin Ashi Candles")

// Calculate UT Bot Alerts
xATR = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))

pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 

xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

strategy.entry("Buy", strategy.long, when=buy)
strategy.close("Buy", when=sell)
strategy.entry("Sell", strategy.short, when=sell)
strategy.close("Sell", when=buy)

plotshape(buy, title="Buy", text='Buy', style=shape.labelup, location=location.belowbar, color=color.green, textcolor=color.white, transp=0, size=size.tiny)
plotshape(sell, title="Sell", text='Sell', style=shape.labeldown, location=location.abovebar, color=color.red, textcolor=color.white, transp=0, size=size.tiny)

barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)

alertcondition(buy, "UT Long", "UT Long")
alertcondition(sell, "UT Short", "UT Short")


더 많은