Kombination von Momentum und gleitendem Durchschnitt Langstrategie

Schriftsteller:ChaoZhang
Tags:

img

Übersicht

Diese Strategie kombiniert den MACD-Momentumsindikator und den DMI-Trendindikator, um bei Erfüllung der Bedingungen lang zu gehen.

Grundsätze

  • Wenn der MACD positiv ist (MACD-Linie über der Signallinie), zeigt dies eine Stärkung der Aufwärtsdynamik auf dem Markt an.
  • Wenn DI+ höher ist als DI- in DMI, zeigt dies an, dass der Markt in einem Aufwärtstrend ist

Wenn beide Bedingungen gleichzeitig erfüllt sind, gehen Sie lang.

Es gibt zwei Standards für Positionsausgänge:

  • Festverzinsung: Schlusskurs steigt auf einen festgelegten Prozentsatz für die Gewinnentnahme
  • Volatilitäts-Trailing Stop Loss: Verwenden Sie ATR und den jüngsten Höchstpreis, um eine dynamisch angepasste Stop-Loss-Position zu berechnen.

Vorteile

  • Die Kombination von MACD und DMI kann die Trendrichtung des Marktes zuverlässiger bestimmen und fehlerhafte Operationen reduzieren
  • Die Gewinnspielbedingungen kombinieren festes Gewinnspiel und Volatilitäts-Stop-Loss, die die Gewinne flexibel verriegeln können

Risiken

  • Sowohl der MACD als auch der DMI können falsche Signale erzeugen, was zu unnötigen Verlusten führt
  • Festes Gewinnspiel kann verhindern, dass Gewinne maximiert werden

Optimierungsrichtlinien

Zusammenfassung

Diese Strategie synthetisiert mehrere Indikatoren, um Markttrends und -bedingungen zu beurteilen, und interveniert in Situationen mit einer relativ hohen Wahrscheinlichkeit der Gunst. Die Gewinnnahmebedingungen wurden auch optimal konzipiert, um einen bestimmten Gewinn zu gewährleisten, während die Flexibilität der Verriegelung von Gewinnen berücksichtigt wird. Durch Parameteranpassung und weiteres Risikomanagement kann diese Strategie zu einem stabilen quantitativen Handelssystem werden.


/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 2h
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/
//@version=4
strategy(shorttitle='(MACD + DMI Scalping with Volatility Stop',title='MACD + DMI Scalping with Volatility Stop by (Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

// DMI and MACD inputs and calculations

[pos_dm, neg_dm, avg_dm] = dmi(14, 14)
[macd, macd_signal, macd_histogram] = macd(close, 12, 26, 9)


Take_profit= ((input (3))/100)

longTakeProfit = strategy.position_avg_price * (1 + Take_profit)

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(2.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


closeLong = close > longTakeProfit or crossunder(close, vStop)


//Entry 
strategy.entry(id="long", long = true, when = crossover(macd, macd_signal) and pos_dm > neg_dm and window())


//Exit
strategy.close("long", when = closeLong and window())


Mehr