কেল্টনার চ্যানেলের উপর ভিত্তি করে নমনীয় দীর্ঘ এবং সংক্ষিপ্ত ট্রেডিং কৌশল

ATR EMA SMA MA TR
সৃষ্টির তারিখ: 2025-02-10 15:07:12 অবশেষে সংশোধন করুন: 2025-02-10 15:07:12
অনুলিপি: 4 ক্লিকের সংখ্যা: 448
1
ফোকাস
1617
অনুসারী

কেল্টনার চ্যানেলের উপর ভিত্তি করে নমনীয় দীর্ঘ এবং সংক্ষিপ্ত ট্রেডিং কৌশল

ওভারভিউ

এটি একটি নমনীয় ট্রেডিং কৌশল যা কেল্টনার চ্যানেলের উপর ভিত্তি করে তৈরি করা হয়েছে। এই কৌশলটি বহুমুখী দ্বিমুখী ট্রেডিংকে সমর্থন করে, যা চ্যানেলের উর্ধ্ব-নিম্ন ট্র্যাকের উপর মূল্যের উপর নজরদারি করে। কৌশলটির মূল অংশটি হল মুভিং এভারেজ (এমএ) ব্যবহার করে একটি মূল্য চ্যানেল তৈরি করা এবং চ্যানেলের প্রস্থকে গতিশীলভাবে সামঞ্জস্য করার জন্য প্রকৃত তরঙ্গের সাথে মিলিত করা। (এটিআর) যাতে বিভিন্ন বাজারের পরিস্থিতিতে কৌশলটি অভিযোজিত থাকে।

কৌশল নীতি

এই কৌশলটি মূলত নিম্নলিখিত মূলনীতির উপর ভিত্তি করে তৈরি করা হয়েছেঃ

  1. EMA বা SMA দ্বারা মূল্য গণনা কেন্দ্রীয় প্রবণতা, চ্যানেল মধ্যম ট্র্যাক গঠন
  2. এটিআর, টিআর বা রেঞ্জের মাধ্যমে ট্রেনের ট্র্যাকিং ও রেলিংয়ের জন্য ভোল্টেজ রেট গণনা করা হয়
  3. যখন দাম উর্ধ্বমুখী হয় তখন একটি মাল্টি সিগন্যাল আর যখন নিম্নমুখী হয় তখন একটি খালি সিগন্যাল ট্রিগার করে
  4. স্টপ লস ট্রাস্টের একক পদ্ধতি ব্যবহার করে ট্রেডিং কার্যকর করার নির্ভরযোগ্যতা বাড়ানোর জন্য প্রবেশ এবং প্রস্থান
  5. নমনীয় ট্রেডিং মোড সমর্থন করেঃ শুধুমাত্র লভ্যাংশ, শুধুমাত্র শূন্য, বা দ্বি-মুখী ট্রেডিং

কৌশলগত সুবিধা

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

কৌশলগত ঝুঁকি

  1. বাজারের ঝড়ের ঝুঁকি - প্রায়শই মিথ্যা ব্রেকিং সিগন্যাল হতে পারে
  2. স্লাইড পয়েন্টের ঝুঁকি - স্টপ লস ফরোয়ার্ডগুলি কম তরল বাজারে বড় স্লাইড পয়েন্টের মুখোমুখি হতে পারে
  3. ট্রেন্ড রিভার্সনের ঝুঁকি - যদি ট্রেন্ড হঠাৎ পাল্টে যায় তবে বড় ক্ষতি হতে পারে
  4. প্যারামিটার সংবেদনশীলতা - চ্যানেলের প্যারামিটারগুলির পছন্দ কৌশলটির কার্যকারিতার উপর গুরুত্বপূর্ণ প্রভাব ফেলে

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

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

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2022-02-11 00:00:00
end: 2025-02-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy(title = "Jaakko's Keltner Strategy", overlay = true, initial_capital = 10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

// ──────────────────────────────────────────────────────────────────────────────
// ─── USER INPUTS ─────────────────────────────────────────────────────────────
// ──────────────────────────────────────────────────────────────────────────────
length      = input.int(20,     minval=1,  title="Keltner MA Length")
mult        = input.float(2.0,             title="Multiplier")
src         = input(close,                 title="Keltner Source")
useEma      = input.bool(true,             title="Use Exponential MA")
BandsStyle  = input.string(title = "Bands Style", defval  = "Average True Range", options = ["Average True Range", "True Range", "Range"])
atrLength   = input.int(10,                title="ATR Length")

// Choose which side(s) to trade
tradeMode = input.string(title   = "Trade Mode", defval  = "Long Only", options = ["Long Only", "Short Only", "Both"])

// ──────────────────────────────────────────────────────────────────────────────
// ─── KELTNER MA & BANDS ───────────────────────────────────────────────────────
// ──────────────────────────────────────────────────────────────────────────────
f_ma(source, length, emaMode) =>
    maSma = ta.sma(source, length)
    maEma = ta.ema(source, length)
    emaMode ? maEma : maSma

ma    = f_ma(src, length, useEma)
rangeMa = BandsStyle == "True Range" ? ta.tr(true) : BandsStyle == "Average True Range" ? ta.atr(atrLength) : ta.rma(high - low, length)

upper = ma + rangeMa * mult
lower = ma - rangeMa * mult

// ──────────────────────────────────────────────────────────────────────────────
// ─── CROSS CONDITIONS ─────────────────────────────────────────────────────────
// ──────────────────────────────────────────────────────────────────────────────
crossUpper = ta.crossover(src, upper) // potential long signal
crossLower = ta.crossunder(src, lower) // potential short signal

// ──────────────────────────────────────────────────────────────────────────────
// ─── PRICE LEVELS FOR STOP ENTRY (LONG) & STOP ENTRY (SHORT) ─────────────────
// ──────────────────────────────────────────────────────────────────────────────
bprice = 0.0
bprice := crossUpper ? high + syminfo.mintick : nz(bprice[1])

sprice = 0.0
sprice := crossLower ? low - syminfo.mintick : nz(sprice[1])

// ──────────────────────────────────────────────────────────────────────────────
// ─── BOOLEAN FLAGS FOR PENDING LONG/SHORT ─────────────────────────────────────
// ──────────────────────────────────────────────────────────────────────────────
crossBcond = false
crossBcond := crossUpper ? true : crossBcond[1]

crossScond = false
crossScond := crossLower ? true : crossScond[1]

// Cancel logic for unfilled orders (same as original)
cancelBcond = crossBcond and (src < ma or high >= bprice)
cancelScond = crossScond and (src > ma or low <= sprice)

// ──────────────────────────────────────────────────────────────────────────────
// ─── LONG SIDE ────────────────────────────────────────────────────────────────
// ──────────────────────────────────────────────────────────────────────────────
if (tradeMode == "Long Only" or tradeMode == "Both")  // Only run if mode is long or both
    // Cancel unfilled long if invalid
    if cancelBcond
        strategy.cancel("KltChLE")

    // Place long entry
    if crossUpper
        strategy.entry("KltChLE", strategy.long, stop=bprice, comment="Long Entry")

    // If we are also using “Both,” we rely on short side to flatten the long.
    // But if “Long Only,” we can exit on crossLower or do nothing.
    // Let’s do a "stop exit" if in "Long Only" (like the improved version).
    if tradeMode == "Long Only"
        // Cancel unfilled exit
        if cancelScond
            strategy.cancel("KltChLX")

        // Place exit if crossLower
        if crossLower
            strategy.exit("KltChLX", from_entry="KltChLE", stop=sprice, comment="Long Exit")

// ──────────────────────────────────────────────────────────────────────────────
// ─── SHORT SIDE ───────────────────────────────────────────────────────────────
// ──────────────────────────────────────────────────────────────────────────────
if (tradeMode == "Short Only" or tradeMode == "Both") // Only run if mode is short or both
    // Cancel unfilled short if invalid
    if cancelScond
        strategy.cancel("KltChSE")

    // Place short entry
    if crossLower
        strategy.entry("KltChSE", strategy.short, stop=sprice, comment="Short Entry")

    // If “Short Only,” we might do a symmetrical exit approach for crossUpper
    // Or if "Both," going long automatically flattens the short in a no-hedge account.
    // Let's replicate "stop exit" for short side if "Short Only" is chosen:
    if tradeMode == "Short Only"
        // Cancel unfilled exit
        if cancelBcond
            strategy.cancel("KltChSX")

        // Place exit if crossUpper
        if crossUpper
            strategy.exit("KltChSX", from_entry="KltChSE", stop=bprice, comment="Short Exit")

// ──────────────────────────────────────────────────────────────────────────────
// ─── OPTIONAL VISUALS ─────────────────────────────────────────────────────────
// ──────────────────────────────────────────────────────────────────────────────
barcolor(strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : na)

plotshape(    strategy.position_size > 0 and strategy.position_size[1] <= 0, title     = "BUY",  text      = '🚀',  style     = shape.labelup,    location  = location.belowbar,     color     = color.green,     textcolor = color.white,      size      = size.small)

plotshape(    strategy.position_size <= 0 and strategy.position_size[1] > 0,     title     = "SELL",     text      = '☄️',     style     = shape.labeldown,     location  = location.abovebar,     color     = color.red,       textcolor = color.white,     size      = size.small)

plotshape(crossLower, style=shape.triangledown, color=color.red, location=location.abovebar, title="CrossLower Trigger")