Relative Volumenpreisstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-28 17:54:44
Tags:

img

Übersicht

Die relative Volumen-Preisstrategie ist eine quantitative Handelsstrategie, die auf einem abnormalen Handelsvolumen und einer Preisvolatilität basiert. Diese Strategie vergleicht das aktuelle Handelsvolumen mit dem historischen Durchschnitt, um festzustellen, ob das Handelsvolumen abnormal ist. Sie kombiniert auch das durchschnittliche wahre Intervall, um festzustellen, ob der Preis relativ stabil ist. Wenn das Handelsvolumen abnormal steigt und der Preis relativ stabil ist, gilt dies als Eintrittssignal.

Strategieprinzip

Die Kernlogik der Preisstrategie für das relative Volumen beruht auf zwei Beurteilungsindikatoren: dem relativen Handelsvolumen und dem Preisschwankungsbereich.

Zuerst berechnen wir den einfachen gleitenden Durchschnitt des Handelsvolumens über die letzten 20 Perioden als das historische durchschnittliche Handelsvolumen. Dann setzen wir einen mehrfachen Parameter (z. B. 1,5 mal). Wenn das aktuelle Handelsvolumen größer als 1,5 mal das durchschnittliche Handelsvolumen ist, betrachten wir das Handelsvolumen als abnormal und gehören zu einer relative Volumen Situation.

Zweitens berechnen wir den durchschnittlichen wahren Bereich (ATR) über die letzten 14 Perioden als Maß für die Preisvolatilität. Gleichzeitig berechnen wir die Standardabweichung der durchschnittlichen Volatilität. Wenn die aktuelle wahre Volatilität zwischen dem Durchschnitt plus oder minus einer Standardabweichung liegt, betrachten wir die Preisfluktuation als relativ stabil.

Wenn die beiden oben genannten Bedingungen gleichzeitig erfüllt sind, wird ein Long-Signal ausgegeben, um eine Long-Position zu eröffnen. Während des Haltezeitraums wird zweimal der ATR als Stop-Loss-Level und der höchste Preis minus zweimal der ATR als Take-Profit-Level verwendet.

Analyse der Vorteile

Der größte Vorteil der relativen Volumenpreisstrategie besteht darin, dass sie Preistrends erfasst, die durch ein abnormales Handelsvolumen verursacht werden. Wenn das Handelsvolumen steigt, bedeutet dies eine Veränderung der Haltung der Marktteilnehmer, die häufig Preisbruch und die Bildung neuer Trends signalisiert. Durch den Vergleich der Beziehung zwischen Handelsvolumen und historischen Durchschnitten kann die Strategie effektiv den Zeitpunkt eines abnormen Handelsvolumens bestimmen.

Auf der anderen Seite berücksichtigt die Strategie auch die Volatilitätsrate, so dass Signale in relativ stabilen Kursperioden auftreten. Dies vermeidet das enorme Verlustrisiko, das durch das Verfolgen von Höchstwerten während gewaltsamer Schwankungen verursacht wird. Es erhöht auch die Gewinnchancen, da Trends in der Regel nach relativer Stabilität durchbrechen.

Risikoanalyse

Das größte Risiko dieser Strategie besteht darin, dass der Handelsvolumenindikator nicht zu 100% sicher über neue Trends sein kann.

Um Verluste zu reduzieren, passen Sie die Parameter des relativen Volumens angemessen an und setzen Sie strengere Kriterien für die Beurteilung eines abnormalen Handelsvolumens fest.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Hinzufügen anderer Indikatoren für die Beurteilung, wie Veränderungsquote, Umsatz usw., um abnormale Handelsvolumensignale zuverlässiger zu machen.

  2. Der ATR-Parameter kann für verschiedene Bestände optimiert werden, um die stabile Preisspanne genauer zu bestimmen.

  3. Fügen Sie maschinelle Lernalgorithmen hinzu, um abnormales Handelsvolumen aktiv zu beurteilen, nicht nur einen einfachen Vergleich mit historischen Durchschnitten.

  4. Verwenden Sie Deep-Learning-Modelle, um Preisschwankungen vorherzusagen, nicht nur basierend auf historischen ATR.

Schlussfolgerung

Die relative Volumen-Preisstrategie erfasst ein abnormales Handelsvolumen als charakteristisches Signal und kombiniert Preisstabilitätsurteile, um Handelssignale auszugeben. Die Strategie ist einfach und praktisch und funktioniert gut bei der Verfolgung eines abnormen Aktienhandelsvolumens.


/*backtest
start: 2022-12-21 00:00:00
end: 2023-12-27 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/
// © DojiEmoji (kevinhhl)

//@version=4
strategy("[KL] Relative Volume + ATR Strategy",overlay=true,pyramiding=1)
ENUM_LONG = "Long"

// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("01 May 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }
len_volat = input(14,title="Length of ATR to determine volatility")
ATR_volat = atr(len_volat)
avg_ATR_volat  = sma(ATR_volat, len_volat)
std_ATR_volat = stdev(ATR_volat, len_volat)
// }

// Trailing stop loss {
ATR_X2_TSL = atr(input(14,title="Length of ATR for trailing stop loss")) * input(2.0,title="ATR Multiplier for trailing stop loss",type=input.float)
TSL_source = low
var stop_loss_price = float(0)
TSL_line_color = color.green, TSL_transp = 100
if strategy.position_size == 0 or not within_timeframe
    TSL_line_color := color.black
    stop_loss_price := TSL_source - ATR_X2_TSL 
else if strategy.position_size > 0
    stop_loss_price := max(stop_loss_price, TSL_source - ATR_X2_TSL)
    TSL_transp := 0
plot(stop_loss_price, color=color.new(TSL_line_color, TSL_transp))
// }

// Signals for entry {
_avg_vol = sma(volume,input(20, title="SMA(volume) length (for relative comparison)"))
_relative_vol = _avg_vol * input(1.5,title="Multiple of avg vol to consider relative volume as being high",type=input.float)
__lowerOfOpenClose = min(open,close)
_wickRatio_lower = (__lowerOfOpenClose - low) / (high - low)
entry_signal1 = volume > _relative_vol
entry_signal2 = ATR_volat < avg_ATR_volat + std_ATR_volat and ATR_volat > avg_ATR_volat - std_ATR_volat
// }


alert_per_bar(msg)=>
    prefix = "[" + syminfo.root + "] "
    suffix = "(P=" + tostring(close) + "; atr=" + tostring(ATR_volat) + ")"
    alert(tostring(prefix) + tostring(msg) + tostring(suffix), alert.freq_once_per_bar)

// MAIN:
if within_timeframe
    if strategy.position_size > 0 and strategy.position_size[1] > 0 and (stop_loss_price/stop_loss_price[1]-1) > 0.005
        alert_per_bar("TSL raised to " + tostring(stop_loss_price))

    // EXIT ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::    // placed before entry, will re-enter if stopped out
	exit_msg = close <= strategy.position_avg_price ? "stop loss" : "take profit"
	if strategy.position_size > 0 and TSL_source <= stop_loss_price
        strategy.close(ENUM_LONG, comment=exit_msg)

    // ENTRY :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	if entry_signal1 and entry_signal2// and entry_signal3
		entry_msg = strategy.position_size > 0 ? "adding" : "initial"
		strategy.entry(ENUM_LONG, strategy.long, comment=entry_msg)

// CLEAN UP:
if strategy.position_size == 0
	stop_loss_price := float(0)


Mehr