동력 폭발 추적 전략

저자:차오장, 날짜: 2024-03-01 11:08:43
태그:

img

전반적인 설명

모멘텀 버스트 추적 전략은 가격 변화의 비율을 계산하여 가격 돌파를 판단하고 거래량으로 신호를 필터하여 트렌드 돌파 지점의 높은 확률 포착을 구현합니다. 구매 신호를 유발한 후이 전략은 수익을 잠금하고 과도한 인출을 피하기 위해 가격 추적 스톱 손실을 사용합니다.

전략 원칙

이 전략에서 입력 신호를 결정하는 데 사용되는 주요 지표는 다음과 같습니다.

  1. 가격 변화의 비율 (isFourPercentBull) - 가격이 실제로 돌파했는지 여부를 결정하기 위해 전날의 종료 가격에 대한 종료 가격의 비율 변화를 계산합니다.

  2. 폐쇄 가격과 가장 높은 가격의 비율 (HighCloseRatio) - 종료 가격과 가장 높은 가격의 비율을 계산하여 가격 돌파의 강도를 결정합니다.

  3. 거래량 (volume) - 유효한 돌파구를 보장하기 위해 거래량이 전날보다 커야 합니다.

  4. 200일 간편 이동 평균 (SMA) - 트렌드 방향을 결정하기 위해 종료 가격과 개시 가격이 200일 라인보다 높아야 합니다.

위의 여러 조건이 동시에 충족되면 구매 신호가 발송됩니다. 그 후 전략은 가격 추적 스톱 손실을 사용하여 손실을 적극적으로 중지하고 이익을 잠금합니다. 구체적으로 후속 스톱 손실 라인의 계산 공식은:

trailPrice = close * (100 - trailPercent) / 100

trailPercent는 설정 가능한 트레일 스톱 로스 비율입니다. 이것은 가격이 상승하는 동안 스톱 로스 라인이 수익을 잠금하기 위해 상승할 것을 보장합니다. 가격이 스톱 로스 라인에 다시 떨어지면 손실을 중지하기 위해 포지션을 닫습니다.

전략 의 장점

전형적인 탈출 전략으로서 다음과 같은 장점을 가지고 있습니다.

  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)

더 많은