추세 추종 반전 전략


생성 날짜: 2024-01-03 16:34:28 마지막으로 수정됨: 2024-01-03 16:34:28
복사: 0 클릭수: 653
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

추세 추종 반전 전략

개요

트렌드 추적 반전 전략은 이동 평균과 가격 극한을 기반으로 한 트렌드 거래 전략이다. 이 전략은 두 개의 이동 평균을 사용하여 가격 트렌드를 추적하고, 트렌드가 반전될 때 반전 포지션을 열는다. 동시에, 그것은 최근 몇 개의 K 선의 최고 가격과 최저 가격에 따라 가격 채널을 계산하고, 가격이 채널 경계에 접근했을 때 스톱로스를 설정하여 위험을 더 제어한다.

전략 원칙

이 전략은 3개의 길이의 고위와 낮은 이동 평균 hma와 lma를 사용하여 가격 추세를 추적합니다. 가격이 hma를 통과하면 상향으로 해석하고, 가격이 lma를 통과하면 하향으로 해석합니다.

이 전략은 또한 가장 최근의 bars 루트 K 라인 내의 최고 가격과 최저 가격에 따라 가격 통로의 상하 궤도를 계산합니다. uplevel 및 dnlevel。uplevel은 가장 최근의 bars 루트 K 라인 내의 최고 가격에 따라 하향 조정 계수corr을 추가합니다.

더 많은 주문을 열었을 때, 중지 가격은 통로 상반도로; 공명 주문을 열었을 때, 중지 가격은 통로 하반도로. 이것은 가격 역전으로 인한 손실 위험을 효과적으로 제어 할 수 있습니다.

역전 신호가 발생하면, 이 전략은 즉시 역전 포지션을 열고, 새로운 가격 추세를 추적한다. 이것은 역전 원칙을 추적하는 것이다.

전략적 이점

  • 이 전략은 동향을 추적하는 이동 평균의 장점을 최대한 활용하여 가격 동향을 빠르게 포착합니다.
  • 가격 통로와 반전 포지션을 사용하여 위험을 통제하고 수익을 효과적으로 고정하십시오.
  • 전략의 논리는 간단하고 명확하며, 이해하기 쉽고 실행이 가능합니다.
  • 트렌드 판단 길이, 회귀 계수 등과 같은 사용자 정의 가능한 매개 변수들은 다른 품종에 적합하다.
  • 동시대화 시장을 지원하여 트렌드 기회를 충분히 잡을 수 있습니다.

전략적 위험

  • 가격 변동이 잘못된 신호를 유발할 수 있습니다.
  • “지향의 반전이 반드시 정지 손실을 유발할 수 없으며 최대 손실은 통제할 수 없습니다”.
  • 변수 설정이 잘못되면 너무 민감하거나 느려질 수 있습니다.
  • “그렇게 하면, 이 식물은 더 많은 양을 생산할 수 있습니다.

최적화 방법:

  1. 다른 지표와 함께 필터링은 무효 신호입니다.
  2. 이동 손실을 증가시켜 수익을 고정시키고 최대 인출을 줄입니다.
  3. 다양한 품종과 주기에 대한 파라미터 테스트 및 최적화.

전략 최적화 방향

이 전략에는 더 많은 최적화 가능성이 있습니다:

  1. 다른 지표 조합 filtrate를 도입할 수 있다. 예를 들어 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()