ATR ডুয়াল ট্রেইলিং স্টপের উপর ভিত্তি করে ডাইনামিক টেক-প্রফিট এবং স্টপ-লস কৌশল


সৃষ্টির তারিখ: 2024-03-22 13:52:59 অবশেষে সংশোধন করুন: 2024-03-22 13:52:59
অনুলিপি: 1 ক্লিকের সংখ্যা: 616
1
ফোকাস
1617
অনুসারী

ATR ডুয়াল ট্রেইলিং স্টপের উপর ভিত্তি করে ডাইনামিক টেক-প্রফিট এবং স্টপ-লস কৌশল

ওভারভিউ

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

কৌশল নীতি

  1. দুটি ভিন্ন সময়ের (ডিফল্ট 10 এবং 20) এটিআর সূচক গণনা করুন এবং তাদের নিজস্ব সংবেদনশীলতা ফ্যাক্টর (ডিফল্ট 1 এবং 2) দ্বারা দ্বিগুণ করুন যাতে দুটি স্টপ-ওয়েড পাওয়া যায়।
  2. দামের উপরে বা নীচে দুটি স্টপ লাইনের অবস্থানের উপর ভিত্তি করে এবং একটি ব্রেকিংয়ের উপর নির্ভর করে একটি মাল্টি-হেড বা খালি-হেড সংকেত তৈরি করা হয়।
  3. স্টপ-অফ-পাইস গতিশীলভাবে গণনা করা হয় বর্তমান স্টপ-অফ-লাইন সত্তার দৈর্ঘ্যের ১.৬৫ গুণের উপর ভিত্তি করে।
  4. পজিশন খোলার পর, যদি দাম স্টপ লেভেল স্পর্শ করে, তাহলে পজিশন মুনাফা করে।
  5. ইএমএর মতো সূচকগুলি ব্যবহার করে বর্তমান প্রবণতা নির্ধারণ করুন এবং প্রবেশের জন্য একটি রেফারেন্স সরবরাহ করুন।

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

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

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

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

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

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

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

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="UT Bot Strategy", overlay=true)

// Inputs
a1 = input(1, title="Key Value 1 ('This changes the sensitivity')")
c1 = input(10, title="ATR Period 1")
a2 = input(2, title="Key Value 2 ('This changes the sensitivity')")
c2 = input(20, title="ATR Period 2")
h = input(false, title="Signals from Heikin Ashi Candles")

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2019, title="From Year", minval=1970)
 
// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2100, title="To Year", minval=1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate
 
////////////////////////////////////////////////////////////////////////////////

xATR1 = atr(c1)
nLoss1 = a1 * xATR1
xATR2 = atr(c2)
nLoss2 = a2 * xATR2

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=false) : close

xATRTrailingStop1 = 0.0
xATRTrailingStop1 := iff(src > nz(xATRTrailingStop1[1], 0) and src[1] > nz(xATRTrailingStop1[1], 0), max(nz(xATRTrailingStop1[1]), src - nLoss1),
   iff(src < nz(xATRTrailingStop1[1], 0) and src[1] < nz(xATRTrailingStop1[1], 0), min(nz(xATRTrailingStop1[1]), src + nLoss1), 
   iff(src > nz(xATRTrailingStop1[1], 0), src - nLoss1, src + nLoss1)))

xATRTrailingStop2 = 0.0
xATRTrailingStop2 := iff(src > nz(xATRTrailingStop2[1], 0) and src[1] > nz(xATRTrailingStop2[1], 0), max(nz(xATRTrailingStop2[1]), src - nLoss2),
   iff(src < nz(xATRTrailingStop2[1], 0) and src[1] < nz(xATRTrailingStop2[1], 0), min(nz(xATRTrailingStop2[1]), src + nLoss2), 
   iff(src > nz(xATRTrailingStop2[1], 0), src - nLoss2, src + nLoss2)))
 
pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop1[1], 0) and src > nz(xATRTrailingStop1[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop1[1], 0) and src < nz(xATRTrailingStop1[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema1 = ema(src, 1)
above1 = crossover(ema1, xATRTrailingStop1)
below1 = crossover(xATRTrailingStop1, ema1)
buy1 = src > xATRTrailingStop1 and above1 
sell1 = src < xATRTrailingStop1 and below1
barbuy1 = src > xATRTrailingStop1 
barsell1 = src < xATRTrailingStop1 

ema2 = ema(src, 1)
above2 = crossover(ema2, xATRTrailingStop2)
below2 = crossover(xATRTrailingStop2, ema2)
buy2 = src > xATRTrailingStop2 and above2 
sell2 = src < xATRTrailingStop2 and below2
barbuy2 = src > xATRTrailingStop2 
barsell2 = src < xATRTrailingStop2 

plotshape(buy1,  title="Buy 1",  text='Buy 1',  style=shape.labelup,   location=location.belowbar, color=color.green, textcolor=color.white, transp=0, size=size.tiny)
plotshape(sell1, title="Sell 1", text='Sell 1', style=shape.labeldown, location=location.abovebar, color=color.red,   textcolor=color.white, transp=0, size=size.tiny)
plotshape(buy2,  title="Buy 2",  text='Buy 2',  style=shape.labelup,   location=location.belowbar, color=color.green, textcolor=color.white, transp=0, size=size.tiny)
plotshape(sell2, title="Sell 2", text='Sell 2', style=shape.labeldown, location=location.abovebar, color=color.red,   textcolor=color.white, transp=0, size=size.tiny)

barcolor(barbuy1  ? color.green : na)
barcolor(barsell1 ? color.red   : na)
barcolor(barbuy2  ? color.green : na)
barcolor(barsell2 ? color.red   : na)

// Calculate SL and TP levels
candle_size = abs(open - close)
tp_level = close + candle_size *65

// Close long positions if TP is hit
strategy.exit("TP Long", "long", limit=tp_level)

// Close short positions if TP is hit
strategy.exit("TP Short", "short", limit=tp_level)

// Enter long position
strategy.entry("long", strategy.long, when=(buy1 or buy2) and time_cond)

// Enter short position
strategy.entry("short", strategy.short, when=(sell1 or sell2) and time_cond)

//adding ema with width
// Calculate EMA and SMA
ema5 = ema(close, 5)
ema200 = ema(close, 200)
ema21 = ema(close, 21)
ema50 = ema(close, 50)
sma50 = sma(close, 50)

// Plot EMA and SMA with width
plot(ema5, color=color.rgb(130, 235, 139), title="EMA 5", linewidth=1)
plot(ema200, color=color.rgb(243, 246, 249), title="EMA 200", linewidth=2)
plot(ema21, color=color.blue, title="21", linewidth=1)
plot(ema50, color=color.rgb(255, 64, 0), title="EMA 50", linewidth=2)
//plot(sma50, color=color.purple, title="SMA 20", linewidth=2)