Adaptiver Volatilitätsbruch

Schriftsteller:ChaoZhang, Datum: 2024-01-25 12:43:43
Tags:

img

Übersicht

Strategie Logik

Die Hauptkomponenten dieser Strategie sind:

  1. VFI-Indikator zur Bestimmung des Trends. Er verwendet die logarithmische Veränderungsrate des typischen Preises und des Handelsvolumens, um Preis und Volumen angemessen abzugleichen.

  2. EMA-Differenzindikator zur Bestimmung des Trends. Er berechnet die prozentuale Differenz zwischen 20-Tage-EMA und 50-Tage-EMA, um die mittelfristige Trendrichtung zu beurteilen.

  3. Amplitude des VFI zur Erkennung der Erschöpfung: Wenn sich der VFI seinen Grenzwerten (0, 20) nähert, wird die Wahrscheinlichkeit einer Trendumkehr als höher angesehen.

Wenn der Preis über den oberen Bollinger-Band bricht und die Differenz zwischen VFI und EMA einen Aufwärtstrend anzeigt, gehen Sie lang.

Vorteile

  1. Durch die Einführung von VFI wird das Preis-Volumen-Verhältnis vernünftiger und wird vermieden, den Preisen blind zu folgen.

  2. Die Kombination von EMA-Differenz und VFI macht die Trendbestimmung zuverlässiger.

  3. Die Kombination von Bollinger-Bändern und VFI macht die Strategie besser an die wechselseitigen Marktschwankungen angepasst.

Risiken

  1. Volumenpreisindikatoren können das Risiko falscher Ausbrüche nicht vollständig vermeiden.

  2. Die EMA-Differenz hat eine gewisse Verzögerung und kann nicht rechtzeitig auf kurzfristige Wende reagieren.

  3. Unzulängliche Parameter von Bollinger-Bändern können zu Überhandelungen oder Marktübernahme führen.

Lösungen:

  1. Kombination mehrerer Indikatoren, um den Trend zu bestimmen, um nicht auf einen einzigen Indikator zurückzugreifen.

  2. Die EMA-Parameter an die richtigen Werte anpassen.

  3. Testen Sie die Auswirkungen von Bollinger-Parametern auf die Strategie unter verschiedenen Marktbedingungen.

Optimierungsrichtlinien

  1. Weiter optimieren Sie die VFI-Parameter, um sie empfindlicher zu machen.

  2. Hinzufügen eines Ausbruchsbeurteilungsgrades auf der Grundlage von Preiskanälen oder dem Indikator "Envelopes".

  3. Test der Einführung mehrer Volumenpreisindikatoren wie OBV, PVT usw.

  4. Einführung von Techniken des maschinellen Lernens und der KI zur Realisierung dynamischer Parameteroptimierung.

Schlussfolgerung

Diese Strategie berücksichtigt umfassend Trendverfolgung und Umkehrerkennung mit VFI, EMA-Differenz und Bollinger-Bändern, um Zwei-Wege-Marktschwankungen zu erfassen.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 00:00:00
period: 1h
basePeriod: 15m
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/
// © beststockalert

//@version=4

strategy(title="Super Bollinger Band Breakout", shorttitle = "Super BB-BO", overlay=true)
source = close

length = input(130, title="VFI length")
coef = input(0.2)
vcoef = input(2.5, title="Max. vol. cutoff")
signalLength=input(5)


// session 


pre = input( type=input.session, defval="0400-0935")
trade_session = input( type=input.session, defval="0945-1700")
use_trade_session = true
isinsession = use_trade_session ? not na(time('1', trade_session)) : true


is_newbar(sess) =>
    t = time("D", sess)
    not na(t) and (na(t[1]) or t > t[1])


is_session(sess) =>
    not na(time(timeframe.period, sess))

preNew = is_newbar(pre)
preSession = is_session(pre)

float preLow = na
preLow := preSession ? preNew ? low : min(preLow[1], low) : preLow[1]

float preHigh = na
preHigh := preSession ? preNew ? high : max(preHigh[1], high) : preHigh[1]



//   vfi 9lazybear 
ma(x,y) => 0 ? sma(x,y) : x

typical=hlc3
inter = log( typical ) - log( typical[1] )
vinter = stdev(inter, 30 )
cutoff = coef * vinter * close
vave = sma( volume, length )[1]
vmax = vave * vcoef
vc = iff(volume < vmax, volume, vmax) //min( volume, vmax )
mf = typical - typical[1]
vcp = iff( mf > cutoff, vc, iff ( mf < -cutoff, -vc, 0 ) )

vfi = ma(sum( vcp , length )/vave, 3)
vfima=ema( vfi, signalLength )


//ema diff


ema20 = ema(close,20)
ema50 = ema(close,50)


diff = (ema20-ema50)*100/ema20
ediff = ema(diff,20)

//
basis = sma(source, 20)
dev = 1.5 * stdev(source, 20)

upper = basis + dev
lower = basis - dev


ema9 = ema(source, 9)

if ( ((crossover(source, upper) and diff>ediff and diff>0) or (close>upper and (vfi >0 or vfima>0 or ediff>0.05) and (vfi<14 or vfima<14)) ))
    strategy.entry("Long", strategy.long)


if (crossunder(source, lower) or vfi>19 or vfima>19 or diff<(ediff+0.01) )
    strategy.close("Long")



Mehr