이 전략은 Bollinger Bands에 기반한 양상 거래 전략 (Quant Trading Strategy Based on Bollinger Bands) 이라고 불린다. 이는 향상된 Bollinger Bands 채널을 기반으로 한 지수 및 주식 거래 전략이다. Bollinger Bands 매개 변수를 조정함으로써 상승 추세와 하락 추세 시장에서 수익을 창출하기 위해 장기 및 단위 포지션의 최적화를 실현한다.
이 전략의 핵심 논리는 중선, 상단 및 하단으로 구성된 볼링거 밴드 채널을 기반으로합니다. 중선은 n 일 동안의 종료 가격의 이동 평균입니다. 상단 및 하단 밴드는 중선 위의 및 아래의 오차입니다. 가격이 상단으로 접근하면 시장이 과열되어 있고 짧은 기회가있을 수 있음을 나타냅니다. 가격이 하단으로 접근하면 시장이 과소 평가되고 긴 기회가있을 수 있음을 나타냅니다.
이 전략은 두 개의 볼링거 밴드를 사용한다. 볼링거 밴드 1은 긴 거래에 적합하고 볼링거 밴드 2는 짧은 거래에 적합하다. 볼링거 밴드 1의 매개 변수는 길이 25과 편차 2.9배로 최적화된다. 볼링거 밴드 2의 매개 변수는 길이 36과 편차 3.2배로 최적화된다. 닫기 가격이 볼링거 밴드 1의 하단 밴드 위에 넘어가면 긴 신호를 생성한다. 닫기 가격이 볼링거 밴드 2의 상단 밴드 아래에 넘어가면 짧은 신호를 생성한다.
전통적인 볼링거 밴드 전략에 비해 이 전략은 다음과 같은 장점을 가지고 있습니다.
이 시스템은 롱과 쇼트 양쪽을 두 방향으로 거래하여 다양한 시장 단계에서 거래 기회를 활용할 수 있습니다.
매개 변수는 최적화되어 있습니다. 두 개의 볼링거 밴드 매개 변수는 효과적으로 거래 신호를 생성하기 위해 세밀하게 테스트됩니다.
위험은 통제 가능합니다. 이동 스톱 손실 방법은 한쪽의 위험을 효과적으로 제어 할 수 있습니다.
이 전략에는 몇 가지 잠재적 위험도 있습니다.
볼링거 밴드의 무효화 위험. 볼링거 밴드는 극심한 시장 변동 중에 무효화 될 수 있습니다.
스톱 손실이 발생할 위험이 있습니다. 이동 스톱 손실은 손실을 확장하기 위해 발생할 수 있습니다. 우리는 이러한 위험을 피하기 위해 스톱 손실을 적절히 확장하거나 적절한 시간에 중지 할 수 있습니다.
높은 거래 빈도 위험. 너무 민감한 매개 변수는 빈번한 거래와 거래 비용을 증가시킬 수 있습니다.
이 전략의 더 많은 최적화를 위한 여지가 있습니다.
다른 지표를 결합하여 신호를 필터하고 볼링거 밴드가 실패할 때 잘못된 거래를 피하십시오. 예를 들어 K 라인 패턴, 거래량 등.
다른 기간의 시장 특성에 맞게 매개 변수를 동적으로 조정합니다. 예를 들어 적응 가능한 볼링거 밴드를 사용합니다.
트레일링 스톱 로스 또는 기하급수적인 이동 스톱 로스를 사용하여 스톱 로스 방법을 최적화하여 위험을 효과적으로 제어합니다.
기계 학습 알고리즘을 결합해서 자동으로 매개 변수를 최적화합니다.
요약하자면, 이 전략은 전체적으로 이중 볼링거 밴드 채널 및 매개 변수 최적화에 기반하여 장기 및 단편 양쪽 모두에 대한 양방향 거래를 최적화합니다. 전통적인 볼링거 밴드 전략에 비해 양방향 거래 및 위험 통제의 장점을 가지고 있습니다. 다른 시장 단계에서 기회를 잡기 위해 적합하며 특정 실용적 가치를 가지고 있습니다. 그러나 볼링거 밴드의 실패와 손실 중단과 같은 위험이 여전히 존재합니다. 생산화 전에 추가 최적화 및 검증이 필요합니다.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 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/ // © exlux99 //@version=4 strategy("BB NDX strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_every_tick = true, commission_type = strategy.commission.percent, commission_value = 0.01) source = close length = input(25, minval=1, title="Length BB long") mult = input(2.9, minval=0.001, maxval=50, step=0.1, title="MULT BB long") length2 = input(36, minval=1, title="Length BB short") mult2 = input(3.2, minval=0.001, maxval=50, step=0.1, title="MULT BB short") basis = sma(source, length) dev = mult * stdev(source, length) dev2 = mult2 * stdev(source, length2) upper = basis + dev2 lower = basis - dev buyEntry = crossover(source, lower) sellEntry = crossunder(source, upper) longEntry=input(true) shortEntry=input(true) g(v, p) => round(v * (pow(10, p))) / pow(10, p) risk = input(100) leverage = input(1.0, step = 0.5) c = g((strategy.equity * leverage / open) * (risk / 100), 4) tplong=input(0.065, step=0.005, title="Take profit % for long") sllong=input(0.04, step=0.005, title="Stop loss % for long") tpshort=input(0.025, step=0.005, title="Take profit % for short") slshort=input(0.04, step=0.005, title="Stop loss % for short") if(longEntry) strategy.entry("long",1,c,when=buyEntry) strategy.exit("short_tp/sl", "long", profit=close * tplong / syminfo.mintick, loss=close * sllong / syminfo.mintick, comment='LONG EXIT', alert_message = 'closeshort') strategy.close("long",when=sellEntry) if(shortEntry) strategy.entry("short",0,c,when=sellEntry) strategy.exit("short_tp/sl", "short", profit=close * tpshort / syminfo.mintick, loss=close * slshort / syminfo.mintick, comment='SHORT EXIT', alert_message = 'closeshort') strategy.close("short",when=buyEntry)