এলএস ইনস্ট্যান্ট ট্রেন্ড লাইন কৌশল


সৃষ্টির তারিখ: 2023-12-20 16:51:05 অবশেষে সংশোধন করুন: 2023-12-20 16:51:05
অনুলিপি: 0 ক্লিকের সংখ্যা: 938
1
ফোকাস
1621
অনুসারী

এলএস ইনস্ট্যান্ট ট্রেন্ড লাইন কৌশল

ওভারভিউ

এহলস ইনস্ট্যান্ট ট্রেন্ড লাইন কৌশলটি জন এহলস তার বইয়ের স্টক এবং ফিউচারগুলির নিয়ন্ত্রণ বিশ্লেষণ প্যাকেজে প্রস্তাব করেছেন। এই কৌশলটি প্রযুক্তিগত সূচকগুলি ব্যবহার করে একটি স্টক বা ফিউচারের তাত্ক্ষণিক প্রবণতা সনাক্ত করতে এবং প্রবণতা বিপরীত হওয়ার সময় অবস্থানগুলি খোলার জন্য।

কৌশল নীতি

এই কৌশলটির কেন্দ্রবিন্দু হল তাত্ক্ষণিক প্রবণতা রেখা গণনা করা। আইটি রেখার গণনা সূত্রটি নিম্নরূপঃ

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])

এই লাইনটি আইটি লাইনের এক চক্র পিছিয়ে পড়েছে। যখন দামটি পিছিয়ে পড়ে তখন এটি প্রবণতা বিপরীতকরণকে বোঝায়, এটি আরও বেশি করে; যখন দামটি পিছিয়ে পড়ে তখন এটি প্রবণতা বিপরীতকরণকে বোঝায়, এটি খালি করে দেয়।

এছাড়াও, কৌশলটি ঝুঁকি নিয়ন্ত্রণের জন্য একটি স্টপ লস পলিসি নির্ধারণ করে।

সামর্থ্য বিশ্লেষণ

এই কৌশলটির সুবিধাগুলো হলঃ

  1. আইটি লাইন ট্রেন্ডিং ব্যবহার করে, কার্যকরভাবে বাজার শব্দ ফিল্টার করুন এবং সংকেতের গুণমান উন্নত করুন
  2. দ্বিতীয় পর্যায়ের ফিল্টার ব্যবহার করুন, প্যারামিটার অপ্টিমাইজেশান স্থান বড়, উচ্চ সামঞ্জস্যযোগ্য
  3. ট্রেডিং সিগন্যাল তৈরির জন্য পিছিয়ে থাকা লাইনের সাথে মিলিত, যাতে ট্রেন্ডের মধ্যে পুনরাবৃত্তি শূন্য অবস্থানগুলি এড়ানো যায়
  4. স্টপ লস কন্ট্রোল ঝুঁকি সেট করুন, আপনি স্টপ লস অনুপাত পূর্বনির্ধারিত করতে পারেন
  5. কোডের কাঠামো পরিষ্কার, সহজে বোঝা যায় এবং পরিবর্তন করা যায়

ঝুঁকি বিশ্লেষণ

এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ

  1. আইটি লাইন এবং পিছিয়ে পড়া লাইন প্যারামিটারগুলি ভুলভাবে সেট করা হলে ত্রুটিপূর্ণ সংকেত হতে পারে
  2. ভুলভাবে সেট করা স্টপ পয়েন্টের ফলে ক্ষতির মাত্রা খুব বেশি বা খুব বেশি হতে পারে
  3. ট্রেডিং ফ্রিকোয়েন্সি বেশি হতে পারে, ট্রেডিং খরচ মুনাফা প্রভাবিত করে
  4. দীর্ঘ সময় ধরে একীভূত পজিশনে থাকার ফলে মুনাফা হ্রাসের সম্ভাবনা রয়েছে

এই ঝুঁকিগুলি নিম্নলিখিত উপায়ে হ্রাস করা যেতে পারেঃ

  1. মেশিন লার্নিং অ্যালগরিদমের অপ্টিমাইজেশান প্যারামিটারগুলি প্রয়োগ করুন
  2. স্বনির্ধারিত স্টপ পয়েন্ট সেট করুন
  3. ট্রেডিং ফ্রিকোয়েন্সি কমানোর জন্য পজিশন খোলার পরিমাণ যথাযথভাবে সামঞ্জস্য করুন
  4. পজিশন চক্র বন্ধ করুন

অপ্টিমাইজেশান দিক

এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ

  1. ফলাফলের উপর বিভিন্ন ফিল্টার পরামিতিগুলির প্রভাব পরীক্ষা করে এবং সর্বোত্তম পরামিতিগুলি সন্ধান করে
  2. ট্রেডিং সিগন্যালের গুণমান বাড়ানোর জন্য অন্যান্য সূচকগুলির সাথে মিলিত হওয়ার চেষ্টা করুন
  3. পজিশন খোলার লজিক অপ্টিমাইজ করুন, ট্রেন্ড অ্যাক্সেলেশন পর্যায়ে পজিশন বাড়ান
  4. বাজারের অস্থিরতার উপর নির্ভর করে স্টপ পয়েন্টগুলিকে সামঞ্জস্য করার জন্য একটি অভিযোজিত স্টপ কৌশল সেট করুন
  5. ট্রেডিং টাইমিং এবং চক্রের ফলাফলের উপর প্রভাবের জন্য টাইম সিকোয়েন্স বিশ্লেষণ পরিচালনা করুন

উপসংহারে

সামগ্রিকভাবে, ইলেস তাত্ক্ষণিক ট্রেন্ড লাইন কৌশলটি প্রযুক্তিগত সূচকগুলি ব্যবহার করে স্টক / ফিউচারগুলির রিয়েল-টাইম প্রবণতা সনাক্ত করতে এবং প্রবণতা বিপরীত হলে পজিশন খোলার জন্য। এটির কার্যকর গোলমাল ফিল্টারিং, উচ্চ প্যারামিটার সামঞ্জস্যযোগ্যতা, পরিষ্কার সংকেত উত্পাদন লজিক এবং অন্তর্নির্মিত ঝুঁকি নিয়ন্ত্রণের মতো সুবিধাগুলি রয়েছে। প্যারামিটার নির্বাচন, ফিল্টারিং, অবস্থান স্কেল এবং স্টপ লস সামঞ্জস্যের আরও অপ্টিমাইজেশনের মাধ্যমে এই কৌশলটি আরও ভাল পারফরম্যান্স অর্জন করতে পারে। পরিষ্কার কোড কাঠামোটি এটিকে সহজেই বোঝা এবং পরিবর্তন করা সহজ করে তোলে। সব মিলিয়ে, এটি একটি কার্যকর ট্র্যাকিং সিস্টেম যা পরীক্ষার এবং উন্নত করার জন্য মূল্যবান।

কৌশল সোর্স কোড
/*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()