হাই ফ্রিকোয়েন্সি ক্রিপ্টোকারেন্সি ট্রেডিং কৌশল TrippleMACD ক্রসওভার এবং আপেক্ষিক শক্তি সূচক একত্রিত

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

img

সারসংক্ষেপ

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

কৌশল নীতি

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

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

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

  1. মাল্টি-টাইমফ্রেম বিশ্লেষণঃ বিভিন্ন প্যারামিটার সহ তিনটি MACD সূচক ব্যবহার করে, কৌশলটি বিভিন্ন সময় স্কেলে প্রবণতা সংকেতগুলি ক্যাপচার করতে পারে, ব্যবসায়ের নির্ভুলতা এবং নির্ভরযোগ্যতা উন্নত করে।

  2. সিগন্যাল সমতলকরণঃ তিনটি এমএসিডি সূচকগুলির সিগন্যাল লাইনগুলির গড় কার্যকরভাবে গোলমালকে সমতলকরণ করে, একক সূচক দ্বারা উত্পন্ন হতে পারে এমন বিভ্রান্তিকর সংকেতগুলি এড়ানো।

  3. প্রবণতা নিশ্চিতকরণঃ উত্থানমুখী প্রবণতার শক্তি নিশ্চিত করার জন্য RSI সূচক অন্তর্ভুক্ত করা ট্রেডিং সংকেতগুলির নির্ভরযোগ্যতা আরও বাড়িয়ে তোলে।

  4. একত্রীকরণের সনাক্তকরণঃ বাজারে একত্রীকরণের পর্যায়ে সনাক্তকরণের জন্য রৈখিক পুনরাবৃত্তি ব্যবহার করে কৌশলটি অস্থির বাজারের অবস্থার সময় ট্রেডিং এড়ানোর অনুমতি দেয়, কৌশলটির ঝুঁকি হ্রাস করে।

  5. অটোমেটেড ট্রেডিংঃ কৌশলটি ১ মিনিটের সময়সীমার মধ্যে অটোমেটেড ট্রেডিংয়ের জন্য ডিজাইন করা হয়েছে, যা বাজারের পরিবর্তনের দ্রুত প্রতিক্রিয়া এবং কার্যকর ট্রেড এক্সিকিউশন সক্ষম করে।

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

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

  2. অতিরিক্ত ফিটিং ঝুঁকিঃ নির্দিষ্ট ঐতিহাসিক তথ্যের উপর কৌশলটি ভালভাবে কাজ করতে পারে কিন্তু প্রকৃত প্রয়োগে বাজারের পরিবর্তনের সাথে মানিয়ে নিতে ব্যর্থ হতে পারে, যা কৌশল ব্যর্থতার দিকে পরিচালিত করে।

  3. ব্ল্যাক সোয়ান ইভেন্টসঃ কৌশলটি মূলত প্রযুক্তিগত সূচকগুলির উপর নির্ভর করে এবং উল্লেখযোগ্য মৌলিক ইভেন্টগুলিতে পর্যাপ্ত প্রতিক্রিয়া জানাতে পারে না, যা চরম বাজারের অবস্থার মধ্যে দুর্বল পারফরম্যান্সের দিকে পরিচালিত করতে পারে।

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

  1. ডায়নামিক প্যারামিটার সমন্বয়ঃ বিভিন্ন বাজারের পরিবেশের সাথে মানিয়ে নিতে বাজারের অবস্থার পরিবর্তনের উপর ভিত্তি করে ম্যাকডের সূচকগুলির দ্রুত এবং ধীর লাইন সময়কাল এবং আরএসআই সূচকের সময়কালের মতো কৌশলটির প্যারামিটারগুলিকে গতিশীলভাবে সামঞ্জস্য করুন।

  2. অতিরিক্ত সূচক অন্তর্ভুক্ত করুনঃ বিদ্যমান MACD এবং RSI সূচক ছাড়াও, ট্রেডিং সংকেতগুলির নির্ভুলতা এবং নির্ভরযোগ্যতা আরও উন্নত করার জন্য, অন্যান্য প্রযুক্তিগত সূচকগুলি যেমন বোলিংজার ব্যান্ড এবং চলমান গড়গুলি অন্তর্ভুক্ত করার বিষয়টি বিবেচনা করুন।

  3. ঝুঁকি ব্যবস্থাপনা অপ্টিমাইজেশনঃ কৌশলটির সামগ্রিক ঝুঁকি হ্রাস করার জন্য কৌশলটিতে আরও বিস্তৃত ঝুঁকি ব্যবস্থাপনা ব্যবস্থা যেমন গতিশীল স্টপ-লস এবং অবস্থান পরিচালনা বাস্তবায়ন করুন।

  4. মেশিন লার্নিং অপ্টিমাইজেশানঃ কৌশলটির পরামিতি এবং ট্রেডিং নিয়মগুলিকে অনুকূল করার জন্য নিউরাল নেটওয়ার্ক এবং সমর্থন ভেক্টর মেশিনগুলির মতো মেশিন লার্নিং অ্যালগরিদম ব্যবহার করুন, কৌশলটির অভিযোজনযোগ্যতা এবং দৃust়তা বাড়িয়ে তুলুন।

সিদ্ধান্ত

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


/*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=5
//indicator("Triplle",shorttitle="Triplle MACD", overlay=true, scale = scale.none)
//indicator("Triplle","TrippleMACD",true)
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"

//rsiPlot = plot(rsi, "RSI", color=#7E57C2)
//plot(rsiMA, "RSI-based MA", color=color.yellow)
//rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
//midline = hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
//rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
//fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
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)
//fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill")

//midLinePlot = plot(50, color = na, editable = false, display = display.none)
//fill(rsiPlot, midLinePlot, 100, 70, top_color = color.new(color.green, 0), bottom_color = color.new(color.green, 100),  title = "Overbought Gradient Fill")
//fill(rsiPlot, midLinePlot, 30,  0,  top_color = color.new(color.red, 100), bottom_color = color.new(color.red, 0),      title = "Oversold Gradient Fill")

// 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

// plot(
//      plFound ? rsi[lookbackRight] : na,
//      offset=-lookbackRight,
//      title="Regular Bullish",
//      linewidth=2,
//      color=(bullCond ? bullColor : noneColor)
//      )

// plotshape(
// 	 bullCond ? rsi[lookbackRight] : na,
// 	 offset=-lookbackRight,
// 	 title="Regular Bullish Label",
// 	 text=" Bull ",
// 	 style=shape.labelup,
// 	 location=location.absolute,
// 	 color=bullColor,
// 	 textcolor=textColor
// 	 )

//------------------------------------------------------------------------------
// Regular Bearish
// 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

// plot(
// 	 phFound ? rsi[lookbackRight] : na,
// 	 offset=-lookbackRight,
// 	 title="Regular Bearish",
// 	 linewidth=2,
// 	 color=(bearCond ? bearColor : noneColor)
// 	 )

// plotshape(
// 	 bearCond ? rsi[lookbackRight] : na,
// 	 offset=-lookbackRight,
// 	 title="Regular Bearish Label",
// 	 text=" Bear ",
// 	 style=shape.labeldown,
// 	 location=location.absolute,
// 	 color=bearColor,
// 	 textcolor=textColor
// 	 )
// END RSI

// 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)

আরো