볼린저 밴드 다이나믹 테이크 프로핏 및 다이나믹 추가 포지션 전략


생성 날짜: 2024-03-22 15:49:28 마지막으로 수정됨: 2024-03-22 15:49:28
복사: 0 클릭수: 653
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

볼린저 밴드 다이나믹 테이크 프로핏 및 다이나믹 추가 포지션 전략

전략 개요

이 전략은 부린 띠 지표에 기반하여, 가격이 부린 띠에 닿을 때 하향으로 포지션을 열고, 동적 정지 및 동적 포지션 논리를 설정한다. 가격이 하향에서 반발하고 부린 띠의 중도 궤도를 돌파할 때, 전략은 상승 추세가 형성되고, 이 때 전략은 가격이 중도 궤도로 돌아가는 일정 비율에 따라 포지션을 강화한다. 가격이 마침내 부린 띠를 돌파 할 때, 전략 평지 포지션은 이익을 얻습니다. 하향 추세에서 전략은 반대로 작동 논리를 취한다. 부린 띠의 동적 정지 및 동적 포지션을 통해, 전략은 추세에서 더 많은 이익을 얻을 수 있습니다.

전략 원칙

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

  1. 브린 밴드 상궤도, 중궤도 및 하궤도를 계산한다. 상궤도 및 하궤도의 계산 공식은 중궤도 더하 표준차이의 N배이며, N은 사용자 정의할 수 있다.

  2. 종결 가격이 부린带下轨 (부린带下轨) 을 넘어선 후에도 포지션이 열리지 않은 경우, 전략은 더 많은 포지션을 열고, 종결 가격이 부린带上轨 (부린带上轨) 을 넘어선 후에도 포지션이 열리지 않은 경우, 전략은 공백 포지션을 열는다. 여기서 포지션 개설 논리는 전통적인 부린带突破 시스템과 비슷하다.

  3. 상장을 개시한 후, 상장 가격이 부린带 중궤도를 상향으로 돌파하면, 상승 추세가 형성되었다고 간주하고, 변수 basisCrossed를 true로 표시한다. 상장 후 상장 가격이 부린带 중궤도를 상향으로 돌파하면, basisCrossed를 true로 표시한다.

  4. 다면 상황에서는, 만약 종결 가격이 하락하고 basisCrossed가 true이고, 현재 가격이 원래 개장 가격보다 2% 이상의 하락을 보인다면, 이 때 전략은 포지션, 그리고 basisCrossed를 다시 false로 설정한다. 공백 상태는 반대이다. 여기서 포지션 논리는 전략이 트렌드 철회할 때 낮은 포지션을 포지션, 수익 공간을 증가시킬 수 있다.

  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값을 높이고, 흔들리는 시장에서 N값을 줄일 수 있다. 이것은 기계 학습과 같은 기술을 이용하여, 역사적인 데이터에 대한 훈련을 통해 최적의 변수를 찾기 위해 필요하다.

  4. 조합 전략: 이 전략을 MACD, RSI 등과 같은 다른 클래식 전략과 결합하여 조합 전략을 형성하여 시스템의 안정성과 수익성을 향상시킬 수 있다.

  5. 중지 손실 논리를 추가: 현재 이 전략은 명확한 중지 손실 논리가 없으며, 이동 중지 또는 고정 비율 중지 등의 장치를 추가하여 단일 거래의 최대 손실을 제어 할 수 있습니다.

  6. 포지션 관리 최적화: 포지션을 늘리거나 줄이는 과정에서, Kelly 공식, 최적 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