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