Bollinger Band Mean Reversal 전략과 함께 Intraday Intensity Index

저자:차오장, 날짜: 2024-02-20 15:07:59
태그:

img

전반적인 설명

이 전략은 볼링거 밴드 (Bollinger Bands) 와 인트라데이 인텐시티 인덱스를 기반으로 한 평균 반전 전략이다. 입시 시기를 결정하기 위해 볼링거 밴드 상부 및 하부 밴드의 가격 브레이크오웃을 볼링거 밴드 (Bollinger Bands) 인트라데이 인텐시티 인덱스와 결합하여 활용한다. 이 전략의 장점은: 가격의 평균 반전에서 수익을 창출하고 볼륨 지표로 신호를 필터링하는 것을 포함한다. 그러나 큰 드라우다운과 긴 수익 시간과 같은 위험도 있습니다.

전략 원칙

이 전략은 먼저 볼링거 밴드의 중간 밴드, 상위 밴드 및 하위 밴드를 계산합니다. 중간 밴드는 폐쇄 가격의 간단한 이동 평균 또는 기하급수 이동 평균입니다. 상위 및 하위 밴드는 중간 밴드에서 두 개의 표준 편차를 더하거나 빼면서 구성됩니다. 가격이 하위 밴드를 통과하면 긴 위치를 취함으로써 평균 반전의 기회로 간주됩니다. 가격이 상위 밴드를 통과하면 평균에서 과도한 편차로 간주되며 짧은 위치를 취합니다.

판단을 위한 보조 지표로, 전략은 Intraday Intensity Index를 도입한다. 이 지표는 가격과 부피 정보를 모두 결합한다. 지표가 긍정적일 때, 구매력이 강화되고 있음을 나타내고 긴 신호를 준다. 지표가 부정적일 때, 판매력이 강화되고 있음을 나타내고 짧은 신호를 준다.

포지션을 개척하기 위해 전략은 볼링거 밴드 (Bollinger Bands band) 의 가격 브레이크와 Intraday Intensity Index 지표 판단을 모두 필요로 한다. 스톱 로스를 위해 전략은 시간 기반 스톱 로스를 채택한다. 특정 기간 후에 수익이 없으면 전략은 손실을 절감하고 출출을 선택한다.

이점 분석

이 전략의 가장 큰 장점은 가격의 평균 회귀를 이익으로 활용하는 것입니다. 가격이 평균에서 큰 편차를 가지고있을 때, 통계 법칙에 따르면 가격이 평균으로 돌아가는 확률은 상대적으로 크습니다. 이것은 전략의 운영에 대한 이론적 근거를 제공합니다.

또 다른 장점은 가격 신호를 필터링하기 위해 볼륨 지표 - Intraday Intensity Index의 도입이다. 거래 볼륨은 가격 신호의 타당성을 증명할 수 있다. 이것은 낮은 볼륨의 일부 격렬한 가격 변동에서 생성되는 잘못된 신호를 피한다.

위험 분석

이 전략은 가격 평균 회귀의 확률 이벤트에 의존하지만, 시장 가격의 무작위 이동은 여전히 손실로 이어지는 스톱 손실을 유발할 수 있습니다. 이것은 평균 회귀 전략이 직면하는 일반적인 위험입니다.

또 다른 주요 위험은 가격이 그 자체로 평균으로 돌아가는 과정이 비교적 긴 주기가 된다는 것입니다. 투자자에게는 자본이 일정 기간 동안 보유 될 수 있습니다. 그러한 시간 위험은 투자자가 다른 더 나은 투자 기회를 놓칠 수 있습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 볼링거 밴드 매개 변수를 최적화하고, 다른 시장의 변동성에 적응하기 위해 사이클 및 오차 메트릭을 조정합니다.

  2. 부드러움을 증가시키기 위해 가중화 이동 평균과 같은 이동 평균의 다른 유형을 시도

  3. 다른 유형의 볼륨 표시기를 시도하여 더 나은 볼륨 가격 확인 신호를 검색하십시오.

  4. 중지 손실 / 이익 취득 전략을 추가, 명령에 최대 손실을 제어

결론

결론적으로, 이 전략은 전형적인 평균 회귀 전략이다. 확률 사건에서 이익을 얻지만 위험도 분명하다. 매개 변수 조정과 지표 최적화로 더 나은 결과를 얻을 수 있다. 그러나 투자자들에게는 이 전략의 속성을 올바르게 인식하는 것도 핵심이다.


/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Bollinger Bands Strategy with Intraday Intensity Index
// by SparkyFlary

//For Educational Purposes
//Results can differ on different markets and can fail at any time. Profit is not guaranteed.
strategy(title="Bollinger Bands Strategy with Intraday Intensity Index", shorttitle="Bollinger Bands Strategy", overlay=true)

BBlength = input(20, title="Bollinger Bands length")
BBmaType = input("SMA", title="Bollinger Bands MA type", type=input.string, options=["SMA", "EMA"])
BBprice = input(close, title="source")
timeStop = input(10, title="Time-based stop length")
BBmult = input(2.0, title="Bollinger Bands Standard Deviation")
withIII = input(true, title="with Intraday Intensity Index?")
IIIlength = input(21, title="Intraday Intensity Index length")

//function for choosing moving averages
f_ma(type, src, len) =>
    float result = 0
    if type == "SMA"
        result := sma(src, len)
    if type == "EMA"
        result := ema(src, len)
    result

//Intraday Intensity Index
k1 = (2 * close - high - low) * volume
k2 = high != low ? high - low : 1
i = k1 / k2
iSum = sum(i, IIIlength)

//Bollinger Bands
BBbasis = f_ma(BBmaType, BBprice, BBlength)
BBdev = BBmult * stdev(BBprice, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev

plot(BBupper, title="Bollinger Bands Upper Line")
plot(BBlower, title="Bollinger Bands Lower Line")
plot(BBbasis, title="Bollinger Bands Mid line", color=color.maroon)

//Strategy
buy = close[1]<BBlower[1] and close>BBlower and (withIII ? iSum>0 : 1)
sell = close>BBbasis or buy[timeStop] or (strategy.openprofit>0 and buy==0 and buy[1]==0 and buy[2]==0 and buy[3]==0)
short = close[1]>BBupper[1] and close<BBupper and (withIII ? iSum<0 : 1)
cover = close<BBbasis or short[timeStop] or (strategy.openprofit>0 and short==0 and short[1]==0 and short[2]==0 and short[3]==0)

strategy.entry(id="enter long", long=true, when=buy)
strategy.close(id="enter long", comment="exit long", when=sell)
strategy.entry(id="enter short", long=false, when=short)
strategy.close(id="enter short", comment="exit short", when=cover)

더 많은