모멘텀 버스트 추적 전략 기반


생성 날짜: 2024-03-01 11:08:43 마지막으로 수정됨: 2024-03-01 11:08:43
복사: 0 클릭수: 826
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

모멘텀 버스트 추적 전략 기반

개요

동력 폭발 추적 전략은 가격 변화의 비율을 계산하여 가격 돌파구를 판단하고, 트래픽 필터링 신호를 합성하여, 높은 확률로 트렌드를 잡는 돌파구를 구현한다. 구매 신호를 유발한 후, 이 전략은 가격 추적 스톱로스를 사용하여 이익을 잠금하여 과도한 회수를 피한다.

전략 원칙

이 전략은 주로 다음과 같은 지표들을 통해 구매 시기를 판단합니다.

  1. 가격 변화 퍼센트 (isFourPercentBull) - 가격의 유효한 돌파를 판단하기 위해 종결 가격의 전날 종결 가격에 대한 변화 퍼센트를 계산합니다.

  2. 닫기 가격과 최고 가격의 비율 (HighCloseRatio) - 닫기 가격과 최고 가격의 비율을 계산하여 가격의 돌파구를 판단합니다.

  3. 거래량 (volume) - 거래량이 전날보다 더 많을 것을 요구하여 효과적인 브레이크를 보장합니다.

  4. 200일 간소 이동 평균 ((SMA) - 200일 라인 상의 종결 가격과 개시 가격을 요구하며, 트렌드 방향을 판단한다.

위의 여러 조건이 동시에 충족되면, 구매 신호를 발송한다. 그 후, 이 전략은 가격 추적 스톱 로스를 사용하여 적극적으로 스톱 로스를 사용하고 수익을 잠금합니다. 구체적으로, 스톱 로스를 추적하는 계산 공식은 다음과 같습니다.

trailPrice = close * (100 - trailPercent) / 100

그 중 trailPercent은 설정 가능한 스톱 트래킹 비율이다. 이것은 Ensure의 경우, 가격이 상승하면, 스톱 라인도 상승을 따라, 이익을 잠금합니다. 가격이 스톱 라인까지 돌아 왔을 때, 평점 상장 스톱.

전략적 이점

이것은 전형적인 돌파구 전략으로 다음과 같은 장점이 있습니다.

  1. 여러 조건의 필터링을 통해 돌파구의 유효성을 보장하고 가짜 돌파구를 방지합니다.
  2. 가격 추적 스톱로스는 손실을 적극적으로 차단하고 수익을 잠금화하여 회수를 최대한 피할 수 있습니다.
  3. 전략 논리는 간단하고 명확하며, 이해하기 쉽고 최적화하기 쉽습니다.

전략적 위험

이 전략에는 몇 가지 위험도 있습니다.

  1. “이번 전쟁은 여전히 실패할 가능성이 있고, 손실을 완전히 피할 수는 없다.
  2. 너무 급진적인 추적 중단은 빈번한 중단으로 이어질 수 있습니다.
  3. 잘못된 매개 변수 설정으로 인해 거래 빈도가 너무 높거나 신호가 누락될 수 있다.

위험과 대응하는 해결책은 다음과 같습니다.

  1. 이 경우, 모든 변수들을 최적화하고, 스톱패스를 낮추고, 충분한 공간을 확보할 수 있습니다.
  2. 명확한 트렌드를 놓치지 않도록 적절한 폭파 조건의 완화;
  3. 다양한 품종을 테스트하고 전략의 안정성을 평가한다.

최적화 방향

이 전략의 높은 스톱 로즈 주파수를 고려할 때, 다음과 같은 방향에서 더욱 최적화할 수 있습니다:

  1. 다른 스톱로스 트래킹 방법들, 예를 들어 평균 트래킹, ATR, 변동률 트래킹을 시도하세요.
  2. 기계학습 알고리즘을 추가하여 역사적인 데이터 훈련에 따라 더 나은 효과를 판단하는 돌파변수 조합;
  3. 거래량에 기반한 브레이크에 대한 보조 판단 조건을 추가하여 브레이크 효과를 보장합니다.
  4. 다양한 품종의 파라미터 설정 차이를 평가하여 가장 적합한 품종을 찾습니다.

요약하다

동력폭발 추적 전략은 전반적으로 매우 실용적인 트렌드 추적 전략이다. 그것은 돌파 전략에서 효율적으로 중지 및 중지 할 수 없는 문제를 해결하고, 트렌드를 포착하면서도 위험을 잘 제어할 수 있다. 매개 변수 최적화 및 기계 학습과 같은 수단을 도입함으로써 이 전략의 효과는 추가로 향상될 여지가 있으며, 깊이 있는 연구와 응용에 가치가 있다.

전략 소스 코드
/*backtest
start: 2023-03-01 00:00:00
end: 2023-12-10 05:20: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/
// © doks23

//@version=5
strategy(title = "SD:Momentum Burst", overlay=true, initial_capital=1000,commission_value = 0,slippage = 0,process_orders_on_close=true)

//Check Vol
checkVol = input.bool(defval=false,title="IncludeAvgVolume?")
volSMAlength = input(50, title="VolumeLength")
volumeSma = ta.sma(volume, volSMAlength)
highvolume = volume >= volumeSma
volumeCond=checkVol?highvolume:true

// Profit and Loss
trailPercent    = input.float(title="Trail%", defval=3, step=0.1)

//longCondition
PercentThreshold=input.float(3.8,'BreakoutPercent', step=0.1)
MaxThreshold=input.float(10,'Max Breakout', step=0.1)
HighCloseRatio=input.float(70,'Close to High Ratio', step=1)
float candleCloseBull = ((close[0] - open[0]) / (high[0] - open[0]) * 100)
float isFourPercentBull = (((close[0] - close[1]) / close[1]) * 100)
LongCond=volume > volume[1] and isFourPercentBull > PercentThreshold and candleCloseBull > HighCloseRatio and isFourPercentBull<MaxThreshold
barcolor(color=(LongCond?color.yellow: na),title='BObar')
longCondition= LongCond and volumeCond and close>ta.sma(close,200) and open>ta.sma(close,200)

//Input Strategy
DateCheck=  input.bool(title = 'Custom Date Range?', defval=true,group = 'Strategy')
FromDate=   input(defval = timestamp("1 Jan 2019 00:00"),group = 'Strategy')
ToDate      =input(defval = timestamp("31 Dec 2023 00:00"),group = 'Strategy')
PostionSize =input.string('Contract','Select Position Size',options = ['Percent of Equity','Contract'],group = 'Strategy')
ContractQty =input.int(1,'No of Contract',group = 'Strategy')

//Backtesting Date Range
TimeWindow=true
// Number of Contract
var int trade_qty=na
if(PostionSize=='Contract')
    trade_qty:=ContractQty
else
    trade_qty:= (strategy.equity>strategy.initial_capital)?math.floor(strategy.equity/strategy.initial_capital):ContractQty


//Position Buy
BuyTriggerPrice = ta.valuewhen(longCondition,high,0)
//Trailing price
var float trailPrice    = na
float percentMulti = (100 - trailPercent) / 100
longCondition2=longCondition and TimeWindow
if longCondition2
    strategy.entry("Long", strategy.long,qty=trade_qty,stop = BuyTriggerPrice)
    trailPrice := close*percentMulti
if strategy.position_size>0
    trailPrice := math.max(close*percentMulti,trailPrice[1])
    if low <= trailPrice
        strategy.exit('Exit','Long',stop = trailPrice)
        if strategy.position_size==0     
            trailPrice:=na
// Plot Strategy
var float trail_long_SL=na
if strategy.position_size>0
    trail_long_SL:=trailPrice
else
    trail_long_SL:=na
//Strategy Plot
PlotMA=input.bool(title="Plot MA?", defval=false)
plot(PlotMA?ta.sma(close,10):na,color = color.red,title = '10MA')
plot(PlotMA?ta.sma(close,21):na,color = color.white,title = '21MA')
plot(PlotMA?ta.sma(close,200):na,color = color.orange,title = '200MA')
// plot(trail_long_SL,color = color.gray,style = plot.style_steplinebr,linewidth = 1)