
동력 폭발 추적 전략은 가격 변화의 비율을 계산하여 가격 돌파구를 판단하고, 트래픽 필터링 신호를 합성하여, 높은 확률로 트렌드를 잡는 돌파구를 구현한다. 구매 신호를 유발한 후, 이 전략은 가격 추적 스톱로스를 사용하여 이익을 잠금하여 과도한 회수를 피한다.
이 전략은 주로 다음과 같은 지표들을 통해 구매 시기를 판단합니다.
가격 변화 퍼센트 (isFourPercentBull) - 가격의 유효한 돌파를 판단하기 위해 종결 가격의 전날 종결 가격에 대한 변화 퍼센트를 계산합니다.
닫기 가격과 최고 가격의 비율 (HighCloseRatio) - 닫기 가격과 최고 가격의 비율을 계산하여 가격의 돌파구를 판단합니다.
거래량 (volume) - 거래량이 전날보다 더 많을 것을 요구하여 효과적인 브레이크를 보장합니다.
200일 간소 이동 평균 ((SMA) - 200일 라인 상의 종결 가격과 개시 가격을 요구하며, 트렌드 방향을 판단한다.
위의 여러 조건이 동시에 충족되면, 구매 신호를 발송한다. 그 후, 이 전략은 가격 추적 스톱 로스를 사용하여 적극적으로 스톱 로스를 사용하고 수익을 잠금합니다. 구체적으로, 스톱 로스를 추적하는 계산 공식은 다음과 같습니다.
trailPrice = close * (100 - trailPercent) / 100
그 중 trailPercent은 설정 가능한 스톱 트래킹 비율이다. 이것은 Ensure의 경우, 가격이 상승하면, 스톱 라인도 상승을 따라, 이익을 잠금합니다. 가격이 스톱 라인까지 돌아 왔을 때, 평점 상장 스톱.
이것은 전형적인 돌파구 전략으로 다음과 같은 장점이 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
위험과 대응하는 해결책은 다음과 같습니다.
이 전략의 높은 스톱 로즈 주파수를 고려할 때, 다음과 같은 방향에서 더욱 최적화할 수 있습니다:
동력폭발 추적 전략은 전반적으로 매우 실용적인 트렌드 추적 전략이다. 그것은 돌파 전략에서 효율적으로 중지 및 중지 할 수 없는 문제를 해결하고, 트렌드를 포착하면서도 위험을 잘 제어할 수 있다. 매개 변수 최적화 및 기계 학습과 같은 수단을 도입함으로써 이 전략의 효과는 추가로 향상될 여지가 있으며, 깊이 있는 연구와 응용에 가치가 있다.
/*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)