यह रणनीति ट्रेडिंग वॉल्यूम इंडिकेटर (VFI) के आधार पर ट्रेडिंग ट्रेंड को ट्रैक करने के लिए बनाई गई है। यह रणनीति शेयर की कीमतों में उतार-चढ़ाव और ट्रेडिंग वॉल्यूम में बदलाव की गणना करके बाजार की प्रवृत्ति की दिशा का आकलन करती है, जिससे कम खरीद और उच्च बिक्री होती है।
VFI सूचकांक की गणना करेंः स्टॉक मूल्य और ट्रेड वॉल्यूम में आनुपातिक परिवर्तन के आधार पर VFI मान की गणना करें, चिकनी प्रसंस्करण के माध्यम से उतार-चढ़ाव को हटा दें।
प्रवृत्ति की दिशा का निर्धारण करेंः वीएफआई संकेतक पर 0 अक्ष को उछाल संकेत के रूप में और 0 अक्ष को गिरावट संकेत के रूप में देखें।
ट्रेडिंग सिग्नलः तेजी से ईएमए पर धीमी गति से ईएमए, और वीएफआई पर खरीदने के लिए लाइन पर अधिक; वीएफआई के नीचे बेचने के लिए लाइन पर सपाट।
स्टॉप लॉस मोडः एक निश्चित स्टॉप लॉस अनुपात सेट करें
यह रणनीति मुख्य रूप से प्रवृत्ति की दिशा का निर्धारण करने के लिए वीएफआई सूचक पर निर्भर करती है, जो ट्रेडिंग सिग्नल भेजने के लिए एक समान रेखा प्रणाली के साथ काम करती है। वीएफआई सूचक शेयर मूल्य में उतार-चढ़ाव और व्यापार की मात्रा में बदलाव के माध्यम से बाजार की भावना को दर्शाता है, एक प्रवृत्ति ट्रैकिंग सूचक है। एकल मूल्य सूचक की तुलना में, वीएफआई सूचक निर्णय अधिक व्यापक हैं, जो प्रवृत्ति के मोड़ को बेहतर ढंग से पहचानते हैं और झटके को फ़िल्टर करते हैं।
वीएफआई सूचकांक एक एकल मूल्य सूचकांक की तुलना में प्रवृत्ति को बेहतर ढंग से पहचानता है, जो अस्थिर बाजारों और झूठे ब्रेकडाउन को प्रभावी ढंग से फ़िल्टर करता है।
सम-रेखा प्रणाली निर्णय में सहायता करती है, जिससे 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)