ট্রিপল এক্সপোনেনশিয়াল মুভিং গড় কনভার্জেন্স ডিভার্জেন্স এবং আপেক্ষিক শক্তি সূচক একত্রিত 1-মিনিট চার্ট ক্রিপ্টোকারেন্সি পরিমাণগত ট্রেডিং কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৪-০৩-২৯ ১১ঃ১৬ঃ১০
ট্যাগঃ

img

সারসংক্ষেপ

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

কৌশলগত নীতি

কৌশলটি বিভিন্ন পরামিতি সহ তিনটি এমএসিডি সূচক ব্যবহার করেঃ 5/13/34 এর দ্রুত লাইন সময়কাল এবং 8/21/144 এর ধীর লাইন সময়কাল। এটি এমএসিডি মানগুলি পেতে তাদের মধ্যে পার্থক্য গণনা করে। এই তিনটি এমএসিডি মানগুলি গড় হয় এবং চূড়ান্ত এমএসিডি হিস্টোগ্রামটি গড় এমএসিডি থেকে সিগন্যাল মান (এমএসিডি এর এন-পরিয়ড ইএমএ) কেটে নেওয়া হয়। একই সাথে, প্রবণতার শক্তি নির্ধারণে সহায়তা করার জন্য একটি 14 পিরিয়ডের আরএসআই সূচক গণনা করা হয়। যখন গড় এমএসিডি হিস্টোগ্রাম নেতিবাচক থেকে ইতিবাচক দিকে স্থানান্তরিত হয়, যখন আরএসআই 55 এর নীচে থাকে এবং সেখানে একটি উত্থান হয়। বিপরীতভাবে, যখন গড় এমএসিডি হিস্টোগ্রাম ইতিবাচক থেকে নেতিবাচক দিকে পরিবর্তিত হয়, যখন আরএসআই 45 এর উপরে থাকে এবং সেখানে একটি সারিবদ্ধকরণ কৌশল থাকে তখন একটি ঘনিষ্ঠ সংকেত সক্রিয় হয়। উপরন্তু, মোমবাতিগুলির দৈর্ঘ্য এবং

সুবিধা বিশ্লেষণ

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

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

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

অপ্টিমাইজেশান নির্দেশাবলী

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

সংক্ষিপ্তসার

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


/*backtest
start: 2023-03-23 00:00:00
end: 2024-03-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="TrippleMACD", shorttitle="TrippleMACD + RSI strategy", format=format.price, precision=4, overlay=true)

// RSI 
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
showDivergence = input.bool(false, title="Show Divergence", group="RSI Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"

bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)

// Divergence
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
bearColor = color.red
bullColor = color.green
textColor = color.white
noneColor = color.new(color.white, 100)

plFound = na(ta.pivotlow(rsi, lookbackLeft, lookbackRight)) ? false : true
phFound = na(ta.pivothigh(rsi, lookbackLeft, lookbackRight)) ? false : true
_inRange(cond) =>
	bars = ta.barssince(cond == true)
	rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Regular Bullish
// rsi: Higher Low

rsiHL = rsi[lookbackRight] > ta.valuewhen(plFound, rsi[lookbackRight], 1) and _inRange(plFound[1])

// Price: Lower Low

priceLL = low[lookbackRight] < ta.valuewhen(plFound, low[lookbackRight], 1)
bullCondAlert = priceLL and rsiHL and plFound
bullCond = showDivergence and bullCondAlert

// rsi: Lower High

rsiLH = rsi[lookbackRight] < ta.valuewhen(phFound, rsi[lookbackRight], 1) and _inRange(phFound[1])

// Price: Higher High

priceHH = high[lookbackRight] > ta.valuewhen(phFound, high[lookbackRight], 1)

bearCondAlert = priceHH and rsiLH and phFound
bearCond = showDivergence and bearCondAlert

// Getting inputs
stopLuse          = input(1.040)
fast_length = input(title = "Fast Length", defval = 5)
slow_length = input(title = "Slow Length", defval = 8)
fast_length2 = input(title = "Fast Length2", defval = 13)
slow_length2 = input(title = "Slow Length2", defval = 21)
fast_length3 = input(title = "Fast Length3", defval = 34)
slow_length3 = input(title = "Slow Length3", defval = 144)
fast_length4 = input(title = "Fast Length3", defval = 68)
slow_length4 = input(title = "Slow Length3", defval = 288)
src = input(title = "Source", defval = close)
signal_length2 = input.int(title="Signal Smoothing", minval = 1, maxval = 200, defval = 11)
signal_length = input.int(title = "Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title = "Oscillator MA Type",  defval = "EMA", options = ["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)

fast_ma2 = sma_source == "SMA2" ? ta.sma(src, fast_length2) : ta.ema(src, fast_length2)
slow_ma2 = sma_source == "SMA2" ? ta.sma(src, slow_length2) : ta.ema(src, slow_length2)

fast_ma3 = sma_source == "SMA3" ? ta.sma(src, fast_length3) : ta.ema(src, fast_length3)
slow_ma3 = sma_source == "SMA3" ? ta.sma(src, slow_length3) : ta.ema(src, slow_length3)

fast_ma4 = sma_source == "SMA3" ? ta.sma(src, fast_length3) : ta.ema(src, fast_length3)
slow_ma4 = sma_source == "SMA3" ? ta.sma(src, slow_length3) : ta.ema(src, slow_length3)

macd = fast_ma - slow_ma
macd2 = fast_ma2 - slow_ma2
macd3 = fast_ma3 - slow_ma3
macd4 = fast_ma4 - slow_ma4

signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
signal2 = sma_signal == "SMA" ? ta.sma(macd2, signal_length) : ta.ema(macd2, signal_length)
signal3 = sma_signal == "SMA" ? ta.sma(macd3, signal_length) : ta.ema(macd3, signal_length)
signal4 = sma_signal == "SMA" ? ta.sma(macd4, signal_length) : ta.ema(macd4, signal_length)
//hist = (macd + macd2 + macd3)/1 - (signal + signal2 + signal3)/1
hist = (macd + macd2 + macd3 + macd4)/4 - (signal + signal2 + signal3 + signal4)/4
signal5 = (signal + signal2 + signal3)/3

sma_signal2 = input.bool(title="Simple MA (Signal Line)", defval=true)

lin_reg = input.bool(title="Lin Reg", defval=true)
linreg_length = input.int(title="Linear Regression Length", minval = 1, maxval = 200, defval = 11)

bopen = lin_reg ? ta.linreg(open, linreg_length, 0) : open
bhigh = lin_reg ? ta.linreg(high, linreg_length, 0) : high
blow = lin_reg ? ta.linreg(low, linreg_length, 0) : low
bclose = lin_reg ? ta.linreg(close, linreg_length, 0) : close

shadow = (bhigh - bclose) + (bopen - blow)
body = bclose - bopen
perc = (shadow/body)
cond2 = perc >=2 and bclose+bclose[1]/2 > bopen+bopen[1]/2

r = bopen < bclose

//signal5 = sma_signal2 ? ta.sma(bclose, signal_length) : ta.ema(bclose, signal_length)
plotcandle(r ? bopen : na, r ? bhigh : na, r ? blow: na, r ? bclose : na, title="LinReg Candles", color= color.green, wickcolor=color.green, bordercolor=color.green, editable= true)
plotcandle(r ? na : bopen, r ? na : bhigh, r ? na : blow, r ? na : bclose, title="LinReg Candles", color=color.red, wickcolor=color.red, bordercolor=color.red, editable= true)
//alertcondition(hist[1] >= 0 and hist < 0, title = 'Rising to falling', message = 'The MACD histogram switched from a rising to falling state')
//alertcondition(hist[1] <= 0 and hist > 0, title = 'Falling to rising', message = 'The MACD histogram switched from a falling to rising state')

green = hist >= 0 ? (hist[1] < hist ? "G" : "GL") : (hist[1] < hist ? "RL" : "R")
Buy = green == "G" and green[1] != "G" and green[1] != "GL" and bopen < bclose and rsi < 55.0 //and not cond2
//StopBuy = (green == "R" or green == "RL" or green == "RL") and bopen > bclose and bopen[1] < bclose[1]
StopBuy = bopen > bclose and bopen[1] < bclose[1] and (green == "G" or green == "GL" or green == "R") and bopen[2] < bclose[2] and bopen[3] < bclose[3]
hists = close[3] < close[2] and close[2] < close[1]
//Buy = green == "RL" and hist[0] > -0.07 and hist[0] < 0.00 and rsi < 55.0 and hists
//StopBuy = green == "GL" or green == "R"
alertcondition(Buy, "Long","Покупка в лонг")
alertcondition(StopBuy, "StopLong","Закрытие сделки")

//hline(0, "Zero Line", color = color.new(#787B86, 50))
plot(hist + (close - (close * 0.03)), title = "Histogram", style = plot.style_line, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252)))
plotshape(Buy ? low : na, 'Buy', shape.labelup, location.belowbar , color=color.new(#0abe40, 50), size=size.small, offset=0)
plotshape(StopBuy ? low : na, 'Buy', shape.cross, location.abovebar , color=color.new(#be0a0a, 50), size=size.small, offset=0)
plot(macd4  + (close - (close * 0.01)),   title = "MACD",   color = #2962FF)
plot(signal5 + (close - (close * 0.01)), title = "Signal", color = #FF6D00)

plotchar(cond2 , char='↓', color = color.rgb(0, 230, 119), text = "-")

if (Buy)
    strategy.entry("long", strategy.long)

// if (startShortTrade)
//     strategy.entry("short", strategy.short)

profitTarget = strategy.position_avg_price * stopLuse
strategy.exit("Take Profit", "long", limit=profitTarget)
// strategy.exit("Take Profit", "short", limit=profitTarget)

আরো