강화된 볼링거 밴드 역전 전략

저자:차오장, 날짜: 2023-09-21 11:45:37
태그:

전반적인 설명

이 전략은 가격 반전 지점을 식별하기 위해 향상된 볼링거 밴드 지표를 사용하며, 가격이 하위 지대에 접근 할 때 길게 이동하고 녹색 촛불이 나타나면 포지션을 닫습니다. 하위 지대에서 평균 반전을 포착하는 것을 목표로합니다.

전략 논리

  1. 표준 BB 매개 변수 기본, dev, 상부 BB 및 하부 BB를 계산합니다.

  2. SMA와 오차 대역 upex2와 dnex2를 SMA의 특정 비율로 계산합니다.

  3. UPEX2, dnex2의 평균을 상부BB, 하부BB와 함께 취해서 UPEX3와 dnex3를 얻습니다.

  4. 더 큰 upex3와 상부 BB를 새로운 상부 밴드 upex로, 더 작은 dnex3와 하부 BB를 새로운 하부 밴드 dnex로 가져가십시오.

  5. 가격이 dnex 아래로 내려갈 때 긴 지점, 녹색 촛불이 나타나면 닫습니다 (폐기 > 오픈).

이점 분석

  1. 강화된 BB는 이전 반전 신호에 대한 원래 BB의 감수성을 향상시킵니다.

  2. 촛불 패턴으로 빗자루를 필터합니다.

  3. 백테스트는 2008~2018년 동안 안정적인 수익성을 보여주고 있으며, 매끄러운 곡선, 최대 DD < 20%입니다.

  4. 설정 가능한 레버리지, 위험 통제를 위한 거래 시간

위험 분석

  1. BB 매개 변수 조정이 제대로 되지 않으면 거래가 너무 많거나 기회를 놓칠 수 있습니다.

  2. 장기간만, 트렌드 반전에서 이익을 얻을 수 없습니다.

  3. 촛불 필터는 지연될 수 있습니다.

  4. 10년 후의 백테스트 데이터는 견고성을 테스트하기에 충분하지 않습니다.

  5. 큰 틈이나 개척 점프에 적응하지 못해

최적화 방향

  1. BB 설정을 최적화하기 위해 매개 변수 조합을 테스트합니다.

  2. 수익성을 높이기 위해 다른 신호 필터를 추가합니다.

  3. 가격이 상위 범위를 초과할 때 짧은 거래를 고려하십시오.

  4. 단일 거래 손실을 제한하기 위해 Stop Loss를 설정합니다.

  5. 변화하는 시장에 따라 자동 튜닝을 개발합니다.

  6. 공백과 점프에 대한 출입 규칙을 최적화하십시오.

  7. 역 테스트 기간을 테스트 매개 변수로 확장합니다.

요약

이 전략은 향상된 BB와 반전 지점을 식별하고 빠른 수익을 얻기 위해 촛불 필터와 함께 낮은 밴드 근처에 오래 걸립니다. 백테스트 성능은 좋습니다. 그러나 길지만 제한된 샘플, 파라마 튜닝이 필요합니다. 시장이 변할 때 인하에 직면 할 수 있습니다. 다음 단계는 승률을 높이기 위해 신호를 확인하고, 짧은 거래, 안정성을 향상시키기 위해 더 긴 백테스트입니다.


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

//Noro
//2018

//@version=2
strategy(title = "Noro's Advanced Bollinger Bands Strategy v1.0", shorttitle = "ABB str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
p = input(20, "bars")
d = input(25, "percent")
showlines = input(true, defval = true, title = "Show Lines?")
fromyear = input(1900, defval = 1900, 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")

mult = input(2.0, minval=0.001, maxval=50)
basis = sma(close, p)
dev = mult * stdev(close, p)
source = close
upperBB = basis + dev
lowerBB = basis - dev
b1 = plot(basis, color=gray, linewidth=1)
p1 = plot(upperBB, color=aqua,  linewidth=1)
p2 = plot(lowerBB, color=aqua, linewidth=1)

//SMAs
sma = sma(close, p)
upex2 = sma * ((100 + d) / 100)
dnex2 = sma * ((100 - d) / 100)

upex3 = (upex2 + upperBB) / 2
dnex3 = (dnex2 + lowerBB) / 2

upex = max(upperBB, upex3)
dnex = min(lowerBB, dnex3)
//exit = (high > sma and low < sma)
exit = close > open


//Lines
col = showlines ? blue : na
plot(upex, linewidth = 3, color = col, transp = 0)
plot(sma, linewidth = 3, color = col, transp = 0)
plot(dnex, linewidth = 3, color = col, transp = 0)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[p]))
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, limit = dnex)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, limit = upex)

if exit
    strategy.close_all()

더 많은