리소스 로딩... 로딩...

대역 통과 평균 PB 지표 전략

저자:차오장, 날짜: 2024-01-17 17:10:53
태그:

img

전반적인 설명

이 전략은 평균 PB 지표와 볼링거 대역을 계산하여 PB 지표와 볼링거 대역의 상부 및 하부 레일 사이의 황금 십자 및 죽은 십자 관계를 결정합니다. PB 지표가 볼링거 대역의 중부 레일 또는 하부 레일 위에 넘어가면 구매 신호를 생성하고 PB 지표가 볼링거 대역의 중부 레일 또는 상부 레일 아래에 넘어가면 판매 신호를 생성합니다.

전략 원칙

전략의 핵심 지표는 평균 PB 지표이다. 평균 PB 지표는 이동 평균 시스템의 안정성과 PB 지표의 민감성을 결합한다. 그것은 긴 트렌드와 짧은 트렌드를 결정하기 위해 가격 변화 추세를 표현하기 위해 다른 사이클의 빠르고 느린 이동 평균 사이의 차이를 사용합니다.

이 전략은 또한 볼링거 밴드 지표를 사용하여 주식 가격의 과잉 구매 및 과잉 판매 조건을 식별합니다. 볼링거 밴드 지표는 세 개의 곡선으로 구성됩니다: 중간 레일, 상부 레일 및 하부 레일. 중간 레일은 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())

    

더 많은