Die Strategie verwendet den Moving Average Indicator (MACD) zur Konstruktion von Overshooting-Signalen, um bei trendigen Bedingungen einen Umschwung zu erzielen und durch dynamische Auslagerungen zu profitieren.
Die Strategie basiert hauptsächlich auf MACD-Indikatoren, die Gold-Fork-Multi-Signal, Dead-Fork-Empty-Signal. Konkret wird Gold-Fork-Multi-Signal erzeugt, wenn die MACD-Leitung von unten nach oben durch die Signalleitung fährt; und Dead-Fork-Empty-Signal, wenn die MACD-Leitung von oben nach unten durch die Signalleitung fährt.
Wenn ein Goldfork-Signal kommt, machen Sie mehr, wenn der Schlusskurs über der EMA-Mittellinie liegt. Wenn ein Todesfork-Signal kommt, machen Sie nichts, wenn der Schlusskurs unter der EMA-Mittellinie liegt. So kann eine Umkehrung unter dem großen Trend gewährleistet werden.
Die Strategie nutzt die Stop-Loss- und die Stop-Loss-Position, um nach dem Eintritt einen dynamischen Stop-Stop-Loss durchzuführen. Insbesondere werden mehrere Stop-Loss-Positionen als Einstiegspreis festgelegt.(1 - maximaler Rückgang); Stop-Loss als Einstiegspreis eingestellt(1+TARGET_STOP_RATIO*Maximaler Kursverlust) ∙ die Umkehrung der Leerzeichen ∙ die dynamische Berechnung des maximalen Kursverlusts, der den Prozentsatz des Swing Low bis zum Schlusskurs in der Abwärtsspanne darstellt; der TARGET_STOP_RATIO-Default ist 2, der Verlustverhältnis ist 2 ∙
Der Vorteil einer solchen Ausgangslage besteht darin, dass die Verlustquote und die Stop-Loss-Position dynamisch an Marktschwankungen angepasst werden können. Schnelle Ausgangsstop-Verluste bei starken Schwankungen und die Verfolgung von Stopps bei kleinen Schwankungen.
Der MACD-Indikator kann verwendet werden, um ein Foliosignal zu erstellen, um zu bestimmen, wann der Preis umgekehrt ist.
In Kombination mit der EMA-Gleichlinie filtern Sie, wählen Sie den Aufwärtstrend und vermeiden Sie einen Abwärtstrend.
Dynamische Off-Platz-Kontrollsysteme, die in der Lage sind, die Gewinn- und Verlustquote und die Stop-Loss-Punkte in Echtzeit anzupassen, um nach hohen Gewinnen zu streben und gleichzeitig das Risiko zu kontrollieren.
Aufgrund der Marktschwankungen ist der schnelle Ausstieg von der Börse geeignet, um die Zeit für den Verkauf zu reduzieren und ist für beschäftigte Investoren geeignet.
Der MACD-Indikator erzeugt häufig falsche Signale in horizontal organisierten Märkten. Die Lösung besteht darin, die Gleichung als Filter zu verwenden, um einen Gegenhandel zu vermeiden.
In extremen, stark schwankenden Märkten kann ein DYNAMIC STOP zu lockere Stop-Losses verursachen, aber es funktioniert in den meisten Szenarien besser. In extremen Situationen kann eine feste Verlustquote in Betracht gezogen werden.
Der Gewinnraum ist begrenzt und es ist notwendig, häufig zu handeln, um Gewinne zu erzielen. Dies erfordert eine gewisse psychische Belastbarkeit und Zeit des Investors.
Anpassung der MACD-Parameter an die spezifischen Merkmale der Sorte zur Optimierung der Handelswirkung.
Verschiedene Moving Averages werden als Trendindikatoren getestet, um bessere Filter zu finden.
Testen des TARGET_STOP_RATIO, der Methode zur Berechnung des maximalen Rückgangs und der Optimierung der Stop-Loss-Strategie.
Zusätzliche Kriterien wie Veränderungen des Handelsvolumens, Schwankungen usw. werden hinzugefügt, um die Signalqualität zu verbessern.
Versuchen Sie, mehr Merkmale durch maschinelle Lernalgorithmen zu verfeinern und dynamische Multifaktormodelle zu erstellen, um intelligenter Stop-Loss zu erreichen.
Die Strategie insgesamt hat eine starke Praxis. Mit MACD als Kern-Trading-Signal, die Zugabe von Trendentscheidung und dynamischen Ausweichungskontrolle zwei Hilfsmodule, können die Handelswirksamkeit der MACD selbst deutlich verbessern. Stop-Loss-Strategie ist ein Schwerpunkt der Strategie Optimierung, die in dieser Hinsicht eine Menge von Innovationen, die weitere Forschung und Anwendung wert.
/*backtest
start: 2022-12-05 00:00:00
end: 2023-12-11 00:00: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/
// © maxencetajet
//@version=5
strategy("MACD Strategy", overlay=true, initial_capital=1000, slippage=25)
src = input(title="Source", defval=close)
target_stop_ratio = input.float(title='Risk/Reward', defval=2, minval=0.5, maxval=100)
risk = input.float(2, title="Risk per Trade %")
riskt = risk / 100 + 1
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
group="Backtest Time Period")
backtestStartDate = input(timestamp("5 June 2022"),
title="Start Date", group="Backtest Time Period",
tooltip="This start date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
backtestEndDate = input(timestamp("5 July 2022"),
title="End Date", group="Backtest Time Period",
tooltip="This end date is in the time zone of the exchange " +
"where the chart's instrument trades. It doesn't use the time " +
"zone of the chart or of your computer.")
inTradeWindow = true
emaV = input.int(200, title="Length", group="EMA")
swingHighV = input.int(7, title="Swing High", group="number of past candles")
swingLowV = input.int(7, title="Swing Low", group="number of past candles")
ema = ta.ema(src, emaV)
fast_length = input(title="Fast Length", defval=12, group="MACD")
slow_length = input(title="Slow Length", defval=26, group="MACD")
signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9, group="MACD")
sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD")
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD")
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
longcondition = close > ema and ta.crossover(macd, signal) and macd < 0
shortcondition = close < ema and ta.crossunder(macd, signal) and macd > 0
float risk_long = na
float risk_short = na
float stopLoss = na
float takeProfit = na
float entry_price = na
risk_long := risk_long[1]
risk_short := risk_short[1]
swingHigh = ta.highest(high, swingHighV)
swingLow = ta.lowest(low, swingLowV)
lotB = (strategy.equity*riskt-strategy.equity)/(close - swingLow)
lotS = (strategy.equity*riskt-strategy.equity)/(swingHigh - close)
if strategy.position_size == 0 and longcondition and inTradeWindow
risk_long := (close - swingLow) / close
strategy.entry("long", strategy.long, qty=lotB)
if strategy.position_size == 0 and shortcondition and inTradeWindow
risk_short := (swingHigh - close) / close
strategy.entry("short", strategy.short, qty=lotS)
if strategy.position_size > 0
stopLoss := strategy.position_avg_price * (1 - risk_long)
takeProfit := strategy.position_avg_price * (1 + target_stop_ratio * risk_long)
entry_price := strategy.position_avg_price
strategy.exit("long exit", "long", stop = stopLoss, limit = takeProfit)
if strategy.position_size < 0
stopLoss := strategy.position_avg_price * (1 + risk_short)
takeProfit := strategy.position_avg_price * (1 - target_stop_ratio * risk_short)
entry_price := strategy.position_avg_price
strategy.exit("short exit", "short", stop = stopLoss, limit = takeProfit)
plot(ema, color=color.white, linewidth=2, title="EMA")
p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price')
p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss')
p_tp = plot(takeProfit, color=color.new(color.green, 0), linewidth=2, style=plot.style_linebr, title='takeProfit')
fill(p_sl, p_ep, color.new(color.red, transp=85))
fill(p_tp, p_ep, color.new(color.green, transp=85))