Die Dual MACD Quantitative Trading Strategie ist eine quantitative Handelsstrategie, die mithilfe von MACD-Indikatoren mit zwei Zeiträumen implementiert wird. Sie geht lang, wenn der wöchentliche MACD-Indikator ein goldenes Kreuz bildet und schließt die Position, wenn der tägliche MACD-Indikator ein Todeskreuz bildet. Wenn die Position leer ist, kann eine neue Long-Position eröffnet werden, wenn der tägliche MACD-Indikator ein weiteres goldenes Kreuz bildet.
Bei der quantitativen Handelsstrategie mit doppeltem MACD wird eine Kombination von wöchentlichen und täglichen MACD-Indikatoren zur Bestimmung von Ein- und Ausstiegssignalen verwendet.
Zunächst wird ein Kaufsignal erzeugt, wenn die MACD-Linie des wöchentlichen MACD-Indikators über die Signallinie geht, und eine Long-Position wird eröffnet.
Wenn die Position leer ist, wenn die MACD-Linie des Tages-MACD-Indikators wieder über die Signallinie geht, wird eine neue Long-Position wiedereröffnet. Das heißt, das goldene Kreuz des Tages-MACD dient als Wiedereintrittsbedingung.
Beachten Sie, dass nur das Todeskreuz des täglichen MACD die Position schließt, aber die Wiedereröffnung nur zulässig ist, wenn die MACD-Linie des wöchentlichen MACD über der Signallinie innerhalb des
Die Dual MACD Quantitative Trading Strategie kombiniert eine doppelte Zeitrahmenanalyse, die falsche Signale effektiv filtern und die Qualität der Signale verbessern kann.
Der wöchentliche Zeitrahmen beurteilt die Haupttrendrichtung, wodurch ein widersprüchlicher Handel vermieden wird.
Der tägliche Zeitrahmen bestimmt den Ein- und Ausstieg, wodurch kurzfristige Handelsmöglichkeiten rechtzeitig erfasst werden können.
Der Mechanismus
Die MACD-Indikatorparameter sind einstellbar und können je nach verschiedenen Sorten und Marktbedingungen optimiert werden.
Integriert Take Profit, Stop Loss, Trailing Stop Loss Funktionen, um Risiken effektiv zu kontrollieren.
Die Dual MACD Quantitative Trading Strategie birgt auch einige Risiken, darunter vor allem:
Der MACD-Indikator neigt dazu, falsche Signale und häufige Crossovers zu erzeugen und muss von anderen Indikatoren bestätigt werden.
Der in einem wöchentlichen/monatlichen Zeitrahmen festgestellte Haupttrend kann sich umkehren und es ist notwendig, einen Trailing Stop Loss zu erzielen.
Die Parameter müssen kontinuierlich nach Sorten und Marktbedingungen optimiert und angepasst werden.
Kann sich nicht übermäßig auf die Ergebnisse des Backtests verlassen, die Live-Leistung kann sich von dem Backtest unterscheiden.
Entsprechende Lösungen
Kombination mit anderen Indikatoren zum Aufbau von Strategiesystemen mit Logikoptimierung.
Stellen Sie einen angemessenen Stop-Loss fest, um zu vermeiden, dass der maximal verträgliche Verlust überschritten wird.
Parameter kontinuierlich optimieren, um optimale Kombinationen zu finden.
Beginnen Sie den Live-Handel mit minimalem Kapital, um die Stabilität zu überprüfen.
Die Dual MACD Quantitative Trading Strategie kann weiter optimiert werden:
Einführung von Bollinger-Bändern, KDJ und anderen Indikatoren, um kombinierte Strategien mit mehreren Indikatoren zu entwickeln und die Signalkvalität zu verbessern.
Einbeziehung von Handelsvolumenindikatoren, um falsche Ausbrüche mit unzureichendem Volumen zu vermeiden.
Verwenden von Methoden des maschinellen Lernens, um automatisch Parameter zu optimieren und dynamische Anpassungen zu erreichen.
Weitere Risikoanpassungen der Strategie, wie z. B. die Einführung fortschrittlicher Stop-Loss-Methoden wie die Gewinn-Verlust-Ratio.
Strategie Fitness-Test und Optimierung, um Probleme mit der Überanpassung zu vermeiden.
Die Dual MACD Quantitative Trading Strategie integriert eine doppelte Zeitrahmenanalyse, um Haupt- und Nebentrends zu bestimmen und die Vorteile jedes Indikators voll auszuschöpfen. Es gibt immer noch ein großes Potenzial für die Optimierung der Strategie, und es wird erwartet, dass die Strategieleistung durch die Einführung anderer Indikatoren, automatische Parameteroptimierung durch maschinelles Lernen usw. weiter verbessert wird.
/*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)