이 전략은 볼링거 밴드 지표와 모멘텀 오실레이팅 이동 평균 지표에 기반한 가격 채널을 구축하여 가격이 채널의 상부 또는 하부 경계를 넘을 때 거래 신호를 생성합니다. 볼링거 밴드의 적응력과 모멘텀 오실레이터의 유연성을 결합함으로써 시장 트렌드의 변화에 적시에 대응 할 수 있습니다.
이 전략은 볼링거 중위 대역과 모멘텀 오스실레이팅 이동 평균을 사용하여 가격 채널을 구축합니다. 중위 대역은 21 기간 볼링거 중위 대역을 채택합니다. 상위 대역과 하위 대역은 각각 비율 범위에서 위와 아래로 뻗습니다. 모멘텀 오스실레이팅 이동 평균은 중위 대역에 따라 과반 구매 또는 과반 판매 수준 근처에 뻗어 있거나 줄어듭니다. 가격이 상위 대역을 넘어서면 길게 가십시오. 가격이 하위 대역을 넘어서면 짧게 가십시오.
구체적으로 볼링거 중위 대역은 다음과 같이 계산됩니다.
Middle Band = Moving Average of N-period closing price
상단역과 하단역은 다음과 같이 계산됩니다.
Upper Band = Middle Band + WidthDev * N-period Bollinger standard deviation
Lower Band = Middle Band - WidthDev * N-period Bollinger standard deviation
여기서 WidthDev는 위와 아래로 확장된 비율 범위를 나타냅니다.
모멘텀 오시일레이팅 모닝 오브러지는 특정 규칙에 따라 중간 밴드를 기반으로 확장 또는 축소됩니다. 시장이 과소 구매 또는 과소 판매가 될 때, 그것은 길거나 짧게 갈 수있는 더 많은 기회를 제공하기 위해 중간 밴드에서 더 멀리 확장됩니다. 시장이 진정되면 중간 밴드를 향해 수축됩니다.
요약하자면, 이 전략은 볼링거 밴드를 이용한 가격 채널을 묘사하고, 브레이크아웃 거래를 실현하는 모멘텀 오스실레이팅 모닝 평균을 이용한 입시 시기를 결정합니다. 가격이 볼링거 상단에서 상향으로 돌파할 때 장거리, 그리고 가격이 볼링거 하단에서 상향으로 돌파할 때 단축합니다.
시장의 변동성을 반영합니다. 볼링거 대역은 시장 변동성과 트렌드 변화를 실시간으로 반영할 수 있습니다. 상부와 하부 대역은 변동성의 변화에 따라 적응합니다.
잘못된 신호를 줄여줍니다. 모멘텀 오시일레이팅 이동 평균의 스트레칭 효과는 볼링거 밴드에서 생성되는 잘못된 신호를 효과적으로 줄일 수 있습니다. BB 채널의 폭을 확장하고 보유 기간을 연장함으로써 더 큰 이익을 얻을 수 있습니다.
트렌드 전환을 적시에 잡습니다. BB 상위 및 하위 밴드 및 모멘텀 오실레이팅 이동 평균의 크로스오버는 주요 황금 및 곰 조정 및 트렌드 역전을 적시에 파악 할 수있는 거래 신호를 생성하기위한 유리한 타이밍과 가격을 제공합니다.
부적절한 BB 매개 변수 계산 기간과 표준편차 곱하기 등 BB 매개 변수들의 부적절한 설정은 범위를 너무 넓게 또는 너무 좁게 분리하여 과도한 잘못된 신호를 발생시키고 전략의 안정성을 약화시킬 수 있습니다.
과도한 진동 진폭 모멘텀 오슬레이팅 이동 평균의 오스실레이션 진폭이 너무 커지면 스톱 로스 포인트가 너무 멀리 떨어져 손실 위험을 증가시킬 수 있습니다.
늦은 반전
시장이 변동하거나 트렌드가 없는 경우 BB와 Momentum Oscillating Moving Average의 거래 신호는 시간이 지남에 따라 가격 변화를 반영하지 못하여 지연된 반전 위험을 유발할 수 있습니다.
BB 매개 변수를 최적화 다른 기간과 표준편차 곱셈을 테스트하여 더 나은 신호 주파수와 더 적은 잘못된 신호를 제공하는 최적의 매개 변수 조합을 찾으십시오.
모멘텀 오스실레이션 이동 평균 매개 변수를 최적화 트렌드를 더 잘 파악하고 신호 지연을 줄이는 매개 변수를 찾기 위해 다른 진동 진폭과 기간을 테스트합니다.
필터 조건을 추가합니다 크로스오버 신호에 기반한 거래량과 같은 필터를 추가하여 비효율적인 거래 신호를 배제합니다.
전략 조합 이 전략을 다른 스톱 로스 전략이나 머신 러닝 전략과 결합하여 위험을 더욱 통제하고 안정성을 향상시킵니다.
이 전략은 적응형 볼링거 밴드 (Adaptive Bollinger Bands) 와 모멘텀 오스실레이팅 모닝 평균 (Momentum Oscillating Moving Average) 의 강점을 결합하여 트렌드를 따라가며 트렌드 반전을 포착하는 통합을 달성합니다. 시장 변동성과 거래 신호 유연성을 균형있게 함으로써 안정적이고 효과적인 브레이크아웃 거래를 실현합니다. 매개 변수 최적화 및 위험 통제는 또한 다양한 시장 환경에 따라 테스트하고 조정하는 데 중요합니다.
/*backtest start: 2022-12-29 00:00:00 end: 2024-01-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Hull Cloud v2 by SEASIDE420 strategy("Hull Moving Average Cloud v2", shorttitle="hull_cloud_v2", overlay=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, max_bars_back=200, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0) hullperiod=input(title="HullMA Period",defval=210, minval=1) Width=input(title="Cloud Width",defval=200, minval=2) price=input(ohlc4,title="Price data") FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2017, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => true n2ma=2*wma(price,round(hullperiod/2)) nma=wma(price,hullperiod) diff=n2ma-nma sqn=round(sqrt(hullperiod)) n2ma1=2*wma(price[1],round(hullperiod/2)) nma1=wma(price[1],hullperiod) diff1=n2ma1-nma1 n1=wma(diff,sqn) n2=wma(diff1,sqn) Hull_Line=n1-n1[1]/n2[1] Hull_retracted=if(n1>n2) Hull_retracted=Hull_Line-Width else Hull_retracted=Hull_Line+Width c1=(Hull_retracted*n1)/price[1] c2=(Hull_retracted*n2)/price[1] c4=c1>c2?green:red c2p=plot(c2, color=black, linewidth=1) c3p=plot(price, color=black, linewidth=1) fill(c3p, c2p, color=c4, transp=75) plot(cross(c1, c2) ? c1 : na, style = circles,color=c4, linewidth = 4) if (price<c2) strategy.close("BUY", when=window()) if (price>c2) strategy.close("SELL", when=window()) if (price[1]>c2 and price[1]>c1) strategy.entry("BUY",strategy.long, when=window()) if (price[1]<c1 and price[1]<c2) strategy.entry("SELL",strategy.short, when=window())// /L'-, // ,'-. ` ```` / L '-, // . _,--dMMMM\ ` ` ` '`.. / '-, // : _,--, )MMMMMMMMM),. ` ,<> /_ '-,' // ; ___,--. \MM( `-' )M//MM\ ,',.; .-'* ; .' // | \MMMMMM) \MM\ ,dM//MMM/ ___ < ,; `. )`--' / // | \MM()M MMM)__ /MM(/MP' ___, \ \ ` `. `. /__, ,' // | MMMM/ MMMMMM( /MMMMP'__, \ | / `. `-,_\ / // | MM /MMM---' `--'_ \ |-' |/ `./ .\----.___ // | /MM' `--' __,- \"" |-' |_, `.__) . .F. )-. // | `--' \ \ |-' |_, _,-/ J . . . J-'-. `-., // | __ \`. | | | \ / _ |. . . . \ `-. F // | ___ / \ | `| ' __ \ | /-' F . . . . \ '` // | \ \ \ / | __ / \ | |,-' __,- J . . . . . \ // | | / |/ __,- \ ) \ / |_,- __,--' |. .__.----,' // | |/ ___ \ |'. |/ __,--' `.-;;;;;;;;;\ // | ___ \ \ | | ` __,--' /;;;;;;;;;;;;. // | \ \ |-'\ ' __,--' /;;;;;;;;;;;;;;\ // \ | | / | __,--' `--;;/ \;-'\ // \ | |/ __,--' / / \ \ // \ | __,--' / / \ \ // \|__,--' _,-;M-K, ,;-;\ // <;;;;;;;; '-;;;; // :D