모멘텀 브레이크오웃 양방향 추적 전략

저자:차오장, 날짜: 2023-12-18 10:47:46
태그:

img

전반적인 설명

이 전략은 동력 지표와 양방향 추적 지표를 결합하여 트렌드 추적을 위해 강한 트렌드에 대한 브레이크업 신호를 캡처합니다. 가격이 상승할 때 길고 가격이 하락할 때 짧습니다. 트렌드 추적 전략 범주에 속합니다.

전략 논리

  1. HiLo 액티베이터 지표는 가장 높은 최고와 가장 낮은 최저의 중간점을 사용하여 중간값을 계산합니다. 가격이 중간값을 넘으면 구매 신호가 생성됩니다. 가격이 중간값을 넘으면 판매 신호가 생성됩니다.

  2. 평균 방향 지표 (ADX) 는 트렌드의 강도를 측정하는 데 사용됩니다. ADX 값이 높을수록 트렌드가 강합니다. 이 전략은 신호를 필터하기 위해 ADX를 임계로 사용하여 트렌드가 충분히 강할 때만 신호를 생성합니다.

  3. 방향 지표 DI+와 DI-는 각각 상승 추세와 하락 추세의 강도를 나타냅니다. 이 전략은 또한 잘못된 신호를 피하기 위해 강도를 확인하기 위해 DI+와 DI- 임계치를 사용합니다.

  4. 구매 신호는 가격이 중간 지점을 넘어섰을 때, ADX가 임계보다 높고 DI+가 임계보다 높을 때 생성됩니다. 판매 신호는 가격이 중간 지점을 넘어섰을 때, ADX가 임계보다 높고 DI-가 임계보다 높을 때 생성됩니다.

이점 분석

이 전략은 초기 브레이크오웃을 포착하고 트렌드를 면밀하게 추적하기 위해 모멘텀 및 트렌드 추후 지표의 장점을 결합합니다. 엄격한 트렌드 필터 조건은 또한 통합 및 범위 기간에 잘못된 신호를 피하는 데 도움이됩니다.

이 전략은 동력 지표만 사용하는 것과 비교하면 신호를 필터하고 수익성을 향상시키기 위해 트렌드 강도 평가를 추가합니다. 순수한 트렌드 추종 전략과 비교하면 이 전략은 브레이크아웃 신호를 통해 트렌드에 더 일찍 들어갈 수 있습니다.

전체적으로, 전략은 동향을 원활하게 추적하고, 적시에 진입하고 출퇴할 수 있으며, 통합에 갇히지 않도록 할 수 있으며, 동향 반전으로 인한 손실을 줄일 수 있습니다.

위험 분석

이 전략은 잘못된 신호를 생성하는 일시적 인 가격 반전으로 인한 약간의 위프사 리스크를 가지고 있습니다. 또한 ADX 및 DI 임계치를 사용하면 초기 기회를 놓칠 수 있습니다.

윙사 리스크를 줄이기 위해, 브레이크아웃 범위를 높이기 위해 HiLo 액티베이터 매개 변수를 조정합니다. 더 많은 기회를 잡기 위해, 신호 품질의 희생으로 ADX 및 DI 임계치를 낮추십시오.

사용자는 또한 제품과 시장 환경의 차이점에도 유의해야합니다. 높은 임계값은 일반적으로 상품에 더 잘 작동하지만 낮은 임계값은 주식과 외환에 적합합니다.

최적화 방향

이 전략을 최적화하는 주요 방법은 다음과 같습니다.

  1. 히로 액티베이터 기간과 트리거 레벨을 조정해

  2. 신호 품질과 주파수를 균형을 맞추기 위해 ADX 기간과 임계값을 조정합니다.

  3. DI+와 DI-에 대해 별도의 임계치를 설정하여 상승 추세와 하락 추세 사이의 차이를 수용합니다.

  4. 단일 거래 손실을 제어하기 위해 Stop Loss 레벨을 가진 Stop Loss 전략을 추가합니다.

  5. 전체 안정성을 향상시키기 위해 다른 보조 지표와 결합합니다.

결론

이 전략은 강력한 트렌드 동안 신호를 생성하기 위해 모멘텀과 트렌드 추적 지표 모두를 고려합니다. 초기 트렌드 기회를 포착하는 데 적합하여 유연하고 긴밀하게 트렌드를 따르는 장점이 있습니다. 또한 잘못된 신호 및 윙사에서 손실을 줄이기 위해 합리적인 위험 제어 능력을 가지고 있습니다. 매개 변수 조정 및 스톱 손실 추가로 안정적인 성능을 달성 할 수 있습니다. 다양한 제품과 시장에 맞는 다재다능한 트렌드 추적 전략으로 양 트레이더로부터 좋은 관심과 응용을받을 자격이 있습니다.


/*backtest
start: 2022-12-11 00:00:00
end: 2023-12-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("HiLo Activator with ADX", shorttitle="HASB_ADX", overlay=true)

// Parameters for the HiLo Activator
length_ha = input(14, title="HiLo Activator Period")
offset_ha = input(0, title="Offset")
trigger_ha = input(1, title="Trigger for Buy/Sell")

// Parameters for ADX
adx_length = input(14, title="ADX Period", minval=1)
adx_threshold = input(25, title="ADX Threshold")
di_threshold = input(50, title="DI Threshold")

// Parameter for choosing the number of candles for backtest
backtest_candles = input(1000, title="Number of Candles for Backtest", minval=1)

// Function to get backtest data
getBacktestData() =>
    var float data = na
    if bar_index >= backtest_candles
        data := security(syminfo.tickerid, "D", close[backtest_candles])
    data

// HiLo Activator calculations
ha = (highest(high, length_ha) + lowest(low, length_ha)) / 2

// ADX calculations
trh = high - high[1]
trl = low[1] - low
tr = max(trh, trl)
atr = sma(tr, adx_length)
plus_dm = high - high[1] > low[1] - low ? max(high - high[1], 0) : 0
minus_dm = low[1] - low > high - high[1] ? max(low[1] - low, 0) : 0
smoothed_plus_dm = sma(plus_dm, adx_length)
smoothed_minus_dm = sma(minus_dm, adx_length)
di_plus = 100 * (smoothed_plus_dm / atr)
di_minus = 100 * (smoothed_minus_dm / atr)
dx = 100 * abs(di_plus - di_minus) / (di_plus + di_minus)
adx = sma(dx, adx_length)

// Buy and Sell signals based on HiLo Activator and ADX
signalLong = crossover(close, ha) and adx > adx_threshold and di_plus > di_threshold
signalShort = crossunder(close, ha) and adx > adx_threshold and di_minus > di_threshold

// Plot HiLo Activator and ADX
plot(ha, color=color.blue, title="HiLo Activator")
plot(offset_ha, color=color.red, style=plot.style_histogram, title="Offset")
plot(adx, color=color.purple, title="ADX")

// Backtest strategy
strategy.entry("Buy", strategy.long, when = signalLong)
strategy.entry("Sell", strategy.short, when = signalShort)
strategy.close("Buy", when = signalShort)
strategy.close("Sell", when = signalLong)

// Accuracy percentage
var accuracy = 0.0
var totalTrades = 0
var winningTrades = 0

if (signalLong or signalShort)
    totalTrades := totalTrades + 1

if (signalLong and (not na(signalLong[1]) and (not signalLong[1])))
    winningTrades := winningTrades + 1

if (signalShort and (not na(signalShort[1]) and (not signalShort[1])))
    winningTrades := winningTrades + 1

accuracy := totalTrades > 0 ? (winningTrades / totalTrades) * 100 : 0

// Plot accuracy percentage on the chart
plot(accuracy, title="Accuracy Percentage", color=color.purple, style=plot.style_histogram)


더 많은