এই কৌশলটি এসএমএ, ইএমএ, কামা এবং অন্যান্য একাধিক চলমান গড় ব্যবহার করে, মূল্যের প্রবণতার দিক সনাক্ত করে এবং দামের বিরতির উপর ভিত্তি করে স্টপ লাইন সেট করে একটি ট্রেন্ড ট্র্যাকিং কৌশল পরিচালনা করে। যখন দাম বেড়ে যায়, trails the upper band স্টপ হিসাবে কাজ করে; যখন দাম কমে যায়, trails the নিম্ন সীমা স্টপ হিসাবে কাজ করে। কৌশলটির সুবিধা হ’ল একাধিক চলমান গড়ের সমন্বয়, যা মূল্যের ডেটা সমতল করতে পারে, প্রবণতা সনাক্ত করতে পারে; গতিশীল স্টপ ডিজাইন অত্যধিক সংবেদনশীল স্টপ এড়াতে পারে। কৌশলটির ঝুঁকি হ’ল স্টপ লাইন সেটিংটি খুব সহজ হতে পারে এবং সময়মতো স্টপ করতে পারে না।
এই কৌশলটি KAMA কে ট্রেন্ডের দিকনির্দেশের প্রাথমিক সূচক হিসাবে ব্যবহার করে, কারণ KAMA দামের পরিবর্তনের প্রতি আরও সংবেদনশীল, তাই ঘুরিয়ে দেওয়াকে প্রাথমিকভাবে সনাক্ত করা যায়। একই সময়ে, কৌশলটিতে এসএমএ, ইএমএ এবং অন্যান্য একাধিক চলমান গড়ের সমন্বয় রয়েছে, যা মূল প্রবণতার দিকনির্দেশের জন্য দামের উপর ফিল্টার করতে পারে।
কৌশলটির স্টপ লিনের সেটআপ মূলত মূল্য এবং মুভিং এভারেজের উপর ভিত্তি করে করা হয়। বিশেষত, একটি আপট্রেসিং স্টপ লাইন মুভিং এভারেজের একটি অনুপাতকে বাফারিং হিসাবে যুক্ত করে; একটি ডাউনট্রেসিং স্টপ লাইন মুভিং এভারেজের একটি অনুপাতকে বাফারিং হিসাবে বিয়োগ করে। এইভাবে, মূল্যের বিপরীত হওয়ার সময় অবিলম্বে স্টপ করা সম্ভব।
প্রবেশের শর্ত হল, যখন দাম নীচে থেকে উপরে উঠে যায় এবং উপরের স্টপ লিনকে ভেঙে দেয় তখন বেশি করা; যখন দাম উপরের থেকে নীচে থেকে নীচের স্টপ লিনকে ভেঙে দেয় তখন খালি করা।
এই কৌশলটির সবচেয়ে বড় সুবিধা হ’ল একাধিক মুভিং এভারেজের সমন্বয় দ্বারা প্রবণতা বিচার করার সঠিকতা বাড়ানো এবং মিথ্যা সংকেত হ্রাস করা যায়। একই সময়ে, কৌশলটির স্টপ লিন্ডটি মুভিং এভারেজের গতিশীলতার উপর ভিত্তি করে, যা রিয়েল-টাইম দামের সাথে সামঞ্জস্য করে এবং অপ্রত্যাশিত ঘটনার প্রতিক্রিয়া জানায়।
উপরন্তু, একক সূচক কৌশল তুলনায়, এই কৌশল প্রবণতা অনুসরণ এবং বিরতি কৌশল সুবিধাগুলি একত্রিত করে। প্রবণতা চলাকালীন, সর্বাধিক মুনাফা অর্জন করা যায়; এবং অস্থির চলাকালীন, স্টপ লস সেটিং দ্বারা ক্ষতি হ্রাস করা যেতে পারে।
এই কৌশলটির প্রধান ঝুঁকি হল যে স্টপ লাইন সেটিংটি খুব হালকা হতে পারে এবং সময়মতো স্টপ করা যায় না। কারণ স্টপ লাইনের প্রত্যাহারের অনুপাতটি স্থিরভাবে সেট করা হয়, যদি পরিস্থিতির তীব্র পরিবর্তন হয় এবং সময়মতো স্টপ লাইন আপডেট না করা যায় তবে বড় ক্ষতি হতে পারে।
এছাড়াও, মুভিং এভারেজ নিজেই খুব পিছিয়ে আছে এবং দামের পরিবর্তনের সাথে তাত্ক্ষণিকভাবে প্রতিক্রিয়া জানাতে পারে না। এটি বাজার দ্রুত পাল্টে গেলে সময়মতো ক্ষতি বন্ধ করতে পারে না।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে উন্নত করা যেতে পারেঃ
বিভিন্ন প্যারামিটার সেটিং এর অধীনে স্টপ লিনের অনুপাত পরীক্ষা করা, যাতে আরও ভাল প্যারামিটার সমন্বয় পাওয়া যায়;
বাজারের অস্থিরতার সাথে সামঞ্জস্য রেখে স্টপ লিনের গতিশীল পরিবর্তন করার চেষ্টা করুন;
অন্যান্য সূচক যুক্ত করা, স্টপ বেসিস-এ আরো ভেরিয়েবল যুক্ত করা এবং কৌশলগত অভিযোজনযোগ্যতা বৃদ্ধি করা;
৪. চলমান গড়ের চক্রের প্যারামিটারগুলিকে অপ্টিমাইজ করুন এবং সর্বোত্তম মসৃণ দামের চক্রের সেটিংটি সন্ধান করুন।
এই কৌশলটি সামগ্রিকভাবে বেশ শক্তসমর্থ, বিভিন্ন চলমান গড় সমন্বয় দ্বারা প্রবণতার দিকনির্দেশনা নির্ধারণ করে এবং প্রবণতা পরিচালনার লক্ষ্যে একটি গতিশীল ট্র্যাকিং স্টপ মেশিন ডিজাইন করে। সুবিধাগুলি হ’ল মিথ্যা সংকেত হ্রাস করা যায়, স্টপ হ্রাসের মাধ্যমে ঝুঁকি নিয়ন্ত্রণ করা যায়; অসুবিধা হ’ল স্টপ লাইনটি খুব প্রশস্তভাবে সেট করা যেতে পারে, দ্রুত স্টপ করা যায় না। পরবর্তী অপ্টিমাইজেশন কৌশলটি স্টপ লাইন ডিজাইনে কাজ করা উচিত যাতে বাজারের পরিবর্তনের সাথে গতিশীলভাবে সামঞ্জস্য করা যায়।
/*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))