듀얼-B 지능 추적 전략

저자:차오장, 날짜: 2024-01-18 15:41:20
태그:

img

이것은 볼링거 밴드를 사용하는 거래 전략입니다. 이 전략은 볼링거 밴드를 사용하여 가격이 격렬하게 변동할 때 기회를 파악하고 그에 따른 구매 또는 판매 결정을 내리는 것을 목표로합니다.

전략 원칙

이 전략은 현재 가격이 변동 범위 내에 있는지 여부를 결정하고 따라서 포지션을 열거나 닫는 것에 대한 결정을 내리기 위해 볼링거 밴드의 상위 밴드, 중위 밴드 및 하위 밴드를 계산합니다. 가격이 상위 밴드에 접근하면 긴 포지션의 극단적 지점으로 간주되며 전략은 긴 포지션을 닫을 것을 선택합니다. 가격이 하위 밴드 근처에 떨어지면 쇼트의 극단적 지점으로 간주되며 전략은 긴 포지션을 열기를 선택합니다.

또한, 전략은 또한 트렌드 반전 요인을 도입합니다. 반전 신호가 있으면 해당 구매 또는 판매 결정을 유발할 것입니다. 구체적으로 전략의 논리는 다음과 같습니다.

  1. 상부, 중부 및 하부 볼링거 대역을 계산합니다.
  2. 가격이 반역과 반전 신호를 통과하는 경우 판단
    1. 트렌드 신호로 중간 밴드를 돌파합니다
    2. 반전 신호로 상위 또는 하위 대역 근처
  3. 구매, 판매 또는 클로즈 주문을 보내십시오.

위의 것은 이 전략의 기본 거래 논리입니다. 볼링거 밴드의 특성을 활용하고 트렌드 및 역전 요인을 결합함으로써 전략은 변동성이 증가할 때 역전 지점을 잡으려고 시도합니다.

전략 의 장점

일반 이동 평균 전략에 비해 이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 더 민감하고 가격의 급격한 변동에 대한 기회를 포착 할 수 있습니다.
  2. 추세와 반전 요인을 결합하여 조기 반전으로 인한 손실을 피합니다.
  3. 불변 영역에서 불필요한 구매/판매를 피하기 위해 특정 필터 효과를 가지고 있습니다.
  4. 중부 대역을 통해 주요 트렌드 방향을 판단하여 거래 빈도를 줄이십시오.
  5. 잘못된 판단을 줄이기 위해 역전 필터 조건을 높여

일반적으로 이 전략은 볼링거 밴드와 가격 바를 비교적 잘 결합합니다. 위험을 통제하면서 일정 수준의 수익을 보장하기 위해 합리적인 반전 지점에서 거래합니다.

위험 과 최적화

그러나 이 전략에는 여전히 몇 가지 위험이 있습니다.

  1. 부적절한 BB 매개 변수는 가격 변동을 완전히 포착하지 못합니다.
  2. 불정확한 반전 신호 판단, 반전 신호가 빠진 경우 또는 반전 신호가 잘못 판단된 경우
  3. 트렌드가 불분명할 때 중간 대역 신호의 저효율성

따라서 미래의 최적화는 다음에 초점을 맞출 수 있습니다.

  1. 다른 제품에 기반한 BB 매개 변수들의 적응적 최적화
  2. 역전 확률을 판단하기 위해 기계 학습 모델을 증가
  3. 트렌드가 명확하지 않은 경우 다른 지표로 전환
  4. 거래 신호를 필터링하기 위해 더 많은 가격 패턴을 결합

결론

결론적으로, 이것은 전형적인 볼링거 밴드 거래 전략 템플릿입니다. 이론적으로 좋은 전략 성능으로 이어질 수 있는 신호를 필터하는 트렌드 역전 판단을 도입함으로써 볼링거 밴드만을 사용하는 데 일반적인 과도한 비효율적인 거래를 피합니다. 그러나 매개 변수 및 신호 필터링은 여전히 안정성 및 잘못된 판단을 줄이기 위해 추가 최적화 및 개선이 필요합니다.


/*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()

더 많은