볼린저 밴드 스토캐스틱 오실레이터 전략

SMA
생성 날짜: 2024-05-09 15:59:11 마지막으로 수정됨: 2024-05-09 15:59:11
복사: 0 클릭수: 836
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

볼린저 밴드 스토캐스틱 오실레이터 전략

개요

이 전략은 브린 띠와 무작위 진동기를 기반으로 한 거래 전략이다. 이 전략은 브린을 사용하여 시장의 변동 범위를 결정하고 무작위 진동기를 사용하여 시장의 과매 및 과매 상태를 판단한다. 가격이 브린 띠를 돌파 할 때, 전략은 더 많이 수행되며, 가격이 브린 띠를 넘어서는 경우, 전략은 공백된다. 동시에, 이 전략은 무작위 진동기를 사용하여 거래 신호를 필터링하여 전략의 정확성과 신뢰성을 향상시킵니다.

전략 원칙

이 전략의 핵심은 브린띠와 랜덤오스실레이터 두 가지 기술 지표이다. 브린띠는 세 개의 선으로 구성된다. 중도, 상도, 하도. 중도는 가격의 간단한 이동 평균이며, 상도와 하도 각각 중도와 가격 기준 차이의 곱하기이다. 가격이 상도를 돌파할 때 시장이 과매 상태에 있을 수 있음을 나타냅니다. 가격이 하도를 돌파할 때 시장이 과매 상태에 있을 수 있음을 나타냅니다.

무작위 진동기는 두 개의 선으로 구성되어 있습니다: %K 선과 %D 선. %K 선은 종전 가격의 가장 최근 기간 동안의 최고 가격과 최저 가격 사이의 위치를 측정하며, %D 선은 %K 선의 이동 평균입니다. %K 선 위에 %D 선을 통과하면 시장이 과매매 상태에있을 수 있음을 나타냅니다.

이 전략은 이 두 지표를 결합하여, 가격이 부린 대역을 돌파하고 무작위 진동기가 %K 라인에 %D 라인을 통과했을 때, 전략은 더 많이 수행됩니다. 가격이 부린 대역을 돌파하고 무작위 진동기가 %K 라인에 %D 라인을 통과했을 때, 전략은 공백을 수행합니다. 이러한 조합은 시장의 추세를 효과적으로 포착 할 수 있으며, 또한 변동 시장에서 자주 거래되는 것을 피할 수 있습니다.

전략적 이점

  1. 동향과 변동의 두 가지 시장 상태를 결합하여 다양한 시장 환경에서 안정적인 수익을 얻을 수 있습니다.
  2. 브린 띠는 시장의 변동에 동적으로 적응할 수 있어 전략의 적응력을 높였다.
  3. 무작위 진동기는 몇 가지 가짜 돌파 신호를 효과적으로 필터링하여 전략의 정확도를 높일 수 있습니다.
  4. 전략 논리는 명확하고, 이해하기 쉽고, 구현하기 쉬우며, 다양한 수준의 거래자들이 사용할 수 있습니다.

전략적 위험

  1. 시장 추세가 불확실하거나 변동성이 큰 경우, 이 전략은 더 많은 가짜 신호를 발생시킬 수 있으며, 이로 인해 거래와 손실이 자주 발생합니다.
  2. 이 전략은 역사적인 데이터에 의존하고 있으며, 어떤 갑작스러운 사건이나 시장의 비정상적인 상황에서는 큰 회수 (withdrawal) 가 발생할 수 있다.
  3. 정책 변수의 선택은 정책 성능에 큰 영향을 미치며, 다른 변수는 완전히 다른 결과를 초래할 수 있다.

전략 최적화 방향

  1. 더 많은 필터링 조건, 거래량, 다른 기술 지표와 같은 것을 추가하여 신호의 신뢰성을 더 높이는 것을 고려할 수 있습니다.
  2. 브린 밴드 및 무작위 진동기의 파라미터를 최적화하여 현재 시장에 가장 적합한 파라미터 조합을 찾을 수 있다.
  3. 단편 거래의 위험을 제어하기 위해 스포드 및 이동 스포드와 같은 위험 관리 장치를 도입 할 수 있습니다.
  4. 이 전략은 다른 전략과 결합하여 더 강력한 전략 포트폴리오를 만들 수 있습니다.

요약하다

이 전략은 간단하고 효과적인 거래 전략으로, 부린 밴드와 무작위 진동기의 두 가지 클래식 기술 지표를 결합하여 추세와 흔들림의 두 가지 시장 상태에서 안정적인 수익을 얻을 수 있습니다. 이 전략에도 약간의 위험과 한계가 있지만, 적절한 최적화와 개선으로 전략의 성능과 적응력을 더욱 향상시킬 수 있으며, 참고와 학습 가치가있는 거래 전략이 될 수 있습니다.

전략 소스 코드
/*backtest
start: 2023-05-03 00:00:00
end: 2024-05-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Unique Bollinger Bands Strategy", overlay=true)
src = input(close)
length = input.int(34, minval=1)
mult = input.float(2.0, minval=0.001, maxval=50)

basis = ta.sma(src, length)
dev = ta.stdev(src, length)
dev2 = mult * dev

upper1 = basis + dev
lower1 = basis - dev
upper2 = basis + dev2
lower2 = basis - dev2

colorBasis = src >= basis ? color.blue : color.orange

pBasis = plot(basis, linewidth=2, color=colorBasis)
pUpper1 = plot(upper1, color=color.new(color.blue, 0), style=plot.style_circles)
pUpper2 = plot(upper2, color=color.new(color.blue, 0))
pLower1 = plot(lower1, color=color.new(color.orange, 0), style=plot.style_circles)
pLower2 = plot(lower2, color=color.new(color.orange, 0))

fill(pBasis, pUpper2, color=color.new(color.blue, 80))
fill(pUpper1, pUpper2, color=color.new(color.blue, 80))
fill(pBasis, pLower2, color=color.new(color.orange, 80))
fill(pLower1, pLower2, color=color.new(color.orange, 80))




// Parameters
bbLength = input.int(34, title="Length", minval=1)
bbMultiplier = input.float(2.0, title="Multiplier", minval=0.001, maxval=50)

// Source
priceData = close // Unique name for price data source

// Bollinger Bands Calculation
bbBasis = ta.sma(priceData, bbLength)
bbDeviation = ta.stdev(priceData, bbLength)
bbDeviationMultiplied = bbMultiplier * bbDeviation

bbUpperBand = bbBasis + bbDeviationMultiplied
bbLowerBand = bbBasis - bbDeviationMultiplied

// Plot Bollinger Bands
plot(bbBasis, color=color.blue, linewidth=2)
plot(bbUpperBand, color=color.blue)
plot(bbLowerBand, color=color.orange)

// Strategy Logic for Entry and Exit
enterLong = ta.crossover(priceData, bbUpperBand)
enterShort = ta.crossunder(priceData, bbLowerBand)

// Enter Long when price crosses over upper band
if (enterLong)
    strategy.entry("Long", strategy.long)
// Enter Short when price crosses under lower band
if (enterShort)
    strategy.entry("Short", strategy.short)

// Close Long when Short condition is met (i.e., price under lower band)
if (enterShort)
    strategy.close("Long")
// Close Short when Long condition is met (i.e., price over upper band)
if (enterLong)
    strategy.close("Short")