Long-Short-Oszillator-Strategie mit alternierendem Zyklus basierend auf der Volumenänderungsrate


Erstellungsdatum: 2023-10-30 11:45:42 zuletzt geändert: 2023-10-30 11:45:42
Kopie: 1 Klicks: 686
1
konzentrieren Sie sich auf
1617
Anhänger

Long-Short-Oszillator-Strategie mit alternierendem Zyklus basierend auf der Volumenänderungsrate

Überblick

Die Strategie, die den Wechsel der polygonalen Perioden durch die Berechnung der Wechselrate der Umsatzänderung beurteilt, gehört zu den Abweichungsstrategien. Sie kombiniert die Dynamik der Umsätze mit dem Brin-Band der Preise, um die führende Wirkung der Umsatzänderung auf die Preise zu beurteilen, um die Wendepunkte der Tendenz zu erfassen.

Strategieprinzip

  1. Berechnen Sie die Veränderungsrate der Transaktionsrate ([Veränderungsrate der Transaktionsdifferenzindikator]) und erhalten Sie den auf der Transaktionsdynamik basierenden Indikator nresult。

  2. Für nresult berechnen wir die Brin-Band und erhalten bbr, das für die Differenz zwischen den Standardwerten der Transformationsmasse steht.

  3. Die Brin-Band wird für den Schlusskurs berechnet und ergibt bbr1, der die Preisstandarddifferenz darstellt.

  4. Der Differenzwert hist, also der Differenzwert des Umsatzes minus der Differenzwert des Preises, wird als Endindikator berechnet.

  5. Wenn hist oben 0 ist, ist es ein leerer Einstiegspunkt, wenn hist unten 0 ist, ist es ein mehrköpfiger Einstiegspunkt.

Die Strategie verstärkt die führende Wirkung von Handelsvolumenänderungen auf die Preise, indem sie die Veränderungsrate der Handelsvolumenänderungen berechnet. Wenn die Handelsmenge sich umkehrt und der Preis sich noch nicht umgekehrt hat, wird die Hist auf oder unter 0, ein Handelssignal erzeugen. Es kann den Wendepunkt der Preisentwicklung im Voraus bestimmen.

Strategische Vorteile

  1. Die Strategie basiert auf der Veränderung der Transaktionsmenge, der Abweichung von der Quantitätspreisstrategie, die einen Wendepunkt darstellt, der die Preisentwicklung im Voraus widerspiegelt.

  2. Die Berechnung der Veränderungsrate der Transaktionsmenge erhöht die führende Wirkung der Transaktionsmenge auf die Preise und verbessert die Effektivität des Handels.

  3. Die Brin-Band, eine Kombination aus einem Volumen- und einem Preisindikator, macht die Handelssignale zuverlässiger.

  4. Die Hist-Daten werden mit einer dreimaligen Index-Gleichbehandlung verarbeitet, um die Signale genauer und glatter zu machen.

  5. Die Einrichtung einer Überkauf-Überverkauf-Linie und die Kombination mit einer langfristigen Stop-Loss-Limit-Liste können die Risiken wirksam kontrollieren.

  6. Es gibt mehrere benutzerdefinierte Parameter, wie z. B. die Länge der Brin-Streifen, die Multiplikation der Standarddifferenz und die Hist-Daten-Gleichung, die für die Optimierung der Strategie verwendet werden können.

Strategisches Risiko

  1. Die Transaktionszahlen sind nicht immer ein echtes Abbild des Marktes und können manipuliert werden.

  2. Die Abweichung ist nicht dauerhaft und es kann zu einem Durchbruch kommen, bei dem die Preise nicht umgekehrt werden.

  3. Die falsche Einstellung der Parameter kann zu häufigen Transaktionen oder ungültigen Signalen führen.

  4. Vorsicht bei falschen Signalen, die eine abnormale Transaktionsmenge verhindern.

  5. Der Umkehrsignal führt zu falschen Transaktionen, wenn der Trend stark ist.

Durch Optimierung von Parametern, Filterung in Verbindung mit anderen Indikatoren und Einstellung von Stop-Loss-Stopps kann sichergestellt werden, dass das Risiko kontrolliert wird.

Richtung der Strategieoptimierung

  1. Optimierung der Brin-Band-Parameter zur Stabilisierung des Signals.

  2. Der Trend-Indikator filtert die Signale und vermeidet den Rückschlag.

  3. Zusätzliche Indikatoren, wie MACD, werden hinzugefügt, um falsche Signale zu verhindern.

  4. Die Parameter werden mithilfe von KI-Technologien adaptiert und optimiert.

  5. Die Erweiterung des Moduls “Stop Loss Stop Stop” und die Optimierung der Geldverwaltung.

  6. In Kombination mit maschinellem Lernen wird die Qualität der Signale verbessert, um zu ermitteln, ob der Preis von der Erfolgsrate abweicht.

Zusammenfassen

Die Strategie berechnet die Veränderungsrate der Transaktionsmenge und verstärkt die Vorwirkung der Transaktionsmenge auf den Preis, um die Umkehrung der Preisentwicklung im Voraus zu ermitteln. Die Punkte haben eine höhere Zuverlässigkeit und Genauigkeit als einzelne Transaktionsmengenindikatoren.

Strategiequellcode
/*backtest
start: 2022-10-23 00:00:00
end: 2023-10-29 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/
// © tathal and special thanks to oakwhiz for his porting of my custom volume indicator

//@version=5
strategy('Volume Difference Delta Cycle Oscillator', 'VDDC Osc', default_qty_type=strategy.percent_of_equity, default_qty_value=100, max_bars_back=5000)

startDate = input.int(title='Start Date', defval=1, minval=1, maxval=31)
startMonth = input.int(title='Start Month', defval=1, minval=1, maxval=12)
startYear = input.int(title='Start Year', defval=2010, minval=1800, maxval=2100)

endDate = input.int(title='End Date', defval=31, minval=1, maxval=31)
endMonth = input.int(title='End Month', defval=12, minval=1, maxval=12)
endYear = input.int(title='End Year', defval=2021, minval=1800, maxval=2100)

// Normalize Function
normalize(_src, _min, _max) =>
    // Normalizes series with unknown min/max using historical min/max.
    // _src      : series to rescale.
    // _min, _min: min/max values of rescaled series.
    var _historicMin = 10e10
    var _historicMax = -10e10
    _historicMin := math.min(nz(_src, _historicMin), _historicMin)
    _historicMax := math.max(nz(_src, _historicMax), _historicMax)
    _min + (_max - _min) * (_src - _historicMin) / math.max(_historicMax - _historicMin, 10e-10)


// STEP 2:
// Look if the close time of the current bar
// falls inside the date range
inDateRange = true

// Stop loss & Take Profit Section     
l_sl_inp = input(2.0, title='Long Stop Loss %') / 100
l_tp_inp = input(4.0, title='Long Take Profit %') / 100

l_stop_level = strategy.position_avg_price * (1 - l_sl_inp)
l_take_level = strategy.position_avg_price * (1 + l_tp_inp)

s_sl_inp = input(2.0, title='Short Stop Loss %') / 100
s_tp_inp = input(4.0, title='Short Take Profit %') / 100

s_stop_level = strategy.position_avg_price * (1 + s_sl_inp)
s_take_level = strategy.position_avg_price * (1 - s_tp_inp)

src = close

//  Volume Differnce Indicator Delta

float change_src = ta.change(src)
float i_obv = ta.cum(change_src > 0 ? volume : change_src < 0 ? -volume : 0 * volume)
float i_pvt = ta.pvt

float result = ta.change(i_obv - i_pvt)

float nresult = ta.ema(normalize(result, -1, 1), 20)


// Volume Differnce Indicator Delta %B
length = input.int(20, minval=1, title='Volume Bands Length')
mult = input.float(2.0, minval=0.001, maxval=50, title='Volume Bands StdDev')
basis = ta.ema(nresult, length)
dev = mult * ta.stdev(nresult, length)
upper = basis + dev
lower = basis - dev
bbr = (nresult - lower) / (upper - lower)

// Normal %B, Based on close

l1 = input.int(20, minval=1, title='Bollinger Bands Length')
src2 = close
mult1 = input.float(2.0, minval=0.001, maxval=50, title='Bollinger Bands StdDev')
basis1 = ta.sma(src2, l1)
dev1 = mult1 * ta.stdev(src2, l1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
bbr1 = (src - lower1) / (upper1 - lower1)

/// Final Output Line

hist = ta.ema(ta.ema(ta.ema(bbr1 - bbr, input(2, title='Hist Smoothing Factor #1')), input(2, title='Hist Smoothing Factor #2')), input(2, title='Hist Smoothing Factor #3'))

/// Overbought / Oversold Line Creation
oversold = input(-.1)
overbought = input(.4)
hline(oversold, linewidth=2, color=color.new(#81c784, 62))
hline(overbought, linewidth=2, color=color.new(#c2185b, 38))

/// Long & Short Conditions

short = hist > overbought
long = hist < oversold

/// Colors & Plotting
histColor = hist >= 0 ? hist[1] < hist ? #26A69A : #B2DFDB : hist[1] < hist ? #FFCDD2 : #EF5350
plot(hist, title='Histogram', style=plot.style_columns, color=color.new(histColor, 0))

CrossBgColor = long ? color.new(#81c784, 62) : short ? color.new(#c2185b, 38) : na
bgcolor(color.new(CrossBgColor, 90))

/// Strategy Methodology

if inDateRange
    strategy.entry('long', strategy.long, when=long, stop=l_stop_level, limit=l_take_level)

if inDateRange and strategy.position_size > 0
    strategy.close_all(when=short)

if inDateRange
    strategy.entry('short', strategy.short, when=short, stop=s_stop_level, limit=s_take_level)

if inDateRange and strategy.position_size < 0
    strategy.close_all(when=long)