Trendfolgestrategie basierend auf Volumenindikatoren


Erstellungsdatum: 2023-10-10 14:51:13 zuletzt geändert: 2023-10-10 14:51:13
Kopie: 0 Klicks: 1032
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie basiert auf dem Handelsvolumenindikator VFI, um Trends zu verfolgen. Die Strategie berechnet die Kursschwankungen und die Veränderungen des Handelsvolumens, um die Richtung der Markttrends zu ermitteln und um einen niedrigen Kauf zu erzielen.

Strategieprinzip

  1. Berechnung des VFI-Index: Berechnung des VFI-Wertes anhand der logarithmischen Veränderung des Aktienpreises und des Handelsvolumens, Schwankungen werden durch eine glatte Behandlung beseitigt.

  2. Die Richtung des Trends zu bestimmen: Die 0-Achse auf dem VFI-Indikator ist ein positives Signal, die 0-Achse unten ist ein negatives Signal.

  3. Handelssignale: Schnelle EMA überschreitet die langsame EMA, und VFI überschreitet die Kauflinie; unter VFI überschreitet die Verkauflinie und legt die Position frei.

  4. Stop-Loss-Methode: Setzen Sie einen festen Stop-Loss-Anteil.

Die Strategie beruht hauptsächlich auf VFI-Indikatoren, um die Richtung der Trends zu bestimmen. VFI-Indikatoren spiegeln die Stimmung der Märkte durch die Schwankungen der Aktienkurse und die Veränderungen des Handelsvolumens wider. VFI-Indikatoren sind ein Trendverfolgungsindikator.

Strategische Vorteile

  1. Der VFI-Indikator beurteilt Trends besser als ein einzelner Preisindikator und filtert so Schwankungen und falsche Durchbrüche.

  2. Das Gleichlinien-System unterstützt das Urteilsvermögen, um zu vermeiden, dass der VFI-Indikator falsche Signale in der bewegten Stadt sendet.

  3. Die Festlegung eines festen Stop-Loss-Punktes für die Risikokontrolle ist für die Risikomanagement geeignet.

  4. Trend-Tracking-Modell, ohne zu erraten, die Marktwendepunkte, Trends zu verfolgen, um zusätzliche Gewinne zu erzielen.

  5. Die Parameter sind flexibel eingestellt und können je nach Markt für verschiedene Zyklen und Sorten angepasst werden.

Strategisches Risiko

  1. Die VFI-Indikatoren könnten bei starken Marktschwankungen falsche Signale abgeben.

  2. Ein Fixed Stop-Loss-Punkt kann zu groß oder zu klein sein, was zu einem zu frühen oder zu späten Stop-Loss führt.

  3. Wenn die Parameter für den Kauf und Verkauf falsch eingestellt sind, kann dies zu häufigen Transaktionen oder fehlenden Belegen führen.

  4. Die Trend-Tracking-Strategie kann keine Umkehrung erfassen, und es ist notwendig, den Verlust rechtzeitig zu stoppen.

  5. Die falschen Parameter können zu früh oder zu spät führen.

Strategieoptimierung

  1. Anpassung der VFI-Parameter zur Optimierung der Kennzahlen.

  2. Anpassung der Durchschnittszyklus und Optimierung der Signalzeit.

  3. Dynamische Anpassung der Stop-Loss-Punkte und Optimierung der Stop-Loss-Methode.

  4. In Kombination mit anderen Indikatoren wird die Signalqualität verbessert.

  5. Optimierte Parameterkombinationen für große und kleine Perioden.

  6. Tests zur Erhöhung der Anpassungsfähigkeit der Parameter.

Zusammenfassen

Die Strategie basiert auf dem VFI-Indikator, um die Richtung des Trends zu bestimmen. Die Strategie wird mit dem Gleichgewichtssystem kombiniert. Durch die Trendverfolgung werden die niedrigen und hohen Verkaufspreise erreicht, ohne dass eine konkrete Umkehrung vorhergesagt werden muss. Der Strategievorteil besteht darin, dass die Trends besser als einzelne Preisindikatoren sind und die Schwingungen effektiv filtern können.

Strategiequellcode
/*backtest
start: 2023-10-02 00:00:00
end: 2023-10-06 21:00:00
period: 3m
basePeriod: 1m
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/
// © mohanee
//This strategy is based on VFI indicator published by  UTS.  
//more details of VFI indicator can be found at  [url=http://mkatsanos.com/VFI.html]http://mkatsanos.com/VFI.html[/url] 
// I have added buy line and sell line to the indicator  and tested  SPY stock/index on one hour chart

//@version=4
strategy(title="VFI  strategy [based on VFI indicator published by  UTS]", overlay=false,pyramiding=2, default_qty_type=strategy.fixed,    initial_capital=10000, currency=currency.USD)


// Const
kMaColor = color.aqua
kNeutralColor = color.gray
kBearColor = color.red
kBullColor = color.green

kAlma = "ALMA"
kEma = "EMA"
kSma = "SMA"
kWma = "WMA"


// Input

vfi_length = input(8, title="Length", minval=1)  //default 130
vfi_coef = input(0.2, title="Coef", minval=0.1)
vfi_volCutoff = input(2.5, title="Volume Cutoff", minval=0.1)
vfi_smoothLen = input(3, title="Smoothing Period", minval=1)
vfi_smoothType = input(kEma, title="Smoothing Type", options=[kAlma, kEma, kSma, kWma])

//These are adde by me for the strategy purpose  BEGIN
vfi_buyLine = input(-4, title="Buy Line", minval=-10)
vfi_sellLine = input(5, title="Sell Line", minval=-10)
stopLoss = input(title="Stop Loss%", defval=5, minval=1)
//These are adde by me for the strategy purpose  END

vfi_longEMA = input(200, title="Long EMA", minval=1)
vfi_shortEMA1 = input(50, title="short EMA1", minval=1)
vfi_shortEMA2 = input(9, title="short EM2A", minval=1)

vfi_showTrend = input(false, title="Visualize Trend")
vfi_showFill = input(true, title="Apply Filling")
vfi_showMa = input(true, title="Show Moving Average")
vfi_maType = input(kSma, title="Moving Average Type", options=[kAlma, kEma, kSma, kWma])
vfi_maLength = input(30, title="Moving Average Length", minval=1)
vfi_almaOffset = input(0.85, title="• ALMA - Offset (global setting)", minval=0.0, maxval=1.0, step=0.05) // more smoothness (closer to 1) vs. more responsiveness (closer to 0)
vfi_almaSigma = input(6.0, title="• ALMA - Sigma (global setting)", minval=0.0, step=0.05) // the larger sigma the smoother ALMA


// Functionality

isRising(sig) =>
    sig > sig[1]
    
isFlat(sig) =>
    sig == sig[1]

vfi_trendColor(sig) =>
    isFlat(sig) ? kNeutralColor : isRising(sig) ? kBullColor : kBearColor
    
vfi_color(sig) =>
    isFlat(sig) ? kNeutralColor : sig > 0 ? kBullColor : kBearColor
    
osc_color(sig) =>
    sig == 0 ? kNeutralColor : sig > 0 ? kBullColor : kBearColor

smooth(t, sig, len) =>
    ma = float(sig)         // None
    if t == kSma            // Simple
        ma := sma(sig, len)
    if t == kEma            // Exponential
        ma := ema(sig, len)
    if t == kWma            // Weighted
        ma := wma(sig, len)
    if t == kAlma           // Arnaud Legoux
        ma := alma(sig, len, vfi_almaOffset, vfi_almaSigma)
    ma

calc_vfi(fviPeriod, smoothType, smoothLen, coef, vCoef) =>
    avg = nz(hlc3)
    inter = log(avg) - log(avg[1])
    vInter = stdev(inter, 30)
    cutOff = coef * vInter * close
    vAve = smooth(kSma, volume[1], fviPeriod)
    vMax = vAve * vCoef
    vC = min(volume, vMax)
    mf = avg - avg[1]
    vCp = iff(mf > cutOff, vC, iff(mf < -cutOff, -vC, 0))
    sVfi = sum(vCp, fviPeriod) / vAve
    vfi = smooth(smoothType, sVfi, smoothLen)
    
value_vfi = calc_vfi(vfi_length, vfi_smoothType, vfi_smoothLen, vfi_coef, vfi_volCutoff)
value_ma = smooth(vfi_maType, value_vfi, vfi_maLength)

longEMAval= ema(close, vfi_longEMA)
shortEMAval1= ema(close, vfi_shortEMA1)
shortEMAval2= ema(close, vfi_shortEMA2)

color_vfi = vfi_showTrend ? vfi_trendColor(value_vfi) : vfi_color(value_vfi)
color_osc = vfi_showFill ? osc_color(value_vfi) : na
color_ma = vfi_showMa ? kMaColor : na


// Drawings

plot_vfi = plot(value_vfi, title="VFI", color=color_vfi, linewidth=1)
plot_fill = plot(0, color=color_vfi, editable=false)
fill(plot_vfi, plot_fill, title="Oscillator Fill", color=color_osc, transp=75) 
hline(vfi_buyLine, color=color.green, title="Buy Line", linewidth=2, linestyle=hline.style_dashed)
hline(vfi_sellLine, color=color.purple, title="Sell Line", linewidth=2, linestyle=hline.style_dashed)
plot(value_ma, title="MA", color=color_ma, linewidth=2)

strategy.entry(id="VFI LE", long=true,  when=crossover(value_vfi,vfi_buyLine)  and ( shortEMAval1 >= longEMAval  ))

//strategy.close(id="VFI LE", comment="Exit",   when=crossunder(value_vfi,vfi_sellLine))
strategy.close(id="VFI LE", comment="TP Exit",   when=crossunder(value_vfi,vfi_sellLine) and close>strategy.position_avg_price)
//strategy.close(id="VFI LE", comment="Exit",   when=  (shortEMAval1 > shortEMAval2 )  and crossunder(close, shortEMAval2))

//stoploss
stopLossVal =   strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01) 
strategy.close(id="VFI LE", comment="SL Exit",   when=crossunder(value_vfi,vfi_sellLine) and close < stopLossVal)