볼링거 밴드 오스실레이션 돌파 전략

저자:차오장, 날짜: 2023-11-01 16:45:54
태그:

img

전반적인 설명

이 전략은 변동성 있는 시장의 오스실레이션과 돌파구에서 이익을 얻기 위해 볼링거 밴드와 아론 지표를 결합합니다. 돌파구 이후 적시에 진입하고 스톱 로스를 설정하고 수익 조건을 취하여 위치에서 올바르게 빠져나갈 수 있습니다.

전략 논리

이 전략은 주로 두 가지 지표를 사용하여 거래 기회와 출구 지점을 식별합니다.

먼저 볼링거 밴드 (Bollinger Bands) 이다. 중간 밴드, 상위 밴드, 하위 밴드로 구성된다. 중간 밴드는 n 기간 동안의 종료 가격의 간단한 이동 평균이다. 상위 밴드는 중간 밴드 + k 표준 편차이다. 하위 밴드는 중간 밴드 - k 표준 편차이다. 하위 밴드에서 중간 밴드의 상향 돌파는 긴 진입을 신호한다. 상위 밴드에서 중간 밴드의 하향 돌파는 짧은 진입을 신호한다. 전략은 오스실레이션 트렌드 중간에 기회 지점을 식별하기 위해 볼링거 밴드를 사용합니다.

두 번째, 아론 지표. 그것은 n 기간 동안 최고와 최저 가격의 상대적 강도를 반영합니다. 아론은 트렌드와 기회를 결정할 수 있습니다. 아론 업 라인이 한 임계보다 높을 때 상승 추세를 나타냅니다. 아론 다운 라인이 한 임계보다 높을 때 하락 추세를 나타냅니다. 전략은 상승 추세를 확인하기 위해 아론 업과 스톱 로스를 결정하기 위해 아론 다운을 사용합니다.

두 지표를 결합하면, 전략은 볼링거 돌파구가 발생하고 Aroon Up가 한 임계보다 높을 때 긴 거리로 간다. Stop Loss가 발생하거나 Aroon Up가 설정된 값 아래로 떨어지면 포지션을 닫습니다.

장점

  1. 여러 지표를 결합하면 정확도가 향상됩니다. 단일 지표는 시장 소음에 민감합니다. 볼링거 밴드와 아론의 조합은 잘못된 신호를 필터링 할 수 있습니다.

  2. 트렌드 반전을 적시에 잡습니다. 볼링거 밴드는 강한 트렌드 식별 능력을 가지고 있으며 단기 돌파 기회를 감지 할 수 있습니다. 아룬은 다양한 시장에서 과도한 거래를 피하기 위해 장기 트렌드를 판단합니다.

  3. 적절한 리스크 제어. 중지 손실 및 Aroon 다운 하락 위험을 제어. 위치 사이즈 또한 거래 손실 당 제한.

  4. 큰 손실이 적은 오스실레이션 시장에 적합합니다. 트렌드를 따르는 전략에 비해 이 전략은 오스실레이션 시장에서 더 잘 수행됩니다.

위험성

  1. 볼링거 밴드는 정확하지 않을 수 있습니다. 갑작스러운 시장 이벤트는 볼링거 밴드를 무효화 할 수 있습니다.

  2. 아론 매개 변수는 최적화가 필요합니다. 다양한 시장은 최상의 결과를 위해 조정된 아론 매개 변수를 필요로 합니다.

  3. 너무 단단한 스톱 손실은 반복적인 트리거를 유발합니다. 반복적인 접촉을 피하기 위해 스톱 손실 범위가 적절히 느슨해야합니다.

  4. 강한 트렌딩 시장을 피하십시오. 전략은 변동 시장에 적합합니다. 강한 트렌딩 시장에서 잘하지 않습니다.

최적화

  1. 볼링거 매개 변수를 최적화하고 적응 가능한 볼링거 대역을 사용하십시오. 더 나은 유연성을 위해 매개 변수를 동적으로 조정 할 수 있습니다.

  2. 동적 Aroon 매개 변수를 최적화. 다른 자산과 시간 프레임은 다른 Aroon 매개 변수를 필요로합니다. 동적 최적화를 연구합니다.

  3. RSI와 같은 필터를 추가하여 과소매/ 과소매를 피합니다. 전략 신호의 정확성을 더욱 향상시킵니다.

  4. 기계 학습을 사용하여 스톱 손실을 최적화하십시오. 알고리즘 훈련은 반복되는 트리거를 최소화하기 위해 더 나은 스톱 손실 방법을 찾을 수 있습니다.

  5. OBV 같은 볼륨과 결합하여 잘못된 브레이크오프를 피합니다. 볼륨 지표는 잘못된 볼링거 브레이크오프 신호를 방지할 수 있습니다.

결론

전체적으로 이것은 전형적인 오스실레이션 거래 전략이다. 그것은 볼링거 밴드와 아론을 결합하여 단기 시장 오스실레이션을 활용할 수 있는 거래 기회를 식별한다. 적절한 스톱 로스, 리스크 관리 및 매개 변수 최적화와 함께, 그것은 범위 시장에 적합하다. 그러나 트렌딩 시장에서 적용을 피하기 위해 최적화와 위험 통제가 필요하다. 추가 개선으로, 그것은 매우 실용적인 양 전략이 될 수 있다.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-10-28 21:00:00
period: 1m
basePeriod: 1m
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/
// © relevantLeader16058

//@version=4
// strategy(shorttitle='Bollinger bands And Aroon Scalping',title='Bollinger bands And Aroon Scalping (by Coinrule)', overlay=true, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 30, commission_type=strategy.commission.percent, commission_value=0.1)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"


// BB inputs and calculations
lengthBB = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, lengthBB)
dev = mult * stdev(src, lengthBB)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)


lengthAr = input(288, minval=1)
AroonUP = 100 * (highestbars(high, lengthAr+1) + lengthAr)/lengthAr
AroonDown = 100 * (lowestbars(low, lengthAr+1) + lengthAr)/lengthAr


Confirmation = input(90, "Aroon Confirmation")
Stop = input(70, "Aroon Stop")

Bullish = crossunder (close, basis)
Bearish = crossunder (close, upper)

//Entry 

strategy.entry(id="long", long = true, when = Bullish and AroonUP > Confirmation and window())

//Exit

strategy.close("long", when = Bearish or AroonUP < Stop and window())




더 많은