एहलर्स इंस्टैंट ट्रेंडलाइन रणनीति को जॉन एहलर्स ने अपनी पुस्तक
इस रणनीति का मूल तात्कालिक प्रवृत्ति रेखा (आईटी) की गणना है। आईटी के लिए सूत्र हैः
it := (a-((a*a)/4.0))*src+0.5*a*a*src[1]-(a-0.75*a*a)*src[2]+2*(1-a )*it[1]-(1-a )*(1-a )*it[2]
जहां src कीमत है, a एक चिकनाई कारक है, डिफ़ॉल्ट 0.07 है। यह सूत्र एक दूसरे क्रम का फ़िल्टर है जो कीमत को चिकना कर सकता है और रुझान उत्पन्न कर सकता है।
एक अन्य प्रमुख संकेतक विलंब रेखा है, जिसकी गणना निम्नानुसार की जाती हैः
lag = 2.0 * it - nz(it[2])
लेग लाइन आईटी लाइन से एक बार पीछे है. जब कीमत लेग लाइन से ऊपर जाती है, तो यह ऊपर की ओर ब्रेकआउट का संकेत देती है, लंबी हो जाती है. जब कीमत लेग लाइन से नीचे जाती है, तो यह नीचे की ओर ब्रेकआउट का संकेत देती है, छोटी हो जाती है.
इसके अतिरिक्त, रणनीति जोखिमों को नियंत्रित करने के लिए स्टॉप लॉस ऑर्डर सेट करती है।
इस रणनीति के लाभों में निम्नलिखित शामिल हैंः
इस रणनीति के साथ कुछ जोखिम भी हैंः
इन जोखिमों को निम्न द्वारा कम किया जा सकता हैः
इस रणनीति को निम्नलिखित पहलुओं में और अधिक अनुकूलित किया जा सकता हैः
कुल मिलाकर, एहलर इंस्टैंट ट्रेंडलाइन रणनीति स्टॉक / वायदा और खुले पदों में वास्तविक समय के रुझानों की पहचान करने के लिए तकनीकी संकेतकों का उपयोग करती है जब रुझान उलट जाते हैं। इसमें प्रभावी शोर फ़िल्टरिंग, उच्च पैरामीटर ट्यूनिंग, स्पष्ट सिग्नल जनरेशन लॉजिक और शामिल जोखिम नियंत्रण के फायदे हैं। पैरामीटर चयन, सिग्नल फ़िल्टरिंग, स्थिति आकार और स्टॉप लॉस ट्यूनिंग पर आगे अनुकूलन के साथ, यह रणनीति और भी बेहतर प्रदर्शन प्राप्त कर सकती है। स्पष्ट कोड संरचना भी इसे समझने और संशोधित करने में आसान बनाती है। सारांश में, यह परीक्षण और सुधार के लायक एक कुशल प्रवृत्ति प्रणाली है।
/*backtest start: 2022-12-13 00:00:00 end: 2023-12-19 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Ehlers Instantaneous Trendline Strategy", shorttitle = "Ehlers Instantaneous Trendline Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, backtest_fill_limits_assumption = 1) src = input(hl2, title="Source") a = input(0.07, title="Alpha", step=0.01) fr = input(false, title="Fill Trend Region") it = na if (na(it[2]) or na(it[1])) it := (src + 2 * src[1] + src[2]) / 4.0 else it := (a-((a*a)/4.0))*src+0.5*a*a*src[1]-(a-0.75*a*a)*src[2]+2*(1-a )*it[1]-(1-a )*(1-a )*it[2] lag = 2.0 * it - nz(it[2]) rngFrac = input(0.35) revPct = input(0.015) stopType = input(title="Stop type", defval = "stop-order", options = ["stop-order", "market-order", "None"]) diff = input(0.5, title = "Spread") LongPrice(p) => LongPrice = diff == 0 ? p : floor(p / diff) * diff ShortPrice(p) => ShortPrice = diff == 0 ? p : ceil(p / diff) * diff strategy.cancel_all() reverseTrade = false if stopType == "market-order" if strategy.position_size > 0 and close < strategy.position_avg_price * (1 - revPct) strategy.order("StopLoss open short", strategy.short, 2 * strategy.position_size, limit = close - 2 * diff) reverseTrade := true if strategy.position_size < 0 and close > strategy.position_avg_price * (1 + revPct) strategy.order("StopLoss open long", strategy.long, -2 * strategy.position_size, limit = close + 2 * diff) reverseTrade := true if lag > it and not reverseTrade price = LongPrice(max(close - (high - low) * rngFrac, low)) if strategy.position_size <= 0 strategy.order("Open long", strategy.long, strategy.equity / price - strategy.position_size, limit = price) if stopType == "stop-order" strategy.order("StopLoss open long", strategy.short, 2 * strategy.equity / price, stop = ShortPrice(price * (1 - revPct))) else if stopType == "stop-order" strategy.order("StopLoss open short", strategy.short, 2 * strategy.position_size, stop = ShortPrice(strategy.position_avg_price * (1 - revPct))) if lag < it and not reverseTrade price = ShortPrice(min(close - (high - low) * rngFrac, high)) if strategy.position_size >= 0 strategy.order("Open short", strategy.short, strategy.equity / price + strategy.position_size, limit = price) if stopType == "stop-order" strategy.order("StopLoss open short", strategy.long, 2 * strategy.equity / price, stop = LongPrice(price * (1 + revPct))) else if stopType == "stop-order" strategy.order("StopLoss open long", strategy.long, -2 * strategy.position_size, stop = LongPrice(strategy.position_avg_price * (1 + revPct))) itPlot=plot(it, color=red, linewidth=1, title="Trend") lagPlot=plot(lag, color=blue, linewidth=1, title="Trigger") fill(itPlot, lagPlot, it < lag ? green : red, transp=70) // === Backtesting Dates === testPeriodSwitch = input(false, "Custom Backtesting Dates") testStartYear = input(2018, "Backtest Start Year") testStartMonth = input(9, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testStartHour = input(0, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0) testStopYear = input(2018, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(14, "Backtest Stop Day") testStopHour = input(14, "Backtest Stop Hour") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false isPeriod = testPeriodSwitch == true ? testPeriod() : true // === /END if not isPeriod strategy.cancel_all() strategy.close_all()