ایلرز کی فوری رجحان لائن حکمت عملی کو جان ایلرز نے اپنے کتابچے کے اسٹاک اور فیوچر کے کنٹرول تجزیہ کٹ میں پیش کیا ہے۔ یہ حکمت عملی تکنیکی اشارے کا استعمال اسٹاک یا فیوچر کے فوری رجحانات کی نشاندہی کرنے کے لئے کرتی ہے اور جب رجحان الٹ جاتا ہے تو پوزیشن کھولتا ہے۔
اس حکمت عملی کا مرکز فوری طور پر رجحان لائن کی حساب سے ہے. آئی ٹی لائن کا حساب کتاب فارمولہ مندرجہ ذیل ہے:
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) ، جس کا حساب کتاب فارمولا ہے:
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()