यह रणनीति मात्रात्मक ट्रेडिंग के लिए बाजार में चक्रीय मोड़ बिंदुओं की पहचान करने के लिए वोस प्रेडिक्टिव फिल्टर और एहलर्स इंस्टैंट ट्रेंडलाइन संकेतक को जोड़ती है। वोस फिल्टर शुरुआती खरीद / बिक्री संकेत प्रदान करता है, जबकि ट्रेंडलाइन संकेतक ट्रेंडिंग बाजारों में वोस फिल्टर से भ्रामकता से बचने के लिए समग्र प्रवृत्ति दिशा निर्धारित करता है। यह रणनीति बिटकॉइन जैसे उपकरणों पर अच्छी तरह से काम करती है जो चक्रीय पैटर्न प्रदर्शित करते हैं, जैसा कि अच्छे बैकटेस्ट परिणामों से पता चलता है।
वोस फ़िल्टर जॉन एफ. एहलर्स के लेख
_filt = 0.5 * _s3 * _x1 + _f1 * _s2 * _filt[1] - _s1 * _filt[2]
_voss = _x2 * _filt - _sumC
जहाँ _x1 प्रथम क्रम मूल्य अंतर है; _x2 एक चिकनाई कारक है; _s1, _s2, _s3 फ़िल्टर पैरामीटर हैं; _f1 चक्र पैरामीटर है; _filt फ़िल्टर आउटपुट है; _voss अंतिम आउटपुट है।
फ़िल्टर को एक चिकनी फ़िल्टर के रूप में देखा जा सकता है जो प्रारंभिक संकेत उत्पन्न करने के लिए वर्तमान और पिछले चक्र की जानकारी पर जोर देता है। अंतर्निहित समूह देरी के कारण, यह अन्य संकेतकों से पहले भविष्यवाणी संकेत उत्पन्न करने के लिए भविष्य में देखता है।
प्रवृत्ति रेखा सूचक की गणना इस प्रकार की जाती हैः
_it = (_a-((_a*_a)/4.0))*_src+0.5*_a*_a*_src[1]-(_a-0.75*_a*_a)*_src[2]+2*(1-_a)*nz(_it[1])+-(1-_a)*(1-_a)*nz(_it[2])
यह वास्तविक समय में एक प्रवृत्ति रेखा को चित्रित करता है जो मूल्य कार्रवाई के करीब फिट बैठता है, सटीक रूप से प्रवृत्ति दिशा और शक्ति निर्धारित करता है।
खरीद संकेत तब उत्पन्न होता है जब वोस फ़िल्टर परिणाम के माध्यम से गुजरता है।
विक्रय संकेत तब उत्पन्न होता है जब वोस फ़िल्टर परिणाम के माध्यम से नीचे से गुजरता है।
ट्रेडिंग सिग्नल केवल तभी स्वीकार किए जाते हैं जब ट्रेंडलाइन इंडिकेटर द्वारा पुष्टि की जाती है। यह ट्रेंडिंग बाजारों में वोस फिल्टर से गलत संकेतों से बचता है।
जोखिमों को निम्न द्वारा कम किया जा सकता हैः
इस रणनीति में निम्नलिखित उपायों से सुधार किया जा सकता हैः
यह रणनीति बाजार में चक्रीय मोड़ को प्रभावी ढंग से पहचानने के लिए वोस फिल्टर और प्रवृत्ति संकेतक को जोड़ती है। अनुकूलित मापदंडों और जोखिम नियंत्रण के साथ, यह एक मजबूत मात्रात्मक व्यापार प्रणाली का उत्पादन कर सकती है। यह अच्छी बैकटेस्ट परिणामों के रूप में चक्रीय पैटर्न प्रदर्शित करने वाले उपकरणों पर व्यापक रूप से लागू होती है। कुल मिलाकर, रणनीति में अद्वितीय भविष्य कहने की क्षमताएं हैं, और बहु-आयामी अनुकूलन के माध्यम से सुधार के लिए व्यापक क्षमता है।
/*backtest start: 2023-08-19 00:00:00 end: 2023-09-18 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // A Peek Into the Future // John F. Ehlers // TASC Aug 2019 // Created by e2e4mfck for tradingview.com // Modified by © Bitduke //@version=4 //strategy("Voss Strategy (Filter + IT)", overlay=false, calc_on_every_tick=false,pyramiding=0, default_qty_type=strategy.cash,default_qty_value=1000, currency=currency.USD, initial_capital=1000,commission_type=strategy.commission.percent, commission_value=0.075) // voss filter source = input(close, type = input.source) period = input(20, type = input.integer) predict = input(4, type = input.integer) bandwidth = input(0.25, type = input.float) // it trendline src = input(hl2, title="Source IT") a = input(0.07, title="Alpha", step=0.01) fr = input(false, title="Fill Trend Region") ebc = input(false, title="Enable barcolors") hr = input(false, title="Hide Ribbon") voss_filter (_period, _predict, _bandwidth, _source) => float _filt = 0, float _sumC = 0, float _voss = 0 _PI = 2 * asin(1) _order = 3 * _predict _f1 = cos(2 * _PI / _period) _g1 = cos(_bandwidth * 2 * _PI / _period) _s1 = 1 / _g1 - sqrt(1 / (_g1 * _g1) - 1) _s2 = 1 + _s1 _s3 = 1 - _s1 _x1 = _source - _source[2] _x2 = (3 + _order) / 2 for _i = 0 to (_order - 1) _sumC := _sumC + ((_i + 1) / _order) * _voss[_order - _i] if bar_index <= _order _filt := 0 _voss := 0 else _filt := 0.5 * _s3 * _x1 + _f1 * _s2 * _filt[1] - _s1 * _filt[2] _voss := _x2 * _filt - _sumC [_voss, _filt] [Voss, Filt] = voss_filter(period, predict, bandwidth, source) instantaneous_trendline (_src, _a, _freq, _ebc, _hr) => _it = 0.0 _it := (_a-((_a*_a)/4.0))*_src+0.5*_a*_a*_src[1]-(_a-0.75*_a*_a)*_src[2]+2*(1-_a )*nz(_it[1], ((_src+2*_src[1]+_src[2])/4.0))-(1-_a)*(1-_a)*nz(_it[2], ((_src+2*_src[1]+_src[2])/4.0)) _lag = 2.0*_it-nz(_it[2]) [_it, _lag] [it, lag] = instantaneous_trendline(src, a, fr, ebc, hr) // - - - - - - - - - - // plot(Filt, title = "Filter", style = plot.style_line, color = color.red, linewidth = 2) plot(Voss, title = "Voss", style = plot.style_line, color = color.blue, linewidth = 2) hline(0.0, title = "Zero", linestyle = hline.style_dashed, color = color.black, linewidth = 1) plot(hr? na:it, title="IT Trend", color= fr? color.gray : color.red, linewidth=1) plot(hr? na:lag, title="IT Trigger", color=fr? color.gray : color.blue, linewidth=1) // Strategy Logic longCondition = lag < it and crossover(Voss,Filt) shortCondition = it > lag and crossover(Filt,Voss) strategy.entry("Voss_Short", strategy.short, when=shortCondition) strategy.entry("Voss_Long", strategy.long, when=longCondition) // === Backtesting Dates === thanks to Trost testPeriodSwitch = input(true, "Custom Backtesting Dates") testStartYear = input(2019, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testStartHour = input(0, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0) testStopYear = input(2020, "Backtest Stop Year") testStopMonth = input(2, "Backtest Stop Month") testStopDay = input(29, "Backtest Stop Day") testStopHour = input(0, "Backtest Stop Hour") testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false testPeriod_1 = testPeriod() isPeriod = true // === /END if not isPeriod strategy.cancel_all() strategy.close_all()