이 전략은 현재 트렌드 방향을 결정하고 스톱 로스를 위한 기하급수적인 이동 평균을 결정하고 트렌드를 효과적으로 파악하기 위해 이윤 관리를 사용합니다.
이 전략은 먼저 볼링거 밴드의 중간선, 상위 밴드 및 하위 밴드를 계산합니다. 중간선은 n 일 동안 종료 가격의 간단한 이동 평균입니다. 상위 및 하위 밴드는 중간선에서 두 개의 표준 편차로 위아래로 이동합니다. 종료 가격이 상위 밴드 위에있을 때 상승 추세를 나타냅니다. 종료 가격이 하위 밴드 아래에있을 때 하락 추세를 나타냅니다.
이 전략은 종료 가격과 볼링거 밴드의 상부/하부 밴드 사이의 관계를 비교하여 현재 트렌드 방향을 판단합니다. 종료 가격이 상부 밴드를 통과하면 길게 이동합니다. 종료 가격이 하부 밴드를 통과하면 짧게 이동합니다.
또한, 기하급수적인 이동 평균은 스톱 손실 및 수익을 취하기 위한 후속 스톱으로 도입된다. 구체적으로, 가격이 긴 후에 하락하면 스톱 손실 라인은 그에 따라 하락하여 수익 잠금을 극대화하기 위해 점차적으로 스톱 손실 거리를 강화한다. 가격이 계속 상승하면 스톱 손실 라인은 또한 수익을 실행하도록 움직인다. 스톱 손실 메커니즘은 짧은 포지션에 대해 역으로 작동한다.
트렌드 방향에 대한 볼링거 밴드와 스톱 로스/익스피스 관리에 대한 EMA를 결합한 전략은 다음과 같은 장점을 가지고 있습니다.
볼링거 밴드를 사용하면 트렌드 방향을 효과적으로 결정하고 브레이크에 빠르게 반응할 수 있습니다.
EMA에 기반한 스톱 로스/프로프트 취득은 리스크를 통제하면서 수익을 최대화 할 수 있습니다.
이 전략은 실행하기 쉬운 몇 가지 매개 변수를 가지고 있습니다.
그것은 다양한 제품에 광범위하게 적용 될 수 있습니다.
이 전략은 또한 몇 가지 위험을 가지고 있습니다.
BB 상부/하부 대역을 뚫는 것은 거짓 파업의 위험을 완전히 피할 수 없습니다. 신호를 필터하기 위해 볼륨 등과 결합하는 것을 고려하십시오.
EMA 매개 변수 설정은 특정 제품에 따라 신중한 테스트가 필요합니다. 너무 짧은 EMA 기간은 중지 손실 시간을 증가시킬 수 있습니다. 너무 길게는 추적 효과를 감소시킬 것입니다.
과도한 최적화를 피해야 합니다. BB와 EMA 매개 변수의 너무 많은 조합은 과도한 적합으로 이어질 수 있습니다.
위험 및 최적화 방향을 해결하기 위해 다음을 고려할 수 있습니다.
부피 또는 MACD 등을 추가하여 잘못된 브레이크오웃 신호를 필터합니다.
특정 제품에 가장 적합한 매개 변수를 찾기 위해 테스트를 통해 EMA 기간을 최적화합니다.
BB와 EMA 매개 변수를 가능한 한 안정적으로 유지하도록 노력하여 과도한 최적화로 인한 과도한 적응 위험을 피합니다.
중장기 트렌드에서 위치 조정을 결정하기 위해 RSI 등을 사용하는 것을 고려하십시오.
이 전략은 트렌드를 결정하기 위해 볼링거 밴드 (Bollinger Bands) 와 스톱 로스/테크 노프트 관리에 대한 EMA를 사용하여 비교적 완전한 트렌드 추적 시스템을 형성합니다. 스톱 로스 라인을 지속적으로 조정함으로써 트렌드 방향을 빠르게 파악하고 이익을 잠금 할 수 있습니다. 전반적으로 전략은 비교적 간단하고 실용적이며 적응력이 있으며 추가 테스트 및 최적화를 가치가 있습니다. 그러나 매개 변수 설정 및 위험 통제는 잘못된 판단과 과잉 최적화를 방지하기 위해 주목해야합니다. 추가 개선을 위해 다른 기술적 지표와 결합하는 것이 앞으로 나아갈 방향입니다.
/*backtest start: 2022-11-10 00:00:00 end: 2023-11-16 00:00:00 period: 1d basePeriod: 1h 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/ // © zxcv55602 //@version=4 strategy(shorttitle=" BB+EMA", title="Bollinger Bands", overlay=true) date1 = input(title="Start Date", type=input.time, defval=timestamp("2020-01-01T00:00:00")) date2 = input(title="Stop Date", type=input.time, defval=timestamp("2030-01-01T00:00:00")) length = input(40, minval=1) src = input(close, title="Source") mult = input(2.0,title="StdDev",step=0.1) basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev //offset = input(0, "Offset", minval = -500, maxval = 500) offset=0 stopcon=input(title="stopcon/lot", type=input.bool, defval=true) lot1=input(title="lot",defval=1) stoploss=input(title="stopcon",defval=1000) emacon=input(title="emacon", type=input.bool, defval=true) ema_value=input(title="value",defval=30, minval=2,step=1) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=color.new(color.blue,50), offset = offset) p2 = plot(lower, "Lower", color=color.new(color.blue,50), offset = offset) ema1=ema(close,ema_value) plot(ema1, "SMA", color=#2962FF) period() => true //----------- if period() if strategy.opentrades==0 and ema1<upper if close>upper lot_L=stoploss/((close-lower)/2) strategy.entry("OP_L",strategy.long,qty=stopcon==true?lot_L:lot1,stop=emacon==true?max(basis,ema1):basis) if strategy.opentrades==0 and ema1>lower if close<lower lot_S=stoploss/((upper-close)/2) strategy.entry("OP_S",strategy.short,qty=stopcon==true?lot_S:lot1,stop=emacon==true?min(basis,ema1):basis) if strategy.position_size>0 strategy.exit("OP_L",stop=emacon==true?max(basis,ema1):basis,comment="exit_L") if strategy.position_size<0 strategy.exit("OP_S",stop=emacon==true?min(basis,ema1):basis,comment="exit_S")