고급 볼링거 대역 이동 평균 격자 추세 추적 전략

저자:차오장, 날짜: 2023-11-24 14:48:28
태그:

img

전반적인 설명

이 전략은 Advanced Bollinger Band Moving Average Grid Trend Tracking Strategy라고 불립니다. 이는 경향 결정에 대한 볼링거 밴드와 이동 평균을 사용하여 트렌드 방향을 추적하기 위해 그리드 포지션을 설정하는 전략입니다.

원칙

이 전략의 주요 아이디어는 다음과 같습니다.

  1. 현재 시장 변동성 범위를 판단하기 위해 볼링거 밴드를 사용하십시오. 볼링거 밴드의 중간 레일은 n 일간 간단한 이동 평균이며 폭은 n 일간 ATR 평균 진폭입니다.

  2. 볼링거 밴드 외의 네 개의 라인은 평균 진정한 변동성 진폭 라인의 비정상적인 배수입니다. 전략은 다른 레벨의 라인을 뚫을 때 포지션을 설정합니다.

  3. EMA는 큰 사이클 트렌드 방향을 결정합니다. 큰 사이클 상승 트렌드에서만 길고 반대로 짧습니다.

  4. 트렌드 방향으로 포지션을 추적하고 구축하고, 핀 바를 볼 때 수익을 위해 포지션을 닫습니다.

특히 이 전략의 주요 부분은 다음과 같습니다.

  1. 볼링거 밴드 매개 변수를 결정한다. 볼링거 밴드의 중간 레일은 n일 SMA 이동 평균이며, 볼링거 밴드의 너비는 n일 ATR이다. 전략의 볼링거 길이 n은 20이다.

  2. 볼링거 반지 바깥에 4개의 확장된 선을 설정합니다. 선과 중간 레일 사이의 거리는 평균 진정한 변동성 진폭의 1.236배, 2.382배, 3.618배, 그리고 4.236배입니다.

  3. 큰 사이클 트렌드를 결정하기 위해 빠르고 느린 EMA 이동 평균을 설정합니다. 빠른 라인의 길이는 25일이고 느린 라인은 200일입니다.

  4. 큰 사이클 상승 추세에서 아래의 네 줄을 뚫고 갈 때 점수를 점차적으로 설정하십시오. 짧은 쪽은 동일합니다.

  5. 핀 바가 나타나거나 가격이 다시 큰 사이클 이동 평균을 넘을 때, 그것은 이윤을 위해 포지션을 닫는 핀 바 종료 신호로 간주됩니다.

위의 것은 이 전략의 주요 기술 원칙입니다. 볼링거 밴드를 통해 현재의 변동성 범위를 판단하고 큰 사이클 트렌드에 따라 포지션을 설정함으로써 높은 확률 포지션의 최종 효과를 얻을 수 있습니다.

이점 분석

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

  1. 트렌드 특성을 최대한 활용하고, 큰 사이클에서 트렌드 방향을 결정하고, 불필요한 역작업을 줄이기 위해 트렌드 방향으로 포지션을 구축합니다.

  2. 여러 볼링거 라인을 사용하면 현재 변동성 범위를 더 명확하게 판단 할 수 있습니다. 이는 대부분의 트렌드를 파악하는 데 도움이 됩니다.

  3. 그리드 포지션 방법은 안정적인 수익을 얻기 위해 각 기금 단위로 위험을 균등하게 분배할 수 있습니다.

  4. 포지션 폐쇄를 위해 핀 바 고효율 신호를 사용하면 빠르게 수익을 얻을 수 있습니다.

  5. 전체 전략은 트렌드 결정, 그리드 위치 및 특정 신호 위치 폐쇄를 통합합니다. 그것은 비교적 성숙하고 완전한 수치 전략입니다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 큰 사이클 트렌드를 잘못 결정할 확률. 빠르고 느린 이동 평균에서 오류가 발생할 확률이 있으며, 불필요한 역작업으로 이어질 수 있습니다.

  2. 볼링거 라인 파업 실패의 확률. 볼링거 라인은 가격 경로를 100% 정확하게 예측할 수 없습니다.

  3. 핀 바 신호는 늦게 나오고 적시에 수익을 올릴 수 없습니다.

  4. 큰 사이클 충격 조정 동안 너무 많은 중복 된 위치를 형성하는 것이 쉽습니다.

이에 대응하는 해결책은 다음과 같습니다.

  1. 실수의 확률을 줄이기 위해 빠르고 느린 이동 평균 매개 변수를 조정합니다.

  2. 볼링거 라인 매개 변수를 조정하여 볼링거 라인이 가능한 한 많은 변동에 부합하도록 합니다.

  3. 이윤을 얻는 신호를 위해 더 민감한 특정 패턴을 테스트합니다.

  4. 제어 위치 크기에 간격 거리를 늘려

최적화 방향

이 전략은 다음과 같은 방향으로 최적화 될 수 있습니다.

  1. 큰 사이클 트렌드 결정을 최적화하기 위해 다른 이동 평균 매개 변수를 테스트하십시오. 예를 들어 EMA, RSI 등과 같은 다른 지표를 테스트하십시오.

  2. 다양한 ATR 매개 변수를 테스트하여 볼링거 채널 너비 설정을 최적화하십시오. 볼링거 밴드는 실제 변동에 더 가깝게 유지하십시오.

  3. 다른 효율적인 수익 신호를 테스트하십시오. 예를 들어 SAR, 칼만 라인 등.

  4. 격자 간격을 최적화하여 변동성 간격을 더 균등하게 분할하여 중복된 포지션을 줄이십시오.

  5. 스톱 로스 메커니즘을 늘려서 극한 시장 조건에서 큰 손실을 피하세요.

요약

이 전략은 볼링거 채널, 이동 평균 지표, 특정 K-라인 패턴 및 기타 기술적 수단을 통합합니다. 큰 사이클 트렌드를 결정하는 전제 아래, 이동 평균 및 볼링거 밴드 기반의 트렌드 추적 그리드 전략을 구성합니다. 전통적인 볼링거 밴드 브레이크오웃과 비교하면이 전략은 트렌드 특성을 추가하여 불필요한 역전 포지션을 줄일 수 있습니다. 동시에, 그리드 포지션 방법은 안정적인 수익을 얻기 위해 각 기금 유닛에 대한 위험을 다양화합니다. 전략은 트렌드 결정, 볼링거 너비, 수익 징후, 스톱 손실 방법 등 여러 각도에서 최적화되어 보다 안정적인 전략 효과를 얻을 수 있습니다.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Aayonga

//@version=5
strategy("fib trend grid@Aa", overlay=true)

//回测时间
useDateFilter=input.bool(true,title = "启用回测时间范围限定(backtest)", group = "回测范围(backtest)")
backtesStarDate=input(timestamp("1 Jan 2015"),title = "开始时间(Start)", group = "回测范围(backtest)")
backtestEndDate=input(timestamp("1 Jan 2040"),title = "结束时间(finish)",group = "回测范围(backtest)")
inTradeWindow=true


//入场位 entry
bolllen=input.int(defval=20,minval=1,title="布林长度,(boll length)",group = "入场位(entry)")
sma=ta.sma(close,bolllen)
avg=ta.atr(bolllen)
fib1=input(defval=1.236,title="Fib 1",group = "入场位(entry)")
fib2=input(defval=2.382,title="Fib 2",group = "入场位(entry)")
fib3=input(defval=3.618,title="fib 3",group = "入场位(entry)")
fib4=input(defval=4.236,title="Fib 4",group = "入场位(entry)")
r1=avg*fib1
r2=avg*fib2
r3=avg*fib3
r4=avg*fib4
top4=sma+r4
top3=sma+r3
top2=sma+r2
top1=sma+r1
bott1=sma-r1
bott2=sma-r2
bott3=sma-r3
bott4=sma-r4



//趋势 plot

t4=plot(top4,title="卖 (sell)4",color=color.rgb(244, 9, 9))
t3=plot(top3,title = "卖(sell) 3",color=color.rgb(211, 8, 8))
t2=plot(top2,title="卖 (sell)2",color=color.rgb(146, 13, 13))
t1=plot(top1,title="卖(sell) 1",color=color.rgb(100, 3, 3))

b1=plot(bott1,title="买(buy1)1",color=color.rgb(4, 81, 40))
b2=plot(bott2,title="买(buy)2",color=color.rgb(15, 117, 46))
b3=plot(bott3,title = "买(buy)3",color =color.rgb(8, 176, 42) )
b4=plot(bott4,title="买(buy)4",color=color.rgb(15, 226, 103))
plot(sma,style=plot.style_cross,title="SMA",color=color.rgb(47, 16, 225))

//趋势
LengthF=input(defval = 25,title = "快线长度(fastlength)")
LengthS=input(defval=200,title = "慢线长度(slowlength)")
emaF=ta.ema(close,LengthF)
smaS=ta.sma(close,LengthS)
longTrend=emaF>smaS
longb=ta.crossover(emaF,smaS)
bgcolor(longb ? color.new(color.green,40):na,title = "多头强势(bull trend)")
shortTrend=smaS>emaF
shortb=ta.crossunder(emaF,smaS)
bgcolor(shortb ? color.new(#951313, 40):na,title = "空头强势(bear trend)")

//pinbar
bullPinBar = ((close > open) and ((open - low) > 0.6* (high - low))) or ((close < open) and ((close - low) > 0.9 * (high - low)))
//plotshape(bullPinBar  , text ="pinbar", textcolor=color.rgb(9, 168, 144),location=location.belowbar, color=color.rgb(29, 103, 67), size=size.tiny)
bearPinBar = ((close > open) and ((high - close) > 0.7 * (high - low))) or ((close < open) and ((high - open) > 0.7 * (high - low)))
//plotshape(bearPinBar  , text ="pinbar", textcolor=color.rgb(219, 12, 12),location=location.abovebar, color=color.rgb(146, 7, 7), size=size.tiny)

buy1=ta.crossunder(close,bott1) and longTrend and close>ta.ema(close,100)
buy2=ta.crossunder(close,bott2) and longTrend 
buy3=ta.crossunder(close,bott3) and longTrend 
buy4=ta.crossunder(close,bott4) and longTrend 
buyclose=bearPinBar or ta.crossunder(close,smaS)




if buy2 or buy3 or buy4 or buy1 and inTradeWindow
    strategy.order("多(buy)",strategy.long)

if buyclose  and inTradeWindow
    strategy.close("多(buy)")

sell1=ta.crossover(close,top1) and shortTrend and close<ta.ema(close,200)
sell2=ta.crossover(close,top2) and shortTrend and close<ta.ema(close,200)
sell3=ta.crossover(close,top3) and shortTrend and close<ta.ema(close,200)
sell4=ta.crossover(close,top4) and shortTrend and close<ta.ema(close,200)
sellclose=bullPinBar or ta.crossover(close,ta.sma(close,220))

if  sell1 or sell2 or sell3 or sell4 and inTradeWindow
    strategy.order("空(sell)",strategy.short)

if sellclose  and inTradeWindow
    strategy.close("空(sell)")
     

더 많은