다층 변동성 대역 거래 전략 (Multi-Layer Volatility Band Trading Strategy) 은 가격 변동성에 기반한 양적 거래 접근법이다. 이 전략은 시장에서 과잉 구매 및 과잉 판매 영역을 식별하기 위해 여러 변동성 대역을 활용하여 가격이 이 영역에 닿을 때 거래를 시작합니다. 핵심 아이디어는 가격이 평균에서 벗어나 수익을 올릴 때 포지션을 설정하는 것입니다. 이 방법은 마르틴게일 전략의 요소를 통합하면서 평균 회귀 이론을 기반으로하며 수익 기회를 향상시키기 위해 불리한 가격 움직임 중에 포지션을 증가시킵니다.
이동 평균 계산: 전략은 기본 라인을 계산하기 위해 선택 가능한 이동 평균 유형 (SMA, EMA, SMMA, WMA, VWMA) 을 사용합니다.
변동성 대역 설정: 여러 변동성 대역은 기본 선에 기초하여 표준편차를 인수로 곱하여 설정됩니다.
피보나치 레벨: 피보나치 리트레이싱 레벨 (23.6%, 38.2%, 50%, 61.8%) 은 변동성 대역을 분할하여 더 많은 거래 기회를 창출하는 데 사용됩니다.
동적 조정: ATR (Average True Range) 에 기반한 동적 곱셈을 사용하여 변동성 대역의 폭을 자동으로 조정할 수 있는 옵션.
엔트리 로직 (Entry Logic): 가격이 변동성 대역에 해당하는 방향으로 닿거나 넘을 때 포지션이 설정됩니다.
포지션 스케일링: 가격이 계속 불리하게 움직이면 전략은 마틴게일 전략 개념을 구현하여 더 많은 변동성 대역 수준에서 포지션을 추가합니다.
출구 논리: 가격이 기본 라인으로 되돌아 갈 때 이윤을 취합니다. 가격이 기본 라인을 넘을 때 포지션을 닫는 옵션도 있습니다.
다단계 진입: 여러 변동성 대역과 피보나치 수준을 설정함으로써 전략은 다른 가격 수준에서 시장 변동성을 포착하여 더 많은 거래 기회를 제공합니다.
높은 유연성: 전략은 사용자가 다양한 시장 환경과 거래 도구에 적응하기 위해 다양한 유형의 이동 평균, 기간 및 매개 변수를 선택할 수 있습니다.
동적 적응: 선택적 동적 곱셈 기능으로 전략은 시장 변동성에 따라 자동으로 조정되어 적응성을 향상시킵니다.
리스크 관리: 불리한 가격 변동 중에 포지션을 증가시킴으로써 전략은 평균 입시 가격을 낮추고 궁극적인 수익성의 가능성을 증가시킵니다.
평균 반전 개념: 이 전략은 가격이 결국 평균으로 돌아갈 것이라는 생각에 기반하고 있으며, 이는 많은 시장과 시간 틀에서 잘 수행됩니다.
사용자 정의 가능성: 사용자는 자신의 위험 선호도와 거래 스타일에 따라 주식 크기 및 피보나치 레벨과 같은 매개 변수를 조정할 수 있습니다.
연속적 손실 위험: 강한 트렌드 시장에서 가격은 지속적으로 여러 변동 범위를 통과하여 연속적인 위치 증가와 상당한 손실을 축적 할 수 있습니다.
자본 관리 압력: 마틴게일 방식의 위치 확장으로 인해 자본 요구 사항이 급격히 증가하여 계좌 용량을 초과 할 수 있습니다.
오버 트레이딩: 여러 변동성 대역은 범위 제한 시장에서 과도한 거래 신호를 생성하여 거래 비용을 증가시킬 수 있습니다.
매개 변수 민감성: 전략 성능은 매개 변수 설정에 크게 의존합니다. 부적절한 매개 변수는 낮은 성능으로 이어질 수 있습니다.
미끄러짐 및 유동성 위험: 매우 변동적인 시장에서, 특히 규모를 조정할 때 중요한 미끄러짐이 발생할 수 있습니다.
마감 위험: 전략은 포지션 스케일링을 통해 평균 비용을 낮추는 것을 목표로 하고 있지만 극한 시장 조건에서는 여전히 상당한 마감에 직면 할 수 있습니다.
트렌드 필터를 도입하십시오: 강한 트렌드에 자주 반 트렌드 거래를 피하여 트렌드 방향으로만 포지션을 열기 위해 장기 트렌드 지표를 추가하십시오.
동적 위치 크기: 거래된 주식 수를 계정 크기와 시장 변동성에 따라 조정하여 위험을 더 잘 제어합니다.
출구 메커니즘을 최적화: 수익을 더 잘 확보하고 위험을 제어하기 위해 후속 중지 또는 변동성 기반 동적 중지 손실을 도입하는 것을 고려하십시오.
시간 필터를 추가하십시오. 높은 변동성 또는 낮은 유동성 기간을 피하기 위해 거래 시간 창 제한을 구현하십시오.
시장 정서 지표 통합: VIX와 같은 변동성 지표를 통합하여 전략 매개 변수를 조정하거나 높은 변동성 기간 동안 거래를 중단하십시오.
기계 학습을 도입: 기계 학습 알고리즘을 사용하여 매개 변수를 동적으로 최적화하여 시장 변화에 대한 전략의 적응력을 향상시킵니다.
기본 필터 추가: 기본 데이터를 포함하여 특정 기본 조건 하에서만 거래를 허용하여 무역 품질을 향상시킵니다.
다층 변동성 대역 거래 전략 (Multi-Layer Volatility Band Trading Strategy) 은 기술 분석, 확률 이론, 리스크 관리를 결합한 복잡한 거래 시스템이다. 다단계 진입점과 마르틴게일 방식의 위치 확장을 통해 가격 변동으로부터 이익을 얻으려고 시도한다. 전략의 강점은 유연성과 평균 반전을 활용하는 데 있지만 강한 트렌딩 시장에서도 위험에 직면한다.
이 전략을 성공적으로 적용하기 위해서는 시장 특성에 대한 깊은 이해, 신중한 매개 변수 설정 및 엄격한 위험 관리 구현이 필요합니다. 지속적인 최적화 및 백테스팅을 통해 시장 통찰력과 결합하여이 전략은 효과적인 거래 도구가 될 가능성이 있습니다. 그러나 복잡성과 잠재적 위험을 감안하면 실시간 거래 전에 철저한 시뮬레이션 테스트 및 위험 평가를 수행하는 것이 좋습니다.
전반적으로, 다층 변동성 대역 거래 전략은 양적 거래자에게 흥미롭고 도전적인 틀을 제공합니다. 그것의 성공적인 적용은 기술적 분석 기술, 위험 관리 기술 및 지속적인 전략 최적화를 요구합니다.
/*backtest start: 2024-06-30 00:00:00 end: 2024-07-30 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © abtov //@version=5 strategy("Spider Strategy", overlay=true) ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "Bollinger Bands" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) stdev = input.int(56, "STDEV", group="Stdev") mult = input.float(2.3, "Multiplier", group="Stdev") ma_len = input.int(230, "Basis Length", group="Stdev") ma_type = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Stdev") auto_mult = input.bool(true, "Dynamic Mult.", group="Stdev") basis_exit = input.bool(false, "Basis Exit", group="Stdev") col_int = input.int(12, "Collective Value", group="Collective") col_input = input.bool(true, "Collective Input", group="Collective") fib1 = input.float(0.236, "Fibonacci Level 1", group = "Fibonacci") fib2 = input.float(0.382, "Fibonacci Level 2", group = "Fibonacci") fib3 = input.float(0.5, "Fibonacci Level 3", group = "Fibonacci") fib4 = input.float(0.618, "Fibonacci Level 4", group = "Fibonacci") atr_len = input.int(30, "ATR", group="ATR") atr_bias = input.float(0.72, "Bias", group="ATR") shares = input.int(1, "Shares Amount", group="Strategy") if(col_input == true) stdev := col_int ma_len := col_int atr_len := col_int if(auto_mult == true) mult := ma(ta.tr(true), atr_len, ma_type) * atr_bias basis = ma(close, ma_len, ma_type) lower = basis - stdev * mult upper = basis + stdev * mult lower2 = basis - stdev * mult * fib1 upper2 = basis + stdev * mult * fib1 lower3 = basis - stdev * mult * fib2 upper3 = basis + stdev * mult * fib2 lower4 = basis - stdev * mult * fib3 upper4 = basis + stdev * mult * fib3 lower5 = basis - stdev * mult * fib4 upper5 = basis + stdev * mult * fib4 var lowerAct = false var lower2Act = false var lower3Act = false var lower4Act = false var lower5Act = false var upperAct = false var upper2Act = false var upper3Act = false var upper4Act = false var upper5Act = false plot(upper, "limit short", color.red) plot(upper2, "limit 1 short", color.red) plot(upper3, "limit 2 short", color.red) plot(upper4, "limit 3 short", color.red) plot(upper5, "limit 4 short", color.red) plot(basis, "basis", color.white) plot(lower, "limit long", color.green) plot(lower2, "limit 1 long", color.green) plot(lower3, "limit 2 long", color.green) plot(lower4, "limit 3 long", color.green) plot(lower5, "limit 4 long", color.green) if(lowerAct == false) if(close < lower) strategy.entry("long", strategy.long, shares) lowerAct := true else if(low > basis) lowerAct := false if(lower2Act == false) if(close < lower2) strategy.entry("long", strategy.long, shares) lower2Act := true else if(low > basis) lower2Act := false if(lower3Act == false) if(close < lower3) strategy.entry("long", strategy.long, shares) lower3Act := true else if(low > basis) lower3Act := false if(lower4Act == false) if(close < lower4) strategy.entry("long", strategy.long, shares) lower4Act := true else if(low > basis) lower4Act := false if(lower5Act == false) if(close < lower5) strategy.entry("long", strategy.long, shares) lower5Act := true else if(low > basis) lower5Act := false if(upperAct == false) if(close > upper) strategy.entry("short", strategy.short, shares) upperAct := true else if(high < basis) upperAct := false if(upper2Act == false) if(close > upper2) strategy.entry("short", strategy.short, shares) upper2Act := true else if(high < basis) upper2Act := false if(upper3Act == false) if(close > upper3) strategy.entry("short", strategy.short, shares) upper3Act := true else if(high < basis) upper3Act := false if(upper4Act == false) if(close > upper4) strategy.entry("short", strategy.short, shares) upper4Act := true else if(high < basis) upper4Act := false if(upper5Act == false) if(close > upper5) strategy.entry("short", strategy.short, shares) upper5Act := true else if(high < basis) upper5Act := false if((ta.crossover(close, basis) and basis_exit == true)) strategy.close("short") strategy.close("long")