এই কৌশলটি মূল্যের প্রবণতা দিক চিহ্নিত করতে এসএমএ এবং ইএমএর মতো একাধিক চলমান গড়কে একত্রিত করে এবং প্রবণতা অনুসরণকারী কৌশল ডিজাইনের জন্য মূল্যের অগ্রগতির উপর ভিত্তি করে স্টপ লস লাইন সেট করে। যখন দাম বেড়ে যায়, এটি স্টপ লস হিসাবে উপরের ব্যান্ডটি অনুসরণ করে; যখন দাম কমে যায়, এটি স্টপ লস হিসাবে নীচের সীমাটি অনুসরণ করে। কৌশলটির সুবিধা হ'ল একাধিক চলমান গড়ের সংমিশ্রণটি মূল্যের ডেটা মসৃণ করতে এবং প্রবণতা সনাক্ত করতে পারে; গতিশীল স্টপ লস ডিজাইন অত্যধিক সংবেদনশীল স্টপগুলি এড়ায়। কৌশলটির ঝুঁকি হ'ল স্টপ লস লাইনের সেটিংটি সময়মতো হ্রাস বন্ধ করতে খুব আলগা হতে পারে।
এই কৌশলটি প্রবণতা দিক নির্ধারণের ভিত্তি হিসাবে কামা ব্যবহার করে, কারণ কামা মূল্য পরিবর্তনের প্রতি আরও সংবেদনশীলভাবে প্রতিক্রিয়া জানায় এবং আগাম ঘুরতে পারে। একই সাথে, কৌশলটিতে দামগুলি ফিল্টার করতে এবং মূল প্রবণতা দিকগুলি সনাক্ত করতে এসএমএ এবং ইএমএর মতো অন্যান্য একাধিক চলমান গড়ের সংমিশ্রণ রয়েছে।
স্ট্র্যাটেজিটির স্টপ-লস লাইন সেটিং মূল্যের উপর ভিত্তি করে এবং চলমান গড়ের উপর ভিত্তি করে। বিশেষত, আপগ্রেডিং ট্রেইলিং স্টপ লস লাইন হল চলমান গড় প্লাস একটি অনুপাত বাফার হিসাবে; ডাউনগ্রেডিং ট্রেইলিং স্টপ লস লাইন হল চলমান গড় বিয়োগ একটি অনুপাত বাফার হিসাবে। এটি যখন দাম বিপরীত হয় তখন তাত্ক্ষণিক স্টপ লসের অনুমতি দেয়।
এন্ট্রি শর্তগুলি দীর্ঘ হয় যখন দামগুলি নীচে থেকে উপরের স্টপ লস লাইনটি অতিক্রম করে; সংক্ষিপ্ত যখন দামগুলি উপরের থেকে নীচের দিকে ডাউনসাইড স্টপ লস লাইনটি অতিক্রম করে।
এই কৌশলটির সবচেয়ে বড় সুবিধা হ'ল একাধিক চলমান গড়ের সংমিশ্রণে, প্রবণতা বিচারের নির্ভুলতা উন্নত করা যায় এবং মিথ্যা সংকেত হ্রাস করা যায়। একই সাথে, কৌশলটির স্টপ লস লাইন চলমান গড়ের উপর ভিত্তি করে গতিশীলভাবে পরিবর্তিত হয়, যা রিয়েল টাইমে সামঞ্জস্য করতে পারে এবং আকস্মিক ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে পারে।
এছাড়াও, একক সূচক কৌশলগুলির তুলনায়, এই কৌশলটি প্রবণতা ট্র্যাকিং এবং অগ্রগতি কৌশলগুলির সুবিধাগুলি একত্রিত করে। একটি প্রবণতা বাজারে, এটি মুনাফা সর্বাধিক করতে পারে; যখন একটি whipsaw বাজারে, এটি স্টপ লস সেটিংসের মাধ্যমে ক্ষতি হ্রাস করতে পারে।
এই কৌশলটির প্রধান ঝুঁকি হ'ল স্টপ লস লাইন সেটিংটি সময়মতো স্টপ লস বন্ধ করতে খুব শিথিল হতে পারে। এর কারণ হ'ল স্টপ লস লাইনের পুনরুদ্ধার অনুপাত স্থির থাকে, যদি বাজারে একটি শক্তিশালী পরিবর্তন হয় তবে স্টপ লস লাইনটি সময়মতো আপডেট করা যায় না, যা বৃহত্তর ক্ষতির দিকে পরিচালিত করতে পারে।
উপরন্তু, মুভিং গড় নিজেই উচ্চ hysteresis আছে এবং মূল্য পরিবর্তন অবিলম্বে প্রতিক্রিয়া করতে পারে না। এই এছাড়াও সময় যখন বাজার দ্রুত বিপরীত ক্ষতি বন্ধ করতে ব্যর্থ হতে পারে।
কৌশলটি নিম্নলিখিত দিকগুলিতে অপ্টিমাইজ করা যেতে পারেঃ
স্টপ লস লাইনের অনুপাতের জন্য বিভিন্ন প্যারামিটার সেটিং পরীক্ষা করে আরও ভাল প্যারামিটার সংমিশ্রণ খুঁজে পাওয়া যায়;
বাজারের ওঠানামা অনুযায়ী স্টপ লস লাইনকে গতিশীলভাবে পরিবর্তন করার চেষ্টা করুন।
মূল্যায়ন করার জন্য অন্যান্য সূচক বাড়ানো, কৌশলটির অভিযোজনযোগ্যতা উন্নত করার জন্য স্টপ লস বেসে আরও ভেরিয়েবল প্রবর্তন করা;
দাম সুগম করার জন্য সর্বোত্তম চক্র সেটিং খুঁজে পেতে চলমান গড়ের চক্র পরামিতিগুলি অনুকূল করুন।
সামগ্রিকভাবে, এই কৌশলটি বেশ শক্তিশালী, ট্রেন্ডের দিক নির্ধারণের জন্য একাধিক চলমান গড়ের সংমিশ্রণ এবং প্রবণতা অনুসরণ করার লক্ষ্যে একটি গতিশীল ট্রেলিং স্টপ লস প্রক্রিয়া ডিজাইন করা। সুবিধাগুলি হ'ল এটি মিথ্যা সংকেতগুলি হ্রাস করতে পারে, স্টপ লসের মাধ্যমে ঝুঁকি নিয়ন্ত্রণ করতে পারে; অসুবিধাটি হ'ল স্টপ লস লাইনটি দ্রুত হ্রাস বন্ধ করতে খুব প্রশস্ত সেট করা যেতে পারে। কৌশলটি অনুকূল করার পরবর্তী পদক্ষেপটি স্টপ লস লাইনের নকশায় মনোনিবেশ করা উচিত যাতে এটি বাজারের পরিবর্তন অনুযায়ী গতিশীলভাবে সামঞ্জস্যযোগ্য হয়।
/*backtest start: 2023-02-22 00:00:00 end: 2024-02-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Atlantean Trend Signal BUY SELL Strategy', overlay=true) ma_length = input.int(title='Moving Average Length', minval=1, defval=3) percent = input.float(3.3, 'STOP LOSS Percent', step=0.1, minval=0) src = input(title='Source', defval=close) mav = input.string(title="Moving Average Type", defval="KAMA", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL", "KAMA"]) T3a1 = 0.7 _type = false //input(false, title='Activate Moving Average Screening Mode') _type1 = false //input(false, title='Activate Moving Average Color Change Screening Mode') activateScreener = input.bool(false, title="Activate Screener?") showsignallabels = input(title='Show Signal Labels?', defval=true) Var_Func(src, ma_length) => valpha = 2 / (ma_length + 1) vud1 = src > src[1] ? src - src[1] : 0 vdd1 = src < src[1] ? src[1] - src : 0 vUD = math.sum(vud1, 9) vDD = math.sum(vdd1, 9) vCMO = nz((vUD - vDD) / (vUD + vDD)) VAR = 0.0 VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1]) VAR VAR = Var_Func(src, ma_length) DEMA = 2 * ta.ema(src, ma_length) - ta.ema(ta.ema(src, ma_length), ma_length) Wwma_Func(src, ma_length) => wwalpha = 1 / ma_length WWMA = 0.0 WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1]) WWMA WWMA = Wwma_Func(src, ma_length) // KAMA Calculation Kama_Func(src, ma_length) => xvnoise = math.abs(src - src[1]) nfastend = 0.666 nslowend = 0.0645 nsignal = math.abs(src - src[ma_length]) nnoise = math.sum(xvnoise, ma_length) nefratio = nnoise != 0 ? nsignal / nnoise : 0 nsmooth = math.pow(nefratio * (nfastend - nslowend) + nslowend, 2) nAMA = 0.0 nAMA := nz(nAMA[1]) + nsmooth * (src - nz(nAMA[1])) nAMA Zlema_Func(src, ma_length) => zxLag = ma_length / 2 == math.round(ma_length / 2) ? ma_length / 2 : (ma_length - 1) / 2 zxEMAData = src + src - src[zxLag] ZLEMA = ta.ema(zxEMAData, ma_length) ZLEMA ZLEMA = Zlema_Func(src, ma_length) Tsf_Func(src, ma_length) => lrc = ta.linreg(src, ma_length, 0) lrc1 = ta.linreg(src, ma_length, 1) lrs = lrc - lrc1 TSF = ta.linreg(src, ma_length, 0) + lrs TSF TSF = Tsf_Func(src, ma_length) HMA = ta.wma(2 * ta.wma(src, ma_length / 2) - ta.wma(src, ma_length), math.round(math.sqrt(ma_length))) T3e1 = ta.ema(src, ma_length) T3e2 = ta.ema(T3e1, ma_length) T3e3 = ta.ema(T3e2, ma_length) T3e4 = ta.ema(T3e3, ma_length) T3e5 = ta.ema(T3e4, ma_length) T3e6 = ta.ema(T3e5, ma_length) T3c1 = -T3a1 * T3a1 * T3a1 T3c2 = 3 * T3a1 * T3a1 + 3 * T3a1 * T3a1 * T3a1 T3c3 = -6 * T3a1 * T3a1 - 3 * T3a1 - 3 * T3a1 * T3a1 * T3a1 T3c4 = 1 + 3 * T3a1 + T3a1 * T3a1 * T3a1 + 3 * T3a1 * T3a1 T3 = T3c1 * T3e6 + T3c2 * T3e5 + T3c3 * T3e4 + T3c4 * T3e3 getMA(src, ma_length) => ma = 0.0 ma := switch mav 'SMA' => ta.sma(src, ma_length) 'EMA' => ta.ema(src, ma_length) 'WMA' => ta.wma(src, ma_length) 'DEMA' => DEMA 'TMA' => ta.sma(ta.sma(src, math.ceil(ma_length / 2)), math.floor(ma_length / 2) + 1) 'VAR' => VAR 'WWMA' => WWMA 'ZLEMA' => ZLEMA 'TSF' => TSF 'HULL' => HMA 'TILL' => T3 'KAMA' => Kama_Func(src, ma_length) ma ALL = getMA(src, ma_length) exMov = ALL fark = exMov * percent * 0.01 longStop = exMov - fark longStopPrev = nz(longStop[1], longStop) longStop := exMov > longStopPrev ? math.max(longStop, longStopPrev) : longStop shortStop = exMov + fark shortStopPrev = nz(shortStop[1], shortStop) shortStop := exMov < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and exMov > shortStopPrev ? 1 : dir == 1 and exMov < longStopPrev ? -1 : dir MOST = dir == 1 ? longStop : shortStop cro = _type and _type1 ? ta.crossover(exMov, exMov[1]) : _type ? ta.crossover(close, exMov) : ta.crossover(exMov, MOST) cru = _type and _type1 ? ta.crossunder(exMov, exMov[1]) : _type ? ta.crossunder(close, exMov) : ta.crossunder(exMov, MOST) direction = 0 direction := cro ? 1 : cru ? -1 : direction[1] col1 = exMov > exMov[1] col3 = exMov < exMov[1] colorM = col1 and _type and _type1 ? color.rgb(14, 241, 52) : col3 and _type and _type1 ? color.red : color.new(#00bcd4, 0) if (cro) strategy.entry('LONG', strategy.long) if (cru) strategy.close('LONG') plot(_type ? na : MOST, color=color.new(color.maroon, 0), linewidth=3, title='MOST') plot(exMov, color=colorM, linewidth=2, title='exMov') plotshape(cro and showsignallabels, title='BUY', text='BUY', location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.new(#00bcd4, 0), textcolor=color.new(color.white, 0)) plotshape(cru and showsignallabels, title='SELL', text='SELL', location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.new(#e91e63, 0), textcolor=color.new(color.white, 0))