
Die Dual MACD Quantity Trading Strategie ist eine Quantity Trading Strategie, die sich aus zwei Zeitfenstern der MACD-Indikatoren realisiert. Die Strategie macht einen Übertritt bei Goldfork bei der MACD-Indikator-Bildung und einen Ausfall bei der MACD-Indikator-Bildung bei der MACD-Indikator-Tagung. Sie kann einen Übertritt bei der MACD-Indikator-Bildung wiederholen, wenn die Position frei ist.
Die binäre MACD-Quantitative-Trading-Strategie nutzt eine Kombination aus dem wöchentlichen MACD-Indikator und dem täglichen MACD-Indikator, um Ein- und Ausstiegssignale zu beurteilen.
Zuerst wird ein Kaufsignal erzeugt, wenn der MACD-Indikator der Woche die MACD-Linie überschreitet, und dann wird ein Verkaufssignal erzeugt, wenn der MACD-Indikator des Tages die MACD-Linie überschreitet.
Wenn die Position leer ist, wird die Position neu eröffnet, wenn die MACD-Linie des MACD-Indikators erneut die Signallinie durchquert. Das heißt, die Goldfork des MACD-Indikators wird zur Bedingung für die erneute Eröffnung der Position.
Es ist zu beachten, dass die Dead Fork des Tages-MACD-Indikators die Position auslöst, aber ein erneutes Positionseröffnen muss innerhalb des Umlauf-Handel-Fensters erfolgen, in dem der MACD-Indikator der Woche über der Signallinie liegt.
Die doppelte MACD-Quantitative-Trading-Strategie kombiniert die doppelte Zeitrahmenanalyse, um falsche Signale effizient zu filtern und die Qualität der Signale zu verbessern. Insbesondere haben sie folgende Vorteile:
Der wöchentliche Zeitrahmen hilft dabei, die wichtigsten Trends zu beurteilen und einen Abwärtstrend zu vermeiden.
Der Tageszeitrahmen beurteilt die Ein- und Ausstiegszeiten und kann kurzfristige Handelsmöglichkeiten rechtzeitig erfassen.
Der “Fenster-Sperrmechanismus” verhindert, dass Positionen aufgrund von kurzfristigen Anpassungen zu häufig aufgelöst werden.
Die MACD-Indikatorparameter sind anpassbar und können für verschiedene Sorten und Marktbedingungen optimiert werden.
Mit integrierten Stopp-, Stop- und Mobile Stop-Funktionen kann das Risiko effektiv kontrolliert werden.
Bei einer binären MACD-Quantitative-Trading-Strategie bestehen auch Risiken, die sich aus folgenden Faktoren ergeben:
Die MACD-Indikatoren sind anfällig für falsche Signale und häufige Kreuzungen, die in Kombination mit anderen Indikatoren bestätigt werden müssen.
Die wichtigsten Trends in der Zeitrechnung der Wochenmonate könnten sich umkehren und müssen zeitnah gestoppt werden.
Die Parameter müssen ständig optimiert und angepasst werden, je nach Sorte und Marktumfeld.
Es ist nicht möglich, sich zu sehr auf die Rückmessung zu verlassen, da die Festplatte von der Rückmessung abweichen kann.
Entsprechende Lösungen:
In Kombination mit anderen Kennzahlen wird ein logisch optimiertes Strategiesystem erstellt.
Setzen Sie eine angemessene Stop-Loss-Marge, um zu verhindern, dass die maximal erträglichen Verluste überschritten werden.
Die Parameter werden kontinuierlich optimiert, um die beste Parameterkombination zu finden.
Das ist eine sehr wichtige Strategie, um die Stabilität der Strategie zu überprüfen.
Es gibt noch Raum für weitere Optimierungen bei der Dual MACD Quantity Trading Strategie:
Die Einführung von anderen Kennzahlen wie Brinline, KDJ und anderen kann dazu beitragen, eine Strategie für die Kombination von mehreren Kennzahlen zu entwickeln und die Signalqualität zu verbessern.
Der Markt ist in der Lage, mit dem Volumenindex zu kombinieren, um einen falschen Durchbruch zu vermeiden, bei dem die Preise steigen, aber die Menge nicht reicht.
Die Parameter können automatisch optimiert werden, um eine dynamische Anpassung der Parameter zu ermöglichen.
Weitere Risikobereinigungen können für die Strategie vorgenommen werden, z. B. durch die Einbeziehung einer erweiterten Stop-Loss-Methode, wie z. B. der Ertrags- und Verlustquote.
Strategieübereinstimmungsprüfungen und Optimierungsanpassungen, um Überübereinstimmungsprobleme zu vermeiden.
Dual MACD Quantitative Trading Strategien integrieren die Analyse der beiden Zeiträume, um die Haupt- und Nebentrends zu beurteilen, um die Vorteile der jeweiligen Indikatoren zu nutzen. Es gibt noch viel Spielraum für die Optimierung der Strategie, um die Strategie durch die Einführung anderer Indikatoren und die Optimierung von Parametern mit Hilfe von Maschinellem Lernen zu verbessern. Die Validierung in der Praxis ist ein notwendiger Schritt und eine wichtige Grundlage für die weitere Verbesserung der Strategie.
/*backtest
start: 2023-01-29 00:00:00
end: 2024-01-11 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/
// © maxits
// Long Position: Weekly Macd line crosses above Signal line
// [Trading Window Macd Line > Signal Line] (Weekly)
// Close Position: Daily Macd Line crosses above Daily Signal line.
// Re Entry Condition: Macd line crosses above Signal line only if [Trading Window MacdLine > Sgnal Line] (Weekly)
//@version=4
strategy("Dual MACD Strategy",
shorttitle="Dual Macd Tester",
overlay=false,
initial_capital=1000,
default_qty_value=20,
default_qty_type=strategy.percent_of_equity,
commission_value=0.1,
pyramiding=0)
// Define user inputs
i_time = input(defval = timestamp("01 May 2018 13:30 +0000"), title = "Start Time", type = input.time) // Starting time for Backtesting
f_time = input(defval = timestamp("9 Sep 2021 13:30 +0000"), title = "Finish Time", type = input.time) // Finishing time for Backtesting
sep1 = input(false, title="------ Profit & Loss ------")
enable_TP = input(true, title="Enable Just a Profit Level?")
enable_SL = input(false, title="Enable Just a S.Loss Level?")
enable_TS = input(true, title=" Enable Only Trailing Stop")
long_TP_Input = input(30.0, title='Take Profit %', type=input.float, minval=0)/100
long_SL_Input = input(1.0, title='Stop Loss %', type=input.float, minval=0)/100
long_TS_Input = input(5.0, title='Trailing Stop %', type=input.float, minval=0)/100
cl_low_Input = input(low, title="Trailing Stop Source")
long_TP = strategy.position_avg_price * (1 + long_TP_Input)
long_SL = strategy.position_avg_price * (1 - long_SL_Input)
long_TS = cl_low_Input * (1 - long_TS_Input)
sep2 = input(false, title="------ Macd Properties ------")
d_res = input(title="Short Term TimeFrame", type=input.resolution, defval="D") // Daily Time Frame
w_res = input(title="Long Term TimeFrame", type=input.resolution, defval="W") // Weekly Time Frame
src = input(close, title="Source") // Indicator Price Source
fast_len = input(title="Fast Length", type=input.integer, defval=12) // Fast MA Length
slow_len = input(title="Slow Length", type=input.integer, defval=26) // Slow MA Length
sign_len = input(title="Sign Length", type=input.integer, defval=9) // Sign MA Length
d_w = input(title="Daily or Weekly?", type=input.bool, defval=true) // Plot Daily or Weekly MACD
// Color Plot for Macd
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
// BG Color
bg_color = color.rgb(127, 232, 34, 75)
// Daily Macd
[d_macdLine, d_singleLine, d_histLine] = security(syminfo.tickerid, d_res, macd(src, fast_len, slow_len, sign_len)) // Funcion Security para poder usar correcta resolución
plot(d_w ? d_macdLine : na, color=color.blue)
plot(d_w ? d_singleLine : na, color=color.orange)
plot(d_w ? d_histLine : na, style=plot.style_columns,
color=(d_histLine>=0 ? (d_histLine[1] < d_histLine ? col_grow_above : col_fall_above) :
(d_histLine[1] < d_histLine ? col_grow_below : col_fall_below)))
// Weekly Macd
[w_macdLine, w_singleLine, w_histLine] = security(syminfo.tickerid, w_res, macd(src, fast_len, slow_len, sign_len)) // Funcion Security para poder usar correcta resolución
plot(d_w ? na : w_macdLine, color=color.blue)
plot(d_w ? na : w_singleLine, color=color.orange)
plot(d_w ? na : w_histLine, style=plot.style_columns,
color=(w_histLine>=0 ? (w_histLine[1] < w_histLine ? col_grow_above : col_fall_above) :
(w_histLine[1] < w_histLine ? col_grow_below : col_fall_below)))
///////////////////////////////// Entry Conditions
inTrade = strategy.position_size != 0 // Posición abierta
notInTrade = strategy.position_size == 0 // Posición Cerrada
start_time = true
trading_window = w_macdLine > w_singleLine // Weekly Macd Signal enables a trading window
bgcolor(trading_window ? bg_color : na)
buy_cond = crossover (w_macdLine, w_singleLine)
sell_cond = crossunder(d_macdLine, d_singleLine)
re_entry_cond = crossover (d_macdLine, d_singleLine) and trading_window
// Entry Exit Conditions
trailing_stop = 0.0 // Code for calculating Long Positions Trailing Stop Loss
trailing_stop := if (strategy.position_size != 0)
stopValue = long_TS
max(trailing_stop[1], stopValue)
else
0
if (buy_cond and notInTrade and start_time)
strategy.entry(id="First Entry", long=strategy.long, comment="First Long")
if (sell_cond and inTrade)
strategy.close(id="First Entry", comment="Close First Long")
if (re_entry_cond and notInTrade and start_time)
strategy.entry(id="Further Entry", long=strategy.long, comment="Further Entry")
if (sell_cond and inTrade)
strategy.close(id="Further Entry", comment="Close First Long")
if enable_TP
if (enable_TS and not enable_SL)
strategy.exit("Long TP & TS FiEn", "First Entry", limit = long_TP, stop = trailing_stop)
strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP, stop = trailing_stop)
else
if (enable_SL and not enable_TS)
strategy.exit("Long TP & TS FiEn", "First Entry", limit = long_TP, stop = long_SL)
strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP, stop = long_SL)
else
strategy.exit("Long TP & TS FiEn", "First Entry", limit = long_TP)
strategy.exit("Long TP & TS FuEn", "Further Entry", limit = long_TP)
else
if not enable_TP
if (enable_TS and not enable_SL)
strategy.exit("Long TP & TS FiEn", "First Entry", stop = trailing_stop)
strategy.exit("Long TP & TS FuEn", "Further Entry", stop = trailing_stop)
else
if (enable_SL and not enable_TS)
strategy.exit("Long TP & TS FiEn", "First Entry", stop = long_SL)
strategy.exit("Long TP & TS FuEn", "Further Entry", stop = long_SL)
plot(enable_TP ? long_TP : na, title="TP Level", color=color.green, style=plot.style_linebr, linewidth=2)
plot(enable_SL ? long_SL : na, title="SL Level", color=color.red, style=plot.style_linebr, linewidth=2)
plot(enable_TS and trailing_stop ? trailing_stop : na, title="TS Level", color=color.red, style=plot.style_linebr, linewidth=2)