볼린저 밴드 기반 추세 추종 전략


생성 날짜: 2024-01-18 16:37:56 마지막으로 수정됨: 2024-01-18 16:37:56
복사: 0 클릭수: 613
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

볼린저 밴드 기반 추세 추종 전략

개요

이 전략은 브린 밴드 지표를 사용하여 가격 트렌드 방향을 판단하고, 빠른 이동 평균과 결합하여 입장을 수행한다. 가격이 브린 밴드 중궤도를 돌파하고 빠른 이동 평균 위에 느린 이동 평균을 통과하면 다중 신호로한다. 가격이 브린 밴드 중궤도를 넘어 빠른 이동 평균 아래에 느린 이동 평균을 통과하면 빈 신호로한다.

전략 원칙

이 전략은 주로 브린 밴드 지표와 이동 평균 지표로 구성된다.

브린 벨트 지표중간 궤도, 상단 궤도 및 하단 궤도로 이루어져 있다. 중간 궤도는 n 일 간편 이동 평균이다. 상단 궤도 및 하단 궤도는 각각 중간 궤도 상하의 k배 표준 차이가 있다. 가격이 상단 궤도에 가까워지면 과매매를 나타내고, 가격이 하단 궤도에 가까워지면 과판을 나타낸다. 중간 궤도는 가격 추세 방향을 나타낸다.

이동 평균 지표빠른 이동 평균과 느린 이동 평균을 사용한다. 빠른 이동 평균의 변수는 40이고, 느린 이동 평균의 변수는 120이다. 빠른 이동 평균 위에 느린 이동 평균을 뚫을 때 골드 포크로 더 많은 신호를 한다. 빠른 이동 평균 아래로 느린 이동 평균을 뚫을 때 데드 포크로 빈 신호를 한다.

위의 지표 규칙에 따라, 이 전략의 구체적인 거래 신호는 다음과 같습니다.

더 많은 신호를: 종전 가격은 브린 반도의 중간 궤도를 돌파하고 빠른 이동 평균에서 느린 이동 평균을 통과합니다.

공허 신호부린 반도의 중간 궤도를 넘어 빠른 이동 평균 아래의 느린 이동 평균을 뚫고 종료

손해 방지 방법ATR 상쇄, 상쇄점은 현재 가격으로 ATR의 4배를 다

우위 분석

이 전략은 브린띠 지표와 이동 평균 지표와 결합하여 가격 추세 방향을 효과적으로 판단하고, 불안정한 상황으로 인해 자주 포지션을 열지 않도록합니다.

브린 띠 중간 궤도는 가격 경향을 명확하게 반영하고, 가격이 중간 궤도를 돌파 할 때 강력한 경향 신호를 형성한다. 상하 궤도는 과매매 상황을 효과적으로 판단하고, 충격적인 상황에서 고를 죽이는 것을 피할 수 있다.

느리게 움직이는 평균의 금 叉 死 叉 는 또한 일반적인 추세를 판단하는 방법이다. 부린 띠 지표와 결합하면 진입 시기를 더 정확하게 판단할 수 있다.

ATR 중지 방식은 시장의 변동에 따라 중지 포인트를 조정하여 단일 손실을 효과적으로 제어합니다.

위험 분석

이 전략의 가장 큰 위험은 가격이 중간 궤도를 돌파한 후 곧 철회하여 효율적으로 수익을 올릴 수 없다는 것입니다. 이 경우 손실이 발생할 수 있습니다. 해결책은 이동 평균 파라미터를 적절하게 조정하여 지표 파라미터를 시장 특성에 더 잘 맞추는 것입니다.

또 다른 위험은 부린띠 지표와 이동 평균 지표가 흔들리는 상황에서 잘못된 신호를 보낼 수 있다는 것입니다. 이 경우 거래 신호를 건너뛰고 더 명확한 추세 상황을 기다리는 것을 고려해야합니다. 또는 적절히 포지션 규모를 축소하십시오.

최적화 방향

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

  1. 브린 벨트 지표 매개 변수를 다른 주기 시장 특성에 맞게 조정합니다.

  2. 특정 거래 품종에 대한 지표를 더 잘 맞추기 위해 느린 이동 평균 변수를 조정합니다.

  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")