OBV EMA Crossover-Trend nach der Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-20 15:35:08
Tags:

img

Übersicht

Diese Strategie verwendet die Überschneidung von doppelten EMA-Linien des OBV-Indikators, um den Trend des OBV zu bestimmen, und nimmt Long/Short-Positionen entsprechend der Trendrichtung ein. Der OBV-Indikator kann die Beziehung zwischen Preis und Volumen klarer widerspiegeln und die Absicht der Marktteilnehmer beurteilen, so dass er verwendet werden kann, um den Markttrend zu erfassen. Diese Strategie kombiniert die Indikatorglättung gleitender Durchschnitte, die effektiv Marktlärm filtern und den Haupttrend erfassen kann.

Strategieprinzip

Diese Strategie verwendet hauptsächlich, ob OBV in einem Aufwärtstrend ist, um den langen Einstiegszeitpunkt zu bestimmen. Insbesondere berechnet sie den 6-tägigen EMA und den 24-tägigen EMA von OBV. Wenn der 6-tägige EMA über den 24-tägigen EMA überschreitet, wird ein langes Signal generiert. Ähnlich wird, wenn der 6-tägige EMA unter den 24-tägigen EMA überschreitet, ein kurzes Signal generiert. Darüber hinaus setzt die Strategie auch einen Stop-Loss von 3%.

Der Schlüssel zum Trendbeurteil der Strategie liegt im OBV-Indikator. Der OBV-Indikator spiegelt die kollektive Absicht des großen Geldes wider und kann die Haltung der Marktteilnehmer effektiv widerspiegeln. In Kombination mit der gleitenden Durchschnittslinieverarbeitung kann ein gewisses Rauschen ausgefiltert werden, um das Signal klarer und zuverlässiger zu machen. Die Strategie verwendet schnelle EMA-Linien und langsame EMA-Linien, um Handelssignale zu konstruieren, die Preisdaten glatt machen und auch Trendänderungen sensibler erfassen können.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Der OBV-Indikator, der auf dem Handelsvolumen basiert, kann die Absicht der Marktteilnehmer eindeutig beurteilen, und das Signal ist zuverlässiger.

  2. Die doppelte EMA-Linienverarbeitung kann Lärm filtern, um das Signal klarer zu machen.

  3. Die Kombination aus schnellen und langsamen EMA-Linien kann sowohl die Preisverflachtung als auch die Erfassung von Trendänderungen berücksichtigen.

  4. Die Strategieoperation ist einfach und leicht umzusetzen.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Der OBV-Indikator kann zu einem bestimmten Zeitpunkt falsche Signale geben, wobei die Strategie Verluste erleiden kann.

  2. Bei gewalttätigen Handelsgeschäften haben EMA-Linien einen Verzögerungseffekt, der den optimalen Einstiegspunkt verfehlen kann.

  3. Die feste Stop-Loss-Einstellung kann zu starr sein, um sich an Marktveränderungen anzupassen.

Gegenmaßnahmen:

  1. Bestätigen Sie mit anderen Indikatoren, um falsche Signale zu vermeiden.

  2. Optimieren Sie die Parameter-Einstellungen, um die EMA-Linien empfindlicher zu machen.

  3. Setzen Sie dynamischen Stop-Loss.

Optimierungsrichtung

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Optimieren Sie die EMA-Parameterkombination, um besser abgestimmte gleitende Durchschnittsparameter zu finden.

  2. Erhöhen Sie andere Indikatoren zur Signalbestätigung, wie MACD, RSI usw., um die Signalgenauigkeit zu verbessern.

  3. Einstellen dynamischer Stop-Loss, der den Stop-Loss-Punkt in Echtzeit anhand von Marktschwankungen anpassen kann.

  4. Optimierung der Parameterkombination, um die beste Parameterkombination zu finden.

Schlussfolgerung

Im Allgemeinen ist diese Strategie eine relativ einfache und zuverlässige Trendfolgestrategie. Sie kombiniert OBV-Indikator und doppelte EMA-Linien, um den Trend zu beurteilen. Die Vorteile sind einfacher Betrieb, klare Signale und die Fähigkeit, Trends effektiv zu verfolgen. Die Nachteile sind mögliche falsche Signale und Verzögerung der EMA-Linienverarbeitung. Optimierung mit anderen Indikatoren kann bessere Ergebnisse erzielen.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OBV EMA X BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

/////////////// OBV /////////////// 
src = close
atr = atr(input(title="ATR Period", defval=3, minval=1))
atrmult = input(title="ATR Mult", defval=1, minval=0)
obv = cum(change(src) > 0 ? volume * (volume / atr) : change(src) < 0 ? -volume * (volume / atr) : 0 * volume / atr)
e1 = ema(obv, input(24))
e2 = ema(obv, input(6))

///////////////  Strategy  /////////////// 
long = crossover(e2, e1)
short = crossunder(e2, e1)

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

//////////////// Stop loss /////////////// 
sl_inp = input(3.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
plot(e1, color = e1 > e1[1] ? color.lime : e1 < e1[1] ? color.red : color.white, linewidth = 2, offset = 0)
plot(e2, color = e2 > e2[1] ? color.lime : e2 < e2[1] ? color.red : color.white, linewidth = 1)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)

Mehr