볼린저 밴드 교차 평균 PB 지표 전략


생성 날짜: 2024-01-17 17:10:53 마지막으로 수정됨: 2024-01-17 17:10:53
복사: 0 클릭수: 661
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

볼린저 밴드 교차 평균 PB 지표 전략

개요

이 전략은 평균 PB 지표와 부린 띠의 하향을 계산하여, PB 지표와 부린 띠의 하향 사이의 황금 포크 사다리 관계를 판단하여, 구매 및 판매 신호를 생성한다. PB 지표가 상향으로 부린 띠의 중도 또는 하향을 돌파하면 구매 신호를 생성한다.

전략 원칙

전략의 핵심 지표는 평균 PB 지표이다. 평균 PB 지표는 평균선 시스템의 안정성과 PB 지표의 민감성을 결합하여, 두 개의 다른 주기 평균선의 차수를 사용하여 가격 변화의 흐름을 표현하여 빈도를 판단한다.

이 전략은 또한 부린 띠 지표를 사용하여 주식 가격의 과매매 상황을 판단한다. 부린 띠 지표는 중궤도, 상궤도, 하궤도 3개의 곡선을 구성한다. 중궤도는 n일의 이동 평균이다. 상궤도는 중궤도와 역사적인 변동률을 통해 계산된다. 주가가 상궤도에 접근할 때 과매구역으로, 하궤도에 접근할 때 과매구역으로, 중궤도 근처에는 주식의 합리적인 가격구역으로 간주된다.

종합적으로, 이 전략은 평균 PB 지표를 사용하여 주식 가격의 상승과 하락의 추세를 결정하고, 부린 밴드 지표에 보조하여 과매매의 상황을 판단하고, 둘을 결합한 지표 관계에서 매도점을 찾습니다.

우위 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. 평균 PB 지표를 사용하여 주식 가격 추세 변화를 판단하고, 민감성이 높다.
  2. 부린 띠 지표가 과매매 지점을 식별하여 구매 및 판매 지점을 결정하는 정확도를 향상시킵니다.
  3. 전략은 간단하고 실행하기 쉽습니다.
  4. 역추적 데이터에 따르면 전략적 이익이 상당히 높습니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 평균 PB 지수와 부린 밴드 지수는 역사적인 데이터 계산에 의존하며, 주가에서 큰 변동이 있을 때 잘못된 신호를 발생시킬 수 있습니다.
  2. PB 지표와 브린 띠는 모두 파라미터 설정에 민감하며, 부적절한 설정으로 인해 과도한 잘못된 거래가 발생할 수 있습니다.
  3. 전략이 시행되는 기간 동안, 경제 위기, 정책 변화 등과 같은 거시 환경 변화가 주가에 큰 영향을 미칠 수 있으며, 전략이 실패할 수 있습니다.

위와 같은 위험에 대해, 최적화 매개 변수 설정, 엄격한 손해, 고려 대 환경 요소, 인위 모니터링 등의 방법으로 위험을 회피 할 수 있다.

최적화 방향

이 전략의 최적화 방향은 다음과 같습니다.

  1. 평균 PB 지표와 브린 띠의 변수를 최적화하여 최적의 변수 조합을 찾습니다.
  2. MACD, KDJ 등과 같은 다른 지표 필터를 추가하여 전략 효과를 향상시킵니다.
  3. 단편적 손실을 통제하기 위한 손해 방지 제도를 강화
  4. 더 큰 시간 주기의 지표와 결합하여 큰 방향을 판단하고 역동적인 거래를 피하십시오.

요약하다

이 전략은 전체적으로 운영 효과가 좋으며, 평균 PB 지표를 중심으로, 부린 띠를 보조하여 매수점을 결정하고, 조작이 간단하고, 민감도가 높으며, 재검토 성능이 뛰어나다. 지속적으로 최적화 파라미터 설정을 통해, 다른 지표 보조를 추가하고, 엄격한 손해 막는 등의 조치를 통해 전략 수익률과 안정성을 더욱 향상시킬 수 있으며, 실험 검증 및 적용할 가치가 있다.

전략 소스 코드
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BandPass EOS", overlay=false, initial_capital = 1000)

src = input(close, "Source", input.source)
Period1 = input(41, "Fast Period", input.integer)
Period2 = input(54, "Slow Period", input.integer)
showBG = input(false, "Show crosses on background?", input.bool)
UseReversalStop = input(true, "Use additional triggers?", input.bool)

//Super Passband Filter
a1 = 0.0
a2 = 0.0
PB = 0.0
RMS = 0.0
if bar_index > Period1
    a1 := 5 / Period1
    a2 := 5 / Period2
    PB := (a1 - a2) * src + (a2 * (1 - a1) - a1 * (1 - a2)) * src[1] + 
       (1 - a1 + 1 - a2) * nz(PB[1]) - (1 - a1) * (1 - a2) * nz(PB[2])
    for i = 0 to 49 by 1
        RMS := RMS + PB[i] * PB[i]
        RMS
    RMS := sqrt(RMS / 40)
    RMS
z = 0

buy = PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z)
sell = PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z)
signal = buy ? 1 : sell ? -1 : 0
bg = buy ? color.green : sell ? color.red : color.white
bg := showBG ? bg : na
upperFill = PB>RMS ? color.lime : na
lowerFill = PB<-RMS ? color.red : na

p1 = plot(PB,"PB",color.red)
p2 = plot(RMS,"+RMS",color.blue)
p3 = plot(-RMS,"-RMS",color.blue)
bgcolor(bg)
fill(p1,p2,upperFill)
fill(p1,p3,lowerFill)
hline(0)



//PERIOD
testStartYear = input(2018, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
lcolor = PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z)
scolor = PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z)

c1 = (PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z))
c2 = (PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z))

plot (c1 ? PB : na, style = plot.style_circles, color = color.red, linewidth = 3)
plot (c2 ? PB : na, style = plot.style_circles, color = color.green, linewidth = 3)

if (PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z))
    strategy.entry("long", strategy.long, when = testPeriod())


if (PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z))
    strategy.entry("short", strategy.short, when = testPeriod())