অ্যাডাপ্টিভ মুভিং এভারেজ ট্রেডিং কৌশল

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

img

সারসংক্ষেপ

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

কৌশলগত যুক্তি

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

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

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

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

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

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

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

সিদ্ধান্ত

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

//
//---------------------------------------------
//* Author - PPSingnal
//* http://ppsignal.com
//---------------------------------------------
//
//

strategy (title="PPSignal V4 (Auto Adaptive Times)", shorttitle="PPSignal V4", overlay=true)
delayOffset = input(defval = 0, title = "Delay Open/Close MA (Forces Non-Repainting)", minval = 0, step = 1)

//----------------------------------------    INICIO PPI     ----------------------------------------

// - PARÁMETROS DE ENTRADA
// SE DEFINE LA RESOLUCIÓN
useRes1 = true
setRes1 = true


tf = timeframe.period == "60" ? 4 : timeframe.period == "240" ? 4 : timeframe.period == "D" ? 4 : timeframe.period == "W" ?4 : 4


// PRIMER DEMA
type   = "DEMA"
src   = close
len    = tf
off   = 0
lsma   = 0
// SEGUNDA DEMA
type2   = "DEMA"
src2    = open
len2    = tf
off2    = 0
lsma2   = 0

// - INPUTS END

//----------------------------------------    INICIO FUNCIONES     ----------------------------------------

// RETORNA UNA MEDIA MOVIL (TYPE=TIPO / SRC = TIPO DE PRECIO / LEN=LONGITUD / LSMA=0)
variant(type, src, len, lsma) =>
    v1 = sma(src, len)                                                  // Simple
    v2 = ema(src, len)                                                  // Exponential
    v3 = wma(src, len)                                                  // Weighted
    v4 = vwma(src, len)                                                 // Volume Weighted
    v5 = na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len    // Smoothed
    v6 = 2 * v2 - ema(v2, len)                                          // Double Exponential
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)               // Triple Exponential
    v8 = wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))   // Hull
    v9 = linreg(src, len, lsma)                                         // Least Squares
    // return variant, defaults to SMA if input invalid.
    type=="EMA"?v2 : type=="WMA"?v3 : type=="VWMA"?v4 : type=="SMMA"?v5 : type=="DEMA"?v6 : type=="TEMA"?v7 : type=="HullMA"?v8 : type=="LSMA"?v9 : v1

// SuperSmoother filter
    // © 2013  John F. Ehlers
    a1 = exp(-1.414*3.14159 / len)
    b1 = 2*a1*cos(1.414*3.14159 / len)
    c2 = b1
    c3 = (-a1)*a1
    c1 = 1 - c2 - c3
    v12 = 0.0
    v12 := c1*(src + nz(src[1])) / 2 + c2*nz(v12[1]) + c3*nz(v12[2])
   

// RETORNA LA RESOLUCIÓN SETEADA Y SINO LA DEFAULT
// 3H:      1min - 3min - 5min - 15min
// DIARIO:  30 - 45 - 60
// SEMANAL: 120 - 180 - 240 - D


reso(exp, use, res) => use ? request.security(syminfo.tickerid, timeframe.period=="1" ? "D" : timeframe.period=="3" ? "D" : timeframe.period=="5" ? "D" : timeframe.period=="15" ? "D" : timeframe.period=="30" ? "D" : timeframe.period=="45" ? "W" : timeframe.period=="60" ? "W" : timeframe.period=="120" ? "W" : timeframe.period=="180" ? "W" : timeframe.period=="240" ? "W" : timeframe.period=="D" ? "W" : "W", exp) : exp




//----------------------------------------    FIN FUNCIONES     ----------------------------------------

//----------------------------------------    INICIO VARIABLES     ----------------------------------------

// DEMAS
ma_short    = reso(variant(type, src[off], len, lsma), useRes1, setRes1)
ma_long     = reso(variant(type2, src2[off2], len2, lsma2), useRes1, setRes1)


//----------------------------------------    FIN VARIABLES     ----------------------------------------


//----------------------------------------    FIN PPI     ----------------------------------------

//----------------------------------------    PRIMER FILTRO      ----------------------------------------
// Double HullMA
scolor      = false

n=1
n2ma=2*wma(close,round(n/2))
nma=wma(close,n)
diff=n2ma-nma
sqn=round(sqrt(n))

n2ma1=2*wma(close[1],round(n/2))
nma1=wma(close[1],n)
diff1=n2ma1-nma1
sqn1=round(sqrt(n))

n1=wma(diff,sqn)
n2=wma(diff1,sqn)

//----------------------------------------    FIN PRIMER FILTRO     ----------------------------------------

//----------------------------------------    INICIO CONDICIONES      ----------------------------------------

// CONDICION CON FILTRO
cruce= (ma_short > ma_long) and n1>n2 ? true : ma_short < ma_long ? false : cruce[1]
// Condition

// FONDO DE COLOR
bground = cruce ? white : red
bgcolor(bground, transp=90)


// BARRAS COLOREADAS
barcol = cruce ? yellow : red 
barcolor(barcol, transp=0)

closePlot   = plot(ma_short, title = "Zone 1", color = gray, circles = 0, style = circles, transp = 100)
openPlot   = plot(ma_long, title = "Zone 2", color = green, circles = 0, style = circles, transp = 100)
trendState  = ma_short > ma_long ? true : ma_short < ma_long ? false : trendState[1]

// channel fill
closePlotU  = plot(trendState ? ma_short : na, transp = 100, editable = false)
openPlotU   = plot(trendState ? ma_long : na, transp = 100, editable = false)
closePlotD  = plot(trendState ? na : ma_short, transp = 100, editable = false)
openPlotD   = plot(trendState ? na : ma_long, transp = 100, editable = false)

fill(openPlotU, closePlotU, title = "Up Trend Fill", color = yellow, transp = 70)
fill(openPlotD, closePlotD, title = "Down Trend Fill", color = red, transp = 70)




//----------------------------------------    FIN CONDICIONES     ----------------------------------------

//----------------------------------------    INICIO ESTRATEGIA      ----------------------------------------

//CONDICION COMPRA
longCond    = (ma_short > ma_long) and n1>=n2

//CONDICION VENTA

shortCond    = (ma_short < ma_long)

//ABRO COMPRA A
strategy.entry("Bull Trend", strategy.long, when = longCond)

//ABRO VENTA A
strategy.entry("Bearish Trend", strategy.short, when = shortCond)

//CIERRO VENTA A
strategy.exit("Exit Short", from_entry = "Bull Trend", when = shortCond)

//CIERRO COMPRA A
strategy.exit("Exit Long", from_entry = "Bearish Trend", when = longCond)

//----------------------------------------    FIN ESTRATEGIA     ----------------------------------------





আরো