এহেলার্স ইনস্ট্যান্ট ট্রেন্ডলাইন কৌশলটি জন এহেলার্স তার বই
এই কৌশলটির মূলটি হল তাত্ক্ষণিক ট্রেন্ডলাইন (আইটি) গণনা করা। আইটি জন্য সূত্রটি হলঃ
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()