Diese Strategie implementiert den Trend nach dem Handel auf der Grundlage des Volume Flow Indicators (VFI). Sie beurteilt die Markttrendrichtung durch Berechnung von Preisschwankungen und Volumenänderungen und realisiert niedrige Käufe und hohe Verkäufe.
Berechnung des VFI-Indikators: Berechnung des VFI-Wertes auf der Grundlage logarithmischer Preisänderungen und Volumen und Glättung von Schwankungen durch Glättungstechniken.
Bestimmung der Trendrichtung: Ein Überschreiten von VFI über 0 ist ein Aufwärtssignal, ein Überschreiten unter 0 ist ein Bärensignal.
Handelssignale: Gehen Sie lang, wenn die schnelle EMA über die langsame EMA und die VFI über die Kauflinie kreuzen; schließen Sie, wenn die VFI unter die Verkaufslinie geht.
Stop-Loss: Festlegen eines festen Stop-Loss-Prozentsatzes.
Diese Strategie stützt sich hauptsächlich auf VFI, um die Trendrichtung zu bestimmen, kombiniert mit gleitenden Durchschnitten, um Handelssignale zu generieren. VFI spiegelt die Marktstimmung durch Preisvolatilität und Volumenänderungen wider und ist somit ein Trend-nachfolgender Indikator. Verglichen mit einzelnen Preisindikatoren liefert VFI umfassendere Urteile und identifiziert Trendumkehrpunkte besser und filtert Konsolidierungen aus.
Die VFI ermitteln Trends besser als einzelne Preisindikatoren und filtern Konsolidierungen und falsche Ausbrüche effektiv aus.
Gleitende Durchschnitte liefern ergänzende Beurteilungen und verhindern falsche Signale von FFI in unterschiedlichen Märkten.
Festgelegte Stop-Loss-Verfahren kontrollieren das Risiko und erleichtern das Risikomanagement.
Der Trend folgende Modus erzeugt übermäßige Renditen, ohne Umkehrungen vorherzusagen.
Flexible Parameteranpassung an verschiedene Zeiträume und Produkte.
VFI kann bei erheblichen Schwankungen falsche Signale erzeugen.
Der festgelegte Stop-Loss kann zu breit oder zu eng sein.
Fehlkonfigurierte Ein- und Ausstiegseinstellungen führen zu Über- oder fehlenden Transaktionen.
Der Trend folgt nicht, um Umkehrungen zu erfassen und benötigt rechtzeitige Stop-Loss.
Falsche Parameter verursachen einen vorzeitigen oder verzögerten Einstieg.
Optimierung der VFI-Berechnung durch Anpassung der Parameter.
Feinabstimmungszeiträume des gleitenden Durchschnitts für bessere Signalzeit.
Verwenden Sie dynamischen Stop-Loss anstelle eines festen.
Hinzufügen anderer Indikatoren zu Filtersignalen.
Optimieren Sie die Parameter je nach Zeitrahmen.
Die Robustheit von verschiedenen Produkten wird getestet.
Diese Strategie bestimmt die Trendrichtung mit VFI und verwendet gleitende Durchschnitte, um falsche Signale auszufiltern. Sie realisiert niedrige Käufe / hohe Verkäufe durch Trendverfolgung, ohne Umkehrungen vorherzusagen. Der Vorteil liegt in ihrer überlegenen Trenddetektion gegenüber einzelnen Preisindikatoren und der Fähigkeit, Konsolidierungen auszufiltern. Das Hauptrisiko ist die Erzeugung falscher Signale während der Schwankungen. Die Optimierung von Parametern, das Hinzufügen zusätzlicher Indikatoren und Stop-Loss-Techniken kann ihre Stabilität verbessern. Insgesamt kann diese VFI-basierte Strategie mit Parameter-Tuning und Stop-Loss-Optimierungen zu einem zuverlässigen Trendverfolgungssystem werden.
/*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)