이 전략은 평균 PB 지표와 볼링거 대역을 계산하여 PB 지표와 볼링거 대역의 상부 및 하부 레일 사이의 황금 십자 및 죽은 십자 관계를 결정합니다. PB 지표가 볼링거 대역의 중부 레일 또는 하부 레일 위에 넘어가면 구매 신호를 생성하고 PB 지표가 볼링거 대역의 중부 레일 또는 상부 레일 아래에 넘어가면 판매 신호를 생성합니다.
전략의 핵심 지표는 평균 PB 지표이다. 평균 PB 지표는 이동 평균 시스템의 안정성과 PB 지표의 민감성을 결합한다. 그것은 긴 트렌드와 짧은 트렌드를 결정하기 위해 가격 변화 추세를 표현하기 위해 다른 사이클의 빠르고 느린 이동 평균 사이의 차이를 사용합니다.
이 전략은 또한 볼링거 밴드 지표를 사용하여 주식 가격의 과잉 구매 및 과잉 판매 조건을 식별합니다. 볼링거 밴드 지표는 세 개의 곡선으로 구성됩니다: 중간 레일, 상부 레일 및 하부 레일. 중간 레일은 n 일 이동 평균입니다; 상부 레일은 중간 레일 및 역사적 변동성에 따라 계산됩니다. 주가가 상부 레일 근처에있을 때, 그것은 과잉 구매 구역에 있습니다; 하부 레일 근처에있을 때, 그것은 과잉 판매 구역에 있으며, 중간 레일 주변의 지역은 주가에 대한 합리적인 가격 범위입니다.
요약하자면,이 전략은 주식 가격의 상승 추세 또는 하락 추세를 결정하기 위해 평균 PB 지표를 현명하게 사용하고, 과잉 구매 및 과잉 판매 조건을 결정하는 보조 지표로 볼린거 대역을 사용하여 두 지표 사이의 관계에서 거래 신호를 찾습니다. 그것은 전형적인 기술 지표 거래 전략에 속합니다.
이 전략의 주요 장점은 다음과 같습니다.
이 전략의 주요 위험은 다음과 같습니다.
위의 위험을 해결하기 위해 매개 변수 설정을 최적화하고 엄격한 스톱 로스, 거시적 요인을 고려하고 수동 모니터링과 같은 방법을 사용하여 위험을 줄일 수 있습니다.
이 전략의 최적화 방향은 다음과 같습니다.
이 전략의 전반적인 성능은 상당히 만족스럽다. 중 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())