웨이브 채널 전략 및 손절매


생성 날짜: 2023-11-23 15:49:12 마지막으로 수정됨: 2023-11-23 15:49:12
복사: 1 클릭수: 772
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

웨이브 채널 전략 및 손절매

개요

파도 전략 (波道策略, Bollinger Bands Strategy) 은 부린 라인 오비얼 밴드를 사용하여 트렌드 추적과 오버 바이 오버 세 신호를 수행하는 고전적인 전략이다. 이 버전은 원래의 전략에 기초하여 위험을 제어하기 위해 손실 장치를 추가했다.

전략은 부린띠의 상하 궤도의 금叉死叉을 통해 시장의 과매매 상황을 판단하고, 부린띠를 추적하여 트렌드 추적을 한다. 부린띠의 상하 궤도 사이의 지역은 현재 시장의 변동 범위를 반영한다. 부린띠는 중하, 상하, 하하로 구성되어 있으며, 중하는 n일 간소 이동 평균이며, 상하와 하하는 중하의 k배의 n일 표준 차이를 결정한다.

원칙

부린띠는 시장의 변동률과 흔들림의 폭을 나타내는 기술 지표이다. 가격이 부린띠 하향 궤도에 가까운 곳에 닿았을 때, 시장이 과매매 상태에 있음을 나타냅니다. 이 때 연속적으로 발생하는 구멍은 보충 될 가능성이 높으며, 회귀 특성에 따라 다단계 입장을 설정하는 것이 고려되어야 한다. 가격이 부린띠 상향 궤도에 가까운 곳에 닿았을 때, 시장이 과매 상태에 있을 수 있음을 나타냅니다. 이 때 가격이 역전하향의 상황이 발생할 수 있으며, 하향상황을 활용하기 위해 공백 입장을 설정하는 것이 고려되어야 한다.

이 전략은 브린띠의 오버 바이 오버 셀 신호를 통해 트렌드 추적 포지션을 구축하고, 위험을 제어하기 위해 손해 방지 장치를 추가한다.

가격이 부린 띠를 가로질러 올라갈 때, 시장이 오버셀 영역에서 합리적인 영역으로 들어간다는 것을 나타냅니다. 이 때 다단위 포지션을 구축할 수 있습니다. 가격이 부린 띠를 가로질러 내려갈 때, 시장이 오버빌 영역으로 들어간다는 것을 나타냅니다. 이 때 공석 포지션을 구축할 수 있습니다.

포지션을 세운 후, 고정된 비율의 손실 지점을 설정하여 위험을 제어한다. 손실이 설정된 중지 범위를 초과하면 손실이 현재 포지션을 종료하여 과도한 손실을 피한다.

장점

  1. 이 전략은 브린 벨트 지표와 결합하여 오버 바이 오버 셀 영역을 판단하여 가격과 하향 레일의 교차를 판단하여 낮은 가격과 높은 가격의 판매를 달성합니다.

  2. 트렌드 추적 거래에 부린 밴드 변동성 특성을 활용

  3. 단일 거래의 최대 손실을 효과적으로 제어할 수 있는 손실을 막는 장치를 추가합니다.

  4. 트렌드 추적과 스톱 손실을 결합하여 안정적인 수익을 얻을 수 있습니다.

위험과 최적화

  1. 브린띠의 파라미터 설정은 거래 신호 품질에 영향을 미칩니다. 중도 길이 n와 표준 차등 배수 k는 다른 시장에 따라 합리적으로 설정해야 하며, 그렇지 않으면 거래 신호 정확도에 영향을 미칩니다.

  2. 막부 설정이 너무 크거나 너무 작으면 수익 안정성에 영향을 미칩니다. 막부 범위는 단일 손실 위험을 증가시키고, 너무 작으면 막부 가동될 확률이 증가합니다. 다양한 품종에 따라 합리적인 막부 설정 비율이 필요합니다.

  3. 다른 지표와 결합하여 신호 필터링을 고려하여 거래 신호의 정확도를 향상시킬 수 있습니다.

  4. 다른 포지션 보유 시간 설정을 테스트할 수 있습니다. 예를 들어 시간 단위 또는 더 짧은 주기 브린 밴드를 더 높은 빈도 거래로 결합하여 자금 사용 효율을 높일 수 있습니다.

요약하다

이 전략은 브린带 판단 과잉 구매 과잉 판매 영역을 설정 포지션을 구축, 중지 손실을 증가 하는 위험을 제어 하는, 일반적인 트렌드 추적 타입 전략이다. 최적화 파라미터 설정을 통해, 더 정확한 거래 신호와 중지 수준의 설정을 결합하여 안정적인 수익을 얻을 수 있다.

전략 소스 코드
/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Bollinger Bands Strategy", overlay=false, shorttitle="BBS", pyramiding=0, currency=currency.USD, commission_type=strategy.commission.percent, commission_value=0.03, initial_capital=1000)
source = input(close, "Source")
length = input.int(20, minval=1)
mult = input.float(2.0, minval=0.001, maxval=50, step=0.001)
stopLossFactor = input.float(1, "Stop Loss Percent", maxval = 100, minval = 0, step=0.1)

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)
upper = basis + dev
lower = basis - dev

var float lastTradePrice = na
var float stopLossLow = na
var float stopLossHigh = na
var bool currentIsLong = na

var bool nextExpectedIsLong = true

var bool existedLong = false
var bool existedShort = false

buyEntry = ta.crossover(source, lower)
sellEntry = ta.crossunder(source, upper)

if (buyEntry and nextExpectedIsLong == true)
	strategy.entry("BBandLE", strategy.long, comment="BBandLE")
	nextExpectedIsLong := false
	if(nz(strategy.position_size[1], 0) < 0) // new position detected
	    lastTradePrice := close
	    stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
	    stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
else
    strategy.cancel("BBandLE")

if (sellEntry and nextExpectedIsLong == false)
	strategy.entry("BBandSE", strategy.short, comment="BBandSE")
	nextExpectedIsLong := true
	if(nz(strategy.position_size[1], 0) > 0) // new position detected
        lastTradePrice := close
        stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
        stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
else
    strategy.cancel("BBandSE")

strategy.close("BBandLE", close < stopLossLow)
strategy.close("BBandSE", close > stopLossHigh)

// if(nz(strategy.position_size[1], 0) < 0 and close > stopLossHigh)
//     strategy.entry("BBandLE", strategy.long, comment="BBandLE")
// 	lastTradePrice := close
// 	stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
// 	stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
// if(nz(strategy.position_size[1], 0) > 0 and close < stopLossLow)
//     strategy.exit("BBandSE", strategy.short, comment="BBandSE")
//     lastTradePrice := close
//     stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
//     stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))

plot(source, "close", color.blue)
plot(lower, "lower", color.red)
plot(upper, "upper", color.red)
plot(stopLossLow, "StopLossLow", color.black)
plot(stopLossHigh, "StopLossHigh", color.black)
plot(lastTradePrice, "lastTradePrice", color.green)
plotchar(strategy.position_size > 0, char="-", size=size.tiny, location=location.bottom, color=color.green)
plotchar(strategy.position_size < 0, char="-", size=size.tiny, location=location.bottom, color=color.red)