이중 트렌드 브레이크업 전략

저자:차오장, 날짜: 2024-02-19 11:52:40
태그:

img

전반적인 설명

이중 트렌드 브레이크아웃 전략은 트렌드 라인, 이동 평균 크로스오버 및 가격 채널 브레이크아웃을 포함한 여러 기술적 지표를 통합하여 시장의 잠재적 인 전환점을 식별합니다. 트렌드를 포착하고 동력 변화를 활용하는 것을 목표로합니다. 이 전략은 상대적으로 강력한 입출과 출출을위한 트렌드 추적과 브레이크아웃 신호를 결합하지만 잘못된 브레이크아웃의 위험이 있습니다.

전략 논리

트렌드라인

이 전략은 우선 상승세와 하락세를 분할하기 위해 피보트 최고와 하위를 사용합니다. 가격이 트렌드 라인을 깨면 잠재적 인 트렌드 역전을 신호합니다. 기울기는 실제 변동에 따라 유지하기 위해 ATR 방법을 사용하여 계산됩니다.

이동 평균 크로스오버

이 전략은 5일 단기 이동 평균과 34일 장기 이동 평균을 채택하여 빠르고 느린 크로스오버 거래를 수행합니다. 긴 MA 위에 짧은 MA가 넘어가면 구매 신호가 나오고, 아래로 넘어가면 판매 신호가 나옵니다. 빠른 MA는 단기 트렌드를 포착하고 느린 MA는 장기 트렌드를 추적합니다.

가격 채널

이 전략에는 5일 가격 채널도 구성되어 있다. 상단단위 이상의 진입은 긴 진입을 유발하고 하단단단위 이하의 진입은 단기 가격 진입을 포착하기 위한 짧은 진입을 유발한다. 이는 MA 크로스오버와 함께 작동하여 진출 신호의 신뢰성을 결정한다.

세 가지 유형의 기술 지표는 하나의 전략으로 통합되어 강력한 이중 확인 메커니즘을 형성하여 잘못된 거래를 피합니다.

장점

  1. 비교적 신뢰할 수 있는 신호를 위한 여러 지표를 통합하여 거짓 파업으로 인한 손실을 줄입니다.

  2. 빠른 MA와 가격 채널은 단기 트렌드 변화를 빠르게 포착합니다. 느린 MA와 트렌드 라인은 안정적인 진입과 출입을 위해 장기 트렌드를 추적합니다.

  3. 다양한 제품과 시간 프레임에 최적화를 위해 조정 가능한 매개 변수와 함께 깨끗한 코드 구조.

  4. 트렌드 추적과 브레이크아웃 신호를 결합하여 강력한 트렌드에서 수익성을 창출하고 범위 제한 시장에서 위프스를 피합니다.

위험성

  1. 특히 범위를 제한하는 시나리오에서는 허위 유출의 위험이 있으며 손실로 이어질 수 있습니다.

  2. 마이너스 마이너스 크로스 (MA) 의 지연 특성상 큰 트렌드 전환 후 최고를 구매하거나 바닥을 판매할 위험이 있습니다.

  3. 여러 통합 지표는 패러미터 조정에 대한 무거운 백테스팅과 계산을 필요로합니다.

  • 부진 검증을 위해 부피 지표가 추가 될 수 있습니다. 예를 들어 부진에 부피 확장을 요구합니다.

  • 과잉 판매/대량 구매 지표는 매수/판매 고갈 시나리오를 방지합니다.

  • 가짜 거래에서 손실을 통제하기 위해 손실을 중지하십시오.

  • 기계 학습은 거대한 역사적 데이터를 통해 최적의 매개 변수를 빠르게 찾습니다.

강화

  1. 부피 또는 RSI 필터를 추가하여 신뢰할 수 있는 트렌드 변화를 확인하고, 잘못된 브레이크로 인한 손실을 피하기 위해 엄격한 필터를 설정합니다.

  2. 각기 다른 제품의 MA와 채널 매개 변수를 그들의 특성에 맞게 조정합니다.

  3. 트레이일링 스톱 로스, 스톱 리미트 오더를 통해 스톱 로스 메커니즘을 추가하여 거래당 손실을 제한합니다.

  4. 변화하는 시장에서 더 자주 거래하지 않고 강한 트렌드에서 더 자주 거래하기 위해 적응적 접근을 채택합니다.

  5. 심층 학습 모델을 훈련시켜서 단순히 기술적 지표를 사용하는 대신 구매/판매 신호를 생성하도록 합니다. 더 예측 가능한 전략을 찾기 위해 신경망의 패턴 인식 기능을 활용합니다.

결론

이 전략은 여러 인기 있는 기술 지표를 결합하여 트렌드 변화를 비교적 안정적인 백테스트 결과로 효과적으로 파악할 수 있는 이중 확인 시스템을 형성한다. 그러나 필터, 스톱 로스, 매개 변수 조정 및 머신 러닝 기술을 추가함으로써 추가적으로 개선될 수 있는 가짜 브레이크오웃의 위험이 남아 있다. 이것은 라이브 트레이딩에 대한 전략의 견고함을 강화할 수 있다.


/*backtest
start: 2024-02-11 00:00:00
end: 2024-02-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FinanceUpPvtLtd

//@version=5
strategy("FINANCE UP FREE STRATEGY (+919665229664)", overlay=true)

// Script 01 - Trendlines
length_tl = input.int(14, 'Swing Detection Lookback')
mult_tl = input.float(1., 'Slope', minval=0, step=.1)
calcMethod_tl = input.string('Atr', 'Slope Calculation Method', options=['Atr', 'Stdev', 'Linreg'])
backpaint_tl = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')
upCss_tl = input(color.teal, 'Up Trendline Color', group='Style')
dnCss_tl = input(color.red, 'Down Trendline Color', group='Style')
showExt_tl = input(true, 'Show Extended Lines')

var upper_tl = 0.
var lower_tl = 0.
var slope_ph_tl = 0.
var slope_pl_tl = 0.
var offset_tl = backpaint_tl ? length_tl : 0
n_tl = bar_index
src_tl = close
ph_tl = ta.pivothigh(length_tl, length_tl)
pl_tl = ta.pivotlow(length_tl, length_tl)
slope_tl = switch calcMethod_tl
    'Atr'    => ta.atr(length_tl) / length_tl * mult_tl
    'Stdev'  => ta.stdev(src_tl, length_tl) / length_tl * mult_tl
    'Linreg' => math.abs(ta.sma(src_tl * n_tl, length_tl) - ta.sma(src_tl, length_tl) * ta.sma(n_tl, length_tl)) / ta.variance(n_tl, length_tl) / 2 * mult_tl
slope_ph_tl := ph_tl ? slope_tl : slope_ph_tl
slope_pl_tl := pl_tl ? slope_tl : slope_pl_tl
upper_tl := ph_tl ? ph_tl : upper_tl - slope_ph_tl
lower_tl := pl_tl ? pl_tl : lower_tl + slope_pl_tl
var upos_tl = 0
var dnos_tl = 0
upos_tl := ph_tl ? 0 : close > upper_tl - slope_ph_tl * length_tl ? 1 : upos_tl
dnos_tl := pl_tl ? 0 : close < lower_tl + slope_pl_tl * length_tl ? 1 : dnos_tl

// var uptl_tl = line.new(na, na, na, na, color=upCss_tl, style=line.style_dashed, extend=extend.right)
// var dntl_tl = line.new(na, na, na, na, color=dnCss_tl, style=line.style_dashed, extend=extend.right)
// if ph_tl and showExt_tl
//     uptl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? ph_tl : upper_tl - slope_ph_tl * length_tl)
//     uptl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? ph_tl - slope_tl : upper_tl - slope_ph_tl * (length_tl + 1))
// if pl_tl and showExt_tl
//     dntl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? pl_tl : lower_tl + slope_pl_tl * length_tl)
//     dntl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? pl_tl + slope_tl : lower_tl + slope_pl_tl * (length_tl + 1))

plot(backpaint_tl ? upper_tl : upper_tl - slope_ph_tl * length_tl, 'Upper', color=ph_tl ? na : upCss_tl, offset=-offset_tl)
plot(backpaint_tl ? lower_tl : lower_tl + slope_pl_tl * length_tl, 'Lower', color=pl_tl ? na : dnCss_tl, offset=-offset_tl)

plotshape(upos_tl > upos_tl[1] ? low : na, "Upper Break", shape.labelup, location.absolute, upCss_tl, text="B", textcolor=color.white, size=size.tiny)
plotshape(dnos_tl > dnos_tl[1] ? high : na, "Lower Break", shape.labeldown, location.absolute, dnCss_tl, text="B", textcolor=color.white, size=size.tiny)

alertcondition(upos_tl > upos_tl[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos_tl > dnos_tl[1], 'Downward Breakout', 'Price broke the up-trendline downward')

// Script 02 - Channel Breakout
length_channel = input.int(title="Channel Length", minval=1, maxval=1000, defval=5)
upBound_channel = ta.highest(high, length_channel)
downBound_channel = ta.lowest(low, length_channel)
if (not na(close[length_channel]))
    strategy.entry("LE-LE", strategy.long, stop=upBound_channel + syminfo.mintick, comment="LE-LE")
strategy.entry("BECH-DE", strategy.short, stop=downBound_channel - syminfo.mintick, comment="BECH-DE")

// Script 03 - MA Cross
shortlen_ma = input.int(5, "Short MA Length", minval=1)
longlen_ma = input.int(34, "Long MA Length", minval=1)
short_ma = ta.sma(close, shortlen_ma)
long_ma = ta.sma(close, longlen_ma)
plot(short_ma, color=#FF6D00, title="Short MA")
plot(long_ma, color=#43A047, title="Long MA")
plot(ta.cross(short_ma, long_ma) ? short_ma : na, color=#2962FF, style=plot.style_cross, linewidth=4, title="Cross")


더 많은