
Die Dynamic Seesaw Trend-Tracking Strategie ist eine Trend-Tracking-Strategie, die auf den Regeln des Seesaw-Handels basiert. Sie verwendet Seesaw-Indikatoren, um Trends zu identifizieren, und kombiniert diese mit Dynamic-Indikatoren, um einen Teil des Noise-Handels zu filtern. Der Hauptvorteil dieser Strategie ist die Fähigkeit, starke Preistrends zu erfassen und so überzählige Gewinne zu erzielen.
Die Strategie nutzt das grundlegende Breakout-System des Seesaw-Indikators, um die Richtung des Trends zu bestimmen. Insbesondere wird ein bullish Signal ausgesprochen, wenn der Schlusskurs über dem Höchstwert der letzten 20 Tage liegt.
Die Strategie enthält auch einen Momentumfaktor, um einen Teil des Noise-Tradings zu filtern. Wenn die Preisschwankungen weniger als 5 ATR betragen, wird die Strategie nicht in den Handel eingegeben. Dies verhindert, dass ein kleiner Handel verursacht Verluste, weil zu viel Leerlauf gemacht wird.
Nach der Eröffnung der Position verwendet die Strategie die N-Werte des Seilprinzips, um den Ausgang zu durchbrechen. Das System setzt den Stop-Loss-Bereich auf der Grundlage der höchsten und niedrigsten Preise der letzten 20 Tage.
Der größte Vorteil dieser Strategie besteht darin, dass sie sowohl Trend-Tracking als auch Volumenmanagement kombiniert. Das Seagull-Handelssystem kann die mittelfristigen Preistrends präzise erfassen und verhindert, dass der Marktgeräusch gestört wird. Die Aufnahme des ATR-Volumenfilters kann die Anzahl der unnötigen Geschäfte weiter reduzieren und somit den Gewinnraum erheblich erhöhen.
Insbesondere hat diese Strategie folgende Vorteile:
Obwohl die Strategie viel Optimierungsmöglichkeiten bietet, gibt es einige potenzielle Risiken, die zu vermeiden sind:
Nach der oben erwähnten Risikoanalyse gibt es folgende Optimierungsmöglichkeiten für die Strategie:
Die Dynamic Seesaw Trend-Tracking Strategie ist insgesamt ein sehr praktisches Mittel- und Langstrecken-Trend-Tracking-Programm. Es kombiniert die Seesaw-Indikator-Trendentscheidung und die Shake-Filterung des ATR-Indikators, um starke Preistrends effektiv zu sperren. Darüber hinaus ist die Risikokontrolle und die Parameteroptimierung der Strategie sehr gut ausgerichtet, um die Rückziehung zu verringern. Die Wirksamkeit dieser Strategie kann weiter verbessert werden, wenn die Module Dynamische Positionsverwaltung, Reverse Mechanismen und Gewinnziele hinzugefügt werden.
/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Heiken Ashi BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)
/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)
testStopYear = input(2029, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)
testPeriod() => true
///////////// HA /////////////
haTicker = heikinashi(syminfo.tickerid)
haOpen = security(haTicker, "D", open)
haHigh = security(haTicker, "D", high)
haLow = security(haTicker, "D", low)
haClose = security(haTicker, "D", close)
///////////// Rate Of Change /////////////
source = close
roclength = input(30, minval=1)
pcntChange = input(7.0, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))
/////////////// Strategy ///////////////
long = haOpen < haClose and isMoving()
short = haOpen > haClose and isMoving()
last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)
last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])
last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])
in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal
last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])
sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)
since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1])
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1])
slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na
/////////////// Execution ///////////////
if testPeriod()
strategy.entry("L", strategy.long, when=long)
strategy.entry("S", strategy.short, when=short)
strategy.exit("L SL", "L", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
strategy.exit("S SL", "S", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)
/////////////// Plotting ///////////////
plotcandle(haOpen, haHigh, haLow, haClose, title='HA Candles', color = haOpen < haClose ? color.lime : color.red)
bgcolor(isMoving() ? long ? color.lime : short ? color.red : na : color.white, transp=70)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50)