Эта стратегия основана на индикаторе объема торгов (VFI) для осуществления трендовых сделок. Стратегия определяет направление рыночных тенденций путем расчета колебаний цен на акции и изменений объема торгов, чтобы достичь низких покупок и высоких продаж.
Расчет показателя VFI: значение VFI рассчитывается на основе логистических изменений цен на акции и объемов сделок, устраняя колебания с помощью плавной обработки.
Определение направления тренда: проход по оси 0 на VFI является положительным сигналом, а по оси 0 - отрицательным сигналом.
Торговый сигнал: быстрый EMA с медленным EMA, и VFI с большим при покупке входящей линии; при продаже выходящей линии VFI с равным положением.
Способ остановки убытков: установить фиксированную остановку убытков.
Эта стратегия основывается на VFI-индикаторе для определения направления тенденции, который в сочетании с равнолинейной системой посылает торговые сигналы. VFI-индикатор отражает рыночные настроения через колебания цен на акции и изменения объема торгов.
Индекс VFI оценивает тенденции лучше, чем единый ценовой индикатор, который эффективно отфильтровывает рыночные колебания и ложные прорывы.
Система равнолинейной оценки помогает избежать ошибочных сигналов от VFI-индекса в условиях колебаний.
Установление фиксированной точки остановки контроля риска, полезное для управления рисками.
Используя модель отслеживания тенденций, можно получить дополнительную прибыль от отслеживания тенденций без необходимости угадывать рыночные поворотные моменты.
Настройка параметров гибкая, параметры могут быть скорректированы в зависимости от рынка, чтобы адаптироваться к различным циклам и сортам.
В условиях значительных колебаний на рынке, VFI может подавать ошибочные сигналы.
Фиксированные точки остановки могут быть слишком большими или слишком маленькими, что приводит к преждевременной или поздней остановке.
Если параметры покупки и продажи установлены неправильно, это может привести к частым сделкам или пропущенным бланкам.
Тренд-трекерская стратегия не может уловить обратный ход, и нужно своевременно остановить убытки.
Неправильные параметры могут привести к раннему или позднему зачислению.
Настройка параметров VFI, оптимизация расчета показателей.
Регулирование цикла средней линии, оптимизация времени подачи сигнала.
Динамическая настройка точки остановки, оптимизация способа остановки.
В сочетании с другими индикаторами фильтрации, улучшение качества сигнала.
Оптимизация параметров для больших и малых циклов.
Тестирование жизнеспособности параметров различных сортов, повышение адаптивности параметров.
Стратегия основана на показателях VFI, чтобы определить направление тенденции, в сочетании с системой равных линий, чтобы отфильтровать сигналы погрешности. Посредством отслеживания тенденции можно достичь низких и высоких цен, без необходимости прогнозирования конкретных обратных точек. Преимущество стратегии заключается в том, что она определяет тенденцию, которая лучше, чем один показатель цены, и эффективно отфильтровывает колебания. Основной риск заключается в том, что в колеблющемся рынке может быть выпущен ошибочный сигнал.
/*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)