Strategi ini didasarkan pada indikator volume transaksi (VFI) untuk melakukan perdagangan pelacakan tren. Strategi ini menilai arah tren pasar dengan menghitung fluktuasi harga saham dan perubahan volume transaksi, untuk mencapai harga murah dan harga tinggi.
Menghitung Indeks VFI: Menghitung nilai VFI berdasarkan perubahan logarithmik harga saham dan volume transaksi, menghilangkan getaran dengan pengolahan halus.
Menentukan arah tren: Akses 0 di atas indikator VFI adalah sinyal bullish, akses 0 di bawah adalah sinyal bearish.
Sinyal perdagangan: EMA cepat melewati EMA lambat, dan VFI melakukan lebih banyak saat melewati garis masuk; Di bawah VFI melewati garis keluar ketika posisi kosong.
Metode Stop Loss: Tetapkan rasio Stop Loss tetap.
Strategi ini terutama mengandalkan indikator VFI untuk menentukan arah tren, dengan sistem rata-rata untuk mengirim sinyal perdagangan. Indikator VFI mencerminkan sentimen pasar melalui fluktuasi harga saham dan perubahan volume perdagangan, merupakan indikator pelacakan tren. Dibandingkan dengan indikator harga tunggal, penilaian indikator VFI lebih komprehensif dan dapat lebih baik mengidentifikasi titik-titik perubahan tren, menyaring getaran.
Indikator VFI menilai tren lebih baik daripada indikator harga tunggal, yang dapat secara efektif menyaring pasar yang bergoyang dan false breaks.
Sistem garis rata membantu penilaian untuk menghindari sinyal VFI yang salah di kota yang bergejolak.
Menetapkan risiko pengendalian titik berhenti tetap, yang membantu dalam manajemen risiko.
Menggunakan mode trend tracking, tanpa harus menebak titik balik pasar, trend tracking dapat menghasilkan keuntungan ekstra.
Pengaturan parameter fleksibel, dapat disesuaikan parameter sesuai dengan pasar, menyesuaikan dengan siklus yang berbeda dan varietas.
Indikator VFI dapat memberikan sinyal yang salah dalam pasar yang sangat bergolak.
Stop loss tetap mungkin terlalu besar atau terlalu kecil, menyebabkan stop loss terlalu dini atau terlalu terlambat.
Jika parameter pembelian dan penjualan tidak disetel dengan benar, mungkin akan menyebabkan transaksi yang sering terjadi atau kehilangan formulir.
Strategi pelacakan tren tidak dapat menangkap reversal, dan membutuhkan stop loss yang tepat waktu.
Parameter yang salah dapat menyebabkan masuk terlalu dini atau terlalu terlambat.
Mengatur parameter VFI, mengoptimalkan perhitungan indikator.
Mengatur siklus rata-rata, mengoptimalkan waktu sinyal.
Dinamiskan titik-titik penghentian, optimalkan cara penghentian.
Dengan penyaringan indikator lainnya, kualitas sinyal meningkat.
Kombinasi parameter yang dioptimalkan untuk siklus besar dan kecil.
Uji kekuatan parameter dari berbagai varietas untuk meningkatkan adaptasi parameter.
Strategi ini didasarkan pada indikator VFI untuk menentukan arah tren, dengan sistem rata-rata yang digabungkan dengan sinyal kesalahan penyaring. Melalui pelacakan tren, Anda dapat mencapai harga rendah dan harga tinggi, tanpa perlu memprediksi titik balik tertentu. Keuntungan strategi adalah menilai tren lebih baik daripada indikator harga tunggal, yang dapat secara efektif menyaring getaran. Risiko utama adalah kemungkinan sinyal salah di pasar yang bergolak.
/*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)