볼링거 밴드 (Bollinger Bands) 에 기반한 트렌드 다음 전략

저자:차오장, 날짜: 2024-01-18 16:37:56
태그:

img

전반적인 설명

이 전략은 포지션을 입력하기 위해 빠르고 느린 이동 평균과 결합하여 가격 트렌드 방향을 결정하기 위해 볼링거 밴드를 사용합니다. 가격이 볼링거 중간에 넘어가고 빠른 이동 평균이 느린 이동 평균을 넘을 때 구매 신호가 발동됩니다. 가격이 볼링거 중간에 넘어가고 빠른 이동 평균이 느린 이동 평균을 넘을 때 판매 신호가 발동됩니다. 스톱 손실 방법은 ATR 트레일링 스톱 손실입니다.

전략 논리

이 전략은 주로 볼링거 밴드 지표와 이동 평균으로 구성됩니다.

볼링거 밴드중단, 상단, 하단 등이 있다. 중단은 n일 간편 이동평균이다. 상단과 하단은 중단 위와 아래의 k 표준편차이다. 가격이 상단에 가까워지면 과잉 구매 조건을 나타낸다. 가격이 하단에 가까워지면 과잉 판매 조건을 나타낸다. 중단은 가격 트렌드 방향을 나타낸다.

이동 평균빠른 이동 평균과 느린 이동 평균을 채택합니다. 빠른 이동 평균은 40의 기간을 가지고 있으며 느린 이동 평균은 120의 기간을 가지고 있습니다. 빠른 MA가 느린 MA를 넘을 때 그것은 구매 신호입니다. 빠른 MA가 느린 MA를 넘을 때 그것은 판매 신호입니다.

위의 지표의 규칙에 근거하여, 이 전략의 특정 거래 신호는 다음과 같습니다.

구매 신호: 중부 대역을 뚫고 닫는 가격, 느린 대역을 뚫고 빠른 대역을 뚫는 가격

판매 신호: 중간 범위를 넘어서고 느린 MA를 넘어서고 빠른 MA를 넘는다

손실 중지: ATR 후속 스톱 로스, 스톱 로스 가격은 현재 가격 마이너스 4 배 ATR입니다.

이점 분석

이 전략은 볼링거 밴드와 이동 평균을 결합하여 가격 트렌드 방향을 효과적으로 결정하고 범위 기간 동안 과도한 포지션 개척을 피할 수 있습니다.

볼링거 중부 대역은 가격 추세를 명확히 반영 할 수 있습니다. 가격이 중부 대역을 통과 할 때 강력한 트렌드 신호를 형성합니다. 상부 및 하부 대역은 범위 기간 동안 새로운 최고치를 추구하고 최저치를 죽이는 것을 피하기 위해 과반 구매 및 과반 판매 조건을 효과적으로 판단 할 수 있습니다.

금색 십자와 빠른 및 느린 MAs의 죽은 십자 또한 트렌드를 결정하는 데 일반적으로 사용되는 방법입니다. 볼링거 밴드와 결합하면 입시 시기를 더 정확하게 결정할 수 있습니다.

ATR 후속 스톱 손실은 시장 변동에 적응하기 위해 스톱 손실 지점을 조정하여 단일 포지션 손실을 효과적으로 제어합니다.

위험 분석

이 전략의 가장 큰 위험은 중간 대역을 뚫고 수익을 효과적으로 창출 할 수 없으므로 가격이 빠르게 인기를 끌 수 있다는 것입니다. 이로 인해 손실이 발생할 수 있습니다. 해결책은 MA 매개 변수를 적절히 조정하여 지표가 시장 특성에 더 잘 부합하도록하는 것입니다.

또 다른 위험은 범위 기간 동안 볼링거 밴드 및 이동 평균이 잘못된 신호를 줄 수 있다는 것입니다. 이 시점에서 우리는 거래 신호를 건너뛰고 더 명확한 추세를 기다려야 합니다. 또는 적절하게 포지션 크기를 줄여야 합니다.

최적화 방향

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

  1. 다양한 기간의 시장 특성에 적응하기 위해 볼링거 밴드 매개 변수를 조정

  2. 특정 거래 도구에 더 잘 맞추기 위해 빠르고 느린 MA 매개 변수를 조정합니다.

  3. 전략 안정성을 향상시키기 위해 다른 보조 지표를 추가합니다.

  4. 포지션 크기를 최적화하고, 트렌드 기간 동안 포지션을 증가시키고, 범위 기간 동안 포지션을 감소시킵니다.

  5. 더 나은 솔루션을 찾기 위해 다른 중지 손실 방법을 테스트

결론

일반적으로 이것은 전략을 따르는 전형적인 트렌드입니다. 가격 추세와 거래 기회를 결정하기 위해 볼링거 밴드 및 이동 평균을 결합합니다. 전략 신호는 상대적으로 명확하며 자동화 거래에 적합합니다. 그러나 더 광범위한 시장 환경에 적응하기 위해 최적화해야하는 일부 위험, 매개 변수 및 규칙도 있습니다. 전반적으로 전략 프레임워크는 실현 가능하며 개선할 여지가 있습니다.


/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00: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/
// © Robrecht99

//@version=5
strategy("Trend Following with Bollinger Bands", overlay=true, margin_long=100, margin_short=100, pyramiding=4)

// Bollinger Bands //

length = input.int(20, minval=1, group="Bollinger Bands Inputs")
src = input(close, title="Source", group="Bollinger Bands Inputs")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500, group="Bollinger Bands Inputs")
plot(basis, "Basis", color=color.orange, offset = offset)
p1 = plot(upper, "Upper", color=color.orange, offset = offset)
p2 = plot(lower, "Lower", color=color.orange, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(255, 0, 255, 95))

// Moving Averages //

len1 = input.int(40, minval=1, title="Length Fast MA", group="Moving Average Inputs")
len2 = input.int(120, minval=1, title="Length Slow MA", group="Moving Average Inputs")
src1 = input(close, title="Source Fast MA")
src2 = input(close, title="Source Slow MA")
maColorFast = input.color(color.new(color.red, 0), title = "Color Fast MA", group = "Moving Average Inputs", inline = "maFast")
maColorSlow = input.color(color.new(color.purple, 0), title = "Color Slow MA", group = "Moving Average Inputs", inline = "maSlow")
fast = ta.ema(src1, len1) 
slow = ta.ema(src2, len2)
plot(fast, color=maColorFast, title="Fast EMA")
plot(slow, color=maColorSlow, title="Slow EMA")

// ATR Inputs //
strategy.initial_capital = 50000

lengthATR = input.int(title="ATR Period", defval=14, minval=1, group="ATR Input")
risk = input(title="Risk Per Trade", defval=0.01, group="ATR Input")
multiplier = input(title="ATR Multiplier", defval=2, group="ATR Inputs")
atr = ta.atr(length)
amount = (risk * strategy.initial_capital / (2 * atr))

// Buy and Sell Conditions //

entrycondition1 = ta.crossover(fast, slow)
entrycondition2 = fast > slow
sellcondition1 = ta.crossunder(fast, slow)
sellcondition2 = slow > fast

// Buy and Sell Signals //

if (close > basis and entrycondition2)
    strategy.entry("long", strategy.long, qty=amount)
    stoploss = close - atr * 4
    strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (sellcondition1 and sellcondition2)
    strategy.close(id="long")

if (close < basis and sellcondition2)
    strategy.entry("short", strategy.short, qty=amount)
    stoploss = close + atr * 4
    strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (entrycondition1 and entrycondition2)
    strategy.close(id="short")

더 많은