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