트렌드 추적 역전 전략

저자:차오장, 날짜: 2024-01-03 16:34:28
태그:

img

전반적인 설명

트렌드 트래킹 역전 전략은 이동 평균과 가격 극단에 기반한 트렌드 거래 전략이다. 이 전략은 두 개의 이동 평균을 사용하여 가격 추세를 추적하고 트렌드가 역전되면 역전 포지션을 개설합니다. 동시에 최근 K 라인의 가장 높고 가장 낮은 가격에 기반한 가격 채널을 계산하여 가격이 채널 경계에 접근하면 손실을 중지하여 위험을 제어합니다.

전략 논리

이 전략은 3 기간의 높은 점과 낮은 점 이동 평균 (HMA) 과 LMA를 사용하여 가격 트렌드를 추적합니다. 가격이 HMA를 넘을 때, 상승률로 해석됩니다. 가격이 LMA 아래로 떨어지면, 하락률로 해석됩니다.

이 전략은 또한 최근 바 K 라인 내의 가장 높고 가장 낮은 가격에 기초하여 가격 채널의 상위 및 하위 레일 (uplevel 및 dnlevel) 을 계산합니다. uplevel은 최근 바 K 라인 내의 가장 높은 가격이며, 상향으로 리트레이싱 계수가 더됩니다. dnlevel은 최근 바 K 라인 내의 가장 낮은 가격이며, 하향으로 리트레이싱 계수가 더됩니다. 이것은 가격 채널 범위를 구성합니다.

긴 포지션을 열 때, 스톱 로스 가격은 채널의 상단 레일로 설정되며, 짧은 포지션을 열 때 스톱 로스 가격은 채널의 하단 레일로 설정됩니다. 이것은 가격 역전으로 인한 손실 위험을 효과적으로 제어합니다.

리버스 신호가 나타나면, 전략은 새로운 가격 트렌드를 추적하기 위해 즉시 오픈 포지션을 뒤집습니다. 이것은 리버스 추적의 기본 원칙입니다.

장점

  • 이 전략은 이동 평균을 최대한 활용하여 트렌드를 추적하고 가격 움직임을 빠르게 파악합니다.
  • 가격 채널과 리버스 오픈 포지션을 적용하여 위험을 통제하고 수익을 효과적으로 확보합니다.
  • 전략 논리는 간단하고 명확하고 이해하기 쉽고 실행하기 쉽습니다.
  • 트렌드 판단 길이, 리트레이싱 계수 등과 같은 사용자 정의 가능한 매개 변수는 다른 제품에 적응합니다.
  • 동방 피라미딩을 지원하고 트렌드 기회를 완전히 포착합니다.

위험성

  • 가격 연립 중 잘못된 신호에 취약합니다.
  • 트렌드 반전은 항상 스톱 로드를 유발할 수 없으며 최대 손실은 통제 할 수 없습니다.
  • 부적절한 매개 변수 설정은 너무 민감하거나 느린 반응을 일으킬 수 있습니다.
  • 가장 좋은 결과를 얻기 위해 적절한 제품과 시간 프레임을 선택해야 합니다.

개선 사항:

  1. 유효하지 않은 신호를 다른 표시기로 필터링합니다.
  2. 이윤을 차단하고 최대 유출을 제한하기 위해 이동 스톱 손실을 추가합니다.
  3. 다른 제품과 사이클에 대한 매개 변수를 테스트하고 최적화합니다.

최적화 방향

더 많은 최적화를 할 수 있습니다.

  1. MACD, KD 등과 같은 일부 유효하지 않은 신호를 필터링하기 위해 다른 지표가 도입 될 수 있습니다.

  2. 적응적인 스톱 로스 로직을 추가할 수 있습니다. 예를 들어, 이동 스톱 로스, 균형 스톱 로스 등이 추가로 위험을 제어합니다.

  3. 전략 성능에 대한 다른 매개 변수의 영향을 테스트하고 MA 주기의 길이가, 재구성 계수 크기 등 매개 변수 조합을 최적화합니다.

  4. 이 전략은 현재 시간 세션으로 거래됩니다. 또한 하루 종일 거래하도록 조정할 수 있습니다. 추가 필터링 규칙이 필요할 수 있습니다.

결론

요약하자면, 이것은 가격 채널과 이동 평균을 결합한 트렌드 역전 거래 전략이다. 트렌드를 추적하고 적시에 역 오픈 포지션을 통해 가격 움직임을 효과적으로 추적 할 수 있습니다. 동시에 가격 채널과 역 오픈의 위험 제어 조치는 단일 손실을 효과적으로 제어 할 수 있습니다. 전략 아이디어는 간단하고 명확하며 라이브 거래에서 추가 테스트 및 최적화에 가치가 있습니다.


/*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"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's 3Bars Strategy by Larry Williams", shorttitle = "3Bars", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
corr = input(0.0, title = "Correction, %")
bars = input(1, minval = 1)
revers = input(false, defval = false, title = "revers")
showll = input(true, defval = true, title = "Show Levels")
showos = input(true, defval = true, title = "Show Levels one side")
showcl = input(false, defval = false, title = "Show Levels continuous line")
showbg = input(false, defval = false, title = "Show Background")
showar = input(false, defval = false, title = "Show Arrows")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

len = input(3)

hma = sma(high, len)
lma = sma(low, len)
plot(hma)
plot(lma)

//Levels
hbar = 0
hbar := high > high[1] ? 1 : high < high[1] ? -1 : 0
lbar = 0
lbar := low > low[1] ? 1 : low < low[1] ? -1 : 0
uplevel = 0.0
dnlevel = 0.0
hh = highest(high, bars + 1)
ll = lowest(low, bars + 1)
uplevel := hbar == -1 and sma(hbar, bars)[1] == 1 ? hh + ((hh / 100) * corr) : uplevel[1]
dnlevel := lbar == 1 and sma(lbar, bars)[1] == -1 ? ll - ((ll / 100) * corr) : dnlevel[1]

//Background
size = strategy.position_size
trend = 0
trend := size > 0 ? 1 : size < 0 ? -1 : high >= uplevel ? 1 : low <= dnlevel ? -1 : trend[1]
col = showbg == false ? na : trend == 1 ? lime : trend == -1 ? red : na
bgcolor(col)

//Lines
upcol = na
upcol := showll == false ? na : uplevel != uplevel[1] and showcl == false ? na : showos and trend[1] == 1 ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := showll == false ? na : dnlevel != dnlevel[1] and showcl == false ? na : showos and trend[1] == -1 ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Arrows
longsignal = false
shortsignal = false
longsignal := size > size[1]
shortsignal := size < size[1]
plotarrow(longsignal and showar and needlong ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(shortsignal and showar and needshort ? -1 : na, colorup = blue, colordown = blue, transp = 0)

//Trading
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if uplevel > 0 and dnlevel > 0 and revers == false
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Long stop", strategy.short, 0, stop = lma)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)
    strategy.entry("Short stop", strategy.long, 0, stop = hma)
    
// if time > timestamp(toyear, tomonth, today, 23, 59)
//     strategy.close_all()

더 많은