이것은 볼링거 밴드를 사용하는 거래 전략입니다. 이 전략은 볼링거 밴드를 사용하여 가격이 격렬하게 변동할 때 기회를 파악하고 그에 따른 구매 또는 판매 결정을 내리는 것을 목표로합니다.
이 전략은 현재 가격이 변동 범위 내에 있는지 여부를 결정하고 따라서 포지션을 열거나 닫는 것에 대한 결정을 내리기 위해 볼링거 밴드의 상위 밴드, 중위 밴드 및 하위 밴드를 계산합니다. 가격이 상위 밴드에 접근하면 긴 포지션의 극단적 지점으로 간주되며 전략은 긴 포지션을 닫을 것을 선택합니다. 가격이 하위 밴드 근처에 떨어지면 쇼트의 극단적 지점으로 간주되며 전략은 긴 포지션을 열기를 선택합니다.
또한, 전략은 또한 트렌드 반전 요인을 도입합니다. 반전 신호가 있으면 해당 구매 또는 판매 결정을 유발할 것입니다. 구체적으로 전략의 논리는 다음과 같습니다.
위의 것은 이 전략의 기본 거래 논리입니다. 볼링거 밴드의 특성을 활용하고 트렌드 및 역전 요인을 결합함으로써 전략은 변동성이 증가할 때 역전 지점을 잡으려고 시도합니다.
일반 이동 평균 전략에 비해 이 전략은 다음과 같은 장점을 가지고 있습니다.
일반적으로 이 전략은 볼링거 밴드와 가격 바를 비교적 잘 결합합니다. 위험을 통제하면서 일정 수준의 수익을 보장하기 위해 합리적인 반전 지점에서 거래합니다.
그러나 이 전략에는 여전히 몇 가지 위험이 있습니다.
따라서 미래의 최적화는 다음에 초점을 맞출 수 있습니다.
결론적으로, 이것은 전형적인 볼링거 밴드 거래 전략 템플릿입니다. 이론적으로 좋은 전략 성능으로 이어질 수 있는 신호를 필터하는 트렌드 역전 판단을 도입함으로써 볼링거 밴드만을 사용하는 데 일반적인 과도한 비효율적인 거래를 피합니다. 그러나 매개 변수 및 신호 필터링은 여전히 안정성 및 잘못된 판단을 줄이기 위해 추가 최적화 및 개선이 필요합니다.
/*backtest start: 2023-12-18 00:00:00 end: 2024-01-17 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy("Noro's Bollinger Strategy v1.2", shorttitle = "Bollinger str 1.2", overlay = true ) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length") mult = input(2.0, defval = 2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult") source = input(ohlc4, defval = ohlc4, title = "Bollinger Source") uset = input(true, defval = true, title = "Use trend entry") usect = input(true, defval = true, title = "Use counter-trend entry") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") showbands = input(true, defval = true, title = "Show Bollinger Bands") //Bollinger Bands basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev //Lines col = showbands ? black : na plot(upper, linewidth = 1, color = col) plot(basis, linewidth = 1, color = col) plot(lower, linewidth = 1, color = col) //Body body = abs(close - open) abody = ema(body, 30) //Signals bar = close > open ? 1 : close < open ? -1 : 0 up1 = bar == -1 and close >= basis and close < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset dn1 = bar == 1 and close <= basis and close > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset up2 = close <= lower and usect dn2 = close >= upper and usect exit = (strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open) and body > abody / 2 //Trading if up1 or up2 strategy.entry("Long", strategy.long, needlong == false ? 0 : na) if dn1 or dn2 strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if exit strategy.close_all()