볼링거 대역 폭 스칼링 이중 이동 평균 트렌드 필터 전략

저자:차오장, 날짜: 2023-10-25 15:00:20
태그:

img

이 전략은 볼링거 밴드와 이중 이동 평균을 기반으로 거래 신호를 생성하며 높은 승률과 좋은 이익 손실 비율을 목표로 트렌드 필터를 사용합니다.

전략 논리

  1. 긴 / 짧은 신호를 생성하기 위해 볼링거 밴드 상부, 중부 및 하부 밴드를 사용하십시오. 가격이 상부 밴드에 닿을 때 판매하고, 하부 밴드에 닿을 때 구매하십시오.

  2. 트렌드 방향을 결정하기 위해 20 기간 중장기 및 60 기간 장기 이동 평균을 사용하십시오. 짧은 MA가 긴 MA를 넘을 때 상승 추세, 아래로 넘을 때 하락 추세.

  3. 볼링거 밴드 너비에 따라 동적으로 스톱 로스 위치를 조정합니다. 너비가 0.5% 이상이면, 하위 밴드에서 스톱 로스를 조정합니다. 0.5% 미만일 경우, 하위 밴드 범위의 절반으로 스톱 로스를 줄입니다.

  4. 진입 조건: 상승 추세 중 구매 신호로 하위 대역을 깨고 하위 대역을 하락 추세 중 판매 신호로 깨고

  5. 출구 조건: 상위 밴드 또는 짧은 MA를 다룰 때 수익을 얻습니다.

  6. 스톱 로스 조건: 가격이 로그에서 하위 밴드 동적 범위 아래로 넘어갈 때 스톱 아웃. 가격이 쇼트에서 상위 밴드 동적 범위 아래로 넘어갈 때 스톱 아웃.

장점

  1. 트렌드를 결정하기 위해 이중 MA를 사용하는 것은 트렌드가 아닌 시장이나 범위에서 잡음을 필터링하는 데 도움이됩니다.

  2. BB 중위 대역은 지원/저항을 제공하며, 상위/하위 대역은 위험을 제어하기 위한 동적 스톱 손실 수준으로 사용됩니다.

  3. BB 너비에 기반한 스톱 손실 범위를 조정하면 합리적인 스톱을 유지하면서 중단 될 확률을 줄입니다.

  4. 트렌드 방향으로 거래하면 더 높은 승률을 얻을 수 있습니다.

위험성

  1. 이중 MAs는 트렌드 전환점을 놓치면서 종종 잘못된 브레이크를 생성할 수 있습니다.

  2. BB는 불안정하고 트렌드가 없는 시장에서 부진할 수 있습니다. 거래 빈도를 줄일 수 있습니다.

  3. 스톱 로스 (Stop Loss) 는 지지/저항 수준 근처에 위치해 있고, 더 넓은 스톱 로스 범위를 허용할 수 있습니다.

  4. 단기적 인 인출을 효과적으로 활용할 수 없습니다.

더 나은 기회

  1. 시장 조건에 가장 적합한 것을 찾기 위해 MA 기간을 최적화하십시오.

  2. 스톱 손실을 맞추기 위해 BB 곱셈 매개 변수를 최적화합니다.

  3. 신호 품질을 향상시키기 위해 여러 요소 확인을 위한 다른 지표를 추가합니다.

  4. 트렌드를 확인하기 위해 부피/운동량을 포함하고, 오차를 피합니다.

  5. 자금 관리 최적화 예를 들어, 단 하나의 거래 위험을 제어하기 위해 고정 분수, 고정 스톱 손실.

  6. 가격 충격 처리, 예를 들어 큰 하루 간 격차.

요약

이 전략은 트렌드 방향에 대한 이중 MAs와 지지/저항 및 동적 스톱에 대한 BB를 사용하는 전반적인 견고한 전략입니다. 잘못된 트렌드 신호와 너무 가까운 스톱과 같은 한계가 있습니다. 다양한 시장 조건에서 견고성을 높이기 위해 MA 시스템, 스톱 손실 전략, 돈 관리 등을 통해 추가 최적화가 가능합니다. 전반적으로 높은 승률, 좋은 위험 보상 프로파일 및 간단하지만 효과적인 논리로 초보자를위한 훌륭한 전략입니다.


/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="yuthavithi BB Scalper 2 strategy", overlay=true)

len = input(20, minval=1, title="Length")
multiplier = input(4, minval=1, title="multiplier")
trendTimeFrame = input(60, minval=1, title="Trend Time Frame")
useTrendFilter = input(true, type=bool, title = "Use Trend Filter")

src = input(close, title="Source")
out = sma(src, len)
//plot(out, title="SMA", color=blue)

stdOut = stdev(close, len)
bbUpper = out + stdOut * multiplier
bbLower = out - stdOut * multiplier
bbUpper2 = out + stdOut * (multiplier / 2)
bbLower2 = out - stdOut * (multiplier / 2)
bbUpperX2 = out + stdOut * multiplier * 2
bbLowerX2 = out - stdOut * multiplier * 2
bbWidth = (bbUpper - bbLower) / out


closeLongTerm = request.security(syminfo.tickerid, tostring(trendTimeFrame), close)
smaLongTerm = request.security(syminfo.tickerid, tostring(trendTimeFrame), sma(close,20))

//plot(smaLongTerm, color=red)

trendUp = useTrendFilter ? (closeLongTerm > smaLongTerm) : true
trendDown = useTrendFilter? (closeLongTerm < smaLongTerm) : true

bearish = ((cross(close,bbUpper2) == 1) or (cross(close,out) == 1)) and (close[1] > close) and trendDown
bullish = ((cross(close,bbLower2) == 1) or (cross(close,out) == 1)) and (close[1] < close) and trendUp


closeBuy = (high[1] > bbUpper[1]) and (close < bbUpper) and (close < open) and trendUp 
closeSell = (((low[1] < bbLower[1]) and (close > bbLower)) or ((low[2] < bbLower[2]) and (close[1] > bbLower[1]))) and (close > open) and trendDown


cutLossBuy = iff(bbWidth > 0.005, (low < bbLower) and (low[1] > bbLower[1]) and trendUp, (low < bbLowerX2) and (low[1] > bbLowerX2[1]) and trendUp)
cutLossSell = iff(bbWidth > 0.005, (high > bbUpper) and (high[1] < bbUpper[1]) and trendDown, (high > bbUpperX2) and (high[1] < bbUpperX2[1]) and trendDown)


if (bullish)
    strategy.entry("Buy", strategy.long, comment="Buy")

if (bearish)
    strategy.entry("Sell", strategy.short, comment="Sell")
    

strategy.close("Buy", closeBuy or cutLossBuy)
   
strategy.close("Sell", closeSell or cutLossSell)


더 많은