볼링거 밴드 동적 취득 및 동적 위치 추가 전략

저자:차오장날짜: 2024-03-22 15:49:28
태그:

img

전략 개요

이 전략은 볼링거 밴드 지표에 기반을 두고 있다. 가격이 상위 또는 하위 밴드에 도달하면 포지션을 열고, 동적 취익 및 동적 위치 추가 논리를 설정한다. 가격이 하위 밴드에서 반등하여 중간 밴드를 통과하면, 전략은 상승 추세가 형성되었다고 간주한다. 이 시점에서, 전략은 가격이 중간 밴드의 특정 비율로 끌어당길 때 포지션을 추가한다. 가격이 마침내 상위 밴드를 통과할 때, 전략은 수익을 취하기 위해 포지션을 닫는다. 하향 추세에서, 전략은 반대 운영 논리를 채택한다. 볼링거 밴드를 기반으로 동적 취익 및 동적 위치 추가를 통해, 이 전략은 트렌딩 시장에서 더 많은 이익을 얻을 수 있다.

전략 원칙

이 전략의 주요 원칙은 다음과 같습니다.

  1. 볼링거 밴드의 상단, 중단 및 하단 밴드를 계산합니다. 상단 및 하단 밴드는 중간 밴드에서 표준편차의 N 배를 더하고 빼면서 계산됩니다. 여기서 N는 사용자 정의 될 수 있습니다.

  2. 폐쇄 가격은 하위 대역을 깨고 이전에는 포지션이 열리지 않았을 때 전략은 긴 포지션을 열고 폐쇄 가격이 상위 대역을 깨고 이전에는 포지션이 열리지 않았을 때 전략은 짧은 포지션을 열고 있습니다. 여기서의 오픈 논리는 전통적인 볼링거 대역 브레이크아웃 시스템과 유사합니다.

  3. 긴 포지션을 열었을 때, 닫기 가격이 중간 밴드를 통해 상향으로 돌파하면 상승 추세가 형성되었다고 간주되며 변수 basisCrossed는 true로 표시됩니다. 짧은 포지션을 열었을 때, 닫기 가격이 중간 밴드를 통해 하향으로 돌파하면 basisCrossed도 true로 표시됩니다.

  4. 긴 포지션의 경우, 닫기 가격이 하위 대역과 기본Crossed를 깨고 현재 가격이 원래 개시 가격에서 2% 이상 떨어졌다면 전략은 이 시점에서 포지션을 추가하고 동시에 false로 기본Crossed를 재설정합니다. 짧은 포지션의 경우는 그 반대입니다. 여기서 포지션 추가 논리는 트렌드 인회 중 낮은 수준에서 포지션을 추가하여 수익 공간을 증가시킬 수 있습니다.

  5. 긴 포지션을 보유할 때 닫기 가격이 상위 범위를 뚫거나 짧은 포지션을 보유할 때 닫기 가격이 하위 범위를 뚫면 전략은 모든 포지션을 닫고 이익을 취하고 다음 오픈을 준비하기 위해 다양한 마커 변수를 재설정합니다.

위의 역동적인 오픈, 포지션 추가 및 수익 로직을 통해이 전략은 트렌딩 시장에서 더 높은 수익을 얻기 위해 유연하게 작동 할 수 있습니다. 동시에 트렌드를 캡처하기 위해 볼링거 밴드의 고전 기술 지표를 사용하는 것은 전략에 특정 적응력과 안정성을 제공합니다.

이점 분석

  1. 동적 영업이익: 이 전략은 볼링거 밴드의 상부 및 하부 밴드를 통해 영업이익 수준을 동적으로 조정합니다. 고정 포인트 영업이익에 비해 시장 변동에 더 잘 적응하고 유연하게 이익을 보호 할 수 있습니다.

  2. 동적 포지션 추가: 트렌드가 형성 된 후 인하 단계에서 전략은 점차적으로 포지션을 추가하여 트렌딩 시장에서 더 높은 수익을 얻을 수 있습니다. 동적 포지션 추가로 트렌드 거래에서이 전략을 더 유리한 것으로 만듭니다.

  3. 유연한 매개 변수: N 및 P 값과 같은 볼링거 밴드의 매개 변수는 다른 시장 특성과 거래 스타일에 적응하도록 유연하게 조정할 수 있습니다.

  4. 강한 적응력: 볼링거 밴드는 트렌드를 잘 파악할 수 있는 고전적인 기술 지표입니다. 동적인 포지션 관리와 결합하면 다양한 금융 시장에서 안정적인 역할을 할 수 있습니다.

  5. 명확한 논리: 이 전략의 개점 및 폐쇄 조건과 포지션 추가 및 감소 논리는 매우 명확하고 이해하기 쉽습니다. 이는 거래자가 이해하고 제어하는 데 편리합니다. 명확한 논리 또한 2차 개발 및 전략 최적화를 더 쉽게한다는 것을 의미합니다.

위험 분석

  1. 오시일레이션 시장: 볼링거 밴드 전략은 종종 오시일레이션 시장에서 성적이 좋지 않습니다. 이 시점에서 포지션의 빈번한 개점과 폐쇄는 전체 수익에 영향을 미치는 더 많은 거래 비용으로 이어질 것입니다.

  2. 트렌드 역전: 트렌드 역전의 중요한 순간에 이 전략은 판단에 차질을 빚어 잘못된 방향으로 포지션을 추가하여 더 큰 마감으로 이어질 수 있습니다.

  3. 극단적 상황: 극단적 상황 (비폭 상승과 하락과 같은 경우) 에서 볼링거 밴드의 추세는 비정상적일 수 있으며 전략의 실패를 초래할 수 있습니다.

  4. 매개 변수 설정: 부적절한 매개 변수 설정은 이 전략의 성능에 심각한 영향을 미칠 것이다. 예를 들어, N 값을 너무 작게 설정하면 빈번한 거래가 발생하고, N 값을 너무 크게 설정하면 신호 지연이 발생한다.

  5. 블랙 스완 이벤트: 주요 정치 및 경제 사건이 발생하면이 전략은 더 큰 위험 노출에 직면 할 수 있습니다.

위의 위험을 제어하기 위해서는 두 가지 측면을 시작으로 시작할 수 있습니다. 1) 다른 목표와 시장 조건에 대한 매개 변수를 합리적으로 설정하고 최적화하십시오. 2) 신호의 품질을 향상시키기 위해 트렌드 판단, 변동성 필터링 등 전략에 더 많은 필터링 조건을 추가하십시오. 또한 실제 사용에서는 위치 제어 및 위험 관리에 대한 좋은 업무를 수행하고 단일 거래의 위험 노출을 엄격히 제어해야합니다.

최적화 방향

  1. 트렌드 필터링: 트렌드 포지션을 개설할 때 트렌드 판단의 논리를 추가합니다. 예를 들어, 장기화 할 때 필터링 조건으로 MA 상승 조율을 사용하고, 단위로 갈 때 필터링 조건으로 MA 하락 조율을 사용하여 트렌드 포착의 성공률을 향상시킬 수 있습니다.

  2. 변동성 필터링: 볼링거 밴드는 실제로 변동성 지표의 일종이다. 시장의 변동성 상태를 식별하기 위해 ATR 및 역사적 변동성과 같은 변동성 지표가 도입될 수 있다. 높은 변동성 상태에서 포지션은 적절히 감소하고 낮은 변동성 상태에서 증가하여 위험을 더 잘 제어할 수 있다.

  3. 동적 매개 변수 최적화: 볼링거 밴드의 매개 변수는 시장 조건에 따라 동적으로 조정할 수 있습니다. 예를 들어, N 값은 트렌딩 시장에서 증가하고 오스실레이션 시장에서 감소 할 수 있습니다. 이것은 기계 학습 및 다른 기술을 사용하여 역사 데이터에 대한 훈련을 통해 최적의 매개 변수를 찾을 수 있습니다.

  4. 복합 전략: 이 전략은 MACD와 RSI와 같은 다른 고전적인 전략과 결합하여 복합 전략을 형성하여 시스템의 안정성과 수익성을 향상시킬 수 있습니다.

  5. 스톱 로스 로직을 추가: 현재 이 전략은 명확한 스톱 로스 로직을 갖추지 못하고 있다. 하나의 트랜잭션의 최대 손실을 제어하기 위해 트레일링 스톱이나 고정된 비율의 스톱 로스 같은 메커니즘을 추가하는 것을 고려할 수 있다.

  6. 포지션 관리 최적화: 포지션을 추가하고 줄이는 과정에서, 켈리 공식과 최적의 F 값과 같은 고전적인 포지션 관리 방법은 제어 가능한 위험 하에서 이익을 극대화하기 위해 사용될 수 있습니다.

위의 최적화를 통해 이 전략의 위험/이익 비율은 더욱 향상될 수 있고, 변화하는 시장 환경에 더 잘 적응할 수 있고, 거래자들에게 안정적인 수익을 가져다 줄 수 있습니다.

요약

볼링거 밴드 동적 수익 취득 및 동적 위치 추가 전략은 고전적인 트렌드 추적 전략이다. 볼링거 밴드를 기반으로, 역동적으로 위치를 조정함으로써 더 높은 트렌드 수익을 추구한다. 이 전략은 명확한 논리, 유연한 매개 변수 및 강력한 적응력을 가지고 있다. 그것은 깊이 있는 연구와 응용을 받을만한 양적 거래 전략이다. 그러나 동시에, 우리는 이 전략이 변동하는 시장에서 저조한 성능을 발휘하고 극단적인 상황과 블랙 스완 사건에 대처할 능력이 없다는 것을 알아야 한다. 이것은 우리가 실제 응용에서 매개 변수 최적화, 위험 통제 및 조합 전략에 집중하고, 다양한 시장 조건에서 전략의 효과를 정기적으로 테스트해야 한다. 이 전략의 내부 논리를 깊이 이해하고 지속적으로 최적화하고 개선함으로써, 이 전략이 양적 거래자와 장기 투자자들에게 안정적인 수익을 가져다주는 중요한 도구가 될 수 있다고 믿는다.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//  Bollinger Bands 1Bb 상하한 크로스 롱숏 실행

strategy(shorttitle="BB", title="Bollinger Bands", overlay=true )
 // bb
length = input.int(12, minval=1)
src = input(close, title="Source")
mult = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
add = input.float(0.98, step = 0.001)
// plot(upper - lower, "Basis", color=color.red, offset = offset)
var bool entryMade = false
var bool basisCrossed = false
var bool upperCrossed = false
var bool lowerCrossed = false
strategy.initial_capital = 50000
if close < lower and not entryMade
    strategy.entry("롱", strategy.long, qty = strategy.initial_capital/10000)
    entryMade := true
if ta.crossover(close, basis) and entryMade and not upperCrossed
    basisCrossed := true
if close > upper
    upperCrossed := true
if close < lower and entryMade and basisCrossed and not upperCrossed and close < strategy.position_avg_price*add
    strategy.entry("추가롱", strategy.long, strategy.initial_capital/10000)
    basisCrossed := false
if close > upper
    strategy.close("롱")
    strategy.close("추가롱")
    entryMade := false
    basisCrossed := false
    upperCrossed := false
///////////반대 포지션
if close > upper and not entryMade
    strategy.entry("s", strategy.short, qty = strategy.initial_capital/10000)
    entryMade := true
if ta.crossunder(close, basis) and entryMade and not lowerCrossed
    basisCrossed := true
if close < lower
    lowerCrossed := true
if close > upper and entryMade and basisCrossed and not lowerCrossed and close > strategy.position_avg_price*add
    strategy.entry("추가s", strategy.short, strategy.initial_capital/10000)
    basisCrossed := false
if close < lower
    strategy.close("s")
    strategy.close("추가s")
    entryMade := false
    basisCrossed := false
    upperCrossed := false


더 많은