Änderte Quantitative Handelsstrategie OBV und MACD

Schriftsteller:ChaoZhang, Datum: 2023-11-15 17:58:42
Tags:

img

Übersicht

Diese Strategie verwendet das veränderte Volumen auf der Bilanz (OBV) und den MACD, um Handelssignale zu erzeugen.

Strategie Logik

  1. Berechnen Sie den einfachen gleitenden Durchschnitt (SMA), um die Marktentwicklung zu ermitteln.

  2. Berechnung des veränderten OBV: Es ändert die Berechnung des OBV auf der Grundlage des Schlusskurses und der vorherigen Schlusskursbeziehung, um den OBV empfindlicher zu machen.

  3. Berechnen Sie den MACD auf veränderter OBV. Der MACD besteht aus einer schnellen Linie, einer langsamen Linie und einem Histogramm, um die Veränderung des Volumenmomentums zu ermitteln.

  4. Wenn der MACD-Gold-Cross nach oben geht, wird ein Kaufsignal generiert.

  5. Wenn der MACD-Durchschnittswert sinkt, wird ein Verkaufssignal ausgelöst.

  6. Überprüfen Sie die SMAs, um unnötige Trades während eines trendlosen Marktes zu vermeiden.

Analyse der Vorteile

  1. Eine veränderte OBV ist empfindlicher, um frühe Volumenänderungen zu erfassen.

  2. Der MACD zeigt deutlich die Veränderung der Volumendynamik und die Schlüsselwerte an.

  3. Das kombinierte Signal von Volumen und Preis verbessert die Genauigkeit.

  4. Der SMA filtert falsches Signal, indem er den Markttrend bestimmt.

  5. Klare Strategie-Logik und große Optimierungsmöglichkeiten.

Risikoanalyse

  1. Eine veränderte OBV kann falsche Signale erzeugen, muss durch andere Indikatoren gefiltert werden.

  2. Eine unsachgemäße Einstellung der MACD-Parameter kann dazu führen, dass Trades verfehlt oder falsche Signale ausgelöst werden.

  3. Achten Sie auf die Aktienbesonderheiten, um Verluste zu vermeiden.

  4. Überwachung der Marktlage, da die Strategie bei speziellen Szenarien möglicherweise nicht funktioniert.

  5. Das Risiko einer Überanpassung durch Backtest kann zu einer schlechteren Performance beim Live-Handel führen.

Optimierungsrichtlinien

  1. Versuche verschiedene Kombinationen von SMA-Perioden, um die Marktentwicklung zu optimieren.

  2. Testen Sie die MACD-Parameter, um die Veränderung des Volumenmomentums besser zu ermitteln.

  3. Hinzufügen anderer Indikatoren als Filter, wie KDJ, RSI usw.

  4. Hinzufügen von Stop-Loss zu Limit-Loss pro Trade.

  5. Optimieren Sie das Geldmanagement, um die Gesamtrentabilität zu verbessern.

  6. Versuchsparameterunterschiede zwischen den Beständen.

Schlussfolgerung

Die Strategie kombiniert veränderte OBV und MACD, um Volumen- und Preissynthese zu erreichen. Sie kann Volumendynamikänderungen frühzeitig erfassen und Handelssignale erzeugen. Im Vergleich zur Verwendung von OBV oder MACD allein bietet diese Strategie zuverlässigere Handelsmöglichkeiten. Allerdings besteht ein Risiko falscher Signale und weitere Optimierungen von Indikatoren und Parametern sowie Geldmanagement sind erforderlich, um im Live-Handel stetige Gewinne zu erzielen. Insgesamt hat die Strategie eine klare Logik und lohnt sich zu testen und zu optimieren, um ihr Potenzial zu erforschen.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-14 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/
// © stocktechbot

//@version=5
strategy("Altered OBV On MACD", overlay=true, margin_long=100, margin_short=100)

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © stocktechbot
//@version=5
//SMA Tredline
out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
outthree = ta.sma(close, 9)
//sma plot
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
plot(out, color=color.blue, title="MA200", offset=offset)
plot(outf, color=color.maroon, title="MA50", offset=offset)
plot(outn, color=color.orange, title="MA90", offset=offset)
plot(outt, color=color.olive, title="MA21", offset=offset)
plot(outthree, color=color.fuchsia, title="MA9", offset=offset)

fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
chng = 0
obv = ta.cum(math.sign(ta.change(close)) * volume)
if close < close[1] and (open < close)
    chng := 1
else if close > close[1]
    chng := 1
else
    chng := -1
obvalt = ta.cum(math.sign(chng) * volume)
//src = input(title="Source", defval=close)
src = obvalt
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

// Calculating
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
//hline(0, "Zero Line", color=color.new(#787B86, 50))
//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
//plot(macd, title="MACD", color=col_macd)
//plot(signal, title="Signal", color=col_signal)
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
//BUY Signal
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
twohunraise = ta.rising(out, 2)
twentyrise = ta.rising(outt, 2)
macdrise = ta.rising(macd,2)
macdlong = ta.crossover(macd, signal)
longCondition=false
if macdlong and macdrise
    longCondition := true

if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
shortmafall = ta.falling(outthree, 1)
macdfall = ta.falling(macd,1)
macdsell = macd < signal
shortCondition = false
if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2)
    shortCondition := true


if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)


Mehr