광대역 진동 잠금 전략


생성 날짜: 2024-02-22 13:43:14 마지막으로 수정됨: 2024-02-22 13:43:14
복사: 0 클릭수: 777
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

광대역 진동 잠금 전략

개요

광대역 흔들림 잠금 전략은 부린띠 지표에 기반하여 시장의 변동성이 감소했는지 판단하는 긴 선의 돌파 전략이다. 시장이 흔들림 정리 단계에 진입할 때 부린띠 하향 경로가 수렴되며, 이 때 우리는 기회로 진입한다. 우리는 또한 평균 실제 변동 범위 지표와 결합하여 가격 변동성이 감소했음을 확인한다.

전략 원칙

이 전략은 주로 부린 반지 지표에 의존하여 가격이 낮은 변동의 변동 기간에 진입했는지 여부를 판단한다. 부린 반지 중간 궤도선은 종결 가격의 이동 평균이며, 상하 궤도는 각각 중간 궤도 상하 각 변동의 두 표준 차이를 나타낸다. 가격 변동성이 감소하면 상하 궤도 간격이 눈에 띄게 좁아진다. 부린 반지 수축이 발생했는지 여부를 초기 판단할 때, 현재 ATR 값이 부린 반지 상하 궤도 간격의 표준보다 작지 여부를 검출한다. 이것은 가격이 막 변동 상태를 정리했다는 것을 나타냅니다.

변동성의 하락을 추가적으로 확인하기 위해, 우리는 ATR 값의 이동 평균이 하락하는 경향을 보이고 있는지 검사를했습니다. 평균 ATR 값의 하락은 변동성이 감소하고 있다는 측면의 증거이기도합니다. 위의 두 가지 조건이 동시에 충족되면, 우리는 부린 밴드가 명백한 수렴이 발생했다고 판단했습니다.

구매 후, 우리는 ATR 값의 두 배로 손해 중지 거리를 위한 모바일 손해 중지 전략을 활성화합니다. 이것은 손실을 효과적으로 제어 할 수 있습니다.

우위 분석

이 전략의 가장 큰 장점은 시장이 낮은 변동의 충격 정리 기간에 들어가는 것을 정확하게 판단하여 최적의 구매 시간을 결정한다는 것입니다. 다른 긴 라인 전략에 비해 광대역 충격 잠금 전략의 수익률이 높습니다.

두 번째로, 이 전략은 이동적 손실을 사용하여 위험을 적극적으로 제어합니다. 이것은 심지어 불리한 상황에서도 손실을 최소화 할 수 있습니다. 이것은 많은 긴 라인 전략이 부족한 것입니다.

위험 분석

전략의 주요 위험은 부린띠 지표가 가격 변동성의 변화를 100% 정확하게 판단할 수 없다는 것입니다. 부린띠 오판 변동성이 낮아지면, 우리가 구매하는 시기는 불리할 수 있습니다. 이 때 이동 상쇄가 중요한 역할을하며, 가능한 한 빨리 상쇄 탈퇴를 할 수 있습니다.

또한, 전략의 다양한 파라미터의 설정도 결과에 영향을 미칩니다. 우리는 많은 피드백을 통해 최적화 파라미터를 사용하여 전략을 더 안정적으로 만들 필요가 있습니다.

최적화 방향

우리는 부린이 수축하는 동안 다른 지표를 추가하여 트렌드 지표가 전환되는 것을 확인하는 것을 고려할 수 있습니다. 예를 들어 부린이 수축하는 동안 MACD 차이는 양변으로 전환되었거나 RSI가 초과 구매 지역에서 탐색되었습니다. 이것은 구매 시기의 정확성을 더욱 향상시킬 수 있습니다.

다른 방향은 다른 변수들이 결과에 미치는 영향을 테스트하는 것입니다. 예를 들어, 브린 밴드 주기와 ATR 주기와 이동 스톱 로즈 배수 등의 설정을 사용합니다. 우리는 단계적 최적화를 사용하여 최적의 변수 조합을 찾습니다.

요약하다

광대역 흔들림 잠금 전략은 가격 변동성이 감소하는 시기를 판단하기 위해 브린 대역 지표를 사용하며, 이동한 스톱로스를 사용하여 위험을 효과적으로 제어하는, 비교적 안정적인 긴 선의 돌파 전략이다. 우리는 여전히 더 많은 매개 변수를 최적화하고 다른 지표를 조합하여 전략의 안정성을 향상시킬 필요가 있다.

전략 소스 코드
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DojiEmoji

//@version=4
strategy("[KL] Bollinger Bands Consolidation Strategy",overlay=true,pyramiding=1)

// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("19 Apr 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }

// Indicator: BOLL bands {
BOLL_length = 20//input(20,title="Periods to lookback for BOLL and ATR calc. (default 20)")
BOLL_src = close
BOLL_center = sma(BOLL_src, BOLL_length)
BOLL_sDEV_x2 = 2 * stdev(BOLL_src, BOLL_length)
BOLL_upper = BOLL_center + BOLL_sDEV_x2
BOLL_lower = BOLL_center - BOLL_sDEV_x2
plot(BOLL_center, "Basis", color=#872323, offset = 0)
BOLL_p1 = plot(BOLL_upper, "Upper", color=color.navy, offset = 0, transp=50)
BOLL_p2 = plot(BOLL_lower, "Lower", color=color.navy, offset = 0, transp=50)
fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85)
// }
// ATR and volatility Indicator {
ATR_x2 = atr(BOLL_length) * 2 // multiplier aligns with BOLL
avg_volat = sma(ATR_x2, BOLL_length)
//}

// Trailing stop loss {
var entry_price = float(0)
var trailing_SL_buffer = float(0)
var stop_loss_price = float(0)
trail_profit_line_color = color.green
UPDATE_ATR_TSL = false
if strategy.position_size == 0 or not within_timeframe // make TSL line less visible
    trail_profit_line_color := color.black
    stop_loss_price := close - trailing_SL_buffer
else if strategy.position_size > 0
    if UPDATE_ATR_TSL and ATR_x2 < trailing_SL_buffer
        trailing_SL_buffer := ATR_x2
    stop_loss_price := max(stop_loss_price, close[1] - trailing_SL_buffer)
plot(stop_loss_price,color=trail_profit_line_color)
// }


IGNORE_BOLL_SHAPE = false//input(false,title="Ignore BOLL (vs ATR) during entry (experimental)")
IGNORE_VOLATILITY = false///input(false,title="Ignore average ATR during entry (experimental)")
// Main:
if within_timeframe
    // ENTRY:
    if (ATR_x2 > BOLL_sDEV_x2 or IGNORE_BOLL_SHAPE) and (avg_volat < avg_volat[1] or IGNORE_VOLATILITY)
        if strategy.position_size == 0
            entry_price := close
            trailing_SL_buffer := ATR_x2
            stop_loss_price := close - ATR_x2
            strategy.entry("Long",strategy.long, comment="enter")
        if strategy.position_size > 0
            strategy.entry("Long",strategy.long, comment="+")

    // EXIT:
    if strategy.position_size > 0
        if low <= stop_loss_price
            if close > entry_price
                strategy.close("Long", comment="take profit")
            else if low <= entry_price
                strategy.close("Long", comment="stop loss")
    
            if strategy.position_size == 0
                entry_price := 0