Volumenbasierte Entwicklung nach Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-29
Tags:

img

Übersicht

Dies ist ein Trend nach Handelsstrategie, die auf einem modifizierten Volumen-Oszillator-Indikator basiert. Es verwendet Volumen gleitende Durchschnitte, um steigende Volumensignale zu identifizieren und Eintritte oder Ausgänge zu bestimmen. In der Zwischenzeit enthält es Preis-Trend-Urteil, um falsche Signale während Preisschwankungen zu vermeiden.

Strategie Logik

  1. Berechnen Sie Volumen gleitenden Durchschnitt Volumen_sum mit der Länge von Volumen_Länge und glätten Sie es durch Volumen_smooth Periode gleitenden Durchschnitt.
  2. Erzeugen Sie lange Signale, wenn Volumen über die Schwelle steigt, und kurze Signale, wenn Volumen unter die Schwelle fällt.
  3. Um falsche Signale zu filtern, dauert es nur lange, wenn der Preistrend in den vergangenen Richtungsbalken nach oben geprüft wird und umgekehrt.
  4. Setzen Sie zwei Schwellenwerte threshold und threshold2. threshold erzeugt Handelssignale, während threshold2 als Stop-Loss fungiert.
  5. Verwalten von offenen/schließenden Aufträgen über eine Zustandmaschinenlogik.

Analyse der Vorteile

  1. Der Volumenindikator erfasst Veränderungen der Marktkauf-/Verkaufskraft für genauere Signale.
  2. Die Kombination mit dem Preistrend verhindert falsche Signale bei Preisschwankungen.
  3. Zwei Schwellenwerte können die Risiken besser kontrollieren.

Risikoanalyse

  1. Der Volumenindikator hat Verzögerungen und kann Preiswendepunkte verpassen.
  2. Falsche Parameter-Einstellungen führen zu Überhandelungen oder Signalverzögerungen.
  3. Der Stop-Loss kann bei Spitzen im Handelsvolumen erreicht werden.

Die Risiken können gemildert werden, indem Parameter angepasst, die Indikatorenberechnung optimiert und andere Bestätigungen kombiniert werden.

Optimierungsrichtlinien

  1. Adaptive Optimierung der Parameter auf der Grundlage der Marktbedingungen.
  2. Einbeziehung anderer Indikatoren wie Volatilitätsindex zur weiteren Überprüfung von Signalen.
  3. Forschung zur Anwendung von Modellen des maschinellen Lernens zur Verbesserung der Signalgenauigkeit.

Schlussfolgerung

Diese Strategie nutzt einen verbesserten Volumen-Oszillator mit Preistrend, um Ein- und Ausgänge mit zwei Stop-Loss-Schwellenwerten zu bestimmen.


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

//@version=4
strategy('Volume Advanced', default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075, currency='USD')
startP = timestamp(input(2017, "Start Year"), input(12, "Start Month"), input(17, "Start Day"), 0, 0)
end    = timestamp(input(9999, "End Year"),   input(1, "End Month"),   input(1, "End Day"),   0, 0)
_testPeriod() =>
    iff(time >= startP and time <= end, true, false)

source = close 
vol_length  = input(34, title = "Volume - Length")
vol_smooth  = input(200,title = "Volume - Smoothing")
volriselen  = input(21,  title = "Volume - Risinglength")
volfalllen  = input(13, title = "Volume - Fallinglength")
threshold   = input(1,"threshold")
threshold2  = input(1.2,step=0.1, title="Threshold 2")
direction = input(13,"amount of bars")


volsum  = sum(volume, vol_length) / (sum(volume, vol_smooth) / (vol_smooth / vol_length))


LongEntry  = (rising(volsum, volriselen) or crossover (volsum, threshold)) and close > close[direction]
ShortEntry = (rising(volsum, volriselen) or crossover (volsum, threshold)) and close < close[direction]
LongExit1  = falling (volsum,volfalllen)
ShortExit1 = falling (volsum,volfalllen)
LongExit2= (crossover(volsum, threshold2) and close < close[direction])


_state = 0
_prev = nz(_state[1])
_state := _prev

if _prev == 0
    if LongEntry
        _state := 1
        _state
    if ShortEntry
        _state := 2
        _state
if _prev == 1
    if ShortEntry or LongExit1
        _state := 0
        _state
if _prev == 2
    if LongEntry or ShortExit1
        _state := 0
        _state

_bLongEntry = _state == 1 
_bLongClose = _state == 0 

long_condition = _bLongEntry and close > close[direction]
strategy.entry('BUY', strategy.long, when=long_condition)  
 
short_condition =  _bLongClose or LongExit2
strategy.close('BUY', when=short_condition)

plot(volsum,      color = color.green,    title="Vol_Sum")
plot(threshold, color = color.fuchsia, transp=50, title="Threshold")
plot(threshold2, color=color.white, transp = 50, title="Threshold 2")

Mehr