
Die Dynamik-Explosions-Tracking-Strategie ermittelt die Preis-Breakthroughs durch Berechnung des Prozentsatzes der Preisänderung und kombiniert die Traffic-Filter-Signal, um einen Breakout-Punkt zu erzielen, der eine hohe Wahrscheinlichkeit hat, einen Trend zu erfassen. Wenn ein Kaufsignal ausgelöst wird, verwendet die Strategie einen Preis-Stopp-Tracking-Methode, um die Gewinne zu sperren und zu verhindern, dass ein zu großer Rückzug erfolgt.
Die Strategie basiert auf folgenden Kennzahlen, um zu beurteilen, wann ein Kauf möglich ist:
Preisänderungsprozent ((isFourPercentBull) - berechnet die Veränderung des Schlusskurses in Prozent zum Schlusskurs des Vortages, um zu beurteilen, ob der Preis effektiv gebrochen wurde;
HighCloseRatio - Berechnung des Verhältnisses zwischen dem Schlusspreis und dem Höchstpreis, um die Breakout-Stärke zu bestimmen;
Volumen - erfordert ein größeres Handelsvolumen als am Vortag, um einen effektiven Durchbruch zu gewährleisten;
200-Tage-SMA (Simple Moving Average) - erfordert, dass der Schlusskurs und der Eröffnungskurs über der 200-Tage-Linie liegen, um die Richtung des Trends zu bestimmen.
Wenn mehrere der oben genannten Bedingungen gleichzeitig erfüllt sind, wird ein Kaufsignal ausgesendet. Danach verwendet die Strategie einen Preisverfolgungsstillstand, um einen aktiven Stop-Loss und eine Gewinnauslösung zu erzeugen. Die Berechnungsformel für die Verfolgung einer Stop-Line lautet:
trailPrice = close * (100 - trailPercent) / 100
Der TrailPercent ist ein konfigurierbarer Prozentsatz für die Verfolgung von Verlusten. Das bedeutet, dass die Stop-Line, sobald die Preise steigen, ebenfalls steigt, wodurch die Gewinne gesperrt werden.
Es ist eine typische Durchbruchstrategie mit folgenden Vorteilen:
Die Strategie birgt auch einige Risiken:
Die Lösungen für die Risiken sind:
In Anbetracht der hohen Stop-Loss-Frequenz dieser Strategie können folgende Bereiche weiter optimiert werden:
Die Dynamic Burst Tracking Strategie ist insgesamt eine sehr praktische Trend-Tracking-Strategie. Sie löst die Probleme, bei denen die Breakthrough-Strategie keine effektiven Stopps und Stopps aufweist, und kann gleichzeitig die Risiken gut kontrollieren, während sie die Trends erfasst. Die Wirksamkeit der Strategie kann durch die Einführung von Mitteln wie Parameteroptimierung und Maschinelles Lernen weiter verbessert werden.
/*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)