Diese Strategie erzeugt den MACD-Indikator durch Berechnung der Differenz zwischen den schnellen und langsamen gleitenden Durchschnittslinien und beurteilt den Trend und die überkauften / überverkauften Bereiche der Finanzmärkte zusammen mit der Signallinie.
Die grundlegende Logik ist die Verwendung des MACD-Indikators, der aus der schnellen und langsamen MA-Differenz erzeugt wird, um die Markttrendrichtung zu bestimmen, und der Signallinie, um die Überkauf-/Überverkaufsniveaus zu beurteilen. Wenn MACD und Signallinie ein goldenes Kreuz bilden, ist es ein langes Signal, um lang zu gehen. Wenn ein totes Kreuz entsteht, ist es ein kurzes Signal, um kurz zu gehen. In der Zwischenzeit verwendet es die Beziehung des Preises
Die spezifische Berechnungsmethode lautet:
Wenn der MACD über die Signallinie überschreitet, während beide unter 0 liegen, ist dies ein goldenes Kreuz-Langsignal. Wenn der MACD unter die Signallinie überschreitet, während beide über 0 liegen, ist dies ein totes Kreuz-Kurzsignal. In der Zwischenzeit dauert es nur lange, wenn der Preis über 200-Tage-MA liegt, und kurz, wenn der Preis unter 200-Tage-MA liegt.
Kann die Risiken durch Verkürzung der MA-Perioden, Hinzufügung anderer Indikatoren und Hinzufügung von Stop-Loss senken.
1.An verschiedenen Zeitrahmen von 15m bis 1D getestet, optimale Ergebnisse bei 4H bei risikobereinigten Renditen
2. Optimieren Sie schnelle und langsame MA, damit MACD Zyklen erfasst, 7-21 gut für 15m
3.Hull MA für MACD zeigte gute Ergebnisse
4.Stopploss verbessert das Risikomanagement
Dies ist insgesamt eine sehr einfache und praktische Strategie, die durch duales Indikatorsystem und Preisfilterung hochwahrscheinliche Handelssignale generiert. Sie hat eine relativ hohe Gewinnspanne, verwendet die klassische MACD-Parameterkombination, um eine Überoptimierung zu vermeiden. Es gibt immer noch viel Raum für Optimierung, indem die MA-Parameter angepasst werden, andere Indikatoren und Stop-Loss-Mechanismen hinzugefügt werden, um die Leistung weiter zu verbessern. Insgesamt ist es eine typische quantitative Strategie, die auf Fundamentaldaten basiert.
/*backtest start: 2024-02-14 00:00:00 end: 2024-02-21 00:00:00 period: 1h basePeriod: 15m 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/ // © Hurmun //@version=4 strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100) fast_length = input(title="Fast Length", type=input.integer, defval=12) slow_length = input(title="Slow Length", type=input.integer, defval=26) src = input(title="Source", type=input.source, defval=close) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false) sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false) // Plot colors col_grow_above = #26A69A col_grow_below = #FFCDD2 col_fall_above = #B2DFDB col_fall_below = #EF5350 col_macd = #0094ff col_signal = #ff6a00 // Calculating fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length) slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length) hist = macd - signal movinga2 = input(title="movinga 2", type=input.integer, defval=200) movinga200 = sma(close, movinga2) plot(movinga200, "MA", color.orange) longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200 if (longCondition) strategy.entry("My Long Entry Id", strategy.long) shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200 if (shortCondition) strategy.entry("My Short Entry Id", strategy.short) shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100 longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100 stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100 longStoploss = strategy.position_avg_price * (1 - stoploss) longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) shortStoploss = strategy.position_avg_price * (1 + stoploss) if (strategy.position_size > 0 ) strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss) if (strategy.position_size < 0 ) strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)