ایلرز انسٹنٹ ٹرینڈ لائن حکمت عملی جان ایلرز نے اپنی کتاب
اس حکمت عملی کا مرکز فوری رجحان لائن (آئی ٹی) کا حساب کتاب ہے۔ آئی ٹی کے لئے فارمولا یہ ہے:
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()