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.
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.
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.
Handelssignale: Schnelle EMA überschreitet die langsame EMA, und VFI überschreitet die Kauflinie; unter VFI überschreitet die Verkauflinie und legt die Position frei.
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.
Der VFI-Indikator beurteilt Trends besser als ein einzelner Preisindikator und filtert so Schwankungen und falsche Durchbrüche.
Das Gleichlinien-System unterstützt das Urteilsvermögen, um zu vermeiden, dass der VFI-Indikator falsche Signale in der bewegten Stadt sendet.
Die Festlegung eines festen Stop-Loss-Punktes für die Risikokontrolle ist für die Risikomanagement geeignet.
Trend-Tracking-Modell, ohne zu erraten, die Marktwendepunkte, Trends zu verfolgen, um zusätzliche Gewinne zu erzielen.
Die Parameter sind flexibel eingestellt und können je nach Markt für verschiedene Zyklen und Sorten angepasst werden.
Die VFI-Indikatoren könnten bei starken Marktschwankungen falsche Signale abgeben.
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.
Wenn die Parameter für den Kauf und Verkauf falsch eingestellt sind, kann dies zu häufigen Transaktionen oder fehlenden Belegen führen.
Die Trend-Tracking-Strategie kann keine Umkehrung erfassen, und es ist notwendig, den Verlust rechtzeitig zu stoppen.
Die falschen Parameter können zu früh oder zu spät führen.
Anpassung der VFI-Parameter zur Optimierung der Kennzahlen.
Anpassung der Durchschnittszyklus und Optimierung der Signalzeit.
Dynamische Anpassung der Stop-Loss-Punkte und Optimierung der Stop-Loss-Methode.
In Kombination mit anderen Indikatoren wird die Signalqualität verbessert.
Optimierte Parameterkombinationen für große und kleine Perioden.
Tests zur Erhöhung der Anpassungsfähigkeit der Parameter.
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.
/*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)